diff --git a/3rd-party/deps/get_deps.sh b/3rd-party/deps/get_deps.sh deleted file mode 100755 index 09a64e0..0000000 --- a/3rd-party/deps/get_deps.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -wget -O leptonica.tar.gz http://www.leptonica.com/source/leptonica-1.72.tar.gz -wget -O tesseract.tar.gz https://github.com/tesseract-ocr/tesseract/archive/3.04.00.tar.gz -wget -O tessdata.tar.gz https://github.com/tesseract-ocr/tessdata/archive/3.04.00.tar.gz - diff --git a/3rd-party/deps/make_deps.sh b/3rd-party/deps/make_deps.sh deleted file mode 100755 index 9c72a5e..0000000 --- a/3rd-party/deps/make_deps.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -WORK_DIR=linux - -#WORK_DIR=mingw -#HOST=i686-w64-mingw32 -#export PATH="/opt/mingw-4.9.3/mingw-w64-i686/bin:$PATH" - -#rm -rf $WORK_DIR -mkdir $WORK_DIR 2> /dev/null -set -e - -WORK_DIR=`realpath $WORK_DIR` -if [ ! -z "$HOST" ]; then HOST_ATTR="--host=$HOST"; fi - -echo "Building Leptonica" -tar zxf leptonica.tar.gz -C $WORK_DIR -LEPT_DIR=`ls $WORK_DIR | grep lept` -cd $WORK_DIR/$LEPT_DIR -./configure --prefix=$WORK_DIR --disable-programs $HOST_ATTR -make -j4 -make install -cd ../.. - -echo "Building Tesseract" -tar zxf tesseract.tar.gz -C $WORK_DIR -TESS_DIR=`ls $WORK_DIR | grep tess` -cd $WORK_DIR/$TESS_DIR -sed 's/vs2008/vs2010/g' -i ccutil/Makefile.in -sed 's/Windows\.h/windows\.h/g' -i opencl/openclwrapper.cpp -LIBLEPT_HEADERSDIR=$WORK_DIR/include LIBS=-L$WORK_DIR/lib ./configure --prefix=$WORK_DIR --disable-tessdata-prefix $HOST_ATTR -make -j4 -make install -cd ../.. - -find -name '*.dll' -exec cp {} $WORK_DIR/lib \; - -echo "Done" diff --git a/ScreenTranslator.pro b/ScreenTranslator.pro index 09445db..e0de903 100644 --- a/ScreenTranslator.pro +++ b/ScreenTranslator.pro @@ -14,13 +14,13 @@ CONFIG += c++11 win32{ RC_FILE = app.rc - INCLUDEPATH += ../mingw/include - LIBS += -L../mingw/lib -lws2_32 + INCLUDEPATH += $$PWD/../build/mingw/deps/include + LIBS += -L$$PWD/../build/mingw/deps/lib -lws2_32 } linux{ QT += x11extras - INCLUDEPATH += ../linux/include - LIBS += -L../linux/lib -lX11 -Wl,-rpath,. + INCLUDEPATH += $$PWD/../build/linux/deps/include + LIBS += -L$$PWD/../build/linux/deps/lib -lX11 -Wl,-rpath,. } LIBS += -ltesseract -llept @@ -84,4 +84,6 @@ OTHER_FILES += \ translators/google.js \ translators/yandex.js \ translators/bing.js \ + distr/eng/Changelog.txt \ + distr/ru/Changelog.txt \ TODO.md diff --git a/distr/eng/Changelog.txt b/distr/Changelog_en.txt similarity index 56% rename from distr/eng/Changelog.txt rename to distr/Changelog_en.txt index 746894b..c77f70b 100644 --- a/distr/eng/Changelog.txt +++ b/distr/Changelog_en.txt @@ -1,4 +1,21 @@ Changes. +2.0.0: +* Added a version for linux. +* Added support for multiple monitors. +* Added ability of recognition without translation. +* Added ability to recapture from old image. +* Added ability to recapture without closing capture window. +* Added ability to re-recognize other language. +* Added ability to display intermediate result when error occured. +* Added support for different translation services. +* Added ability to copy image to clipboard. +* Added ability to edit recognized text. +* Added ability to automatically correct common recognition mistakes. +* Added ability to use a proxy. +* Added ability to swap translation and recognition languages. +* Updated icons. +* Show progress on icon. +* Added ability to automatically update. 1.2.3: * Fixed possible crash. * Added version information and some error messages. @@ -23,4 +40,4 @@ Changes. * Fixed an issue with incorrect window size when display results. 1.1.0: + Displays the result in the window, along with the picture. -+ Context menu expanded. Added buttons display the last result and copy it to the clipboard. \ No newline at end of file ++ Context menu expanded. Added buttons display the last result and copy it to the clipboard. diff --git a/distr/ru/Changelog.txt b/distr/Changelog_ru.txt similarity index 52% rename from distr/ru/Changelog.txt rename to distr/Changelog_ru.txt index c17b51b..02b4321 100644 --- a/distr/ru/Changelog.txt +++ b/distr/Changelog_ru.txt @@ -1,4 +1,21 @@ . +2.0.0: +* linux. +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . +* . 1.2.3: * . * . @@ -23,4 +40,4 @@ - . 1.1.0: - , . -- . . \ No newline at end of file +- . . diff --git a/distr/Files.xlsx b/distr/Files.xlsx deleted file mode 100644 index afbd7a4..0000000 Binary files a/distr/Files.xlsx and /dev/null differ diff --git a/distr/InnoSetup.iss b/distr/InnoSetup.iss deleted file mode 100644 index ed9f114..0000000 --- a/distr/InnoSetup.iss +++ /dev/null @@ -1,269 +0,0 @@ -; Script generated by the Inno Setup Script Wizard. -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! - -#define MyAppName "Screen Translator" -#define MyAppVersion "1.2.3" -#define MyAppPublisher "Gres" -#define MyAppURL "http://gres.biz/screen-translator/" -#define MyAppExeName "ScreenTranslator.exe" -#define MyAppDescription "Screen capture and translation tool" - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{016F399E-0EED-476C-AB00-8AD0FF5BFD77} -AppName={#MyAppName} -AppVersion={#MyAppVersion} -;AppVerName={#MyAppName} {#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={pf}\{#MyAppName} -DefaultGroupName={#MyAppName} -AllowNoIcons=yes -PrivilegesRequired=admin -CloseApplications=yes -OutputDir=. -OutputBaseFilename=ScreenTranslator-{#MyAppVersion} -SetupIconFile=..\images\icon.ico -SolidCompression=yes -RestartIfNeededByRun=False -ShowLanguageDialog=auto -VersionInfoCompany={#MyAppPublisher} -VersionInfoDescription={#MyAppDescription} -VersionInfoProductName={#MyAppName} -VersionInfoProductVersion={#MyAppVersion} -VersionInfoVersion={#MyAppVersion} -Compression=lzma2/ultra64 -InternalCompressLevel=max - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl"; InfoBeforeFile: "eng\Changelog.txt" -Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl,ru\Russian.isl"; InfoBeforeFile: "ru\Changelog.txt" - -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked -Name: "startupicon"; Description: "{cm:CreateStartupIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked -Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 - -[Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" -Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" -Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon -Name: "{commonstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startupicon - -[Run] -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent - -[Files] -Source: "content\ScreenTranslator.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: Executable - -Source: "content\*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: Libraries -Source: "content\platforms\*"; DestDir: "{app}\platforms"; Flags: ignoreversion; Components: Libraries - -Source: "content\tessdata\afr.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Afrikaans -Source: "content\tessdata\sqi.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Albanian -Source: "content\tessdata\grc.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\AncientGreek -Source: "content\tessdata\ara.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Arabic -Source: "content\tessdata\aze.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Azerbaijani -Source: "content\tessdata\eus.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Basque -Source: "content\tessdata\bel.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Belarusian -Source: "content\tessdata\ben.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Bengali -Source: "content\tessdata\bul.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Bulgarian -Source: "content\tessdata\cat.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Catalan -Source: "content\tessdata\chr.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Cherokee -Source: "content\tessdata\chi_sim.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\ChineseSimplified -Source: "content\tessdata\chi_tra.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\ChineseTraditional -Source: "content\tessdata\hrv.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Croatian -Source: "content\tessdata\ces.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Czech -Source: "content\tessdata\dan.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Danish -Source: "content\tessdata\nld.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Dutch -Source: "content\tessdata\eng.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\English -Source: "content\tessdata\epo.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Esperanto -Source: "content\tessdata\epo_alt.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Esperantoalternative -Source: "content\tessdata\est.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Estonian -Source: "content\tessdata\fin.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Finnish -Source: "content\tessdata\frk.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Frankish -Source: "content\tessdata\fra.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\French -Source: "content\tessdata\glg.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Galician -Source: "content\tessdata\deu.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\German -Source: "content\tessdata\ell.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Greek -Source: "content\tessdata\heb.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Hebrew -Source: "content\tessdata\hin.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Hindi -Source: "content\tessdata\hun.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Hungarian -Source: "content\tessdata\isl.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Icelandic -Source: "content\tessdata\ind.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Indonesian -Source: "content\tessdata\ita.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Italian -Source: "content\tessdata\jpn.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Japanese -Source: "content\tessdata\kan.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Kannada -Source: "content\tessdata\kor.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Korean -Source: "content\tessdata\lav.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Latvian -Source: "content\tessdata\lit.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Lithuanian -Source: "content\tessdata\mkd.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Macedonian -Source: "content\tessdata\msa.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Malay -Source: "content\tessdata\mal.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Malayalam -Source: "content\tessdata\mlt.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Maltese -Source: "content\tessdata\equ.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\MathEquation -Source: "content\tessdata\enm.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\MiddleEnglish -Source: "content\tessdata\frm.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\MiddleFrench -Source: "content\tessdata\nor.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Norwegian -Source: "content\tessdata\pol.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Polish -Source: "content\tessdata\por.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Portuguese -Source: "content\tessdata\ron.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Romanian -Source: "content\tessdata\rus.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Russian -Source: "content\tessdata\srp.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Serbian -Source: "content\tessdata\slk.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Slovakian -Source: "content\tessdata\slv.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Slovenian -Source: "content\tessdata\spa.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Spanish -Source: "content\tessdata\swa.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Swahili -Source: "content\tessdata\swe.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Swedish -Source: "content\tessdata\tgl.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Tagalog -Source: "content\tessdata\tam.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Tamil -Source: "content\tessdata\tel.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Telugu -Source: "content\tessdata\tha.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Thai -Source: "content\tessdata\tur.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Turkish -Source: "content\tessdata\ukr.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Ukrainian -Source: "content\tessdata\vie.*"; DestDir: "{app}\tessdata"; Flags: ignoreversion; Components: Languages\Vietnamese -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[CustomMessages] -english.CreateStartupIcon=Create autostart icon -english.Executables=Executables -english.Libraries=Libraries -english.Languages=OCR Languages - -english.Afrikaans=Afrikaans -english.Albanian=Albanian -english.AncientGreek=AncientGreek -english.Arabic=Arabic -english.Azerbaijani=Azerbaijani -english.Basque=Basque -english.Belarusian=Belarusian -english.Bengali=Bengali -english.Bulgarian=Bulgarian -english.Catalan=Catalan -english.Cherokee=Cherokee -english.ChineseSimplified=ChineseSimplified -english.ChineseTraditional=ChineseTraditional -english.Croatian=Croatian -english.Czech=Czech -english.Danish=Danish -english.Dutch=Dutch -english.English=English -english.Esperanto=Esperanto -english.Esperantoalternative=Esperantoalternative -english.Estonian=Estonian -english.Finnish=Finnish -english.Frankish=Frankish -english.French=French -english.Galician=Galician -english.German=German -english.Greek=Greek -english.Hebrew=Hebrew -english.Hindi=Hindi -english.Hungarian=Hungarian -english.Icelandic=Icelandic -english.Indonesian=Indonesian -english.Italian=Italian -english.Japanese=Japanese -english.Kannada=Kannada -english.Korean=Korean -english.Latvian=Latvian -english.Lithuanian=Lithuanian -english.Macedonian=Macedonian -english.Malay=Malay -english.Malayalam=Malayalam -english.Maltese=Maltese -english.MathEquation=MathEquation -english.MiddleEnglish=MiddleEnglish -english.MiddleFrench=MiddleFrench -english.Norwegian=Norwegian -english.Polish=Polish -english.Portuguese=Portuguese -english.Romanian=Romanian -english.Russian=Russian -english.Serbian=Serbian -english.Slovakian=Slovakian -english.Slovenian=Slovenian -english.Spanish=Spanish -english.Swahili=Swahili -english.Swedish=Swedish -english.Tagalog=Tagalog -english.Tamil=Tamil -english.Telugu=Telugu -english.Thai=Thai -english.Turkish=Turkish -english.Ukrainian=Ukrainian -english.Vietnamese=Vietnamese - -[Components] -Name: "Executable"; Description: "{cm:Executables}"; Types: compact custom full; Flags: fixed; -Name: "Libraries"; Description: "{cm:Libraries}"; Types: compact custom full; Flags: fixed; -Name: "Languages"; Description: "{cm:Languages}"; Types: custom full - -Name: "Languages\Afrikaans"; Description: "{cm:Afrikaans}"; Types: full -Name: "Languages\Albanian"; Description: "{cm:Albanian}"; Types: full -Name: "Languages\AncientGreek"; Description: "{cm:AncientGreek}"; Types: full -Name: "Languages\Arabic"; Description: "{cm:Arabic}"; Types: full -Name: "Languages\Azerbaijani"; Description: "{cm:Azerbaijani}"; Types: full -Name: "Languages\Basque"; Description: "{cm:Basque}"; Types: full -Name: "Languages\Belarusian"; Description: "{cm:Belarusian}"; Types: full -Name: "Languages\Bengali"; Description: "{cm:Bengali}"; Types: full -Name: "Languages\Bulgarian"; Description: "{cm:Bulgarian}"; Types: full -Name: "Languages\Catalan"; Description: "{cm:Catalan}"; Types: full -Name: "Languages\Cherokee"; Description: "{cm:Cherokee}"; Types: full -Name: "Languages\ChineseSimplified"; Description: "{cm:ChineseSimplified}"; Types: full -Name: "Languages\ChineseTraditional"; Description: "{cm:ChineseTraditional}"; Types: compact custom full -Name: "Languages\Croatian"; Description: "{cm:Croatian}"; Types: full -Name: "Languages\Czech"; Description: "{cm:Czech}"; Types: full -Name: "Languages\Danish"; Description: "{cm:Danish}"; Types: full -Name: "Languages\Dutch"; Description: "{cm:Dutch}"; Types: full -Name: "Languages\English"; Description: "{cm:English}"; Types: compact custom full -Name: "Languages\Esperanto"; Description: "{cm:Esperanto}"; Types: full -Name: "Languages\Esperantoalternative"; Description: "{cm:Esperantoalternative}"; Types: full -Name: "Languages\Estonian"; Description: "{cm:Estonian}"; Types: full -Name: "Languages\Finnish"; Description: "{cm:Finnish}"; Types: full -Name: "Languages\Frankish"; Description: "{cm:Frankish}"; Types: full -Name: "Languages\French"; Description: "{cm:French}"; Types: compact custom full -Name: "Languages\Galician"; Description: "{cm:Galician}"; Types: full -Name: "Languages\German"; Description: "{cm:German}"; Types: compact custom full -Name: "Languages\Greek"; Description: "{cm:Greek}"; Types: full -Name: "Languages\Hebrew"; Description: "{cm:Hebrew}"; Types: full -Name: "Languages\Hindi"; Description: "{cm:Hindi}"; Types: full -Name: "Languages\Hungarian"; Description: "{cm:Hungarian}"; Types: full -Name: "Languages\Icelandic"; Description: "{cm:Icelandic}"; Types: full -Name: "Languages\Indonesian"; Description: "{cm:Indonesian}"; Types: full -Name: "Languages\Italian"; Description: "{cm:Italian}"; Types: full -Name: "Languages\Japanese"; Description: "{cm:Japanese}"; Types: compact custom full -Name: "Languages\Kannada"; Description: "{cm:Kannada}"; Types: full -Name: "Languages\Korean"; Description: "{cm:Korean}"; Types: compact custom full -Name: "Languages\Latvian"; Description: "{cm:Latvian}"; Types: full -Name: "Languages\Lithuanian"; Description: "{cm:Lithuanian}"; Types: full -Name: "Languages\Macedonian"; Description: "{cm:Macedonian}"; Types: full -Name: "Languages\Malay"; Description: "{cm:Malay}"; Types: full -Name: "Languages\Malayalam"; Description: "{cm:Malayalam}"; Types: full -Name: "Languages\Maltese"; Description: "{cm:Maltese}"; Types: full -Name: "Languages\MathEquation"; Description: "{cm:MathEquation}"; Types: compact custom full -Name: "Languages\MiddleEnglish"; Description: "{cm:MiddleEnglish}"; Types: full -Name: "Languages\MiddleFrench"; Description: "{cm:MiddleFrench}"; Types: full -Name: "Languages\Norwegian"; Description: "{cm:Norwegian}"; Types: full -Name: "Languages\Polish"; Description: "{cm:Polish}"; Types: full -Name: "Languages\Portuguese"; Description: "{cm:Portuguese}"; Types: full -Name: "Languages\Romanian"; Description: "{cm:Romanian}"; Types: full -Name: "Languages\Russian"; Description: "{cm:Russian}"; Types: compact custom full -Name: "Languages\Serbian"; Description: "{cm:Serbian}"; Types: full -Name: "Languages\Slovakian"; Description: "{cm:Slovakian}"; Types: full -Name: "Languages\Slovenian"; Description: "{cm:Slovenian}"; Types: full -Name: "Languages\Spanish"; Description: "{cm:Spanish}"; Types: compact custom full -Name: "Languages\Swahili"; Description: "{cm:Swahili}"; Types: full -Name: "Languages\Swedish"; Description: "{cm:Swedish}"; Types: full -Name: "Languages\Tagalog"; Description: "{cm:Tagalog}"; Types: full -Name: "Languages\Tamil"; Description: "{cm:Tamil}"; Types: full -Name: "Languages\Telugu"; Description: "{cm:Telugu}"; Types: full -Name: "Languages\Thai"; Description: "{cm:Thai}"; Types: full -Name: "Languages\Turkish"; Description: "{cm:Turkish}"; Types: full -Name: "Languages\Ukrainian"; Description: "{cm:Ukrainian}"; Types: full -Name: "Languages\Vietnamese"; Description: "{cm:Vietnamese}"; Types: full diff --git a/distr/deb/DEBIAN/control b/distr/deb/DEBIAN/control new file mode 100644 index 0000000..864145a --- /dev/null +++ b/distr/deb/DEBIAN/control @@ -0,0 +1,16 @@ +Package: screen-translator +Version: 1 +Section: graphics +Architecture: amd64 +Depends: libtesseract3, libqt5webkit5, libqt5x11extras5 +Recommends: tesseract-ocr-eng, tesseract-ocr-rus, tesseract-ocr-deu, tesseract-ocr-spa, tesseract-ocr-chi-sim, tesseract-ocr-fra, tesseract-ocr-jpn +Installed-Size: 1 +Priority: optional +Maintainer: Gres +Homepage: https://github.com/OneMoreGres/ScreenTranslator +Description: Screen capture, OCR and translation tool. + This software allows to translate any text on screen. + Basically it is a combination of screen capture, + OCR and translation tools. + + diff --git a/distr/deb/usr/share/applications/ScreenTranslator.desktop b/distr/deb/usr/share/applications/ScreenTranslator.desktop new file mode 100644 index 0000000..f71d72e --- /dev/null +++ b/distr/deb/usr/share/applications/ScreenTranslator.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1 +Name=Screen Translator +Comment=Screen capture, OCR and translation tool. +Exec=/opt/ScreenTranslator/ScreenTranslator +Icon=ScreenTranslator.png +Terminal=false +Type=Application +Categories=Graphics; diff --git a/distr/iss/InnoSetup.iss b/distr/iss/InnoSetup.iss new file mode 100644 index 0000000..6a2cbf7 --- /dev/null +++ b/distr/iss/InnoSetup.iss @@ -0,0 +1,145 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +#define MyAppName "Screen Translator" +#define MyAppVersion "2.0.0" +#define MyAppPublisher "Gres" +#define MyAppURL "http://gres.biz/screen-translator/" +#define MyAppExeName "ScreenTranslator.exe" +#define MyAppDescription "Screen capture and translation tool" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{016F399E-0EED-476C-AB00-8AD0FF5BFD77} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +;AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={pf}\{#MyAppName} +DefaultGroupName={#MyAppName} +AllowNoIcons=yes +PrivilegesRequired=admin +CloseApplications=yes +OutputDir=.. +OutputBaseFilename=ScreenTranslator-{#MyAppVersion} +SetupIconFile=icon.ico +RestartIfNeededByRun=False +ShowLanguageDialog=auto +VersionInfoCompany={#MyAppPublisher} +VersionInfoDescription={#MyAppDescription} +VersionInfoProductName={#MyAppName} +VersionInfoProductVersion={#MyAppVersion} +VersionInfoVersion={#MyAppVersion} +Compression=lzma2/ultra64 +InternalCompressLevel=ultra +SolidCompression=yes + +[Languages] +Name: "en"; MessagesFile: "compiler:Default.isl"; LicenseFile: "LICENSE_en.md"; InfoBeforeFile: "Changelog_en.txt" +Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "LICENSE_ru.md"; InfoBeforeFile: "Changelog_ru.txt" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: "startupicon"; Description: "{cm:CreateStartupIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 + +[Icons] +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon +Name: "{commonstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startupicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[Files] +Source: "content\ScreenTranslator.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: Executable +Source: "content\*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: Libraries +Source: "content\platforms\*"; DestDir: "{app}\platforms"; Flags: ignoreversion; Components: Libraries +Source: "content\translators\*"; DestDir: "{app}\translators"; Flags: ignoreversion; Components: Translators + +[Components] +Name: "Executable"; Description: "{cm:Executables}"; Types: compact custom full; Flags: fixed; +Name: "Libraries"; Description: "{cm:Libraries}"; Types: compact custom full; Flags: fixed; +Name: "Translators"; Description: "{cm:Translators}"; Types: compact custom full; Flags: fixed; + +[CustomMessages] +en.CreateStartupIcon=Create autostart icon +en.Executables=Executables +en.Libraries=Libraries +en.Translators=Translators + +ru.CreateStartupIcon= +ru.Executables= +ru.Libraries= +ru.Translators= + +#include "tessdata.iss" + +[UninstallDelete] +Type: files; Name: "{app}\updates.json" +Type: files; Name: "{app}\st_subs.csv" + +[UninstallRun] +Filename: "taskkill.exe"; Parameters: "/IM ScreenTranslator.exe /T /F" + + +[Code] +#define DwinsHs_Use_Predefined_Downloading_WizardPage +#define DwinsHs_Auto_Continue +#include "dwinshs.iss" + +procedure InitializeWizard(); +begin + DwinsHs_InitializeWizard(wpPreparing); +end; + +procedure CurPageChanged(CurPageID: Integer); +begin + DwinsHs_CurPageChanged(CurPageID, nil, nil); +end; + +function ShouldSkipPage(CurPageId: Integer): Boolean; +begin + Result := False; + DwinsHs_ShouldSkipPage(CurPageId, Result); +end; + +function BackButtonClick(CurPageID: Integer): Boolean; +begin + Result := True; + DwinsHs_BackButtonClick(CurPageID); +end; + +function NextButtonClick(CurPageID: Integer): Boolean; +begin + Result := True; + DwinsHs_NextButtonClick(CurPageID, Result); +end; + +procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); +begin + DwinsHs_CancelButtonClick(CurPageID, Cancel, Confirm); +end; + +[CustomMessages] +ru.DwinsHs_PageCaption = +ru.DwinsHs_PageDescription =, ... +ru.DwinsHs_TotalProgress = : +ru.DwinsHs_CurrentFile = : +ru.DwinsHs_File =: +ru.DwinsHs_Speed =: +ru.DwinsHs_Status =: +ru.DwinsHs_ElapsedTime = : +ru.DwinsHs_RemainingTime = : + +ru.DwinsHs_Status_GetFileInformation = +ru.DwinsHs_Status_StartingDownload = +ru.DwinsHs_Status_Downloading = +ru.DwinsHs_Status_DownlaodComplete = diff --git a/distr/iss/LICENSE_ru.md b/distr/iss/LICENSE_ru.md new file mode 100644 index 0000000..d09a322 --- /dev/null +++ b/distr/iss/LICENSE_ru.md @@ -0,0 +1,9 @@ + MIT + +Copyright (c) 2015 Gres (gres@gres.biz) + + , ( ), , , , , , , , / , , , : + + . + + ܻ, - , , , , . - , , , , , - . \ No newline at end of file diff --git a/distr/iss/code2langTr.txt b/distr/iss/code2langTr.txt new file mode 100644 index 0000000..b33c48b --- /dev/null +++ b/distr/iss/code2langTr.txt @@ -0,0 +1,109 @@ +#iso-639-3 standard code to names +afr Afrikaans Африкаанс +amh Amharic Амхарский +ara Arabic Арабский +asm Assamese Ассамский +aze Azerbaijani Азербайджанский +#aze_cyrl aze_cyrl +bel Belarusian Белорусский +ben Bengali Бенгальский +bod Tibetan Тибетский +bos Bosnian Боснийский +bul Bulgarian Болгарии +cat Catalan Каталонский +ceb Cebuano Кебуано +ces Czech Чешский +chi_sim Chineese_simplified Китайский_упрощенный +chi_tra Chineese_traditional Китайский_традиционный +chr Cherokee Чероки +cym Welsh Валлийский +dan Danish Датский +#dan_frak dan_frak +deu German Немецкий +#deu_frak deu_frak +dzo Dzongkha Джонгкха +ell Modern_Greek Новогреческий +eng English Английский +enm Middle_English Средневековый_английский +epo Esperanto Эсперанто +equ Math Математика +est Estonian Эстонский +eus Basque Басков +fas Persian Персидский +fin Finnish Финский +fra French Французский +frk Frankish Франкский +frm Middle_French Средневековый_французский +gle Irish Ирландский +glg Galician Галисийский +grc Ancient_Greek Древнегреческий +guj Gujarati Гуджарати +hat Haitian Гаити +heb Hebrew Иврит +hin Hindi Хинди +hrv Croatian Хорватский +hun Hungarian Венгерский +iku Inuktitut Инуктитут +ind Indonesian Индонезийский +isl Icelandic Исландский +ita Italian Итальянский +#ita_old ita_old +jav Javanese Яванский +jpn Japanese Японский +kan Kannada Каннада +kat Georgian Грузинский +#kat_old kat_old +kaz Kazakh Казахский +khm Khmer Кхмерский +kir Kirghiz Киргизский +kor Korean Корейский +kur Kurdish Курдский +lao Lao Лао +lat Latin Латинский +lav Latvian Латышский +lit Lithuanian Литовский +mal Malayalam Малаялам +mar Marathi Маратхи +mkd Macedonian Македонский +mlt Maltese Мальтийский +msa Malay Малайский +mya Burmese Бирманский +nep Nepali Непальский +nld Dutch Голландский +nor Norwegian Норвежский +ori Oriya Ория +#osd OSD OSD +pan Panjabi Панджаби +pol Polish Польский +por Portuguese Португальский +pus Pushto Пушту +ron Romanian Румынский +rus Russian Русский +san Sanskrit Санскрит +sin Sinhala Сингальский +slk Slovak Словацкий +#slk_frak slk_frak +slv Slovenian Словенский +spa Spanish Испанский +#spa_old spa_old +sqi Albanian Албанский +srp Serbian Сербский +#srp_latn srp_latn +swa Swahili Суахили +swe Swedish Шведский +syr Syriac Сирийский +tam Tamil Тамил +tel Telugu Телугу +tgk Tajik Таджикиский +tgl Tagalog Тагальский +tha Thai Тайский +tir Tigrinya Тиграи +tur Turkish Турецкий +uig Uighur Уйгурский +ukr Ukrainian Украинский +urd Urdu Урду +uzb Uzbek Узбекский +#uzb_cyrl uzb_cyrl +vie Vietnamese Вьетнамский +yid Yiddish Идиш + diff --git a/distr/iss/dwinshs.iss b/distr/iss/dwinshs.iss new file mode 100644 index 0000000..5bb1e34 --- /dev/null +++ b/distr/iss/dwinshs.iss @@ -0,0 +1,1266 @@ +// ===================================================================================================================== +// DwinsHs +// +// Author: HAN-SOFT +// E-Mail: support@han-soft.com +// WebURL: http://www.han-soft.com +// Copyright (C) 2001, 2015 Han-soft Corporation. All rights reserved. +// ===================================================================================================================== +// $Rev: 113 $ $Id: dwinshs.iss 113 2015-07-23 07:30:14Z hanjy $ +// ===================================================================================================================== + +#define Use_DwinsHs + +[Code] + +type + TCancelDownload = (cdNone, cdBack, cdExit); + TProxyMode = (pmDefault, pmDirect, pmProxy); + TProxyProtocol = (ppHttp, ppSocks); + TDwinsHs_Proxy = record + Mode: TProxyMode; + Protocol: TProxyProtocol; + Host: AnsiString; + Port: Integer; + Username: AnsiString; + Password: AnsiString; + end; + +var + DwinsHs_CancelDownload: TCancelDownload; + DwinsHs_Proxy: TDwinsHs_Proxy; + +const + PM_NOREMOVE = $0000; + PM_REMOVE = $0001; + PM_NOYIELD = $0002; + WM_QUIT = $0012; + +type + TMsg = record + hWnd: HWnd; + Msg: LongInt; + wParam: LongInt; + lParam: LongInt; + Time: LongInt; + Pt: TPoint; + end; + +function PeekMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax, wRemoveMsg: LongInt): BOOL; +external 'PeekMessageA@user32.dll stdcall delayload setuponly'; + +function TranslateMessage(var Msg: TMsg): BOOL; +external 'TranslateMessage@user32.dll stdcall delayload setuponly'; + +function DispatchMessage(var Msg: TMsg): LongInt; +external 'DispatchMessageA@user32.dll stdcall delayload setuponly'; + +procedure DwinsHs_ProcessMessages(); +var + Msg: TMsg; +begin + while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do + if Msg.Msg <> WM_QUIT then + begin + TranslateMessage(Msg); + DispatchMessage(Msg); + end + else + begin + DwinsHs_CancelDownload := cdExit; + end; +end; + +// ===================================================================================================================== + +type + Pointer = Cardinal; + HINTERNET = Pointer; + PLPSTR = Pointer; + LPDWORD = DWORD_PTR; + +function InternetOpen(lpszAgent: PAnsiChar; dwAccessType: DWORD; lpszProxy, lpszProxyBypass: PAnsiChar; + dwFlags: DWORD): HINTERNET; +external 'InternetOpenA@wininet.dll stdcall delayload setuponly'; + +function InternetSetOption(hInet: HINTERNET; dwOption: DWORD; lpBuffer: PAnsiChar; dwBufferLength: DWORD): BOOL; +external 'InternetSetOptionA@wininet.dll stdcall delayload setuponly'; + +function InternetConnect(hInet: HINTERNET; lpszServerName: PAnsiChar; nServerPort: Word; lpszUsername: PAnsiChar; + lpszPassword: PAnsiChar; dwService: DWORD; dwFlags: DWORD; dwContext: DWORD_PTR): HINTERNET; +external 'InternetConnectA@wininet.dll stdcall delayload setuponly'; + +function HttpOpenRequest(hConnect: HINTERNET; lpszVerb: PAnsiChar; lpszObjectName: PAnsiChar; lpszVersion: PAnsiChar; + lpszReferrer: PAnsiChar; lplpszAcceptTypes: PLPSTR; dwFlags: DWORD; dwContext: DWORD_PTR): HINTERNET; +external 'HttpOpenRequestA@wininet.dll stdcall delayload setuponly'; + +function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PAnsiChar; dwHeadersLength: DWORD; lpOptional: PAnsiChar; + dwOptionalLength: DWORD): BOOL; +external 'HttpSendRequestA@wininet.dll stdcall delayload setuponly'; + +function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD; lpvBuffer: PAnsiChar; var lpdwBufferLength: DWORD; + var lpdwReserved: DWORD): BOOL; +external 'HttpQueryInfoA@wininet.dll stdcall delayload setuponly'; + +function FtpOpenFile(hConnect: HINTERNET; lpszFileName: PAnsiChar; dwAccess: DWORD; dwFlags: DWORD; + dwContext: DWORD): HINTERNET; +external 'FtpOpenFileA@wininet.dll stdcall delayload setuponly'; + +function FtpGetFileSize(hFile: HINTERNET; lpdwFileSizeHigh: DWORD): DWORD; +external 'FtpGetFileSize@wininet.dll stdcall delayload setuponly'; + +function InternetReadFile(hFile: HINTERNET; lpBuffer: PAnsiChar; dwNumberOfBytesToRead: DWORD; + var lpdwNumberOfBytesRead: DWORD): BOOL; +external 'InternetReadFile@wininet.dll stdcall delayload setuponly'; + +function InternetCloseHandle(hInet: HINTERNET): BOOL; +external 'InternetCloseHandle@wininet.dll stdcall delayload setuponly'; + +function InternetGetConnectedState(lpdwFlags: PAnsiChar; dwReserved: DWORD): BOOL; +external 'InternetGetConnectedState@wininet.dll stdcall delayload setuponly'; + +const + INTERNET_CONNECTION_OFFLINE = 32; + INTERNET_OPEN_TYPE_PRECONFIG = 0; + INTERNET_OPEN_TYPE_DIRECT = 1; + INTERNET_OPEN_TYPE_PROXY = 3; + INTERNET_OPTION_PROXY_USERNAME = 43; + INTERNET_OPTION_PROXY_PASSWORD = 44; + INTERNET_SERVICE_FTP = 1; + INTERNET_SERVICE_HTTP = 3; + INTERNET_FLAG_RELOAD = $80000000; + INTERNET_FLAG_SECURE = $00800000; + INTERNET_FLAG_IGNORE_CERT_CN_INVALID = $00001000; + INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = $00002000; + INTERNET_FLAG_EXISTING_CONNECT = $20000000; + INTERNET_FLAG_PASSIVE = $08000000; + GENERIC_READ = $80000000; + FTP_TRANSFER_TYPE_BINARY = $00000002; + HTTP_HEADER = 'Content-Type: application/x-www-form-urlencoded'; + HTTP_QUERY_CONTENT_LENGTH = 5; + HTTP_QUERY_STATUS_CODE = 19; + + #ifndef DwinsHs_Data_Buffer_Length + #define DwinsHs_Data_Buffer_Length 4096 + #endif + READ_BUFFER_LENGTH = {#DwinsHs_Data_Buffer_Length}; + + CONNECT_OK = 0; + CONNECT_ERROR_NETWORK = 1; + CONNECT_ERROR_OFFLINE = 2; + CONNECT_ERROR_INITIALIZE = 3; + CONNECT_ERROR_OPENSESSION = 4; + CONNECT_ERROR_CREATEREQUEST = 5; + CONNECT_ERROR_SENDREQUEST = 6; + + READ_OK = 0; + READ_ERROR_DELETEFILE = 7; + READ_ERROR_SAVEFILE = 8; + READ_ERROR_CANCELED = 9; + READ_ERROR_READDATA = 10; + +type + TReadScheme = (rpHttp, rpHttps, rpFtp); + TReadMethod = (rmGet, rmPost, rmActive, rmPassive); + TOnRead = function(URL, Agent: AnsiString; Method: TReadMethod; Index, TotalSize, ReadSize, CurrentSize: LongInt; + var ReadStr: AnsiString): Boolean; + +procedure ParseURL(URL: AnsiString; var Scheme: TReadScheme; var Host, Path, Data, Username, Password: AnsiString; + var Port: Integer); +var + i: Integer; +begin + URL := Trim(URL); + Scheme := rpHttp; + Port := 80; + i := Pos('://', URL); + if i > 0 then + begin + case LowerCase(Trim(Copy(URL, 1, i - 1))) of + 'http': + begin + Port := 80; + Scheme := rpHttp; + end; + 'https': + begin + Port := 443; + Scheme := rpHttps; + end; + 'ftp': + begin + Port := 21; + Scheme := rpFtp; + end; + end; + URL := Trim(Copy(URL, i + 3, 65535)); + end; + + i := Pos('/', URL); + if i > 0 then + begin + Host := Trim(Copy(URL, 1, i - 1)); + Path := Trim(Copy(URL, i, 65535)); + end + else + begin + Host := URL; + Path := ''; + end; + + i := Pos('@', Host); + if i > 0 then + begin + Username := Trim(Copy(Host, 1, i - 1)); + Host := Trim(Copy(Host, i + 1, 65535)); + end + else + begin + Username := ''; + end; + + i := Pos(':', Username); + if i > 0 then + begin + Password := Trim(Copy(Username, i + 1, 65535)); + Username := Trim(Copy(Username, 1, i - 1)); + end + else + begin + Password := ''; + end; + + i := Pos(':', Host); + if i > 0 then + begin + Port := StrToIntDef(Trim(Copy(Host, i + 1, 65535)), Port); + Host := Trim(Copy(Host, 1, i -1)); + end; + + i := Pos('?', Path); + if i > 0 then + begin + Data := Trim(Copy(Path, i + 1, 65536)); + Path := Trim(Copy(Path, 1, i - 1)); + end + else + Data := ''; + Host := LowerCase(Host); +end; + +procedure DwinsHs_SetProxy(Mode: TProxyMode; Protocol: TProxyProtocol; Host: AnsiString; Port: Integer; + Username, Password: AnsiString); +begin + DwinsHs_Proxy.Mode := Mode; + DwinsHs_Proxy.Protocol := Protocol; + DwinsHs_Proxy.Host := Host; + DwinsHs_Proxy.Port := Port; + DwinsHs_Proxy.Username := Username; + DwinsHs_Proxy.Password := Password; +end; + +function CreateConnect(URL, Agent: AnsiString; Method: TReadMethod; var hSession, hConnect, hRequest: HINTERNET; + var Size: LongInt): Integer; +var + Scheme: TReadScheme; + ProxyProtocolName, Host, Path, Data, Username, Password: AnsiString; + Port, i: Integer; + Buffer: AnsiString; + Flag, Bytes: DWord; + Sended: Boolean; +begin + ParseUrl(URL, Scheme, Host, Path, Data, Username, Password, Port); + Size := -1; + + Result := CONNECT_ERROR_NETWORK; + Buffer := '0000'; + if not InternetGetConnectedState(PAnsiChar(Buffer), 0) then Exit; + Result := CONNECT_ERROR_OFFLINE; + Flag := Ord(Buffer[1]) + Ord(Buffer[2]) * 256 + Ord(Buffer[3]) * 65536 + Ord(Buffer[4]) * 16777216; + if (Flag and INTERNET_CONNECTION_OFFLINE) <> 0 then Exit; + + Result := CONNECT_ERROR_INITIALIZE; + case DwinsHs_Proxy.Mode of + pmDefault: + hSession := InternetOpen(Agent, INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0); + pmDirect: + hSession := InternetOpen(Agent, INTERNET_OPEN_TYPE_DIRECT, '', '', 0); + pmProxy: + begin + case DwinsHs_Proxy.Protocol of + ppHttp: ProxyProtocolName := 'HTTP'; + ppSocks: ProxyProtocolName := 'SOCKS'; + end; + hSession := InternetOpen(Agent, INTERNET_OPEN_TYPE_PROXY, PAnsiChar(ProxyProtocolName + '=' + ProxyProtocolName + + '://' + DwinsHs_Proxy.Host + ':' + IntToStr(DwinsHs_Proxy.Port)), '', 0); + if DwinsHs_Proxy.Username <> '' then + InternetSetOption(hSession, INTERNET_OPTION_PROXY_USERNAME, PAnsiChar(DwinsHs_Proxy.Username), + Length(DwinsHs_Proxy.Username)); + if DwinsHs_Proxy.Password <> '' then + InternetSetOption(hSession, INTERNET_OPTION_PROXY_PASSWORD, PAnsiChar(DwinsHs_Proxy.Password), + Length(DwinsHs_Proxy.Password)); + end; + end; + if hSession = 0 then Exit; + + Result := CONNECT_ERROR_OPENSESSION; + case Scheme of + rpHttp, rpHttps: + hConnect := InternetConnect(hSession, PAnsiChar(Host), Port, PAnsiChar(Username), PAnsiChar(Password), + INTERNET_SERVICE_HTTP, 0, 0); + rpFtp: + begin + if Method = rmPassive then Flag := INTERNET_FLAG_PASSIVE else Flag := 0; + hConnect := InternetConnect(hSession, PAnsiChar(Host), Port, PAnsiChar(Username), PAnsiChar(Password), + INTERNET_SERVICE_FTP, INTERNET_FLAG_EXISTING_CONNECT or Flag, 0); + end; + end; + if hConnect = 0 then + begin + InternetCloseHandle(hSession); + Exit; + end; + + Result := CONNECT_ERROR_CREATEREQUEST; + case Scheme of + rpHttp, rpHttps: + begin + Flag := INTERNET_FLAG_RELOAD; + if Scheme = rpHttps then + Flag := Flag or INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or + INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; + case Method of + rmGet: + begin + if Data <> '' then Path := Path + '?' + Data; + hRequest := HttpOpenRequest(hConnect, 'GET', PAnsiChar(Path), 'HTTP/1.0', '', 0, Flag, 0); + end; + rmPost: + hRequest := HttpOpenRequest(hConnect, 'POST', PAnsiChar(Path), 'HTTP/1.0', '', 0, Flag, 0); + end; + if hRequest = 0 then + begin + InternetCloseHandle(hConnect); + InternetCloseHandle(hSession); + Exit; + end; + Result := CONNECT_ERROR_SENDREQUEST; + case Method of + rmGet: Sended := HttpSendRequest(hRequest, HTTP_HEADER, Length(HTTP_HEADER), '', 0); + rmPost: Sended := HttpSendRequest(hRequest, HTTP_HEADER, Length(HTTP_HEADER), PAnsiChar(Data), Length(Data)); + end; + if Sended then + begin + SetLength(Buffer, READ_BUFFER_LENGTH + 1); + try + Bytes := READ_BUFFER_LENGTH; + Flag := 0; + if HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE, PAnsiChar(Buffer), Bytes, Flag) then + begin + Flag := 0; + for i := 1 to Bytes do Flag := Flag * 10 + Ord(Buffer[i]) - 48; + end; + if Flag >= 400 then + begin + Result := Flag; + end + else + begin + Bytes := READ_BUFFER_LENGTH; + Flag := 0; + if HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH, PAnsiChar(Buffer), Bytes, Flag) then + begin + Size := 0; + for i := 1 to Bytes do Size := Size * 10 + Ord(Buffer[i]) - 48; + end; + Result := CONNECT_OK; + end; + finally + SetLength(Buffer, 0); + end; + end; + if Result <> CONNECT_OK then + begin + InternetCloseHandle(hConnect); + InternetCloseHandle(hSession); + InternetCloseHandle(hRequest); + Exit; + end; + end; + rpFtp: + begin + hRequest := + FtpOpenFile(hConnect, PAnsiChar(Path), GENERIC_READ, FTP_TRANSFER_TYPE_BINARY or INTERNET_FLAG_RELOAD, 0); + if hRequest = 0 then + begin + InternetCloseHandle(hConnect); + InternetCloseHandle(hSession); + Exit; + end; + Size := FtpGetFileSize(hRequest, 0); + Result := CONNECT_OK; + end; + end; +end; + +function DwinsHs_GetRemoteSize(URL, Agent: AnsiString; Method: TReadMethod): LongInt; +var + hSession, hConnect, hRequest: HINTERNET; + Status: Integer; +begin + Status := CreateConnect(URL, Agent, Method, hSession, hConnect, hRequest, Result); + if Status <> CONNECT_OK then + begin + Result := - Status; + Exit; + end; + InternetCloseHandle(hConnect); + InternetCloseHandle(hSession); + InternetCloseHandle(hRequest); +end; + +function DwinsHs_ReadRemoteURL(URL, Agent: AnsiString; Method: TReadMethod; var Response: AnsiString; var Size: LongInt; + SaveFilename: string; OnRead: TOnRead): Integer; +var + hSession, hConnect, hRequest: HINTERNET; + Buffer, ReadStr: AnsiString; + ToContinue: Boolean; + Bytes: DWORD; + Readed, Index: LongInt; +begin + Result := CreateConnect(URL, Agent, Method, hSession, hConnect, hRequest, Size); + if Result <> CONNECT_OK then Exit; + SetLength(Buffer, READ_BUFFER_LENGTH + 1); + try + Index := 0; + Readed := 0; + ToContinue := True; + while ToContinue do + begin + if InternetReadFile(hRequest, PAnsiChar(Buffer), READ_BUFFER_LENGTH, Bytes) then + begin + if Bytes > 0 then + begin + Readed := Readed + Bytes; + ReadStr := Copy(Buffer, 1, Bytes); + if SaveFilename <> '' then + begin + if (Index = 0) and FileExists(SaveFilename) then + begin + Result := READ_ERROR_DELETEFILE; + if not DeleteFile(SaveFilename) then Break; + end; + Result := READ_ERROR_SAVEFILE; + if not SaveStringToFile(SaveFilename, ReadStr, Index <> 0) then Break; + end; + if OnRead <> nil then ToContinue := OnRead(URL, Agent, Method, Index, Size, Readed, Bytes, ReadStr); + Response := Response + ReadStr; + Result := READ_OK; + end + else + begin + ReadStr := ''; + if OnRead <> nil then ToContinue := OnRead(URL, Agent, Method, Index, Size, Readed, 0, ReadStr); + Response := Response + ReadStr; + Break; + end; + if (not ToContinue) or (DwinsHs_CancelDownload <> cdNone) then + begin + ToContinue := False; + Result := READ_ERROR_CANCELED; + end; + DwinsHs_ProcessMessages(); + end + else + begin + ReadStr := ''; + Response := ''; + if SaveFilename <> '' then DeleteFile(SaveFilename); + if OnRead <> nil then ToContinue := OnRead(URL, Agent, Method, -1, Size, Readed, 0, ReadStr); + Result := READ_ERROR_READDATA; + Break; + end; + Index := Index + 1; + end; + finally + SetLength(Buffer, 0); + InternetCloseHandle(hConnect); + InternetCloseHandle(hSession); + InternetCloseHandle(hRequest); + end; +end; + +// ===================================================================================================================== + +#ifdef DwinsHs_Use_Predefined_Downloading_WizardPage + +[CustomMessages] + +#ifndef DwinsHs_Disable_Default_CustomMessages + +DwinsHs_PageCaption =Downloading additional files +DwinsHs_PageDescription =Please wait while setup downloads additional files... +DwinsHs_TotalProgress =Total progress: +DwinsHs_CurrentFile =Current file: +DwinsHs_File =File: +DwinsHs_Speed =Speed: +DwinsHs_Status =Status: +DwinsHs_ElapsedTime =Elapsed time: +DwinsHs_RemainingTime =Remaining time: +DwinsHs_Status_ButtonRetry =&Retry +DwinsHs_Status_ButtonNext =&Next > + +DwinsHs_SizeInBytes =%d Bytes +DwinsHs_SizeInKB =%.2f KB +DwinsHs_SizeInMB =%.2f MB +DwinsHs_ProgressValue = %s of %s (%d%%%) +DwinsHs_SpeedInBytes =%d Bytes/s +DwinsHs_SpeedInKB =%.2f KB/s +DwinsHs_SpeedInMB =%.2f MB/s +DwinsHs_TimeInHour =%d hour(s), %d minute(s), %d second(s) +DwinsHs_TimeInMinute =%d minute(s), %d second(s) +DwinsHs_TimeInSecond =%d second(s) + +DwinsHs_Status_GetFileInformation =Fetch file size +DwinsHs_Status_StartingDownload =Starting to download +DwinsHs_Status_Downloading =Downloading +DwinsHs_Status_DownlaodComplete =Download completes + +DwinsHs_Error_Network =No active Internet connection +DwinsHs_Error_Offline =The computer is in offline mode +DwinsHs_Error_Initialize =Failed to initialize the setup +DwinsHs_Error_OpenSession =Failed to open the FTP or HTTP session +DwinsHs_Error_CreateRequest =Failed to create an HTTP request handle +DwinsHs_Error_SendRequest =Failed to send request to the HTTP server +DwinsHs_Error_DeleteFile =The old file cannot be deleted +DwinsHs_Error_SaveFile =Failed to save data +DwinsHs_Error_Canceled =Download canceled +DwinsHs_Error_ReadData =Failed to read data + +DwinsHs_Status_HTTPError =HTTP error %d: %s +DwinsHs_Status_HTTP400 =Bad request +DwinsHs_Status_HTTP401 =Unauthorized +DwinsHs_Status_HTTP404 =Not found +DwinsHs_Status_HTTP407 =Proxy authentication required +DwinsHs_Status_HTTP500 =Internal error +DwinsHs_Status_HTTP502 =Bad gateway +DwinsHs_Status_HTTP503 =Service unavailable +DwinsHs_Status_HTTPxxx =Other error + +#endif + +[Code] + +function FormatURL(URL: AnsiString): AnsiString; +var + Scheme: TReadScheme; + SchemeTxt, Host, Path, Username, Password, Data: AnsiString; + Port: Integer; +begin + ParseURL(URL, Scheme, Host, Path, Data, Username, Password, Port); + case Scheme of + rpHttp: SchemeTxt := 'http'; + rpHttps: SchemeTxt := 'https'; + rpFtp: SchemeTxt := 'ftp'; + end; + Result := SchemeTxt + '://'; + if (Username <> '') or (Password <> '') then + begin + Host := '@' + Host; + if Username <> '' then Result := Result + Username; + if Password <> '' then Result := Result + ':' + Password; + end; + Result := Result + Host + ':' + IntToStr(Port) + Path; + if (Data <> '') and ((Scheme = rpHttp) or (Scheme = rpHttps)) then Result := Result + '?' + Data; +end; + +function FormatSize(Size: LongInt): string; +begin + if Size < 1024 then + Result := Format(ExpandConstant('{cm:DwinsHs_SizeInBytes}'), [Size]) + else if Size < 1048576 then + Result := Format(ExpandConstant('{cm:DwinsHs_SizeInKB}'), [Double(Size)/1024]) + else + Result := Format(ExpandConstant('{cm:DwinsHs_SizeInMB}'), [Double(Size)/1048576]) +end; + +function FormatSpeed(Speed: LongInt): string; +begin + if Speed < 1024 then + Result := Format(ExpandConstant('{cm:DwinsHs_SpeedInBytes}'), [Speed]) + else if Speed < 1048576 then + Result := Format(ExpandConstant('{cm:DwinsHs_SpeedInKB}'), [Double(Speed)/1024]) + else + Result := Format(ExpandConstant('{cm:DwinsHs_SpeedInMB}'), [Double(Speed)/1048576]) +end; + +function FormatTime(Seconds: LongInt): string; +begin + if Seconds >= 3600 then + Result := Format(ExpandConstant('{cm:DwinsHs_TimeInHour}'), [Seconds div 3600, (Seconds mod 3600) div 60, + Seconds mod 60]) + else if Seconds >= 60 then + Result := Format(ExpandConstant('{cm:DwinsHs_TimeInMinute}'), [Seconds div 60, Seconds mod 60]) + else + Result := Format(ExpandConstant('{cm:DwinsHs_TimeInSecond}'), [Seconds]); +end; + +function DecodeDateTimeString(DateTime: string): LongInt; +var + Year, Month, Day, Hour, Minute, Second: Integer; + a, y, m: Integer; +begin + Year := StrToIntDef(Copy(DateTime, 1, 4), 0); + Month := StrToIntDef(Copy(DateTime, 6, 2), 0); + Day := StrToIntDef(Copy(DateTime, 9, 2), 0); + Hour := StrToIntDef(Copy(DateTime, 12, 2), 0); + Minute := StrToIntDef(Copy(DateTime, 15, 2), 0); + Second := StrToIntDef(Copy(DateTime, 18, 2), 0); + a := (14 - Month) div 12; + y := Year + 4800 - a; + m := Month + 12 * a - 3; + Result := (Day + (153 * m + 2) div 5 + 365 * y + y div 4 - y div 100 + y div 400 - 32045 - 2400000) * 86400 - 43200 + + Hour * 3600 + Minute * 60 + Second; +end; + +#ifndef Hs_CreateLabel +#define Hs_CreateLabel +function CreateLabel(OwnerControl: TComponent; Caption: string; Left, Top, Width: Integer; Wrap, + RightAlignment: Boolean): TLabel; +begin + Result := TLabel.Create(OwnerControl); + if OwnerControl = WizardForm then + Result.Parent := WizardForm + else + Result.Parent := TWizardPage(OwnerControl).Surface; + Result.Caption := Caption; + Result.Left := Left; + Result.Top := Top; + if Wrap or RightAlignment then Result.Width := Width; + if RightAlignment then Result.Alignment := taRightJustify; + Result.WordWrap := Wrap; + Result.AutoSize := True; +end; +#endif + +function CreateProgressBar(OwnerControl: TComponent; Left, Top, Width, Height, MinValue, MaxValue, CurValue: Integer): + TNewProgressBar; +begin + Result := TNewProgressBar.Create(OwnerControl); + if OwnerControl = WizardForm then + Result.Parent := WizardForm + else + Result.Parent := TWizardPage(OwnerControl).Surface; + Result.Left := Left; + Result.Top := Top; + Result.Width := Width; + Result.Height := Height; + Result.Min := MinValue; + Result.Max := MaxValue; + Result.Position := CurValue; +end; + +#ifndef Hs_ClickButton +#define Hs_ClickButton + +const + WM_LBUTTONDOWN = 513; + WM_LBUTTONUP = 514; + +procedure ClickNext(); +begin + PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONDOWN,0,0); + PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONUP,0,0); +end; + +procedure ClickCancel(); +begin + PostMessage(WizardForm.CancelButton.Handle, WM_LBUTTONDOWN,0,0); + PostMessage(WizardForm.CancelButton.Handle, WM_LBUTTONUP,0,0); +end; + +#endif + +Const + FILESIZE_QUERY_SERVER = 0; + FILESIZE_UNKNOWN = -1; + FILESIZE_KEEP_FORMER = -2; + +type + TDownloadWizardDefine = record + DownloadingPage: TWizardPage; + TotalProgress, CurrentProgress: TLabel; + DownloadFile, DownloadSpeed, DownloadStatus, DownloadElapsedTime, DownloadRemainingTime: TLabel; + TotalProgressBar, CurrentProgressBar: TNewProgressBar; + PreviousPageId: Integer; + BeginTime, AllFilesSize, DownloadedSize: LongInt; + DownloadError: Boolean; + end; + + TDownloadItem = record + Filename: string; + URL: AnsiString; + Agent: AnsiString; + Method: TReadMethod; + FileSize: LongInt; + RealSize: LongInt; + Required: Boolean; + Downloaded: Boolean; + end; + + TMirrorItem = record + Filename: string; + URL: AnsiString; + Agent: AnsiString; + Method: TReadMethod; + Required: boolean; + end; + +var + DwinsHs_DownloadWizardDefine: TDownloadWizardDefine; + DwinsHs_DownloadsList: array of TDownloadItem; + DwinsHs_MirrorsList: array of TMirrorItem; + +function UpdateDownloadingPage(URL, Agent: AnsiString; Method: TReadMethod; Index, TotalSize, ReadSize, + CurrentSize: LongInt; var ReadStr: AnsiString): Boolean; +var + ElapsedTime: LongInt; +begin + if Index >= 0 then + begin + DwinsHs_DownloadWizardDefine.DownloadStatus.Caption := ExpandConstant('{cm:DwinsHs_Status_Downloading}'); + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + end; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Position := ReadSize; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.DownloadedSize := DwinsHs_DownloadWizardDefine.DownloadedSize + CurrentSize; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Position := DwinsHs_DownloadWizardDefine.DownloadedSize; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Repaint; + if TotalSize > 0 then + begin + DwinsHs_DownloadWizardDefine.CurrentProgress.Caption := + Format(ExpandConstant('{cm:DwinsHs_ProgressValue}'), [FormatSize(ReadSize), FormatSize(TotalSize), + ReadSize * 100 / TotalSize]); + DwinsHs_DownloadWizardDefine.CurrentProgress.Repaint; + end; + if DwinsHs_DownloadWizardDefine.AllFilesSize > 0 then + begin + DwinsHs_DownloadWizardDefine.TotalProgress.Caption := + Format(ExpandConstant('{cm:DwinsHs_ProgressValue}'), [FormatSize(DwinsHs_DownloadWizardDefine.DownloadedSize), + FormatSize(DwinsHs_DownloadWizardDefine.AllFilesSize), DwinsHs_DownloadWizardDefine.DownloadedSize * 100 / + DwinsHs_DownloadWizardDefine.AllFilesSize]); + DwinsHs_DownloadWizardDefine.TotalProgress.Repaint; + end; + ElapsedTime := + DecodeDateTimeString(GetDateTimeString('yyyy-mm-dd hh:nn:ss', '-', ':')) - DwinsHs_DownloadWizardDefine.BeginTime; + DwinsHs_DownloadWizardDefine.DownloadElapsedTime.Caption := FormatTime(ElapsedTime); + DwinsHs_DownloadWizardDefine.DownloadElapsedTime.Repaint; + if ElapsedTime > 0 then + DwinsHs_DownloadWizardDefine.DownloadSpeed.Caption := + FormatSpeed(DwinsHs_DownloadWizardDefine.DownloadedSize div ElapsedTime) + else + DwinsHs_DownloadWizardDefine.DownloadSpeed.Caption := ''; + DwinsHs_DownloadWizardDefine.DownloadSpeed.Repaint; + if DwinsHs_DownloadWizardDefine.DownloadedSize > 0 then + DwinsHs_DownloadWizardDefine.DownloadRemainingTime.Caption := + FormatTime((DwinsHs_DownloadWizardDefine.AllFilesSize - DwinsHs_DownloadWizardDefine.DownloadedSize) * + ElapsedTime / DwinsHs_DownloadWizardDefine.DownloadedSize) + else + DwinsHs_DownloadWizardDefine.DownloadRemainingTime.Caption := ''; + DwinsHs_DownloadWizardDefine.DownloadRemainingTime.Repaint; + Result := DwinsHs_CancelDownload = cdNone; + ReadStr := ''; +end; + +function GetDownloadStateText(State: Integer): string; +var + Text: string; +begin + if State >= 400 then + begin + Text := ExpandConstant('{cm:DwinsHs_Status_HTTPxxx}'); + case State of + 400: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP400}'); + 401: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP401}'); + 404: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP404}'); + 407: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP407}'); + 500: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP500}'); + 502: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP502}'); + 503: Text := ExpandConstant('{cm:DwinsHs_Status_HTTP503}'); + end; + Result := Format(ExpandConstant('{cm:DwinsHs_Status_HTTPError}'), [State, Text]); + end + else + case State of + READ_OK: Result := ExpandConstant('{cm:DwinsHs_Status_DownlaodComplete}'); + CONNECT_ERROR_NETWORK: Result := ExpandConstant('{cm:DwinsHs_Error_Network}'); + CONNECT_ERROR_OFFLINE: Result := ExpandConstant('{cm:DwinsHs_Error_Offline}'); + CONNECT_ERROR_INITIALIZE: Result := ExpandConstant('{cm:DwinsHs_Error_Initialize}'); + CONNECT_ERROR_OPENSESSION: Result := ExpandConstant('{cm:DwinsHs_Error_OpenSession}'); + CONNECT_ERROR_CREATEREQUEST: Result := ExpandConstant('{cm:DwinsHs_Error_CreateRequest}'); + CONNECT_ERROR_SENDREQUEST: Result := ExpandConstant('{cm:DwinsHs_Error_SendRequest}'); + READ_ERROR_DELETEFILE: Result := ExpandConstant('{cm:DwinsHs_Error_DeleteFile}'); + READ_ERROR_SAVEFILE: Result := ExpandConstant('{cm:DwinsHs_Error_SaveFile}'); + READ_ERROR_CANCELED: Result := ExpandConstant('{cm:DwinsHs_Error_Canceled}'); + READ_ERROR_READDATA: Result := ExpandConstant('{cm:DwinsHs_Error_ReadData}'); + end; +end; + +// ===================================================================================================================== + +procedure DwinsHs_AppendRemoteFile(Filename: string; URL, Agent: AnsiString; Method: TReadMethod; FileSize: LongInt); +var + i, c: Integer; + Finded: Boolean; +begin + URL := FormatURL(URL); + Filename := Trim(Filename); + Agent := Trim(Agent); + Finded := False; + c := GetArrayLength(DwinsHs_DownloadsList); + for i := 0 to c - 1 do + begin + if CompareText(DwinsHs_DownloadsList[i].Filename, Filename) = 0 then + begin + Finded := True; + DwinsHs_DownloadsList[i].URL := URL; + DwinsHs_DownloadsList[i].Agent := Agent; + DwinsHs_DownloadsList[i].Method := Method; + DwinsHs_DownloadsList[i].Required := True; + DwinsHs_DownloadsList[i].FileSize := FileSize; + Break; + end; + end; + if not Finded then + begin + SetArrayLength(DwinsHs_DownloadsList, c + 1); + DwinsHs_DownloadsList[c].Filename := Filename; + DwinsHs_DownloadsList[c].URL := URL; + DwinsHs_DownloadsList[c].Agent := Agent; + DwinsHs_DownloadsList[c].Method := Method; + DwinsHs_DownloadsList[c].FileSize := FileSize; + DwinsHs_DownloadsList[c].RealSize := FILESIZE_UNKNOWN; + DwinsHs_DownloadsList[c].Downloaded := False; + DwinsHs_DownloadsList[c].Required := True; + end; +end; + +procedure DwinsHs_AppendMirrorFile(Filename: string; URL, Agent: AnsiString; Method: TReadMethod); +var + i, c: Integer; + Finded: Boolean; +begin + URL := FormatURL(URL); + Filename := Trim(Filename); + Agent := Trim(Agent); + Finded := False; + c := GetArrayLength(DwinsHs_MirrorsList); + for i := 0 to c - 1 do + begin + if (CompareText(DwinsHs_MirrorsList[i].Filename, Filename) = 0) and (DwinsHs_MirrorsList[i].URL = URL) and + (DwinsHs_MirrorsList[i].Agent = Agent) and (DwinsHs_MirrorsList[i].Method = Method) then + begin + Finded := True; + DwinsHs_MirrorsList[i].Required := True; + Break; + end; + end; + if not Finded then + begin + SetArrayLength(DwinsHs_MirrorsList, c + 1); + DwinsHs_MirrorsList[c].Filename := Filename; + DwinsHs_MirrorsList[c].URL := URL; + DwinsHs_MirrorsList[c].Agent := Agent; + DwinsHs_MirrorsList[c].Method := Method; + DwinsHs_MirrorsList[c].Required := True; + end; +end; + +function FindMirror(Filename: string; var URL, Agent: AnsiString; var Method: TReadMethod; + var MirrorID: Integer): Boolean; +var + i, c: Integer; +begin + Result := False; + c := GetArrayLength(DwinsHs_MirrorsList); + for i := MirrorID + 1 to c - 1 do + begin + if (CompareText(DwinsHs_MirrorsList[i].Filename, Filename) = 0) and DwinsHs_MirrorsList[i].Required then + begin + URL := DwinsHs_MirrorsList[i].URL; + Agent := DwinsHs_MirrorsList[i].Agent; + Method := DwinsHs_MirrorsList[i].Method; + MirrorID := i; + Result := True; + Break; + end; + end; +end; + +#ifdef DwinsHs_Use_RemoveRemoteFile +function DwinsHs_RemoveRemoteFile(Filename: string; Delete: Boolean): Boolean; +var + i: Integer; +begin + Filename := Trim(Filename); + Result := False; + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + if (CompareText(DwinsHs_DownloadsList[i].Filename, Filename) = 0) and DwinsHs_DownloadsList[i].Required then + begin + Result := True; + DwinsHs_DownloadsList[i].Required := False; + if Delete then + begin + DwinsHs_DownloadsList[i].RealSize := FILESIZE_UNKNOWN; + DwinsHs_DownloadsList[i].Downloaded := False; + if FileExists(Filename) then DeleteFile(Filename); + end; + Break; + end; + end; + for i := 0 to GetArrayLength(DwinsHs_MirrorsList) - 1 do + if CompareText(DwinsHs_MirrorsList[i].Filename, Filename) = 0 then DwinsHs_MirrorsList[i].Required := False; +end; +#endif + +#ifdef DwinsHs_Use_ResetRemoteFile +function DwinsHs_ResetRemoteFile(Filename: string; FileSize: Longint): Boolean; +var + i: Integer; +begin + Filename := Trim(Filename); + Result := False; + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + if (CompareText(DwinsHs_DownloadsList[i].Filename, Filename) = 0) and DwinsHs_DownloadsList[i].Required then + begin + Result := True; + if FileSize <> FILESIZE_KEEP_FORMER then DwinsHs_DownloadsList[i].FileSize := FileSize; + DwinsHs_DownloadsList[i].RealSize := FILESIZE_UNKNOWN; + DwinsHs_DownloadsList[i].Downloaded := False; + if FileExists(Filename) then DeleteFile(Filename); + Break; + end; + end; +end; +#endif + +#ifdef DwinsHs_Use_RemoteFilesCount +function DwinsHs_RemoteFilesCount(WaitToDownload: Boolean): Integer; +var + i: Integer; +begin + Result := 0; + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + if DwinsHs_DownloadsList[i].Required then + begin + Result := Result + 1; + if WaitToDownload and DwinsHs_DownloadsList[i].Downloaded then Result := Result - 1; + end; + end; +end; +#endif + +#ifdef DwinsHs_Use_RemoveAllRemoteFiles +procedure DwinsHs_RemoveAllRemoteFiles(Delete: Boolean); +var + i: Integer; +begin + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + DwinsHs_DownloadsList[i].Required := False; + if Delete and DwinsHs_DownloadsList[i].Required then + begin + DwinsHs_DownloadsList[i].RealSize := FILESIZE_UNKNOWN; + DwinsHs_DownloadsList[i].Downloaded := False; + if FileExists(DwinsHs_DownloadsList[i].Filename) then DeleteFile(DwinsHs_DownloadsList[i].Filename); + end; + end; + for i := 0 to GetArrayLength(DwinsHs_MirrorsList) - 1 do DwinsHs_MirrorsList[i].Required := False; +end; +#endif + +#ifdef DwinsHs_Use_ResetAllRemoteFiles +procedure DwinsHs_ResetAllRemoteFiles(); +var + i: Integer; +begin + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + DwinsHs_DownloadsList[i].RealSize := FILESIZE_UNKNOWN; + DwinsHs_DownloadsList[i].Downloaded := False; + if FileExists(DwinsHs_DownloadsList[i].Filename) then DeleteFile(DwinsHs_DownloadsList[i].Filename); + end; +end; +#endif + +#if (Find(FindSection('Files') + 1, 'DwinsHs_Check(', FIND_CONTAINS||FIND_TRIM) > 0) +function DwinsHs_Check(Filename, URL, Agent, Method: string; FileSize: LongInt): Boolean; +var + MethodValue: TReadMethod; +begin + Result := True; + case LowerCase(Trim(Method)) of + 'get': MethodValue := rmGet; + 'post': MethodValue := rmPost; + 'active': MethodValue := rmActive; + 'passive': MethodValue := rmPassive; + end; + DwinsHs_AppendRemoteFile(Filename, URL, Agent, MethodValue, FileSize); +end; +#endif + +procedure DwinsHs_InitializeWizard(AfterId: Integer); +begin + DwinsHs_DownloadWizardDefine.PreviousPageId := AfterId; + DwinsHs_DownloadWizardDefine.DownloadingPage := CreateCustomPage(AfterId, + ExpandConstant('{cm:DwinsHs_PageCaption}'), ExpandConstant('{cm:DwinsHs_PageDescription}')); + DwinsHs_DownloadWizardDefine.TotalProgress := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(16), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_TotalProgress}'), + ScaleX(8), ScaleY(16), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.TotalProgressBar := CreateProgressBar(DwinsHs_DownloadWizardDefine.DownloadingPage, + ScaleX(8), ScaleY(34), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), ScaleY(16), 0, 0, + 0); + DwinsHs_DownloadWizardDefine.CurrentProgress := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(60), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_CurrentFile}'), ScaleX(8), + ScaleY(60), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.CurrentProgressBar := CreateProgressBar(DwinsHs_DownloadWizardDefine.DownloadingPage, + ScaleX(8), ScaleY(78), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), ScaleY(16), 0, 0, + 0); + DwinsHs_DownloadWizardDefine.DownloadFile := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(114), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_File}'), + ScaleX(8), ScaleY(114), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.DownloadSpeed := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(134), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_Speed}'), ScaleX(8), + ScaleY(134), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.DownloadStatus := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(154), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_Status}'), + ScaleX(8), ScaleY(154), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.DownloadElapsedTime := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(174), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_ElapsedTime}'), + ScaleX(8), ScaleY(174), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + DwinsHs_DownloadWizardDefine.DownloadRemainingTime := CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, '', + ScaleX(8), ScaleY(194), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, True); + CreateLabel(DwinsHs_DownloadWizardDefine.DownloadingPage, ExpandConstant('{cm:DwinsHs_RemainingTime}'), + ScaleX(8), ScaleY(194), DwinsHs_DownloadWizardDefine.DownloadingPage.SurfaceWidth - ScaleX(16), False, False); + SetArrayLength(DwinsHs_DownloadsList, 0); + DwinsHs_Proxy.Mode := pmDefault; +end; + +type + TBeforeDownload = function (): Boolean; + TAfterDownload = procedure (State: Integer); + +var + DwinsHs_BeforeDownload: TBeforeDownload; + DwinsHs_AfterDownload: TAfterDownload; + +procedure DwinsHs_CurPageChanged(CurPageID: Integer; BeforeDownload: TBeforeDownload; AfterDownload: TAfterDownload); +var + CurURL, CurAgent: AnsiString; + CurMethod: TReadMethod; + CurDownloadedSize: LongInt; + Response: AnsiString; + CurrentSize, Size: LongInt; + i, State, MirrorID: Integer; +begin + DwinsHs_BeforeDownload := BeforeDownload; + DwinsHs_AfterDownload := AfterDownload; + if (CurPageId = DwinsHs_DownloadWizardDefine.PreviousPageId) and (CurPageId = wpPreparing) then + begin + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do DwinsHs_DownloadsList[i].Required := False; + end + else if CurPageId = DwinsHs_DownloadWizardDefine.DownloadingPage.Id then + begin + WizardForm.NextButton.Enabled := False; + WizardForm.NextButton.Caption := ExpandConstant('{cm:DwinsHs_Status_ButtonNext}'); + WizardForm.NextButton.Repaint; + if BeforeDownload <> nil then + begin + if not BeforeDownload() then Exit; + end; + DwinsHs_DownloadWizardDefine.TotalProgress.Caption := ''; + DwinsHs_DownloadWizardDefine.TotalProgress.Repaint; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Position := 0; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Style := npbstMarquee; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.CurrentProgress.Caption := ''; + DwinsHs_DownloadWizardDefine.CurrentProgress.Repaint; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Position := 0; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Style := npbstMarquee; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.DownloadSpeed.Caption := ''; + DwinsHs_DownloadWizardDefine.DownloadSpeed.Repaint; + DwinsHs_DownloadWizardDefine.DownloadStatus.Caption := ExpandConstant('{cm:DwinsHs_Status_GetFileInformation}'); + DwinsHs_DownloadWizardDefine.DownloadStatus.Font.Color := DwinsHs_DownloadWizardDefine.DownloadFile.Font.Color; + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + DwinsHs_DownloadWizardDefine.DownloadElapsedTime.Caption := FormatTime(0); + DwinsHs_DownloadWizardDefine.DownloadElapsedTime.Repaint; + DwinsHs_DownloadWizardDefine.DownloadRemainingTime.Caption := ''; + DwinsHs_DownloadWizardDefine.DownloadRemainingTime.Repaint; + DwinsHs_ProcessMessages(); + DwinsHs_DownloadWizardDefine.DownloadError := False; + DwinsHs_DownloadWizardDefine.AllFilesSize := 0; + DwinsHs_DownloadWizardDefine.DownloadedSize := 0; + DwinsHs_CancelDownload := cdNone; + State := 0; + DwinsHs_DownloadWizardDefine.BeginTime := DecodeDateTimeString(GetDateTimeString('yyyy-mm-dd hh:nn:ss', '-', ':')); + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + if DwinsHs_DownloadsList[i].Required then + begin + DwinsHs_DownloadWizardDefine.DownloadFile.Caption := ExtractFileName(DwinsHs_DownloadsList[i].Filename); + DwinsHs_DownloadWizardDefine.DownloadFile.Repaint; + DwinsHs_DownloadsList[i].RealSize := DwinsHs_DownloadsList[i].FileSize; + if DwinsHs_DownloadsList[i].FileSize <= 0 then + begin + CurURL := DwinsHs_DownloadsList[i].URL; + CurAgent := DwinsHs_DownloadsList[i].Agent; + CurMethod := DwinsHs_DownloadsList[i].Method; + MirrorID := -1; + repeat + CurrentSize := DwinsHs_GetRemoteSize(CurURL, CurAgent, CurMethod); + if CurrentSize >= 0 then Break; + if not FindMirror(DwinsHs_DownloadsList[i].Filename, CurURL, CurAgent, CurMethod, MirrorId) then Break; + until false; + if CurrentSize >= 0 then DwinsHs_DownloadsList[i].RealSize := CurrentSize; + end; + DwinsHs_ProcessMessages(); + if DwinsHs_DownloadsList[i].RealSize > 0 then + DwinsHs_DownloadWizardDefine.AllFilesSize := + DwinsHs_DownloadWizardDefine.AllFilesSize + DwinsHs_DownloadsList[i].RealSize; + end; + end; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Max := DwinsHs_DownloadWizardDefine.AllFilesSize; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Style := npbstNormal; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Style := npbstNormal; + DwinsHs_DownloadWizardDefine.DownloadStatus.Font.Color := DwinsHs_DownloadWizardDefine.DownloadFile.Font.Color; + DwinsHs_DownloadWizardDefine.TotalProgressBar.State := npbsNormal; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.State := npbsNormal; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + DwinsHs_ProcessMessages(); + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + DwinsHs_ProcessMessages(); + if DwinsHs_DownloadsList[i].Downloaded then + begin + DwinsHs_DownloadWizardDefine.DownloadedSize := + DwinsHs_DownloadWizardDefine.DownloadedSize + DwinsHs_DownloadsList[i].RealSize; + DwinsHs_DownloadWizardDefine.DownloadFile.Caption := ExtractFileName(DwinsHs_DownloadsList[i].Filename); + DwinsHs_DownloadWizardDefine.DownloadFile.Repaint; + DwinsHs_DownloadWizardDefine.DownloadStatus.Caption := ExpandConstant('{cm:DwinsHs_Status_DownlaodComplete}'); + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + UpdateDownloadingPage(DwinsHs_DownloadsList[i].URL, DwinsHs_DownloadsList[i].Agent, + DwinsHs_DownloadsList[i].Method, -1, DwinsHs_DownloadsList[i].RealSize, DwinsHs_DownloadsList[i].RealSize, 0, + Response); + if DwinsHs_CancelDownload <> cdNone then Break; + end + else + begin + DwinsHs_DownloadWizardDefine.DownloadFile.Caption := ExtractFileName(DwinsHs_DownloadsList[i].Filename); + DwinsHs_DownloadWizardDefine.DownloadFile.Repaint; + CurDownloadedSize := DwinsHs_DownloadWizardDefine.DownloadedSize; + CurURL := DwinsHs_DownloadsList[i].URL; + CurAgent := DwinsHs_DownloadsList[i].Agent; + CurMethod := DwinsHs_DownloadsList[i].Method; + MirrorID := -1; + repeat + DwinsHs_DownloadWizardDefine.DownloadedSize := CurDownloadedSize; + DwinsHs_DownloadWizardDefine.DownloadStatus.Caption := ExpandConstant('{cm:DwinsHs_Status_StartingDownload}'); + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + UpdateDownloadingPage(CurURL, CurAgent, CurMethod, -1, DwinsHs_DownloadsList[i].RealSize, 0, 0, Response); + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Max := DwinsHs_DownloadsList[i].RealSize; + State := DwinsHs_ReadRemoteURL(CurURL, CurAgent, CurMethod, Response, Size, DwinsHs_DownloadsList[i].Filename, + @UpdateDownloadingPage); + DwinsHs_DownloadWizardDefine.DownloadStatus.Caption := GetDownloadStateText(State); + DwinsHs_DownloadWizardDefine.DownloadStatus.Repaint; + if DwinsHs_CancelDownload <> cdNone then Break; + if State = READ_OK then Break; + if not FindMirror(DwinsHs_DownloadsList[i].Filename, CurURL, CurAgent, CurMethod, MirrorID) then Break; + until false; + if DwinsHs_CancelDownload <> cdNone then Break; + if State <> READ_OK then Break; + DwinsHs_DownloadsList[i].Downloaded := True; + end; + WizardForm.Repaint; + end; + DwinsHs_DownloadWizardDefine.TotalProgressBar.Repaint; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.Repaint; + case DwinsHs_CancelDownload of + cdNone: + begin + WizardForm.NextButton.Enabled := True; + if State <> READ_OK then + begin + DwinsHs_DownloadWizardDefine.TotalProgressBar.State := npbsError; + DwinsHs_DownloadWizardDefine.DownloadStatus.Font.Color := clRed; + DwinsHs_DownloadWizardDefine.CurrentProgressBar.State := npbsError; + WizardForm.NextButton.Caption := ExpandConstant('{cm:DwinsHs_Status_ButtonRetry}'); + WizardForm.NextButton.Repaint; + DwinsHs_DownloadWizardDefine.DownloadError := True; + if AfterDownload <> nil then AfterDownload(State); + end + else + begin + DwinsHs_DownloadWizardDefine.DownloadStatus.Font.Color := clGreen; + if AfterDownload <> nil then AfterDownload(State); + #ifdef DwinsHs_Auto_Continue + ClickNext(); + #endif + end; + end; + cdBack: ; + cdExit: ClickCancel(); + end; + end; +end; + +procedure DwinsHs_ShouldSkipPage(CurPageID: Integer; var ChangeResult: Boolean); +var + i: Integer; +begin + if CurPageID = DwinsHs_DownloadWizardDefine.DownloadingPage.Id then + begin + ChangeResult := True; + for i := 0 to GetArrayLength(DwinsHs_DownloadsList) - 1 do + begin + if DwinsHs_DownloadsList[i].Required and (not DwinsHs_DownloadsList[i].Downloaded) then + begin + ChangeResult := False; + Break; + end; + end; + end; +end; + +procedure DwinsHs_BackButtonClick(CurPageID: Integer); +begin + if CurPageID = DwinsHs_DownloadWizardDefine.DownloadingPage.Id then DwinsHs_CancelDownload := cdBack; +end; + +procedure DwinsHs_NextButtonClick(CurPageID: Integer; var ChangeResult: Boolean); +begin + if (CurPageID = DwinsHs_DownloadWizardDefine.DownloadingPage.Id) and DwinsHs_DownloadWizardDefine.DownloadError then + begin + ChangeResult := False; + DwinsHs_CurPageChanged(CurPageID, DwinsHs_BeforeDownload, DwinsHs_AfterDownload); + end; +end; + +procedure DwinsHs_CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); +begin + if (CurPageId = DwinsHs_DownloadWizardDefine.DownloadingPage.Id) and (DwinsHs_CancelDownload = cdExit) then + Confirm := False; +end; + +#endif diff --git a/distr/iss/make_tess_iss.sh b/distr/iss/make_tess_iss.sh new file mode 100755 index 0000000..b64ee6f --- /dev/null +++ b/distr/iss/make_tess_iss.sh @@ -0,0 +1,230 @@ +#!/bin/bash + +TESSDATA_DIR="../../../tessdata" +TESSDATA_TAG="3.04.00" +for arg in ${@}; do + case "$arg" in + "tessdata" ) TESSDATA_DIR="$arg";; + "tag="* ) TESSDATA_TAG=${arg:4};; + esac +done +TESSDATA_DIR=`readlink -e $TESSDATA_DIR` +OUT_FILE="tessdata.iss" +OUT_FILE=`readlink -m $OUT_FILE` +LANGS_FILE="code2langTr.txt" + +function getLangsOrder { + local FIELD=$1 + local ORDER=`cat $LANGS_FILE | cut -d' ' -f$FIELD | sort` + local FNAMES="" + for i in $ORDER; do + local FNAME=`grep "$i" $LANGS_FILE | cut -d' ' -f1` + if [[ -z "$FNAME" || "${FNAME:0:1}" == "#" ]]; then + continue; + fi + FNAMES=$FNAMES" $FNAME" + done + echo $FNAMES +} + +FILES="[Files]\n" +COMPONENTS="[Components]\nName: \"Languages\"; Description: \"{cm:Languages}\"; Types: custom full\n" +MESSAGES_EN="\n[CustomMessages]\nen.Languages=OCR Languages\n" +MESSAGES_RU="\n[CustomMessages]\nru.Languages=Языки распознавания\n" +PREV_LANG="" +COMPACT_LANGS="eng rus deu spa chi_sim fra jpn" + + +function fillIss { + local LANG_FIELD=$1 + local COMPONENT_LANG=$2 + local ONLY_COMPONENTS=$3 + COMPONENTS=$COMPONENTS"\n" + local ORDER=`cat $LANGS_FILE | cut -d' ' -f$LANG_FIELD | sort` + for i in $ORDER; do + local LANG_LINE=$(grep " $i " $LANGS_FILE) + local FNAME=$(echo "$LANG_LINE" | cut -d' ' -f1) + local LANG_EN=$(echo "$LANG_LINE" | cut -d' ' -f2) + local LANG_RU=$(echo "$LANG_LINE" | cut -d' ' -f3) + if [[ -z "$FNAME" || "${FNAME:0:1}" == "#" ]]; then + continue; + fi + + local CUR_LANG_FILES=`find $TESSDATA_DIR -name "$FNAME.*"` + if [ -z "$CUR_LANG_FILES" ]; then + echo "no lang" + continue + fi + + + local COMPONENT_SIZE=0 + for s in `find $TESSDATA_DIR -name "$FNAME.*" -exec wc -c {} \; | cut -d' ' -f1`; do + COMPONENT_SIZE=$(expr $COMPONENT_SIZE + $s) + done + TYPES="full" + if [[ $COMPACT_LANGS =~ $FNAME ]]; then + TYPES="compact custom $TYPES" + fi + COMPONENTS=$COMPONENTS"Name: \"Languages\\\\$LANG_EN\"; Description: \"{cm:$LANG_EN}\"; Languages: $COMPONENT_LANG; + Types: $TYPES; ExtraDiskSpaceRequired: $COMPONENT_SIZE\n" + + + if $ONLY_COMPONENTS; then + continue; + fi + MESSAGES_EN=$MESSAGES_EN"en.$LANG_EN=$(echo "$LANG_EN" | sed 's/_/ /g')\n" + MESSAGES_RU=$MESSAGES_RU"ru.$LANG_EN=$(echo "$LANG_RU" | sed 's/_/ /g')\n" + + for f in $CUR_LANG_FILES; do + local FNAME=$(basename "$f") + FILES=$FILES"Source: \"{tmp}\\\\$FNAME\"; DestDir: \"{app}\\\\tessdata\"; Components: Languages\\\\$LANG_EN; + Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\\\\$FNAME'), + 'https://cdn.rawgit.com/tesseract-ocr/tessdata/$TESSDATA_TAG/$FNAME', 'ST_setup', 'Get', 0);\n" + done + done +} +fillIss 2 "en" false +fillIss 3 "ru" true + +echo -e $FILES > $OUT_FILE +echo -e $COMPONENTS >> $OUT_FILE +echo -e $MESSAGES_EN >> $OUT_FILE +echo -e $MESSAGES_RU >> $OUT_FILE +iconv -f utf8 -t cp1251 $OUT_FILE -o $OUT_FILE.1 +mv $OUT_FILE.1 $OUT_FILE + +exit 0 +function fillIss { + local ORDER=$1 + local FIELD=$2 + local ONLY_COMPONENTS=$3 + local FILES="" + for i in $ORDER; do + local CUR_LANG_FILES=`find $TESSDATA_DIR -name \"$i.*\"` + if [ -z "$CUR_LANG_FILES" ]; then + continue + fi + FILES=$FILES" `find $TESSDATA_DIR -name \"$i.*\"`" + done + for i in $FILES; do + local fName=$(basename "$i") + local LANG=$(echo "$fName" | cut -d'.' -f1) + LANG_LINE=$(grep "$lang " $LANGS_FILE) + if [[ -z "$LANG_LINE" || "${LANG_LINE:0:1}" == "#" ]]; then + continue; + fi + LANG_EN=$(echo "$LANG_LINE" | cut -d' ' -f2) + LANG_RU=$(echo "$LANG_LINE" | cut -d' ' -f3) + if ! $ONLY_COMP; then + FILES=$FILES"Source: \"{tmp}\\\\$fName\"; DestDir: \"{app}\\\\tessdata\"; Components: Languages\\\\$LANG_EN; + Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\\\\$fName'), + 'https://cdn.rawgit.com/tesseract-ocr/tessdata/$TESSDATA_TAG/$fName', 'ST_setup', 'Get', 0);\n" + fi + if [ "$PREV_LANG" != "$LANG_EN" ]; then + PREV_LANG="$LANG_EN" + SIZE=0 + for s in `find $TESSDATA_DIR -name "$lang.*" -exec wc -c {} \; | cut -d' ' -f1`; do + SIZE=$(expr $SIZE + $s) + done + TYPES="full" + if [[ $COMPACT_LANGS =~ $lang ]]; then + TYPES="compact custom $TYPES" + fi + COMPONENTS=$COMPONENTS"Name: \"Languages\\\\$LANG_EN\"; Description: \"{cm:$LANG_EN}\"; Languages: $LLANG; Types: $TYPES; ExtraDiskSpaceRequired: $SIZE\n" + + if ! $ONLY_COMP; then + MESSAGES_EN=$MESSAGES_EN"en.$LANG_EN=$(echo "$LANG_EN" | sed 's/_/ /g')\n" + MESSAGES_RU=$MESSAGES_RU"ru.$LANG_EN=$(echo "$LANG_RU" | sed 's/_/ /g')\n" + fi + fi + done +} +echo $(fillIss "$(getLangsOrder 2)" "en" false) + + + +function doJob { +LLANG=$2 +ONLY_COMP=$3 +for fff in $1; do + for f in `find $TESSDATA_DIR -name "$fff.*"`; do + f=$(basename "$f") + lang=$(echo "$f" | cut -d'.' -f1) + LANG_LINE=$(grep "$lang " $LANGS_FILE) + if [[ -z "$LANG_LINE" || "${LANG_LINE:0:1}" == "#" ]]; then + continue; + fi + LANG_EN=$(echo "$LANG_LINE" | cut -d' ' -f2) + LANG_RU=$(echo "$LANG_LINE" | cut -d' ' -f3) + if ! $ONLY_COMP; then + FILES=$FILES"Source: \"{tmp}\\\\$f\"; DestDir: \"{app}\\\\tessdata\"; Components: Languages\\\\$LANG_EN; + Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\\\\$f'), + 'https://cdn.rawgit.com/tesseract-ocr/tessdata/$TESSDATA_TAG/$f', 'ST_setup', 'Get', 0);\n" + fi + if [ "$PREV_LANG" != "$LANG_EN" ]; then + PREV_LANG="$LANG_EN" + SIZE=0 + for s in `find $TESSDATA_DIR -name "$lang.*" -exec wc -c {} \; | cut -d' ' -f1`; do + SIZE=$(expr $SIZE + $s) + done + TYPES="full" + if [[ $COMPACT_LANGS =~ $lang ]]; then + TYPES="compact custom $TYPES" + fi + COMPONENTS=$COMPONENTS"Name: \"Languages\\\\$LANG_EN\"; Description: \"{cm:$LANG_EN}\"; Languages: $LLANG; Types: $TYPES; ExtraDiskSpaceRequired: $SIZE\n" + + if ! $ONLY_COMP; then + MESSAGES_EN=$MESSAGES_EN"en.$LANG_EN=$(echo "$LANG_EN" | sed 's/_/ /g')\n" + MESSAGES_RU=$MESSAGES_RU"ru.$LANG_EN=$(echo "$LANG_RU" | sed 's/_/ /g')\n" + fi + fi + done +done +} +doJob "$(getOrder 2)" "en" false +doJob "$(getOrder 3)" "ru" true +echo $COMPONENTS +echo -e $FILES > $OUT_FILE +echo -e $COMPONENTS >> $OUT_FILE +echo -e $MESSAGES_EN >> $OUT_FILE +echo -e $MESSAGES_RU >> $OUT_FILE +iconv -f utf8 -t cp1251 $OUT_FILE -o $OUT_FILE.1 +mv $OUT_FILE.1 $OUT_FILE + + +exit 0 + + +for f in `ls $TESSDATA_DIR | sort`; do + lang=$(echo "$f" | cut -d'.' -f1) + LANG_LINE=$(grep "$lang " $LANGS_FILE) + if [[ -z "$LANG_LINE" || "${LANG_LINE:0:1}" == "#" ]]; then + continue; + fi + LANG_EN=$(echo "$LANG_LINE" | cut -d' ' -f2) + LANG_RU=$(echo "$LANG_LINE" | cut -d' ' -f3) + FILES=$FILES"Source: \"{tmp}\\\\$f\"; DestDir: \"{app}\\\\tessdata\"; Components: Languages\\\\$LANG_EN; + Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\\\\$f'), + 'https://cdn.rawgit.com/tesseract-ocr/tessdata/$TESSDATA_TAG/$f', 'ST_setup', 'Get', 0);\n" + if [ "$PREV_LANG" != "$LANG_EN" ]; then + PREV_LANG="$LANG_EN" + SIZE=0 + for s in `find $TESSDATA_DIR -name "$lang.*" -exec wc -c {} \; | cut -d' ' -f1`; do + SIZE=$(expr $SIZE + $s) + done + TYPES="full" + if [[ $COMPACT_LANGS =~ $lang ]]; then + TYPES="compact custom $TYPES" + fi + COMPONENTS=$COMPONENTS"Name: \"Languages\\\\$LANG_EN\"; Description: \"{cm:$LANG_EN}\"; Types: $TYPES; ExtraDiskSpaceRequired: $SIZE\n" + MESSAGES_EN=$MESSAGES_EN"en.$LANG_EN=$(echo "$LANG_EN" | sed 's/_/ /g')\n" + MESSAGES_RU=$MESSAGES_RU"ru.$LANG_EN=$(echo "$LANG_RU" | sed 's/_/ /g')\n" + fi +done + +echo -e $FILES > $OUT_FILE +echo -e $COMPONENTS >> $OUT_FILE +echo -e $MESSAGES_EN >> $OUT_FILE +echo -e $MESSAGES_RU >> $OUT_FILE +iconv -f utf8 -t cp1251 $OUT_FILE -o $OUT_FILE.1 +mv $OUT_FILE.1 $OUT_FILE diff --git a/distr/iss/tessdata.iss b/distr/iss/tessdata.iss new file mode 100644 index 0000000..9c82276 --- /dev/null +++ b/distr/iss/tessdata.iss @@ -0,0 +1,551 @@ +[Files] +Source: "{tmp}\afr.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Afrikaans; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\afr.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/afr.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\sqi.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Albanian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\sqi.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/sqi.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\amh.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Amharic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\amh.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/amh.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\grc.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Ancient_Greek; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\grc.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/grc.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\ara.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\Arabic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ara.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ara.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\asm.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Assamese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\asm.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/asm.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\aze.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Azerbaijani; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\aze.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/aze.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\eus.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Basque; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eus.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eus.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\bel.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Belarusian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\bel.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/bel.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ben.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Bengali; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ben.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ben.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\bos.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Bosnian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\bos.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/bos.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\bul.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Bulgarian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\bul.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/bul.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\mya.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Burmese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\mya.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/mya.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\cat.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Catalan; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\cat.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/cat.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ceb.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Cebuano; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ceb.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ceb.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\chr.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Cherokee; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\chr.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/chr.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\chi_sim.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Chineese_simplified; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\chi_sim.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/chi_sim.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\chi_tra.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Chineese_traditional; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\chi_tra.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/chi_tra.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\hrv.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Croatian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hrv.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hrv.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ces.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Czech; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ces.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ces.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\dan.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Danish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\dan.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/dan.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\nld.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Dutch; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\nld.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/nld.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\dzo.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Dzongkha; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\dzo.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/dzo.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.tesseract_cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.tesseract_cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.tesseract_cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\eng.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\eng.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/eng.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\epo.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Esperanto; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\epo.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/epo.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\est.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Estonian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\est.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/est.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\fin.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Finnish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fin.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fin.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\frk.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Frankish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\frk.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/frk.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.tesseract_cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.tesseract_cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.tesseract_cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\fra.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fra.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fra.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\glg.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Galician; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\glg.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/glg.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kat.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Georgian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kat.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kat.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\deu.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\German; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\deu.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/deu.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\guj.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Gujarati; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\guj.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/guj.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\hat.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Haitian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hat.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hat.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\heb.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Hebrew; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\heb.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/heb.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.tesseract_cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.tesseract_cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.tesseract_cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\hin.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\Hindi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hin.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hin.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\hun.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Hungarian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\hun.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/hun.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\isl.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Icelandic; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\isl.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/isl.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ind.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Indonesian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ind.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ind.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\iku.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Inuktitut; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\iku.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/iku.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\gle.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Irish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\gle.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/gle.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.tesseract_cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.tesseract_cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.tesseract_cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\ita.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Italian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ita.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ita.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\jpn.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Japanese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\jpn.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/jpn.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\jav.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Javanese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\jav.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/jav.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kan.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Kannada; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kan.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kan.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kaz.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Kazakh; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kaz.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kaz.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\khm.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Khmer; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\khm.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/khm.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kir.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Kirghiz; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kir.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kir.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kor.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Korean; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kor.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kor.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\kur.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Kurdish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\kur.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/kur.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\lao.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Lao; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\lao.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/lao.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\lat.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Latin; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\lat.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/lat.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\lav.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Latvian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\lav.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/lav.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\lit.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Lithuanian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\lit.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/lit.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\mkd.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Macedonian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\mkd.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/mkd.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\msa.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Malay; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\msa.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/msa.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\mal.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Malayalam; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\mal.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/mal.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\mlt.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Maltese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\mlt.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/mlt.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\mar.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Marathi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\mar.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/mar.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\equ.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Math; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\equ.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/equ.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\enm.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Middle_English; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\enm.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/enm.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\frm.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Middle_French; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\frm.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/frm.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ell.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Modern_Greek; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ell.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ell.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\nep.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Nepali; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\nep.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/nep.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\nor.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Norwegian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\nor.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/nor.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ori.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Oriya; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ori.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ori.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\pan.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Panjabi; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\pan.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/pan.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\fas.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Persian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\fas.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/fas.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\pol.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Polish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\pol.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/pol.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\por.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Portuguese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\por.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/por.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\pus.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Pushto; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\pus.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/pus.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ron.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Romanian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ron.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ron.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\rus.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\Russian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\rus.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/rus.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\san.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Sanskrit; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\san.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/san.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\srp.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Serbian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\srp.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/srp.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\sin.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Sinhala; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\sin.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/sin.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\slk.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Slovak; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\slk.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/slk.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\slv.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Slovenian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\slv.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/slv.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.fold"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.fold'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.fold', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.nn"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.nn'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.nn', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.lm"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.lm'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.lm', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.bigrams"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.bigrams'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.bigrams', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.size"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.size'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.size', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.word-freq"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.word-freq'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.word-freq', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.cube.params"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.cube.params'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.cube.params', 'ST_setup', 'Get', 0); +Source: "{tmp}\spa.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Spanish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\spa.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/spa.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\swa.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Swahili; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\swa.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/swa.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\swe.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Swedish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\swe.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/swe.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\syr.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Syriac; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\syr.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/syr.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tgl.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Tagalog; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tgl.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tgl.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tgk.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Tajik; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tgk.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tgk.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tam.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Tamil; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tam.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tam.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tel.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Telugu; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tel.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tel.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tha.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Thai; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tha.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tha.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\bod.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Tibetan; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\bod.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/bod.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tir.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Tigrinya; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tir.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tir.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\tur.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Turkish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\tur.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/tur.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\uig.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Uighur; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\uig.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/uig.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\ukr.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Ukrainian; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\ukr.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/ukr.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\urd.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Urdu; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\urd.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/urd.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\uzb.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Uzbek; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\uzb.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/uzb.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\vie.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Vietnamese; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\vie.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/vie.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\cym.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Welsh; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\cym.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/cym.traineddata', 'ST_setup', 'Get', 0); +Source: "{tmp}\yid.traineddata"; DestDir: "{app}\tessdata"; Components: Languages\Yiddish; Flags: external; Check: DwinsHs_Check(ExpandConstant('{tmp}\yid.traineddata'), 'https://cdn.rawgit.com/tesseract-ocr/tessdata/3.04.00/yid.traineddata', 'ST_setup', 'Get', 0); + +[Components] +Name: "Languages"; Description: "{cm:Languages}"; Types: custom full + +Name: "Languages\Afrikaans"; Description: "{cm:Afrikaans}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5198548 +Name: "Languages\Albanian"; Description: "{cm:Albanian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6587325 +Name: "Languages\Amharic"; Description: "{cm:Amharic}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2953500 +Name: "Languages\Ancient_Greek"; Description: "{cm:Ancient_Greek}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5182527 +Name: "Languages\Arabic"; Description: "{cm:Arabic}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 28534834 +Name: "Languages\Assamese"; Description: "{cm:Assamese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 15827072 +Name: "Languages\Azerbaijani"; Description: "{cm:Azerbaijani}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6615244 +Name: "Languages\Basque"; Description: "{cm:Basque}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4969647 +Name: "Languages\Belarusian"; Description: "{cm:Belarusian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6822594 +Name: "Languages\Bengali"; Description: "{cm:Bengali}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 15552533 +Name: "Languages\Bosnian"; Description: "{cm:Bosnian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5432328 +Name: "Languages\Bulgarian"; Description: "{cm:Bulgarian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6026234 +Name: "Languages\Burmese"; Description: "{cm:Burmese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 69770179 +Name: "Languages\Catalan"; Description: "{cm:Catalan}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5356190 +Name: "Languages\Cebuano"; Description: "{cm:Cebuano}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 1686752 +Name: "Languages\Cherokee"; Description: "{cm:Cherokee}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 1083194 +Name: "Languages\Chineese_simplified"; Description: "{cm:Chineese_simplified}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 42089623 +Name: "Languages\Chineese_traditional"; Description: "{cm:Chineese_traditional}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 56692327 +Name: "Languages\Croatian"; Description: "{cm:Croatian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 9135966 +Name: "Languages\Czech"; Description: "{cm:Czech}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 11896327 +Name: "Languages\Danish"; Description: "{cm:Danish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 7340575 +Name: "Languages\Dutch"; Description: "{cm:Dutch}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 17098919 +Name: "Languages\Dzongkha"; Description: "{cm:Dzongkha}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 3310882 +Name: "Languages\English"; Description: "{cm:English}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 38371506 +Name: "Languages\Esperanto"; Description: "{cm:Esperanto}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6602178 +Name: "Languages\Estonian"; Description: "{cm:Estonian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 9644486 +Name: "Languages\Finnish"; Description: "{cm:Finnish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 13274908 +Name: "Languages\Frankish"; Description: "{cm:Frankish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 16451109 +Name: "Languages\French"; Description: "{cm:French}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 37350210 +Name: "Languages\Galician"; Description: "{cm:Galician}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5520499 +Name: "Languages\Georgian"; Description: "{cm:Georgian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6219735 +Name: "Languages\German"; Description: "{cm:German}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 13367187 +Name: "Languages\Gujarati"; Description: "{cm:Gujarati}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 10622356 +Name: "Languages\Haitian"; Description: "{cm:Haitian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 1349947 +Name: "Languages\Hebrew"; Description: "{cm:Hebrew}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4339016 +Name: "Languages\Hindi"; Description: "{cm:Hindi}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 22717250 +Name: "Languages\Hungarian"; Description: "{cm:Hungarian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 12213770 +Name: "Languages\Icelandic"; Description: "{cm:Icelandic}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6098683 +Name: "Languages\Indonesian"; Description: "{cm:Indonesian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6503178 +Name: "Languages\Inuktitut"; Description: "{cm:Inuktitut}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 995246 +Name: "Languages\Irish"; Description: "{cm:Irish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 3482557 +Name: "Languages\Italian"; Description: "{cm:Italian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 32720949 +Name: "Languages\Japanese"; Description: "{cm:Japanese}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 33072615 +Name: "Languages\Javanese"; Description: "{cm:Javanese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4404351 +Name: "Languages\Kannada"; Description: "{cm:Kannada}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 35657050 +Name: "Languages\Kazakh"; Description: "{cm:Kazakh}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4529022 +Name: "Languages\Khmer"; Description: "{cm:Khmer}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 48851416 +Name: "Languages\Kirghiz"; Description: "{cm:Kirghiz}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5502225 +Name: "Languages\Korean"; Description: "{cm:Korean}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 13309831 +Name: "Languages\Kurdish"; Description: "{cm:Kurdish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2020502 +Name: "Languages\Lao"; Description: "{cm:Lao}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 21118927 +Name: "Languages\Latin"; Description: "{cm:Latin}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6028030 +Name: "Languages\Latvian"; Description: "{cm:Latvian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 7802105 +Name: "Languages\Lithuanian"; Description: "{cm:Lithuanian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 8916163 +Name: "Languages\Macedonian"; Description: "{cm:Macedonian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 3837583 +Name: "Languages\Malay"; Description: "{cm:Malay}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6495742 +Name: "Languages\Malayalam"; Description: "{cm:Malayalam}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 8786470 +Name: "Languages\Maltese"; Description: "{cm:Maltese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5118233 +Name: "Languages\Marathi"; Description: "{cm:Marathi}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 14237379 +Name: "Languages\Math"; Description: "{cm:Math}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2251826 +Name: "Languages\Middle_English"; Description: "{cm:Middle_English}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2105888 +Name: "Languages\Middle_French"; Description: "{cm:Middle_French}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 15831815 +Name: "Languages\Modern_Greek"; Description: "{cm:Modern_Greek}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5422512 +Name: "Languages\Nepali"; Description: "{cm:Nepali}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 15862542 +Name: "Languages\Norwegian"; Description: "{cm:Norwegian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 8262167 +Name: "Languages\Oriya"; Description: "{cm:Oriya}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 7900659 +Name: "Languages\Panjabi"; Description: "{cm:Panjabi}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 10212006 +Name: "Languages\Persian"; Description: "{cm:Persian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4803733 +Name: "Languages\Polish"; Description: "{cm:Polish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 13918058 +Name: "Languages\Portuguese"; Description: "{cm:Portuguese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 12914622 +Name: "Languages\Pushto"; Description: "{cm:Pushto}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2493826 +Name: "Languages\Romanian"; Description: "{cm:Romanian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 7957608 +Name: "Languages\Russian"; Description: "{cm:Russian}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 39371802 +Name: "Languages\Sanskrit"; Description: "{cm:Sanskrit}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 22747749 +Name: "Languages\Serbian"; Description: "{cm:Serbian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4611681 +Name: "Languages\Sinhala"; Description: "{cm:Sinhala}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6793740 +Name: "Languages\Slovak"; Description: "{cm:Slovak}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 9126966 +Name: "Languages\Slovenian"; Description: "{cm:Slovenian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6824064 +Name: "Languages\Spanish"; Description: "{cm:Spanish}"; Languages: en; Types: compact custom full; ExtraDiskSpaceRequired: 39171233 +Name: "Languages\Swahili"; Description: "{cm:Swahili}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 3861506 +Name: "Languages\Swedish"; Description: "{cm:Swedish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 9460295 +Name: "Languages\Syriac"; Description: "{cm:Syriac}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2734020 +Name: "Languages\Tagalog"; Description: "{cm:Tagalog}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4114554 +Name: "Languages\Tajik"; Description: "{cm:Tajik}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 1119022 +Name: "Languages\Tamil"; Description: "{cm:Tamil}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 5118600 +Name: "Languages\Telugu"; Description: "{cm:Telugu}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 39318860 +Name: "Languages\Thai"; Description: "{cm:Thai}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 13565168 +Name: "Languages\Tibetan"; Description: "{cm:Tibetan}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 25231676 +Name: "Languages\Tigrinya"; Description: "{cm:Tigrinya}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 1806235 +Name: "Languages\Turkish"; Description: "{cm:Turkish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 14069931 +Name: "Languages\Uighur"; Description: "{cm:Uighur}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 2017575 +Name: "Languages\Ukrainian"; Description: "{cm:Ukrainian}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 8043189 +Name: "Languages\Urdu"; Description: "{cm:Urdu}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4825658 +Name: "Languages\Uzbek"; Description: "{cm:Uzbek}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4286554 +Name: "Languages\Vietnamese"; Description: "{cm:Vietnamese}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 6096118 +Name: "Languages\Welsh"; Description: "{cm:Welsh}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 3789352 +Name: "Languages\Yiddish"; Description: "{cm:Yiddish}"; Languages: en; Types: full; ExtraDiskSpaceRequired: 4238718 + +Name: "Languages\Azerbaijani"; Description: "{cm:Azerbaijani}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6615244 +Name: "Languages\Albanian"; Description: "{cm:Albanian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6587325 +Name: "Languages\Amharic"; Description: "{cm:Amharic}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2953500 +Name: "Languages\English"; Description: "{cm:English}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 38371506 +Name: "Languages\Arabic"; Description: "{cm:Arabic}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 28534834 +Name: "Languages\Assamese"; Description: "{cm:Assamese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 15827072 +Name: "Languages\Afrikaans"; Description: "{cm:Afrikaans}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5198548 +Name: "Languages\Basque"; Description: "{cm:Basque}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4969647 +Name: "Languages\Belarusian"; Description: "{cm:Belarusian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6822594 +Name: "Languages\Bengali"; Description: "{cm:Bengali}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 15552533 +Name: "Languages\Burmese"; Description: "{cm:Burmese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 69770179 +Name: "Languages\Bulgarian"; Description: "{cm:Bulgarian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6026234 +Name: "Languages\Bosnian"; Description: "{cm:Bosnian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5432328 +Name: "Languages\Welsh"; Description: "{cm:Welsh}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 3789352 +Name: "Languages\Hungarian"; Description: "{cm:Hungarian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 12213770 +Name: "Languages\Vietnamese"; Description: "{cm:Vietnamese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6096118 +Name: "Languages\Haitian"; Description: "{cm:Haitian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 1349947 +Name: "Languages\Galician"; Description: "{cm:Galician}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5520499 +Name: "Languages\Dutch"; Description: "{cm:Dutch}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 17098919 +Name: "Languages\Georgian"; Description: "{cm:Georgian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6219735 +Name: "Languages\Gujarati"; Description: "{cm:Gujarati}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 10622356 +Name: "Languages\Danish"; Description: "{cm:Danish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 7340575 +Name: "Languages\Dzongkha"; Description: "{cm:Dzongkha}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 3310882 +Name: "Languages\Ancient_Greek"; Description: "{cm:Ancient_Greek}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5182527 +Name: "Languages\Hebrew"; Description: "{cm:Hebrew}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4339016 +Name: "Languages\Yiddish"; Description: "{cm:Yiddish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4238718 +Name: "Languages\Indonesian"; Description: "{cm:Indonesian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6503178 +Name: "Languages\Inuktitut"; Description: "{cm:Inuktitut}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 995246 +Name: "Languages\Irish"; Description: "{cm:Irish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 3482557 +Name: "Languages\Icelandic"; Description: "{cm:Icelandic}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6098683 +Name: "Languages\Spanish"; Description: "{cm:Spanish}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 39171233 +Name: "Languages\Italian"; Description: "{cm:Italian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 32720949 +Name: "Languages\Kazakh"; Description: "{cm:Kazakh}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4529022 +Name: "Languages\Kannada"; Description: "{cm:Kannada}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 35657050 +Name: "Languages\Catalan"; Description: "{cm:Catalan}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5356190 +Name: "Languages\Cebuano"; Description: "{cm:Cebuano}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 1686752 +Name: "Languages\Kirghiz"; Description: "{cm:Kirghiz}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5502225 +Name: "Languages\Chineese_traditional"; Description: "{cm:Chineese_traditional}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 56692327 +Name: "Languages\Chineese_simplified"; Description: "{cm:Chineese_simplified}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 42089623 +Name: "Languages\Korean"; Description: "{cm:Korean}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 13309831 +Name: "Languages\Kurdish"; Description: "{cm:Kurdish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2020502 +Name: "Languages\Khmer"; Description: "{cm:Khmer}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 48851416 +Name: "Languages\Lao"; Description: "{cm:Lao}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 21118927 +Name: "Languages\Latin"; Description: "{cm:Latin}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6028030 +Name: "Languages\Latvian"; Description: "{cm:Latvian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 7802105 +Name: "Languages\Lithuanian"; Description: "{cm:Lithuanian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 8916163 +Name: "Languages\Macedonian"; Description: "{cm:Macedonian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 3837583 +Name: "Languages\Malay"; Description: "{cm:Malay}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6495742 +Name: "Languages\Malayalam"; Description: "{cm:Malayalam}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 8786470 +Name: "Languages\Maltese"; Description: "{cm:Maltese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5118233 +Name: "Languages\Marathi"; Description: "{cm:Marathi}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 14237379 +Name: "Languages\Math"; Description: "{cm:Math}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2251826 +Name: "Languages\German"; Description: "{cm:German}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 13367187 +Name: "Languages\Nepali"; Description: "{cm:Nepali}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 15862542 +Name: "Languages\Modern_Greek"; Description: "{cm:Modern_Greek}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5422512 +Name: "Languages\Norwegian"; Description: "{cm:Norwegian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 8262167 +Name: "Languages\Oriya"; Description: "{cm:Oriya}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 7900659 +Name: "Languages\Panjabi"; Description: "{cm:Panjabi}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 10212006 +Name: "Languages\Persian"; Description: "{cm:Persian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4803733 +Name: "Languages\Polish"; Description: "{cm:Polish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 13918058 +Name: "Languages\Portuguese"; Description: "{cm:Portuguese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 12914622 +Name: "Languages\Pushto"; Description: "{cm:Pushto}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2493826 +Name: "Languages\Romanian"; Description: "{cm:Romanian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 7957608 +Name: "Languages\Russian"; Description: "{cm:Russian}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 39371802 +Name: "Languages\Sanskrit"; Description: "{cm:Sanskrit}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 22747749 +Name: "Languages\Serbian"; Description: "{cm:Serbian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4611681 +Name: "Languages\Sinhala"; Description: "{cm:Sinhala}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6793740 +Name: "Languages\Syriac"; Description: "{cm:Syriac}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2734020 +Name: "Languages\Slovak"; Description: "{cm:Slovak}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 9126966 +Name: "Languages\Slovenian"; Description: "{cm:Slovenian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6824064 +Name: "Languages\Middle_English"; Description: "{cm:Middle_English}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2105888 +Name: "Languages\Middle_French"; Description: "{cm:Middle_French}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 15831815 +Name: "Languages\Swahili"; Description: "{cm:Swahili}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 3861506 +Name: "Languages\Tagalog"; Description: "{cm:Tagalog}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4114554 +Name: "Languages\Tajik"; Description: "{cm:Tajik}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 1119022 +Name: "Languages\Thai"; Description: "{cm:Thai}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 13565168 +Name: "Languages\Tamil"; Description: "{cm:Tamil}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 5118600 +Name: "Languages\Telugu"; Description: "{cm:Telugu}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 39318860 +Name: "Languages\Tibetan"; Description: "{cm:Tibetan}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 25231676 +Name: "Languages\Tigrinya"; Description: "{cm:Tigrinya}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 1806235 +Name: "Languages\Turkish"; Description: "{cm:Turkish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 14069931 +Name: "Languages\Uzbek"; Description: "{cm:Uzbek}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4286554 +Name: "Languages\Uighur"; Description: "{cm:Uighur}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 2017575 +Name: "Languages\Ukrainian"; Description: "{cm:Ukrainian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 8043189 +Name: "Languages\Urdu"; Description: "{cm:Urdu}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4825658 +Name: "Languages\Finnish"; Description: "{cm:Finnish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 13274908 +Name: "Languages\Frankish"; Description: "{cm:Frankish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 16451109 +Name: "Languages\French"; Description: "{cm:French}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 37350210 +Name: "Languages\Hindi"; Description: "{cm:Hindi}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 22717250 +Name: "Languages\Croatian"; Description: "{cm:Croatian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 9135966 +Name: "Languages\Cherokee"; Description: "{cm:Cherokee}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 1083194 +Name: "Languages\Czech"; Description: "{cm:Czech}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 11896327 +Name: "Languages\Swedish"; Description: "{cm:Swedish}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 9460295 +Name: "Languages\Esperanto"; Description: "{cm:Esperanto}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 6602178 +Name: "Languages\Estonian"; Description: "{cm:Estonian}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 9644486 +Name: "Languages\Javanese"; Description: "{cm:Javanese}"; Languages: ru; Types: full; ExtraDiskSpaceRequired: 4404351 +Name: "Languages\Japanese"; Description: "{cm:Japanese}"; Languages: ru; Types: compact custom full; ExtraDiskSpaceRequired: 33072615 + + +[CustomMessages] +en.Languages=OCR Languages +en.Afrikaans=Afrikaans +en.Albanian=Albanian +en.Amharic=Amharic +en.Ancient_Greek=Ancient Greek +en.Arabic=Arabic +en.Assamese=Assamese +en.Azerbaijani=Azerbaijani +en.Basque=Basque +en.Belarusian=Belarusian +en.Bengali=Bengali +en.Bosnian=Bosnian +en.Bulgarian=Bulgarian +en.Burmese=Burmese +en.Catalan=Catalan +en.Cebuano=Cebuano +en.Cherokee=Cherokee +en.Chineese_simplified=Chineese simplified +en.Chineese_traditional=Chineese traditional +en.Croatian=Croatian +en.Czech=Czech +en.Danish=Danish +en.Dutch=Dutch +en.Dzongkha=Dzongkha +en.English=English +en.Esperanto=Esperanto +en.Estonian=Estonian +en.Finnish=Finnish +en.Frankish=Frankish +en.French=French +en.Galician=Galician +en.Georgian=Georgian +en.German=German +en.Gujarati=Gujarati +en.Haitian=Haitian +en.Hebrew=Hebrew +en.Hindi=Hindi +en.Hungarian=Hungarian +en.Icelandic=Icelandic +en.Indonesian=Indonesian +en.Inuktitut=Inuktitut +en.Irish=Irish +en.Italian=Italian +en.Japanese=Japanese +en.Javanese=Javanese +en.Kannada=Kannada +en.Kazakh=Kazakh +en.Khmer=Khmer +en.Kirghiz=Kirghiz +en.Korean=Korean +en.Kurdish=Kurdish +en.Lao=Lao +en.Latin=Latin +en.Latvian=Latvian +en.Lithuanian=Lithuanian +en.Macedonian=Macedonian +en.Malay=Malay +en.Malayalam=Malayalam +en.Maltese=Maltese +en.Marathi=Marathi +en.Math=Math +en.Middle_English=Middle English +en.Middle_French=Middle French +en.Modern_Greek=Modern Greek +en.Nepali=Nepali +en.Norwegian=Norwegian +en.Oriya=Oriya +en.Panjabi=Panjabi +en.Persian=Persian +en.Polish=Polish +en.Portuguese=Portuguese +en.Pushto=Pushto +en.Romanian=Romanian +en.Russian=Russian +en.Sanskrit=Sanskrit +en.Serbian=Serbian +en.Sinhala=Sinhala +en.Slovak=Slovak +en.Slovenian=Slovenian +en.Spanish=Spanish +en.Swahili=Swahili +en.Swedish=Swedish +en.Syriac=Syriac +en.Tagalog=Tagalog +en.Tajik=Tajik +en.Tamil=Tamil +en.Telugu=Telugu +en.Thai=Thai +en.Tibetan=Tibetan +en.Tigrinya=Tigrinya +en.Turkish=Turkish +en.Uighur=Uighur +en.Ukrainian=Ukrainian +en.Urdu=Urdu +en.Uzbek=Uzbek +en.Vietnamese=Vietnamese +en.Welsh=Welsh +en.Yiddish=Yiddish + + +[CustomMessages] +ru.Languages= +ru.Afrikaans= +ru.Albanian= +ru.Amharic= +ru.Ancient_Greek= +ru.Arabic= +ru.Assamese= +ru.Azerbaijani= +ru.Basque= +ru.Belarusian= +ru.Bengali= +ru.Bosnian= +ru.Bulgarian= +ru.Burmese= +ru.Catalan= +ru.Cebuano= +ru.Cherokee= +ru.Chineese_simplified= +ru.Chineese_traditional= +ru.Croatian= +ru.Czech= +ru.Danish= +ru.Dutch= +ru.Dzongkha= +ru.English= +ru.Esperanto= +ru.Estonian= +ru.Finnish= +ru.Frankish= +ru.French= +ru.Galician= +ru.Georgian= +ru.German= +ru.Gujarati= +ru.Haitian= +ru.Hebrew= +ru.Hindi= +ru.Hungarian= +ru.Icelandic= +ru.Indonesian= +ru.Inuktitut= +ru.Irish= +ru.Italian= +ru.Japanese= +ru.Javanese= +ru.Kannada= +ru.Kazakh= +ru.Khmer= +ru.Kirghiz= +ru.Korean= +ru.Kurdish= +ru.Lao= +ru.Latin= +ru.Latvian= +ru.Lithuanian= +ru.Macedonian= +ru.Malay= +ru.Malayalam= +ru.Maltese= +ru.Marathi= +ru.Math= +ru.Middle_English= +ru.Middle_French= +ru.Modern_Greek= +ru.Nepali= +ru.Norwegian= +ru.Oriya= +ru.Panjabi= +ru.Persian= +ru.Polish= +ru.Portuguese= +ru.Pushto= +ru.Romanian= +ru.Russian= +ru.Sanskrit= +ru.Serbian= +ru.Sinhala= +ru.Slovak= +ru.Slovenian= +ru.Spanish= +ru.Swahili= +ru.Swedish= +ru.Syriac= +ru.Tagalog= +ru.Tajik= +ru.Tamil= +ru.Telugu= +ru.Thai= +ru.Tibetan= +ru.Tigrinya= +ru.Turkish= +ru.Uighur= +ru.Ukrainian= +ru.Urdu= +ru.Uzbek= +ru.Vietnamese= +ru.Welsh= +ru.Yiddish= + diff --git a/distr/ru/Russian.isl b/distr/ru/Russian.isl deleted file mode 100644 index 61b380f..0000000 --- a/distr/ru/Russian.isl +++ /dev/null @@ -1,78 +0,0 @@ -[LangOptions] -LanguageName=<0420><0443><0441><0441><043A><0438><0439> -LanguageID=$0419 -LanguageCodePage=1251 - -[CustomMessages] - -; *** Components -CreateStartupIcon= -Executables= -Libraries= -Languages= - -AncientGreek= -Esperantoalternative= -English= -Ukrainian= -Turkish= -Thai= -Tagalog= -Telugu= -Tamil= -Swedish= -Swahili= -Serbian= -Albanian= -Spanish= -Slovenian= -Slovakian= -Romanian= -Portuguese= -Polish= -Norwegian= -Dutch= -Malay= -Maltese= -Macedonian= -Malayalam= -Lithuanian= -Latvian= -Korean= -Kannada= -Italian= -Icelandic= -Indonesian= -Cherokee= -Hungarian= -Croatian= -Hindi= -Hebrew= -Galician= -MiddleFrench= -Frankish= -French= -Finnish= -Basque= -Estonian= -MathEquation= / -Esperanto= -MiddleEnglish= -Greek= -German= -Danish= -Czech= -Catalan= -Bulgarian= -Bengali= -Belarusian= -Azerbaijani= -Arabic= -Afrikaans= -Japanese= -ChineseSimplified= () -ChineseTraditional= () -Russian= -Vietnamese= - - diff --git a/distr/sf/readme.md b/distr/sf/readme.md deleted file mode 100644 index d0a536a..0000000 --- a/distr/sf/readme.md +++ /dev/null @@ -1,26 +0,0 @@ -#Changes. -## 1.2.3: -* Fixed possible crash. -* Added version information and some error messages. -## 1.2.2: -* Added alternative translation source. -## 1.2.1: -* Fixed the bug with the lack of translation. -* Fixed the bug with the use of language recognition by default when you select another one in OCR region selection mode. -## 1.2.0: -* Changed installer. -* Added all available languages for recognition. -* Added ability to specify language when selecting the field of recognition using right click. -* Human readable language names. -* Reduced memory usage. -* Updated libraries. -## 1.1.3: -* Added library libgcc_s_dw2-1.dll. -* Updated libraries. -## 1.1.2: -* If you specify in the settings the path to tessdata characters "\" or "/" at the end of the path are no longer required. -## 1.1.1: -* Fixed an issue with incorrect window size when display results. -## 1.1.0: -* Displays the result in the window, along with the picture. -* Context menu expanded. Added buttons display the last result and copy it to the clipboard. diff --git a/scripts/get_deps.sh b/scripts/get_deps.sh new file mode 100755 index 0000000..d2b0eaf --- /dev/null +++ b/scripts/get_deps.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +source ./options.sh $@ + +echo "Downloading dependencies" +wget -O $DOWNLOAD_DIR/leptonica.tar.gz http://www.leptonica.com/source/leptonica-1.72.tar.gz +wget -O $DOWNLOAD_DIR/tesseract.tar.gz https://github.com/tesseract-ocr/tesseract/archive/3.04.00.tar.gz + diff --git a/scripts/get_tessdata.sh b/scripts/get_tessdata.sh new file mode 100755 index 0000000..fd20a03 --- /dev/null +++ b/scripts/get_tessdata.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +source ./options.sh $@ + +echo "Downloading and extracting tessdata" +wget -O $DOWNLOAD_DIR/tessdata.tar.gz https://github.com/tesseract-ocr/tessdata/archive/3.04.00.tar.gz +EXTRACT_DIR=$DOWNLOAD_DIR/tessdata +CLEAN=true +cleanupDirInNeeded $EXTRACT_DIR +tar zxf $DOWNLOAD_DIR/tessdata.tar.gz -C $EXTRACT_DIR +EXTRACTED=`ls $EXTRACT_DIR | grep tess` +mv $EXTRACT_DIR/$EXTRACTED/* $EXTRACT_DIR +rm -r $EXTRACT_DIR/$EXTRACTED + diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh new file mode 100755 index 0000000..9673e9c --- /dev/null +++ b/scripts/install_deps.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +sudo apt-get -y install libxcb-util0-dev fakeroot libtesseract-dev libleptonica-dev qt5-qmake libqt5webkit5-dev libqt5x11extras5-dev g++ +#sudo apt-get -y install tesseract-ocr-eng #for testing diff --git a/scripts/make_all.sh b/scripts/make_all.sh new file mode 100755 index 0000000..4f93610 --- /dev/null +++ b/scripts/make_all.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +source ./options.sh $@ +cleanupDirInNeeded $WORK_DIR + +echo "Running all scripts for $PLATFORM" +#./install_deps $@ +#./get_tessdata.sh $@ +#./get_deps.sh $@ +./make_deps.sh $@ +./make_app.sh $@ +if [ "$PLATFORM" == "linux" ]; then + ./make_deb.sh $@ +fi +if [ "$PLATFORM" == "mingw" ]; then + ./make_iss.sh $@ +fi +./make_sf.sh $@ +echo "All scripts successfully run" diff --git a/scripts/make_app.sh b/scripts/make_app.sh new file mode 100755 index 0000000..9a736ae --- /dev/null +++ b/scripts/make_app.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +source ./options.sh $@ + +cleanupDirInNeeded $APP_DIR + +cd $APP_DIR +echo "Building app" +QT_SELECT=qt5 $QMAKE "CONFIG-=debug_and_release" "CONFIG+=release" $SRC_DIR +make $JOBS + diff --git a/scripts/make_deb.sh b/scripts/make_deb.sh new file mode 100755 index 0000000..f232a01 --- /dev/null +++ b/scripts/make_deb.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +source ./options.sh $@ + +cleanupDirInNeeded $DEB_DIR + +cp -r $SRC_DISTR_DIR/deb/* $DEB_DIR +INSTALL_DIR=/opt/ScreenTranslator + +function makeChangelog { +local FOUND=false +local CHANGELOG="screen-translator ($VERSION) stable; urgency=medium\n\n" +while read line; do + if [[ $line =~ [0-9]+\.[0-9]+\.[0-9]+: ]]; then #version info + if [ "$line" == "$VERSION:" ]; then + FOUND=true + continue + elif [ $FOUND == true ]; then + break; + fi + fi + if [ $FOUND == true ]; then + CHANGELOG="$CHANGELOG$line\n\n" + fi +done < $SRC_DISTR_DIR/Changelog_en.txt +CHANGELOG="$CHANGELOG--Gres `date -R`\n\n" +echo $CHANGELOG +} + +echo "Making deb" +cp $SRC_DIR/LICENSE.md $DEB_DIR/DEBIAN/copyright +cp $SRC_DIR/images/STIconBlue.png $DEB_DIR/usr/share/pixmaps/ScreenTranslator.png +cp $APP_DIR/ScreenTranslator $DEB_DIR/$INSTALL_DIR/ScreenTranslator +$STRIP -s $DEB_DIR/$INSTALL_DIR/ScreenTranslator +cp -r $SRC_DIR/translators $DEB_DIR/$INSTALL_DIR/translators + +VERSION=`grep "versionString" $SRC_DIR/version.json | cut -d'"' -f4` +sed "s/Version:.*\+/Version: $VERSION/" -i $DEB_DIR/DEBIAN/control +sed "s/Version=.*\+/Version=$VERSION/" -i $DEB_DIR/usr/share/applications/ScreenTranslator.desktop +SIZE=$(expr `du -bs $DEB_DIR | cut -f1` / 1024) +sed "s/Installed-Size:.*\+/Installed-Size: $SIZE/" -i $DEB_DIR/DEBIAN/control +echo -e $(makeChangelog) > $DEB_DIR/DEBIAN/changelog + +fakeroot dpkg-deb --build $DEB_DIR $WORK_DIR/screen-translator-$VERSION.deb + diff --git a/scripts/make_deps.sh b/scripts/make_deps.sh new file mode 100755 index 0000000..d824999 --- /dev/null +++ b/scripts/make_deps.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +source ./options.sh $@ + +BUILD_LEPT=false +BUILD_TESS=false + +for arg in ${@}; do + case "$arg" in + "tess" ) BUILD_TESS=true;; + "lept" ) BUILD_LEPT=true;; + esac +done + +if ! $BUILD_LEPT && ! $BUILD_TESS ; then + BUILD_LEPT=true + BUILD_TESS=true +fi + +cleanupDirInNeeded $DEPS_DIR + + +if $BUILD_LEPT ; then + echo "Building Leptonica" + tar zxf $DOWNLOAD_DIR/leptonica.tar.gz -C $DEPS_DIR + LEPT_DIR=`ls $DEPS_DIR | grep lept` + pushd . + cd $DEPS_DIR/$LEPT_DIR + $CFLAGS ./configure --prefix=$DEPS_DIR --disable-programs "$HOST_ATTR" + make $JOBS + make install + popd +fi + +if $BUILD_TESS ; then + echo "Building Tesseract" + tar zxf $DOWNLOAD_DIR/tesseract.tar.gz -C $DEPS_DIR + TESS_DIR=`ls $DEPS_DIR | grep tess` + pushd . + cd $DEPS_DIR/$TESS_DIR + sed 's/vs2008/vs2010/g' -i ccutil/Makefile.in + sed 's/Windows\.h/windows\.h/g' -i opencl/openclwrapper.cpp + LIBLEPT_HEADERSDIR=$DEPS_DIR/include LIBS=-L$DEPS_DIR/lib ./configure --prefix=$DEPS_DIR --disable-tessdata-prefix "$HOST_ATTR" + make $JOBS + make install + popd +fi + +if [ $PLATFORM == 'mingw' ]; then + find $DEPS_DIR -name '*.dll' -exec cp {} $DEPS_DIR/lib \; +fi + +echo "Done" + diff --git a/scripts/make_iss.sh b/scripts/make_iss.sh new file mode 100755 index 0000000..fee4ce9 --- /dev/null +++ b/scripts/make_iss.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +source ./options.sh $@ + +cleanupDirInNeeded $ISS_DIR + +cp -r $SRC_DISTR_DIR/iss/* $ISS_DIR +CONTENT_DIR=$ISS_DIR/content +mkdir -p $CONTENT_DIR + +echo "Making ISS" +TESSDATA_DIR="$DOWNLOAD_DIR/tessdata" +$(cd $ISS_DIR && ./make_tess_iss.sh $TESSDATA_DIR out="$ISS_DIR/tessdata.iss") + +#setup +VERSION=`grep "versionString" $SRC_DIR/version.json | cut -d'"' -f4` +sed "s/#define MyAppVersion.*$/#define MyAppVersion \"$VERSION\"/" -i $ISS_DIR/InnoSetup.iss +cp $SRC_DIR/images/icon.ico $ISS_DIR/icon.ico +cp $SRC_DIR/LICENSE.md $ISS_DIR/LICENSE_en.md +cp $SRC_DISTR_DIR/Changelog_en.txt $ISS_DIR/Changelog_en.txt +cp $SRC_DISTR_DIR/Changelog_ru.txt $ISS_DIR/Changelog_ru.txt + +#app +cp $APP_DIR/ScreenTranslator.exe $CONTENT_DIR/ScreenTranslator.exe +cp -r $SRC_DIR/translators $CONTENT_DIR/translators + +#libs +QT_LIBS="Qt5WebKitWidgets Qt5Widgets Qt5WebKit Qt5Gui Qt5Network Qt5Core Qt5Sensors Qt5Positioning Qt5PrintSupport +Qt5OpenGL Qt5Sql Qt5Quick Qt5Qml Qt5WebChannel Qt5Multimedia Qt5MultimediaWidgets" +for i in $QT_LIBS; do + cp -d $QT_LIB_DIR/$i.dll $CONTENT_DIR +done + +mkdir -p $CONTENT_DIR/platforms +cp -d $QT_LIB_DIR/../plugins/platforms/qwindows.dll $CONTENT_DIR/platforms + +MINGW_LIBS="libgcc_s_sjlj-1 libstdc++-6 icuin55 icuuc55 icudt55 libwinpthread-1 ssleay32 libeay32" +for i in $MINGW_LIBS; do + cp -d $MINGW_DIR/lib/$i.dll $CONTENT_DIR +done + +cp -d $DEPS_DIR/lib/liblept*.dll $CONTENT_DIR +cp -d $DEPS_DIR/lib/libtesseract*.dll $CONTENT_DIR + +find $CONTENT_DIR -name '*.exe' -exec $STRIP -s {} \; +find $CONTENT_DIR -name '*.dll' -exec $STRIP -s {} \; + +cd $ISS_DIR +wine "C:\Program Files\Inno Setup 5\iscc.exe" "InnoSetup.iss" diff --git a/scripts/make_sf.sh b/scripts/make_sf.sh new file mode 100755 index 0000000..53f3096 --- /dev/null +++ b/scripts/make_sf.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +source ./options.sh $@ + +cleanupDirInNeeded $SF_DIR + +echo "Making SF" +function format { + local FILE=$1 + sed "s/\(Changes\)/#\1/g" -i $FILE + sed "s/\(Изменения\)/#\1/g" -i $FILE + sed "s/\([0-9]\+\.[0-9]\+\.[0-9]\+:\)/##\1/g" -i $FILE + sed "s/+\s/* /g" -i $FILE + sed "s/-\s/* /g" -i $FILE +} +cp -f $SRC_DISTR_DIR/Changelog_en.txt $SF_DIR/readme.md +format $SF_DIR/readme.md +cp -f $SRC_DISTR_DIR/Changelog_ru.txt $SF_DIR/readme_ru.md +iconv -f cp1251 -t utf8 $SF_DIR/readme_ru.md -o $SF_DIR/readme_ru.md.u +mv $SF_DIR/readme_ru.md.u $SF_DIR/readme_ru.md +format $SF_DIR/readme_ru.md diff --git a/scripts/options.sh b/scripts/options.sh new file mode 100755 index 0000000..f1ad12d --- /dev/null +++ b/scripts/options.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -e + +PLATFORM=linux +CLEAN=false +JOBS="" +QMAKE=qmake +QT_LIB_DIR=/usr/lib/x86_64-linux-gnu +STRIP=strip + +for arg in ${@}; do + case "$arg" in + "linux" ) PLATFORM=linux;; + "mingw" ) PLATFORM=mingw;; + "clean" ) CLEAN=true;; + "-j"* ) JOBS=$arg;; + *"qmake" ) QMAKE=$arg + QT_LIB_DIR=`readlink -e $(dirname $arg)/../lib` + ;; + esac +done + +WORK_DIR=../../build/$PLATFORM +MINGW_DIR=/opt/mingw-4.9.3/mingw-w64-i686 +if [ "$PLATFORM" == "mingw" ]; then + QT_LIB_DIR=`readlink -e $QT_LIB_DIR/../bin` + HOST=i686-w64-mingw32 + HOST_ATTR="--host=$HOST" + STRIP=$HOST-strip + export PATH="$MINGW_DIR/bin:$PATH" + COMPILERS="CC=\"${HOST}-gcc\" AR=\"${HOST}-ar\" RANLIB=\"${HOST}-ranlib\"" +fi + +WORK_DIR=`readlink -m $WORK_DIR` +DEPS_DIR=`readlink -m $WORK_DIR/deps` +APP_DIR=`readlink -m $WORK_DIR/app` +DEB_DIR=`readlink -m $WORK_DIR/deb` +ISS_DIR=`readlink -m $WORK_DIR/iss` +SF_DIR=`readlink -m $WORK_DIR/sf` +DOWNLOAD_DIR=`readlink -m ../../` +SRC_DIR=`readlink -e ..` +SRC_DISTR_DIR=$SRC_DIR/distr + +mkdir -p $WORK_DIR + +function cleanupDirInNeeded { + local DIR=$1 + if [[ "$CLEAN" == "true" && -d "$DIR" ]]; then + rm -rf $DIR + fi + mkdir -p $DIR +} +