lyx_mirror/development/Win32/packaging/installer/include/dictionaries.nsh
Uwe Stöhr 028cf852dc Win installer: updates and fixes
- enable support for Georgian
- update file sizes
- re-introduce the dictionary download because it is necessary to step through several mirrors if necessary. This function was once added because as it is now, only one mirror is used, if it is dead the user won't get the dictionary
- update the mirror list
2019-02-11 00:17:42 +01:00

236 lines
7.9 KiB
Plaintext

/*
dictionaries.nsh
Handling of hunspell / MyThes dictionaries
*/
# This script contains the following functions:
#
# - FindDictionaries (finds already installed dictionaries)
#
# - DownloadHunspellDictionaries and DownloadThesaurusDictionaries
# (Downloads hunspell / MyThes dictionaries from a location that is
# given in the file $INSTDIR\Resources\HunspellDictionaryNames.txt)
#
# - InstallHunspellDictionaries and InstallThesaurusDictionaries
# (installs the selected hunspell / MyThes dictionaries except of
# already existing ones), uses:
# DownloadHunspellDictionaries or DownloadThesaurusDictionaries
# ---------------------------------------
Function FindDictionaries
# finds already installed dictionaries
# start with empty strings
StrCpy $FoundDict ""
StrCpy $FoundThes ""
# read out the possible spell-checker filenames from the file
FileOpen $R5 "$INSTDIR\Resources\HunspellDictionaryNames.txt" r
${for} $5 1 73
# the file has 146 lines, but we only need to check for one of the 2 dictionary files per language
# therefore check only for every second line
FileRead $R5 $String # skip the .aff file
FileRead $R5 $String # $String is now the .dic filename
StrCpy $String $String -2 # remove the linebreak characters
StrCpy $R3 $String -4 # $R3 is now the dictionary language code
${if} ${FileExists} "$INSTDIR\Resources\dicts\$String"
StrCpy $FoundDict "$R3 $FoundDict"
${endif}
${next}
FileClose $R5
# read out the possible thesaurus filenames from the file
FileOpen $R5 "$INSTDIR\Resources\ThesaurusDictionaryNames.txt" r
${for} $5 1 28
# the file has 56 lines, but we only need to check for one of the 2 thesaurus files per language
# therefore check only for every second line
FileRead $R5 $String # $String is now the dictionary name
FileRead $R5 $String # $String is now the dictionary name
StrCpy $String $String -2 # remove the linebreak characters
StrCpy $R3 $String 5 3 # $R3 is now the dictionary language code
${if} ${FileExists} "$INSTDIR\Resources\thes\$String"
StrCpy $FoundThes "$R3 $FoundThes"
${endif}
${next}
FileClose $R5
FunctionEnd
# ---------------------------------------
Function DownloadHunspellDictionaries
# Downloads hunspell dictionaries from a location that is given in the file
# $INSTDIR\Resources\HunspellDictionaryNames.txt
# read out the locations from the file
FileOpen $R5 "$INSTDIR\Resources\HunspellDictionaryNames.txt" r
${For} $5 1 146 # the file has 146 lines
FileRead $R5 $String # $String is now the dictionary name
StrCpy $R3 $String -6 # $R3 is now the dictionary language code
${if} $DictCode == $R3
StrCpy $String $String -2 # delete the linebreak characters at the end
# Download hunspell dictionaries,
# if first download repository is not available try the other ones listed in "DictionaryMirrors.txt"
FileOpen $R4 "$INSTDIR\Resources\DictionaryMirrors.txt" r
${For} $4 1 24 # there are 24 mirrors in the file
FileRead $R4 $Search # $Search is now the mirror
StrCpy $Search $Search -2 # delete the linebreak characters at the end
Push $R0
inetc::get /TIMEOUT=5000 "https://$Search.dl.sourceforge.net/project/lyxwininstaller/hunspell/$String" "$INSTDIR\Resources\dicts\$String" /END
Pop $R0
${if} $R0 == "OK"
${ExitFor}
${endif}
${Next}
FileClose $R4
# if download failed
${if} $R0 != "OK"
MessageBox MB_OK|MB_ICONEXCLAMATION "$(HunspellFailed)"
Goto abortinstall
${endif}
${endif} # end if $DictCode == $R3
${Next}
FileClose $R5
abortinstall:
Delete "$INSTDIR\$String"
FunctionEnd
#--------------------------------
Function DownloadThesaurusDictionaries
# Downloads thesaurus dictionaries from a location that is given in the file
# $INSTDIR\Resources\ThesaurusDictionaryNames.txt
# read out the locations from the file
FileOpen $R5 "$INSTDIR\Resources\ThesaurusDictionaryNames.txt" r
${For} $5 1 56 # the file has 56 lines
FileRead $R5 $String # $String is now the thesaurus name
StrCpy $R3 $String 5 3 # $R3 is now the thesaurus language code
${if} $ThesCode == $R3
StrCpy $String $String -2 # delete the linebreak characters at the end
# Download thesaurus files,
# if first download repository is not available try the other ones listed in "DictionaryMirrors.txt"
FileOpen $R4 "$INSTDIR\Resources\DictionaryMirrors.txt" r
${For} $4 1 24 # there are 24 mirrors in the file
FileRead $R4 $Search # $Search is now the mirror
StrCpy $Search $Search -2 # delete the linebreak characters at the end
Push $R0
inetc::get /TIMEOUT=5000 "https://$Search.dl.sourceforge.net/project/lyxwininstaller/thesaurus/$String" "$INSTDIR\Resources\thes\$String" /END
Pop $R0
${if} $R0 == "OK"
${ExitFor}
${endif}
${Next}
FileClose $R4
# if download failed
${if} $R0 != "OK"
MessageBox MB_OK|MB_ICONEXCLAMATION "$(ThesaurusFailed)"
Goto abortinstall
${endif}
${endif} # end if $ThesCode == $R3
${Next}
FileClose $R5
abortinstall:
Delete "$INSTDIR\$String"
FunctionEnd
#--------------------------------
Function InstallHunspellDictionaries
# installs the selected hunspell dictionaries except of already existing ones
${Do}
# take the first code
StrCpy $Search ","
StrCpy $String $DictCodes
Call StrPoint
# we always have a "," for each code, so in case in case something
# went wrong, empty the code list to exit the loop
${if} $Pointer == "-1"
StrCpy $DictCodes ""
${endif}
${if} $Pointer != "-1"
StrCpy $DictCode $DictCodes $Pointer
# remove the taken code from the list
IntOp $Pointer $Pointer + 1
StrCpy $DictCodes $DictCodes "" $Pointer
# don't dowload existing ones thus check if $DictCode is in $FoundDict
StrCpy $String $FoundDict
StrCpy $Search $DictCode
Call StrPoint # function from LyXUtils.nsh
${if} $Pointer == "-1"
# download the dictionaries
Call DownloadHunspellDictionaries
${endif}
${endif}
${LoopUntil} $DictCodes == ""
FunctionEnd
#--------------------------------
Function InstallThesaurusDictionaries
# installs the selected thesaurus dictionaries except of already existing ones
${Do}
# take the first code
StrCpy $Search ","
StrCpy $String $ThesCodes
Call StrPoint
# we always have a "," for each code, so in case in case something
# went wrong, empty the code list to exit the loop
${if} $Pointer == "-1"
StrCpy $ThesCodes ""
${endif}
${if} $Pointer != "-1"
StrCpy $ThesCode $ThesCodes $Pointer
# remove the taken code from the list
IntOp $Pointer $Pointer + 1
StrCpy $ThesCodes $ThesCodes "" $Pointer
# don't dowload existing ones thus check if $ThesCode is in $FoundThes
StrCpy $String $FoundThes
StrCpy $Search $ThesCode
Call StrPoint # function from LyXUtils.nsh
${if} $Pointer == "-1"
# download the dictionaries
Call DownloadThesaurusDictionaries
${endif}
${endif}
${LoopUntil} $ThesCodes == ""
# some dictionaries of language variants are identic
# therefore copy and rename an existing dictionary
CreateDirectory "$INSTDIR\Resources\backup"
${if} ${FileExists} "$INSTDIR\Resources\thes\th_de_DE_v2.dat"
CopyFiles "$INSTDIR\Resources\thes\th_de_DE_v2.*" "$INSTDIR\Resources\backup"
Rename "$INSTDIR\Resources\backup\th_de_DE_v2.dat" "$INSTDIR\Resources\backup\th_de_AT_v2.dat"
Rename "$INSTDIR\Resources\backup\th_de_DE_v2.idx" "$INSTDIR\Resources\backup\th_de_AT_v2.idx"
CopyFiles "$INSTDIR\Resources\backup\th_de_AT_v2.*" "$INSTDIR\Resources\thes"
${endif}
${if} ${FileExists} "$INSTDIR\Resources\thes\th_en_US_v2.dat"
CopyFiles "$INSTDIR\Resources\thes\th_en_US_v2.*" "$INSTDIR\Resources\backup"
Rename "$INSTDIR\Resources\backup\th_en_US_v2.dat" "$INSTDIR\Resources\backup\th_en_AU_v2.dat"
Rename "$INSTDIR\Resources\backup\th_en_US_v2.idx" "$INSTDIR\Resources\backup\th_en_AU_v2.idx"
CopyFiles "$INSTDIR\Resources\backup\th_en_AU_v2.*" "$INSTDIR\Resources\thes"
${endif}
RMDir "$INSTDIR\Resources\backup"
FunctionEnd