lgogdownloader/man/lgogdownloader.1
Sude e5d2c87676 Galaxy: Refactor CDN priority handling
Make CDN url template handling more generic
Add option to list available CDNs
Change default Galaxy CDN priority to "edgecast,akamai_edgecast_proxy,fastly"
2024-08-22 13:05:50 +03:00

806 lines
21 KiB
Groff

.TH LGOGDOWNLOADER "1" "2024-06-04" "LGOGDownloader 3.14" "User Commands"
.SH NAME
LGOGDownloader \- manual page for LGOGDownloader 3.14
.SH SYNOPSIS
.B lgogdownloader
[\fIOPTION\fP]...
.SH DESCRIPTION
An open-source GOG.com downloader for Linux users which uses the same API as GOG Galaxy.
.PP
LGOGDownloader can download purchased games, query GOG.com to see if game files have changed,
as well as downloading extras such as artwork and manuals. It is capable of downloading
language-specific installers for games where they exist.
.PP
LGOGDownloader
Options:
.TP
\fB\-h\fR [ \fB\-\-help\fR ]
Print help message
.TP
\fB\-\-version\fR
Print version information
.TP
\fB\-\-login\fR
Login
.TP
\fB\-\-gui\-login\fR
Login (force GUI login)
.br
Implies \fB\-\-enable\-login\-gui\fR
.TP
\fB\-\-check\-login\-status\fR
Check login status
.TP
\fB\-\-list\fR [=arg(=games)]
List games/tags
.br
Games = g|games
.br
Details = d|details
.br
JSON = j|json
.br
Tags = t|tags
.br
Transformations = tr|transform|transformations
.br
User data = ud|userdata
.
.TP
\fB\-\-download\fR
Download
.TP
\fB\-\-repair\fR
Repair downloaded files
Use \fB\-\-repair\fR \fB\-\-download\fR to redownload files when filesizes don't match
(possibly different version). Redownload will rename the old file (appends .old to filename)
.TP
\fB\-\-game\fR arg
Set regular expression filter
for download/list/repair (Perl syntax)
.TP
\fB\-\-create\-xml\fR [=arg(=automatic)]
Create GOG XML for file
.br
"automatic" to enable automatic XML creation
.TP
\fB\-\-notifications\fR
Check notifications
.TP
\fB\-\-updated\fR
List/download only games with update
flag set
.TP
\fB\-\-new\fR
List/download only games with new flag
set
.TP
\fB\-\-clear\-update\-flags\fR
Clear update notification flags
.TP
\fB\-\-check\-orphans\fR arg
Check for orphaned files (files found on local filesystem that are not found on GOG servers).
Sets regular expression filter (Perl syntax) for files to check. If no argument is given
then the regex defaults to \&'.*\e.(zip|exe|bin|dmg|old|deb|tar\e.gz|pkg|sh|mp4)$'
.TP
\fB\-\-delete\-orphans\fR
Delete orphaned files during
\fB\-\-check\-orphans\fR and \fB\-\-galaxy\-install\fR
.TP
\fB\-\-status\fR
Show status of files
.sp 1
Output format:
.br
statuscode gamename filename filesize filehash
.sp 1
Status codes:
.br
OK \- File is OK
.br
ND \- File is not downloaded
.br
MD5 \- MD5 mismatch, different version
.br
FS \- File size mismatch, incomplete download
.nf
.IP
See also \fB\-\-no\-fast\-status\-check\fR option
.TP
\fB\-\-save\-config\fR
Create config file with current settings
.TP
\fB\-\-reset\-config\fR
Reset config settings to default
.TP
\fB\-\-report\fR [=arg(=lgogdownloader\-report.log)]
Save report of downloaded/repaired files to specified file
.br
Default filename: lgogdownloader\-report\&.log
.TP
\fB\-\-update\-cache\fR
Update game details cache
.TP
\fB\-\-no\-platform\-detection\fR
Don't try to detect supported platforms from game shelf.
.br
Skips the initial fast platform detection and detects the supported platforms
from game details which is slower but more accurate.
.br
Useful in case platform identifier is missing for some games in the game shelf.
.br
Using \fB\-\-platform\fR with \fB\-\-list\fR doesn't work with this option.
.TP
\fB\-\-download\-file\fR arg
Download files using fileid
.sp 1
Format:
.br
"gamename/fileid"
.br
"gamename/dlc_gamename/fileid"
.br
"gogdownloader://gamename/fileid"
.br
"gogdownloader://gamename/dlc_name/fileid"
.sp 1
Multiple files:
.br
"gamename1/fileid1,gamename2/fileid2,gamename2/dlcname/fileid1"
.sp 1
This option ignores all subdir options.
.br
The files are downloaded to directory specified with \fB\-\-directory\fR option.
.TP
\fB\-o\fR [ \fB\-\-output\-file\fR ] arg
Set filename of file downloaded with \fB\-\-download\-file\fR.
.TP
\fB\-\-wishlist\fR
Show wishlist
.TP
\fB\-\-cacert\fR arg
Path to CA certificate bundle in PEM format
.TP
\fB\-\-respect\-umask\fR
Do not adjust permissions of sensitive files
.TP
\fB\-\-user\-agent\fR arg (=LGOGDownloader/3.14 (Linux x86_64))
Set user agent
.TP
\fB\-\-wine\-prefix\fR arg (=.)
Set wineprefix directory
.TP
\fB\-\-cloud\-whitelist\fR arg
Include this list of cloud saves, by default all cloud saves are included
.sp 1
Example: \fB\-\-cloud\-whitelist\fR saves/AutoSave\-0 saves/AutoSave\-1/screenshot.png
.TP
\fB\-\-cloud\-blacklist\fR arg
Exclude this list of cloud saves
.br
Example: \fB\-\-cloud\-blacklist\fR saves/AutoSave\-0 saves/AutoSave\-1/screenshot.png
.TP
\fB\-\-cloud\-force\fR
Download or Upload cloud saves even if they're up\-to\-date
.br
Delete remote cloud saves even if no saves are whitelisted
.TP
\fB\-\-enable\-login\-gui\fR
Enable login GUI when encountering reCAPTCHA on login form
.TP
\fB\-\-tag\fR arg
Filter using tags. Separate with "," to use multiple values
.TP
\fB\-\-blacklist\fR arg (=$XDG_CONFIG_HOME/lgogdownloader/blacklist.txt)
Filepath to blacklist
.TP
\fB\-\-ignorelist\fR arg (=$XDG_CONFIG_HOME/lgogdownloader/ignorelist.txt)
Filepath to ignorelist
.TP
\fB\-\-directory\fR arg (=.)
Set download directory
.TP
\fB\-\-limit\-rate\fR arg (=0)
Limit download rate to value in kB
.br
0 = unlimited
.TP
\fB\-\-xml\-directory\fR arg
Set directory for GOG XML files
.TP
\fB\-\-chunk\-size\fR arg (=10)
Chunk size (in MB) when creating XML
.TP
\fB\-\-platform\fR arg (=w+l)
Select which installers are downloaded
.br
Windows = w|win|windows
.br
Mac = m|mac|osx
.br
Linux = l|lin|linux
.br
All = all
.sp 1
Set priority by separating values with ","
.br
Combine values by separating with "+"
.br
Example: Linux if available otherwise Windows and Mac: l,w+m
.TP
\fB\-\-language\fR arg (=en)
Select which language installers are downloaded
.br
.br
See \fBLANGUAGES\fR section for available values
.br
All languages = all
.sp 1
Set priority by separating values with ","
.br
Combine values by separating with "+"
.br
Example: German if available otherwise English and French:
.br
\-\-language de,en+fr
.TP
\fB\-\-no\-remote\-xml\fR
Don't use remote XML for repair
.TP
\fB\-\-no\-unicode\fR
Don't use Unicode in the progress bar
.TP
\fB\-\-no\-color\fR
Don't use coloring in the progress bar or status messages
.TP
\fB\-\-no\-duplicate\-handling\fR
Don't use duplicate handler for installers
.br
Duplicate installers from different languages are handled separately
.TP
\fB\-\-no\-subdirectories\fR
Don't create subdirectories for extras, patches and language packs
.TP
\fB\-\-curl\-verbose\fR
Set libcurl to verbose mode
.TP
\fB\-\-insecure\fR
Don't verify authenticity of SSL certificates
.TP
\fB\-\-timeout\fR arg (=10)
Set timeout for connection
.br
Maximum time in seconds that connection phase is allowed to take
.TP
\fB\-\-retries\fR arg (=3)
Set maximum number of retries on failed download
.TP
\fB\-\-wait\fR arg (=0)
Time to wait between requests (milliseconds)
.TP
\fB\-\-subdir\-installers\fR arg
Set subdirectory for installers
.br
Templates:
.br
\- %platform%
.br
\- %gamename%
.br
\- %gamename_firstletter%
.br
\- %dlcname%
.br
\- %gamename_transformed%
.br
\- %gamename_transformed_firstletter%
.TP
\fB\-\-subdir\-extras\fR arg (=extras)
Set subdirectory for extras
.br
See \fB\-\-subdir\-installers\fR for template values
.TP
\fB\-\-subdir\-patches\fR arg (=patches)
Set subdirectory for patches
.br
See \fB\-\-subdir\-installers\fR for template values
.TP
\fB\-\-subdir\-language\-packs\fR arg (=languagepacks)
Set subdirectory for language packs
.br
See \fB\-\-subdir\-installers\fR for template values
.TP
\fB\-\-subdir\-dlc\fR arg (=dlc/%dlcname%)
Set subdirectory for dlc
.br
See \fB\-\-subdir\-installers\fR for template values
.TP
\fB\-\-subdir\-game\fR arg (=%gamename%)
Set subdirectory for game
.br
See \fB\-\-subdir\-installers\fR for template values
.TP
\fB\-\-use\-cache\fR
Use game details cache
.TP
\fB\-\-cache\-valid\fR arg (=2880)
Set how long cached game details are valid (in minutes)
.br
Default: 2880 minutes (48 hours)
.TP
\fB\-\-save\-serials\fR
Save serial numbers when downloading
.TP
\fB\-\-save\-game\-details\-json\fR
Save game details JSON data as\-is to "game\-details.json"
.TP
\fB\-\-save\-product\-json\fR
Save product info JSON data from the API as\-is to "product.json"
.TP
\fB\-\-save\-logo\fR
Save logo when downloading
.TP
\fB\-\-save\-icon\fR
Save icon when downloading
.TP
\fB\-\-ignore\-dlc\-count\fR [=arg(=.*)]
Set regular expression filter for games to ignore DLC count information
.br
Ignoring DLC count information helps in situations where the account page
doesn't provide accurate information about DLCs
.TP
\fB\-\-include\fR arg (=all)
Select what to download/list/repair
.br
Base game installers = bi|basegame_installers
.br
Base game extras = be|basegame_extras
.br
Base game patches = bp|basegame_patches
.br
Base game language packs = bl|basegame_languagepacks|basegame_langpacks
.br
DLC installers = di|dlc_installers
.br
DLC extras = de|dlc_extras
.br
DLC patches = dp|dlc_patches
.br
DLC language packs = dl|dlc_languagepacks|dlc_langpacks
.br
DLCs = d|dlc|dlcs
.br
Basegame = b|bg|basegame
.br
All installers = i|installers
.br
All extras = e|extras
.br
All patches = p|patches
.br
All language packs = l|languagepacks|langpacks
.br
All = all
.br
Separate with "," to use multiple values
.TP
\fB\-\-exclude\fR arg
Select what not to download/list/repair
.br
See \fB\-\-include\fR for option values
.TP
\fB\-\-automatic\-xml\-creation\fR
Automatically create XML data after download has completed
.TP
\fB\-\-save\-changelogs\fR
Save changelogs when downloading
.TP
\fB\-\-threads\fR arg (=4)
Number of download threads
.TP
\fB\-\-info\-threads\fR arg (=4)
Number of threads for getting product info
.TP
\fB\-\-use\-dlc\-list\fR
Use DLC list specified with \fB\-\-dlc\-list\fR
.TP
\fB\-\-dlc\-list\fR arg (=https://raw.githubusercontent.com/Sude\-/lgogdownloader\-lists/master/game_has_dlc.txt)
Set URL for list of games that have DLC
.TP
\fB\-\-progress\-interval\fR arg (=100)
Set interval for progress bar update (milliseconds)
.br
Value must be between 1 and 10000
.TP
\fB\-\-lowspeed\-timeout\fR arg (=30)
Set time in number seconds that the transfer speed should be below the rate
.br
Set with \fB\-\-lowspeed\-rate\fR for it to considered too slow and aborted
.TP
\fB\-\-lowspeed\-rate\fR arg (=200)
Set average transfer speed in bytes per second that the transfer should be
below during time specified with \fB\-\-lowspeed\-timeout\fR for it to be
considered too slow and aborted
.TP
\fB\-\-include\-hidden\-products\fR
Include games that have been set hidden in account page
.TP
\fB\-\-size\-only\fR
Don't check the hashes of the files whose size matches that on the server
.TP
\fB\-\-verbosity\fR arg (=0)
Set message verbosity level
.br
\-1 = Less verbose
.br
0 = Default
.br
1 = Verbose
.br
2 = Debug
.TP
\fB\-\-check\-free\-space\fR
Check for available free space before starting download
.TP
\fB\-\-no\-fast\-status\-check\fR
Don't use fast status check.
.br
Makes \fB\-\-status\fR much slower but able to catch corrupted files by calculating
local file hash for all files.
.TP
\fB\-\-trust\-api\-for\-extras\fR
Trust API responses for extras to be correct.
.SS "Experimental:"
.TP
\fB\-\-galaxy\-install\fR arg
Install game using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-show\-builds\fR arg
Show game builds using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build
.br
Lists available builds if build index is not specified
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-download\-cloud\-saves\fR arg
Download cloud saves using product\-id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-upload\-cloud\-saves\fR arg
Upload cloud saves using product\-id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-show\-cloud\-saves\fR arg
Show game cloud\-saves using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
..br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-show\-local\-cloud\-saves\fR arg
Show local cloud\-saves using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-delete\-cloud\-saves\fR arg
Delete cloud\-saves using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.TP
\fB\-\-galaxy\-platform\fR arg (=w)
Select platform
.br
Windows = w|win|windows
.br
Mac = m|mac|osx
.br
Linux = l|lin|linux
.br
.TP
\fB\-\-galaxy\-language\fR arg (=en)
Select language
.br
See \fBLANGUAGES\fR section for available values
.TP
\fB\-\-galaxy\-arch\fR arg (=x64)
Select architecture
.br
32\-bit = 32|x86|32bit|32\-bit
.br
64\-bit = 64|x64|64bit|64\-bit
.TP
\fB\-\-galaxy\-no\-dependencies\fR
Don't download dependencies during \fB\-\-galaxy\-install\fR
.TP
\fB\-\-subdir\-galaxy\-install\fR arg (=%install_dir%)
Set subdirectory for galaxy install
.sp 1
Templates:
.br
\- %install_dir% = Installation directory from Galaxy API response
.br
\- %gamename% = Game name
.br
\- %title% = Title of the game
.br
\- %product_id% = Product id of the game
.br
\- %install_dir_stripped% = %install_dir% with some characters stripped
.br
\- %title_stripped% = %title% with some characters stripped
.sp 1
"stripped" means that every character that doesn't match the following list
is removed:
.br
> alphanumeric
.br
> space
.br
> \- _ . ( ) [ ] { }
.TP
\fB\-\-galaxy\-cdn\-priority\fR arg (=edgecast,akamai_edgecast_proxy,fastly)
Set priority for used CDNs
.br
Use \-\-galaxy\-list\-cdns to list available CDNs
.br
Set priority by separating values with ","
.TP
\fB\-\-galaxy\-list-cdns\fR arg
List available CDNs for a game using product id [product_id/build_index] or
gamename regex [gamename/build_id]
.br
Build index is used to select a build and defaults to 0 if not specified.
.br
Example: 12345/2 selects build 2 for product 12345
.br
.SH LANGUAGES
Languages available to select with \fB\-\-language\fR and \fB\-\-galaxy\-language\fR options
.br
English = en|eng|english|en[_\-]US
.br
German = de|deu|ger|german|de[_\-]DE
.br
French = fr|fra|fre|french|fr[_\-]FR
.br
Polish = pl|pol|polish|pl[_\-]PL
.br
Russian = ru|rus|russian|ru[_\-]RU
.br
Chinese = cn|zh|zho|chi|chinese|zh[_\-](CN|Hans)
.br
Czech = cz|cs|ces|cze|czech|cs[_\-]CZ
.br
Spanish = es|spa|spanish|es[_\-]ES
.br
Hungarian = hu|hun|hungarian|hu[_\-]HU
.br
Italian = it|ita|italian|it[_\-]IT
.br
Japanese = jp|ja|jpn|japanese|ja[_\-]JP
.br
Turkish = tr|tur|turkish|tr[_\-]TR
.br
Portuguese = pt|por|portuguese|pt[_\-]PT
.br
Korean = ko|kor|korean|ko[_\-]KR
.br
Dutch = nl|nld|dut|dutch|nl[_\-]NL
.br
Swedish = sv|swe|swedish|sv[_\-]SE
.br
Norwegian = no|nor|norwegian|nb[_\-]no|nn[_\-]NO
.br
Danish = da|dan|danish|da[_\-]DK
.br
Finnish = fi|fin|finnish|fi[_\-]FI
.br
Brazilian Portuguese = br|pt_br|pt\-br|ptbr|brazilian_portuguese
.br
Slovak = sk|slk|slo|slovak|sk[_\-]SK
.br
Bulgarian = bl|bg|bul|bulgarian|bg[_\-]BG
.br
Ukrainian = uk|ukr|ukrainian|uk[_\-]UA
.br
Spanish (Latin American) = es_mx|es\-mx|esmx|es\-419|spanish_latin_american
.br
Arabic = ar|ara|arabic|ar[_\-][A\-Z]{2}
.br
Romanian = ro|ron|rum|romanian|ro[_\-][RM]O
.br
Hebrew = he|heb|hebrew|he[_\-]IL
.br
Thai = th|tha|thai|th[_\-]TH
.SH BLACKLIST
.fi
Allows user to specify individual files that should not be downloaded or
mentioned as orphans.
.sp 1
Each line in the file specifies one blacklist expression, except for empty
lines and lines starting with #.
.br
First few characters specify blacklist item type and flags.
So far, only regular expression (perl variant) are supported, so each line
must start with "Rp" characters.
After a space comes the expression itself. Expressions are matched against
file path relative to what was specified as \fI--directory\fP.
\fIExample black list\fP
.br
# used to store manually downloaded mods/patches/maps/, don't mention it as orphans
.br
Rp ^[^/]*/manual/.*
.br
# included with every *divinity game, once is enough
.br
Rp beyond_divinity/extras/bd_ladymageknight\.zip
.br
Rp divinity_2_developers_cut/extras/divinity_2_ladymageknight\.zip
.sp
# extra 6GB is A LOT of space if you don't actually plan to mod your game
.br
Rp the_witcher_2/extras/the_witcher_2_redkit\.zip
.br
Rp the_witcher_2/extras/extras_pack_3_hu_pl_ru_tr_zh_\.zip
.br
Rp the_witcher_2/extras/extras_pack_2_fr_it_jp_\.zip
.SH PRIORITIES
Separating values with "," when using \fBlanguage\fP and \fBplatform\fP switches
enables a priority-based mode: only the first matching one will be downloaded.
.PP
For example, setting \fBlanguage\fP to \fBfr+en\fP means both French and English
will be downloaded (if available) for all games. Setting \fBlanguage\fP to \fBfr,en\fP
means that the French version (and only that one) will be downloaded if available,
and if not, the English version will be downloaded.
.PP
You're allowed to "stack" codes in the priority string if needed. If you set
\fBlanguage\fP to \fBes+fr,en\fP it means it'll download both Spanish (es) and
French (fr) versions if they are available, and the English (en) one only if none
of French and Spanish are available.
.SH AVAILABILITY
The latest version of this distribution is available from
\fIhttps://github.com/Sude-/lgogdownloader\fP
.SH FILES
.fi
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/\fP
Storage for configuration files and cookies
.br
If \fB$XDG_CONFIG_HOME\fP is not set, it will use \fI$HOME/.config/lgogdownloader/\fP.
.TP
\fI$XDG_CACHE_HOME/lgogdownloader/xml/\fP
Storage for XML files
.br
If \fB$XDG_CACHE_HOME\fP is not set, it will use \fI$HOME/.cache/lgogdownloader/xml/\fP.
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/blacklist.txt\fP
Allows user to specify individual files that should not be downloaded.
.br
It doesn't have to exist, but if it does exist, it must be readable to lgogdownloader.
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/ignorelist.txt\fP
Allows user to specify individual files that should not be mentioned
as orphans. The file has the same format and interpretation as a
blacklist.
.br
It doesn't have to exist, but if it does exist, it must be readable to lgogdownloader.
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/game_has_dlc.txt\fP
Allows user to specify which games have dlc and should have their DLC count
information ignored. The file has the same format and interpretation as a
blacklist.
.br
It doesn't have to exist, but if it does exist, it must be readable to lgogdownloader.
.br
If the file exists lgogdownloader uses it instead of list specified with
\fB--dlc-list\fP option
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/gamespecific/gamename.conf\fP
JSON formatted file. Sets game specific settings for \fBgamename\fP.
.br
Allowed settings are \fBlanguage\fP, \fBplatform\fP, \fBinclude\fP,
\fBignore-dlc-count\fP, \fBsubdirectories\fP, \fBdirectory\fP,
\fBsubdir-game\fP, \fBsubdir-installers\fP, \fBsubdir-extras\fP,
\fBsubdir-patches\fP, \fBsubdir-language-packs\fP and \fBsubdir-dlc\fP.
.br
Must be in the following format:
.br
{
"language" : <string>,
"platform" : <string>,
"include" : <string>,
"ignore-dlc-count" : <bool>,
"subdirectories" : <bool>,
"directory" : <string>,
"subdir-game" : <string>,
"subdir-installers" : <string>,
"subdir-extras" : <string>,
"subdir-patches" : <string>,
"subdir-language-packs" : <string>,
"subdir-dlc" : <string>
.br
}
.TP
\fI$XDG_CONFIG_HOME/lgogdownloader/transformations.json\fP
JSON formatted file. Used to transform gamenames.
.br
Must be in the following format:
.br
{
<string> :
{
"regex" : <string>,
"replacement" : <string>,
"exceptions" : [
<string>,
<string>,
],
},
<string> :
{
"regex" : <string>,
"replacement" : <string>,
},
.br
}
.br
Member names are used to match the gamename (regex).
Member names must be unique.
.br
For example if the file contains 2 rules with "^x" then only the last one is applied.
However if user really wants multiple different rules for everything starting with "x"
then adding wild wildcard matches makes them unique ("^x", "^x.*", "^x.*.*")
.br
If it matches then \fBregex\fP is used for the actual replacement using
the value in \fBreplacement\fP.
.br
"\fBexceptions\fP" is an optional array of gamenames excluded from the rule.
These are matched exactly, no regex.
.br
\fBExample:\fP
.br
match all games beginning with "\fBb\fP" and if they end with "\fB_the\fP" then
remove "\fB_the\fP" at the end and prefix it with "\fBthe_\fP" with exception
of "\fBblackwell_epiphany_the\fP"
.br
{
"^b" :
{
"regex" : "(.*)_the$",
"replacement" : "the_\\\\1",
"exceptions" : [
"blackwell_epiphany_the",
],
},
.br
}