diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9841588 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text eol=lf +*.snk binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c5ef580 --- /dev/null +++ b/.gitignore @@ -0,0 +1,860 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/csharp,c++,python,visualstudio,visualstudiocode,sublimetext,rider +# Edit at https://www.toptal.com/developers/gitignore?templates=csharp,c++,python,visualstudio,visualstudiocode,sublimetext,rider + +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.iobj +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Nuget personal access tokens and Credentials +nuget.config + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +.idea/ +*.sln.iml + +### Python ### +# Byte-compiled / optimized / DLL files +*.py[cod] +*$py.class + +# C extensions + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +### Rider ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### SublimeText ### +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json +sftp-config-alt*.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + +### VisualStudioCode ### + +# Local History for Visual Studio Code + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### VisualStudio ### + +# User-specific files + +# User-specific files (MonoDevelop/Xamarin Studio) + +# Mono auto generated files + +# Build results + +# Visual Studio 2015/2017 cache/options directory +# Uncomment if you have tasks that create the project's static files in wwwroot + +# Visual Studio 2017 auto generated files + +# MSTest test Results + +# NUnit + +# Build Results of an ATL Project + +# Benchmark Results + +# .NET Core + +# ASP.NET Scaffolding + +# StyleCop + +# Files built by Visual Studio + +# Chutzpah Test files + +# Visual C++ cache files + +# Visual Studio profiler + +# Visual Studio Trace Files + +# TFS 2012 Local Workspace + +# Guidance Automation Toolkit + +# ReSharper is a .NET coding add-in + +# TeamCity is a build add-in + +# DotCover is a Code Coverage Tool + +# AxoCover is a Code Coverage Tool + +# Coverlet is a free, cross platform Code Coverage Tool + +# Visual Studio code coverage results + +# NCrunch + +# MightyMoose + +# Web workbench (sass) + +# Installshield output folder + +# DocProject is a documentation generator add-in + +# Click-Once directory + +# Publish Web Output +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted + +# NuGet Packages +# NuGet Symbol Packages +# The packages folder can be ignored because of Package Restore +# except build/, which is used as an MSBuild target. +# Uncomment if necessary however generally it will be regenerated when needed +# NuGet v3's project.json files produces more ignorable files + +# Nuget personal access tokens and Credentials + +# Microsoft Azure Build Output + +# Microsoft Azure Emulator + +# Windows Store app package directories and files + +# Visual Studio cache files +# files ending in .cache can be ignored +# but keep track of directories ending in .cache + +# Others + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) + +# RIA/Silverlight projects + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) + +# SQL Server files + +# Business Intelligence projects + +# Microsoft Fakes + +# GhostDoc plugin setting file + +# Node.js Tools for Visual Studio + +# Visual Studio 6 build log + +# Visual Studio 6 workspace options file + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) + +# Visual Studio LightSwitch build output + +# Paket dependency manager + +# FAKE - F# Make + +# CodeRush personal settings + +# Python Tools for Visual Studio (PTVS) + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio + +# Telerik's JustMock configuration file + +# BizTalk build output + +# OpenCover UI analysis results + +# Azure Stream Analytics local run output + +# MSBuild Binary and Structured Log + +# NVidia Nsight GPU debugger configuration file + +# MFractors (Xamarin productivity tool) working folder + +# Local History for Visual Studio + +# BeatPulse healthcheck temp database + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 + +# Ionide (cross platform F# VS Code tools) working folder + +# Fody - auto-generated XML schema + +# VS Code files for those working on multiple tools + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs + +# JetBrains Rider + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/csharp,c++,python,visualstudio,visualstudiocode,sublimetext,rider + +launchSettings.json +launch.json diff --git a/README.md b/README.md index 1ef2b21..c6d9a91 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,54 @@ -# Transliterator -Language transliteration +# Преамбула + +Программа была выложена давно и с тех пор не поддерживается. +Ищу желающих поддержать. +Возможно смена лицензии. + +[Скачать](https://github.com/NN---/Transliterator/releases) + +# Preface + +The application has been developed long time ago and isn't maintained since then. +Looking for a maintainer. +The license can be changed. + +[Download](https://github.com/NN---/Transliterator/releases) + +# Транслитерация текста + +Перевод в обоих направлениях направлениях (translit в русский, русский в translit). + +## Различные профили транслитерации: + +* translit > русский +* русский > translit +* qwerty > йцукен +* йцукен > qwerty +* Русский > CuMBo/\bHblu` +* CuMBo/\bHblu` > Русский +* Cyrillic Windows > DOS 866 +* DOS 866 > Cyrillic Windows +* Cyrillic Windows > KOI8-R +* KOI8-R > Cyrillic Windows +* Пользовательский > Пользовательский + +## Другие возможности + +* Символы игнорирования перевода (после установки такого символа, указанная часть текста не транслитеруются). + +* Игнорируемый текст (этот текст не будет транлситироваться). + +* Вызов программы с помощью горячей клавиши: показ/скрытие, автоматическая транслитерация. + +* Возможность Транслитерации файлов (название файла или папки, содержание текста, MP3 тэги) + +* Возможность изменения параметров транслитерации (символов перевода, игнорирования), профилей транслитерации и горячих клавиш на свой вкус. + +* Сворачивание в иконку , а также настройки показа и скрытия иконки в системной панели. + +* Языки интерфейса: English, Русский и Translit + +## Минимальные требования: + +Windows (95 / 98 / ME / 2000 / XP) и RichEdit версии 3.0 (входит в состав +Internet Explorer 5.0 и выше) \ No newline at end of file diff --git a/legacy/Lang2Lang_v1/Lang2Lang.c b/legacy/Lang2Lang_v1/Lang2Lang.c new file mode 100644 index 0000000..e8c258d --- /dev/null +++ b/legacy/Lang2Lang_v1/Lang2Lang.c @@ -0,0 +1,983 @@ +// Warnings +#pragma warning(disable:4201) // nameless struct/union +#pragma warning(disable:4065) // default without no case +// Warnings +#define WINVER 0x400 +#define _WIN32_IE 0x400 +#define STRICT +#define _RICHEDIT_VER 0x200 +#include +#if WINVER<0x500 +#include // GetGUIThreadInfo +#endif // WINVER<0x500 +#include +#include +#include "resource.h" +#include "Lang2Lang.h" + +// Dialog functions +LRESULT CALLBACK Lang2LangDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK HelpDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK AboutDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK GeneralPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK KeysPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +void Translate(Lang2Lang *pLang2Lang,LPCTSTR szFrom,LPTSTR szTo); +void UpdateHelp(HWND hWndEdit,Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar); +void MakeHelp(Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar); +BOOL LoadOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions); +BOOL SaveOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions); +int DisplayOptions(HWND hWnd); +void CheckLang(HWND hWnd); + +// Initial Options +Lang2LangOptions Options= +{ + translationNo, // enum Translation translation + { // HotKey translationhotkey + 0, // WORD vk + 0 // WORD fsModifiers + }, + closeExit, // enum Close close + minimize, // enum Minimize minimize + TRUE, // BOOL bShowTrayIcon + { // WindowPos wndPos + FALSE, // BOOL bMin + FALSE, // BOOL bMax + FALSE, // BOOL bHide + { // RECT rcNormalPosition + 0, // LONG left + 0, // LONG top + 0, // LONG right + 0, // LONG bottom + } + }, + { // Lang2Lang aLang2Lang[LANG2LANGOPTIONS_LANG2LANG] + // Eng2Rus + { + _T("Eng2Rus"), // TCHAR szName[LANG2LANG_NAME] + { // Lang2LangFromTo FromTo[LANG2LANG_FROMTO] + {_T(""),{_T("a")}}, + {_T(""),{_T("A")}}, + {_T(""),{_T("b")}}, + {_T(""),{_T("B")}}, + {_T(""),{_T("v")}}, + {_T(""),{_T("V")}}, + {_T(""),{_T("g")}}, + {_T(""),{_T("G")}}, + {_T(""),{_T("d")}}, + {_T(""),{_T("D")}}, + {_T(""),{_T("e")}}, + {_T(""),{_T("E")}}, + {_T(""),{_T("e'")}}, + {_T(""),{_T("E'")}}, + {_T(""),{_T("j")}}, + {_T(""),{_T("J")}}, + {_T(""),{_T("z")}}, + {_T(""),{_T("Z")}}, + {_T(""),{_T("i")}}, + {_T(""),{_T("I")}}, + {_T(""),{_T("y")}}, + {_T(""),{_T("Y")}}, + {_T(""),{_T("k")}}, + {_T(""),{_T("K")}}, + {_T(""),{_T("l")}}, + {_T(""),{_T("L")}}, + {_T(""),{_T("m")}}, + {_T(""),{_T("M")}}, + {_T(""),{_T("n")}}, + {_T(""),{_T("N")}}, + {_T(""),{_T("o")}}, + {_T(""),{_T("O")}}, + {_T(""),{_T("p")}}, + {_T(""),{_T("P")}}, + {_T(""),{_T("r")}}, + {_T(""),{_T("R")}}, + {_T(""),{_T("s")}}, + {_T(""),{_T("S")}}, + {_T(""),{_T("t")}}, + {_T(""),{_T("T")}}, + {_T(""),{_T("u")}}, + {_T(""),{_T("U")}}, + {_T(""),{_T("f")}}, + {_T(""),{_T("F")}}, + {_T(""),{_T("x"),_T("h")}}, + {_T(""),{_T("X"),_T("H")}}, + {_T(""),{_T("c")}}, + {_T(""),{_T("C")}}, + {_T(""),{_T("ch")}}, + {_T(""),{_T("ch")}}, + {_T(""),{_T("w"),_T("sh"),_T("sH")}}, + {_T(""),{_T("W"),_T("SH"),_T("Sh")}}, + {_T(""),{_T("w'"),_T("sch"),_T("sCH"),_T("sCh"),_T("scH")}}, + {_T(""),{_T("W'"),_T("SCH"),_T("Sch"),_T("SCh"),_T("ScH")}}, + {_T(""),{_T("`")}}, + {_T(""),{_T("``")}}, + {_T(""),{_T("y'")}}, + {_T(""),{_T("Y'")}}, + {_T(""),{_T("'")}}, + {_T(""),{_T("''")}}, + {_T(""),{_T("e`")}}, + {_T(""),{_T("E`")}}, + {_T(""),{_T("iu"),_T("iU"),_T("yu"),_T("yU")}}, + {_T(""),{_T("IU"),_T("IU"),_T("YU"),_T("Yu")}}, + {_T(""),{_T("ia"),_T("iA"),_T("ya"),_T("yA")}}, + {_T(""),{_T("IA"),_T("Ia"),_T("YA"),_T("Ya")}} + } + }, + // Rus2Eng + { + _T("Rus2Eng"), // TCHAR szName[LANG2LANG_NAME] + { // Lang2LangFromTo FromTo[LANG2LANG_FROMTO] + {_T("a"),{_T("")}}, + {_T("A"),{_T("")}}, + {_T("b"),{_T("")}}, + {_T("B"),{_T("")}}, + {_T("c"),{_T("")}}, + {_T("C"),{_T("")}}, + {_T("d"),{_T("")}}, + {_T("D"),{_T("")}}, + {_T("e"),{_T("")}}, + {_T("E"),{_T("")}}, + {_T("f"),{_T("")}}, + {_T("F"),{_T("")}}, + {_T("g"),{_T("")}}, + {_T("G"),{_T("")}}, + {_T("h"),{_T("")}}, + {_T("H"),{_T("")}}, + {_T("i"),{_T("")}}, + {_T("I"),{_T("")}}, + {_T("j"),{_T("")}}, + {_T("J"),{_T("")}}, + {_T("k"),{_T("")}}, + {_T("K"),{_T("")}}, + {_T("l"),{_T("")}}, + {_T("L"),{_T("")}}, + {_T("m"),{_T("")}}, + {_T("M"),{_T("")}}, + {_T("n"),{_T("")}}, + {_T("N"),{_T("")}}, + {_T("o"),{_T("")}}, + {_T("O"),{_T("")}}, + {_T("p"),{_T("")}}, + {_T("P"),{_T("")}}, + {_T("r"),{_T("")}}, + {_T("R"),{_T("")}}, + {_T("s"),{_T("")}}, + {_T("S"),{_T("")}}, + {_T("t"),{_T("")}}, + {_T("T"),{_T("")}}, + {_T("u"),{_T("")}}, + {_T("U"),{_T("")}}, + {_T("v"),{_T("")}}, + {_T("V"),{_T("")}}, + {_T("w"),{_T("")}}, + {_T("W"),{_T("")}}, + {_T("x"),{_T("")}}, + {_T("X"),{_T("")}}, + {_T("y"),{_T("")}}, + {_T("Y"),{_T("")}}, + {_T("z"),{_T("")}}, + {_T("Z"),{_T("")}}, + } + }, + {0} + } +}; + +#define ENG2RUS 0 +#define RUS2ENG 1 +#define DEF_LANG2LANG ENG2RUS +Lang2Lang *pLang2Lang = Options.aLang2Lang+DEF_LANG2LANG; + +#define MAX_CHAR 65530 +#define ENG 1 +#define RUS 2 + +#define DEFFROM ENG +#define DEFTO RUS + +#define MENU_EDITFROM 1 +#define MENU_EDITTO 2 + +TCHAR szEditFrom[MAX_CHAR]; +TCHAR szEditTo[MAX_CHAR]; +int LangFrom = DEFFROM; +int LangTo = DEFTO; +HWND hDlgHelp = NULL; +BOOL bHelp = FALSE; + +TCHAR szHelp[MAX_CHAR]; + +HINSTANCE g_hInstance; +HKEY g_hKey; +HICON g_hIcon; + +// Main +void main() +{ + HMODULE hRichEdit; + // Registry + if(RegCreateKey(HKEY_CURRENT_USER,_T("Software\\NN\\Lang2Lang"),&g_hKey)) + { + ShowErrorHT(IDE_REGKEY); + ExitProcess(0); + return; + } + RegSetValueEx(g_hKey,_T("Version"),0,REG_SZ,(CONST BYTE*)_T("2.0.0.0"),10*sizeof(TCHAR)); + //hInstance + g_hInstance=GetModuleHandle(NULL); + // LoadLibrary + hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + { + ShowErrorHT(IDE_RICHED20); + hRichEdit=LoadLibrary("riched32.dll"); + if(!hRichEdit) + { + ShowErrorHT(IDE_RICHED32); + ExitProcess(0); + return; + } + } + // Init + szEditFrom[0]=0; + szEditTo[0]=0; + g_hIcon=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDR_LANG2LANG)); + // call dialog + DialogBox(g_hInstance,MAKEINTRESOURCE(IDR_LANG2LANG),NULL,(DLGPROC)Lang2LangDlg); + // FreeLibrary + FreeLibrary(hRichEdit); + // Registry + RegCloseKey(g_hKey); + //return + ExitProcess(0); +} + +// Dialog functions +LRESULT CALLBACK Lang2LangDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + // Avoid warning + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + TCHAR szAbout[MAX_PATH]; + HMENU hSystemMenu; + WINDOWPLACEMENT wndpl; + hSystemMenu=GetSystemMenu(hDlg,0); + AppendMenu(hSystemMenu,MF_SEPARATOR,0,0); + LoadString(g_hInstance,IDS_ABOUT,szAbout,MAX_PATH); + AppendMenu(hSystemMenu,MF_STRING,IDM_ABOUT,szAbout); + CheckLang(hDlg); + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETEVENTMASK,0, + ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETEVENTMASK,0, + ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETLIMITTEXT,MAX_CHAR,0); + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETLIMITTEXT,MAX_CHAR,0); + LoadOptions(g_hKey,&Options); + hDlgHelp = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_HELP),hDlg,(DLGPROC)HelpDlg); + RegisterHotKey(hDlg,HOTKEY_ID,Options.translationhotkey.fsModifiers,Options.translationhotkey.vk); + if(Options.bShowTrayIcon) + NotifyIconAddID(hDlg,TRAYICON_ID,TRAYICON_MSG,g_hIcon,IDS_LANG2LANG); + // Icon + SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)g_hIcon); + SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)g_hIcon); + // Position + if(Options.wndPos.rcNormalPosition.bottom&& + Options.wndPos.rcNormalPosition.top&& + Options.wndPos.rcNormalPosition.left&& + Options.wndPos.rcNormalPosition.right) + { + if(Options.wndPos.bMin) + { + wndpl.showCmd=SW_SHOWMINNOACTIVE; + if(Options.wndPos.bMax) + wndpl.flags=WPF_RESTORETOMAXIMIZED; + else + wndpl.flags=WPF_SETMINPOSITION; + } + else + { + if(Options.wndPos.bMax) + { + wndpl.showCmd=SW_SHOWMAXIMIZED; + wndpl.flags=WPF_RESTORETOMAXIMIZED; + } + else + { + wndpl.showCmd=SW_SHOWNORMAL; + wndpl.flags=WPF_SETMINPOSITION; + } + } + if(Options.wndPos.bHide) + wndpl.showCmd=SW_HIDE; + + wndpl.length=sizeof(WINDOWPLACEMENT); + wndpl.ptMinPosition.x=0; + wndpl.ptMinPosition.y=0; + wndpl.ptMaxPosition.x=-GetSystemMetrics(SM_CXBORDER); + wndpl.ptMaxPosition.y=-GetSystemMetrics(SM_CYBORDER); + wndpl.rcNormalPosition=Options.wndPos.rcNormalPosition; + SetWindowPlacement(hDlg,&wndpl); + } + } + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_EDITFROM: + switch(HIWORD(wParam)) + { + case EN_CHANGE: + GetDlgItemText(hDlg,IDC_EDITFROM,szEditFrom,MAX_CHAR); + Translate(pLang2Lang,szEditFrom,szEditTo); + SetDlgItemText(hDlg,IDC_EDITTO,szEditTo); + break; + } + break; + case IDM_HELP: + case IDC_HELPW: + case IDM_OPTIONS: + { + BOOL bOptions=LOWORD(wParam)==IDM_OPTIONS; + HMENU hMenu,hSubMenu; + if(bOptions&&bHelp|| + !bOptions) + { + bHelp=!bHelp; + CheckDlgButton(hDlg,IDC_HELPW,bHelp); + ShowWindow(hDlgHelp,bHelp?SW_SHOW:SW_HIDE); + hMenu=GetMenu(hDlg); + hSubMenu=GetSubMenu(hMenu,3); + CheckMenuItem(hSubMenu,IDM_HELP,MF_BYCOMMAND|(bHelp?MF_CHECKED:MF_UNCHECKED)); + } + if(bOptions) + if(DisplayOptions(hDlg)==IDOK) + { + UnregisterHotKey(hDlg,HOTKEY_ID); + RegisterHotKey(hDlg,HOTKEY_ID,Options.translationhotkey.fsModifiers,Options.translationhotkey.vk); + if(!Options.bShowTrayIcon) + NotifyIconDelete(hDlg,TRAYICON_ID); + else + NotifyIconAddID(hDlg,TRAYICON_ID,TRAYICON_MSG,g_hIcon,IDS_LANG2LANG); + } + } + break; + case IDM_ABOUT: + DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUT),hDlg,(DLGPROC)AboutDlg); + break; + case IDM_EXIT: + PostMessage(hDlg,WM_CLOSE,0,0); + break; + case IDC_ENGFROM: + case IDC_RUSFROM: + case IDC_ENGTO: + case IDC_RUSTO: + switch(LOWORD(wParam)) + { + case IDC_ENGFROM: + LangFrom=ENG; + break; + case IDC_RUSFROM: + LangFrom=RUS; + break; + case IDC_ENGTO: + LangTo=ENG; + break; + case IDC_RUSTO: + LangTo=RUS; + break; + } + CheckLang(hDlg); + Translate(pLang2Lang,szEditFrom,szEditTo); + SetDlgItemText(hDlg,IDC_EDITTO,szEditTo); + break; + case IDM_UNDOFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_UNDO,0,0); + break; + case IDM_REDOFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_REDO,0,0); + break; + case IDM_CUTFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_CUT,0,0); + break; + case IDM_COPYFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_COPY,0,0); + break; + case IDM_PASTEFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_PASTE,0,0); + break; + case IDM_SELECTALLFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETSEL,0,(LPARAM)-1); + break; + case IDM_UNDOTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_UNDO,0,0); + break; + case IDM_REDOTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_REDO,0,0); + break; + case IDM_CUTTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_CUT,0,0); + break; + case IDM_COPYTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_COPY,0,0); + break; + case IDM_PASTETO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_PASTE,0,0); + break; + case IDM_SELECTALLTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETSEL,0,(LPARAM)-1); + break; + case IDOK: + case IDCANCEL: + break; + case IDM_SHOW: + ShowWindow(hDlg,SW_NORMAL); + break; + case IDM_HIDE: + ShowWindow(hDlg,SW_HIDE); + break; + } + break; + case WM_NOTIFY: + if(((NMHDR *)lParam)->code==EN_MSGFILTER) + if(LOWORD(wParam)==IDC_EDITFROM||LOWORD(wParam)==IDC_EDITTO) + { + MSGFILTER *pMsgFilter=(MSGFILTER *)lParam; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + HMENU hMenu,hSubMenu; + POINT pt; + + GetCursorPos(&pt); + + hMenu=GetMenu(hDlg); + hSubMenu=GetSubMenu(hMenu,LOWORD(wParam)==IDC_EDITFROM?MENU_EDITFROM:MENU_EDITTO); + + TrackPopupMenu(hSubMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,hDlg,NULL); + } + } + break; + case WM_SYSCOMMAND: + switch(LOWORD(wParam)) + { + case IDM_ABOUT: + DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUT),hDlg,(DLGPROC)AboutDlg); + break; + case SC_MINIMIZE: + break; + case SC_CLOSE: + break; + } + break; + case WM_HOTKEY: + { + TCHAR szFrom[MAX_CHAR]; + TCHAR szTo[MAX_CHAR]; + TCHAR szClass[50]; + HWND hWndTranslate = GetForegroundWindow(); + DWORD dwThreadID = GetWindowThreadProcessId(hWndTranslate, NULL); + GUITHREADINFO gui_thread_info; + ZeroMem(&gui_thread_info, sizeof(GUITHREADINFO)); + gui_thread_info.cbSize = sizeof(GUITHREADINFO); + GetGUIThreadInfo(dwThreadID, &gui_thread_info); + hWndTranslate=gui_thread_info.hwndFocus; + GetClassName(hWndTranslate,szClass,50-1); +#ifndef UNICODE + if(!lstrcmpi(szClass,_T("EditW"))|| + !lstrcmpi(szClass,_T("RichEditW"))|| + !lstrcmpi(szClass,_T("RichEdit20W"))|| + !lstrcmpi(szClass,_T("RichEdit30W"))) + { + WCHAR wszFrom[MAX_CHAR/2]; + WCHAR wszTo[MAX_CHAR/2]; + SendMessageW(hWndTranslate, WM_GETTEXT, (WPARAM)(MAX_CHAR/2-1),(LPARAM)wszFrom); + WideCharToMultiByte(CP_ACP,0,wszFrom,-1,szFrom,sizeof(szFrom)/sizeof(TCHAR)-1,NULL,NULL); + Translate(pLang2Lang,szFrom,szTo); + MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szTo,-1,wszTo,sizeof(wszTo)/sizeof(WCHAR)-1); + SendMessageW(hWndTranslate, WM_SETTEXT, 0,(LPARAM)(LPCTSTR)wszTo); + } + else + { +#endif // !UNICODE + SendMessage(hWndTranslate, WM_GETTEXT, (WPARAM)(MAX_CHAR-1),(LPARAM)szFrom); + Translate(pLang2Lang,szFrom,szTo); + SendMessage(hWndTranslate, WM_SETTEXT, 0,(LPARAM)(LPCTSTR)szTo); +#ifndef UNICODE + } +#endif // !UNICODE + } + break; + case TRAYICON_MSG: + switch (lParam) + { + case WM_LBUTTONDBLCLK: + break; + case WM_RBUTTONDOWN: + { + HMENU hMenu; + POINT pt; + hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_POPUP)); + hMenu=GetSubMenu(hMenu,0); + GetCursorPos(&pt); + TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,pt.x,pt.y,0,hDlg,NULL); + SetForegroundWindow(hDlg); + } + break; + } + break; + case WM_CLOSE: + EndDialog(hDlg,0); + break; + case WM_DESTROY: + { + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(hDlg,&wndpl); + if(wndpl.showCmd==SW_SHOWMAXIMIZED) + { + Options.wndPos.bMin=FALSE; + Options.wndPos.bMax=TRUE; + } + else + if(wndpl.showCmd==SW_SHOWMINIMIZED) + { + Options.wndPos.bMin=TRUE; + Options.wndPos.bMax=wndpl.flags?TRUE:FALSE; + } + else // if(wndpl.showCmd==SW_SHOWNORMAL) + { + Options.wndPos.bMin=FALSE; + Options.wndPos.bMax=FALSE; + } + Options.wndPos.rcNormalPosition=wndpl.rcNormalPosition; + } + SaveOptions(g_hKey,&Options); + UnregisterHotKey(hDlg,HOTKEY_ID); + NotifyIconDelete(hDlg,TRAYICON_ID); + DestroyWindow(hDlgHelp); + break; + } + return FALSE; +} + +LRESULT CALLBACK HelpDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + wParam; + switch(uMsg) + { + case WM_INITDIALOG: + //SetDlgItemText(hDlg,IDC_HELPC,szHelp); + UpdateHelp(GetDlgItem(hDlg,IDC_HELPC),Options.aLang2Lang,szHelp,MAX_CHAR); + SetFocus(GetDlgItem(hDlg,IDC_HELPC)); + break; + case WM_SIZE: + MoveWindow(GetDlgItem(hDlg,IDC_HELPC),0,0,LOWORD(lParam),HIWORD(lParam),TRUE); + break; + case WM_NOTIFY: + if(((NMHDR *)lParam)->code==EN_MSGFILTER) + if(LOWORD(wParam)==IDC_HELPC) + { + MSGFILTER *pMsgFilter=(MSGFILTER *)lParam; + if(pMsgFilter->msg==WM_KEYDOWN) + if(pMsgFilter->wParam==VK_ESCAPE) + SendMessage(GetParent(hDlg),WM_COMMAND,HIWORD(BN_CLICKED)|LOWORD(IDC_HELPW),0); + } + break; + case WM_CLOSE: + SendMessage(GetParent(hDlg),WM_COMMAND,HIWORD(BN_CLICKED)|LOWORD(IDC_HELPW),0); + break; + } + return FALSE; +} + +LRESULT CALLBACK AboutDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + lParam; + switch(uMsg) + { + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_EMAIL: + ShellExecute(hDlg,"open","mailto:NN",NULL,NULL,SW_SHOW); + break; + case IDC_SITE: + ShellExecute(hDlg,"open","http://nnsite.narod.ru",NULL,NULL,SW_SHOW); + break; + case IDOK: + EndDialog(hDlg,0); + break; + } + break; + case WM_CLOSE: + EndDialog(hDlg,0); + break; + } + return FALSE; +} + +LRESULT CALLBACK GeneralPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UINT uID; + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + WORD fsModifiers=Options.translationhotkey.fsModifiers; + // + //remove + // + ShowWindow(GetDlgItem(hDlg,IDC_TRANSLATIONTYPING),SW_HIDE); + // + //remove + // + Wnd2HotKey(&fsModifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEYTRANSLATE,HKM_SETHOTKEY,MAKEWORD(Options.translationhotkey.vk,fsModifiers),0); + CheckRadioButton(hDlg,IDC_TRANSLATIONNO,IDC_TRANSLATIONTYPING,IDC_TRANSLATIONNO+Options.translation); + CheckRadioButton(hDlg,IDC_CLOSEEXIT,IDC_CLOSETOTRAY,IDC_CLOSEEXIT+Options.close); + CheckRadioButton(hDlg,IDC_MINIMIZE,IDC_MINIMIZETOTRAY,IDC_MINIMIZE+Options.minimize); + CheckDlgButton(hDlg,IDC_SHOWTRAYICON,Options.bShowTrayIcon); + } + break; + case WM_COMMAND: + uID=LOWORD(wParam); + switch(uID) + { + case IDC_TRANSLATIONNO: + case IDC_TRANSLATIONHOTKEY: + case IDC_TRANSLATIONTYPING: + CheckRadioButton(hDlg,IDC_TRANSLATIONNO,IDC_TRANSLATIONTYPING,uID); + EnableWindow(GetDlgItem(hDlg,IDC_HOTKEYTRANSLATE),uID==IDC_TRANSLATIONHOTKEY); + break; + case IDC_CLOSEEXIT: + case IDC_CLOSETOTRAY: + CheckRadioButton(hDlg,IDC_CLOSEEXIT,IDC_CLOSETOTRAY,uID); + break; + case IDC_MINIMIZE: + case IDC_MINIMIZETOTRAY: + CheckRadioButton(hDlg,IDC_MINIMIZE,IDC_MINIMIZETOTRAY,uID); + break; + } + break; + case WM_NOTIFY: + switch(((NMHDR *)lParam)->code) + { + case PSN_APPLY: + { + WORD wHotKey; + if(IsDlgButtonChecked(hDlg,IDC_TRANSLATIONNO)) + Options.translation=translationNo; + else + if(IsDlgButtonChecked(hDlg,IDC_TRANSLATIONHOTKEY)) + Options.translation=translationHotKey; + else + Options.translation=translationTyping; + wHotKey=(WORD)SendDlgItemMessage(hDlg,IDC_HOTKEYTRANSLATE,HKM_GETHOTKEY,0,0); + Options.translationhotkey.vk=LOBYTE(wHotKey); + Options.translationhotkey.fsModifiers=HIBYTE(wHotKey); + HotKey2Wnd(&Options.translationhotkey.fsModifiers); + Options.bShowTrayIcon=IsDlgButtonChecked(hDlg,IDC_SHOWTRAYICON); + if(IsDlgButtonChecked(hDlg,IDC_CLOSEEXIT)) + Options.close=closeExit; + else + Options.close=closeToTray; + if(IsDlgButtonChecked(hDlg,IDC_MINIMIZE)) + Options.minimize=minimize; + else + Options.minimize=minimizeToTray; + } + break; + } + break; + } + return FALSE; +} + +LRESULT CALLBACK KeysPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static Lang2Lang *pLang2Lang=NULL; + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + unsigned uID; + RECT rect; + HWND hWndLang2Lang=GetDlgItem(hDlg,IDC_LANG2LANG); + HWND hWndTo=GetDlgItem(hDlg,IDC_TO); + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++) + SendDlgItemMessage(hDlg,uID,EM_SETLIMITTEXT,LANG2LANGFROM_FROM-1,0); + pLang2Lang=Options.aLang2Lang; + while(*pLang2Lang->szName) + { + SendMessage(hWndLang2Lang,CB_ADDSTRING,0,(WPARAM)pLang2Lang->szName); + pLang2Lang++; + } + pLang2Lang=NULL; + GetWindowRect(hWndLang2Lang,&rect); + ScreenToClient(hDlg,(LPPOINT)&rect); + ScreenToClient(hDlg,(LPPOINT)&rect+1); + rect.bottom+=150; + MoveWindow(hWndLang2Lang,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + GetWindowRect(hWndTo,&rect); + ScreenToClient(hDlg,(LPPOINT)&rect); + ScreenToClient(hDlg,(LPPOINT)&rect+1); + rect.bottom+=60; + MoveWindow(hWndTo,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + } + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_UPDATE: + { + TCHAR szFrom[LANG2LANGFROM_FROM]; + unsigned uID,i; + int iCurSel; + iCurSel=(int)SendDlgItemMessage(hDlg,IDC_TO,CB_GETCURSEL,0,0); + if(iCurSel!=CB_ERR) + { + for(uID=IDC_FROM1,i=0;uID<=IDC_FROM5;uID++) + { + GetDlgItemText(hDlg,uID,szFrom,LANG2LANGFROM_FROM-1); + if(*szFrom) + { + lstrcpy(pLang2Lang->FromTo[iCurSel].From[i].szFrom,szFrom); + i++; + } + } + for(;iFromTo[iCurSel].From[i].szFrom[0]=0; + } + } + break; + case IDC_LANG2LANG: + switch(HIWORD(wParam)) + { + case CBN_SELCHANGE: + { + int iCurSel=(int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0); + if(pLang2Lang!=Options.aLang2Lang+iCurSel) + { + Lang2LangFromTo *pLang2LangFromTo; + int i; + pLang2Lang=Options.aLang2Lang+iCurSel; + pLang2LangFromTo=pLang2Lang->FromTo; + for(i=(int)LANG2LANG_FROMTO;i>=0;i--) + SendDlgItemMessage(hDlg,IDC_TO,CB_DELETESTRING,(WPARAM)i,0); + while(*pLang2LangFromTo->szTo) + { + SendDlgItemMessage(hDlg,IDC_TO,CB_ADDSTRING,0,(WPARAM)pLang2LangFromTo->szTo); + pLang2LangFromTo++; + } + SendDlgItemMessage(hDlg,IDC_TO,CB_SETCURSEL,(WPARAM)CB_ERR,0); + for(i=IDC_FROM1;i<=IDC_FROM5;i++) + SetDlgItemText(hDlg,i,_T("")); + } + } + break; + } + break; + case IDC_TO: + switch(HIWORD(wParam)) + { + case CBN_SELCHANGE: + { + int iCurSel=(int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0); + if(iCurSel!=CB_ERR) + { + unsigned uID; + Lang2LangFrom *pLang2LangFrom=pLang2Lang->FromTo[iCurSel].From; + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++,pLang2LangFrom++) + SetDlgItemText(hDlg,uID,pLang2LangFrom->szFrom); + } + else + { + unsigned uID; + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++) + SetDlgItemText(hDlg,uID,_T("")); + } + } + break; + } + break; + } + break; + } + return FALSE; +} + +// Helper functions +void CheckLang(HWND hWnd) +{ + if(LangFrom == LangTo) + switch(LangFrom) + { + case ENG: + CheckRadioButton(hWnd,IDC_ENGTO,IDC_RUSTO,IDC_RUSTO); + LangTo=RUS; + break; + case RUS: + CheckRadioButton(hWnd,IDC_ENGTO,IDC_RUSTO,IDC_ENGTO); + LangTo=ENG; + break; + } + switch(LangFrom) + { + case ENG: + pLang2Lang=Options.aLang2Lang+ENG2RUS; + break; + case RUS: + switch(LangTo) + { + default: // case ENG: + LangTo=ENG; + pLang2Lang=Options.aLang2Lang+RUS2ENG; + break; + } + break; + } + CheckDlgButton(hWnd, IDC_ENGFROM, LangFrom == ENG); + CheckDlgButton(hWnd, IDC_RUSFROM, LangFrom == RUS); + CheckDlgButton(hWnd, IDC_ENGTO, LangTo == ENG); + CheckDlgButton(hWnd, IDC_RUSTO, LangTo == RUS); + EnableWindow(GetDlgItem(hWnd, IDC_ENGTO), LangFrom != ENG); + EnableWindow(GetDlgItem(hWnd, IDC_RUSTO), LangFrom == ENG); +} + +void Translate(Lang2Lang *pLang2Lang,LPCTSTR szFrom,LPTSTR szTo) +{ + int len; + Lang2LangFromTo *pOLang2LangFromTo=pLang2Lang->FromTo; + Lang2LangFromTo *pLang2LangFromTo; + Lang2LangFrom *pLang2LangFrom; + // Init + ZeroMem(szTo,MAX_CHAR); + while(*szFrom) + { + len=LANG2LANGFROM_FROM; + while(len) + { + pLang2LangFromTo=pOLang2LangFromTo; + while(*(*pLang2LangFromTo->From).szFrom) + { + pLang2LangFrom=pLang2LangFromTo->From; + while(*pLang2LangFrom->szFrom) + { + if(len==lstrlen(pLang2LangFrom->szFrom)) + if(CmpStrLen(szFrom,pLang2LangFrom->szFrom)>=0&& + !CmpStr(szFrom,pLang2LangFrom->szFrom)) + goto lFound; + pLang2LangFrom++; + } + pLang2LangFromTo++; + } + len--; + } + goto lNotFound; +lFound: + lstrcat(szTo,pLang2LangFromTo->szTo); + szTo+=lstrlen(pLang2LangFromTo->szTo); + szFrom+=len; + continue; +lNotFound: + *szTo++=*szFrom++; + } +} + +void UpdateHelp(HWND hWndEdit,Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar) +{ + MakeHelp(pLang2Lang,szHelp,nChar); + SetWindowText(hWndEdit,szHelp); +} + +void MakeHelp(Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar) +{ + Lang2LangFrom *pLang2LangFrom; + Lang2LangFromTo *pLang2LangFromTo; + ZeroMem(szHelp,nChar); + while(*pLang2Lang->szName) + { + lstrcat(szHelp,pLang2Lang->szName); + lstrcat(szHelp,_T(" : \n")); + pLang2LangFromTo=pLang2Lang->FromTo; + while(*pLang2LangFromTo->szTo) + { + lstrcat(szHelp,pLang2LangFromTo->szTo); + lstrcat(szHelp,_T(" - ")); + pLang2LangFrom=pLang2LangFromTo->From; + while(*pLang2LangFrom->szFrom) + { + lstrcat(szHelp,pLang2LangFrom->szFrom); + pLang2LangFrom++; + if(*pLang2LangFrom->szFrom) + lstrcat(szHelp,_T(" , ")); + } + pLang2LangFromTo++; + lstrcat(szHelp,_T("\n")); + } + lstrcat(szHelp,_T("\n")); + pLang2Lang++; + } +} + +BOOL LoadOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions) +{ + DWORD dwType=REG_BINARY; + DWORD dwSize=sizeof(Lang2LangOptions); + LONG lRes; + Lang2LangOptions options; + lRes=RegQueryValueEx(hKey,_T("Options"),0,&dwType,(LPBYTE)&options,&dwSize); + if(!lRes&&dwType==REG_BINARY&&dwSize==sizeof(Lang2LangOptions)) + { + *pLang2LangOptions=options; + return TRUE; + } + else + return FALSE; +} + +BOOL SaveOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions) +{ + return !RegSetValueEx(hKey,_T("Options"),0,REG_BINARY,(CONST BYTE *)pLang2LangOptions,sizeof(Lang2LangOptions)); +} + +int DisplayOptions(HWND hWnd) +{ + PROPSHEETPAGE psp[2]; + PROPSHEETHEADER psh; + int res; + + psp[0].dwSize = sizeof(PROPSHEETPAGE); + psp[0].dwFlags = 0; + psp[0].hInstance = g_hInstance; + psp[0].pszTemplate = MAKEINTRESOURCE(IDD_GENERALPAGE); + psp[0].pfnDlgProc = (DLGPROC)GeneralPageDlg; + + psp[1].dwSize = sizeof(PROPSHEETPAGE); + psp[1].dwFlags = 0; + psp[1].hInstance = g_hInstance; + psp[1].pszTemplate = MAKEINTRESOURCE(IDD_KEYSPAGE); + psp[1].pfnDlgProc = (DLGPROC)KeysPageDlg; + + psh.dwSize = sizeof(PROPSHEETHEADER); + psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW; + psh.dwFlags&=~(PSH_HASHELP); + psh.hwndParent = hWnd; + psh.hInstance = g_hInstance; + psh.pszCaption = MAKEINTRESOURCE(IDS_OPTIONS); + psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); + psh.ppsp = (LPCPROPSHEETPAGE) &psp; + + res=(int)PropertySheet(&psh); + + UpdateHelp(GetDlgItem(hDlgHelp,IDC_HELPC),Options.aLang2Lang,szHelp,MAX_CHAR); + + return res; +} \ No newline at end of file diff --git a/legacy/Lang2Lang_v1/Lang2Lang.h b/legacy/Lang2Lang_v1/Lang2Lang.h new file mode 100644 index 0000000..445b880 --- /dev/null +++ b/legacy/Lang2Lang_v1/Lang2Lang.h @@ -0,0 +1,180 @@ +#ifndef __LANG2LANG_H__ +#define __LANG2LANG_H__ + +#ifndef _T +#define _T(quote) TEXT(quote) +#endif // _T + +#define HOTKEY_ID 1000 +#define TRAYICON_ID 1001 +#define TRAYICON_MSG (WM_USER+5) + +// Lang2Lang +#define LANG2LANGFROM_FROM 4 +typedef struct _Lang2LangFrom +{ + TCHAR szFrom[LANG2LANGFROM_FROM]; +}Lang2LangFrom; +#define LANG2LANGFROMTO_FROM 6 +#define LANG2LANGFROMTO_TO 3 +typedef struct _Lang2LangFromTo +{ + TCHAR szTo[LANG2LANGFROMTO_TO]; + Lang2LangFrom From[LANG2LANGFROMTO_FROM]; +}Lang2LangFromTo; +#define LANG2LANG_NAME 10 +#define LANG2LANG_FROMTO 70 +typedef struct _Lang2Lang +{ + TCHAR szName[LANG2LANG_NAME]; + Lang2LangFromTo FromTo[LANG2LANG_FROMTO]; +}Lang2Lang; +enum Translation { translationNo, translationHotKey, translationTyping }; +typedef struct _HotKey // Window Form +{ + WORD vk; + WORD fsModifiers; +}HotKey; +enum Minimize { minimize, minimizeToTray }; +enum Close { closeExit, closeToTray }; +typedef struct _WindowPos +{ + BOOL bMin; + BOOL bMax; + BOOL bHide; + RECT rcNormalPosition; +}WindowPos; +#define LANG2LANGOPTIONS_LANG2LANG 3 +typedef struct _Lang2LangOptions +{ + enum Translation translation; + HotKey translationhotkey; + enum Close close; + enum Minimize minimize; + BOOL bShowTrayIcon; + WindowPos wndPos; + Lang2Lang aLang2Lang[LANG2LANGOPTIONS_LANG2LANG]; +}Lang2LangOptions; + +int CmpStr(LPCTSTR s1,LPCTSTR s2) +{ + while(*s1&&*s2) + { + if(*s1-*s2) + return (int)(*s1-*s2); + s1++; + s2++; + } + return 0; +} +int CmpStrLen(LPCTSTR s1,LPCTSTR s2) +{ + while(*s1&&*s2) + { + s1++; + s2++; + } + return *s1?1:*s2?-1:0; +} + +void FillMem(void *p,size_t length,BYTE fill) +{ + size_t i; + BYTE *pb=(BYTE *)p; + for(i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Lang2Lang_v1/Res/Lang2Lang.ico b/legacy/Lang2Lang_v1/Res/Lang2Lang.ico new file mode 100644 index 0000000..2187f06 Binary files /dev/null and b/legacy/Lang2Lang_v1/Res/Lang2Lang.ico differ diff --git a/legacy/Lang2Lang_v1/resource.h b/legacy/Lang2Lang_v1/resource.h new file mode 100644 index 0000000..9357a7d --- /dev/null +++ b/legacy/Lang2Lang_v1/resource.h @@ -0,0 +1,73 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Lang2Lang.rc +// +#define IDS_ABOUT 1 +#define IDS_ERROR 2 +#define IDE_RICHED20 3 +#define IDE_RICHED32 4 +#define IDD_KEYSPAGE 4 +#define IDS_OPTIONS 5 +#define IDE_REGKEY 6 +#define IDS_LANG2LANG 7 +#define IDR_LANG2LANG 100 +#define IDD_GENERALPAGE 102 +#define IDD_ABOUT 103 +#define IDD_HELP 104 +#define IDR_POPUP 109 +#define IDC_EDITFROM 1001 +#define IDC_EDITTO 1002 +#define IDC_EMAIL 1003 +#define IDC_SITE 1004 +#define IDC_ENGFROM 1005 +#define IDC_RUSFROM 1006 +#define IDC_ENGTO 1007 +#define IDC_RUSTO 1008 +#define IDC_HELPW 1010 +#define IDC_HELPC 1011 +#define IDC_FROM1 1013 +#define IDC_FROM2 1014 +#define IDC_FROM3 1015 +#define IDC_FROM4 1016 +#define IDC_FROM5 1017 +#define IDC_LANG2LANG 1018 +#define IDC_UPDATE 1019 +#define IDC_TO 1021 +#define IDC_TRANSLATIONNO 1022 +#define IDC_TRANSLATIONHOTKEY 1023 +#define IDC_TRANSLATIONTYPING 1024 +#define IDC_HOTKEYTRANSLATE 1025 +#define IDC_SHOWTRAYICON 1026 +#define IDC_CLOSEEXIT 1027 +#define IDC_CLOSETOTRAY 1028 +#define IDC_MINIMIZE 1029 +#define IDC_MINIMIZETOTRAY 1030 +#define IDM_ABOUT 40003 +#define IDM_EXIT 40004 +#define IDM_HELP 40005 +#define IDM_UNDOFROM 40006 +#define IDM_REDOFROM 40007 +#define IDM_CUTFROM 40008 +#define IDM_COPYFROM 40009 +#define IDM_PASTEFROM 40010 +#define IDM_SELECTALLFROM 40011 +#define IDM_UNDOTO 40012 +#define IDM_REDOTO 40013 +#define IDM_CUTTO 40014 +#define IDM_COPYTO 40015 +#define IDM_PASTETO 40016 +#define IDM_SELECTALLTO 40017 +#define IDM_OPTIONS 40019 +#define IDM_SHOW 40022 +#define IDM_HIDE 40023 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 110 +#define _APS_NEXT_COMMAND_VALUE 40024 +#define _APS_NEXT_CONTROL_VALUE 1031 +#define _APS_NEXT_SYMED_VALUE 105 +#endif +#endif diff --git a/legacy/Lang2Lang_v2/Lang2Lang.c b/legacy/Lang2Lang_v2/Lang2Lang.c new file mode 100644 index 0000000..abbf5f8 --- /dev/null +++ b/legacy/Lang2Lang_v2/Lang2Lang.c @@ -0,0 +1,1028 @@ +// Warnings +#pragma warning(disable:4201) // nameless struct/union +#pragma warning(disable:4065) // default without no case +// Warnings +#define WINVER 0x400 +#define _WIN32_IE 0x400 +#define STRICT +#define _RICHEDIT_VER 0x200 +#include +#if WINVER<0x500 +#include // GetGUIThreadInfo +#endif // WINVER<0x500 +#include +#include +#include "resource.h" +#include "Lang2Lang.h" + +// Dialog functions +LRESULT CALLBACK Lang2LangDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK HelpDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK AboutDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK GeneralPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK KeysPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + +void Translate(Lang2Lang *pLang2Lang,LPCTSTR szFrom,LPTSTR szTo); +void UpdateHelp(HWND hWndEdit,Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar); +void MakeHelp(Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar); +BOOL LoadOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions); +BOOL SaveOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions); +int DisplayOptions(HWND hWnd); +void CheckLang(HWND hWnd); +BOOL ShowLang2LangIcon(HWND hWnd); +BOOL HideLang2LangIcon(HWND hWnd); +void LoadWindowPos(HWND hWnd,WindowPos *pWindowPos); +void SaveWindowPos(HWND hWnd,WindowPos *pWindowPos); +void Lang2LangToTray(HWND hWnd); + +// Initial Options +Lang2LangOptions Options= +{ + translationHotKey, + { + 'L', + MOD_ALT|MOD_CONTROL + }, + minimizeToTray, + closeExit, + TRUE, + { + FALSE, + FALSE, + { + 0, + 0, + 0, + 0 + } + }, + { + // Eng2Rus + { + _T("Eng2Rus"), + { + {_T(""),{_T("a")}}, + {_T(""),{_T("A")}}, + {_T(""),{_T("b")}}, + {_T(""),{_T("B")}}, + {_T(""),{_T("v")}}, + {_T(""),{_T("V")}}, + {_T(""),{_T("g")}}, + {_T(""),{_T("G")}}, + {_T(""),{_T("d")}}, + {_T(""),{_T("D")}}, + {_T(""),{_T("e")}}, + {_T(""),{_T("E")}}, + {_T(""),{_T("e'")}}, + {_T(""),{_T("E'")}}, + {_T(""),{_T("j")}}, + {_T(""),{_T("J")}}, + {_T(""),{_T("z")}}, + {_T(""),{_T("Z")}}, + {_T(""),{_T("i")}}, + {_T(""),{_T("I")}}, + {_T(""),{_T("y")}}, + {_T(""),{_T("Y")}}, + {_T(""),{_T("k")}}, + {_T(""),{_T("K")}}, + {_T(""),{_T("l")}}, + {_T(""),{_T("L")}}, + {_T(""),{_T("m")}}, + {_T(""),{_T("M")}}, + {_T(""),{_T("n")}}, + {_T(""),{_T("N")}}, + {_T(""),{_T("o")}}, + {_T(""),{_T("O")}}, + {_T(""),{_T("p")}}, + {_T(""),{_T("P")}}, + {_T(""),{_T("r")}}, + {_T(""),{_T("R")}}, + {_T(""),{_T("s")}}, + {_T(""),{_T("S")}}, + {_T(""),{_T("t")}}, + {_T(""),{_T("T")}}, + {_T(""),{_T("u")}}, + {_T(""),{_T("U")}}, + {_T(""),{_T("f")}}, + {_T(""),{_T("F")}}, + {_T(""),{_T("x"),_T("h")}}, + {_T(""),{_T("X"),_T("H")}}, + {_T(""),{_T("c")}}, + {_T(""),{_T("C")}}, + {_T(""),{_T("ch")}}, + {_T(""),{_T("ch")}}, + {_T(""),{_T("w"),_T("sh"),_T("sH")}}, + {_T(""),{_T("W"),_T("SH"),_T("Sh")}}, + {_T(""),{_T("w'"),_T("sch"),_T("sCH"),_T("sCh"),_T("scH")}}, + {_T(""),{_T("W'"),_T("SCH"),_T("Sch"),_T("SCh"),_T("ScH")}}, + {_T(""),{_T("`")}}, + {_T(""),{_T("``")}}, + {_T(""),{_T("y'")}}, + {_T(""),{_T("Y'")}}, + {_T(""),{_T("'")}}, + {_T(""),{_T("''")}}, + {_T(""),{_T("e`")}}, + {_T(""),{_T("E`")}}, + {_T(""),{_T("iu"),_T("iU"),_T("yu"),_T("yU")}}, + {_T(""),{_T("IU"),_T("IU"),_T("YU"),_T("Yu")}}, + {_T(""),{_T("ia"),_T("iA"),_T("ya"),_T("yA")}}, + {_T(""),{_T("IA"),_T("Ia"),_T("YA"),_T("Ya")}} + } + }, + // Rus2Eng + { + _T("Rus2Eng"), + { + {_T("a"),{_T("")}}, + {_T("A"),{_T("")}}, + {_T("b"),{_T("")}}, + {_T("B"),{_T("")}}, + {_T("c"),{_T("")}}, + {_T("C"),{_T("")}}, + {_T("d"),{_T("")}}, + {_T("D"),{_T("")}}, + {_T("e"),{_T("")}}, + {_T("E"),{_T("")}}, + {_T("f"),{_T("")}}, + {_T("F"),{_T("")}}, + {_T("g"),{_T("")}}, + {_T("G"),{_T("")}}, + {_T("h"),{_T("")}}, + {_T("H"),{_T("")}}, + {_T("i"),{_T("")}}, + {_T("I"),{_T("")}}, + {_T("j"),{_T("")}}, + {_T("J"),{_T("")}}, + {_T("k"),{_T("")}}, + {_T("K"),{_T("")}}, + {_T("l"),{_T("")}}, + {_T("L"),{_T("")}}, + {_T("m"),{_T("")}}, + {_T("M"),{_T("")}}, + {_T("n"),{_T("")}}, + {_T("N"),{_T("")}}, + {_T("o"),{_T("")}}, + {_T("O"),{_T("")}}, + {_T("p"),{_T("")}}, + {_T("P"),{_T("")}}, + {_T("r"),{_T("")}}, + {_T("R"),{_T("")}}, + {_T("s"),{_T("")}}, + {_T("S"),{_T("")}}, + {_T("t"),{_T("")}}, + {_T("T"),{_T("")}}, + {_T("u"),{_T("")}}, + {_T("U"),{_T("")}}, + {_T("v"),{_T("")}}, + {_T("V"),{_T("")}}, + {_T("w"),{_T("")}}, + {_T("W"),{_T("")}}, + {_T("x"),{_T("")}}, + {_T("X"),{_T("")}}, + {_T("y"),{_T("")}}, + {_T("Y"),{_T("")}}, + {_T("z"),{_T("")}}, + {_T("Z"),{_T("")}}, + } + }, + {0} + } +}; + +#define ENG2RUS 0 +#define RUS2ENG 1 +#define DEF_LANG2LANG ENG2RUS +Lang2Lang *pLang2Lang = Options.aLang2Lang+DEF_LANG2LANG; + +#define MAX_CHAR 65530 +#define ENG 1 +#define RUS 2 + +#define DEFFROM ENG +#define DEFTO RUS + +#define MENU_EDITFROM 1 +#define MENU_EDITTO 2 + +TCHAR szEditFrom[MAX_CHAR]; +TCHAR szEditTo[MAX_CHAR]; +int LangFrom = DEFFROM; +int LangTo = DEFTO; +HWND hDlgHelp = NULL; +BOOL bHelp = FALSE; + +TCHAR szHelp[MAX_CHAR]; + +HINSTANCE g_hInstance; +HKEY g_hKey; +HICON g_hIcon; + +// Main +void main() +{ + HMODULE hRichEdit; + // Registry + if(RegCreateKey(HKEY_CURRENT_USER,_T("Software\\NN\\Lang2Lang"),&g_hKey)) + { + ShowErrorHT(IDE_REGKEY); + ExitProcess(0); + return; + } + RegSetValueEx(g_hKey,_T("Version"),0,REG_SZ,(CONST BYTE*)_T("2.0.0.0"),10*sizeof(TCHAR)); + //hInstance + g_hInstance=GetModuleHandle(NULL); + // LoadLibrary + hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + { + ShowErrorHT(IDE_RICHED20); + hRichEdit=LoadLibrary("riched32.dll"); + if(!hRichEdit) + { + ShowErrorHT(IDE_RICHED32); + ExitProcess(0); + return; + } + } + // Init + szEditFrom[0]=0; + szEditTo[0]=0; + g_hIcon=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDR_LANG2LANG)); + // call dialog + DialogBox(g_hInstance,MAKEINTRESOURCE(IDR_LANG2LANG),NULL,(DLGPROC)Lang2LangDlg); + // FreeLibrary + FreeLibrary(hRichEdit); + // Registry + RegCloseKey(g_hKey); + //return + ExitProcess(0); +} + +// Dialog functions +LRESULT CALLBACK Lang2LangDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + // Avoid warning + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + TCHAR szAbout[MAX_PATH]; + HMENU hSystemMenu; + hSystemMenu=GetSystemMenu(hDlg,0); + AppendMenu(hSystemMenu,MF_SEPARATOR,0,0); + LoadString(g_hInstance,IDS_ABOUT,szAbout,MAX_PATH); + AppendMenu(hSystemMenu,MF_STRING,IDM_ABOUT,szAbout); + CheckLang(hDlg); + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETEVENTMASK,0, + ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETEVENTMASK,0, + ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETLIMITTEXT,MAX_CHAR,0); + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETLIMITTEXT,MAX_CHAR,0); + LoadOptions(g_hKey,&Options); + hDlgHelp = CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_HELP),hDlg,(DLGPROC)HelpDlg); + RegisterHotKey(hDlg,HOTKEY_ID,Options.translationhotkey.fsModifiers,Options.translationhotkey.vk); + SendMessage(hDlg,WM_SETICON,TRUE,(LPARAM)g_hIcon); + SendMessage(hDlg,WM_SETICON,FALSE,(LPARAM)g_hIcon); + if(Options.bShowTrayIcon) + ShowLang2LangIcon(hDlg); + LoadWindowPos(hDlg,&Options.windowpos); + } + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_EDITFROM: + switch(HIWORD(wParam)) + { + case EN_CHANGE: + GetDlgItemText(hDlg,IDC_EDITFROM,szEditFrom,MAX_CHAR); + Translate(pLang2Lang,szEditFrom,szEditTo); + SetDlgItemText(hDlg,IDC_EDITTO,szEditTo); + break; + } + break; + case IDM_HELP: + case IDC_HELPW: + case IDM_OPTIONS: + { + BOOL bOptions=LOWORD(wParam)==IDM_OPTIONS; + HMENU hMenu,hSubMenu; + if(bOptions&&bHelp|| + !bOptions) + { + bHelp=!bHelp; + CheckDlgButton(hDlg,IDC_HELPW,bHelp); + ShowWindow(hDlgHelp,bHelp?SW_SHOW:SW_HIDE); + hMenu=GetMenu(hDlg); + hSubMenu=GetSubMenu(hMenu,3); + CheckMenuItem(hSubMenu,IDM_HELP,MF_BYCOMMAND|(bHelp?MF_CHECKED:MF_UNCHECKED)); + } + if(bOptions) + if(DisplayOptions(hDlg)==IDOK) + { + UnregisterHotKey(hDlg,HOTKEY_ID); + RegisterHotKey(hDlg,HOTKEY_ID,Options.translationhotkey.fsModifiers,Options.translationhotkey.vk); + if(!Options.bShowTrayIcon) + HideLang2LangIcon(hDlg); + else + ShowLang2LangIcon(hDlg); + } + } + break; + case IDM_ABOUT: + DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUT),hDlg,(DLGPROC)AboutDlg); + break; + case IDM_EXIT: + PostMessage(hDlg,WM_CLOSE,0,0); + break; + case IDC_ENGFROM: + case IDC_RUSFROM: + case IDC_ENGTO: + case IDC_RUSTO: + switch(LOWORD(wParam)) + { + case IDC_ENGFROM: + LangFrom=ENG; + break; + case IDC_RUSFROM: + LangFrom=RUS; + break; + case IDC_ENGTO: + LangTo=ENG; + break; + case IDC_RUSTO: + LangTo=RUS; + break; + } + CheckLang(hDlg); + Translate(pLang2Lang,szEditFrom,szEditTo); + SetDlgItemText(hDlg,IDC_EDITTO,szEditTo); + break; + case IDM_UNDOFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_UNDO,0,0); + break; + case IDM_REDOFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_REDO,0,0); + break; + case IDM_CUTFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_CUT,0,0); + break; + case IDM_COPYFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_COPY,0,0); + break; + case IDM_PASTEFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,WM_PASTE,0,0); + break; + case IDM_SELECTALLFROM: + SendDlgItemMessage(hDlg,IDC_EDITFROM,EM_SETSEL,0,(LPARAM)-1); + break; + case IDM_UNDOTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_UNDO,0,0); + break; + case IDM_REDOTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_REDO,0,0); + break; + case IDM_CUTTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_CUT,0,0); + break; + case IDM_COPYTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_COPY,0,0); + break; + case IDM_PASTETO: + SendDlgItemMessage(hDlg,IDC_EDITTO,WM_PASTE,0,0); + break; + case IDM_SELECTALLTO: + SendDlgItemMessage(hDlg,IDC_EDITTO,EM_SETSEL,0,(LPARAM)-1); + break; + case IDOK: + case IDCANCEL: + break; + case IDM_SHOW: + ShowWindow(hDlg,SW_SHOW); + if(!Options.bShowTrayIcon) + HideLang2LangIcon(hDlg); + break; + case IDM_HIDE: + ShowWindow(hDlg,SW_HIDE); + if(!Options.bShowTrayIcon) + ShowLang2LangIcon(hDlg); + break; + } + break; + case WM_NOTIFY: + if(((NMHDR *)lParam)->code==EN_MSGFILTER) + if(LOWORD(wParam)==IDC_EDITFROM||LOWORD(wParam)==IDC_EDITTO) + { + MSGFILTER *pMsgFilter=(MSGFILTER *)lParam; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + HMENU hMenu,hSubMenu; + POINT pt; + GetCursorPos(&pt); + hMenu=GetMenu(hDlg); + hSubMenu=GetSubMenu(hMenu,LOWORD(wParam)==IDC_EDITFROM?MENU_EDITFROM:MENU_EDITTO); + TrackPopupMenu(hSubMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,hDlg,NULL); + } + } + break; + case WM_SYSCOMMAND: + switch(LOWORD(wParam)) + { + case IDM_ABOUT: + DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUT),hDlg,(DLGPROC)AboutDlg); + break; + case SC_CLOSE: + if(Options.close==closeToTray) + { + Lang2LangToTray(hDlg); + return TRUE;} + break; + case SC_MINIMIZE: + if(Options.minimize==minimizeToTray) + { + Lang2LangToTray(hDlg); + return TRUE; + } + break; + } + break; + case WM_HOTKEY: + { + TCHAR szFrom[MAX_CHAR]; + TCHAR szTo[MAX_CHAR]; + TCHAR szClass[50]; + HWND hWndTranslate = GetForegroundWindow(); + DWORD dwThreadID = GetWindowThreadProcessId(hWndTranslate, NULL); + GUITHREADINFO gui_thread_info; + ZeroMem(&gui_thread_info, sizeof(GUITHREADINFO)); + gui_thread_info.cbSize = sizeof(GUITHREADINFO); + GetGUIThreadInfo(dwThreadID, &gui_thread_info); + hWndTranslate=gui_thread_info.hwndFocus; + GetClassName(hWndTranslate,szClass,50-1); +#ifndef UNICODE + if(!lstrcmpi(szClass,_T("EditW"))|| + !lstrcmpi(szClass,_T("RichEditW"))|| + !lstrcmpi(szClass,_T("RichEdit20W"))|| + !lstrcmpi(szClass,_T("RichEdit30W"))) + { + WCHAR wszFrom[MAX_CHAR/2]; + WCHAR wszTo[MAX_CHAR/2]; + SendMessageW(hWndTranslate, WM_GETTEXT, (WPARAM)(MAX_CHAR/2-1),(LPARAM)wszFrom); + WideCharToMultiByte(CP_ACP,0,wszFrom,-1,szFrom,sizeof(szFrom)/sizeof(TCHAR)-1,NULL,NULL); + Translate(pLang2Lang,szFrom,szTo); + MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szTo,-1,wszTo,sizeof(wszTo)/sizeof(WCHAR)-1); + SendMessageW(hWndTranslate, WM_SETTEXT, 0,(LPARAM)(LPCTSTR)wszTo); + } + else + { +#endif // !UNICODE + SendMessage(hWndTranslate, WM_GETTEXT, (WPARAM)(MAX_CHAR-1),(LPARAM)szFrom); + Translate(pLang2Lang,szFrom,szTo); + SendMessage(hWndTranslate, WM_SETTEXT, 0,(LPARAM)(LPCTSTR)szTo); +#ifndef UNICODE + } +#endif // !UNICODE + } + break; + case TRAYICON_MSG: + switch (lParam) + { + case WM_LBUTTONDBLCLK: + if(IsWindowVisible(hDlg)) + PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDM_HIDE,BN_CLICKED),0); + else + PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDM_SHOW,BN_CLICKED),0); + break; + case WM_RBUTTONDOWN: + { + HMENU hMenu,hSubMenu; + POINT pt; + hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_POPUP)); + hSubMenu=GetSubMenu(hMenu,0); + GetCursorPos(&pt); + TrackPopupMenu(hSubMenu,TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,0,hDlg,NULL); + SetForegroundWindow(hDlg); + DestroyMenu(hMenu); + } + break; + } + break; + case WM_CLOSE: + EndDialog(hDlg,0); + break; + case WM_DESTROY: + SaveWindowPos(hDlg,&Options.windowpos); + SaveOptions(g_hKey,&Options); + UnregisterHotKey(hDlg,HOTKEY_ID); + HideLang2LangIcon(hDlg); + DestroyWindow(hDlgHelp); + break; + } + return FALSE; +} + +LRESULT CALLBACK HelpDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + wParam; + switch(uMsg) + { + case WM_INITDIALOG: + //SetDlgItemText(hDlg,IDC_HELPC,szHelp); + UpdateHelp(GetDlgItem(hDlg,IDC_HELPC),Options.aLang2Lang,szHelp,MAX_CHAR); + SetFocus(GetDlgItem(hDlg,IDC_HELPC)); + break; + case WM_SIZE: + MoveWindow(GetDlgItem(hDlg,IDC_HELPC),0,0,LOWORD(lParam),HIWORD(lParam),TRUE); + break; + case WM_NOTIFY: + if(((NMHDR *)lParam)->code==EN_MSGFILTER) + if(LOWORD(wParam)==IDC_HELPC) + { + MSGFILTER *pMsgFilter=(MSGFILTER *)lParam; + if(pMsgFilter->msg==WM_KEYDOWN) + if(pMsgFilter->wParam==VK_ESCAPE) + SendMessage(GetParent(hDlg),WM_COMMAND,HIWORD(BN_CLICKED)|LOWORD(IDC_HELPW),0); + } + break; + case WM_CLOSE: + SendMessage(GetParent(hDlg),WM_COMMAND,HIWORD(BN_CLICKED)|LOWORD(IDC_HELPW),0); + break; + } + return FALSE; +} + +LRESULT CALLBACK AboutDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + lParam; + switch(uMsg) + { + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_EMAIL: + ShellExecute(hDlg,"open","mailto:NN",NULL,NULL,SW_SHOW); + break; + case IDC_SITE: + ShellExecute(hDlg,"open","http://nnsite.narod.ru",NULL,NULL,SW_SHOW); + break; + case IDOK: + EndDialog(hDlg,0); + break; + } + break; + case WM_CLOSE: + EndDialog(hDlg,0); + break; + } + return FALSE; +} + +LRESULT CALLBACK GeneralPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + WORD fsModifiers=Options.translationhotkey.fsModifiers; + Wnd2HotKey(&fsModifiers); + SendDlgItemMessage(hDlg,IDC_HOTKEYTRANSLATE,HKM_SETHOTKEY,MAKEWORD(Options.translationhotkey.vk,fsModifiers),0); + CheckRadioButton(hDlg,IDC_TRANSLATIONNO,IDC_TRANSLATIONHOTKEY,IDC_TRANSLATIONNO+Options.translation); + // + EnableWindow(GetDlgItem(hDlg,IDC_HOTKEYTRANSLATE),Options.translation==translationHotKey); + // + CheckRadioButton(hDlg,IDC_MINIMIZEMINIMIZE,IDC_MINIMIZETOTRAY,IDC_MINIMIZEMINIMIZE+Options.minimize); + CheckRadioButton(hDlg,IDC_CLOSEEXIT,IDC_CLOSETOTRAY,IDC_CLOSEEXIT+Options.close); + CheckDlgButton(hDlg,IDC_SHOWTRAYICON,Options.bShowTrayIcon); + } + break; + case WM_COMMAND: + { + UINT uID=LOWORD(wParam); + switch(uID) + { + case IDC_TRANSLATIONNO: + case IDC_TRANSLATIONHOTKEY: + CheckRadioButton(hDlg,IDC_TRANSLATIONNO,IDC_TRANSLATIONHOTKEY,uID); + EnableWindow(GetDlgItem(hDlg,IDC_HOTKEYTRANSLATE),uID==IDC_TRANSLATIONHOTKEY); + break; + case IDC_MINIMIZEMINIMIZE: + case IDC_MINIMIZETOTRAY: + CheckRadioButton(hDlg,IDC_MINIMIZEMINIMIZE,IDC_MINIMIZETOTRAY,uID); + break; + case IDC_CLOSEEXIT: + case IDC_CLOSETOTRAY: + CheckRadioButton(hDlg,IDC_CLOSEEXIT,IDC_CLOSETOTRAY,uID); + break; + } + } + break; + case WM_NOTIFY: + switch(((NMHDR *)lParam)->code) + { + case PSN_APPLY: + { + WORD wHotKey; + if(IsDlgButtonChecked(hDlg,IDC_TRANSLATIONNO)) + Options.translation=translationNo; + else + if(IsDlgButtonChecked(hDlg,IDC_TRANSLATIONHOTKEY)) + Options.translation=translationHotKey; + else + Options.translation=translationTyping; + if(IsDlgButtonChecked(hDlg,IDC_MINIMIZEMINIMIZE)) + Options.minimize=minimizeMinimize; + else + Options.minimize=minimizeToTray; + if(IsDlgButtonChecked(hDlg,IDC_CLOSEEXIT)) + Options.close=closeExit; + else + Options.close=closeToTray; + wHotKey=(WORD)SendDlgItemMessage(hDlg,IDC_HOTKEYTRANSLATE,HKM_GETHOTKEY,0,0); + Options.translationhotkey.vk=LOBYTE(wHotKey); + Options.translationhotkey.fsModifiers=HIBYTE(wHotKey); + HotKey2Wnd(&Options.translationhotkey.fsModifiers); + Options.bShowTrayIcon=IsDlgButtonChecked(hDlg,IDC_SHOWTRAYICON); + } + break; + } + break; + } + return FALSE; +} + +LRESULT CALLBACK KeysPageDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static Lang2Lang *pLang2Lang=NULL; + static Lang2LangOptions KeysOptions; + lParam; + switch(uMsg) + { + case WM_INITDIALOG: + { + unsigned uID; + RECT rect; + HWND hWndLang2Lang=GetDlgItem(hDlg,IDC_LANG2LANG); + HWND hWndTo=GetDlgItem(hDlg,IDC_TO); + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++) + SendDlgItemMessage(hDlg,uID,EM_SETLIMITTEXT,LANG2LANGFROM_FROM-1,0); + KeysOptions=Options; + pLang2Lang=KeysOptions.aLang2Lang; + while(*pLang2Lang->szName) + { + SendMessage(hWndLang2Lang,CB_ADDSTRING,0,(WPARAM)pLang2Lang->szName); + pLang2Lang++; + } + pLang2Lang=NULL; + GetWindowRect(hWndLang2Lang,&rect); + ScreenToClient(hDlg,(LPPOINT)&rect); + ScreenToClient(hDlg,(LPPOINT)&rect+1); + rect.bottom+=150; + MoveWindow(hWndLang2Lang,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + GetWindowRect(hWndTo,&rect); + ScreenToClient(hDlg,(LPPOINT)&rect); + ScreenToClient(hDlg,(LPPOINT)&rect+1); + rect.bottom+=60; + MoveWindow(hWndTo,rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + } + break; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDC_LANG2LANG: + switch(HIWORD(wParam)) + { + case CBN_SELCHANGE: + { + int iCurSel=(int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0); + if(pLang2Lang!=KeysOptions.aLang2Lang+iCurSel) + { + Lang2LangFromTo *pLang2LangFromTo; + int i; + pLang2Lang=KeysOptions.aLang2Lang+iCurSel; + pLang2LangFromTo=pLang2Lang->FromTo; + for(i=(int)LANG2LANG_FROMTO;i>=0;i--) + SendDlgItemMessage(hDlg,IDC_TO,CB_DELETESTRING,(WPARAM)i,0); + while(*pLang2LangFromTo->szTo) + { + SendDlgItemMessage(hDlg,IDC_TO,CB_ADDSTRING,0,(WPARAM)pLang2LangFromTo->szTo); + pLang2LangFromTo++; + } + SendDlgItemMessage(hDlg,IDC_TO,CB_SETCURSEL,(WPARAM)CB_ERR,0); + for(i=IDC_FROM1;i<=IDC_FROM5;i++) + SetDlgItemText(hDlg,i,_T("")); + } + } + break; + } + break; + case IDC_TO: + switch(HIWORD(wParam)) + { + case CBN_SELCHANGE: + { + int iCurSel=(int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0); + unsigned uID; + if(iCurSel!=CB_ERR) + { + Lang2LangFrom *pLang2LangFrom=pLang2Lang->FromTo[iCurSel].From; + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++,pLang2LangFrom++) + SetDlgItemText(hDlg,uID,pLang2LangFrom->szFrom); + } + else + { + for(uID=IDC_FROM1;uID<=IDC_FROM5;uID++) + SetDlgItemText(hDlg,uID,_T("")); + } + } + break; + } + break; + case IDC_FROM1: + case IDC_FROM2: + case IDC_FROM3: + case IDC_FROM4: + case IDC_FROM5: + { + TCHAR szFrom[LANG2LANGFROM_FROM]; + unsigned uID,i; + int iCurSel; + iCurSel=(int)SendDlgItemMessage(hDlg,IDC_TO,CB_GETCURSEL,0,0); + if(iCurSel!=CB_ERR) + { + for(uID=IDC_FROM1,i=0;uID<=IDC_FROM5;uID++) + { + GetDlgItemText(hDlg,uID,szFrom,LANG2LANGFROM_FROM-1); + if(*szFrom) + { + lstrcpy(pLang2Lang->FromTo[iCurSel].From[i].szFrom,szFrom); + i++; + } + } + for(;iFromTo[iCurSel].From[i].szFrom[0]=0; + } + } + } + break; + case WM_NOTIFY: + switch(((NMHDR *)lParam)->code) + { + case PSN_APPLY: + Options=KeysOptions; + break; + } + break; + } + return FALSE; +} + +// Helper functions +void CheckLang(HWND hWnd) +{ + if(LangFrom == LangTo) + switch(LangFrom) + { + case ENG: + CheckRadioButton(hWnd,IDC_ENGTO,IDC_RUSTO,IDC_RUSTO); + LangTo=RUS; + break; + case RUS: + CheckRadioButton(hWnd,IDC_ENGTO,IDC_RUSTO,IDC_ENGTO); + LangTo=ENG; + break; + } + switch(LangFrom) + { + case ENG: + pLang2Lang=Options.aLang2Lang+ENG2RUS; + break; + case RUS: + switch(LangTo) + { + default: // case ENG: + LangTo=ENG; + pLang2Lang=Options.aLang2Lang+RUS2ENG; + break; + } + break; + } + CheckDlgButton(hWnd, IDC_ENGFROM, LangFrom == ENG); + CheckDlgButton(hWnd, IDC_RUSFROM, LangFrom == RUS); + CheckDlgButton(hWnd, IDC_ENGTO, LangTo == ENG); + CheckDlgButton(hWnd, IDC_RUSTO, LangTo == RUS); + EnableWindow(GetDlgItem(hWnd, IDC_ENGTO), LangFrom != ENG); + EnableWindow(GetDlgItem(hWnd, IDC_RUSTO), LangFrom == ENG); +} + +void Translate(Lang2Lang *pLang2Lang,LPCTSTR szFrom,LPTSTR szTo) +{ + int len; + Lang2LangFromTo *pOLang2LangFromTo=pLang2Lang->FromTo; + Lang2LangFromTo *pLang2LangFromTo; + Lang2LangFrom *pLang2LangFrom; + // Init + ZeroMem(szTo,MAX_CHAR); + while(*szFrom) + { + len=LANG2LANGFROM_FROM; + while(len) + { + pLang2LangFromTo=pOLang2LangFromTo; + while(*(*pLang2LangFromTo->From).szFrom) + { + pLang2LangFrom=pLang2LangFromTo->From; + while(*pLang2LangFrom->szFrom) + { + if(len==lstrlen(pLang2LangFrom->szFrom)) + if(CmpStrLen(szFrom,pLang2LangFrom->szFrom)>=0&& + !CmpStr(szFrom,pLang2LangFrom->szFrom)) + goto lFound; + pLang2LangFrom++; + } + pLang2LangFromTo++; + } + len--; + } + goto lNotFound; +lFound: + lstrcat(szTo,pLang2LangFromTo->szTo); + szTo+=lstrlen(pLang2LangFromTo->szTo); + szFrom+=len; + continue; +lNotFound: + *szTo++=*szFrom++; + } +} + +void UpdateHelp(HWND hWndEdit,Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar) +{ + MakeHelp(pLang2Lang,szHelp,nChar); + SetWindowText(hWndEdit,szHelp); +} + +void MakeHelp(Lang2Lang *pLang2Lang,LPTSTR szHelp,unsigned nChar) +{ + Lang2LangFrom *pLang2LangFrom; + Lang2LangFromTo *pLang2LangFromTo; + ZeroMem(szHelp,nChar); + while(*pLang2Lang->szName) + { + lstrcat(szHelp,pLang2Lang->szName); + lstrcat(szHelp,_T(" : \n")); + pLang2LangFromTo=pLang2Lang->FromTo; + while(*pLang2LangFromTo->szTo) + { + lstrcat(szHelp,pLang2LangFromTo->szTo); + lstrcat(szHelp,_T(" - ")); + pLang2LangFrom=pLang2LangFromTo->From; + while(*pLang2LangFrom->szFrom) + { + lstrcat(szHelp,pLang2LangFrom->szFrom); + pLang2LangFrom++; + if(*pLang2LangFrom->szFrom) + lstrcat(szHelp,_T(" , ")); + } + pLang2LangFromTo++; + lstrcat(szHelp,_T("\n")); + } + lstrcat(szHelp,_T("\n")); + pLang2Lang++; + } +} + +BOOL LoadOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions) +{ + DWORD dwType=REG_BINARY; + DWORD dwSize=sizeof(Lang2LangOptions); + LONG lRes; + Lang2LangOptions options; + lRes=RegQueryValueEx(hKey,_T("Options"),0,&dwType,(LPBYTE)&options,&dwSize); + if(!lRes&&dwType==REG_BINARY&&dwSize==sizeof(Lang2LangOptions)) + { + *pLang2LangOptions=options; + return TRUE; + } + else + return FALSE; +} + +BOOL SaveOptions(HKEY hKey,Lang2LangOptions *pLang2LangOptions) +{ + return !RegSetValueEx(hKey,_T("Options"),0,REG_BINARY,(CONST BYTE *)pLang2LangOptions,sizeof(Lang2LangOptions)); +} + +int DisplayOptions(HWND hWnd) +{ + PROPSHEETPAGE psp[2]; + PROPSHEETHEADER psh; + int res; + + psp[0].dwSize = sizeof(PROPSHEETPAGE); + psp[0].dwFlags = 0; + psp[0].hInstance = g_hInstance; + psp[0].pszTemplate = MAKEINTRESOURCE(IDD_GENERALPAGE); + psp[0].pfnDlgProc = (DLGPROC)GeneralPageDlg; + + psp[1].dwSize = sizeof(PROPSHEETPAGE); + psp[1].dwFlags = 0; + psp[1].hInstance = g_hInstance; + psp[1].pszTemplate = MAKEINTRESOURCE(IDD_KEYSPAGE); + psp[1].pfnDlgProc = (DLGPROC)KeysPageDlg; + + psh.dwSize = sizeof(PROPSHEETHEADER); + psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW; + psh.dwFlags&=~(PSH_HASHELP); + psh.hwndParent = hWnd; + psh.hInstance = g_hInstance; + psh.pszCaption = MAKEINTRESOURCE(IDS_OPTIONS); + psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); + psh.ppsp = (LPCPROPSHEETPAGE) &psp; + + res=(int)PropertySheet(&psh); + + UpdateHelp(GetDlgItem(hDlgHelp,IDC_HELPC),Options.aLang2Lang,szHelp,MAX_CHAR); + + return res; +} + +BOOL ShowLang2LangIcon(HWND hWnd) +{ return NotifyIconAddID(hWnd,TRAYICON_ID,TRAYICON_MSG,g_hIcon,IDS_LANG2LANG); } +BOOL HideLang2LangIcon(HWND hWnd) +{ return NotifyIconDelete(hWnd,TRAYICON_ID); } + +void LoadWindowPos(HWND hWnd,WindowPos *pWindowPos) +{ + WINDOWPLACEMENT wndpl; + + if(!(pWindowPos->rcNormalPosition.left&& + pWindowPos->rcNormalPosition.right&& + pWindowPos->rcNormalPosition.top&& + pWindowPos->rcNormalPosition.bottom)) + return; + + wndpl.flags=WPF_SETMINPOSITION; + wndpl.length=sizeof(WINDOWPLACEMENT); + wndpl.ptMinPosition.x=0; + wndpl.ptMinPosition.y=0; + wndpl.ptMaxPosition.x=-GetSystemMetrics(SM_CXBORDER); + wndpl.ptMaxPosition.y=-GetSystemMetrics(SM_CYBORDER); + wndpl.flags=WPF_SETMINPOSITION; + wndpl.rcNormalPosition=pWindowPos->rcNormalPosition; + + if(pWindowPos->bMin) + { + wndpl.showCmd=SW_SHOWMINNOACTIVE; + if(pWindowPos->bMax) + wndpl.flags=WPF_RESTORETOMAXIMIZED; + } + else + { + if(pWindowPos->bMax) + { + wndpl.showCmd=SW_SHOWMAXIMIZED; + wndpl.flags=WPF_RESTORETOMAXIMIZED; + } + else + wndpl.showCmd=SW_RESTORE; + } + + SetWindowPlacement(hWnd,&wndpl); +} + +void SaveWindowPos(HWND hWnd,WindowPos *pWindowPos) +{ + WINDOWPLACEMENT wndpl; + + wndpl.length=sizeof(WINDOWPLACEMENT); + + GetWindowPlacement(hWnd,&wndpl); + + if(wndpl.showCmd==SW_SHOWMAXIMIZED) + { + pWindowPos->bMin=FALSE; + pWindowPos->bMax=TRUE; + } + else + if(wndpl.showCmd==SW_SHOWMINIMIZED) + { + pWindowPos->bMin=TRUE; + pWindowPos->bMax=wndpl.flags?TRUE:FALSE; + } + else // if(wndpl.showCmd==SW_SHOWNORMAL) + { + pWindowPos->bMin=FALSE; + pWindowPos->bMax=FALSE; + } + pWindowPos->rcNormalPosition=wndpl.rcNormalPosition; +} + +void Lang2LangToTray(HWND hWnd) +{ + ShowWindow(hWnd,SW_HIDE); + if(!Options.bShowTrayIcon) + ShowLang2LangIcon(hWnd); +} \ No newline at end of file diff --git a/legacy/Lang2Lang_v2/Lang2Lang.h b/legacy/Lang2Lang_v2/Lang2Lang.h new file mode 100644 index 0000000..04bd95f --- /dev/null +++ b/legacy/Lang2Lang_v2/Lang2Lang.h @@ -0,0 +1,169 @@ +#ifndef __LANG2LANG_H__ +#define __LANG2LANG_H__ + +#ifndef _T +#define _T(quote) TEXT(quote) +#endif // _T + +#define HOTKEY_ID 1000 +#define TRAYICON_ID 1001 +#define TRAYICON_MSG (WM_USER+5) + +// Lang2Lang +#define LANG2LANGFROM_FROM 4 +typedef struct _Lang2LangFrom +{ + TCHAR szFrom[LANG2LANGFROM_FROM]; +}Lang2LangFrom; +#define LANG2LANGFROMTO_FROM 6 +#define LANG2LANGFROMTO_TO 3 +typedef struct _Lang2LangFromTo +{ + TCHAR szTo[LANG2LANGFROMTO_TO]; + Lang2LangFrom From[LANG2LANGFROMTO_FROM]; +}Lang2LangFromTo; +#define LANG2LANG_NAME 10 +#define LANG2LANG_FROMTO 70 +typedef struct _Lang2Lang +{ + TCHAR szName[LANG2LANG_NAME]; + Lang2LangFromTo FromTo[LANG2LANG_FROMTO]; +}Lang2Lang; +enum Translation { translationNo, translationHotKey, translationTyping }; +typedef struct _HotKey // Window Form +{ + WORD vk; + WORD fsModifiers; +}HotKey; +typedef struct _WindowPos +{ + BOOL bMax; + BOOL bMin; + RECT rcNormalPosition; +}WindowPos; +enum Minimize { minimizeMinimize, minimizeToTray }; +enum Close { closeExit, closeToTray }; +#define LANG2LANGOPTIONS_LANG2LANG 3 +typedef struct _Lang2LangOptions +{ + enum Translation translation; + HotKey translationhotkey; + enum Minimize minimize; + enum Close close; + BOOL bShowTrayIcon; + WindowPos windowpos; + Lang2Lang aLang2Lang[LANG2LANGOPTIONS_LANG2LANG]; +}Lang2LangOptions; + +int CmpStr(LPCTSTR s1,LPCTSTR s2) +{ + while(*s1&&*s2) + { + if(*s1-*s2) + return (int)(*s1-*s2); + s1++; + s2++; + } + return 0; +} +int CmpStrLen(LPCTSTR s1,LPCTSTR s2) +{ + while(*s1&&*s2) + { + s1++; + s2++; + } + return *s1?1:*s2?-1:0; +} + +void FillMem(void *p,size_t length,BYTE fill) +{ + size_t i; + BYTE *pb=(BYTE *)p; + for(i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Lang2Lang_v2/Res/Lang2Lang.ico b/legacy/Lang2Lang_v2/Res/Lang2Lang.ico new file mode 100644 index 0000000..2187f06 Binary files /dev/null and b/legacy/Lang2Lang_v2/Res/Lang2Lang.ico differ diff --git a/legacy/Lang2Lang_v2/resource.h b/legacy/Lang2Lang_v2/resource.h new file mode 100644 index 0000000..7242714 --- /dev/null +++ b/legacy/Lang2Lang_v2/resource.h @@ -0,0 +1,72 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Lang2Lang.rc +// +#define IDS_ABOUT 1 +#define IDS_ERROR 2 +#define IDE_RICHED20 3 +#define IDE_RICHED32 4 +#define IDD_KEYSPAGE 4 +#define IDS_OPTIONS 5 +#define IDE_REGKEY 6 +#define IDS_LANG2LANG 7 +#define IDR_LANG2LANG 100 +#define IDD_GENERALPAGE 102 +#define IDD_ABOUT 103 +#define IDD_HELP 104 +#define IDR_MENU1 109 +#define IDR_POPUP 109 +#define IDC_EDITFROM 1001 +#define IDC_EDITTO 1002 +#define IDC_EMAIL 1003 +#define IDC_SITE 1004 +#define IDC_ENGFROM 1005 +#define IDC_RUSFROM 1006 +#define IDC_ENGTO 1007 +#define IDC_RUSTO 1008 +#define IDC_HELPW 1010 +#define IDC_HELPC 1011 +#define IDC_FROM1 1013 +#define IDC_FROM2 1014 +#define IDC_FROM3 1015 +#define IDC_FROM4 1016 +#define IDC_FROM5 1017 +#define IDC_LANG2LANG 1018 +#define IDC_TO 1021 +#define IDC_TRANSLATIONNO 1022 +#define IDC_TRANSLATIONHOTKEY 1023 +#define IDC_HOTKEYTRANSLATE 1024 +#define IDC_SHOWTRAYICON 1025 +#define IDC_MINIMIZEMINIMIZE 1026 +#define IDC_MINIMIZETOTRAY 1027 +#define IDC_CLOSEEXIT 1028 +#define IDC_CLOSETOTRAY 1029 +#define IDM_ABOUT 40003 +#define IDM_EXIT 40004 +#define IDM_HELP 40005 +#define IDM_UNDOFROM 40006 +#define IDM_REDOFROM 40007 +#define IDM_CUTFROM 40008 +#define IDM_COPYFROM 40009 +#define IDM_PASTEFROM 40010 +#define IDM_SELECTALLFROM 40011 +#define IDM_UNDOTO 40012 +#define IDM_REDOTO 40013 +#define IDM_CUTTO 40014 +#define IDM_COPYTO 40015 +#define IDM_PASTETO 40016 +#define IDM_SELECTALLTO 40017 +#define IDM_OPTIONS 40019 +#define IDM_SHOW 40023 +#define IDM_HIDE 40024 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 110 +#define _APS_NEXT_COMMAND_VALUE 40025 +#define _APS_NEXT_CONTROL_VALUE 1030 +#define _APS_NEXT_SYMED_VALUE 105 +#endif +#endif diff --git a/legacy/RusHeb/RusHeb.cpp b/legacy/RusHeb/RusHeb.cpp new file mode 100644 index 0000000..5fbbffd --- /dev/null +++ b/legacy/RusHeb/RusHeb.cpp @@ -0,0 +1,204 @@ +// RusHeb.cpp : main source file for RusHeb.exe +// + +#include "stdafx.h" + +#include "resource.h" + +CAppModule _Module; + +#define MAX_SYMBOL 1000 + +class CRusHebDlg : public CDialogImpl, + public CWinDataExchange +{ +public: + enum { IDD = IDD_RUSHEB }; + + CRichEditCtrl m_reRusHeb[2]; + enum { Rus , Heb }; + + BOOL bNew; + + BEGIN_DDX_MAP(CRusHebDlg) + DDX_CHECK(IDC_NEW, bNew) + END_DDX_MAP() + + BEGIN_MSG_MAP(CRusHebDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDOK, OnCloseCmd) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChange) + COMMAND_HANDLER(IDC_HEB, EN_CHANGE, OnEnChange) + + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilter) + NOTIFY_HANDLER(IDC_HEB, EN_MSGFILTER, OnEnMsgFilter) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + // center the dialog on the screen + CenterWindow(); + for(int i=0;i<2;i++) + { + m_reRusHeb[i]=GetDlgItem(IDC_RUS+i); + m_reRusHeb[i].LimitText(MAX_SYMBOL-1); + m_reRusHeb[i].SetEventMask(ENM_CHANGE|ENM_MOUSEEVENTS); + } + bNew=TRUE; + DoDataExchange(DDX_LOAD); + + return TRUE; + } + + LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + EndDialog(0); + return 0; + } + + LRESULT OnEnChange(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + static bool bT; + if(!bT) + { + NN::AutoSGRef sg(bT,true,false); + + NN::AutoArray textIn(MAX_SYMBOL); + NN::AutoArray textOut(MAX_SYMBOL); + + bool bRus=wID==IDC_RUS; + + CRichEditCtrl reFrom=m_reRusHeb[bRus?Rus:Heb]; + CRichEditCtrl reTo=m_reRusHeb[bRus?Heb:Rus]; + + DoDataExchange(DDX_SAVE); + + reFrom.GetTextEx((LPTSTR)textIn.GetData(),MAX_SYMBOL-1,GT_DEFAULT,1200); + Translate(textIn.GetData(),textOut.GetData(),bRus,bNew?true:false); + reTo.SetTextEx((LPCTSTR)textOut.GetData(),ST_DEFAULT,1200); + } + + return 0; + } + + LRESULT OnEnMsgFilter(int /*code*/, NMHDR *pnmhdr, BOOL& /*bHandled*/) + { + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + ::SetFocus(pMsgFilter->nmhdr.hwndFrom); + POINT pt; + ::GetCursorPos(&pt); + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_POPUP)); + hMenu=::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; + } + + LRESULT OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + CRichEditCtrl re=GetFocus(); + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + return 0; + } + + static void Translate(const wchar_t* pIn,wchar_t* pOut,bool bRustoHeb,bool bNew) + { + for(int in=0,out=0;in0x44F) + pOut[out]=pIn[in]; + else + pOut[out]=pIn[in]+(0x5D0-0x430); // 'alef' - 'A' + } + else + { + if(pIn[in]<0x420||pIn[in]>0x44F) + pOut[out]=pIn[in]; + else + pOut[out]=pIn[in]+(0x5D0-0x420); // 'alef' - 'P' + } + } + else + { + if(bNew) + { + if(pIn[in]<0x5D0||pIn[in]>0x5EA) + pOut[out]=pIn[in]; + else + pOut[out]=pIn[in]-(0x5D0-0x430); // 'alef' - 'A' + } + else + { + if(pIn[in]<0x5D0||pIn[in]>0x5EA) + pOut[out]=pIn[in]; + else + pOut[out]=pIn[in]-(0x5D0-0x420); // 'alef' - 'P' + } + } + out++; + } + pOut[out]=0; + } +}; + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + // RichEdit Library + if(!LoadLibrary(_T("riched20.dll"))) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); +// If you are running on NT 4.0 or higher you can use the following call instead to +// make the EXE free threaded. This means that calls come in on a random RPC thread. +// HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); + ATLASSERT(SUCCEEDED(hRes)); + + // this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used + ::DefWindowProc(NULL, 0, 0, 0L); + + AtlInitCommonControls(0xff); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = 0; + // BLOCK: Run application + { + CRusHebDlg dlgMain; + nRet = dlgMain.DoModal(); + } + + _Module.Term(); + ::CoUninitialize(); + + return nRet; +} diff --git a/legacy/RusHeb/RusHeb.rc b/legacy/RusHeb/RusHeb.rc new file mode 100644 index 0000000..e0246d2 --- /dev/null +++ b/legacy/RusHeb/RusHeb.rc @@ -0,0 +1,124 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_RUSHEB DIALOGEX 0, 0, 176, 180 +STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU +CAPTION "RusHeb" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + CONTROL "",IDC_RUS,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | + WS_HSCROLL | WS_TABSTOP,5,5,162,75 + CONTROL "",IDC_HEB,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | + WS_HSCROLL | WS_TABSTOP,5,90,162,75,WS_EX_RIGHT + CONTROL "New",IDC_NEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 170,159,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_RUSHEB, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 169 + TOPMARGIN, 7 + BOTTOMMARGIN, 173 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_POPUP MENU +BEGIN + POPUP "1" + BEGIN + MENUITEM " &Undo\tCtrl+Z", ID_EDIT_UNDO + MENUITEM " &Redo\tCtrl+Y", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT + MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY + MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE + MENUITEM "C&lear All", ID_EDIT_CLEAR_ALL + MENUITEM "S&elect All\tCtrl+A", ID_EDIT_SELECT_ALL + END +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/RusHeb/RusHeb.sln b/legacy/RusHeb/RusHeb.sln new file mode 100644 index 0000000..6d4cd3a --- /dev/null +++ b/legacy/RusHeb/RusHeb.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RusHeb", "RusHeb.vcproj", "{7A0E2AF9-6881-4AD8-AA3E-9BFEC077D822}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {7A0E2AF9-6881-4AD8-AA3E-9BFEC077D822}.Debug.ActiveCfg = Debug|Win32 + {7A0E2AF9-6881-4AD8-AA3E-9BFEC077D822}.Debug.Build.0 = Debug|Win32 + {7A0E2AF9-6881-4AD8-AA3E-9BFEC077D822}.Release.ActiveCfg = Release|Win32 + {7A0E2AF9-6881-4AD8-AA3E-9BFEC077D822}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/RusHeb/RusHeb.vcproj b/legacy/RusHeb/RusHeb.vcproj new file mode 100644 index 0000000..307cc82 --- /dev/null +++ b/legacy/RusHeb/RusHeb.vcproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/RusHeb/res/RusHeb.ico b/legacy/RusHeb/res/RusHeb.ico new file mode 100644 index 0000000..3a48073 Binary files /dev/null and b/legacy/RusHeb/res/RusHeb.ico differ diff --git a/legacy/RusHeb/resource.h b/legacy/RusHeb/resource.h new file mode 100644 index 0000000..21d3acd --- /dev/null +++ b/legacy/RusHeb/resource.h @@ -0,0 +1,20 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by RusHeb.rc +// +#define IDD_RUSHEB 129 +#define IDR_POPUP 201 +#define IDC_RUS 1002 +#define IDC_HEB 1003 +#define IDC_NEW 1004 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 202 +#define _APS_NEXT_COMMAND_VALUE 32772 +#define _APS_NEXT_CONTROL_VALUE 1005 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/legacy/RusHeb/stdafx.cpp b/legacy/RusHeb/stdafx.cpp new file mode 100644 index 0000000..fb95b89 --- /dev/null +++ b/legacy/RusHeb/stdafx.cpp @@ -0,0 +1,9 @@ +// stdafx.cpp : source file that includes just the standard includes +// RusHeb.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +#if (_ATL_VER < 0x0700) +#include +#endif //(_ATL_VER < 0x0700) diff --git a/legacy/RusHeb/stdafx.h b/legacy/RusHeb/stdafx.h new file mode 100644 index 0000000..d2d254c --- /dev/null +++ b/legacy/RusHeb/stdafx.h @@ -0,0 +1,23 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +// Change these values to use different versions +#define WINVER 0x0400 +//#define _WIN32_WINNT 0x0400 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 + +#include +#include + +extern CAppModule _Module; + +#include +#include +#include + +#include \ No newline at end of file diff --git a/legacy/Translit/AboutDlg.cpp b/legacy/Translit/AboutDlg.cpp new file mode 100644 index 0000000..df62103 --- /dev/null +++ b/legacy/Translit/AboutDlg.cpp @@ -0,0 +1,29 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "AboutDlg.h" + +LRESULT CAboutDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + CenterWindow(GetParent()); + return 0; +} + +LRESULT CAboutDlg::OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ShellExecute(m_hWnd,_T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; +} + +LRESULT CAboutDlg::OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ShellExecute(m_hWnd,_T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; +} + +LRESULT CAboutDlg::OnCloseCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EndDialog(0); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit/AboutDlg.h b/legacy/Translit/AboutDlg.h new file mode 100644 index 0000000..62c8756 --- /dev/null +++ b/legacy/Translit/AboutDlg.h @@ -0,0 +1,24 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +class CAboutDlg : public CDialogImpl, + public DialogLang +{ +public: + enum { IDD = IDD_ABOUT }; + + BEGIN_MSG_MAP(CAboutDlg) + MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog) + COMMAND_ID_HANDLER(IDC_EMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_SITE, OnSite) + COMMAND_ID_HANDLER(IDOK, OnCloseCmd) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnEmail(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Translit/ChangeTranslationDlg.cpp b/legacy/Translit/ChangeTranslationDlg.cpp new file mode 100644 index 0000000..b38da68 --- /dev/null +++ b/legacy/Translit/ChangeTranslationDlg.cpp @@ -0,0 +1,198 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "ChangeTranslationDlg.h" + +void CChangeTranslationDlg::SetCmbEngRus(bool b1,LPCTSTR szText/*=NULL*/) +{ + Translit tempTranslit; + int iCmb; + + if(szText) + { + EngRusTuple tuple; + ((EngRusArray*)tuple.Get(b1))->SetData(szText); + unsigned nFind=0; + for(unsigned nItem=0;nItemGetData()); +} + +void CChangeTranslationDlg::InitCmbEngRus() +{ + SetCmbEngRus(false); + SetCmbEngRus(true); +} + +void CChangeTranslationDlg::UpdateEngRusCheck(const EngRusTuple* pTuple/*=NULL*/) +{ + BOOL bEnable=FALSE; + BOOL bEngtoRus=FALSE; + BOOL bRustoEng=FALSE; + if(pTuple) + { + bEnable=pTuple->t0[0]&&pTuple->t1[0]; + if(bEnable) + { + Translate::EngRusTranslate translate=m_Translit[m_Translit.Find(*pTuple)].t2; + bEngtoRus=translate&Translate::EngtoRus; + bRustoEng=translate&Translate::RustoEng; + } + } + ::EnableWindow(GetDlgItem(IDC_ENGTORUS),bEnable); + ::EnableWindow(GetDlgItem(IDC_RUSTOENG),bEnable); + CheckDlgButton(IDC_ENGTORUS,bEngtoRus); + CheckDlgButton(IDC_RUSTOENG,bRustoEng); +} + +LRESULT CChangeTranslationDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + DoDataExchange(DDX_LOAD); + for(int i=0;i<4;i++) + SendDlgItemMessage(IDC_FROMENG+i,EM_SETLIMITTEXT,(WPARAM)(Options::nNotTranslate-1)); + for(int i=0;i<2;i++) + { + m_cmbEngRus[i]=GetDlgItem(IDC_ENG+i); + m_cmbEngRus[i].LimitText(EngRusArray::nCountInit-1); + } + InitCmbEngRus(); + return 0; +} + +LRESULT CChangeTranslationDlg::OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==IDOK) + DoDataExchange(DDX_SAVE); + EndDialog(wID); + return 0; +} + +LRESULT CChangeTranslationDlg::OnAddRemove(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EngRusTuple tuple; + + m_cmbEngRus[Eng].GetWindowText(tuple.Get<0>().GetData(),EngRusArray::nCountInit); + m_cmbEngRus[Rus].GetWindowText(tuple.Get<1>().GetData(),EngRusArray::nCountInit); + + if(!tuple.Get<0>()[0]&&!tuple.Get<1>()[0]) + return 0; + + if(wID==IDC_ADD) + { + tuple.Get<2>()=Translate::None; + if(IsDlgButtonChecked(IDC_ENGTORUS)) + (int&)tuple.Get<2>()|=Translate::EngtoRus; + if(IsDlgButtonChecked(IDC_RUSTOENG)) + (int&)tuple.Get<2>()|=Translate::RustoEng; + unsigned nFind=m_Translit.Find(tuple); + if(nFind==(unsigned)-1) + m_Translit.Add(tuple); + else + m_Translit[nFind].Get<2>()=tuple.Get<2>(); + } + else + m_Translit.Remove(tuple); + + InitCmbEngRus(); + UpdateEngRusCheck(NULL); + + return 0; +} + +LRESULT CChangeTranslationDlg::OnClearReset(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==IDC_RESET) + { + // Are you sure ? + TCHAR szText[30]; + TCHAR szCaption[10]; + + AtlLoadString(IDS_AREYOUSURE,szText,sizeof(szText)/sizeof(TCHAR)); + AtlLoadString(IDS_RESET,szCaption,sizeof(szCaption)/sizeof(TCHAR)); + + if(MessageBox(szText,szCaption,MB_YESNO)==IDYES) + m_Translit.Default(); + } + m_cmbEngRus[Eng].Clear(); + m_cmbEngRus[Rus].Clear(); + UpdateEngRusCheck(NULL); + return 0; +} + +LRESULT CChangeTranslationDlg::OnEngRus(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + return 0; +} + +LRESULT CChangeTranslationDlg::OnChangeEngRus(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + int i1= wID!=IDC_ENG; + EngRusTuple tuple; + if(wNotifyCode==CBN_SELCHANGE) + { + m_cmbEngRus[i1].GetLBText(m_cmbEngRus[i1].GetCurSel(),((EngRusArray*)tuple.Get(i1))->GetData()); + m_cmbEngRus[!i1].GetWindowText(((EngRusArray*)tuple.Get(!i1))->GetData(),EngRusArray::nCountInit); + } + else + { + m_cmbEngRus[Eng].GetWindowText(tuple.Get<0>().GetData(),EngRusArray::nCountInit); + m_cmbEngRus[Rus].GetWindowText(tuple.Get<1>().GetData(),EngRusArray::nCountInit); + } + + if(!tuple.Get<0>()[0]&&!tuple.Get<1>()[0]) + { + m_nUse=useNone; + UpdateEngRusCheck(NULL); + InitCmbEngRus(); + return 0; + } + + Use useThis=!i1?useEng:useRus; + if(m_nUse==useNone) + m_nUse=useThis; + + if(m_nUse==useEng&&!tuple.t0[0]|| + m_nUse==useRus&&!tuple.t1[0]) + { + m_nUse=m_nUse==useEng?useRus:useEng; + bool b1=m_nUse==useRus; + SetCmbEngRus(b1, + ((EngRusArray*)tuple.Get(b1)) + ->GetData()); + } + + if(m_nUse==useThis) + { + SetCmbEngRus(i1, + ((EngRusArray*)tuple.Get(i1)) + ->GetData()); + } + + UpdateEngRusCheck(&tuple); + + return 0; +} \ No newline at end of file diff --git a/legacy/Translit/ChangeTranslationDlg.h b/legacy/Translit/ChangeTranslationDlg.h new file mode 100644 index 0000000..6f56d49 --- /dev/null +++ b/legacy/Translit/ChangeTranslationDlg.h @@ -0,0 +1,58 @@ +#ifndef __CHANGETRANSLATIONDLG_H__ +#define __CHANGETRANSLATIONDLG_H__ + +class CChangeTranslationDlg : public CDialogImpl, + public CWinDataExchange, + public DialogLang +{ +public: + enum { IDD=IDD_CHANGETRANSLATION } ; + + CComboBox m_cmbEngRus[2]; + Translit m_Translit; + + enum EngRus { Eng,Rus }; + enum Use { useNone, useEng, useRus }; + AutoValue m_nUse; + + void SetCmbEngRus(bool b1,LPCTSTR szText=NULL); + void InitCmbEngRus(); + void UpdateEngRusCheck(const EngRusTuple* pTuple=NULL); + + BEGIN_DDX_MAP(CChangeTranslationDlg) + if(bSaveAndValidate) + _Translit.SetData(m_Translit); + else + m_Translit.SetData(_Translit); + DDX_TEXT(IDC_FROMENG,_Options.m_szNotTranslate[Options::FromEng]) + DDX_TEXT(IDC_TOENG,_Options.m_szNotTranslate[Options::ToEng]) + DDX_TEXT(IDC_FROMRUS,_Options.m_szNotTranslate[Options::FromRus]) + DDX_TEXT(IDC_TORUS,_Options.m_szNotTranslate[Options::ToRus]) + DDX_CHECK(IDC_COPYNOTTRANSLATE,_Options.m_bCopyNotTranslate) + END_DDX_MAP() + + BEGIN_MSG_MAP(CChangeTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDOK, OnCloseCmd) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemove) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemove) + COMMAND_ID_HANDLER(IDC_CLEAR, OnClearReset) + COMMAND_ID_HANDLER(IDC_RESET, OnClearReset) + COMMAND_ID_HANDLER(IDC_ENGTORUS, OnEngRus) + COMMAND_ID_HANDLER(IDC_RUSTOENG, OnEngRus) + COMMAND_HANDLER(IDC_ENG, CBN_EDITCHANGE, OnChangeEngRus) + COMMAND_HANDLER(IDC_RUS, CBN_EDITCHANGE, OnChangeEngRus) + COMMAND_HANDLER(IDC_ENG, CBN_SELCHANGE, OnChangeEngRus) + COMMAND_HANDLER(IDC_RUS, CBN_SELCHANGE, OnChangeEngRus) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAddRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnClearReset(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnChangeEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __CHANGETRANSLATIONDLG_H__ \ No newline at end of file diff --git a/legacy/Translit/Global.cpp b/legacy/Translit/Global.cpp new file mode 100644 index 0000000..e1c223f --- /dev/null +++ b/legacy/Translit/Global.cpp @@ -0,0 +1,6 @@ +#include "StdAfx.h" +#include "Global.h" + +Translit _Translit; +Options _Options; +CAppModule _Module; \ No newline at end of file diff --git a/legacy/Translit/Global.h b/legacy/Translit/Global.h new file mode 100644 index 0000000..a85aa50 --- /dev/null +++ b/legacy/Translit/Global.h @@ -0,0 +1,8 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +#include "Translit.h" +extern Translit _Translit; +#define _MAX_CHAR 6000 + +#endif // __GLOBAL_H__ \ No newline at end of file diff --git a/legacy/Translit/Options.h b/legacy/Translit/Options.h new file mode 100644 index 0000000..c1703d1 --- /dev/null +++ b/legacy/Translit/Options.h @@ -0,0 +1,83 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#include +#include +using namespace NN; + +struct WindowState +{ + int nCmdShow; + static const WindowState& Default() + { + static const WindowState state={SW_SHOWNORMAL}; + return state; + } + bool operator==(const WindowState& state) const + { return nCmdShow==state.nCmdShow; } +}; + +struct Options +{ +public: + AutoValue m_bTranslation; + WindowState m_wndState; + AutoValue m_langID; + // Options Dialog + AutoValue m_bTrayIconShown; + AutoValue m_bTrayIconHidden; + AutoValue m_bLoadOnStartUp; + enum Close { closeExit, closeToTray }; + AutoValue m_nClose; + enum Minimize { minimizeNormal, minimizeToTray }; + AutoValue m_nMinimize; + LOGFONT m_lfEngRus[2]; + enum EngRus { Eng , Rus }; + HotKey m_hkTranslationEngtoRus; + HotKey m_hkTranslationRustoEng; + HotKey m_hkTranslationAuto; + HotKey m_hkShowTranslit; + HotKey m_hkHideTranslit; + enum FromTo { FromEng=0, FromRus=1, ToEng=2, ToRus=3 }; + enum NotTranslate { nNotTranslate = 4 }; + TCHAR m_szNotTranslate[4][nNotTranslate]; + AutoValue m_bCopyNotTranslate; + AutoValue m_nDefaultTranslation; + AutoValue m_bWrapText; + + void Default() + { + m_bTranslation.Default(); + m_bTrayIconShown.Default(); + m_bTrayIconHidden.Default(); + m_wndState=WindowState::Default(); + m_langID.Default(); + // Options + m_bLoadOnStartUp.Default(); + m_nClose.Default(); + m_nMinimize.Default(); + m_hkTranslationEngtoRus.SetHotKey(_T('E'),MOD_CONTROL|MOD_ALT); + m_hkTranslationRustoEng.SetHotKey(_T('C'),MOD_CONTROL|MOD_ALT); + m_hkTranslationAuto.SetHotKey(_T('T'),MOD_CONTROL|MOD_ALT); + m_hkShowTranslit.SetHotKey(_T('S'),MOD_CONTROL|MOD_ALT); + m_hkHideTranslit.SetHotKey(_T('H'),MOD_CONTROL|MOD_ALT); + // Fonts + LOGFONT lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-14; + lfCommon.lfWeight=400; + lstrcpy(lfCommon.lfFaceName,_T("Arial")); + m_lfEngRus[Eng]=lfCommon; + m_lfEngRus[Rus]=lfCommon; + lstrcpy(m_szNotTranslate[FromEng],_T("[")); + lstrcpy(m_szNotTranslate[FromRus],_T("[")); + lstrcpy(m_szNotTranslate[ToEng],_T("]")); + lstrcpy(m_szNotTranslate[ToRus],_T("]")); + m_bCopyNotTranslate.Default(); + m_nDefaultTranslation.Default(); + m_bWrapText.Default(); + } +}; + +#endif // __OPTIONS_H__ \ No newline at end of file diff --git a/legacy/Translit/OptionsSheet.h b/legacy/Translit/OptionsSheet.h new file mode 100644 index 0000000..ee3dd5c --- /dev/null +++ b/legacy/Translit/OptionsSheet.h @@ -0,0 +1,166 @@ +#ifndef __OPTIONSSHEET_H__ +#define __OPTIONSSHEET_H__ + +class CGeneralPage : public PropertyPageImplLang +{ +public: + typedef CGeneralPage thisClass; + typedef PropertyPageImplLang baseClass; + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_RADIO(IDC_CLOSEEXIT,(int&)_Options.m_nClose) + DDX_RADIO(IDC_MINIMIZENORMAL,(int&)_Options.m_nMinimize) + DDX_CHECK(IDC_LOADONSTARTUP,_Options.m_bLoadOnStartUp) + END_DDX_MAP() + + BEGIN_MSG_MAP(thisClass) + CHAIN_MSG_MAP_ALT(baseClass,1) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() +}; + +class CLayoutPage : public PropertyPageImplLang +{ +public: + typedef CLayoutPage thisClass; + typedef PropertyPageImplLang baseClass; + + void FontDialog(LPLOGFONT pLF) + { + CFontDialog fontdlg(pLF); + if(fontdlg.DoModal()==IDOK) + *pLF=fontdlg.m_lf; + } + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_CHECK(IDC_TRAYICONSHOWN,_Options.m_bTrayIconShown) + DDX_CHECK(IDC_TRAYICONHIDDEN,_Options.m_bTrayIconHidden) + END_DDX_MAP() + + BEGIN_MSG_MAP(thisClass) + CHAIN_MSG_MAP_ALT(baseClass,1) + COMMAND_ID_HANDLER(IDC_ENGFONT,OnEngRusFont) + COMMAND_ID_HANDLER(IDC_RUSFONT,OnEngRusFont) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() + + LRESULT OnEngRusFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + FontDialog(&_Options.m_lfEngRus[wID-IDC_ENGFONT]); + return 0; + } +}; + +#define DDX_HOTKEY(nID,vk,fsModifiers) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,vk,fsModifiers,bSaveAndValidate); + +#define DDX_HOTKEY_C(nID,rHotKey,bConvert) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate,bConvert); + +#define DDX_HOTKEY_(nID,rHotKey) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate); + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,WORD& vk,WORD& fsModifiers,BOOL bSave) +{ + if(bSave) + { + WORD wHotKey=(WORD)::SendDlgItemMessage(hWnd,nID,HKM_GETHOTKEY,0,0); + vk=LOBYTE(wHotKey); + fsModifiers=HIBYTE(wHotKey); + } + else + ::SendDlgItemMessage(hWnd,nID,HKM_SETHOTKEY,(WPARAM)MAKEWORD(vk,fsModifiers),0); + return TRUE; +} + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,HotKey& rHotKey,BOOL bSave,BOOL bConvert=TRUE) +{ + HotKey hk=rHotKey; + if(bConvert) + hk.ConvertToHotKey(); + if(bSave) + { + BOOL bRet=DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); + if(bRet) + { + hk.ConvertToWnd(); + rHotKey=hk; + } + return bRet; + } + else + return DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); +} + +class CHotKeysPage : public PropertyPageImplLang +{ +public: + typedef CHotKeysPage thisClass; + typedef PropertyPageImplLang baseClass; + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_HOTKEY_(IDC_HOTKEYTRANSLATIONENGTORUS,_Options.m_hkTranslationEngtoRus) + DDX_HOTKEY_(IDC_HOTKEYTRANSLATIONRUSTOENG,_Options.m_hkTranslationRustoEng) + DDX_HOTKEY_(IDC_HOTKEYSHOWTRANSLIT,_Options.m_hkShowTranslit) + DDX_HOTKEY_(IDC_HOTKEYHIDETRANSLIT,_Options.m_hkHideTranslit) + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP_ALT(baseClass,1) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() +}; + +class CAutoTranslationPage : public PropertyPageImplLang +{ +public: + typedef CAutoTranslationPage thisClass; + typedef PropertyPageImplLang baseClass; + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_RADIO(IDC_ENGTORUS,(int&)_Options.m_nDefaultTranslation) + DDX_HOTKEY_(IDC_HOTKEYTRANSLATIONAUTO,_Options.m_hkTranslationAuto) + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP_ALT(baseClass,1) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() +}; + +class COptionsSheet : public CPropertySheetImpl, + public PropertyTitleLang +{ +public: + typedef CPropertySheetImpl baseClass; + enum { IDD = IDS_OPTIONS }; + COptionsSheet(HWND hWndParent = NULL, UINT uStartPage = 0) : + baseClass((LPCTSTR)0,uStartPage,hWndParent) + { + m_psh.dwFlags |= PSH_NOAPPLYNOW; + m_psh.dwFlags &= ~(PSH_HASHELP); + SetPropertyTitle(IDS_OPTIONS); + AddPage(m_pageGeneral); + AddPage(m_pageLayout); + AddPage(m_pageHotKeys); + AddPage(m_pageAutoTranslation); + } + + CGeneralPage m_pageGeneral; + CLayoutPage m_pageLayout; + CHotKeysPage m_pageHotKeys; + CAutoTranslationPage m_pageAutoTranslation; +}; + +#endif // __OPTIONSSHEET_H_ \ No newline at end of file diff --git a/legacy/Translit/Translate.h b/legacy/Translit/Translate.h new file mode 100644 index 0000000..61b7152 --- /dev/null +++ b/legacy/Translit/Translate.h @@ -0,0 +1,24 @@ +#ifndef __TRANSLATE_H__ +#define __TRANSLATE_H__ + +struct Translate +{ +public: + enum EngRusTranslate + { + None=0, + EngtoRus=1, + RustoEng=2, + EngRus=EngtoRus|RustoEng, + RusEng=EngRus, + }; + + enum Direction + { + dirEngtoRus=0, + dirRustoEng=1, + dirAuto=2 + }; +}; + +#endif // __TRANSLATE_H__ \ No newline at end of file diff --git a/legacy/Translit/TranslateFilesDlg.cpp b/legacy/Translit/TranslateFilesDlg.cpp new file mode 100644 index 0000000..cd2191b --- /dev/null +++ b/legacy/Translit/TranslateFilesDlg.cpp @@ -0,0 +1,207 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "TranslateFilesDlg.h" +#include + +void CTranslateFilesDlg::TranslateFile(LPCTSTR szPath,Translate::Direction dir) +{ + TCHAR szFileExt[_MAX_PATH]; + TCHAR szFileName[_MAX_PATH]; + + const int nFileName=lstrlen(szPath); + + int i=nFileName; + while(i&&szPath[i]!=_T('.')) i--; + + if(i) + { + ArrayTraits::CopyArray(szFileExt,szPath+i,nFileName-i); + szFileExt[nFileName-i]=0; + ArrayTraits::CopyArray(szFileName,szPath,i); + szFileName[i]=0; + } + else + { + szFileExt[0]=0; + lstrcpy(szFileName,szPath); + } + + _Translit.Translate(szFileName,dir,_MAX_PATH); + + lstrcat(szFileName,szFileExt); + + ::MoveFile(szPath,szFileName); +} + +void CTranslateFilesDlg::TranslateEntryMP3Tags(LPCTSTR szFile,Translate::Direction dir,bool bEntry) +{ + CAtlFile file; + if(file.Create(szFile,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING)!=S_OK) + return; + + long lFileSizeOrig=::GetFileSize(file,NULL); + long lFileSize=lFileSizeOrig*EngRusArray::nCountInit; + CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize,0,PAGE_READWRITE,FILE_MAP_WRITE)!=S_OK) + return; + + EngRusType* pFileView=(EngRusType*)filemap.GetData(); + + if(bEntry) + { + _Translit.Translate(pFileView,dir,lFileSize); + lFileSize=lstrlen(pFileView); + filemap.Unmap(); + file.SetSize(lFileSize); + } + else + { + EngRusType* pCur; + + // Mp3 Tag V1 + pCur=pFileView+lFileSizeOrig-(sizeof(MP3Tag)); + MP3Tag mp3tag; + memcpy(&mp3tag,pCur,sizeof(MP3Tag)); + + if(!ArrayTraits::CompareArrayLength(mp3tag.szTag,"TAG",3)) + { + AutoArray aTranslate(MP3Tag::nCount*EngRusArray::nCountInit); + + _Translit.Translate(mp3tag.szAlbom,aTranslate.GetData(),dir,MP3Tag::nCount); + memcpy(mp3tag.szAlbom,aTranslate.GetData(),MP3Tag::nCount); + + _Translit.Translate(mp3tag.szArtist,aTranslate.GetData(),dir,MP3Tag::nCount); + memcpy(mp3tag.szArtist,aTranslate.GetData(),MP3Tag::nCount); + + _Translit.Translate(mp3tag.szTitle,aTranslate.GetData(),dir,MP3Tag::nCount); + memcpy(mp3tag.szTitle,aTranslate.GetData(),MP3Tag::nCount); + + _Translit.Translate(mp3tag.szComment,aTranslate.GetData(),dir,MP3Tag::nCount); + memcpy(mp3tag.szComment,aTranslate.GetData(),MP3Tag::nCount); + + memcpy(pCur,&mp3tag,sizeof(MP3Tag)); + } + + filemap.Unmap(); + file.SetSize(lFileSizeOrig); + } +} + +void CTranslateFilesDlg::Translate(LPCTSTR szPath) +{ + CurrentDirectory curdir(szPath); + + HANDLE hFindFile; + WIN32_FIND_DATA ffd; + + hFindFile = ::FindFirstFile(_T("*.*"),&ffd); + if(hFindFile==INVALID_HANDLE_VALUE) + return; + + do{ + if(!ArrayTraits::CompareArrayLength(ffd.cFileName,_T("."),1)|| + !ArrayTraits::CompareArrayLength(ffd.cFileName,_T(".."),2)) + continue; + + if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) + { + if(m_bSubDirectories) + { + TCHAR szNextPath[_MAX_PATH]; + lstrcpy(szNextPath,szPath); + lstrcat(szNextPath,_T("\\")); + lstrcat(szNextPath,ffd.cFileName); + Translate(szNextPath); + } + if(m_bDirectories) + TranslateFile(ffd.cFileName,m_nDirection); + } + else + { + bool bNotMP3=ArrayTraits::CompareArray(ffd.cFileName+lstrlen(ffd.cFileName)-4,_T(".mp3"),4); + if(bNotMP3&&m_bEntry|| + !bNotMP3&&m_bMP3Tags) + TranslateEntryMP3Tags(ffd.cFileName,m_nDirection,bNotMP3); + if(m_bName) + TranslateFile(ffd.cFileName,m_nDirection); + } + }while(::FindNextFile(hFindFile,&ffd)); + + ::FindClose(hFindFile); +} + +void CTranslateFilesDlg::TranslateThisDirectory() +{ + CurrentDirectory curdir(m_szPath); + TCHAR *pszPath=m_szPath+lstrlen(m_szPath); + pszPath--; + while(*pszPath!=_T('\\')&&*pszPath!=_T('/')) + pszPath--; + pszPath++; + TCHAR c=*pszPath; + *pszPath=0; + ::SetCurrentDirectory(m_szPath); + *pszPath=c; + + TranslateFile(pszPath,m_nDirection); +} + +LRESULT CTranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + SendDlgItemMessage(IDC_PATH,EM_LIMITTEXT,(WPARAM)(_MAX_PATH-1)); + m_szPath[0]=0; + DoDataExchange(DDX_LOAD); + return 0; +} + +LRESULT CTranslateFilesDlg::OnCloseCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EndDialog(0); + return 0; +} + +LRESULT CTranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + + if(!m_szPath[0]) + return 0; + + if(m_bFiles&& + (!m_bName&&!m_bEntry&&!m_bMP3Tags)) + m_bFiles=FALSE; + + if(!m_bFiles&&!m_bDirectories&&!m_bSubDirectories&& + !m_bThisDirectory) + return 0; + + TCHAR *pszPath=m_szPath+lstrlen(m_szPath)-1; + if(*pszPath==_T('\\')) + *pszPath=0; + + Translate(m_szPath); + + if(m_bThisDirectory) + TranslateThisDirectory(); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CFolderDialog fd(m_hWnd,0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal()==IDOK) + SetDlgItemText(IDC_PATH,fd.m_szFolderPath); + return 0; +} + +LRESULT CTranslateFilesDlg::OnFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::EnableWindow(GetDlgItem(IDC_NAME),IsDlgButtonChecked(IDC_FILES)); + ::EnableWindow(GetDlgItem(IDC_ENTRY),IsDlgButtonChecked(IDC_FILES)); + ::EnableWindow(GetDlgItem(IDC_MP3TAGS),IsDlgButtonChecked(IDC_FILES)); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit/TranslateFilesDlg.h b/legacy/Translit/TranslateFilesDlg.h new file mode 100644 index 0000000..3bd248c --- /dev/null +++ b/legacy/Translit/TranslateFilesDlg.h @@ -0,0 +1,55 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +class CTranslateFilesDlg : public CDialogImpl, + public CWinDataExchange, + public DialogLang +{ +public: + enum { IDD=IDD_TRANSLATEFILES } ; + + AutoValue m_bFiles; + AutoValue m_bDirectories; + AutoValue m_bSubDirectories; + AutoValue m_bThisDirectory; + AutoValue m_bName; + AutoValue m_bEntry; + AutoValue m_bMP3Tags; + AutoValue m_nDirection; + TCHAR m_szPath[_MAX_PATH]; + + static void TranslateFile(LPCTSTR szPath,Translate::Direction dir); + static void TranslateEntryMP3Tags(LPCTSTR szFile,Translate::Direction dir,bool bEntry); + void Translate(LPCTSTR szPath); + void TranslateThisDirectory(); + + BEGIN_DDX_MAP(CChangeTranslationDlg) + DDX_TEXT(IDC_PATH,m_szPath) + DDX_CHECK(IDC_FILES,m_bFiles) + DDX_CHECK(IDC_DIRECTORIES,m_bDirectories) + DDX_CHECK(IDC_SUBDIRECTORIES,m_bSubDirectories) + DDX_CHECK(IDC_THISDIRECTORY,m_bThisDirectory) + DDX_CHECK(IDC_NAME,m_bName) + DDX_CHECK(IDC_ENTRY,m_bEntry) + DDX_CHECK(IDC_MP3TAGS,m_bMP3Tags) + DDX_RADIO(IDC_ENGTORUS,(int&)m_nDirection) + END_DDX_MAP() + + BEGIN_MSG_MAP(CChangeTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + COMMAND_ID_HANDLER(IDC_CLOSE, OnCloseCmd) + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_TRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_FILES, OnFiles) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Translit/TranslationDlg.cpp b/legacy/Translit/TranslationDlg.cpp new file mode 100644 index 0000000..b58c482 --- /dev/null +++ b/legacy/Translit/TranslationDlg.cpp @@ -0,0 +1,83 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "TranslationDlg.h" + +void CTranslationDlg::UpdateTranslation() +{ + AutoArray szTranslation(_MAX_CHAR); + MakeTranslation(szTranslation.GetData()); + + AutoArray szwTranslation(_MAX_CHAR); + ::MultiByteToWideChar(1251,0,szTranslation.GetData(),_MAX_CHAR,szwTranslation.GetData(),_MAX_CHAR); + m_richeditTranslation.SetTextEx((LPTSTR)szwTranslation.GetData(),ST_DEFAULT,1200); +} + +void CTranslationDlg::MakeTranslation(LPTSTR szTranslation) +{ + Translit tempTranslit; + TCHAR szText[40]; + + szTranslation[0]=0; + + for(int i=0;i<2;i++) + { + tempTranslit.SetData(_Translit); + tempTranslit.Sort(true,(bool)i); + + AtlLoadString(IDS_ENGTORUS+i,szText,40); + lstrcat(szTranslation,szText); + lstrcat(szTranslation,_T("\n")); + for(unsigned nItem=0;nItem<_Translit.GetLast()-1;nItem++) + { + lstrcat(szTranslation, + ((EngRusArray*)tempTranslit[nItem].Get((bool)i))->GetData()); + lstrcat(szTranslation,_T(" - ")); + lstrcat(szTranslation, + ((EngRusArray*)tempTranslit[nItem].Get((bool)!i))->GetData()); + lstrcat(szTranslation,_T("\n")); + } + if(!i) + lstrcat(szTranslation,_T("\n")); + } +} + +LRESULT CTranslationDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + m_richeditTranslation=GetDlgItem(IDC_TRANSLATION); + m_richeditTranslation.SendMessage(EM_SETLIMITTEXT,_MAX_CHAR-1,0); + m_richeditTranslation.SetEventMask(ENM_KEYEVENTS); + m_richeditTranslation.SetFocus(); + return 0; +} + +LRESULT CTranslationDlg::OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + ::SendMessage(GetParent(),WM_COMMAND,MAKEWPARAM(ID_TOOLS_TRANSLATION,BN_CLICKED),NULL); + return 0; +} + +LRESULT CTranslationDlg::OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) +{ + ::MoveWindow(GetDlgItem(IDC_TRANSLATION),0,0,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),TRUE); + return 0; +} + +LRESULT CTranslationDlg::OnOK(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + return 0; +} + +LRESULT CTranslationDlg::OnCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::SendMessage(GetParent(),WM_COMMAND,MAKEWPARAM(ID_TOOLS_TRANSLATION,BN_CLICKED),NULL); + return 0; +} + +LRESULT CTranslationDlg::OnEnMsgFilterTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_KEYDOWN&&pMsgFilter->wParam==VK_ESCAPE) + ::SendMessage(GetParent(),WM_COMMAND,MAKEWPARAM(ID_TOOLS_TRANSLATION,BN_CLICKED),NULL); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit/TranslationDlg.h b/legacy/Translit/TranslationDlg.h new file mode 100644 index 0000000..a7f50b0 --- /dev/null +++ b/legacy/Translit/TranslationDlg.h @@ -0,0 +1,33 @@ +#ifndef __TRANSLATIONDLG_H__ +#define __TRANSLATIONDLG_H__ + +class CTranslationDlg : public CDialogImpl, + public DialogLang +{ +public: + enum { IDD = IDD_TRANSLATION }; + + CRichEditCtrl m_richeditTranslation; + + void UpdateTranslation(); + void MakeTranslation(LPTSTR szTranslation); + + BEGIN_MSG_MAP(CTranslationDlg) + CHAIN_MSG_MAP(DialogLang) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_CLOSE, OnClose) + MESSAGE_HANDLER(WM_SIZE, OnSize) + COMMAND_ID_HANDLER(IDOK, OnOK) + COMMAND_ID_HANDLER(IDCANCEL, OnCancel) + NOTIFY_HANDLER(IDC_TRANSLATION, EN_MSGFILTER, OnEnMsgFilterTranslation) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLATIONDLG_H__ \ No newline at end of file diff --git a/legacy/Translit/Translit.cpp b/legacy/Translit/Translit.cpp new file mode 100644 index 0000000..a0d2c2d --- /dev/null +++ b/legacy/Translit/Translit.cpp @@ -0,0 +1,82 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "TranslitDlg.h" + +int Run() +{ + CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + CTranslitDlg dlgTranslit; + int nRet=0; + + // Registry + dlgTranslit.LoadRegistry(); + + if(!dlgTranslit.Show()) + { + // Show Error + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + return nRet; +} + +HMODULE LoadRichEditLibrary() +{ + // LoadLibrary + HMODULE hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + { +// ShowError(IDE_RICHED20); + ATLTRACE("Error"); + hRichEdit=LoadLibrary("riched32.dll"); + if(!hRichEdit) + { +// ShowError(IDE_RICHED32); + ATLTRACE("Error"); + } + } + return hRichEdit; +} + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + // Only one instance ! + HANDLE hMutex=NULL; + BOOL bFound=FALSE; + hMutex = ::CreateMutex(NULL, TRUE, _T("Plan")); + if(GetLastError() == ERROR_ALREADY_EXISTS) + bFound = TRUE; + if(hMutex) + ::ReleaseMutex(hMutex); + if(bFound) + return FALSE; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + // this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used + ::DefWindowProc(NULL, 0, 0, 0L); + + if(!LoadRichEditLibrary()) + ATLTRACE("Error"); + AtlInitCommonControls(0x4F); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(); + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + _Translit.~Translit(); + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} diff --git a/legacy/Translit/Translit.h b/legacy/Translit/Translit.h new file mode 100644 index 0000000..cf7a1d7 --- /dev/null +++ b/legacy/Translit/Translit.h @@ -0,0 +1,289 @@ +#ifndef __TRANSLIT_H__ +#define __TRANSLIT_H__ + +#define ENGRUS_COUNT 6 +typedef CHAR EngRusType; +typedef WCHAR EngRusTypeW; +typedef StaticArrayNC EngRusArray; +typedef StaticArrayNC EngRusArrayW; +typedef TupleNC EngRusTuple; +typedef TupleNC EngRusTupleW; +#define TRANSLIT_COUNT 150 +typedef StaticArrayMap EngRusMap; + +template<> +class NN::StaticArrayMapTraitsLastArrayItem +{ +public: + static bool LastArrayItem(const EngRusTuple& Item) + { + return !(Item.Get<0>()[0]&&Item.Get<1>()[0]); + } +}; + +template<> +class NN::ArrayTraitsCompare +{ +public: + static int Compare(const EngRusTuple& value1,const EngRusTuple& value2) + { + if(value1.Get<0>()==value2.Get<0>()&& + value1.Get<1>()==value2.Get<1>()) + return 0; + else + if(value1.Get<0>()>value2.Get<0>()&& + value1.Get<1>()>value2.Get<1>()) + return 1; + else + return -1; + } + + static int CompareLength(const EngRusTuple* /*pArray1*/,const EngRusTuple* /*pArray2*/) + { + return 0; + } + + static int CompareArray(const EngRusTuple* pArray1,const EngRusTuple* pArray2,unsigned nItems) + { + int iCmp; + for(unsigned nItem=0;nItem()&Translate::EngtoRus)) + continue; + } + else + { + if(!(GetAt(nItem).Get<2>()&Translate::RustoEng)) + continue; + } + EngRusArray* pArray=(EngRusArray*)GetAt(nItem).Get(i1); + if(pArray->GetLength(len)&& + !EngRusArray::Traits::CompareArrayLength(pszIn,pArray->GetData(),len)) + { + pArray=(EngRusArray*)GetAt(nItem).Get(!i1); + lstrcat(pszOut,pArray->GetData()); + pszOut+=pArray->GetLength(); + pszIn+=len; + goto lNext; + } + } + } + *pszOut++=*pszIn++; +lNext: + continue; + } + } + + void Translate(EngRusType* szEngRus,Translate::Direction dir,size_t nChar) + { + AutoArray aOut(nChar); + if(!aOut.GetData()) + return; + + Translate(szEngRus,aOut.GetData(),dir,nChar); + + memcpy(szEngRus,aOut.GetData(),sizeof(EngRusType)*nChar); + } + + void TranslateW(EngRusTypeW* szEngRusW,Translate::Direction dir,size_t nChar) + { + AutoArray aEngRus(nChar); + + ::WideCharToMultiByte(1251,0,szEngRusW,nChar,aEngRus.GetData(),nChar,NULL,NULL); + + Translate(aEngRus.GetData(),dir,nChar); + + ::MultiByteToWideChar(1251,0,aEngRus.GetData(),nChar,szEngRusW,nChar); + } +}; + +#endif // !__TRANSLIT_H__ \ No newline at end of file diff --git a/legacy/Translit/Translit.rc b/legacy/Translit/Translit.rc new file mode 100644 index 0000000..d0c0272 --- /dev/null +++ b/legacy/Translit/Translit.rc @@ -0,0 +1,805 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Translit.rc2" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLIT ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + "2", ID_EDIT_NOTRANSLATE_CLEAR, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "1", ID_EDIT_NOTRANSLATE_SET, VIRTKEY, SHIFT, CONTROL, + NOINVERT + VK_F4, ID_TOOLS_CHANGETRANSLATION, VIRTKEY, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F5, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_TRANSLATION, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLIT DIALOGEX 0, 0, 180, 180 +STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +CAPTION "Translit" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + LTEXT "&English text :",IDC_SENGTEXT,5,5,170,8 + LTEXT "&Russian text :",IDC_SRUSTEXT,5,85,170,8 + CONTROL "",IDC_SSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,174,1 +END + +IDD_ABOUT DIALOGEX 0, 0, 216, 124 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About" +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "&OK",IDOK,165,85,44,18 + PUSHBUTTON "&E-mail : nn-mail@bk.ru",IDC_EMAIL,5,85,150,13,BS_FLAT + PUSHBUTTON "&Site : http://our-site.nm.ru",IDC_SITE,5,105,150,13, + BS_FLAT + LTEXT "This program is freeware and provided """"AS-IS"""".\nI take no responsibility for any damage this program cause.\nSpecial thanks to :\nMyxamore6e , Destroer and Shark.\n\nNN.", + IDC_SABOUT,5,20,205,60,SS_SUNKEN + LTEXT "Translit 4.0 Copyright (C) 2003 - 2004", + IDC_SABOUTTRANSLIT,5,5,205,10,SS_SUNKEN +END + +IDD_TRANSLATION DIALOGEX 0, 0, 97, 202 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +CAPTION "Translation" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_TRANSLATION,"RichEdit20A",ES_MULTILINE | + ES_READONLY | ES_NUMBER | WS_VSCROLL | WS_HSCROLL | + WS_TABSTOP,0,0,96,202 +END + +IDD_GENERALPAGE DIALOGEX 0, 0, 112, 101 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "&Exit",IDC_CLOSEEXIT,"Button",BS_AUTORADIOBUTTON | + WS_GROUP | WS_TABSTOP,10,15,43,10 + CONTROL "&To Tray",IDC_CLOSETOTRAY,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,57,15,43,10 + CONTROL "&Normal",IDC_MINIMIZENORMAL,"Button",BS_AUTORADIOBUTTON | + WS_GROUP | WS_TABSTOP,10,46,43,10 + CONTROL "T&o Tray",IDC_MINIMIZETOTRAY,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,57,46,46,10 + CONTROL "&Load on StartUp",IDC_LOADONSTARTUP,"Button", + BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,10,77,90,8 + GROUPBOX "Close",IDC_SCLOSE,5,5,100,25 + GROUPBOX "Minimize",IDC_SMINIMIZE,5,35,100,25 + GROUPBOX "StartUp",IDC_SSTARTUP,5,66,100,25 +END + +IDD_LAYOUTPAGE DIALOGEX 0, 0, 148, 114 +STYLE DS_SETFONT | WS_CHILD | WS_CAPTION +CAPTION "Layout" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + PUSHBUTTON "&Eng Font",IDC_ENGFONT,13,16,50,14 + PUSHBUTTON "&Rus Font",IDC_RUSFONT,71,16,50,14 + CONTROL "Show when program is &shown",IDC_TRAYICONSHOWN,"Button", + BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,15, + 50,110,18 + CONTROL "Show when program is &hidden",IDC_TRAYICONHIDDEN,"Button", + BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,15, + 73,111,18 + GROUPBOX "Fonts",IDC_SFONTS,5,5,135,31 + GROUPBOX "TrayIcon",IDC_STRAYICON,5,39,135,59 +END + +IDD_HOTKEYSPAGE DIALOGEX 0, 0, 170, 125 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_CAPTION +CAPTION "HotKeys" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_HOTKEYTRANSLATIONENGTORUS,"msctls_hotkey32", + WS_BORDER | WS_TABSTOP,70,17,80,14 + CONTROL "",IDC_HOTKEYTRANSLATIONRUSTOENG,"msctls_hotkey32", + WS_BORDER | WS_TABSTOP,70,37,80,14 + CONTROL "",IDC_HOTKEYSHOWTRANSLIT,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,70,75,80,14 + CONTROL "",IDC_HOTKEYHIDETRANSLIT,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,70,95,80,14 + GROUPBOX "Translation",IDC_STRANSLATION,5,5,155,55 + LTEXT "&Eng to Rus :",IDC_SENGTORUS,12,17,50,8 + LTEXT "&Rus to Eng :",IDC_SRUSTOENG,12,37,50,8 + GROUPBOX "Translit",IDC_STRANSLIT,5,63,155,50 + LTEXT "&Show :",IDC_SSHOW,12,75,50,8 + LTEXT "&Hide :",IDC_SHIDE,12,92,50,8 +END + +IDD_CHANGETRANSLATION DIALOGEX 0, 0, 150, 190 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +CAPTION "Change Translation" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_ENG,30,15,35,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_RUS,90,15,35,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + CONTROL "Eng to Rus",IDC_ENGTORUS,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,10,30,55,10 + PUSHBUTTON "&Add",IDC_ADD,15,45,55,13 + PUSHBUTTON "Re&move",IDC_REMOVE,80,45,55,13 + PUSHBUTTON "&Clear",IDC_CLEAR,15,63,55,13 + PUSHBUTTON "Re&set",IDC_RESET,80,63,55,13 + EDITTEXT IDC_FROMENG,49,100,15,14,ES_AUTOHSCROLL + EDITTEXT IDC_TOENG,90,100,15,14,ES_AUTOHSCROLL + EDITTEXT IDC_FROMRUS,48,133,15,14,ES_AUTOHSCROLL + EDITTEXT IDC_TORUS,90,133,15,14,ES_AUTOHSCROLL + CONTROL "Copy ""&Not Translate"" symbols",IDC_COPYNOTTRANSLATE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,155,136,8 + DEFPUSHBUTTON "&OK",IDOK,50,170,42,14 + PUSHBUTTON "&Cancel",IDCANCEL,100,170,42,14 + LTEXT "&Eng :",IDC_SENG,10,15,18,8 + LTEXT "&Rus :",IDC_SRUS,70,15,18,8 + GROUPBOX "Translate",IDC_STRANSLATE,5,5,140,75 + GROUPBOX "Not Translate",IDC_SNOTTRANSLATE,5,82,140,85 + GROUPBOX "Russian Text",IDC_SRUSTEXT,15,123,120,30 + GROUPBOX "English Text",IDC_SENGTEXT,15,91,120,30 + LTEXT "From :",IDC_SFROM1,23,102,22,8 + LTEXT "To :",IDC_STO1,73,102,14,8 + LTEXT "From :",IDC_SFROM2,22,135,22,8 + LTEXT "To :",IDC_STO2,72,135,14,8 + CONTROL "Rus to Eng",IDC_RUSTOENG,"Button",BS_AUTOCHECKBOX | + WS_DISABLED | WS_TABSTOP,80,30,55,10 +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 158, 225 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +CAPTION "Translate Files" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATH,10,14,120,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_BROWSE,130,15,16,12 + CONTROL "&Files",IDC_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,40,125,10 + CONTROL "&Directories",IDC_DIRECTORIES,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,10,55,125,10 + CONTROL "&SubDirectories",IDC_SUBDIRECTORIES,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,10,70,125,10 + CONTROL "T&his Directory",IDC_THISDIRECTORY,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,10,85,125,10 + CONTROL "&Name",IDC_NAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,115,125,10 + CONTROL "&Entry",IDC_ENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,130,125,10 + CONTROL "&MP3 Tags",IDC_MP3TAGS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,10,145,125,10 + CONTROL "Eng to Rus",IDC_ENGTORUS,"Button",BS_AUTORADIOBUTTON | + WS_GROUP | WS_TABSTOP,10,171,125,10 + CONTROL "Rus to Eng",IDC_RUSTOENG,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,10,185,125,10 + DEFPUSHBUTTON "&Translate",IDC_TRANSLATE,40,205,50,14 + PUSHBUTTON "&Close",IDC_CLOSE,98,205,50,14 + LTEXT "&Path :",IDC_SPATH,10,1,129,8 + GROUPBOX "Directory",IDC_SDIRECTORY,5,30,145,70 + GROUPBOX "Direction",IDC_SDIRECTION,5,161,145,39 + GROUPBOX "File",IDC_SFILE,5,103,144,58 +END + +IDD_AUTOTRANSLATIONPAGE DIALOGEX 0, 0, 185, 81 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Auto Translation" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "HotKey :",IDC_SHOTKEY,15,20,65,8 + CONTROL "",IDC_HOTKEYTRANSLATIONAUTO,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,85,18,80,14 + CONTROL "Eng to Rus",IDC_ENGTORUS,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,23,47,53,10 + CONTROL "Rus to Eng",IDC_RUSTOENG,"Button",BS_AUTORADIOBUTTON,84, + 47,56,10 + GROUPBOX "Default Translation",IDC_SDEFAULTTRANSLATION,15,35,155, + 28 + GROUPBOX "Auto Translation",IDC_SAUTOTRANSLATION,5,5,170,65 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLIT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 174 + TOPMARGIN, 7 + BOTTOMMARGIN, 158 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 207 + TOPMARGIN, 7 + BOTTOMMARGIN, 115 + END + + IDD_TRANSLATION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 90 + TOPMARGIN, 7 + BOTTOMMARGIN, 195 + END + + IDD_GENERALPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 85 + TOPMARGIN, 7 + BOTTOMMARGIN, 95 + END + + IDD_LAYOUTPAGE, DIALOG + BEGIN + RIGHTMARGIN, 140 + BOTTOMMARGIN, 108 + END + + IDD_HOTKEYSPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 163 + TOPMARGIN, 7 + BOTTOMMARGIN, 118 + END + + IDD_CHANGETRANSLATION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 143 + TOPMARGIN, 7 + BOTTOMMARGIN, 184 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 151 + TOPMARGIN, 7 + BOTTOMMARGIN, 218 + END + + IDD_AUTOTRANSLATIONPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 178 + TOPMARGIN, 7 + BOTTOMMARGIN, 74 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLIT MENU +BEGIN + POPUP "&Translit" + BEGIN + MENUITEM "E&xit\tAlt+F4", ID_APP_EXIT + END + POPUP "&Edit" + BEGIN + POPUP "&English" + BEGIN + MENUITEM "&Undo\tCtrl+Z", ID_EDIT_ENG_UNDO + MENUITEM "&Redo\tCtrl+Y", ID_EDIT_ENG_REDO + MENUITEM SEPARATOR + MENUITEM "Cu&t\tCtrl+X", ID_EDIT_ENG_CUT + MENUITEM "&Copy\tCtrl+C", ID_EDIT_ENG_COPY + MENUITEM "&Paste\tCtrl+V", ID_EDIT_ENG_PASTE + MENUITEM "&Delete\tDel", ID_EDIT_ENG_DELETE + MENUITEM "Delete &All", ID_EDIT_ENG_DELETEALL + MENUITEM SEPARATOR + MENUITEM "&Select All\tCtrl+A", ID_EDIT_ENG_SELECTALL + END + POPUP "&Russian" + BEGIN + MENUITEM "&Undo\tCtrl+Z", ID_EDIT_RUS_UNDO + MENUITEM "&Redo\tCtrl+Y", ID_EDIT_RUS_REDO + MENUITEM SEPARATOR + MENUITEM "Cu&t\tCtrl+X", ID_EDIT_RUS_CUT + MENUITEM "&Copy\tCtrl+C", ID_EDIT_RUS_COPY + MENUITEM "&Paste\tCtrl+V", ID_EDIT_RUS_PASTE + MENUITEM "&Delete\tDel", ID_EDIT_RUS_DELETE + MENUITEM "Delete &All", ID_EDIT_RUS_DELETEALL + MENUITEM SEPARATOR + MENUITEM "&Select All\tCtrl+A", ID_EDIT_RUS_SELECTALL + END + MENUITEM SEPARATOR + POPUP "&No Translate" + BEGIN + MENUITEM "&Set\tCtrl+Shift+1", ID_EDIT_NOTRANSLATE_SET + MENUITEM "&Clear\tCtrl+Shift+2", ID_EDIT_NOTRANSLATE_CLEAR + + END + END + POPUP "&Tools" + BEGIN + POPUP "&Language" + BEGIN + MENUITEM "&English", ID_TOOLS_LANGUAGE_ENGLISH + + MENUITEM "&Russian", ID_TOOLS_LANGUAGE_RUSSIAN + + END + MENUITEM SEPARATOR + MENUITEM "&Translation...\tF3", ID_TOOLS_TRANSLATION + MENUITEM "&Change Translation...\tF4", ID_TOOLS_CHANGETRANSLATION + MENUITEM "&Options...\tF2", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + MENUITEM "Translate &Files...\tF5", ID_TOOLS_TRANSLATEFILES + END + POPUP "&Help" + BEGIN + MENUITEM "&About...\tF1", ID_APP_ABOUT + END +END + +IDR_TRAY MENU +BEGIN + POPUP "Tray" + BEGIN + MENUITEM "About...\tF1", ID_APP_ABOUT + MENUITEM SEPARATOR + MENUITEM "Options...\tF2", ID_TOOLS_OPTIONS + MENUITEM "&Change Translation...\tF4", ID_TOOLS_CHANGETRANSLATION + POPUP "&Language" + BEGIN + MENUITEM "&English", ID_TOOLS_LANGUAGE_ENGLISH + + MENUITEM "&Russian", ID_TOOLS_LANGUAGE_RUSSIAN + + END + MENUITEM SEPARATOR + MENUITEM "&Translation...\tF3", ID_TOOLS_TRANSLATION + MENUITEM SEPARATOR + MENUITEM "Translate &Files...\tF5", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM "&Show", ID_SHOW + MENUITEM "&Hide", ID_HIDE + MENUITEM SEPARATOR + MENUITEM "E&xit\tAlt+F4", ID_APP_EXIT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLIT ICON "res\\Translit.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 4,0,0,0 + PRODUCTVERSION 4,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Translit" + VALUE "FileVersion", "4, 0, 0, 0" + VALUE "InternalName", "Translit" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Translit.exe" + VALUE "ProductVersion", "4, 0, 0, 0" + END + BLOCK "041904b0" + BEGIN + VALUE "FileDescription", "" + VALUE "FileVersion", "4, 0, 0, 0" + VALUE "InternalName", "" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Translit.exe" + VALUE "ProductVersion", "4, 0, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200, 0x419, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Translit.rc2""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " , \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_ENG_UNDO " \n" + ID_EDIT_ENG_REDO " \n" + ID_EDIT_ENG_CUT " \n " + ID_EDIT_ENG_COPY " \n " + ID_EDIT_ENG_PASTE " \n" + ID_EDIT_ENG_SELECTALL " \n " + ID_EDIT_ENG_DELETE " \n" + ID_EDIT_ENG_DELETEALL " \n " + ID_EDIT_RUS_UNDO " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_RUS_REDO " \n" + ID_EDIT_RUS_CUT " \n " + ID_EDIT_RUS_COPY " \n " + ID_EDIT_RUS_PASTE " \n" + ID_EDIT_RUS_SELECTALL " \n " + ID_EDIT_RUS_DELETE " \n" + ID_EDIT_RUS_DELETEALL " \n " + ID_TOOLS_OPTIONS " \n" + ID_TOOLS_LANGUAGE_ENGLISH " \n " + ID_TOOLS_LANGUAGE_RUSSIAN " \n " + ID_TOOLS_TRANSLATION " \n" + ID_TOOLS_CHANGETRANSLATION " \n " + ID_TOOLS_TRANSLATEFILES " \n " + ID_SHOW " \n" + ID_HIDE " \n" +END + +STRINGTABLE +BEGIN + IDS_OPTIONS "" + IDS_ENGTORUS " :" + IDS_RUSTOENG " :" +END + +STRINGTABLE +BEGIN + IDS_AREYOUSURE " ?" + IDS_RESET "" +END + +STRINGTABLE +BEGIN + ID_EDIT_NOTRANSLATE_SET " "" ""\n "" """ + ID_EDIT_NOTRANSLATE_CLEAR + " "" ""\n "" """ + ID_EDIT_WRAPTEXT " \n " +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "Translit" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information, version number and copyright\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + ID_EDIT_RUS_REDO "Redo previuos undone action\nRedo" + ID_EDIT_RUS_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_RUS_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_RUS_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_RUS_SELECTALL "Select all text\nSelect All" + ID_EDIT_RUS_DELETE "Delete all text\nDelete All" + ID_EDIT_RUS_DELETEALL "Delete all text\nDelete All" + ID_TOOLS_OPTIONS "Show options dialog\nOptions" + ID_TOOLS_LANGUAGE_ENGLISH "English Interface" + ID_TOOLS_LANGUAGE_RUSSIAN "Russian Interface" + ID_TOOLS_TRANSLATION "Show or hide Translation window\nTranslation" + ID_TOOLS_CHANGETRANSLATION "Change Translation\nChange Translation" + ID_TOOLS_TRANSLATEFILES "Translate file names\nTranslate Files" + ID_SHOW "Show Window\nShow" + ID_HIDE "Hide Window\nHide" +END + +STRINGTABLE +BEGIN + ID_EDIT_ENG_UNDO "Undo the last action\nUndo" + ID_EDIT_ENG_REDO "Redo previuos undone action\nRedo" + ID_EDIT_ENG_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_ENG_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_ENG_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_ENG_SELECTALL "Select all text\nSelect All" + ID_EDIT_ENG_DELETE "Delete the selection\nDelete" + ID_EDIT_ENG_DELETEALL "Delete all text\nDelete All" + ID_EDIT_RUS_UNDO "Undo the last action\nUndo" +END + +STRINGTABLE +BEGIN + IDS_OPTIONS "Options" + IDS_ENGTORUS "English to Russian :" + IDS_RUSTOENG "Russian to English :" +END + +STRINGTABLE +BEGIN + IDS_AREYOUSURE "Are you sure ?" + IDS_RESET "Reset" +END + +STRINGTABLE +BEGIN + ID_EDIT_NOTRANSLATE_SET "Set ""Not Translate"" symbols\nSet ""Not Translate""" + ID_EDIT_NOTRANSLATE_CLEAR + "Clear ""Not Translate"" symbols\nClear ""Not Translate""" + ID_EDIT_WRAPTEXT "Wrap Text\nWrap Text" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Translit/Translit.rc2 b/legacy/Translit/Translit.rc2 new file mode 100644 index 0000000..219b8a6 --- /dev/null +++ b/legacy/Translit/Translit.rc2 @@ -0,0 +1,272 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Translit.exe.manifest" + +#define SUBLANG_LOC 0x20 +#define SUBLANG_LOC2 0x21 + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,SUBLANG_DEFAULT+SUBLANG_LOC +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "" + IDD_ABOUT " " + IDD_TRANSLATION "" + IDD_GENERALPAGE "" + IDD_LAYOUTPAGE "" + IDD_HOTKEYSPAGE " " + IDD_AUTOTRANSLATIONPAGE " " + IDD_TRANSLATEFILES " " + ID_APP_ABOUT " &...\tF1" + ID_APP_EXIT "&\tAlt+F4" + ID_TOOLS_TRANSLATEFILES " &...\tF5" + ID_EDIT_ENG_UNDO "&\tCtrl+Z" + ID_EDIT_ENG_REDO "&\tCtrl+Y" + ID_EDIT_ENG_CUT "&\tCtrl+X" + ID_EDIT_ENG_COPY "&\tCtrl+C" + ID_EDIT_ENG_PASTE "&\tCtrl+V" + ID_EDIT_ENG_SELECTALL "& \tCtrl+A" + ID_EDIT_ENG_DELETE "&\tDel" + ID_EDIT_ENG_DELETEALL " &" + ID_EDIT_RUS_UNDO "&\tCtrl+Z" + ID_EDIT_RUS_REDO "&\tCtrl+Y" + ID_EDIT_RUS_CUT "&\tCtrl+X" + ID_EDIT_RUS_COPY "&\tCtrl+C" + ID_EDIT_RUS_PASTE "&\tCtrl+V" + ID_EDIT_RUS_SELECTALL "& \tCtrl+A" + ID_EDIT_RUS_DELETE "&\tDel" + ID_EDIT_RUS_DELETEALL " &" + ID_TOOLS_OPTIONS "&...\tF2" + ID_TOOLS_LANGUAGE_ENGLISH "&" + ID_TOOLS_LANGUAGE_RUSSIAN "&" + ID_TOOLS_TRANSLATION "&&...\tF3" + ID_SHOW "&" + ID_HIDE "&" + IDC_SABOUT " ""-"".\n , .\n :\nMyxamore6e , Destroer Shark.\n\nNN." + IDC_SABOUTTRANSLIT " 4.0 Copyright (C) 2003 - 2004" + IDC_STRANSLATION "" + IDC_SENGTORUS ". . :" + IDC_SRUSTOENG ". . :" + IDC_STRANSLIT "" + IDC_SSHOW " :" + IDC_SHIDE " :" + IDC_SCLOSE "" + IDC_SFONTS "" + IDC_SMINIMIZE "" + IDC_STRAYICON "" + IDC_SSTARTUP "" + IDC_SENGTEXT " :" + IDC_SRUSTEXT " :" + IDC_EMAIL "&. : nn-mail@bk.ru" + IDC_SITE "& : http://our-site.nm.ru" + IDOK "&OK" + IDCANCEL "&" + IDC_TRAYICONSHOWN " &" + IDC_TRAYICONHIDDEN " &" + IDC_ENGFONT "&" + IDC_RUSFONT "&" + IDC_CLOSEEXIT "&" + IDC_CLOSETOTRAY "& " + IDC_MINIMIZENORMAL "&" + IDC_MINIMIZETOTRAY " &" + IDC_LOADONSTARTUP "& " + ID_TOOLS_CHANGETRANSLATION "& ...\tF4" + IDC_SENG "& :" + IDC_SRUS "& :" + IDC_STRANSLATE "" + IDC_COPYNOTTRANSLATE "& "" """ + IDC_SFROM1 " :" + IDC_SFROM2 " :" + IDC_STO1 " :" + IDC_STO2 " :" + IDC_ADD "&" + IDC_REMOVE "&" + IDC_CLEAR "&" + IDC_RESET "&" + IDC_SNOTTRANSLATE " " + IDC_ENGTORUS ". ." + IDC_RUSTOENG ". ." + IDC_SPATH "& :" + IDC_BROWSE "..." + IDC_SDIRECTORY "" + IDC_FILES "&" + IDC_DIRECTORIES "&" + IDC_SUBDIRECTORIES "& " + IDC_THISDIRECTORY "& " + IDC_SFILE "" + IDC_NAME "&" + IDC_ENTRY "&" + IDC_MP3TAGS "&MP3 " + IDC_SDIRECTION "" + IDC_TRANSLATE "&" + IDC_CLOSE "&" + IDC_SAUTOTRANSLATION " " + IDC_SDEFAULTTRANSLATION " " + ID_EDIT_NOTRANSLATE_SET "&\tCtrl+Shift+1" + ID_EDIT_NOTRANSLATE_CLEAR "&\tCtrl+Shift+2" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,SUBLANG_DEFAULT+SUBLANG_LOC2 +#pragma code_page(1251) +#endif //_WIN32 +STRINGTABLE +BEGIN + IDR_TRANSLIT "&\n&\n&\n&\n& \n&\n&\n&" + IDR_TRAY "\n" +END +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US+SUBLANG_LOC +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "Translit" + IDD_ABOUT "About" + IDD_TRANSLATION "Translation" + IDD_GENERALPAGE "General" + IDD_LAYOUTPAGE "Layout" + IDD_HOTKEYSPAGE "HotKeys" + IDD_AUTOTRANSLATIONPAGE "Auto Translation" + IDD_TRANSLATEFILES "Translate Files" + ID_APP_ABOUT "&About...\tF1" + ID_APP_EXIT "E&xit\tAlt+F4" + ID_TOOLS_TRANSLATEFILES "Translate &Files...\tF5" + ID_EDIT_ENG_UNDO "&Undo\tCtrl+Z" + ID_EDIT_ENG_REDO "&Redo\tCtrl+Y" + ID_EDIT_ENG_CUT "&Cut\tCtrl+X" + ID_EDIT_ENG_COPY "C&opy\tCtrl+C" + ID_EDIT_ENG_PASTE "&Paste\tCtrl+V" + ID_EDIT_ENG_SELECTALL "&Select All\tCtrl+A" + ID_EDIT_ENG_DELETE "&Delete\tDel" + ID_EDIT_ENG_DELETEALL "Delete &All" + ID_EDIT_RUS_UNDO "&Undo\tCtrl+Z" + ID_EDIT_RUS_REDO "&Redo\tCtrl+Y" + ID_EDIT_RUS_CUT "&Cut\tCtrl+X" + ID_EDIT_RUS_COPY "C&opy\tCtrl+C" + ID_EDIT_RUS_PASTE "&Paste\tCtrl+V" + ID_EDIT_RUS_SELECTALL "&Select All\tCtrl+A" + ID_EDIT_RUS_DELETE "&Delete\tDel" + ID_EDIT_RUS_DELETEALL "Delete &All" + ID_TOOLS_OPTIONS "&Options...\tF2" + ID_TOOLS_LANGUAGE_ENGLISH "&English" + ID_TOOLS_LANGUAGE_RUSSIAN "&Russian" + ID_TOOLS_TRANSLATION "&Translation...\tF3" + ID_SHOW "&Show" + ID_HIDE "&Hide" + IDC_SABOUT "This program is freeware and provided ""AS-IS"".\nI take no responsibility for any damage this program cause.\nSpecial thanks to :\nMyxamore6e , Destroer and Shark.\n\nNN." + IDC_SABOUTTRANSLIT "Translit 4.0 Copyright (C) 2003 - 2004" + IDC_STRANSLATION "Translation" + IDC_SENGTORUS "Eng to Rus :" + IDC_SRUSTOENG "Rus to Eng :" + IDC_STRANSLIT "Translit" + IDC_SSHOW "Show :" + IDC_SHIDE "Hide :" + IDC_SCLOSE "Close" + IDC_SFONTS "Fonts" + IDC_SMINIMIZE "Minimize" + IDC_STRAYICON "TrayIcon" + IDC_SSTARTUP "StartUp" + IDC_SENGTEXT "English Text :" + IDC_SRUSTEXT "Russian Text :" + IDC_EMAIL "&E-mail : nn-mail@bk.ru" + IDC_SITE "&Site : http://our-site.nm.ru" + IDOK "&OK" + IDCANCEL "&Cancel" + IDC_TRAYICONSHOWN "Show when program is &shown" + IDC_TRAYICONHIDDEN "Show when program is &hidden" + IDC_ENGFONT "&English" + IDC_RUSFONT "&Russian" + IDC_CLOSEEXIT "E&xit" + IDC_CLOSETOTRAY "&To Tray" + IDC_MINIMIZENORMAL "&Normal" + IDC_MINIMIZETOTRAY "T&o Tray" + IDC_LOADONSTARTUP "&Load on StartUp" + ID_TOOLS_CHANGETRANSLATION "&Change Translation...\tF4" + IDC_SENG "&Eng :" + IDC_SRUS "&Rus :" + IDC_STRANSLATE "Translate" + IDC_COPYNOTTRANSLATE "Copy ""&Not Translate"" symbols" + IDC_SFROM1 "From :" + IDC_SFROM2 "From :" + IDC_STO1 "To :" + IDC_STO2 "To :" + IDC_ADD "&Add" + IDC_REMOVE "&Remove" + IDC_CLEAR "C&lear" + IDC_RESET "Re&set" + IDC_SNOTTRANSLATE "Not Translate" + IDC_ENGTORUS "Eng to Rus" + IDC_RUSTOENG "Rus to Eng" + IDC_SPATH "&Path :" + IDC_BROWSE "..." + IDC_SDIRECTORY "Directory" + IDC_FILES "&Files" + IDC_DIRECTORIES "&Directories" + IDC_SUBDIRECTORIES "&SubDirectories" + IDC_THISDIRECTORY "T&his Directory" + IDC_SFILE "File" + IDC_NAME "&Name" + IDC_ENTRY "&Entry" + IDC_MP3TAGS "&MP3 Tags" + IDC_SDIRECTION "Direction" + IDC_TRANSLATE "&Translate" + IDC_CLOSE "&Close" + IDC_SAUTOTRANSLATION "Auto Translation" + IDC_SDEFAULTTRANSLATION "Default Translation" + ID_EDIT_NOTRANSLATE_SET "&Set\tCtrl+Shift+1" + ID_EDIT_NOTRANSLATE_CLEAR "&Clear\tCtrl+Shift+2" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US+SUBLANG_LOC2 +#pragma code_page(1252) +#endif //_WIN32 +STRINGTABLE +BEGIN + IDR_TRANSLIT "&Translit\n&Edit\n&English\n&Russian\n&No Translate\n&Options\n&Language\n&Help" + IDR_TRAY "\nLanguage" +END +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Translit/Translit.sln b/legacy/Translit/Translit.sln new file mode 100644 index 0000000..f45d4e2 --- /dev/null +++ b/legacy/Translit/Translit.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Translit", "Translit.vcproj", "{C1852571-A0D7-492C-993E-81EA6CE990BC}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {C1852571-A0D7-492C-993E-81EA6CE990BC}.Debug.ActiveCfg = Debug|Win32 + {C1852571-A0D7-492C-993E-81EA6CE990BC}.Debug.Build.0 = Debug|Win32 + {C1852571-A0D7-492C-993E-81EA6CE990BC}.Release.ActiveCfg = Release|Win32 + {C1852571-A0D7-492C-993E-81EA6CE990BC}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Translit/Translit.vcproj b/legacy/Translit/Translit.vcproj new file mode 100644 index 0000000..7c078d4 --- /dev/null +++ b/legacy/Translit/Translit.vcproj @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Translit/TranslitCommandLine.h b/legacy/Translit/TranslitCommandLine.h new file mode 100644 index 0000000..4a5d140 --- /dev/null +++ b/legacy/Translit/TranslitCommandLine.h @@ -0,0 +1,40 @@ +#ifndef __TRANSLITCOMMANDLINE_H__ +#define __TRANSLITCOMMANDLINE_H__ + +#include + +typedef WindowState TranslitCommandLineInfo; + +class TranslitCommandLine : public CommandLine +{ + struct ParseCommandLineStruct + { + TCHAR szCmdLine[10]; + CommandLineInfoType cmdInfo; + }; +public: + TranslitCommandLine() + { + SetCommandLine(GetCommandLine()); + ParseCommandLine(); + } + void ParseCommandLine() + { + static const ParseCommandLineStruct aParseCommandLine[]= + { + {_T("-min"),{SW_SHOWMINIMIZED}}, + {_T("-max"),{SW_SHOWMAXIMIZED}}, + {_T("-hide"),{SW_HIDE}} + }; + for(int i=1;i aEngRus(_MAX_CHAR); + + richeditFrom.GetTextEx((LPTSTR)aEngRus.GetData(),_MAX_CHAR-1,GT_DEFAULT,1200); + _Translit.TranslateW(aEngRus.GetData(),dir,_MAX_CHAR-1); + richeditTo.SetTextEx((LPTSTR)aEngRus.GetData(),ST_DEFAULT,1200); +} + +void CTranslitDlg::SetOptions() +{ + // Fonts + for(int i=0;i<2;i++) + { + HFONT hFont=::CreateFontIndirect(&_Options.m_lfEngRus[i]); + m_richeditEngRus[i].SetFont(hFont); + ::DeleteObject(hFont); + } + + // HotKeys + UnregisterHotKey(m_hWnd,hkIDTranslationEngtoRus); + _Options.m_hkTranslationEngtoRus.Register(m_hWnd,hkIDTranslationEngtoRus); + UnregisterHotKey(m_hWnd,hkIDTranslationRustoEng); + _Options.m_hkTranslationRustoEng.Register(m_hWnd,hkIDTranslationRustoEng); + UnregisterHotKey(m_hWnd,hkIDTranslationAuto); + _Options.m_hkTranslationAuto.Register(m_hWnd,hkIDTranslationAuto); + UnregisterHotKey(m_hWnd,hkIDShowTranslit); + _Options.m_hkShowTranslit.Register(m_hWnd,hkIDShowTranslit); + UnregisterHotKey(m_hWnd,hkIDHideTranslit); + _Options.m_hkHideTranslit.Register(m_hWnd,hkIDHideTranslit); + + // Icon + UpdateTrayIcon(); + + // Text + WrapText(); + + // Translation + m_dlgTranslation.UpdateTranslation(); + + if(_Options.m_bTranslation) + m_dlgTranslation.ShowWindow(SW_SHOWNORMAL); +} + +void CTranslitDlg::SaveRegistry() +{ + LONG lRes; + + CRegKey regTranslit; + lRes=regTranslit.Create(HKEY_CURRENT_USER,_T("Software\\NN\\Translit")); + if(lRes) + return; + + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(&wndpl); + _Options.m_wndState.nCmdShow=wndpl.showCmd; + + regTranslit.SetBinaryValue(_T("Options"),&_Options,sizeof(Options)); + regTranslit.SetBinaryValue(_T("Translit"),&_Translit,sizeof(Translit)); + + regTranslit.Close(); + + CRegKey regStart; + regStart.Open(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run")); + if(_Options.m_bLoadOnStartUp) + { + TCHAR szPath[256]; + GetModuleFileName(NULL,szPath,256); + lstrcat(szPath,_T(" -hide")); + regStart.SetStringValue(_T("Translit"),szPath); + + } + else + regStart.DeleteValue(_T("Translit")); + regStart.Close(); +} + +void CTranslitDlg::LoadRegistry() +{ + LONG lRes; + + CRegKey regTranslit; + lRes=regTranslit.Open(HKEY_CURRENT_USER,_T("Software\\NN\\Translit")); + + if(!lRes) + { + ULONG nSize; + nSize=sizeof(Options); + lRes=regTranslit.QueryBinaryValue(_T("Options"),&_Options,&nSize); + if(lRes||nSize!=sizeof(Options)) + _Options.Default(); + + Translit tempTranslit; + nSize=sizeof(Translit); + lRes=regTranslit.QueryBinaryValue(_T("Translit"),&tempTranslit,&nSize); + if(lRes||nSize!=sizeof(Translit)) + _Translit.Default(); + else + _Translit.SetData(tempTranslit); + } + else + { + _Options.Default(); + _Translit.Default(); + } +} + + +BOOL CTranslitDlg::Show() +{ + // Avoid problems with tray icon + BOOL bTrayIconShown=_Options.m_bTrayIconShown; + _Options.m_bTrayIconShown=FALSE; + BOOL bTrayIconHidden=_Options.m_bTrayIconHidden; + _Options.m_bTrayIconHidden=FALSE; + if(!Create(NULL)) + return FALSE; + _Options.m_bTrayIconShown=bTrayIconShown; + _Options.m_bTrayIconHidden=bTrayIconHidden; + + TranslitCommandLine cmdLine; + + if(cmdLine.GetCommandLineInfo()==TranslitCommandLineInfo::Default()) + { + if(_Options.m_wndState.nCmdShow==SW_HIDE) + HotKeyShowTranslit(false); + ShowWindow(_Options.m_wndState.nCmdShow); + } + else + { + if(cmdLine.GetCommandLineInfo().nCmdShow==SW_HIDE) + HotKeyShowTranslit(false); + ShowWindow(cmdLine.GetCommandLineInfo().nCmdShow); + } + m_bShown=IsWindowVisible()?true:false; + UpdateTrayIcon(); + + return TRUE; +} + +void CTranslitDlg::CloseDialog() +{ + SaveRegistry(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void CTranslitDlg::UpdateTrayIcon() +{ + if(m_bShown) + { + if(_Options.m_bTrayIconShown) + { + if(!m_bTrayIcon) + { + m_bTrayIcon=!m_bTrayIcon; + ShowTrayIcon(); + } + } + else + { + if(m_bTrayIcon) + { + m_bTrayIcon=!m_bTrayIcon; + HideTrayIcon(); + } + } + } + else + { + if(_Options.m_bTrayIconHidden) + { + if(!m_bTrayIcon) + { + m_bTrayIcon=!m_bTrayIcon; + ShowTrayIcon(); + } + } + else + { + if(m_bTrayIcon) + { + m_bTrayIcon=!m_bTrayIcon; + HideTrayIcon(); + } + } + } + SetDefaultItem(m_bShown?ID_HIDE:ID_SHOW); +} + +void CTranslitDlg::SaveWindowPlacement() +{ + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(&wndpl); + if(wndpl.showCmd==SW_SHOWMINIMIZED||wndpl.showCmd==SW_MINIMIZE) + wndpl.showCmd=SW_RESTORE; + _Options.m_wndState.nCmdShow=wndpl.showCmd; +} + +HWND CTranslitDlg::GetActiveWindowChild() +{ + DWORD dwThreadID = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); + GUITHREADINFO gti; + + ZeroMemory(>i, sizeof(GUITHREADINFO)); + gti.cbSize = sizeof(GUITHREADINFO); + ::GetGUIThreadInfo(dwThreadID, >i); + return gti.hwndFocus; +} + +void CTranslitDlg::HotKeyTranslation(Translate::Direction dir) +{ + HWND hWndTranslation = GetActiveWindowChild(); + + TCHAR szClass[50]; + GetClassName(hWndTranslation,szClass,50); + + // Edit , RichEdit + if(!lstrcmpi(szClass,_T("Edit"))|| + !lstrcmp(szClass,_T("TMemo"))|| + !ArrayTraits::CompareArrayLength(szClass,_T("RichEdit"),8)|| + !ArrayTraits::CompareArrayLength(szClass,_T("RICHEDIT"),8)) + { + AutoArray aEngRus(_MAX_CHAR); + CEdit wndTranslation=hWndTranslation; + + int nStart,nEnd; + wndTranslation.GetSel(nStart,nEnd); + + if(nStart==nEnd||(!nStart&&nEnd==-1)) + { + wndTranslation.SendMessage(WM_GETTEXT,_MAX_CHAR-1,(LPARAM)aEngRus.GetData()); + _Translit.Translate(aEngRus.GetData(),DefineDirection(dir,aEngRus.GetData()),_MAX_CHAR); + wndTranslation.SendMessage(WM_SETTEXT,0,(LPARAM)aEngRus.GetData()); + } + else + { + AutoArray aText(_MAX_CHAR); + + wndTranslation.SendMessage(WM_GETTEXT,_MAX_CHAR-1,(LPARAM)aEngRus.GetData()); + for(int nItem=nStart;nItem spDoc; + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + if(LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, _T("ObjectFromLresult"))) + { + if(SUCCEEDED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + { + CComPtr spDisp; + CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + CComQIPtr spInput; + CComQIPtr spTA; + if(SUCCEEDED(spElem->QueryInterface(IID_IHTMLInputTextElement,(void**)&spInput))|| + SUCCEEDED(spElem->QueryInterface(IID_IHTMLTextAreaElement,(void**)&spTA))) + { + CComBSTR strText; + CComVariant v; + AutoArray aText(_MAX_CHAR); + + if(spInput.p) + spInput->get_value(&strText); + else + spTA->get_value(&strText); + + for(int i=0;strText[i];i++) + aText[i]=strText[i]; + aText[i]=0; + _Translit.TranslateW(aText.GetData(),DefineDirection(dir,aText.GetData()),_MAX_CHAR); + v=aText.GetData(); + strText.Empty(); + v.CopyTo(&strText); + + if(spInput.p) + spInput->put_value(strText); + else + spTA->put_value(strText); + } + } + ::FreeLibrary(hOleAccInstance); + } // else Active Accessibility is not installed + } + // Window + else + { + AutoArray aEngRus(_MAX_CHAR); + + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(_MAX_CHAR-1),(LPARAM)aEngRus.GetData()); + _Translit.Translate(aEngRus.GetData(),DefineDirection(dir,aEngRus.GetData()),_MAX_CHAR); + ::SendMessage(hWndTranslation,WM_SETTEXT,0,(LPARAM)aEngRus.GetData()); + } +} + +void CTranslitDlg::HotKeyShowTranslit(bool bShow) +{ + if(bShow) + ShowWindow(_Options.m_wndState.nCmdShow); + else + { + SaveWindowPlacement(); + ShowWindow(SW_HIDE); + } + m_bShown=IsWindowVisible()?true:false; + UpdateTrayIcon(); +} + +inline Translate::Direction CTranslitDlg::DefineDirection(Translate::Direction dir,LPCSTR szText) +{ + if(dir==Translate::dirAuto) + { + EngRusTuple tuple={{szText[0],0},{szText[0],0}}; + unsigned u=_Translit.Find(tuple,0,0); + if(u!=(unsigned)-1) + return Translate::dirEngtoRus; + u=_Translit.Find(tuple,0,1); + if(u!=(unsigned)-1) + return Translate::dirRustoEng; + return _Options.m_nDefaultTranslation; + } + else + return dir; +} + +inline Translate::Direction CTranslitDlg::DefineDirection(Translate::Direction dir,LPCWSTR szText) +{ + TCHAR szTextA[2]; + ::WideCharToMultiByte(1251,0,szText,1,szTextA,1,NULL,NULL); + szTextA[1]=0; + return DefineDirection(dir,szTextA); +} + +void CTranslitDlg::InitControls() +{ + // RichEdit + for(int iRichEdit=0;iRichEdit<2;iRichEdit++) + { + m_richeditEngRus[iRichEdit]=GetDlgItem(IDC_ENG+iRichEdit); + m_richeditEngRus[iRichEdit].SetEventMask(ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + m_richeditEngRus[iRichEdit].SendMessage(EM_SETLIMITTEXT,(_MAX_CHAR-1)/EngRusArray::nCountInit,0); + } +} + +void CTranslitDlg::InitMessageLoop() +{ + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + UIAddChildWindowContainer(m_hWnd); +} + +void CTranslitDlg::InitMinTrackSize() +{ + RECT r; + GetWindowRect(&r); + m_ptMinTrackSize.x=r.right-r.left-40; + m_ptMinTrackSize.y=r.bottom-r.top-40; +} + +LRESULT CTranslitDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + InitMinTrackSize(); + DlgResize_Init(false,false); + DialogIcon_Init(); + DialogStatusBar_Init(); + DialogLang_Init(); + + // center the dialog on the screen + CenterWindow(); + + // Init controls + InitControls(); + + // Icon + HICON hIconTray=::LoadIcon(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLIT)); + InitTrayIcon(IDR_TRANSLIT,hIconTray,IDR_TRAY); + + // Translation Dialog + m_dlgTranslation.Create(m_hWnd); + + // Options + SetOptions(); + + m_hAccel=::LoadAccelerators(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLIT)); + + // register object for message filtering and idle updates + InitMessageLoop(); + + return TRUE; +} + +LRESULT CTranslitDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam) + { + case hkIDTranslationEngtoRus:HotKeyTranslation(Translate::dirEngtoRus);break; + case hkIDTranslationRustoEng:HotKeyTranslation(Translate::dirRustoEng);break; + case hkIDTranslationAuto:HotKeyTranslation(Translate::dirAuto);break; + case hkIDShowTranslit:HotKeyShowTranslit(true);break; + case hkIDHideTranslit:HotKeyShowTranslit(false);break; + } + return 0; +} + +LRESULT CTranslitDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled=FALSE; + if(LOWORD(wParam)==SC_CLOSE&&_Options.m_nClose==Options::closeExit) + CloseDialog(); + else + if(LOWORD(wParam)==SC_CLOSE||LOWORD(wParam)==SC_MINIMIZE&&_Options.m_nMinimize==Options::minimizeToTray) + { + bHandled=TRUE; + ShowWindow(SW_MINIMIZE); + HotKeyShowTranslit(false); + } + else + if(LOWORD(wParam)==SC_RESTORE||LOWORD(wParam)==SC_MAXIMIZE) + { + bHandled=TRUE; + ShowWindow(LOWORD(wParam)==SC_RESTORE?SW_RESTORE:SW_SHOWMAXIMIZED); + m_bShown=true; + UpdateTrayIcon(); + } + return 0; +} + +LRESULT CTranslitDlg::OnGetMinMaxInfo(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) +{ + ((LPMINMAXINFO)lParam)->ptMinTrackSize=m_ptMinTrackSize; + return 0; +} + +LRESULT CTranslitDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CloseDialog(); + return 0; +} + +LRESULT CTranslitDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(!m_bHelpDialog) + { + m_bHelpDialog=true; + CAboutDlg().DoModal(); + m_bHelpDialog=false; + } + return 0; +} + +LRESULT CTranslitDlg::OnEnChangeEngRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslation; + if(!bTranslation) + { + bTranslation=true; + Translate(wID==IDC_ENG?Translate::dirEngtoRus:Translate::dirRustoEng); + bTranslation=false; + } + return 0; +} + +LRESULT CTranslitDlg::OnToolsOptions(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(!m_bHelpDialog) + { + m_bHelpDialog=true; + _Options.m_bTranslation=FALSE; + bool bSetOptions=false; + if(wID==ID_TOOLS_OPTIONS) + { + if(COptionsSheet().DoModal(m_hWnd)==IDOK) + bSetOptions=true; + } + else + if(CChangeTranslationDlg().DoModal(m_hWnd)==IDOK) + bSetOptions=true; + if(bSetOptions) + SetOptions(); + + m_bHelpDialog=false; + } + return 0; +} + +LRESULT CTranslitDlg::OnToolsTranslation(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + _Options.m_bTranslation=!_Options.m_bTranslation; + m_dlgTranslation.ShowWindow(_Options.m_bTranslation?SW_SHOW:SW_HIDE); + return 0; +} + +LRESULT CTranslitDlg::OnToolsLanguage(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(m_bHelpDialog) + return 0; + + if(wID==ID_TOOLS_LANGUAGE_ENGLISH) + { + if(_Options.m_langID==MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US)) + return 0; + } + else + { + if(_Options.m_langID==MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT)) + return 0; + } + + _Options.m_langID= + _Options.m_langID==MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US)? + (LANGID)MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT): + (LANGID)MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); + + + UpdateLanguage(); + m_dlgTranslation.UpdateLanguage(); + m_dlgTranslation.UpdateTranslation(); + return 0; +} + +LRESULT CTranslitDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + HotKeyShowTranslit(wID==ID_SHOW); + UpdateTrayIcon(); + return 0; +} + +LRESULT CTranslitDlg::OnToolsTranslateFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CTranslateFilesDlg().DoModal(); + return 0; +} + +LRESULT CTranslitDlg::OnEditEngRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl &richedit=m_richeditEngRus[wIDmsg==WM_RBUTTONDOWN) + { + HMENU hMenu; + POINT pt; + ::GetCursorPos(&pt); + hMenu=GetMenu(); + hMenu=::GetSubMenu(hMenu,1); + hMenu=::GetSubMenu(hMenu,pnmhdr->idFrom==IDC_ENG?0:1); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; +} + +LRESULT CTranslitDlg::OnEditNoTranslate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==ID_EDIT_NOTRANSLATE_SET) + { + } + else + { + } + return 0; +} \ No newline at end of file diff --git a/legacy/Translit/TranslitDlg.h b/legacy/Translit/TranslitDlg.h new file mode 100644 index 0000000..4ba5aef --- /dev/null +++ b/legacy/Translit/TranslitDlg.h @@ -0,0 +1,145 @@ +#ifndef __TRANSLITDLG_H__ +#define __TRANSLITDLG_H__ + +#include "TranslationDlg.h" + +class CTranslitDlg : public CDialogImpl, + public CDialogResize, + public CUpdateUI, + public CMessageFilter, + public CIdleHandler, + public TrayIcon, + public DialogStatusBarMenu, + public DialogIcon, + public DialogLang +{ +public: + enum { IDD=IDR_TRANSLIT } ; + + enum hkID + { + hkIDTranslationEngtoRus = 1000, + hkIDTranslationRustoEng, + hkIDTranslationAuto, + hkIDShowTranslit, + hkIDHideTranslit + }; + + enum EngRus { Eng, Rus }; + CRichEditCtrl m_richeditEngRus[2]; + + AutoValue m_bHelpDialog; + AutoValue m_hAccel; + AutoValue m_bShown; + AutoValue m_bTrayIcon; + static RECT s_rectEngRus[2]; + CTranslationDlg m_dlgTranslation; + POINT m_ptMinTrackSize; + + virtual BOOL PreTranslateMessage(MSG* pMsg); + virtual BOOL OnIdle(); + + void Translate(Translate::Direction dir); + + void SetOptions(); + void SaveRegistry(); + void LoadRegistry(); + + BOOL Show(); + void CloseDialog(); + void UpdateTrayIcon(); + void SaveWindowPlacement(); + + HWND GetActiveWindowChild(); + void HotKeyTranslation(Translate::Direction dir); + void HotKeyShowTranslit(bool bShow); + + Translate::Direction DefineDirection(Translate::Direction dir,LPCSTR szText); + Translate::Direction DefineDirection(Translate::Direction dir,LPCWSTR szText); + + void WrapText(); + + void InitControls(); + void InitMessageLoop(); + void InitMinTrackSize(); + + BEGIN_UPDATE_UI_MAP(CTranslitDlg) + UPDATE_ELEMENT(ID_EDIT_ENG_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_SELECTALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_DELETE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_ENG_DELETEALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_SELECTALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_DELETE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_RUS_DELETEALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_LANGUAGE_ENGLISH,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_LANGUAGE_RUSSIAN,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + END_UPDATE_UI_MAP() + + BEGIN_MSG_MAP(CTranslitDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo) + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + COMMAND_RANGE_HANDLER(ID_EDIT_ENG_UNDO,ID_EDIT_RUS_DELETEALL,OnEditEngRus) + COMMAND_ID_HANDLER(ID_EDIT_NOTRANSLATE_SET,OnEditNoTranslate) + COMMAND_ID_HANDLER(ID_EDIT_NOTRANSLATE_CLEAR,OnEditNoTranslate) + COMMAND_ID_HANDLER(ID_TOOLS_LANGUAGE_ENGLISH, OnToolsLanguage) + COMMAND_ID_HANDLER(ID_TOOLS_LANGUAGE_RUSSIAN, OnToolsLanguage) + COMMAND_ID_HANDLER(ID_TOOLS_CHANGETRANSLATION, OnToolsOptions) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATION, OnToolsTranslation) + COMMAND_ID_HANDLER(ID_TOOLS_OPTIONS, OnToolsOptions) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATEFILES,OnToolsTranslateFiles) + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + COMMAND_HANDLER(IDC_ENG, EN_CHANGE, OnEnChangeEngRus) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChangeEngRus) + NOTIFY_HANDLER(IDC_ENG, EN_MSGFILTER, OnEnMsgFilterEngRus) + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilterEngRus) + CHAIN_MSG_MAP(DialogStatusBarMenu) + CHAIN_MSG_MAP(TrayIcon) + CHAIN_MSG_MAP(CUpdateUI) + CHAIN_MSG_MAP(CDialogResize) + END_MSG_MAP() + + BEGIN_DLGRESIZE_MAP(CTranslitDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_SSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_SENGTEXT, DLSZ_MOVE_Y) + DLGRESIZE_CONTROL(IDC_SRUSTEXT, DLSZ_MOVE_Y) + DLGRESIZE_CONTROL(IDC_ENG, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_RUS, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAppAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnChangeEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditNoTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsLanguage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslation(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslateFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterEngRus(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif //!__TRANSLITDLG_H__ \ No newline at end of file diff --git a/legacy/Translit/res/Translit.ico b/legacy/Translit/res/Translit.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Translit/res/Translit.ico differ diff --git a/legacy/Translit/resource.h b/legacy/Translit/resource.h new file mode 100644 index 0000000..245a30d --- /dev/null +++ b/legacy/Translit/resource.h @@ -0,0 +1,130 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Translit.rc +// +#define IDR_TRANSLIT 129 +#define IDR_TRAY 130 +#define IDD_ABOUT 131 +#define IDD_TRANSLATION 132 +#define IDD_GENERALPAGE 133 +#define IDD_LAYOUTPAGE 134 +#define IDD_HOTKEYSPAGE 135 +#define IDD_AUTOTRANSLATIONPAGE 136 +#define IDD_CHANGETRANSLATION 137 +#define IDD_TRANSLATEFILES 138 +#define IDC_ENG 1001 +#define IDC_RUS 1002 +#define IDC_SENGTEXT 1003 +#define IDC_SRUSTEXT 1004 +#define IDC_SSEPARATOR 1005 +#define IDC_EMAIL 1006 +#define IDC_SITE 1007 +#define IDC_TRANSLATION 1008 +#define IDC_ENGFONT 1009 +#define IDC_RUSFONT 1010 +#define IDC_CLOSEEXIT 1011 +#define IDC_CLOSETOTRAY 1012 +#define IDC_MINIMIZENORMAL 1013 +#define IDC_MINIMIZETOTRAY 1014 +#define IDC_LOADONSTARTUP 1015 +#define IDC_HOTKEYSHOWTRANSLIT 1016 +#define IDC_HOTKEYHIDETRANSLIT 1017 +#define IDC_HOTKEYTRANSLATIONENGTORUS 1018 +#define IDC_HOTKEYTRANSLATIONRUSTOENG 1019 +#define IDC_SABOUT 1020 +#define IDC_SABOUTTRANSLIT 1021 +#define IDC_STRANSLATION 1022 +#define IDC_SENGTORUS 1023 +#define IDC_SRUSTOENG 1024 +#define IDC_STRANSLIT 1025 +#define IDC_SSHOW 1026 +#define IDC_SHIDE 1027 +#define IDC_SCLOSE 1028 +#define IDC_SFONTS 1029 +#define IDC_SMINIMIZE 1030 +#define IDC_STRAYICON 1031 +#define IDC_SSTARTUP 1032 +#define IDC_TRAYICONSHOWN 1033 +#define IDC_TRAYICONHIDDEN 1034 +#define IDC_SENG 1035 +#define IDC_SRUS 1036 +#define IDC_STRANSLATE 1037 +#define IDC_SNOTTRANSLATE 1038 +#define IDC_SFROM1 1039 +#define IDC_SFROM2 1040 +#define IDC_STO1 1041 +#define IDC_STO2 1042 +#define IDC_FROMENG 1043 +#define IDC_TOENG 1044 +#define IDC_FROMRUS 1045 +#define IDC_TORUS 1046 +#define IDC_ADD 1047 +#define IDC_REMOVE 1048 +#define IDC_CLEAR 1049 +#define IDC_RESET 1050 +#define IDC_COPYNOTTRANSLATE 1051 +#define IDC_ENGTORUS 1052 +#define IDC_RUSTOENG 1053 +#define IDC_PATH 1054 +#define IDC_BROWSE 1055 +#define IDC_FILES 1056 +#define IDC_DIRECTORIES 1057 +#define IDC_SUBDIRECTORIES 1058 +#define IDC_THISDIRECTORY 1059 +#define IDC_NAME 1060 +#define IDC_ENTRY 1061 +#define IDC_MP3TAGS 1062 +#define IDC_TRANSLATE 1063 +#define IDC_CLOSE 1064 +#define IDC_SDIRECTION 1065 +#define IDC_SDIRECTORY 1066 +#define IDC_SPATH 1067 +#define IDC_SFILE 1068 +#define IDC_HOTKEYTRANSLATIONAUTO 1069 +#define IDC_SHOTKEY 1071 +#define IDC_SDEFAULT 1072 +#define IDC_SDEFAULTTRANSLATION 1072 +#define IDC_SAUTOTRANSLATION 1075 +#define ID_EDIT_ENG_UNDO 32775 +#define ID_EDIT_ENG_REDO 32776 +#define ID_EDIT_ENG_CUT 32777 +#define ID_EDIT_ENG_COPY 32778 +#define ID_EDIT_ENG_PASTE 32779 +#define ID_EDIT_ENG_SELECTALL 32780 +#define ID_EDIT_ENG_DELETE 32781 +#define ID_EDIT_ENG_DELETEALL 32782 +#define ID_EDIT_RUS_UNDO 32783 +#define ID_EDIT_RUS_REDO 32784 +#define ID_EDIT_RUS_CUT 32785 +#define ID_EDIT_RUS_COPY 32786 +#define ID_EDIT_RUS_PASTE 32787 +#define ID_EDIT_RUS_SELECTALL 32788 +#define ID_EDIT_RUS_DELETE 32789 +#define ID_EDIT_RUS_DELETEALL 32790 +#define ID_TOOLS_OPTIONS 32791 +#define ID_TOOLS_LANGUAGE_ENGLISH 32792 +#define ID_TOOLS_LANGUAGE_RUSSIAN 32793 +#define ID_TOOLS_TRANSLATION 32794 +#define ID_TOOLS_CHANGETRANSLATION 32795 +#define ID_TOOLS_TRANSLATEFILES 32796 +#define ID_SHOW 32797 +#define ID_HIDE 32798 +#define ID_EDIT_NOTRANSLATE_SET 32810 +#define ID_EDIT_NOTRANSLATE_CLEAR 32811 +#define ID_EDIT_WRAPTEXT 32815 +#define IDS_OPTIONS 63005 +#define IDS_ENGTORUS 63006 +#define IDS_RUSTOENG 63007 +#define IDS_AREYOUSURE 63008 +#define IDS_RESET 63009 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 143 +#define _APS_NEXT_COMMAND_VALUE 32818 +#define _APS_NEXT_CONTROL_VALUE 1076 +#define _APS_NEXT_SYMED_VALUE 139 +#endif +#endif diff --git a/legacy/Translit/stdafx.cpp b/legacy/Translit/stdafx.cpp new file mode 100644 index 0000000..bcb421f --- /dev/null +++ b/legacy/Translit/stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// Translit.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "StdAfx.h" diff --git a/legacy/Translit/stdafx.h b/legacy/Translit/stdafx.h new file mode 100644 index 0000000..9850c23 --- /dev/null +++ b/legacy/Translit/stdafx.h @@ -0,0 +1,68 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +// Change these values to use different versions +#define WINVER 0x0500 +//#define _WIN32_WINNT 0x0400 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS +#define _ATL_NO_COM +#define _ATL_NO_OLD_NAMES +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning) +//#define _ATL_ALL_WARNINGS +#define NN_WINDOWS + +#include +#define _T(x) TEXT(x) // avoid problems +#include +#include "Translate.h" +#include "Options.h" +extern Options _Options; +// Language +#define _LANG_R_ +#define _LANG_LangID_ _Options.m_langID +#include +#undef _T // undefine to avoid redefine +#include +#include + +extern CAppModule _Module; + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace NN; +#include "Translit.h" +#include "Global.h" + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) +#endif // _DEBUG + +#endif // !__STDAFX_H__ \ No newline at end of file diff --git a/legacy/Translit_4/AboutDlg.cpp b/legacy/Translit_4/AboutDlg.cpp new file mode 100644 index 0000000..b0cfe90 --- /dev/null +++ b/legacy/Translit_4/AboutDlg.cpp @@ -0,0 +1,29 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "AboutDlg.h" + +LRESULT CAboutDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + CenterWindow(GetParent()); + return 0; +} + +LRESULT CAboutDlg::OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::ShellExecute(m_hWnd,_T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; +} + +LRESULT CAboutDlg::OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::ShellExecute(m_hWnd,_T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; +} + +LRESULT CAboutDlg::OnCloseCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EndDialog(0); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit_4/AboutDlg.h b/legacy/Translit_4/AboutDlg.h new file mode 100644 index 0000000..b5dbc15 --- /dev/null +++ b/legacy/Translit_4/AboutDlg.h @@ -0,0 +1,24 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +class CAboutDlg : public CDialogImpl, + public NN::DialogLang +{ +public: + enum { IDD = IDD_ABOUT }; + + BEGIN_MSG_MAP(CAboutDlg) + MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog) + COMMAND_ID_HANDLER(IDC_EMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_SITE, OnSite) + COMMAND_ID_HANDLER(IDOK, OnCloseCmd) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnEmail(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Translit_4/Error.h b/legacy/Translit_4/Error.h new file mode 100644 index 0000000..015bef1 --- /dev/null +++ b/legacy/Translit_4/Error.h @@ -0,0 +1,22 @@ +#ifndef __ERROR_H__ +#define __ERROR_H__ + +#ifndef IDS_ERROR +#define IDS_ERROR 62000 +#define IDS_ERROR_DEFINED +#endif // !IDS_ERROR + +inline int ShowError(HWND hWnd, ATL::_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, ATL::_U_STRINGorID Caption = IDS_ERROR) +{ return WTL::AtlMessageBox(hWnd,Text,Caption,uType); } + +inline int ShowError(ATL::_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, ATL::_U_STRINGorID Caption = IDS_ERROR) +{ return ShowError(NULL,Text,uType,Caption); } + +#ifdef IDS_ERROR_DEFINED +#undef IDS_ERROR +#undef IDS_ERROR_DEFINED +#endif // IDS_ERROR_DEFINED + +#endif // __ERROR_H__ \ No newline at end of file diff --git a/legacy/Translit_4/Global.cpp b/legacy/Translit_4/Global.cpp new file mode 100644 index 0000000..6e2d231 --- /dev/null +++ b/legacy/Translit_4/Global.cpp @@ -0,0 +1,8 @@ +#include "StdAfx.h" +#include "Global.h" + +Translit _Translit; +CAppModule _Module; +Options _Options; +const LANGID _LangIDDefault=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +LANGID _LangID; \ No newline at end of file diff --git a/legacy/Translit_4/Global.h b/legacy/Translit_4/Global.h new file mode 100644 index 0000000..cd960ba --- /dev/null +++ b/legacy/Translit_4/Global.h @@ -0,0 +1,12 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +#define _MAX_CHAR 6000 + +#include "Options.h" +extern Options _Options; + +#include "Translit.h" +extern Translit _Translit; + +#endif // __GLOBAL_H__ \ No newline at end of file diff --git a/legacy/Translit_4/MainDlg.h b/legacy/Translit_4/MainDlg.h new file mode 100644 index 0000000..ed09f57 --- /dev/null +++ b/legacy/Translit_4/MainDlg.h @@ -0,0 +1,87 @@ +// MainDlg.h : interface of the CMainDlg class +// +///////////////////////////////////////////////////////////////////////////// + +#pragma once + +class CMainDlg : public CDialogImpl, public CUpdateUI, + public CMessageFilter, public CIdleHandler +{ +public: + enum { IDD = IDD_MAINDLG }; + + virtual BOOL PreTranslateMessage(MSG* pMsg) + { + return CWindow::IsDialogMessage(pMsg); + } + + virtual BOOL OnIdle() + { + return FALSE; + } + + BEGIN_UPDATE_UI_MAP(CMainDlg) + END_UPDATE_UI_MAP() + + BEGIN_MSG_MAP(CMainDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + COMMAND_ID_HANDLER(IDOK, OnOK) + COMMAND_ID_HANDLER(IDCANCEL, OnCancel) + END_MSG_MAP() + +// Handler prototypes (uncomment arguments if needed): +// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/) + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + // center the dialog on the screen + CenterWindow(); + + // set icons + HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), + IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR); + SetIcon(hIcon, TRUE); + HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), + IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); + SetIcon(hIconSmall, FALSE); + + // register object for message filtering and idle updates + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + UIAddChildWindowContainer(m_hWnd); + + return TRUE; + } + + LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + CAboutDlg dlg; + dlg.DoModal(); + return 0; + } + + LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + // TODO: Add validation code + CloseDialog(wID); + return 0; + } + + LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + CloseDialog(wID); + return 0; + } + + void CloseDialog(int nVal) + { + DestroyWindow(); + ::PostQuitMessage(nVal); + } +}; diff --git a/legacy/Translit_4/Options.h b/legacy/Translit_4/Options.h new file mode 100644 index 0000000..9f7b36d --- /dev/null +++ b/legacy/Translit_4/Options.h @@ -0,0 +1,88 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#include "Translate.h" +#include "WindowState.h" + +struct Options +{ +public: + enum { Eng , Rus }; + + BOOL m_bTranslation; + BOOL m_bTranslate; + WindowState m_wndState; + + BOOL m_bTrayIconShown; + BOOL m_bTrayIconHidden; + BOOL m_bLoadOnStartUp; + enum Close { closeExit, closeToTray }; + Close m_nClose; + enum Minimize { minimizeNormal, minimizeToTray }; + Minimize m_nMinimize; + + LOGFONT m_lfEngRus[2]; + + enum + { + hkCommandsMenu, + hkEngtoRus, + hkRustoEng, + hkAuto, + hkShow, + hkHide, + hkInsertNoTranslate, + hkDeleteNoTranslate, + hkCopyEng, + hkCopyRus, + nHotKey + }; + NN::HotKey m_hkTranslit[nHotKey]; + + enum FromTo { FromEng=0, FromRus=1, ToEng=2, ToRus=3 , nFromTo}; + enum NotTranslate { nNotTranslate = 4 }; + TCHAR m_szNotTranslate[nFromTo][nNotTranslate]; + BOOL m_bCopyNotTranslate; + Translate::Direction m_nAutoTranslation; + + BOOL m_bWrapText; + BOOL m_bScrollText; + + void Reset() + { + m_bTranslation=FALSE; + m_bTranslate=TRUE; + m_wndState.Reset(); + + m_bTrayIconShown=FALSE; + m_bTrayIconHidden=TRUE; + m_bLoadOnStartUp=FALSE; + m_nClose=closeExit; + m_nMinimize=minimizeToTray; + + m_hkTranslit[hkCommandsMenu].SetHotKey(_T('T'),MOD_CONTROL|MOD_ALT); + for(int i=1;i +{ +public: + typedef CGeneralPage thisClass; + typedef NN::PropertyPageImplLang baseClass; + + PAGEOPTIONS(CGeneralPage) + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_RADIO(IDC_CLOSEEXIT,(int&)m_pOptions->m_nClose) + DDX_RADIO(IDC_MINIMIZENORMAL,(int&)m_pOptions->m_nMinimize) + DDX_CHECK(IDC_LOADONSTARTUP,m_pOptions->m_bLoadOnStartUp) + END_DDX_MAP() + + BEGIN_MSG_MAP(thisClass) + CHAIN_MSG_MAP_ALT(baseClass,1) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() +}; + +class CLayoutPage : public NN::PropertyPageImplLang +{ +public: + typedef CLayoutPage thisClass; + typedef NN::PropertyPageImplLang baseClass; + + PAGEOPTIONS(CLayoutPage) + + void FontDialog(LPLOGFONT pLF) + { + CFontDialog fontdlg(pLF); + if(fontdlg.DoModal()==IDOK) + *pLF=fontdlg.m_lf; + } + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) + DDX_CHECK(IDC_TRAYICONSHOWN,m_pOptions->m_bTrayIconShown) + DDX_CHECK(IDC_TRAYICONHIDDEN,m_pOptions->m_bTrayIconHidden) + END_DDX_MAP() + + BEGIN_MSG_MAP(thisClass) + CHAIN_MSG_MAP_ALT(baseClass,1) + COMMAND_ID_HANDLER(IDC_ENGFONT,OnEngRusFont) + COMMAND_ID_HANDLER(IDC_RUSFONT,OnEngRusFont) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() + + LRESULT OnEngRusFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + FontDialog(&m_pOptions->m_lfEngRus[wID-IDC_ENGFONT]); + return 0; + } +}; + +#define DDX_HOTKEY(nID,vk,fsModifiers) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,vk,fsModifiers,bSaveAndValidate); + +#define DDX_HOTKEY_C(nID,rHotKey,bConvert) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate,bConvert); + +#define DDX_HOTKEY_(nID,rHotKey) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate); + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,WORD& vk,WORD& fsModifiers,BOOL bSave) +{ + if(bSave) + { + WORD wHotKey=(WORD)::SendDlgItemMessage(hWnd,nID,HKM_GETHOTKEY,0,0); + vk=LOBYTE(wHotKey); + fsModifiers=HIBYTE(wHotKey); + } + else + ::SendDlgItemMessage(hWnd,nID,HKM_SETHOTKEY,(WPARAM)MAKEWORD(vk,fsModifiers),0); + return TRUE; +} + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,NN::HotKey& rHotKey,BOOL bSave,BOOL bConvert=TRUE) +{ + NN::HotKey hk=rHotKey; + if(bConvert) + hk.ConvertToHotKey(); + if(bSave) + { + BOOL bRet=DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); + if(bRet) + { + hk.ConvertToWnd(); + rHotKey=hk; + } + return bRet; + } + else + return DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); +} + +class CHotKeysPage : public NN::PropertyPageImplLang +{ +public: + typedef CHotKeysPage thisClass; + typedef NN::PropertyPageImplLang baseClass; + + PAGEOPTIONS(CHotKeysPage) + + PROPERTYPAGEDDX_DECLARE(thisClass) + + BEGIN_DDX_MAP(thisClass) +// DDX_HOTKEY_(IDC_HOTKEYTRANSLATIONENGTORUS,m_pOptions->m_hkTranslationEngtoRus) +// DDX_HOTKEY_(IDC_HOTKEYTRANSLATIONRUSTOENG,m_pOptions->m_hkTranslationRustoEng) +// DDX_HOTKEY_(IDC_HOTKEYSHOWTRANSLIT,m_pOptions->m_hkShowTranslit) +// DDX_HOTKEY_(IDC_HOTKEYHIDETRANSLIT,m_pOptions->m_hkHideTranslit) + DDX_RADIO(IDC_ENGTORUS,(int&)m_pOptions->m_nAutoTranslation) + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP_ALT(baseClass,1) + MESSAGE_HANDLER(WM_DESTROY,OnDestroy) + COMMAND_HANDLER(IDC_ACTION,CBN_SELCHANGE,OnCmbSelChangeAction) + CHAIN_MSG_MAP(baseClass) + END_MSG_MAP() + + NN::AutoValue m_nCurSel; + + void SaveHotKey() + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYTRANSLIT); + if(m_nCurSel!=CB_ERR) + { + hotkey.GetHotKey(m_pOptions->m_hkTranslit[m_nCurSel].vk, + m_pOptions->m_hkTranslit[m_nCurSel].fsModifiers); + m_pOptions->m_hkTranslit[m_nCurSel].ConvertToWnd(); + } + } + + void LoadHotKey() + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYTRANSLIT); + m_nCurSel=CComboBox(GetDlgItem(IDC_ACTION)).GetCurSel(); + hotkey.SetHotKey(m_pOptions->m_hkTranslit[m_nCurSel].vk, + m_pOptions->m_hkTranslit[m_nCurSel].fsModifiers); + } + + LRESULT OnCmbSelChangeAction(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SaveHotKey(); + m_nCurSel=::SendMessage(m_hWnd,CB_GETCURSEL,0,0); + LoadHotKey(); + return 0; + } + + LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + SaveHotKey(); + return 0; + } +}; + +class COptionsSheet : public CPropertySheetImpl, + public NN::PropertyTitleLang +{ +public: + typedef CPropertySheetImpl baseClass; + enum { IDD = IDS_OPTIONS }; + COptionsSheet(HWND hWndParent = NULL, UINT uStartPage = 0) : + baseClass((LPCTSTR)0,uStartPage,hWndParent), + m_pageGeneral(&tempOptions), + m_pageLayout(&tempOptions), + m_pageHotKeys(&tempOptions) + { + m_psh.dwFlags |= PSH_NOAPPLYNOW; + m_psh.dwFlags &= ~(PSH_HASHELP); + SetPropertyTitle(IDS_OPTIONS); + AddPage(m_pageGeneral); + AddPage(m_pageLayout); + AddPage(m_pageHotKeys); + } + + INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow()) + { + tempOptions=_Options; + INT_PTR nRet=baseClass::DoModal(hWndParent); + if(nRet==IDOK) + _Options=tempOptions; + return nRet; + } + + CGeneralPage m_pageGeneral; + CLayoutPage m_pageLayout; + CHotKeysPage m_pageHotKeys; + + Options tempOptions; +}; + +#endif // __OPTIONSSHEET_H_ \ No newline at end of file diff --git a/legacy/Translit_4/Translate.h b/legacy/Translit_4/Translate.h new file mode 100644 index 0000000..61b7152 --- /dev/null +++ b/legacy/Translit_4/Translate.h @@ -0,0 +1,24 @@ +#ifndef __TRANSLATE_H__ +#define __TRANSLATE_H__ + +struct Translate +{ +public: + enum EngRusTranslate + { + None=0, + EngtoRus=1, + RustoEng=2, + EngRus=EngtoRus|RustoEng, + RusEng=EngRus, + }; + + enum Direction + { + dirEngtoRus=0, + dirRustoEng=1, + dirAuto=2 + }; +}; + +#endif // __TRANSLATE_H__ \ No newline at end of file diff --git a/legacy/Translit_4/TranslateFilesDlg.cpp b/legacy/Translit_4/TranslateFilesDlg.cpp new file mode 100644 index 0000000..641852f --- /dev/null +++ b/legacy/Translit_4/TranslateFilesDlg.cpp @@ -0,0 +1,203 @@ +#include "StdAfx.h" +#include "Resource.h" + +#include "TranslateFilesDlg.h" +#include + +void CTranslateFilesDlg::TranslateFile(LPCSTR szPath,Translate::Direction dir) +{ + TCHAR szFileExt[_MAX_PATH]; + TCHAR szFileName[_MAX_PATH]; + + const int nFileName=lstrlen(szPath); + + int i=nFileName; + while(i&&szPath[i]!=_T('.')) i--; + + if(i) + { + memcpy(szFileExt,szPath+i,(nFileName-i)*sizeof(TCHAR)); + szFileExt[nFileName-i]=0; + memcpy(szFileName,szPath,i*sizeof(TCHAR)); + szFileName[i]=0; + } + else + { + szFileExt[0]=0; + lstrcpy(szFileName,szPath); + } + + _Translit.Translate(szFileName,dir,_MAX_PATH); + + lstrcat(szFileName,szFileExt); + + ::MoveFile(szPath,szFileName); +} + +void CTranslateFilesDlg::TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry) +{ + CAtlFile file; + if(file.Create(szFile,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING)!=S_OK) + return; + + long lFileSizeOrig=::GetFileSize(file,NULL); + long lFileSize=lFileSizeOrig*EngRusArray::nCountInit; + CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize,0,PAGE_READWRITE,FILE_MAP_WRITE)!=S_OK) + return; + + LPSTR pFileView=(LPSTR)filemap.GetData(); + + if(bEntry) + { + _Translit.Translate(pFileView,dir,lFileSize); + lFileSize=lstrlen(pFileView); + filemap.Unmap(); + file.SetSize(lFileSize); + } + else + { + LPSTR pCur; + + // Mp3 Tag V1 + pCur=pFileView+lFileSizeOrig-(sizeof(NN::MP3Tag)); + NN::MP3Tag mp3tag; + memcpy(&mp3tag,pCur,sizeof(NN::MP3Tag)); + + if(!EngRusArray::Traits::CompareArrayLength(mp3tag.szTag,"TAG",3)) + { + TranslateTag(mp3tag.szAlbom,dir); + TranslateTag(mp3tag.szTitle,dir); + TranslateTag(mp3tag.szComment,dir); + memcpy(pCur,&mp3tag,sizeof(NN::MP3Tag)); + } + + filemap.Unmap(); + file.SetSize(lFileSizeOrig); + } +} + +void CTranslateFilesDlg::Translate(LPCSTR szPath) +{ + NN::CurrentDirectory curdir(szPath); + + HANDLE hFindFile; + WIN32_FIND_DATA ffd; + + hFindFile = ::FindFirstFile(_T("*.*"),&ffd); + if(hFindFile==INVALID_HANDLE_VALUE) + return; + + do{ + if(!EngRusArray::Traits::CompareArrayLength(ffd.cFileName,_T("."),1)|| + !EngRusArray::Traits::CompareArrayLength(ffd.cFileName,_T(".."),2)) + continue; + + if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) + { + if(m_bSubDirectories) + { + TCHAR szNextPath[_MAX_PATH]; + lstrcpy(szNextPath,szPath); + lstrcat(szNextPath,_T("\\")); + lstrcat(szNextPath,ffd.cFileName); + Translate(szNextPath); + } + if(m_bDirectories) + TranslateFile(ffd.cFileName,m_nDirection); + } + else + { + bool bNotMP3=EngRusArray::Traits::CompareArray(ffd.cFileName+lstrlen(ffd.cFileName)-4,_T(".mp3"),4); + if(bNotMP3&&m_bEntry|| + !bNotMP3&&m_bMP3Tags) + TranslateEntryMP3Tags(ffd.cFileName,m_nDirection,bNotMP3); + if(m_bName) + TranslateFile(ffd.cFileName,m_nDirection); + } + }while(::FindNextFile(hFindFile,&ffd)); + + ::FindClose(hFindFile); +} + +void CTranslateFilesDlg::TranslateThisDirectory() +{ + NN::CurrentDirectory curdir(m_szPath); + TCHAR *pszPath=m_szPath+lstrlen(m_szPath); + pszPath--; + while(*pszPath!=_T('\\')&&*pszPath!=_T('/')) + pszPath--; + pszPath++; + TCHAR c=*pszPath; + *pszPath=0; + ::SetCurrentDirectory(m_szPath); + *pszPath=c; + + TranslateFile(pszPath,m_nDirection); +} + +void CTranslateFilesDlg::TranslateTag(LPSTR szTag,Translate::Direction dir) +{ + NN::AutoArray aTranslate(NN::MP3Tag::nCount*EngRusArray::nCountInit); + _Translit.Translate(szTag,aTranslate.GetData(),dir,NN::MP3Tag::nCount); + memcpy(szTag,aTranslate.GetData(),NN::MP3Tag::nCount); +} + +LRESULT CTranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + SendDlgItemMessage(IDC_PATH,EM_LIMITTEXT,(WPARAM)(_MAX_PATH-1)); + m_szPath[0]=0; + DoDataExchange(DDX_LOAD); + return 0; +} + +LRESULT CTranslateFilesDlg::OnCloseCmd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EndDialog(0); + return 0; +} + +LRESULT CTranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + + if(!m_szPath[0]) + return 0; + + if(m_bFiles&& + (!m_bName&&!m_bEntry&&!m_bMP3Tags)) + m_bFiles=FALSE; + + if(!m_bFiles&&!m_bDirectories&&!m_bSubDirectories&& + !m_bThisDirectory) + return 0; + + TCHAR *pszPath=m_szPath+lstrlen(m_szPath)-1; + if(*pszPath==_T('\\')) + *pszPath=0; + + Translate(m_szPath); + + if(m_bThisDirectory) + TranslateThisDirectory(); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CFolderDialog fd(m_hWnd,0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal()==IDOK) + SetDlgItemText(IDC_PATH,fd.m_szFolderPath); + return 0; +} + +LRESULT CTranslateFilesDlg::OnFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::EnableWindow(GetDlgItem(IDC_NAME),IsDlgButtonChecked(IDC_FILES)); + ::EnableWindow(GetDlgItem(IDC_ENTRY),IsDlgButtonChecked(IDC_FILES)); + ::EnableWindow(GetDlgItem(IDC_MP3TAGS),IsDlgButtonChecked(IDC_FILES)); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit_4/TranslateFilesDlg.h b/legacy/Translit_4/TranslateFilesDlg.h new file mode 100644 index 0000000..0b0aec2 --- /dev/null +++ b/legacy/Translit_4/TranslateFilesDlg.h @@ -0,0 +1,57 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +class CTranslateFilesDlg : public CDialogImpl, + public CWinDataExchange, + public NN::DialogLang +{ +public: + enum { IDD=IDD_TRANSLATEFILES } ; + + NN::AutoValue m_bFiles; + NN::AutoValue m_bDirectories; + NN::AutoValue m_bSubDirectories; + NN::AutoValue m_bThisDirectory; + NN::AutoValue m_bName; + NN::AutoValue m_bEntry; + NN::AutoValue m_bMP3Tags; + NN::AutoValue m_nDirection; + TCHAR m_szPath[_MAX_PATH]; + + static void TranslateFile(LPCSTR szPath,Translate::Direction dir); + static void TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry); + void Translate(LPCSTR szPath); + void TranslateThisDirectory(); + + static void TranslateTag(LPSTR szTag,Translate::Direction dir); + + BEGIN_DDX_MAP(CChangeTranslationDlg) + DDX_TEXT(IDC_PATH,m_szPath) + DDX_CHECK(IDC_FILES,m_bFiles) + DDX_CHECK(IDC_DIRECTORIES,m_bDirectories) + DDX_CHECK(IDC_SUBDIRECTORIES,m_bSubDirectories) + DDX_CHECK(IDC_THISDIRECTORY,m_bThisDirectory) + DDX_CHECK(IDC_NAME,m_bName) + DDX_CHECK(IDC_ENTRY,m_bEntry) + DDX_CHECK(IDC_MP3TAGS,m_bMP3Tags) + DDX_RADIO(IDC_ENGTORUS,(int&)m_nDirection) + END_DDX_MAP() + + BEGIN_MSG_MAP(CChangeTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd) + COMMAND_ID_HANDLER(IDC_CLOSE, OnCloseCmd) + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_TRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_FILES, OnFiles) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Translit_4/Translit.cpp b/legacy/Translit_4/Translit.cpp new file mode 100644 index 0000000..4182b52 --- /dev/null +++ b/legacy/Translit_4/Translit.cpp @@ -0,0 +1,69 @@ +// Translit.cpp : main source file for Translit.exe +// + +#include "StdAfx.h" +#include "Resource.h" + +#include "TranslitDlg.h" + +int Run(LPCSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + CTranslitDlg dlgTranslit; + int nRet=0; + + // Registry + dlgTranslit.LoadRegistry(); + + if(!dlgTranslit.Show()) + { + ShowError(_T("Cannot create main window")); + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + return nRet; +} + +HMODULE LoadRichEditLibrary() +{ + HMODULE hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + ShowError(_T("Cannot load \"riched20.dll\"")); + return hRichEdit; +} + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR lpstrCmdLine, int nCmdShow) +{ + // One Instance + if(NN::SetOneInstance(_T("Translit"))) + return 0; + + // RichEdit Library + if(!LoadRichEditLibrary()) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + ::DefWindowProc(NULL, 0, 0, 0L); + + AtlInitCommonControls(0xFF); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(lpstrCmdLine,nCmdShow); + + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} diff --git a/legacy/Translit_4/Translit.h b/legacy/Translit_4/Translit.h new file mode 100644 index 0000000..a4cfcc6 --- /dev/null +++ b/legacy/Translit_4/Translit.h @@ -0,0 +1,438 @@ +#ifndef __TRANSLIT_H__ +#define __TRANSLIT_H__ + +#define ENGRUS_COUNT 6 +typedef NN::StaticArray EngRusArray; +typedef NN::StaticArray EngRusArrayW; +typedef NN::Tuple EngRusType; +typedef NN::Tuple EngRusTypeW; +#define TRANSLIT_COUNT 150 +typedef NN::StaticArrayMap EngRusMap; + +// ArrayTraits +// We must not compare Item.Get<2>() (Translate::EngRusTranslate) +template<> +class NN::StaticArrayMapTraitsLastArrayItem +{ +public: + inline static bool LastArrayItem(const EngRusType& Item) + { + return !(Item.Get<0>()[0]&&Item.Get<1>()[0]); + } +}; + +template<> +class NN::ArrayTraitsCompare +{ +public: + static int Compare(const EngRusType& value1,const EngRusType& value2) + { + if(value1.Get<0>()==value2.Get<0>()&& + value1.Get<1>()==value2.Get<1>()) + return 0; + else + if(value1.Get<0>()>value2.Get<0>()&& + value1.Get<1>()>value2.Get<1>()) + return 1; + else + return -1; + } + + static int CompareLength(const EngRusType* /*pArray1*/,const EngRusType* /*pArray2*/) + { + return 0; + } + + static int CompareArray(const EngRusType* pArray1,const EngRusType* pArray2,unsigned nItems) + { + int iCmp; + for(unsigned nItem=0;nItem()&Translate::EngtoRus)) + continue; + } + else + { + if(!(GetAt(nItem).Get<2>()&Translate::RustoEng)) + continue; + } + EngRusArray* pArray=(EngRusArray*)GetAt(nItem).Get(i1); + if(pArray->GetLength(len)&& + !EngRusArray::Traits::CompareArrayLength(pszIn,pArray->GetData(),len)) + { + pArray=(EngRusArray*)GetAt(nItem).Get(!i1); + lstrcat(pszOut,pArray->GetData()); + pszOut+=pArray->GetLength(); + pszIn+=len; + goto lNext; + } + } + } + *pszOut++=*pszIn++; + lNext: + continue; + } + } + + void Translate(LPSTR szEngRus,Translate::Direction dir,size_t nChar) + { + NN::AutoArray aOut(nChar); + if(!aOut.GetData()) + { + *szEngRus=0; + return; + } + + Translate(szEngRus,aOut.GetData(),dir,nChar); + + memcpy(szEngRus,aOut.GetData(),lstrlen(aOut.GetData())+1); + } + + void TranslateW(LPWSTR szEngRusW,Translate::Direction dir,size_t nChar) + { + NN::AutoArray aEngRus(nChar); + if(!aEngRus.GetData()) + { + *szEngRusW=0; + return; + } + + ::WideCharToMultiByte(1251,0,szEngRusW,nChar,aEngRus.GetData(),nChar,NULL,NULL); + + Translate(aEngRus.GetData(),dir,nChar); + + ::MultiByteToWideChar(1251,0,aEngRus.GetData(),nChar,szEngRusW,nChar); + } +private: + NN::Tuple aCheck[nCountInit]; + + template + bool FindEngRusCheck_(CHAR c) + { + NN::Tuple* pT=aCheck; + while(pT->Get()) + if((pT++)->Get()==c) + return true; + return false; + } + + inline bool FindEngRusCheck(CHAR c,bool bEng) + { return bEng?FindEngRusCheck_<0>(c):FindEngRusCheck_<1>(c); } + + void UpdateEngRusCheck() + { + for(int i=0;i()=GetAt(i).Get<0>().GetAt(0); + aCheck[i].Get<1>()=GetAt(i).Get<1>().GetAt(0); + } + } + + inline bool IsEngRus(CHAR c,bool bEng) + { return FindEngRusCheck(c,bEng); } + + inline bool IsEng(CHAR c) + { return IsEngRus(c,true); } + + inline bool IsRus(CHAR c) + { return IsEngRus(c,false); } +public: + // No Translate + void NoTranslate(LPCSTR szIn,LPSTR szOut,size_t nChar,bool bEng,bool bInsert) + { + LPCSTR pszIn=szIn; + LPSTR pszOut=szOut; + + ZeroMemory(pszOut,nChar); + + UpdateEngRusCheck(); + + Options::FromTo from=bEng?Options::FromEng:Options::FromRus; + Options::FromTo to=bEng?Options::ToEng:Options::ToRus; + + if(bInsert) + { + bool bSet=false; + while(*pszIn) + { + // No Translate + if(!EngRusArray::Traits::CompareArrayLength( + pszIn,_Options.m_szNotTranslate[from],Options::nNotTranslate)) + { + bSet=true; + int len=lstrlen(_Options.m_szNotTranslate[from]); + for(int i=0;i aOut(nChar); + if(!aOut.GetData()) + { + *szEngRus=0; + return; + } + + NoTranslate(szEngRus,aOut.GetData(),nChar,bEng,bInsert); + + memcpy(szEngRus,aOut.GetData(),lstrlen(aOut.GetData())+1); + } + + void NoTranslateW(LPWSTR szEngRusW,size_t nChar,bool bEng,bool bInsert) + { + NN::AutoArray aEngRus(nChar); + if(!aEngRus.GetData()) + { + *szEngRusW=0; + return; + } + + ::WideCharToMultiByte(1251,0,szEngRusW,nChar,aEngRus.GetData(),nChar,NULL,NULL); + + NoTranslate(aEngRus.GetData(),nChar,bEng,bInsert); + + ::MultiByteToWideChar(1251,0,aEngRus.GetData(),nChar,szEngRusW,nChar); + } +}; + +#endif // !__TRANSLIT_H__ \ No newline at end of file diff --git a/legacy/Translit_4/Translit.rc b/legacy/Translit_4/Translit.rc new file mode 100644 index 0000000..50e9e37 --- /dev/null +++ b/legacy/Translit_4/Translit.rc @@ -0,0 +1,647 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Translit.rc2" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLIT DIALOGEX 0, 0, 180, 180 +STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_SSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,177,1 + LTEXT "",IDC_SENGTEXT,5,5,170,8 + LTEXT "",IDC_SRUSTEXT,5,80,170,8 + GROUPBOX "Eng",IDC_SENGPLACE,5,15,170,60,NOT WS_VISIBLE + GROUPBOX "Rus",IDC_SRUSPLACE,5,90,170,60,NOT WS_VISIBLE +END + +IDD_ABOUT DIALOGEX 0, 0, 228, 130 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "",IDOK,169,89,44,18 + PUSHBUTTON "",IDC_EMAIL,9,89,150,13,BS_FLAT + PUSHBUTTON "",IDC_SITE,9,109,150,13,BS_FLAT + LTEXT "",IDC_SABOUT,9,24,205,60,SS_SUNKEN + LTEXT "",IDC_SABOUTTRANSLIT,9,9,205,10,SS_SUNKEN +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 160, 225 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +CAPTION "Dialog" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATH,10,14,120,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BROWSE,130,15,16,12 + CONTROL "",IDC_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,40, + 125,10 + CONTROL "",IDC_DIRECTORIES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,55,125,10 + CONTROL "",IDC_SUBDIRECTORIES,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,10,70,125,10 + CONTROL "",IDC_THISDIRECTORY,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,10,85,125,10 + CONTROL "",IDC_NAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,115, + 125,10 + CONTROL "",IDC_ENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 130,125,10 + CONTROL "",IDC_MP3TAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 145,125,10 + CONTROL "",IDC_ENGTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,10,171,125,10 + CONTROL "",IDC_RUSTOENG,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, + 10,185,125,10 + DEFPUSHBUTTON "",IDC_TRANSLATE,40,205,50,14 + PUSHBUTTON "",IDC_CLOSE,98,205,50,14 + LTEXT "",IDC_SPATH,10,1,129,8 + GROUPBOX "",IDC_SDIRECTORY,5,30,145,70 + GROUPBOX "",IDC_SDIRECTION,5,161,145,39 + GROUPBOX "",IDC_SFILE,5,103,144,58 +END + +IDD_GENERALPAGE DIALOGEX 0, 0, 130, 105 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "",IDC_LOADONSTARTUP,"Button",BS_AUTOCHECKBOX | + BS_MULTILINE | WS_TABSTOP,15,76,90,8 + GROUPBOX "",IDC_SSTARTUP,10,65,100,25 + CONTROL "",IDC_CLOSEEXIT,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,15,14,43,10 + CONTROL "",IDC_CLOSETOTRAY,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,62,14,43,10 + CONTROL "",IDC_MINIMIZENORMAL,"Button",BS_AUTORADIOBUTTON | + WS_GROUP | WS_TABSTOP,15,45,43,10 + CONTROL "",IDC_MINIMIZETOTRAY,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,62,45,46,10 + GROUPBOX "",IDC_SCLOSE,10,4,100,25 + GROUPBOX "",IDC_SMINIMIZE,10,34,100,25 +END + +IDD_LAYOUTPAGE DIALOGEX 0, 0, 154, 106 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "",IDC_ENGFONT,13,15,50,14 + PUSHBUTTON "",IDC_RUSFONT,71,15,50,14 + CONTROL "",IDC_TRAYICONSHOWN,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,15,49,110,18 + CONTROL "",IDC_TRAYICONHIDDEN,"Button",BS_AUTOCHECKBOX | BS_TOP | + BS_MULTILINE | WS_TABSTOP,15,72,111,18 + GROUPBOX "",IDC_SFONTS,5,4,135,31 + GROUPBOX "",IDC_STRAYICON,5,38,135,59 +END + +IDD_HOTKEYSPAGE DIALOGEX 0, 0, 180, 100 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "",IDC_SHOTKEYS,5,5,163,55 + GROUPBOX "",IDC_SAUTOTRANSLATION,5,60,165,30 + CONTROL "",IDC_ENGTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,15,70,56,10 + CONTROL "",IDC_RUSTOENG,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, + 80,70,56,10 + COMBOBOX IDC_ACTION,66,15,95,30,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_HOTKEYTRANSLIT,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,65,35,95,14 + LTEXT "",IDC_SACTION,15,15,45,8 + LTEXT "",IDC_SHOTKEY,15,35,45,20 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLIT MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_EXIT + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", 57632 + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_TRANSLATE + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_NOTRANSLATE_INSERT + + MENUITEM " ", ID_EDIT_NOTRANSLATE_DELETE + + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_ENGTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOENG + END + END + POPUP " " + BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LAYOUT_WRAPTEXT + MENUITEM " ", ID_VIEW_LAYOUT_SCROLLTEXT + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + END +END + +IDR_TRAYICON MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", 32791 + MENUITEM " ", 32792 + END + MENUITEM SEPARATOR + MENUITEM " ", 32797 + MENUITEM " ", 32799 + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", 1046 + MENUITEM " ", 1047 + MENUITEM SEPARATOR + MENUITEM " ", ID_APP_EXIT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLIT ICON "res\\Translit.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 4,0,0,0 + PRODUCTVERSION 4,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Translit" + VALUE "FileVersion", "4, 0, 0, 0" + VALUE "InternalName", "Translit" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Translit.exe" + VALUE "ProductVersion", "4, 0, 0, 0" + END + BLOCK "041904b0" + BEGIN + VALUE "FileDescription", "" + VALUE "FileVersion", "4, 0, 0, 0" + VALUE "InternalName", "" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Translit.exe" + VALUE "ProductVersion", "4, 0, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200, 0x419, 1200 + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Translit.rc2""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLIT ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "2", ID_EDIT_NOTRANSLATE_DELETE, VIRTKEY, CONTROL, NOINVERT + "1", ID_EDIT_NOTRANSLATE_INSERT, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F4, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_TRANSLATION, VIRTKEY, NOINVERT + VK_F5, ID_EDIT_TRANSLATE, VIRTKEY, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLIT, DIALOG + BEGIN + RIGHTMARGIN, 177 + BOTTOMMARGIN, 172 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 221 + TOPMARGIN, 6 + BOTTOMMARGIN, 123 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 153 + TOPMARGIN, 7 + BOTTOMMARGIN, 218 + END + + IDD_GENERALPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 123 + TOPMARGIN, 7 + BOTTOMMARGIN, 98 + END + + IDD_LAYOUTPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 147 + TOPMARGIN, 7 + BOTTOMMARGIN, 99 + END + + IDD_HOTKEYSPAGE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 173 + TOPMARGIN, 7 + BOTTOMMARGIN, 93 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + IDS_ERROR "" + IDS_OPTIONS "" +END + +STRINGTABLE +BEGIN + ID_VIEW_LANGUAGE_ENGLISH " \n " + ID_VIEW_LANGUAGE_RUSSIAN " \n " + ID_EDIT_NOTRANSLATE_INSERT + " "" ""\n "" """ + ID_EDIT_NOTRANSLATE_DELETE + " "" ""\n "" """ + ID_VIEW_LAYOUT_WRAPTEXT " \n " + ID_VIEW_LAYOUT_SCROLLTEXT " \n " + ID_TOOLS_TRANSLATION " \n" + ID_TOOLS_TRANSLATEFILES " \n " + ID_TOOLS_OPTIONS "\n" +END + +STRINGTABLE +BEGIN + ID_EDIT_COPY_RUSTOENG " \n " + ID_EDIT_COPY_ENGTORUS " \n " + ID_EDIT_TRANSLATE " \n " +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLIT "Translit" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Error" + IDS_OPTIONS "Options" +END + +STRINGTABLE +BEGIN + ID_VIEW_LANGUAGE_ENGLISH "English interface\nEnglish interface" + ID_VIEW_LANGUAGE_RUSSIAN "Russian interface\nRussian interface" + ID_EDIT_NOTRANSLATE_INSERT + "Insert ""no translate"" simbols\nInsert ""no translate""" + ID_EDIT_NOTRANSLATE_DELETE + "Delete ""no translate"" simbols\nDelete ""no translate""" + ID_VIEW_LAYOUT_WRAPTEXT "Wrap text\nWrap text" + ID_VIEW_LAYOUT_SCROLLTEXT "Scroll text\nScroll text" + ID_TOOLS_TRANSLATION "Show or hide translation windows\nTranslation" + ID_TOOLS_TRANSLATEFILES "Show translate files window\nTranslate Files" + ID_TOOLS_OPTIONS "Show options window\nOptions" +END + +STRINGTABLE +BEGIN + ID_EDIT_COPY_RUSTOENG "Copy text from russian window to english\nRussian to English" + ID_EDIT_COPY_ENGTORUS "Copy text from english window to russian\nEnglish to Russian" + ID_EDIT_TRANSLATE "Transate text\nTransate text" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Translit_4/Translit.rc2 b/legacy/Translit_4/Translit.rc2 new file mode 100644 index 0000000..6351689 --- /dev/null +++ b/legacy/Translit_4/Translit.rc2 @@ -0,0 +1,222 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Translit.exe.manifest" + +#define SUBLANG_LOC 0x20 +#define SUBLANG_LOC2 0x21 + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,SUBLANG_DEFAULT+SUBLANG_LOC +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLIT "" + IDD_ABOUT " " + IDD_TRANSLATEFILES " " + IDD_GENERALPAGE "" + IDD_LAYOUTPAGE "" + IDD_HOTKEYSPAGE " " + ID_APP_EXIT "&\tAlt+F4" + ID_APP_ABOUT "& " + IDC_SABOUT " ""-"".\n , .\n :\nMyxamore6e , Destroer Shark.\n\nNN." + IDC_SABOUTTRANSLIT " 4.0 Copyright (C) 2003 - 2004" + IDC_EMAIL "&. : nn-mail@bk.ru" + IDC_SITE "& : http://our-site.nm.ru" + ID_EDIT_UNDO "&\tCtrl+Z" + ID_EDIT_REDO "&\tCtrl+Y" + ID_EDIT_CUT "&\tCtrl+X" + ID_EDIT_COPY "&\tCtrl+C" + ID_EDIT_PASTE "&\tCtrl+V" + ID_EDIT_SELECT_ALL "& \tCtrl+A" + ID_EDIT_CLEAR "&\tDel" + ID_EDIT_CLEAR_ALL " &" + ID_VIEW_LANGUAGE_ENGLISH "&English" + ID_VIEW_LANGUAGE_RUSSIAN "&" + IDC_SENGTEXT "& :" + IDC_SRUSTEXT "& :" + ID_EDIT_NOTRANSLATE_INSERT "& "" ""\tCtrl+1" + ID_EDIT_NOTRANSLATE_DELETE "& "" ""\tCtrl+2" + ID_VIEW_LAYOUT_WRAPTEXT "& " + ID_VIEW_LAYOUT_SCROLLTEXT "& " + ID_TOOLS_TRANSLATION "&...\tF3" + ID_TOOLS_TRANSLATEFILES " &...\tF4" + ID_TOOLS_OPTIONS "&...\tF2" + ID_EDIT_COPY_ENGTORUS "& " + ID_EDIT_COPY_RUSTOENG "& " + ID_EDIT_TRANSLATE "&\tF5" + IDOK "&OK" + IDCANCEL "&" + IDC_ENGTORUS ". ." + IDC_RUSTOENG ". ." + IDC_SPATH "& :" + IDC_BROWSE "..." + IDC_SDIRECTORY "" + IDC_FILES "&" + IDC_DIRECTORIES "&" + IDC_SUBDIRECTORIES "& " + IDC_THISDIRECTORY "& " + IDC_SFILE "" + IDC_NAME "&" + IDC_ENTRY "&" + IDC_MP3TAGS "&MP3 " + IDC_SDIRECTION "" + IDC_TRANSLATE "&" + IDC_CLOSE "&" + IDC_SCLOSE "" + IDC_SMINIMIZE "" + IDC_SSTARTUP "" + IDC_CLOSEEXIT "&" + IDC_CLOSETOTRAY "& " + IDC_MINIMIZENORMAL "&" + IDC_MINIMIZETOTRAY " &" + IDC_LOADONSTARTUP "& " + IDC_TRAYICONSHOWN " &" + IDC_TRAYICONHIDDEN " &" + IDC_ENGFONT "&" + IDC_RUSFONT "&" + IDC_STRAYICON "" + IDC_SFONTS "" + IDC_SHOTKEYS " " + IDC_SAUTOTRANSLATION " " + IDC_ACTION " \n. .\n. .\n \n \n \n "" ""\n "" ""\n .\n .\n" + IDC_SHOTKEY "& :" + IDC_SACTION "& :" + ID_SHOW "" + ID_HIDE "" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,SUBLANG_DEFAULT+SUBLANG_LOC2 +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLIT "&\n&\n& \n&\n&\n&\n&\n&\n&" + IDR_TRAYICON "1\n&" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US+SUBLANG_LOC +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLIT "Translit" + IDD_ABOUT "About" + IDD_TRANSLATEFILES "Translate Files" + IDD_GENERALPAGE "General" + IDD_LAYOUTPAGE "Layout" + IDD_HOTKEYSPAGE "Hot Keys" + ID_APP_EXIT "E&xit\tAlt+F4" + ID_APP_ABOUT "&About\tF1" + IDC_SABOUT "This program is freeware and provided ""AS-IS"".\nI take no responsibility for any damage this program cause.\nSpecial thanks to :\nMyxamore6e , Destroer and Shark.\n\nNN." + IDC_SABOUTTRANSLIT "Translit 4.0 Copyright (C) 2003 - 2004" + IDC_EMAIL "&E-mail : nn-mail@bk.ru" + IDC_SITE "&Site : http://our-site.nm.ru" + ID_EDIT_UNDO "&Undo\tCtrl+Z" + ID_EDIT_REDO "&Redo\tCtrl+Y" + ID_EDIT_CUT "&Cut\tCtrl+X" + ID_EDIT_COPY "C&opy\tCtrl+C" + ID_EDIT_PASTE "&Paste\tCtrl+V" + ID_EDIT_SELECT_ALL "&Select All\tCtrl+A" + ID_EDIT_CLEAR "&Delete\tDel" + ID_EDIT_CLEAR_ALL "Delete &All" + ID_VIEW_LANGUAGE_ENGLISH "&English" + ID_VIEW_LANGUAGE_RUSSIAN "&" + IDC_SENGTEXT "&English text :" + IDC_SRUSTEXT "&Russian text :" + ID_EDIT_NOTRANSLATE_INSERT "&Insert ""no translate"" symbols\tCtrl+1" + ID_EDIT_NOTRANSLATE_DELETE "&Delete ""no translate"" symbols\tCtrl+2" + ID_VIEW_LAYOUT_WRAPTEXT "&Wrap text" + ID_VIEW_LAYOUT_SCROLLTEXT "&Scroll text" + ID_TOOLS_TRANSLATION "&Translation...\tF3" + ID_TOOLS_TRANSLATEFILES "Translate &Files...\tF4" + ID_TOOLS_OPTIONS "&Options...\tF2" + ID_EDIT_COPY_ENGTORUS "&English to Russian" + ID_EDIT_COPY_RUSTOENG "&Russian to English" + ID_EDIT_TRANSLATE "&Transate\tF5" + IDOK "&OK" + IDCANCEL "&Cancel" + IDC_ENGTORUS "Eng to Rus" + IDC_RUSTOENG "Rus to Eng" + IDC_SPATH "&Path :" + IDC_BROWSE "..." + IDC_SDIRECTORY "Directory" + IDC_FILES "&Files" + IDC_DIRECTORIES "&Directories" + IDC_SUBDIRECTORIES "&SubDirectories" + IDC_THISDIRECTORY "T&his Directory" + IDC_SFILE "File" + IDC_NAME "&Name" + IDC_ENTRY "&Entry" + IDC_MP3TAGS "&MP3 Tags" + IDC_SDIRECTION "Direction" + IDC_TRANSLATE "&Translate" + IDC_CLOSE "&Close" + IDC_SCLOSE "Close" + IDC_SMINIMIZE "Minimize" + IDC_SSTARTUP "StartUp" + IDC_CLOSEEXIT "E&xit" + IDC_CLOSETOTRAY "&To Tray" + IDC_MINIMIZENORMAL "&Normal" + IDC_MINIMIZETOTRAY "T&o Tray" + IDC_LOADONSTARTUP "&Load on StartUp" + IDC_TRAYICONSHOWN "Show when program is &shown" + IDC_TRAYICONHIDDEN "Show when program is &hidden" + IDC_ENGFONT "&English" + IDC_RUSFONT "&Russian" + IDC_SFONTS "Fonts" + IDC_STRAYICON "TrayIcon" + IDC_SHOTKEYS "Hot Keys" + IDC_SAUTOTRANSLATION "Auto Translation" + IDC_ACTION "Commands Menu\nEng to Rus\nRus to Eng\nAuto Translation\nShow Translit\nHide Translit\nInsert ""no translate""\nDelete ""no translate""\nCopy to Eng\nCopy to Rus\n" + IDC_SHOTKEY "&Hot Key :" + IDC_SACTION "&Action :" + ID_SHOW "Show" + ID_HIDE "Hide" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US+SUBLANG_LOC2 +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLIT "&Translit\n&Edit\n&No translate\n&Copy\n&View\n&Language\nL&ayout\n&Toos\n&Help" + IDR_TRAYICON "1\n&Language" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Translit_4/Translit.sln b/legacy/Translit_4/Translit.sln new file mode 100644 index 0000000..4e820cd --- /dev/null +++ b/legacy/Translit_4/Translit.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Translit", "Translit.vcproj", "{4B2A0742-85CB-4438-B2CF-519BBC27B0EA}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {4B2A0742-85CB-4438-B2CF-519BBC27B0EA}.Debug.ActiveCfg = Debug|Win32 + {4B2A0742-85CB-4438-B2CF-519BBC27B0EA}.Debug.Build.0 = Debug|Win32 + {4B2A0742-85CB-4438-B2CF-519BBC27B0EA}.Release.ActiveCfg = Release|Win32 + {4B2A0742-85CB-4438-B2CF-519BBC27B0EA}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Translit_4/Translit.vcproj b/legacy/Translit_4/Translit.vcproj new file mode 100644 index 0000000..656b88b --- /dev/null +++ b/legacy/Translit_4/Translit.vcproj @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Translit_4/TranslitCommandLine.h b/legacy/Translit_4/TranslitCommandLine.h new file mode 100644 index 0000000..527e9a3 --- /dev/null +++ b/legacy/Translit_4/TranslitCommandLine.h @@ -0,0 +1,40 @@ +#ifndef __TRANSLITCOMMANDLINE_H__ +#define __TRANSLITCOMMANDLINE_H__ + +#include "WindowState.h" + +typedef WindowState TranslitCommandLineInfo; + +class TranslitCommandLine : public NN::CommandLine +{ + struct ParseCommandLineStruct + { + TCHAR szCmdLine[10]; + CommandLineInfoType cmdInfo; + }; +public: + TranslitCommandLine() + { + SetCommandLine(GetCommandLine()); + ParseCommandLine(); + } + void ParseCommandLine() + { + static const ParseCommandLineStruct aParseCommandLine[]= + { + {_T("-min"),{SW_SHOWMINIMIZED}}, + {_T("-max"),{SW_SHOWMAXIMIZED}}, + {_T("-hide"),{SW_HIDE}} + }; + for(int i=1;i aEngRus(_MAX_CHAR); + + reFrom.GetTextEx((LPSTR)aEngRus.GetData(),(_MAX_CHAR-1)*sizeof(WCHAR),GT_DEFAULT,1200); + _Translit.TranslateW(aEngRus.GetData(),dir,_MAX_CHAR-1); + reTo.SetTextEx((LPCSTR)aEngRus.GetData(),ST_DEFAULT,1200); +} + +BOOL CTranslitDlg::Show() +{ + // Avoid problems with tray icon + { + NN::AutoSGRef sgTrayIconShown( + _Options.m_bTrayIconShown, + FALSE, + _Options.m_bTrayIconShown); + NN::AutoSGRef sgTrayIconHidden( + _Options.m_bTrayIconHidden, + FALSE, + _Options.m_bTrayIconHidden); + + if(!Create(NULL)) + return FALSE; + } + + TranslitCommandLine cmdLine; + + int nCmdShow; + + if(cmdLine.GetCommandLineInfo().IsDefault()) + nCmdShow=_Options.m_wndState.nCmdShow; + else // CmdLine + nCmdShow=cmdLine.GetCommandLineInfo().nCmdShow; + + if(nCmdShow==SW_HIDE) + HotKeyShowTranslit(false); + else + ShowWindow(nCmdShow); + + m_bShown=(bool)IsWindowVisible(); + UpdateTrayIcon(); + + return TRUE; +} + +void CTranslitDlg::CloseDialog() +{ + SaveRegistry(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void CTranslitDlg::SetOptionsFont() +{ + // Fonts + for(int i=0;i<2;i++) + { + HFONT hFont=::CreateFontIndirect(&_Options.m_lfEngRus[i]); + m_reEngRus[i].SetFont(hFont); + ::DeleteObject(hFont); + } +} + +void CTranslitDlg::SetOptions() +{ + SetOptionsFont(); + + // HotKeys + for(int i=0;i::CompareArrayLength(szClass,_T("RichEdit"),8)|| + !NN::ArrayTraits::CompareArrayLength(szClass,_T("RICHEDIT"),8)) + { + NN::AutoArray aEngRus(_MAX_CHAR); + CEdit wndTranslation=hWndTranslation; + + int nStart,nEnd; + wndTranslation.GetSel(nStart,nEnd); + + if(nStart==nEnd||(!nStart&&nEnd==-1)) + { + wndTranslation.SendMessage(WM_GETTEXT,_MAX_CHAR-1,(LPARAM)aEngRus.GetData()); + _Translit.Translate(aEngRus.GetData(),DefineDirection(dir,aEngRus.GetData()),_MAX_CHAR); + wndTranslation.SendMessage(WM_SETTEXT,0,(LPARAM)aEngRus.GetData()); + } + else + { + NN::AutoArray aText(_MAX_CHAR); + + wndTranslation.SendMessage(WM_GETTEXT,_MAX_CHAR-1,(LPARAM)aEngRus.GetData()); + for(int nItem=nStart;nItem spDoc; + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + if(LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, _T("ObjectFromLresult"))) + { + if(SUCCEEDED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + { + CComPtr spDisp; + CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + CComQIPtr spInput; + CComQIPtr spTA; + if(SUCCEEDED(spElem->QueryInterface(IID_IHTMLInputTextElement,(void**)&spInput))|| + SUCCEEDED(spElem->QueryInterface(IID_IHTMLTextAreaElement,(void**)&spTA))) + { + CComBSTR strText; + CComVariant v; + NN::AutoArray aText(_MAX_CHAR); + + if(spInput.p) + spInput->get_value(&strText); + else + spTA->get_value(&strText); + + for(int i=0;strText[i];i++) + aText[i]=strText[i]; + aText[i]=0; + _Translit.TranslateW(aText.GetData(),DefineDirection(dir,aText.GetData()),_MAX_CHAR); + v=aText.GetData(); + strText.Empty(); + v.CopyTo(&strText); + + if(spInput.p) + spInput->put_value(strText); + else + spTA->put_value(strText); + } + } + ::FreeLibrary(hOleAccInstance); + } // else Active Accessibility is not installed + } + // Window + else + { + NN::AutoArray aEngRus(_MAX_CHAR); + + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(_MAX_CHAR-1),(LPARAM)aEngRus.GetData()); + _Translit.Translate(aEngRus.GetData(),DefineDirection(dir,aEngRus.GetData()),_MAX_CHAR); + ::SendMessage(hWndTranslation,WM_SETTEXT,0,(LPARAM)aEngRus.GetData()); + } +} + +void CTranslitDlg::HotKeyShowTranslit(bool bShow) +{ + if(bShow) + ShowWindow(_Options.m_wndState.nCmdShow); + else + { + SaveWindowPlacement(); + ShowWindow(SW_HIDE); + } + m_bShown=(bool)IsWindowVisible(); + UpdateTrayIcon(); +} + +inline Translate::Direction CTranslitDlg::DefineDirection(Translate::Direction dir,LPCSTR szText) +{ + if(dir==Translate::dirAuto) + { + CHAR str[2]={szText[0]}; + EngRusType tuple(str,str); + unsigned u=_Translit.Find(tuple,0,0); + if(u!=(unsigned)-1) + return Translate::dirEngtoRus; + u=_Translit.Find(tuple,0,1); + if(u!=(unsigned)-1) + return Translate::dirRustoEng; + return _Options.m_nAutoTranslation; + } + else + return dir; +} + +inline Translate::Direction CTranslitDlg::DefineDirection(Translate::Direction dir,LPCWSTR szText) +{ + CHAR szTextA[2]; + ::WideCharToMultiByte(1251,0,szText,1,szTextA,1,NULL,NULL); + szTextA[1]=0; + return DefineDirection(dir,szTextA); +} + +void CTranslitDlg::InitControls() +{ + RECT rectEngRus[2]; + bool bCreated=m_reEngRus[0].m_hWnd&&m_reEngRus[1].m_hWnd; + NN::AutoSGRef sg(_Options.m_bTranslate,FALSE,_Options.m_bTranslate); + + // Save Position and Text + NN::AutoArray aEngRus[2]; + if(bCreated) + { + for(int i=0;i<2;i++) + { + // Position + m_reEngRus[i].GetWindowRect(rectEngRus+i); + ScreenToClient(&rectEngRus[i]); + // Text + aEngRus[i].Attach(new WCHAR[_MAX_CHAR]); + m_reEngRus[i].GetTextEx((LPSTR)aEngRus[i].GetData(),(_MAX_CHAR-1)*sizeof(WCHAR),GT_DEFAULT,1200); + // Destroy + m_reEngRus[i].DestroyWindow(); + } + } + else + { + for(int i=0;i<2;i++) + { + ::GetWindowRect(GetDlgItem(IDC_SENGPLACE+i),&rectEngRus[i]); + ScreenToClient(&rectEngRus[i]); + } + } + + // Create + DWORD dwStyle= + WS_TABSTOP| + WS_BORDER| + WS_CHILD| + WS_VISIBLE| + ES_WANTRETURN| + ES_MULTILINE| + WS_VSCROLL| + ES_AUTOVSCROLL; + + if(!_Options.m_bWrapText) + dwStyle|=WS_HSCROLL|ES_AUTOHSCROLL; + DWORD dwExStyle=0; + + for(int i=0;i<2;i++) + { + m_reEngRus[i]= + ::CreateWindowEx( + dwExStyle, + _T("RichEdit20A"), + _T(""), + dwStyle, + rectEngRus[i].left, + rectEngRus[i].top, + rectEngRus[i].right-rectEngRus[i].left, + rectEngRus[i].bottom-rectEngRus[i].top, + m_hWnd, + (HMENU)(IDC_ENG+i), + _Module.GetModuleInstance(),0 + ); + + if(!m_reEngRus[i].m_hWnd) + { + ShowError(m_hWnd,_T("Cannot create text box")); + return; + } + + m_reEngRus[i].SendMessage(EM_SETLIMITTEXT,(_MAX_CHAR-1),0); + m_reEngRus[i].SetEventMask(ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + if(bCreated) + m_reEngRus[i].SetTextEx((LPCSTR)aEngRus[i].GetData(),ST_DEFAULT,1200); + } + + SetOptionsFont(); +} + +void CTranslitDlg::InitMessageLoop() +{ + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + UIAddChildWindowContainer(m_hWnd); +} + +LRESULT CTranslitDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + InitControls(); + DialogIcon_Init(); + DialogStatusBar_Init(); + DialogLang_Init(); + DlgResize_Init(false,true); + + CenterWindow(); + + m_hAccel=::LoadAccelerators(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLIT)); + + InitTrayIcon(IDR_TRANSLIT, + ::LoadIcon(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLIT)), + IDR_TRAYICON); + + SetOptions(); + + InitMessageLoop(); + + return TRUE; +} + +LRESULT CTranslitDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled=FALSE; + WORD wMsg=LOWORD(wParam); + if(wMsg==SC_CLOSE&&_Options.m_nClose==Options::closeExit) + CloseDialog(); + else + if(LOWORD(wParam)==SC_CLOSE||LOWORD(wParam)==SC_MINIMIZE&&_Options.m_nMinimize==Options::minimizeToTray) + { + bHandled=TRUE; + ShowWindow(SW_MINIMIZE); + HotKeyShowTranslit(false); + } + else + if(LOWORD(wParam)==SC_RESTORE||LOWORD(wParam)==SC_MAXIMIZE) + { + bHandled=TRUE; + ShowWindow(LOWORD(wParam)==SC_RESTORE?SW_RESTORE:SW_SHOWMAXIMIZED); + m_bShown=true; + UpdateTrayIcon(); + } + bHandled=FALSE; + return 0; +} + +LRESULT CTranslitDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam-hkID) + { + case Options::hkCommandsMenu: + { + HMENU hMenu; + POINT pt; + ::GetCursorPos(&pt); + hMenu=::LoadMenu(_Module.GetModuleInstance(), + MAKEINTRESOURCE(IDR_TRAYICON)); + hMenu=::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + break; + case Options::hkEngtoRus: + HotKeyTranslation(Translate::dirEngtoRus); + break; + case Options::hkRustoEng: + HotKeyTranslation(Translate::dirRustoEng); + break; + case Options::hkAuto: + HotKeyTranslation(Translate::dirAuto); + break; + case Options::hkShow: + HotKeyShowTranslit(true); + break; + case Options::hkHide: + HotKeyShowTranslit(false); + break; + case Options::hkInsertNoTranslate: + break; + case Options::hkDeleteNoTranslate: + break; + case Options::hkCopyEng: + break; + case Options::hkCopyRus: + break; + } + return 0; +} + +LRESULT CTranslitDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CloseDialog(); + return 0; +} + +LRESULT CTranslitDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bAbout; + if(!bAbout) + { + NN::AutoSGRef sg(bAbout,true,false); + CAboutDlg().DoModal(); + } + return 0; +} + +LRESULT CTranslitDlg::OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=GetFocus(); + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + return 0; +} + +LRESULT CTranslitDlg::OnEditTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + _Options.m_bTranslate=!_Options.m_bTranslate; + Translate(GetFocus()==m_reEngRus[Eng]?Translate::dirEngtoRus:Translate::dirRustoEng); + return 0; +} + +LRESULT CTranslitDlg::OnEditNoTranslate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=GetFocus(); + + int nLen=re.GetTextLength(); + if(!nLen) + return 0; + nLen++; + + // Get Text + NN::AutoArray aText(nLen*2); + re.GetTextEx((LPSTR)aText.GetData(),nLen*sizeof(WCHAR),GT_DEFAULT,1200); + if(!aText.GetData()||!aText[0]) + return 0; + + // Translate + _Translit.NoTranslateW(aText.GetData(),nLen*2,re==m_reEngRus[Eng],wID==ID_EDIT_NOTRANSLATE_INSERT); + + // Set Text + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + + return 0; +} + + +LRESULT CTranslitDlg::OnEditCopyEngRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + NN::AutoSGRef sg(_Options.m_bTranslate,FALSE); + + bool b1= wID==ID_EDIT_COPY_ENGTORUS; + + CRichEditCtrl& reFrom=m_reEngRus[!b1]; + CRichEditCtrl& reTo=m_reEngRus[b1]; + + int nLen=reFrom.GetTextLength()+1; + NN::AutoArray aText(nLen); + reFrom.GetTextEx((LPSTR)aText.GetData(),nLen,GT_DEFAULT,1251); + reTo.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1251); + + return 0; +} + +LRESULT CTranslitDlg::OnViewLanguage(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + _LangID= wID==ID_VIEW_LANGUAGE_ENGLISH? + MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US): + MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT); + + UpdateLanguage(); + //m_dlgTranslation.UpdateLanguage(); + //m_dlgTranslation.UpdateTranslation(); + return 0; +} + +LRESULT CTranslitDlg::OnViewLayoutWrapScrollText(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==ID_VIEW_LAYOUT_WRAPTEXT) + _Options.m_bWrapText=!_Options.m_bWrapText; + else + _Options.m_bScrollText=!_Options.m_bScrollText; + + InitControls(); + + return 0; +} + +LRESULT CTranslitDlg::OnToolsTranslateFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTF; + if(!bTF) + { + NN::AutoSGRef sg(bTF,true,false); + CTranslateFilesDlg().DoModal(); + } + return 0; +} + +LRESULT CTranslitDlg::OnToolsOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bOptions; + if(!bOptions) + { + NN::AutoSGRef sg(bOptions,true,false); + COptionsSheet options; + if(options.DoModal()==IDOK) + SetOptions(); + } + return 0; +} + +LRESULT CTranslitDlg::OnEnChangeEngRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslate=false; + if(_Options.m_bTranslate&&!bTranslate) + { + NN::AutoSGRefT sg(bTranslate); + Translate(wID==IDC_ENG?Translate::dirEngtoRus:Translate::dirRustoEng); + } + return 0; +} + +LRESULT CTranslitDlg::OnEnMsgFilterEngRus(int /*code*/, NMHDR *pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + ::SetFocus(pnmhdr->hwndFrom); + HMENU hMenu; + POINT pt; + ::GetCursorPos(&pt); + hMenu=GetMenu(); + hMenu=::GetSubMenu(hMenu,1); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; +} + +LRESULT CTranslitDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + HotKeyShowTranslit(wID==ID_SHOW); + UpdateTrayIcon(); + return 0; +} \ No newline at end of file diff --git a/legacy/Translit_4/TranslitDlg.h b/legacy/Translit_4/TranslitDlg.h new file mode 100644 index 0000000..b6d3967 --- /dev/null +++ b/legacy/Translit_4/TranslitDlg.h @@ -0,0 +1,144 @@ +#ifndef __TRANSLITDLG_H__ +#define __TRANSLITDLG_H__ + +class CTranslitDlg : public CDialogImpl, + public CUpdateUI, + public CMessageFilter, + public CIdleHandler, + public CDialogResize, + public NN::TrayIcon, + public NN::DialogStatusBarMenu, + public NN::DialogIcon, + public NN::DialogLang +{ +public: + // Members + enum { IDD=IDR_TRANSLIT } ; + enum { Eng , Rus }; + + enum { hkID = 1000 }; + + HACCEL m_hAccel; + bool m_bShown; + bool m_bTrayIcon; + bool m_bDlg; + + CRichEditCtrl m_reEngRus[2]; + + CTranslitDlg(); + + // Virtual Functions + virtual BOOL PreTranslateMessage(MSG* pMsg); + virtual BOOL OnIdle(); + + // Functions + void Translate(Translate::Direction dir); + BOOL Show(); + void CloseDialog(); + + void SetOptionsFont(); + void SetOptions(); + + void SaveRegistry(); + void LoadRegistry(); + + void UpdateTrayIcon(); + void SaveWindowPlacement(); + + static HWND GetActiveWindowChild(); + void HotKeyTranslation(Translate::Direction dir); + void HotKeyShowTranslit(bool bShow); + + Translate::Direction DefineDirection(Translate::Direction dir,LPCSTR szText); + Translate::Direction DefineDirection(Translate::Direction dir,LPCWSTR szText); + + void InitControls(); + void InitMessageLoop(); + + // Maps + BEGIN_UPDATE_UI_MAP(CTranslitDlg) + UPDATE_ELEMENT(ID_EDIT_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_TRANSLATE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_ENGLISH,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_RUSSIAN,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LAYOUT_WRAPTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LAYOUT_SCROLLTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + END_UPDATE_UI_MAP() + + BEGIN_MSG_MAP(CTranslitDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + COMMAND_ID_HANDLER(ID_EDIT_TRANSLATE, OnEditTranslate) + COMMAND_ID_HANDLER(ID_EDIT_NOTRANSLATE_INSERT, OnEditNoTranslate) + COMMAND_ID_HANDLER(ID_EDIT_NOTRANSLATE_DELETE, OnEditNoTranslate) + COMMAND_ID_HANDLER(ID_EDIT_COPY_ENGTORUS, OnEditCopyEngRus) + COMMAND_ID_HANDLER(ID_EDIT_COPY_RUSTOENG, OnEditCopyEngRus) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_ENGLISH, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_RUSSIAN, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LAYOUT_WRAPTEXT, OnViewLayoutWrapScrollText) + COMMAND_ID_HANDLER(ID_VIEW_LAYOUT_SCROLLTEXT, OnViewLayoutWrapScrollText) + + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATEFILES, OnToolsTranslateFiles) + COMMAND_ID_HANDLER(ID_TOOLS_OPTIONS, OnToolsOptions) + + COMMAND_HANDLER(IDC_ENG, EN_CHANGE, OnEnChangeEngRus) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChangeEngRus) + NOTIFY_HANDLER(IDC_ENG, EN_MSGFILTER, OnEnMsgFilterEngRus) + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilterEngRus) + + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + + CHAIN_MSG_MAP(NN::DialogStatusBarMenu) + CHAIN_MSG_MAP(NN::TrayIcon) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(CUpdateUI) + END_MSG_MAP() + + BEGIN_DLGRESIZE_MAP(CTranslitDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_SSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_SENGTEXT, DLSZ_MOVE_Y) + DLGRESIZE_CONTROL(IDC_SRUSTEXT, DLSZ_MOVE_Y) + DLGRESIZE_CONTROL(IDC_ENG, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_RUS, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + // Map Functions + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAppAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCommands(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditNoTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCopyEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewLanguage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewLayoutWrapScrollText(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnToolsTranslateFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeEngRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterEngRus(int code, NMHDR* pnmhdr, BOOL& bHandled); + + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLITDLG_H__ \ No newline at end of file diff --git a/legacy/Translit_4/WindowState.h b/legacy/Translit_4/WindowState.h new file mode 100644 index 0000000..7ee2664 --- /dev/null +++ b/legacy/Translit_4/WindowState.h @@ -0,0 +1,15 @@ +#ifndef __WINDOWSTATE_H__ +#define __WINDOWSTATE_H__ + +struct WindowState +{ + int nCmdShow; + inline void Reset() + { nCmdShow=SW_SHOWNORMAL; } + inline const bool IsDefault() const + { return nCmdShow==SW_SHOWNORMAL; } + inline const bool operator==(const WindowState& state) const + { return nCmdShow==state.nCmdShow; } +}; + +#endif // __WINDOWSTATE_H__ \ No newline at end of file diff --git a/legacy/Translit_4/res/Translit.ico b/legacy/Translit_4/res/Translit.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Translit_4/res/Translit.ico differ diff --git a/legacy/Translit_4/resource.h b/legacy/Translit_4/resource.h new file mode 100644 index 0000000..ce3686c --- /dev/null +++ b/legacy/Translit_4/resource.h @@ -0,0 +1,87 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Translit.rc +// +#define IDR_TRANSLIT 101 +#define IDD_ABOUT 102 +#define IDD_GENERALPAGE 202 +#define IDD_TRANSLATEFILES 203 +#define IDD_LAYOUTPAGE 204 +#define IDD_HOTKEYSPAGE 205 +#define IDR_TRAYICON 207 +#define IDC_SENGPLACE 1000 +#define IDC_SRUSPLACE 1001 +#define IDC_SENGTEXT 1002 +#define IDC_SRUSTEXT 1003 +#define IDC_EMAIL 1004 +#define IDC_SITE 1005 +#define IDC_SABOUT 1006 +#define IDC_SABOUTTRANSLIT 1007 +#define IDC_ENG 1008 +#define IDC_RUS 1009 +#define IDC_ENGFONT 1010 +#define IDC_RUSFONT 1011 +#define IDC_SSEPARATOR 1012 +#define IDC_CLOSEEXIT 1013 +#define IDC_CLOSETOTRAY 1014 +#define IDC_MINIMIZENORMAL 1015 +#define IDC_MINIMIZETOTRAY 1016 +#define IDC_LOADONSTARTUP 1017 +#define IDC_SHOTKEYS 1018 +#define IDC_SAUTOTRANSLATION 1019 +#define IDC_ACTION 1020 +#define IDC_HOTKEYTRANSLIT 1021 +#define IDC_SCLOSE 1022 +#define IDC_SFONTS 1023 +#define IDC_SMINIMIZE 1024 +#define IDC_STRAYICON 1025 +#define IDC_SSTARTUP 1026 +#define IDC_TRAYICONSHOWN 1027 +#define IDC_TRAYICONHIDDEN 1028 +#define IDC_ENGTORUS 1029 +#define IDC_RUSTOENG 1030 +#define IDC_PATH 1031 +#define IDC_BROWSE 1032 +#define IDC_FILES 1033 +#define IDC_DIRECTORIES 1034 +#define IDC_SUBDIRECTORIES 1035 +#define IDC_THISDIRECTORY 1036 +#define IDC_NAME 1037 +#define IDC_ENTRY 1038 +#define IDC_MP3TAGS 1039 +#define IDC_TRANSLATE 1040 +#define IDC_CLOSE 1041 +#define IDC_SDIRECTION 1042 +#define IDC_SDIRECTORY 1043 +#define IDC_SPATH 1044 +#define IDC_SFILE 1045 +#define ID_SHOW 1046 +#define ID_HIDE 1047 +#define IDC_SACTION 1048 +#define IDC_SHOTKEY 1049 +#define ID_VIEW_LANGUAGE_ENGLISH 32791 +#define ID_VIEW_LANGUAGE_RUSSIAN 32792 +#define ID_EDIT_NOTRANSLATE_INSERT 32793 +#define ID_EDIT_NOTRANSLATE_DELETE 32794 +#define ID_VIEW_LAYOUT_WRAPTEXT 32795 +#define ID_VIEW_LAYOUT_SCROLLTEXT 32796 +#define ID_TOOLS_TRANSLATION 32797 +#define ID_TOOLS_TRANSLATEFILES 32798 +#define ID_TOOLS_OPTIONS 32799 +#define ID_EDIT_COPY_RUSTOENG 32803 +#define ID_EDIT_COPY_ENGTORUS 32804 +#define ID_EDIT_TRANSLATE 32808 +#define ID_Menu 32809 +#define IDS_ERROR 62000 +#define IDS_OPTIONS 62001 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 208 +#define _APS_NEXT_COMMAND_VALUE 32812 +#define _APS_NEXT_CONTROL_VALUE 1050 +#define _APS_NEXT_SYMED_VALUE 104 +#endif +#endif diff --git a/legacy/Translit_4/stdafx.cpp b/legacy/Translit_4/stdafx.cpp new file mode 100644 index 0000000..bcb421f --- /dev/null +++ b/legacy/Translit_4/stdafx.cpp @@ -0,0 +1,5 @@ +// stdafx.cpp : source file that includes just the standard includes +// Translit.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "StdAfx.h" diff --git a/legacy/Translit_4/stdafx.h b/legacy/Translit_4/stdafx.h new file mode 100644 index 0000000..fadc000 --- /dev/null +++ b/legacy/Translit_4/stdafx.h @@ -0,0 +1,74 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +#pragma once + +// Definitions +#define WINVER 0x0500 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS +#define _ATL_NO_COM +#define _ATL_NO_OLD_NAMES +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +//#define _ATL_ALL_WARNINGS +#define NN_WINDOWS + +#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning) + +// Language +#include +#define _LANG_R_ +extern LANGID _LangID; +extern const LANGID _LangIDDefault; +#define _LANG_LangID_ _LangID +#include + +// ATL / WTL +#include +#include +extern CAppModule _Module; +#include +#include +#include +#include +#include +#include + +// NN +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Program +#include "Error.h" +#include "Translate.h" +#include "Global.h" +#include "Options.h" +#include "Translit.h" + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) +#endif // _DEBUG + +#endif // __STDAFX_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/AboutDlg.h b/legacy/Transliterator_5.7/AboutDlg.h new file mode 100644 index 0000000..1ab4e90 --- /dev/null +++ b/legacy/Transliterator_5.7/AboutDlg.h @@ -0,0 +1,33 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +class CAboutDlg : public CDialogImpl, + public NN::DialogLang, + public NN::ToolWindow, + public NN::MessageFilterDlg +{ +public: + enum { IDD= IDD_ABOUT }; + typedef CAboutDlg thisClass; + + BEGIN_MSG_MAP(thisClass) + COMMAND_ID_HANDLER(IDC_EMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_SITE, OnSite) + CHAIN_MSG_MAP(NN::ToolWindow) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() + + LRESULT OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; + } + + LRESULT OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; + } +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Change.h b/legacy/Transliterator_5.7/Change.h new file mode 100644 index 0000000..6543e24 --- /dev/null +++ b/legacy/Transliterator_5.7/Change.h @@ -0,0 +1,16 @@ +#ifndef __CHANGE_H__ +#define __CHANGE_H__ + +inline size_t strcpy_change(char** out,const char* in) +{ + char** out_o=out; + while(*in) + { + **out=*in; + (*out)++; + in++; + } + return *out-*out_o; +} + +#endif // __CHANGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Controls.h b/legacy/Transliterator_5.7/Controls.h new file mode 100644 index 0000000..f70f85a --- /dev/null +++ b/legacy/Transliterator_5.7/Controls.h @@ -0,0 +1,31 @@ +#ifndef __CONTROLS_H__ +#define __CONTROLS_H__ + +inline void InitCmbLanguage(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageUser(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageDefUser(HWND hWnd,int nCurSel,const Language& rL) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + + +#endif // __CONTROLS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/DDXHotKey.h b/legacy/Transliterator_5.7/DDXHotKey.h new file mode 100644 index 0000000..44890af --- /dev/null +++ b/legacy/Transliterator_5.7/DDXHotKey.h @@ -0,0 +1,48 @@ +#ifndef __DDXHOTKEY_H__ +#define __DDXHOTKEY_H__ + +#define DDX_HOTKEY(nID,vk,fsModifiers) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,vk,fsModifiers,bSaveAndValidate); + +#define DDX_HOTKEY_C(nID,rHotKey,bConvert) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate,bConvert); + +#define DDX_HOTKEY_(nID,rHotKey) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate); + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,WORD& vk,WORD& fsModifiers,BOOL bSave) +{ + if(bSave) + { + WORD wHotKey=(WORD)::SendDlgItemMessage(hWnd,nID,HKM_GETHOTKEY,0,0); + vk=LOBYTE(wHotKey); + fsModifiers=HIBYTE(wHotKey); + } + else + ::SendDlgItemMessage(hWnd,nID,HKM_SETHOTKEY,(WPARAM)MAKEWORD(vk,fsModifiers),0); + return TRUE; +} + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,NN::HotKey& rHotKey,BOOL bSave,BOOL bConvert=TRUE) +{ + NN::HotKey hk=rHotKey; + if(bConvert) + hk.ConvertToHotKey(); + if(bSave) + { + BOOL bRet=DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); + if(bRet) + { + hk.ConvertToWnd(); + rHotKey=hk; + } + return bRet; + } + else + return DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); +} + +#endif // __DDXHOTKEY_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Error.h b/legacy/Transliterator_5.7/Error.h new file mode 100644 index 0000000..5f596b2 --- /dev/null +++ b/legacy/Transliterator_5.7/Error.h @@ -0,0 +1,22 @@ +#ifndef __ERROR_H____ +#define __ERROR_H____ + +#ifndef IDS_ERROR +#define IDS_ERROR 62000 +#define IDS_ERROR_DEFINED +#endif // !IDS_ERROR + +inline int ShowError(HWND hWnd, _U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return AtlMessageBox(hWnd,Text,Caption,uType); } + +inline int ShowError(_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return ShowError(NULL,Text,uType,Caption); } + +#ifdef IDS_ERROR_DEFINED +#undef IDS_ERROR +#undef IDS_ERROR_DEFINED +#endif // IDS_ERROR_DEFINED + +#endif // __ERROR_H____ diff --git a/legacy/Transliterator_5.7/GeneralPage.h b/legacy/Transliterator_5.7/GeneralPage.h new file mode 100644 index 0000000..ed8edc8 --- /dev/null +++ b/legacy/Transliterator_5.7/GeneralPage.h @@ -0,0 +1,77 @@ +#ifndef __GENERALPAGE_H__ +#define __GENERALPAGE_H__ + +#include "trnsoptionspage.h" + +class CGeneralPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEGENERAL }; + + void FontDialog(LPLOGFONT pLF) + { + CFontDialog fontdlg(pLF); + if(fontdlg.DoModal()==IDOK) + *pLF=fontdlg.m_lf; + } + + void UpdateFont() + { + char strFont[200]; + + HDC hDC = ::GetDC(NULL); + TEXTMETRIC tm; + ::GetTextMetrics(hDC,&tm); + for(int i=0;im_Options.m_lfFont[i]; + + wsprintf(strFont,"%s - %d", + lf.lfFaceName, + (int)(0 - + ( + (double) + MulDiv(lf.lfHeight, 72, + GetDeviceCaps(hDC, LOGPIXELSY)) - 0.5) + ) + ); + + if(lf.lfWeight>=FW_BOLD) + lstrcat(strFont," - Bold"); + if(lf.lfItalic) + lstrcat(strFont," - Italic"); + if(lf.lfUnderline) + lstrcat(strFont," - Underline"); + if(lf.lfStrikeOut) + lstrcat(strFont," - StrikeOut"); + + SetDlgItemText(IDC_FONTNAMETRNS+i,strFont); + } + ::ReleaseDC(NULL,hDC); + } + + BEGIN_DDX_MAP(CGeneralPage) + DDX_CHECK(IDC_SHOWTRAYICON,GetOptions()->m_Options.m_bShowTrayIcon) + DDX_CHECK(IDC_SHOWTASKBAR,GetOptions()->m_Options.m_bShowTaskBar) + DDX_CHECK(IDC_TOPMOST,GetOptions()->m_Options.m_bTopMost) + DDX_RADIO(IDC_LOADNO,(int&)GetOptions()->m_Options.m_nLoadOnStartUp) + if(bSaveAndValidate==DDX_LOAD) + UpdateFont(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CGeneralPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_ID_HANDLER(IDC_FONTTRNS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTRUS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTTRANSLATION,OnFont) + END_MSG_MAP() + + LRESULT OnFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + FontDialog(&GetOptions()->m_Options.m_lfFont[wID-IDC_FONTTRNS]); + UpdateFont(); + return 0; + } +}; + +#endif // __GENERALPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Global.cpp b/legacy/Transliterator_5.7/Global.cpp new file mode 100644 index 0000000..6e9e94b --- /dev/null +++ b/legacy/Transliterator_5.7/Global.cpp @@ -0,0 +1,8 @@ +#include "stdafx.h" + +CAppModule _Module; +Language g_Language; +LANGID g_LangID; +const LANGID g_LangIDDefault=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +Options g_Options; +Ignore g_Ignore; \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Global.h b/legacy/Transliterator_5.7/Global.h new file mode 100644 index 0000000..e5773a8 --- /dev/null +++ b/legacy/Transliterator_5.7/Global.h @@ -0,0 +1,13 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +extern CAppModule _Module; +extern Language g_Language; +extern LANGID g_LangID; +extern const LANGID g_LangIDDefault; +extern Options g_Options; +extern Ignore g_Ignore; + +#define MAX_SYMBOL 1000 + +#endif // __GLOBAL_H__ diff --git a/legacy/Transliterator_5.7/HotKeysPage.h b/legacy/Transliterator_5.7/HotKeysPage.h new file mode 100644 index 0000000..49004c7 --- /dev/null +++ b/legacy/Transliterator_5.7/HotKeysPage.h @@ -0,0 +1,53 @@ +#ifndef __HOTKEYSPAGE_H__ +#define __HOTKEYSPAGE_H__ + +#include "trnsoptionspage.h" +#include "ddxhotkey.h" + +class CHotKeysPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEHOTKEYS }; + + NN::AutoValue m_nCurSel; + + BEGIN_DDX_MAP(CHotKeysPage) + DDX_RADIO(IDC_TRNSTORUS,(int&)GetOptions()->m_Options.m_nAutoTransliteration) + if(bSaveAndValidate) + SaveHotKey(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_HANDLER(IDC_ACTION,CBN_SELCHANGE,OnCmbSelChangeAction) + END_MSG_MAP() + + void SaveHotKey() + { + if(m_nCurSel!=CB_ERR) + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hotkey.GetHotKey(hk.vk,hk.fsModifiers); + hk.ConvertToWnd(); + } + } + + void LoadHotKey() + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + m_nCurSel=SendDlgItemMessage(IDC_ACTION,CB_GETCURSEL,0,0); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hk.ConvertToHotKey(); + hotkey.SetHotKey(hk.vk,hk.fsModifiers); + } + + LRESULT OnCmbSelChangeAction(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SaveHotKey(); + LoadHotKey(); + return 0; + } +}; + +#endif // __HOTKEYSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Ignore.h b/legacy/Transliterator_5.7/Ignore.h new file mode 100644 index 0000000..cab0772 --- /dev/null +++ b/legacy/Transliterator_5.7/Ignore.h @@ -0,0 +1,38 @@ +#ifndef __IGNORE_H__ +#define __IGNORE_H__ + +class Ignore +{ + IgnoreMap m_map; +public: + unsigned GetLast() const { return m_map.GetLast(); } + + IgnoreType& GetAt(unsigned nItem) { return m_map[nItem]; } + const IgnoreType& GetAt(unsigned nItem) const { return m_map[nItem]; } + IgnoreType& operator[](unsigned nItem) { return GetAt(nItem); } + const IgnoreType& operator[](unsigned nItem) const { return GetAt(nItem); } + + void Add(const IgnoreType& t) { m_map.Add(t); } + void Remove(const IgnoreType& t) { m_map.Remove(t); } + void RemoveAt(unsigned nItem) { m_map.RemoveAt(nItem); } + void RemoveAll() { m_map.RemoveAll(); } + + void Reset() { m_map.RemoveAll(); } + + unsigned Find(const IgnoreType& t) { return m_map.Find(t); } + + const Ignore& operator=(const Ignore& ignore) + { + m_map.SetData(ignore.m_map); + return *this; + } + + bool operator!=(const Ignore& ignore) const + { return m_map.Compare(ignore.m_map); } + bool operator==(const Ignore& ignore) const + { return !operator!=(ignore); } +}; + + + +#endif // __IGNORE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/IgnorePage.h b/legacy/Transliterator_5.7/IgnorePage.h new file mode 100644 index 0000000..d69fff3 --- /dev/null +++ b/legacy/Transliterator_5.7/IgnorePage.h @@ -0,0 +1,188 @@ +#ifndef __IGNOREPAGE_H__ +#define __IGNOREPAGE_H__ + +#include "trnsoptionspage.h" + +class CIgnorePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEIGNORE }; + + CRichEditCtrl m_reIgnore; + CListBox m_lbIgnore; + enum { Trns , Rus }; + enum { nTrnsRus = 50 }; + enum { CP = 1251 }; + char m_strTrnsRus[2][nTrnsRus]; + + void UpdateLanguage() + { + TrnsOptionsPage::UpdateLanguage(); + UpdateTrnsRusString(); + InitListIgnore(); + } + + void UpdateTrnsRusString() + { + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); + } + + void InitListIgnore() + { + m_lbIgnore.ResetContent(); + char strText[IgnoreString::nCountInit+40]; + const Ignore& rIgnore=GetOptions()->m_Ignore; + for(unsigned i=0;i().GetData()); + if(rIgnore[i].Get<1>() != Translate::trnsNone) + { + lstrcat(strText," - "); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsTrnstoRus) + lstrcat(strText,m_strTrnsRus[Trns]); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsRustoTrns) + { + lstrcat(strText,","); + lstrcat(strText,m_strTrnsRus[Rus]); + } + } + m_lbIgnore.AddString(strText); + } + } + + void Init() + { + InitListIgnore(); + m_reIgnore.SetWindowText(""); + CheckDlgButton(IDC_TRNSTORUS,FALSE); + CheckDlgButton(IDC_RUSTOTRNS,FALSE); + } + + unsigned FindIgnore(const char* str) + { + static const Translate::LangTranslate aMapLT[]= + { + Translate::trnsNone, + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsAll, + }; + + IgnoreType type; + type.Get<0>()=str; + + for(int i=0;i()=aMapLT[i]; + unsigned uFind=GetOptions()->m_Ignore.Find(type); + if(uFind!=(unsigned)-1) + return uFind; + } + return (unsigned)-1; + } + + BEGIN_DDX_MAP(CIgnorePage) + if(!bSaveAndValidate) + { + Init(); + } + END_DDX_MAP() + + BEGIN_MSG_MAP(CIgnorePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_LISTIGNORE,LBN_SELCHANGE, OnLbnSelChangeListIgnore) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_CLEAR, OnAddRemoveClear) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_lbIgnore=GetDlgItem(IDC_LISTIGNORE); + m_reIgnore=GetDlgItem(IDC_IGNORE); + SendDlgItemMessage(IDC_IGNORE,EM_LIMITTEXT,(WPARAM)IgnoreString::nCountInit-1,0); + UpdateTrnsRusString(); + + return 0; + } + + LRESULT OnLbnSelChangeListIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + char strText[IgnoreString::nCountInit]; + wchar_t strTextW[IgnoreString::nCountInit]; + + IgnoreType& type=GetOptions()->m_Ignore[m_lbIgnore.GetCurSel()]; + lstrcpy(strText,type.Get<0>().GetData()); + + ::MultiByteToWideChar(CP,0,strText,IgnoreString::nCountInit-1,strTextW,IgnoreString::nCountInit-1); + + m_reIgnore.SetTextEx((LPCSTR)strTextW,ST_DEFAULT,1200); + + CheckDlgButton(IDC_TRNSTORUS,type.Get<1>()&Translate::trnsTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,type.Get<1>()&Translate::trnsRustoTrns); + + return 0; + } + + LRESULT OnAddRemoveClear(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Ignore& rIgnore=GetOptions()->m_Ignore; + switch(wID) + { + case IDC_ADD: + { + IgnoreType type; + + wchar_t wstr[IgnoreString::nCountInit]; + m_reIgnore.GetTextEx((LPSTR)wstr,(IgnoreString::nCountInit-1)*sizeof(wchar_t),GT_DEFAULT,1200); + if(!wstr[0]) + break; + + ::WideCharToMultiByte(CP,0,wstr,IgnoreString::nCountInit-1,type.Get<0>().GetData(), + IgnoreString::nCountInit-1,0,0); + + unsigned uFind=FindIgnore(type.Get<0>().GetData()); + if(uFind!=(unsigned)-1) + { + rIgnore[uFind].Get<0>()=type.Get<0>(); + Translate::LangTranslate& lt=rIgnore[uFind].Get<1>(); + lt=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)lt|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)lt|= (int)Translate::trnsRustoTrns; + } + else + { + type.Get<1>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<1>()|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<1>()|= (int)Translate::trnsRustoTrns; + rIgnore.Add(type); + } + } + break; + case IDC_REMOVE: + { + unsigned cursel = (unsigned)m_lbIgnore.GetCurSel(); + if(cursel!=(unsigned)LB_ERR) + rIgnore.RemoveAt(cursel); + } + break; + case IDC_CLEAR: + rIgnore.RemoveAll(); + break; + } + InitListIgnore(); + + return 0; + } +}; + +#endif // __IGNOREPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/LangProfile.h b/legacy/Transliterator_5.7/LangProfile.h new file mode 100644 index 0000000..fbb724b --- /dev/null +++ b/legacy/Transliterator_5.7/LangProfile.h @@ -0,0 +1,19 @@ +#ifndef __LANGPROFILE_H___ +#define __LANGPROFILE_H___ + +#include "types.h" + +struct LangProfile +{ + // Map + LangMap m_map; + // Name + enum { nName = 15 }; + char m_strName[nName]; + // Ignore + enum BeginEnd { BeginTrns, EndTrns, BeginRus, EndRus, nBeginEnd }; + enum { nIgnore = 4 }; + char m_strIgnore[nBeginEnd][nIgnore]; +}; + +#endif // __LANGPROFILE_H___ diff --git a/legacy/Transliterator_5.7/LangStruct.h b/legacy/Transliterator_5.7/LangStruct.h new file mode 100644 index 0000000..05c8822 --- /dev/null +++ b/legacy/Transliterator_5.7/LangStruct.h @@ -0,0 +1,136 @@ +#ifndef __LANGSTRUCT_H___ +#define __LANGSTRUCT_H___ + +#include "types.h" +#include "langprofile.h" + +struct LangStruct +{ + enum { CP = 1251 }; +private: + // In + char* m_strIn; + wchar_t* m_strInW; + // Out + char* m_strOut; + + // Translate + Translate::Direction m_dir; + // Ignore + bool m_bInsert; + bool m_bTrns; + + size_t m_nChar; + + const LangProfile* m_pProfile; + + // Helper + bool m_bOut; + bool m_bWide; +public: + LangStruct(const char* strIn,char* strOut,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strIn(const_cast(strIn)), + m_strOut(strOut), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + LangStruct(const char* strIn,char* strOut,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(const_cast(strIn)), + m_strOut(strOut), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + ~LangStruct() + { Destroy(); } + + void Init() + { + // nChar + if(!m_nChar) + m_nChar=m_bWide?(size_t)lstrlenW(m_strInW):(size_t)lstrlenA(m_strIn); + // Wide + if(m_bWide) + { + m_strIn=new char[m_nChar+1]; + ::WideCharToMultiByte(CP,0,m_strInW,m_nChar+1,m_strIn,m_nChar+1,0,0); + } + // Out + m_bOut= !m_strOut; + if(m_bOut) + m_strOut=new char[m_nChar*LangString::nCountInit+1]; + } + + void Destroy() + { + if(m_bOut) + { + lstrcpyn(m_strIn,m_strOut,m_nChar); + delete[] m_strOut; + } + if(m_bWide) + { + ::MultiByteToWideChar(CP,0,m_strIn,m_nChar+1,m_strInW,m_nChar+1); + delete[] m_strIn; + } + } + + inline const char* GetIn() const { return m_strIn; } + inline char* GetOut() const { return m_strOut; } + inline Translate::Direction GetDirection() const { return m_dir; } + inline size_t GetCharCount() const { return m_nChar; } + inline const LangProfile* GetProfile() const { return m_pProfile; } + inline void SetProfile(const LangProfile* pProfile) const + { (const_cast(this))->m_pProfile=pProfile; } + inline bool IsTrns() const { return m_bTrns; } + inline bool GetInsert() const { return m_bInsert; } + + inline bool Empty() const { return !m_pProfile->m_map.GetLast()||!*m_strIn||!m_nChar; } + inline void Clear() const { GetOut()[0]=0; } +}; + +#endif // __LANGSTRUCT_H___ diff --git a/legacy/Transliterator_5.7/Language.cpp b/legacy/Transliterator_5.7/Language.cpp new file mode 100644 index 0000000..07d06cd --- /dev/null +++ b/legacy/Transliterator_5.7/Language.cpp @@ -0,0 +1,869 @@ +#include "stdafx.h" +#include "language.h" + +void Language::ResetStandard(LangProfile& profile) +{ + // Map + static const LangType defMap[]= + { + LangType("a","",Translate::trnsAll), + LangType("A","",Translate::trnsAll), + LangType("b","",Translate::trnsAll), + LangType("B","",Translate::trnsAll), + LangType("c","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("ch","",Translate::trnsAll), + LangType("cH","",Translate::trnsTrnstoRus), + LangType("CH","",Translate::trnsAll), + LangType("Ch","",Translate::trnsTrnstoRus), + LangType("d","",Translate::trnsAll), + LangType("D","",Translate::trnsAll), + LangType("e","",Translate::trnsAll), + LangType("E","",Translate::trnsAll), + LangType("e'","",Translate::trnsAll), + LangType("E'","",Translate::trnsAll), + LangType("e`","",Translate::trnsAll), + LangType("E`","",Translate::trnsAll), + LangType("e''","",Translate::trnsAll), + LangType("E''","",Translate::trnsAll), + LangType("f","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("g","",Translate::trnsAll), + LangType("G","",Translate::trnsAll), + LangType("g'`","",Translate::trnsAll), + LangType("g`'","",Translate::trnsTrnstoRus), + LangType("G'`","",Translate::trnsAll), + LangType("G`'","",Translate::trnsTrnstoRus), + LangType("h","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("i","",Translate::trnsAll), + LangType("I","",Translate::trnsAll), + LangType("i'","",Translate::trnsAll), + LangType("I'","",Translate::trnsAll), + LangType("i`","",Translate::trnsAll), + LangType("I`","",Translate::trnsAll), + LangType("j","",Translate::trnsAll), + LangType("J","",Translate::trnsAll), + LangType("k","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("l","",Translate::trnsAll), + LangType("L","",Translate::trnsAll), + LangType("m","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + LangType("n","",Translate::trnsAll), + LangType("N","",Translate::trnsAll), + LangType("o","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("p","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("q","",Translate::trnsTrnstoRus), + LangType("Q","",Translate::trnsTrnstoRus), + LangType("r","",Translate::trnsAll), + LangType("R","",Translate::trnsAll), + LangType("s","",Translate::trnsAll), + LangType("S","",Translate::trnsAll), + LangType("sh","",Translate::trnsAll), + LangType("sH","",Translate::trnsTrnstoRus), + LangType("SH","",Translate::trnsAll), + LangType("Sh","",Translate::trnsTrnstoRus), + LangType("sh''","",Translate::trnsTrnstoRus), + LangType("sH''","",Translate::trnsTrnstoRus), + LangType("Sh''","",Translate::trnsTrnstoRus), + LangType("SH''","",Translate::trnsTrnstoRus), + LangType("sch'","",Translate::trnsAll), + LangType("sCh'","",Translate::trnsTrnstoRus), + LangType("scH'","",Translate::trnsTrnstoRus), + LangType("sCH'","",Translate::trnsTrnstoRus), + LangType("Sch'","",Translate::trnsTrnstoRus), + LangType("SCh'","",Translate::trnsTrnstoRus), + LangType("ScH'","",Translate::trnsTrnstoRus), + LangType("SCH'","",Translate::trnsAll), + LangType("t","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("tc'","",Translate::trnsTrnstoRus), + LangType("tC'","",Translate::trnsTrnstoRus), + LangType("Tc'","",Translate::trnsTrnstoRus), + LangType("TC'","",Translate::trnsTrnstoRus), + LangType("u","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("u'","",Translate::trnsAll), + LangType("U'","",Translate::trnsAll), + LangType("v","",Translate::trnsAll), + LangType("V","",Translate::trnsAll), + LangType("w","",Translate::trnsTrnstoRus), + LangType("W","",Translate::trnsTrnstoRus), + LangType("w''","",Translate::trnsTrnstoRus), + LangType("W''","",Translate::trnsTrnstoRus), + LangType("x","",Translate::trnsTrnstoRus), + LangType("X","",Translate::trnsTrnstoRus), + LangType("y","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("ya","",Translate::trnsAll), + LangType("yA","",Translate::trnsTrnstoRus), + LangType("YA","",Translate::trnsAll), + LangType("Ya","",Translate::trnsTrnstoRus), + LangType("yu","",Translate::trnsAll), + LangType("yU","",Translate::trnsTrnstoRus), + LangType("YU","",Translate::trnsAll), + LangType("Yu","",Translate::trnsTrnstoRus), + LangType("y'","",Translate::trnsAll), + LangType("Y'","",Translate::trnsAll), + LangType("z","",Translate::trnsAll), + LangType("Z","",Translate::trnsAll), + LangType("'","",Translate::trnsAll), + LangType("''","",Translate::trnsAll), + LangType("`","",Translate::trnsAll), + LangType("``","",Translate::trnsAll), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="Standard"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i|<","",Translate::trnsAll), + LangType("}|{","",Translate::trnsAll), + LangType(">-|-<","",Translate::trnsRustoTrns), + LangType("}-|-{","",Translate::trnsTrnstoRus), + LangType("3","",Translate::trnsAll), + LangType("3","",Translate::trnsRustoTrns), + LangType("u","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("u'","",Translate::trnsAll), + LangType("U'","",Translate::trnsAll), + LangType("u`","",Translate::trnsTrnstoRus), + LangType("U`","",Translate::trnsTrnstoRus), + LangType("k","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("/\\","",Translate::trnsAll), + LangType("JI","",Translate::trnsAll), + LangType("m","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("H","",Translate::trnsRustoTrns), + LangType("o","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("n","",Translate::trnsAll), + LangType("n","",Translate::trnsRustoTrns), + LangType("p","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("c","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("T","",Translate::trnsRustoTrns), + LangType("y","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("f","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("<|>","",Translate::trnsAll), + LangType("","",Translate::trnsAll), + LangType("x","",Translate::trnsAll), + LangType("X","",Translate::trnsAll), + LangType("L|","",Translate::trnsAll), + LangType("L|","",Translate::trnsRustoTrns), + LangType("4","",Translate::trnsAll), + LangType("4","",Translate::trnsRustoTrns), + LangType("LLI","",Translate::trnsAll), + LangType("w","",Translate::trnsAll), + LangType("LL|","",Translate::trnsAll), + LangType("LL|","",Translate::trnsRustoTrns), + LangType("\\","",Translate::trnsAll), + LangType("\\\\","",Translate::trnsRustoTrns), + LangType("bI","",Translate::trnsAll), + LangType("bI","",Translate::trnsRustoTrns), + LangType("b","",Translate::trnsAll), + LangType("b","",Translate::trnsRustoTrns), + LangType("e","",Translate::trnsRustoTrns), + LangType("E","",Translate::trnsRustoTrns), + LangType("IO","",Translate::trnsAll), + LangType("IO","",Translate::trnsRustoTrns), + LangType("I-O","",Translate::trnsTrnstoRus), + LangType("I-O","",Translate::trnsRustoTrns), + LangType("9I","",Translate::trnsAll), + LangType("9I","",Translate::trnsRustoTrns), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="Symbols"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i","",Translate::trnsAll), + LangType("/",".",Translate::trnsAll), + LangType("?",",",Translate::trnsAll), + LangType("Q","",Translate::trnsAll), + LangType("W","",Translate::trnsAll), + LangType("E","",Translate::trnsAll), + LangType("R","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("I","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("A","",Translate::trnsAll), + LangType("S","",Translate::trnsAll), + LangType("D","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("G","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("J","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("L","",Translate::trnsAll), + LangType("Z","",Translate::trnsAll), + LangType("X","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("V","",Translate::trnsAll), + LangType("B","",Translate::trnsAll), + LangType("N","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="QWER-"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i aInIgnore; + + const int i1= ls.GetDirection()==Translate::dirRusToTrns; + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + const char* pFromOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + // Lenth array + size_t aLen[LangMap::nCountInit]; + size_t maxlen=0; + for(size_t i=0;im_map.GetLast();i++) + { + aLen[i]=((LangString*)ls.GetProfile()->m_map[i].Get(i1))->GetLength(); + + if(maxlen().GetLength(); + + if(maxlenI=ls.GetCharCount()) + break; + pIn+=nToIn; + + // Copy Ignore + if(g_Options.m_bCopyIgnore) + iChar+=strcpy_change(&pOut,pToOut); + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + } + // Ignore + for(size_t lenI=maxlenI;lenI;lenI--) + { + for(size_t nItem=0;nItem(); + if(ls.GetDirection()==Translate::dirTrnstoRus) + { + if(!(trnsItem&Translate::trnsTrnstoRus)) + continue; + } + else + { + if(!(trnsItem&Translate::trnsRustoTrns)) + continue; + } + + if(aLenI[nItem] == lenI&& + !LangStringTraits::CompareArrayLength(pIn, + g_Ignore[nItem].Get<0>().GetData(),lenI)) + { + strcpy_change(&pOut,g_Ignore[nItem].Get<0>().GetData()); + pIn+=lenI; + iChar+=lenI; + goto lNext; + } + } + } + // Translate + for(size_t len=maxlen;len;len--) + { + for(size_t nItem=0;nItemm_map.GetLast();nItem++) + { + // Translate::LangTranslate + const Translate::LangTranslate& trnsItem=ls.GetProfile()->m_map[nItem].Get<2>(); + if(ls.GetDirection()==Translate::dirTrnstoRus) + { + if(!(trnsItem&Translate::trnsTrnstoRus)) + continue; + } + else + { + if(!(trnsItem&Translate::trnsRustoTrns)) + continue; + } + if(aLen[nItem] == len && + !LangStringTraits::CompareArrayLength(pIn, + ((LangString*)ls.GetProfile()->m_map[nItem].Get(i1))->GetData(),len)) + { + LangString* pString=(LangString*)ls.GetProfile()->m_map[nItem].Get(!i1); + strcpy_change(&pOut,pString->GetData()); + pIn+=len; + iChar+=len; + goto lNext; + } + } + } + *pOut++=*pIn++; + lNext:; + } + // End + *pOut=0; +} + +void Language::Ignore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + // Empty + if(ls.Empty()) + { + ls.Clear(); + return; + } + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + const char* pFromOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + NN::Tuple aCheck[LangMap::nCountInit]; + UpdateCheck(ls.GetProfile(),aCheck); + + if(ls.GetInsert()) + { + bool bInsert=false; + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + // Text + if(IsTrnsRus(*pIn,ls.IsTrns(),aCheck)) + { + bInsert=true; + + strcpy_change(&pOut,pFromOut); + + while(*pIn&& + (IsTrnsRus(*pIn,ls.IsTrns(),aCheck)|| + (!IsTrns(*pIn,aCheck)&&!IsRus(*pIn,aCheck)))&& + iChar=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + *pOut++=*pIn++; + } + if(bInsert) + strcpy_change(&pOut,pToOut); + } + else + { + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + if(!LangStringTraits::CompareArrayLength( + pIn,pToIn,LangProfile::nIgnore)) + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + } + *pOut++=*pIn++; + } + } + *pOut=0; +} + +void Language::SetIgnore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + if(ls.GetInsert()) + { + bool bFrom=true; + lstrcpy(pOut,pIn); + + for(size_t iChar=0;*pIn&&iChar TupleCharChar; + template + bool FindCheck_(char c,TupleCharChar* paCheck) + { + while(paCheck->Get()) + if((paCheck++)->Get()==c) + return true; + return false; + } + + inline bool FindCheck(char c,bool bTrns,TupleCharChar* paCheck) + { return bTrns?FindCheck_<0>(c,paCheck):FindCheck_<1>(c,paCheck); } + + void UpdateCheck(const LangProfile* pProfile,TupleCharChar* paCheck) + { + for(size_t i=0;im_map.GetCount();i++) + { + paCheck[i].Get<0>()=pProfile->m_map[i].Get<0>().GetAt(0); + paCheck[i].Get<1>()=pProfile->m_map[i].Get<1>().GetAt(0); + } + } + + bool IsTrnsRus(CHAR c,bool bTrns,TupleCharChar* paCheck) + { return FindCheck(c,bTrns,paCheck); } + + bool IsTrns(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,true,paCheck); } + + bool IsRus(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,false,paCheck); } +public: + const Language& operator=(const Language& src) + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName); + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j]); + + // Map + pProfile->m_map.SetData(pProfileR->m_map); + } + return *this; + } + + bool operator!=(const Language& language) const + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName)) + return true; + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j])) + return true; + + // Map + if(pProfile->m_map.Compare(pProfileR->m_map)) + return true; + } + return false; + } + bool operator==(const Language& language) const + { return !operator!=(language); } + + typedef void (*ResetFunc)(LangProfile&); + static ResetFunc m_aResetFunc[nProfiles]; +}; + +#endif // __LANGUAGE_H__ diff --git a/legacy/Transliterator_5.7/Msg.h b/legacy/Transliterator_5.7/Msg.h new file mode 100644 index 0000000..d0d2881 --- /dev/null +++ b/legacy/Transliterator_5.7/Msg.h @@ -0,0 +1,6 @@ +#ifndef __MSG_H__ +#define __MSG_H__ + +#define WM_APPLY (WM_USER+1) + +#endif // __MSG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Options.h b/legacy/Transliterator_5.7/Options.h new file mode 100644 index 0000000..11b8183 --- /dev/null +++ b/legacy/Transliterator_5.7/Options.h @@ -0,0 +1,111 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#include "windowstate.h" + +struct Options +{ + enum { Trns , Rus }; + + BOOL m_bTranslate; + WindowState m_wndState; + + BOOL m_bShowTrayIcon; + BOOL m_bShowTaskBar; + BOOL m_bTopMost; + enum LoadOnStartUp + { + loadNo, + loadShown, + loadHidden + }; + LoadOnStartUp m_nLoadOnStartUp; + + enum Fonts + { + fontTrns, + fontRus, + fontTranslation, + nFont + }; + LOGFONT m_lfFont[nFont]; + + enum HotKeys + { + hkTrnstoRus, + hkRusEndTrns, + hkAuto, + hkShowHide, + hkCopyTrns, + hkCopyRus, + nHotKey + }; + NN::HotKey m_HotKey[nHotKey]; + + BOOL m_bCopyIgnore; + Translate::Direction m_nAutoTranslation; + + BOOL m_bWrapText; + BOOL m_bScrollText; + + UINT m_nCurProfile; + + BOOL m_bIgnore; + + void Reset() + { + m_bTranslate=TRUE; + m_wndState.Reset(); + + m_bShowTrayIcon=FALSE; + m_bShowTaskBar=TRUE; + m_bTopMost=FALSE; + m_nLoadOnStartUp=loadNo; + + m_HotKey[hkTrnstoRus].SetHotKey('T',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkRusEndTrns].SetHotKey('R',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkAuto].SetHotKey('A',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkShowHide].SetHotKey('S',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyTrns].SetHotKey('C',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyRus].SetHotKey('O',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + + // Fonts + LOGFONT lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-14; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTrns]=lfCommon; + m_lfFont[fontRus]=lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-10; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTranslation]=lfCommon; + + m_bCopyIgnore=FALSE; + m_nAutoTranslation=Translate::dirTrnstoRus; + + m_bWrapText=TRUE; + m_bScrollText=TRUE; + + m_nCurProfile=0; + + m_bIgnore=TRUE; + } + + const Options& operator=(const Options& options) + { + memcpy(this,&options,sizeof(Options)); + return *this; + } + + bool operator==(const Options& options) const + { return !operator!=(options); } + bool operator!=(const Options& options) const + { return memcmp(this,&options,sizeof(Options)); } +}; + +#endif // __OPTIONS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/OptionsDlg.h b/legacy/Transliterator_5.7/OptionsDlg.h new file mode 100644 index 0000000..9e0d784 --- /dev/null +++ b/legacy/Transliterator_5.7/OptionsDlg.h @@ -0,0 +1,166 @@ +#ifndef __OPTIONSDLG_H__ +#define __OPTIONSDLG_H__ + +#include "generalpage.h" +#include "hotkeyspage.h" +#include "profilepage.h" +#include "ignorepage.h" + +class COptionsDlg : public NN::OptionsDialogImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_OPTIONS }; + + NN::AutoValue m_nCurPage; + CListBox m_ctrlOptions; + + CGeneralPage m_pageGeneral; + CHotKeysPage m_pageHotKeys; + CProfilePage m_pageProfile; + CIgnorePage m_pageIgnore; + + void UpdateLanguage() + { + NN::DialogLang::UpdateLanguage(); + + m_pageGeneral.UpdateLanguage(); + m_pageHotKeys.UpdateLanguage(); + m_pageProfile.UpdateLanguage(); + m_pageIgnore.UpdateLanguage(); + + InitListOptions(); + } + + void InitListOptions() + { + for(int i=0;i + void UpdateChange(T& t,const T& tc,BOOL& bChange) + { + if(t!=tc) + { + t=tc; + bChange=TRUE; + } + } + + void Apply() + { + DoDataExchange(DDX_SAVE); + + BOOL bChangeTranslation=FALSE; + BOOL bChangeOptions=FALSE; + + UpdateChange(g_Language,GetOptions()->m_Language,bChangeTranslation); + UpdateChange(g_Ignore,GetOptions()->m_Ignore,bChangeTranslation); + UpdateChange(g_Options,GetOptions()->m_Options,bChangeOptions); + + ::SendMessage(GetParent(),WM_APPLY,(WPARAM)bChangeTranslation,(LPARAM)bChangeOptions); + } + + void InitOptionsPage() + { + GetOptions()->Set(g_Language,g_Options,g_Ignore); + SetOptionsPage(); + DoDataExchange(DDX_LOAD); + } + + BEGIN_MSG_MAP(COptionsDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + + COMMAND_ID_HANDLER(IDOK, OnOK) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDC_APPLY, OnApply) + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + + COMMAND_HANDLER(IDC_LISTOPTIONS, LBN_SELCHANGE, OnSelChangeListOptions) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DialogLang_Init(); + m_ctrlOptions=GetDlgItem(IDC_LISTOPTIONS); + + // Create + m_pageGeneral.Create(m_hWnd); + m_pageHotKeys.Create(m_hWnd); + m_pageProfile.Create(m_hWnd); + m_pageIgnore.Create(m_hWnd); + + AddPage(&m_pageGeneral); + AddPage(&m_pageHotKeys); + AddPage(&m_pageProfile); + AddPage(&m_pageIgnore); + + // Prepare Move Window + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_SDLGPLACE),&rect); + ScreenToClient(&rect); + // Move Window + for(int i=0;iMoveWindow(&rect); + + InitListOptions(); + InitOptionsPage(); + + SetCurrentPage(0); + + return 0; + } + + LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DestroyOptions(); + return 0; + } + + LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + if(!wParam) + InitOptionsPage(); + + return 0; + } + + LRESULT OnOK(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + CloseDialog(); + return 0; + } + + LRESULT OnApply(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetOptions()->Reset(); + DoDataExchange(DDX_LOAD); + return 0; + } + + LRESULT OnSelChangeListOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SetCurrentPage(m_ctrlOptions.GetCurSel()); + return 0; + } +}; + +#endif // __OPTIONSDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/OptionsStruct.h b/legacy/Transliterator_5.7/OptionsStruct.h new file mode 100644 index 0000000..e634b54 --- /dev/null +++ b/legacy/Transliterator_5.7/OptionsStruct.h @@ -0,0 +1,40 @@ +#ifndef __OPTIONSSTRUCT_H__ +#define __OPTIONSSTRUCT_H__ + +struct OptionsStruct +{ + Language m_Language; + Options m_Options; + Ignore m_Ignore; + + void Set(Language& rL,Options& rO,Ignore& rI) + { + Set(rL); + Set(rO); + Set(rI); + } + + void Set(Language& r) { m_Language=r; } + void Set(Options& r) { m_Options=r; } + void Set(Ignore& r) { m_Ignore=r; } + + void Get(Language& rL,Options& rO,Ignore& rI) + { + Get(rL); + Get(rO); + Get(rI); + } + + void Get(Language& r) { r=m_Language; } + void Get(Options& r) { r=m_Options; } + void Get(Ignore& r) { r=m_Ignore; } + + void Reset() + { + m_Language.ResetUser(); + m_Options.Reset(); + m_Ignore.Reset(); + } +}; + +#endif // __OptionsStruct_H__ diff --git a/legacy/Transliterator_5.7/ProfilePage.h b/legacy/Transliterator_5.7/ProfilePage.h new file mode 100644 index 0000000..b779407 --- /dev/null +++ b/legacy/Transliterator_5.7/ProfilePage.h @@ -0,0 +1,517 @@ +#ifndef __PROFILEPAGE_H__ +#define __PROFILEPAGE_H__ + +#include "trnsoptionspage.h" + +class CProfilePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEPROFILE }; + + int m_nCurSel; + CComboBox m_cmbTrnsRus[2]; + CComboBox m_cmbProfile; + enum { Trns , Rus }; + + enum Use { useNone, useEng, useRus }; + NN::AutoValue m_nUse; + + Language& GetLanguage() + { return GetOptions()->m_Language; } + LangProfile* GetProfile(int nProfile) + { + return nProfile::UpdateLanguage(); + InitProfile(); + } + + typedef NN::StaticArray LangStringArray; + + void SetTrnsRus(bool b1,const char* strText=NULL) + { + LangStringArray aLangString; + + int iCmb; + unsigned last=0; + + if(strText) + { + iCmb=b1; + LangString lstr(strText); + + for(unsigned nItem=0;nItemm_map.GetLast();nItem++) + { + if(lstr==*(LangString*)GetProfile()->m_map[nItem].Get(b1)) + aLangString[last++]=*(LangString*)GetProfile()->m_map[nItem].Get(!b1); + } + iCmb=!b1; + } + else + { + for(unsigned i=0;im_map.GetLast();i++) + { + LangString* plstr = (LangString*)GetProfile()->m_map[i].Get(b1); + if(aLangString.Find(*plstr)==(unsigned)-1) + aLangString[last++]=*plstr; + } + iCmb=b1; + } + + if(last) + aLangString.Sort(true,last-1); + + m_cmbTrnsRus[iCmb].ResetContent(); + + for(unsigned i=0;im_strIgnore[i]); + } + + void SaveIgnore() + { + for(int i=0;im_strIgnore[i],LangProfile::nIgnore-1); + } + + void UpdateCheck(const LangType* pType) + { + BOOL bEnable=FALSE; + BOOL bTrnstoRus=FALSE; + BOOL bRustoTrns=FALSE; + if(pType) + { + bEnable=pType->Get<0>()[0]&&pType->Get<1>()[0]; + if(bEnable) + { + unsigned nFind=GetProfile()->m_map.Find(*pType); + if(nFind!=(unsigned)-1) + { + LangType& rType=GetProfile()->m_map[nFind]; + bTrnstoRus=(int)rType.Get<2>()&(int)Translate::trnsTrnstoRus; + bRustoTrns=(int)rType.Get<2>()&(int)Translate::trnsRustoTrns; + } + } + } + ::EnableWindow(GetDlgItem(IDC_TRNSTORUS),bEnable); + ::EnableWindow(GetDlgItem(IDC_RUSTOTRNS),bEnable); + CheckDlgButton(IDC_TRNSTORUS,bTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,bRustoTrns); + } + + void Clear() + { + for(int i=0;i<2;i++) + m_cmbTrnsRus[i].SetCurSel(-1); + UpdateCheck(NULL); + } + + void InitAll(bool bProfile=true) + { + if(bProfile) + InitProfile(); + InitTrnsRus(); + LoadIgnore(); + LoadProfileName(); + Clear(); + } + + void SaveProfileName() + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + } + + void LoadProfileName() + { + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + } + + void SplitStr(const char* str,char* l,char* r) + { + splitstr(str,l,r,LangString::nCountInit-1,LangString::nCountInit-1,'='); + } + + BEGIN_DDX_MAP(CProfilePage) + if(bSaveAndValidate==DDX_LOAD) + { + InitAll(); + } + else + { + SaveIgnore(); + SaveProfileName(); + } + DDX_CHECK(IDC_COPYIGNORE,GetOptions()->m_Options.m_bCopyIgnore) + END_DDX_MAP() + + BEGIN_MSG_MAP(CProfilePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnCmbSelChangeProfile) + COMMAND_HANDLER(IDC_PROFILENAME, EN_CHANGE, OnEnChangeProfileName) + + COMMAND_HANDLER(IDC_TRNS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_TRNS, CBN_EDITCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, CBN_EDITCHANGE, OnChangeTrnsRus) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemove) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemove) + COMMAND_ID_HANDLER(IDC_CLEAR, OnClear) + + COMMAND_ID_HANDLER(IDC_COPY, OnCopy) + + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + COMMAND_ID_HANDLER(IDC_RESETALL, OnReset) + + COMMAND_ID_HANDLER(IDC_LOAD, OnLoadSave) + COMMAND_ID_HANDLER(IDC_SAVE, OnLoadSave) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_nCurSel=0; + for(int i=0;i<2;i++) + { + m_cmbTrnsRus[i]=GetDlgItem(IDC_TRNS+i); + m_cmbTrnsRus[i].LimitText(LangString::nCountInit-1); + } + m_cmbProfile = GetDlgItem(IDC_PROFILE); + SendDlgItemMessage(IDC_PROFILENAME,EM_LIMITTEXT,(WPARAM)LangProfile::nName-1,0); + InitIgnore(); + return 0; + } + + LRESULT OnCmbSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + m_nCurSel=m_cmbProfile.GetCurSel(); + InitTrnsRus(); + LoadProfileName(); + return 0; + } + + LRESULT OnEnChangeProfileName(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + InitProfile(); + m_cmbProfile.SetCurSel(m_nCurSel); + LoadIgnore(); + return 0; + } + + LRESULT OnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int i1= wID!=IDC_TRNS; + + LangType type; + + if(wNotifyCode==CBN_SELCHANGE) + { + m_cmbTrnsRus[i1].GetLBText(m_cmbTrnsRus[i1].GetCurSel(),((LangString*)type.Get(i1))->GetData()); + m_cmbTrnsRus[!i1].GetWindowText(((LangString*)type.Get(!i1))->GetData(),LangString::nCountInit); + } + else + { + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + } + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + { + UpdateCheck(NULL); + InitTrnsRus(); + return 0; + } + else + { + if(!*((LangString*)type.Get(!i1))->GetData()) + SetTrnsRus(i1,((LangString*)type.Get(i1))->GetData()); + } + + UpdateCheck(&type); + + return 0; + } + + LRESULT OnAddRemove(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + LangType type; + + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + return 0; + + bool bAdd= wID==IDC_ADD; + if(bAdd) + { + type.Get<2>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<2>()|=(int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<2>()|=(int)Translate::trnsRustoTrns; + unsigned nFind=GetProfile()->m_map.Find(type); + if(nFind==(unsigned)-1) + GetProfile()->m_map.Add(type); + else + GetProfile()->m_map[nFind].Get<2>()=type.Get<2>(); + } + else + { + GetProfile()->m_map.Remove(type); + } + + InitTrnsRus(); + if(bAdd) + { + GetProfile()->m_map.Find(type); + UpdateCheck(&type); + } + else + UpdateCheck(NULL); + + return 0; + } + + LRESULT OnClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Clear(); + return 0; + } + + LRESULT OnCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int iFrom=SendDlgItemMessage(IDC_COPYFROM,CB_GETCURSEL); + + LangProfile* pFrom=GetProfile(iFrom); + + char strName[LangProfile::nName]; + lstrcpy(strName,GetProfile()->m_strName); + memcpy(GetProfile(),pFrom,sizeof(LangProfile)); + lstrcpy(GetProfile()->m_strName,strName); + + InitAll(); + + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + if(wID==IDC_RESET) + GetOptions()->m_Language.ResetProfile((Language::Profiles)m_nCurSel); + else + GetOptions()->m_Language.ResetUser(); + InitAll(); + return 0; + } + + LRESULT OnLoadSave(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + BOOL bLoad=wID==IDC_LOAD; + CFileDialog dlgFile(bLoad,"txt","",OFN_OVERWRITEPROMPT,"Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0",m_hWnd); + if(dlgFile.DoModal()!=IDOK) + return 0; + + // Test file + CAtlFile file; + if(file.Create(dlgFile.m_szFileName,bLoad?GENERIC_READ:GENERIC_WRITE,0,bLoad?OPEN_EXISTING:CREATE_ALWAYS)) + { + ShowError(m_hWnd,"Error opening file"); + return 0; + } + if(!bLoad) + file.SetSize(0); + file.Close(); + + static const unsigned size_string=LangString::nCountInit*2+1; + static const unsigned size_section=(size_string)*LangMap::nCountInit; + + static const char strProfileName[]="Profile Name"; + static const char strName[]="Name"; + static const char astrIgnore[][30]= + { + "Translit Ignore Symbols", + "Russian Ignore Symbols" + }; + static const char astrBeginEnd[][10]= + { + "Begin", + "End" + }; + static const char astrTranslation[][20]= + { + "Translit to Russian", + "Russian to Translit", + "No Translate" + }; + static const Translate::LangTranslate aTranslation[]= + { + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsNone + }; + + if(bLoad) + { + LangProfile profile; + // Name + GetPrivateProfileString(strProfileName,strName,"", + profile.m_strName,LangProfile::nName-1, + dlgFile.m_szFileName); + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + "", + profile.m_strIgnore[i], + LangProfile::nIgnore-1, + dlgFile.m_szFileName); + + // Translation + NN::AutoArray section(size_section); + for(int i=0;i<3;i++) + { + GetPrivateProfileSection( + astrTranslation[i], + section.GetData(), + size_section, + dlgFile.m_szFileName); + + if(!section[0]) + continue; + + const char* pstr; + pstr=section.GetData(); + + char left[LangString::nCountInit]; + char right[LangString::nCountInit]; + + while(pstr[0]&&pstr[1]) + { + SplitStr(pstr,left,right); + if(left[0]&&right[0]) + { + LangType type( + i==1?right:left, + i==1?left:right); + unsigned nFind=profile.m_map.Find(type); + if(nFind==(unsigned)-1) + { + ((int&)type.Get<2>())=(int)aTranslation[i]; + profile.m_map.Add(type); + } + else + { + if(aTranslation[i]!=Translate::trnsNone) + ((int&)profile.m_map[nFind].Get<2>())|=(int)aTranslation[i]; + else + profile.m_map[nFind].Get<2>()=Translate::trnsNone; + } + } + pstr+=lstrlen(pstr)+1; + } + } + + // Load + // Name + if(profile.m_strName[0]) + lstrcpy(GetProfile()->m_strName,profile.m_strName); + for(int i=0;im_strIgnore[i],profile.m_strIgnore[i]); + if(profile.m_map.GetLast()) + GetProfile()->m_map.SetData(profile.m_map); + + // Update + InitProfile(); + LoadIgnore(); + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + InitTrnsRus(); + } + else + { + // Name + WritePrivateProfileString( + strProfileName, + strName, + GetProfile()->m_strName, + dlgFile.m_szFileName); + + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + GetProfile()->m_strIgnore[i], + dlgFile.m_szFileName); + + // Translation + NN::AutoArray section(size_section); + for(int i=0;i<3;i++) + { + char* psection=section.GetData(); + LangMap map; + map.SetData(GetProfile()->m_map); + + map.Sort(true,i==1); + for(unsigned item=0;item()&(int)aTranslation[i]) + { + if(i==1) + strcpy_change(&psection,map[item].Get<1>().GetData()); + else + strcpy_change(&psection,map[item].Get<0>().GetData()); + strcpy_change(&psection,"="); + if(i==1) + strcpy_change(&psection,map[item].Get<0>().GetData()); + else + strcpy_change(&psection,map[item].Get<1>().GetData()); + *psection++=0; + } + } + *psection=0; + WritePrivateProfileSection(astrTranslation[i], + section.GetData(), + dlgFile.m_szFileName); + } + } + return 0; + } +}; + +#endif // __PROFILEPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/ProgCommandLine.h b/legacy/Transliterator_5.7/ProgCommandLine.h new file mode 100644 index 0000000..4a6edc7 --- /dev/null +++ b/legacy/Transliterator_5.7/ProgCommandLine.h @@ -0,0 +1,40 @@ +#ifndef __PROGCOMMANDLINE_H__ +#define __PROGCOMMANDLINE_H__ + +#include "WindowState.h" + +typedef WindowState ProgCommandLineInfo; + +class ProgCommandLine : public NN::CommandLine +{ + struct ParseCommandLineStruct + { + TCHAR szCmdLine[10]; + CommandLineInfoType cmdInfo; + }; +public: + ProgCommandLine() + { + SetCommandLine(GetCommandLine()); + ParseCommandLine(); + } + void ParseCommandLine() + { + static const ParseCommandLineStruct aParseCommandLine[]= + { + {_T("-min"),{SW_SHOWMINIMIZED}}, + {_T("-max"),{SW_SHOWMAXIMIZED}}, + {_T("-hide"),{SW_HIDE}} + }; + for(int i=1;i +class NN::StaticArrayMapTraitsLastArrayItem +{ +public: + inline static bool LastArrayItem(const LangType& Item) + { + return !(Item.Get<0>()[0]&&Item.Get<1>()[0]); + } +}; + +#endif // __TRAITS_H___ diff --git a/legacy/Transliterator_5.7/Translate.h b/legacy/Transliterator_5.7/Translate.h new file mode 100644 index 0000000..389f733 --- /dev/null +++ b/legacy/Transliterator_5.7/Translate.h @@ -0,0 +1,23 @@ +#ifndef __TRANSLATE_H__ +#define __TRANSLATE_H__ + +struct Translate +{ +public: + enum LangTranslate + { + trnsNone, + trnsTrnstoRus, + trnsRustoTrns, + trnsAll=trnsTrnstoRus|trnsRustoTrns, + }; + + enum Direction + { + dirTrnstoRus, + dirRusToTrns, + dirAuto, + }; +}; + +#endif // __TRANSLATE_H__ diff --git a/legacy/Transliterator_5.7/TranslateFilesDlg.cpp b/legacy/Transliterator_5.7/TranslateFilesDlg.cpp new file mode 100644 index 0000000..5f177f2 --- /dev/null +++ b/legacy/Transliterator_5.7/TranslateFilesDlg.cpp @@ -0,0 +1,269 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translatefilesdlg.h" + +void CTranslateFilesDlg::UpdateCmbProfile() +{ + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); +} + +void CTranslateFilesDlg::TranslateFile(LPCSTR szPath,Translate::Direction dir) +{ + char szFileExt[_MAX_PATH*LangString::nCountInit]; + char szFileName[_MAX_PATH*LangString::nCountInit]; + + const int nFileName=lstrlen(szPath); + + int i=nFileName; + while(i&&szPath[i]!='.') i--; + + if(i) + { + memcpy(szFileExt,szPath+i,(nFileName-i)*sizeof(char)); + szFileExt[nFileName-i]=0; + memcpy(szFileName,szPath,i*sizeof(char)); + szFileName[i]=0; + } + else + { + szFileExt[0]=0; + lstrcpy(szFileName,szPath); + } + + g_Language.Translate(szFileName,dir,sizeof(szFileName)/sizeof(szFileName[0]),m_pProfile); + + lstrcat(szFileName,szFileExt); + + ::MoveFile(szPath,szFileName); +} + +void CTranslateFilesDlg::TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry) +{ + CAtlFile file; + if(file.Create(szFile,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING)!=S_OK) + return; + + long lFileSize=::GetFileSize(file,NULL); + if(bEntry) + lFileSize*=LangString::nCountInit; + CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize,0,PAGE_READWRITE,FILE_MAP_WRITE)!=S_OK) + return; + + LPSTR pFileView=(LPSTR)filemap.GetData(); + + if(bEntry) + { + g_Language.Translate(pFileView,dir,lFileSize,m_pProfile); + lFileSize=lstrlen(pFileView); + } + else + { + LPSTR pCur; + + // Mp3 Tag V1 + pCur=pFileView+lFileSize-(sizeof(NN::MP3Tag)); + NN::MP3Tag mp3tag; + memcpy(&mp3tag,pCur,sizeof(NN::MP3Tag)); + + if(!LangStringTraits::CompareArrayLength(mp3tag.szTag,"TAG",3)) + { + TranslateTag(mp3tag.szAlbom,dir); + TranslateTag(mp3tag.szArtist,dir); + TranslateTag(mp3tag.szTitle,dir); + TranslateTag(mp3tag.szComment,dir); + memcpy(pCur,&mp3tag,sizeof(NN::MP3Tag)); + } + } + + filemap.Unmap(); + file.SetSize(lFileSize); +} + +void CTranslateFilesDlg::Translate(LPCSTR szPath) +{ + NN::CurrentDirectory curdir(szPath); + + HANDLE hFindFile; + WIN32_FIND_DATA ffd; + + hFindFile = ::FindFirstFile("*.*",&ffd); + if(hFindFile==INVALID_HANDLE_VALUE) + return; + + do{ + if(!LangStringTraits::CompareArrayLength(ffd.cFileName,".",1)|| + !LangStringTraits::CompareArrayLength(ffd.cFileName,"..",2)) + continue; + + if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) + { + if(m_bSubFolders) + { + char szNextPath[_MAX_PATH]; + lstrcpy(szNextPath,szPath); + lstrcat(szNextPath,"\\"); + lstrcat(szNextPath,ffd.cFileName); + Translate(szNextPath); + } + if(m_bFolders) + TranslateFile(ffd.cFileName,m_nDirection); + } + else + { + bool bNotMP3=LangStringTraits::CompareArray(ffd.cFileName+lstrlen(ffd.cFileName)-4,".mp3",4); + if(bNotMP3&&m_bEntry|| + !bNotMP3&&m_bMP3Tags) + TranslateEntryMP3Tags(ffd.cFileName,m_nDirection,bNotMP3); + if(m_bName) + TranslateFile(ffd.cFileName,m_nDirection); + } + }while(::FindNextFile(hFindFile,&ffd)); + + ::FindClose(hFindFile); +} + +void CTranslateFilesDlg::TranslateThisFolder() +{ + NN::CurrentDirectory curdir(m_szPath); + char *pszPath=m_szPath+lstrlen(m_szPath); + pszPath--; + while(*pszPath!='\\'&&*pszPath!='/') + pszPath--; + pszPath++; + char c=*pszPath; + *pszPath=0; + ::SetCurrentDirectory(m_szPath); + *pszPath=c; + + TranslateFile(pszPath,m_nDirection); +} + +void CTranslateFilesDlg::TranslateTag(LPSTR szTag,Translate::Direction dir) +{ + g_Language.Translate(szTag,dir,NN::MP3Tag::nCount,m_pProfile); +} + +void CTranslateFilesDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateCmbProfile(); +} + +void CTranslateFilesDlg::EnableDirs(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_FILES),bEnable); + ::EnableWindow(GetDlgItem(IDC_FOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SUBFOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SELFOLDER),bEnable); +} + +void CTranslateFilesDlg::EnableFiles(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_NAME),bEnable); + ::EnableWindow(GetDlgItem(IDC_ENTRY),bEnable); + ::EnableWindow(GetDlgItem(IDC_MP3TAGS),bEnable); +} + +LRESULT CTranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + SendDlgItemMessage(IDC_PATH,EM_LIMITTEXT,(WPARAM)(_MAX_PATH-1)); + m_szPath[0]=0; + DoDataExchange(DDX_LOAD); + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); + m_pProfile=g_Language.GetProfile((Language::Profiles)0); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + + NN_AUTOSG_F4(sg_tMB,AtlMessageBox,0,IDS_DONE,IDR_TRANSLITERATOR,MB_OK|MB_ICONINFORMATION)sg; + + if(!m_szPath[0]) + return 0; + + if(m_bFiles&& + (!m_bName&&!m_bEntry&&!m_bMP3Tags)) + m_bFiles=FALSE; + + if(m_bFiles&&!(GetFileAttributes(m_szPath)&FILE_ATTRIBUTE_DIRECTORY)) + { + char* pszPath; + pszPath=m_szPath+lstrlen(m_szPath); + while(*pszPath!='\\') + pszPath--; + *pszPath=0; + NN::CurrentDirectory curdir(m_szPath); + if(m_bMP3Tags||m_bEntry) + TranslateEntryMP3Tags(pszPath+1,m_nDirection,m_bEntry); + if(m_bName) + TranslateFile(pszPath+1,m_nDirection); + return 0; + } + + if(!m_bFiles&&!m_bFolders&&!m_bSubFolders&& + !m_bThisFolder) + return 0; + + char *pszPath=m_szPath+lstrlen(m_szPath)-1; + if(*pszPath=='\\') + *pszPath=0; + + Translate(m_szPath); + + if(m_bThisFolder) + TranslateThisFolder(); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CFolderDialog fd(m_hWnd,0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal()==IDOK) + SetDlgItemText(IDC_PATH,fd.m_szFolderPath); + return 0; +} + +LRESULT CTranslateFilesDlg::OnFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_pProfile=g_Language.GetProfile((Language::Profiles)SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL)); + return 0; +} + +LRESULT CTranslateFilesDlg::OnEnChangePath(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + DWORD dwAttr = GetFileAttributes(m_szPath); + + if(!*m_szPath) + { + EnableFiles(FALSE); + EnableDirs(FALSE); + } + else + { + if(dwAttr & FILE_ATTRIBUTE_DIRECTORY) + { + EnableDirs(TRUE); + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + } + else + EnableFiles(TRUE); + } + + return 0; +} diff --git a/legacy/Transliterator_5.7/TranslateFilesDlg.h b/legacy/Transliterator_5.7/TranslateFilesDlg.h new file mode 100644 index 0000000..83a4942 --- /dev/null +++ b/legacy/Transliterator_5.7/TranslateFilesDlg.h @@ -0,0 +1,70 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +class CTranslateFilesDlg : public CDialogImpl, + public CWinDataExchange, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_TRANSLATEFILES } ; + + NN::AutoValue m_bFiles; + NN::AutoValue m_bFolders; + NN::AutoValue m_bSubFolders; + NN::AutoValue m_bThisFolder; + NN::AutoValue m_bName; + NN::AutoValue m_bEntry; + NN::AutoValue m_bMP3Tags; + NN::AutoValue m_nDirection; + TCHAR m_szPath[_MAX_PATH]; + LangProfile* m_pProfile; + + void UpdateCmbProfile(); + + void TranslateFile(LPCSTR szPath,Translate::Direction dir); + void TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry); + void Translate(LPCSTR szPath); + void TranslateThisFolder(); + + void TranslateTag(LPSTR szTag,Translate::Direction dir); + + void UpdateLanguage(); + + void EnableDirs(BOOL bEnable); + void EnableFiles(BOOL bEnable); + + BEGIN_DDX_MAP(CTranslateFilesDlg) + DDX_RADIO(IDC_TRNSTORUS,(int&)m_nDirection) + DDX_CHECK(IDC_FILES,m_bFiles) + DDX_CHECK(IDC_FOLDERS,m_bFolders) + DDX_CHECK(IDC_SUBFOLDERS,m_bSubFolders) + DDX_CHECK(IDC_SELFOLDER,m_bThisFolder) + DDX_CHECK(IDC_NAME,m_bName) + DDX_CHECK(IDC_ENTRY,m_bEntry) + DDX_CHECK(IDC_MP3TAGS,m_bMP3Tags) + DDX_TEXT(IDC_PATH,m_szPath) + END_DDX_MAP() + + BEGIN_MSG_MAP(CTranslateFilesDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_TRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_FILES, OnFiles) + COMMAND_HANDLER(IDC_PROFILE, CBN_SELCHANGE, OnSelChangeProfile) + COMMAND_HANDLER(IDC_PATH, EN_CHANGE, OnEnChangePath) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSelChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnChangePath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/TranslationDlg.cpp b/legacy/Transliterator_5.7/TranslationDlg.cpp new file mode 100644 index 0000000..8f2d7d8 --- /dev/null +++ b/legacy/Transliterator_5.7/TranslationDlg.cpp @@ -0,0 +1,187 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translationdlg.h" + +void CTranslationDlg::UpdateCmbProfile() +{ + CComboBox cmbProfile=GetDlgItem(IDC_PROFILE); + InitCmbLanguage(cmbProfile); + char strAll[50]; + ::LoadString(_AtlBaseModule.GetResourceInstance(),IDS_ALL,strAll,sizeof(strAll)/sizeof(strAll[0])); + cmbProfile.AddString(strAll); + cmbProfile.SetCurSel(m_nCurProfile); +} + +void CTranslationDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateCurProfile() +{ + m_nCurProfile=g_Options.m_nCurProfile; + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateTranslation() +{ + const int nSize=TranslationCount()+1000; + NN::AutoArray aText(nSize); + if(!aText.GetData()) + return; + MakeTranslation(aText.GetData()); + + NN::AutoArray awText(nSize); + if(!awText.GetData()) + return; + ::MultiByteToWideChar(1251,0,aText.GetData(),nSize,awText.GetData(),nSize); + + m_reTranslation.SetTextEx((LPTSTR)awText.GetData(),ST_DEFAULT,1200); + m_reTranslation.HideSelection(true,TRUE); + m_reTranslation.LineScroll(0); +} + +void CTranslationDlg::MakeTranslation(LPTSTR strTranslation) +{ + strTranslation[0]=0; + + char strText[2][40]; + for(int i=0;i<2;i++) + AtlLoadString(IDS_TRNSTORUS+i,strText[i],40); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + continue; + } + + for(int i=0;i<2;i++) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + lstrcat(strTranslation,strText[i]); + lstrcat(strTranslation,":\r\n"); + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)i))->GetData()); + lstrcat(strTranslation," - "); + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)!i))->GetData()); + lstrcat(strTranslation,"\r\n"); + } + if(!i) + lstrcat(strTranslation,"\r\n"); + } + lstrcat(strTranslation,"\r\n"); + } +} + +size_t CTranslationDlg::TranslationCount() +{ + size_t nCount=0; + size_t nrn=lstrlen("\r\n"); + + size_t nText[2]; + for(int i=0;i<2;i++) + nText[i]=AtlLoadString(IDC_TRNSTORUS+i,0,0); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + nCount+=lstrlen(pProfile->m_strName)+1; + continue; + } + + for(int i=0;i<2;i++) + { + nCount+=lstrlen(pProfile->m_strName)+nrn+1; + nCount+=nText[i]+nrn; + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)i))->GetData()); + nCount+=lstrlen(" - "); + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)!i))->GetData()); + nCount+=nrn; + } + if(!i) + nCount+=nrn; + } + nCount+=nrn; + } + return nCount; +} + +LRESULT CTranslationDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + DlgResize_Init(); + + m_reTranslation=GetDlgItem(IDC_TRANSLATION); + m_reTranslation.SetEventMask(ENM_KEYEVENTS); + m_reTranslation.SetFocus(); + + m_nCurProfile=Language::nProfiles; + UpdateCmbProfile(); + + return 0; +} + +LRESULT CTranslationDlg::OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + static bool bInit; + if(wParam&&!bInit) + { + bInit=true; + UpdateTranslation(); + } + return 0; +} + +LRESULT CTranslationDlg::OnChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_nCurProfile=SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL,0,0); + UpdateTranslation(); + return 0; +} + +LRESULT CTranslationDlg::OnEnMsgFilterTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_KEYDOWN&&pMsgFilter->wParam==VK_ESCAPE) + CloseDialog(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_5.7/TranslationDlg.h b/legacy/Transliterator_5.7/TranslationDlg.h new file mode 100644 index 0000000..eb8f188 --- /dev/null +++ b/legacy/Transliterator_5.7/TranslationDlg.h @@ -0,0 +1,46 @@ +#ifndef __TRANSLATIONDLG_H__ +#define __TRANSLATIONDLG_H__ + +class CTranslationDlg : public CDialogImpl, + public NN::DialogLang, + public CDialogResize, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_TRANSLATION }; + + CRichEditCtrl m_reTranslation; + int m_nCurProfile; + + void UpdateCmbProfile(); + void UpdateLanguage(); + void UpdateCurProfile(); + + void UpdateTranslation(); + void MakeTranslation(LPTSTR strTranslation); + size_t TranslationCount(); + + BEGIN_DLGRESIZE_MAP(CTranslationDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_TRANSLATION, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + NOTIFY_HANDLER(IDC_TRANSLATION, EN_MSGFILTER, OnEnMsgFilterTranslation) + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnChangeProfile) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLATIONDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Transliterator.cpp b/legacy/Transliterator_5.7/Transliterator.cpp new file mode 100644 index 0000000..14543ee --- /dev/null +++ b/legacy/Transliterator_5.7/Transliterator.cpp @@ -0,0 +1,62 @@ +#include "stdafx.h" +#include "resource.h" +#include "transliteratordlg.h" + +int Run() +{ + CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + CTransliteratorDlg dlgTransliterator; + int nRet=0; + + if(!dlgTransliterator.Show()) + { + ShowError(_T("Cannot create main window")); + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + return nRet; +} + +HMODULE LoadRichEditLibrary() +{ + HMODULE hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + ShowError(_T("Cannot load \"riched20.dll\"")); + return hRichEdit; +} + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + // One Instance + if(NN::SetOneInstance(_T("Transliterator"))) + return 0; + + // RichEdit Library + if(!LoadRichEditLibrary()) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + ::DefWindowProc(NULL, 0, 0, 0L); + + AtlInitCommonControls(0xFF); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(); + + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} diff --git a/legacy/Transliterator_5.7/Transliterator.rc b/legacy/Transliterator_5.7/Transliterator.rc new file mode 100644 index 0000000..86b67c8 --- /dev/null +++ b/legacy/Transliterator_5.7/Transliterator.rc @@ -0,0 +1,953 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Transliterator.rc2" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 5,7,0,0 + PRODUCTVERSION 5,7,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + BLOCK "041904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200, 0x419, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLITERATOR ICON "res\\Transliterator.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLITERATOR DIALOGEX 0, 0, 177, 185 +STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +CAPTION " " +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + GROUPBOX "",IDC_STRNSTEXT,2,2,172,75,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SRUSTEXT,2,80,172,75,0,WS_EX_TRANSPARENT + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,177,1 +END + +IDD_ABOUT DIALOGEX 0, 0, 280, 295 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "",IDC_EMAIL,10,275,125,13,BS_FLAT + PUSHBUTTON "",IDC_SITE,145,275,125,13,BS_FLAT + EDITTEXT IDC_SABOUT,10,25,260,245,ES_MULTILINE | ES_READONLY | + WS_VSCROLL + LTEXT "",IDC_SABOUTPROGRAM,10,5,260,10,SS_SUNKEN +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 158, 252 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATH,8,35,120,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BROWSE,128,35,16,12 + CONTROL "",IDC_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65, + 125,10 + CONTROL "",IDC_FOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 80,125,10 + CONTROL "",IDC_SUBFOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,95,125,10 + CONTROL "",IDC_SELFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,110,125,10 + CONTROL "",IDC_NAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,140, + 125,10 + CONTROL "",IDC_ENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 155,125,10 + CONTROL "",IDC_MP3TAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 170,125,10 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,10,196,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,10,210,125,10 + DEFPUSHBUTTON "",IDC_TRANSLATE,40,230,50,14 + PUSHBUTTON "",IDC_CLOSE,98,230,50,14 + GROUPBOX "",IDC_SFOLDER,5,55,145,70 + GROUPBOX "",IDC_SDIRECTION,5,186,145,39 + GROUPBOX "",IDC_SFILE,5,128,144,58 + COMBOBOX IDC_PROFILE,45,6,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + GROUPBOX "",IDC_SPROFILE,5,0,143,23,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SPATH,5,22,145,30 +END + +IDD_OPTIONS DIALOGEX 0, 0, 305, 164 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDOK,10,83,50,14 + PUSHBUTTON "",IDC_CLOSE,10,104,50,14 + PUSHBUTTON "",IDC_APPLY,10,123,50,14 + PUSHBUTTON "",IDC_RESET,10,144,50,14 + LISTBOX IDC_LISTOPTIONS,0,0,70,75,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_SDLGPLACE,75,1,225,160,NOT WS_VISIBLE +END + +IDD_TRANSLATION DIALOGEX 0, 0, 90, 212 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_TRANSLATION,"RichEdit20A",ES_MULTILINE | + ES_READONLY | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,0,17, + 89,195 + COMBOBOX IDC_PROFILE,2,0,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,14,89,1, + WS_EX_TRANSPARENT +END + +IDD_PAGEGENERAL DIALOGEX 0, 0, 225, 132 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_SVIEW,0,0,110,63 + CONTROL "",IDC_SHOWTRAYICON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,14,100,8 + CONTROL "",IDC_SHOWTASKBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 5,30,100,8 + CONTROL "",IDC_TOPMOST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 47,100,8 + GROUPBOX "",IDC_SLOADONSTARTUP,115,0,110,63 + CONTROL "",IDC_LOADNO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,120,14,100,8 + CONTROL "",IDC_LOADHIDDEN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,30,100,8 + CONTROL "",IDC_LOADSHOWN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,47,100,8 + GROUPBOX "",IDC_SFONTS,0,65,135,67 + CONTROL "",IDC_FONTNAMETRNS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,75,70,14 + PUSHBUTTON "",IDC_FONTTRNS,75,76,50,14 + CONTROL "",IDC_FONTNAMERUS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,95,70,14 + PUSHBUTTON "",IDC_FONTRUS,75,95,50,14 + CONTROL "",IDC_FONTNAMETRANSLATION,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,115,70,14 + PUSHBUTTON "",IDC_FONTTRANSLATION,75,115,50,14 +END + +IDD_PAGEPROFILE DIALOGEX 0, 0, 225, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + COMBOBOX IDC_PROFILE,3,10,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SNAME,86,10,37,8 + EDITTEXT IDC_PROFILENAME,128,10,89,12,ES_AUTOHSCROLL + GROUPBOX "",IDC_SPROFILE,0,0,225,27,0,WS_EX_TRANSPARENT + LTEXT "",IDC_STRANSLIT,4,39,36,8 + COMBOBOX IDC_TRNS,45,39,38,69,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SRUSSIAN,4,55,36,8 + COMBOBOX IDC_RUS,45,55,38,68,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 74,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 87,78,8 + PUSHBUTTON "",IDC_ADD,85,39,42,14 + PUSHBUTTON "",IDC_REMOVE,85,59,42,14 + PUSHBUTTON "",IDC_CLEAR,85,79,42,14 + COMBOBOX IDC_COPYFROM,145,41,76,30,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "",IDC_COPY,145,57,45,14 + GROUPBOX "",IDC_SCOPYPROFILE,140,28,85,48 + LTEXT "",IDC_STRANSLIT2,3,116,37,8 + LTEXT "",IDC_SBEGIN,43,116,22,8 + EDITTEXT IDC_BEGINTRNS,67,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND,86,116,17,8 + EDITTEXT IDC_ENDTRNS,108,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SRUSSIAN2,3,131,37,8 + LTEXT "",IDC_SBEGIN2,43,132,22,8 + EDITTEXT IDC_BEGINRUS,67,130,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND2,86,132,17,8 + EDITTEXT IDC_ENDRUS,108,130,15,12,ES_AUTOHSCROLL + CONTROL "",IDC_COPYIGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 2,145,123,8 + GROUPBOX "",IDC_SRESET,140,119,85,40 + PUSHBUTTON "",IDC_RESET,145,130,50,12 + PUSHBUTTON "",IDC_RESETALL,145,143,50,12 + GROUPBOX "",IDC_SIGNORE,0,104,133,55 + GROUPBOX "",IDC_STRANSLATESYMBOLS,0,28,133,74 + GROUPBOX "",IDC_SLOADSAVE,140,77,85,41 + PUSHBUTTON "",IDC_SAVE,145,101,50,12 + PUSHBUTTON "",IDC_LOAD,145,88,50,12 +END + +IDD_PAGEHOTKEYS DIALOGEX 0, 0, 191, 117 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_SACTION,15,17,40,8 + COMBOBOX IDC_ACTION,60,17,110,46,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SKEY,15,37,40,8 + CONTROL "",IDC_HOTKEYACTION,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,60,37,110,14 + GROUPBOX "",IDC_SHOTKEYS,5,5,175,56 + GROUPBOX "",IDC_SAUTOTRANSLATION,5,64,175,47 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,15,79,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,15,94,125,10 +END + +IDD_PAGEIGNORE DIALOGEX 0, 0, 200, 135 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_IGNORE,"RichEdit20A",ES_AUTOHSCROLL | WS_BORDER | + WS_TABSTOP,41,10,89,13 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,25,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,38,78,8 + PUSHBUTTON "",IDC_ADD,140,11,50,13 + PUSHBUTTON "",IDC_REMOVE,140,27,50,13 + PUSHBUTTON "",IDC_CLEAR,140,42,50,13 + LISTBOX IDC_LISTIGNORE,10,58,180,70,LBS_SORT | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "",IDC_STEXT,10,12,25,8 + GROUPBOX "",IDC_SIGNORE,0,0,200,135 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLITERATOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 273 + TOPMARGIN, 7 + BOTTOMMARGIN, 288 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + BOTTOMMARGIN, 232 + END + + IDD_OPTIONS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 298 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + IDD_TRANSLATION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 83 + TOPMARGIN, 7 + BOTTOMMARGIN, 205 + END + + IDD_PAGEGENERAL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 219 + TOPMARGIN, 7 + BOTTOMMARGIN, 126 + END + + IDD_PAGEPROFILE, DIALOG + BEGIN + RIGHTMARGIN, 158 + BOTTOMMARGIN, 131 + END + + IDD_PAGEHOTKEYS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 185 + TOPMARGIN, 7 + BOTTOMMARGIN, 111 + END + + IDD_PAGEIGNORE, DIALOG + BEGIN + BOTTOMMARGIN, 113 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLITERATOR ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "R", ID_EDIT_COPY_RUSTOTRNS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "T", ID_EDIT_COPY_TRNSTORUS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "I", ID_EDIT_IGNORE_INSERT, VIRTKEY, SHIFT, ALT, NOINVERT + "R", ID_EDIT_IGNORE_REMOVE, VIRTKEY, SHIFT, ALT, NOINVERT + "1", ID_PROFILE1, VIRTKEY, CONTROL, NOINVERT + "2", ID_PROFILE2, VIRTKEY, CONTROL, NOINVERT + "3", ID_PROFILE3, VIRTKEY, CONTROL, NOINVERT + "4", ID_PROFILE4, VIRTKEY, CONTROL, NOINVERT + "5", ID_PROFILE5, VIRTKEY, CONTROL, NOINVERT + "6", ID_PROFILE6, VIRTKEY, CONTROL, NOINVERT + "7", ID_PROFILE7, VIRTKEY, CONTROL, NOINVERT + "8", ID_PROFILE8, VIRTKEY, CONTROL, NOINVERT + "9", ID_PROFILE9, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F4, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_TRANSLATION, VIRTKEY, NOINVERT + "A", ID_VIEW_CONTROLS_AUTOTRANSLITERATION, VIRTKEY, SHIFT, + CONTROL, NOINVERT + "S", ID_VIEW_CONTROLS_SCROLLTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "W", ID_VIEW_CONTROLS_WRAPTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + VK_F1, ID_VIEW_LANGUAGE_ENGLISH, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_VIEW_LANGUAGE_RUSSIAN, VIRTKEY, CONTROL, NOINVERT + VK_F3, ID_VIEW_LANGUAGE_TRANSLIT, VIRTKEY, CONTROL, NOINVERT + "G", ID_VIEW_CONTROLS_AUTOIGNORE, VIRTKEY, SHIFT, CONTROL, + NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLITERATOR MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_EXIT + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + END + POPUP " " + BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + END +END + +IDR_TRAYICON MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + MENUITEM SEPARATOR + MENUITEM " ", ID_SHOW + MENUITEM " ", ID_HIDE + MENUITEM SEPARATOR + MENUITEM " ", ID_APP_EXIT + END +END + +IDR_PROFILE MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END +END + +IDR_EDIT MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + END +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE " \n " + ID_EDIT_COPY_TRNSTORUS " \n " + ID_EDIT_COPY_RUSTOTRNS " \n " + ID_VIEW_LANGUAGE_ENGLISH " \n " + ID_VIEW_LANGUAGE_RUSSIAN " \n " + ID_VIEW_LANGUAGE_TRANSLIT "\n" + ID_VIEW_CONTROLS_WRAPTEXT " \n " + ID_VIEW_CONTROLS_SCROLLTEXT " \n " + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + " \n " + ID_VIEW_CONTROLS_AUTOIGNORE " \n " + ID_TOOLS_TRANSLATION " \n" + ID_TOOLS_TRANSLATEFILES " \n " + ID_TOOLS_OPTIONS " \n" + ID_SHOW " \n" + ID_HIDE " \n" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + IDS_ERROR "" + IDS_HELP "" + IDS_TRNSTORUS " " + IDS_RUSTOTRNS " " + IDS_NOTRANSLATE " " + IDS_GENERAL "" + IDS_HOTKEYS " " + IDS_PROFILE "" + IDS_IGNORE "" + IDS_TRANSLIT "" + IDS_RUSSIAN "" + IDS_ALL "" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT " \n " +END + +STRINGTABLE +BEGIN + ID_PROFILE1 " 1" + ID_PROFILE2 " 2" + ID_PROFILE3 " 3" + ID_PROFILE4 " 4" + ID_PROFILE5 " 5" + ID_PROFILE6 " 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Transliterator.rc2""\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Remove ignore symbols\nRemove ignore" + ID_EDIT_COPY_TRNSTORUS "Copy text from translit to russian\nCopy translit to russian" + ID_EDIT_COPY_RUSTOTRNS "Copy text from russian to translit\nCopy russian to translit" + ID_VIEW_LANGUAGE_ENGLISH "Enlish language\nEnglish language" + ID_VIEW_LANGUAGE_RUSSIAN "Russian language\nRussian language" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\nWrap text" + ID_VIEW_CONTROLS_SCROLLTEXT "Scroll text\nScroll text" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Translate text\nAuto Transliteration" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignore text\nAuto Ignore" + ID_TOOLS_TRANSLATION "Show or hide translation window\nTranslation" + ID_TOOLS_TRANSLATEFILES "Show or hide translate files window\nTranslate Files" + ID_TOOLS_OPTIONS "Show or hide options window\nOptions" + ID_SHOW "Show application window\nShow" + ID_HIDE "Hide application window\nHide" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Error" + IDS_HELP "Help" + IDS_TRNSTORUS "Translit to Russian" + IDS_RUSTOTRNS "Russian to Translit" + IDS_NOTRANSLATE "No translation" + IDS_GENERAL "General" + IDS_HOTKEYS "Hot Keys" + IDS_PROFILE "Profile" + IDS_IGNORE "Ignore" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russian" + IDS_ALL "All" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Insert ignore symbols\nInsert ignore" +END + +STRINGTABLE +BEGIN + ATL_IDC_TAB_CONTROL "Russian to Translit" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profile 1" + ID_PROFILE2 "Profile 2" + ID_PROFILE3 "Profile 3" + ID_PROFILE4 "Profile 4" + ID_PROFILE5 "Profile 5" + ID_PROFILE6 "Profile 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Done" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Transliterator_5.7/Transliterator.rc2 b/legacy/Transliterator_5.7/Transliterator.rc2 new file mode 100644 index 0000000..3ae7f7b --- /dev/null +++ b/legacy/Transliterator_5.7/Transliterator.rc2 @@ -0,0 +1,571 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Transliterator.exe.manifest" + +#define SUBLANG_LOC 0x20 +#define SUBLANG_LOC2 0x21 + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" + IDD_ABOUT " " + IDD_TRANSLATEFILES " " + IDD_OPTIONS "" + IDD_TRANSLATION "" + IDC_STRNSTEXT "" + IDC_SRUSTEXT "" + IDC_SPROFILE "" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "\tAlt+F4" + ID_EDIT_UNDO "\tCtrl+Z" + ID_EDIT_REDO "\tCtrl+Y" + ID_EDIT_CUT "\tCtrl+X" + ID_EDIT_COPY "\tCtrl+C" + ID_EDIT_PASTE "\tCtrl+V" + ID_EDIT_CLEAR "\tDel" + ID_EDIT_CLEAR_ALL " " + ID_EDIT_SELECT_ALL " \tCtrl+A" + ID_EDIT_IGNORE_INSERT "\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS " \tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS " \tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT " \tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT " \tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION " \tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE " \tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "...\tF3" + ID_TOOLS_TRANSLATEFILES " ...\tF4" + ID_TOOLS_OPTIONS "...\tF2" + ID_APP_ABOUT " ...\tF1" + IDC_SABOUT " () .\r\n :\r\n (translit , translit).\r\n :\r\n - translit > , > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- > \r\n ( , ).\r\n : /, .\r\n ( , , MP3 )\r\n ( , ), .\r\n , .\r\n : English, Translit\r\n :\r\nWindows 95 RichEdit 3.0 ( Internet Explorer 5.7 )\r\n ""-"".\r\n , .\r\n :\r\nMyxamore6e , DnAp Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM " 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL ". : nn-mail@bk.ru" + IDC_SITE " : http://our-site.nm.ru" + IDC_TRNSTORUS " " + IDC_RUSTOTRNS " " + IDC_SPATH "" + IDC_BROWSE "..." + IDC_SFOLDER "" + IDC_FILES "" + IDC_FOLDERS "" + IDC_SUBFOLDERS " " + IDC_SELFOLDER " " + IDC_SFILE "" + IDC_NAME "" + IDC_ENTRY "" + IDC_MP3TAGS "MP3 " + IDC_SDIRECTION "" + IDC_TRANSLATE "" + IDC_CLOSE "" + IDC_SNAME " :" + IDC_STRANSLIT " :" + IDC_SRUSSIAN " :" + IDC_ADD "" + IDC_REMOVE "" + IDC_CLEAR "" + IDC_SIGNORE "" + IDC_STRANSLIT2 " :" + IDC_SRUSSIAN2 " :" + IDC_SBEGIN " :" + IDC_SEND " :" + IDC_SBEGIN2 " :" + IDC_SEND2 " :" + IDC_SCOPYPROFILE " " + IDC_COPY "" + IDC_SIN "" + IDC_RESET "" + IDC_RESETALL " " + IDC_SRESET "" + ID_SHOW "" + ID_HIDE "" + IDC_APPLY "" + IDOK "" + IDCANCEL "" + IDC_STRANSLATESYMBOLS " " + IDC_SVIEW "" + IDC_SHOWTRAYICON " " + IDC_SHOWTASKBAR " " + IDC_TOPMOST " " + IDC_SFONTS "" + IDC_FONTTRNS "" + IDC_FONTRUS "" + IDC_FONTTRANSLATION "" + IDC_SLOADONSTARTUP " " + IDC_LOADSHOWN "" + IDC_LOADHIDDEN "" + IDC_LOADNO " " + IDC_SHOTKEYS " " + IDC_SACTION " :" + IDC_SKEY " :" + IDC_ACTION " \n \n \n/ \n \n \n" + IDC_SAUTOTRANSLATION " " + IDC_COPYIGNORE " " + IDC_SLOADSAVE "/" + IDC_LOAD "" + IDC_SAVE "" + IDC_STEXT " :" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "\n\n\n\n\n\n\n \n\n" + IDR_TRAYICON "1\n\n" + IDR_EDIT "1\n\n\n\n\n \n" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_TRANSLATEFILES "Translate Files" + IDD_ABOUT "About" + IDD_TRANSLATION "Translation" + IDD_OPTIONS "Options" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russian" + IDC_SPROFILE "Profile" + IDC_PROFILE "" + IDC_TRANSLATION "" + ID_APP_EXIT "Exit\tAlt+F4" + ID_EDIT_UNDO "Undo\tCtrl+Z" + ID_EDIT_REDO "Redo\tCtrl+Y" + ID_EDIT_CUT "Cut\tCtrl+X" + ID_EDIT_COPY "Copy\tCtrl+C" + ID_EDIT_PASTE "Paste\tCtrl+V" + ID_EDIT_CLEAR "Delete\tDel" + ID_EDIT_CLEAR_ALL "Delete All" + ID_EDIT_SELECT_ALL "Select All\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Insert\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Remove\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit to russian\tAlt+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russian to translit\tAlt+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Scrol text\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Auto Transliteration\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Auto Ignore\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Translation...\tF3" + ID_TOOLS_TRANSLATEFILES "Translate Files...\tF4" + ID_TOOLS_OPTIONS "Options...\tF2" + ID_APP_ABOUT "About...\tF1" + IDC_SABOUT "This program works with russian (cyrillic) letters and translation russian letters into translit and translit letters into russian\r\nShort review:\r\nTranslation two-way (translit into russian, russian into translit).\r\nDifferent profiles of transliteration:\r\n- translit > russian, russian > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- User > User\r\nIgnore translation symbols (after insertion this symbol some part of will no be transliterated\r\nHot Keys: show/hide, auto transliteration\r\nTransliteration files (file name or folder, entry of the file, MP3 tags)\r\nOptions for change: (transliteration, ignore), transliteration profiles and hot keys\r\nMinimization to tray icon and option to show or hide tray icon\r\nInterface languages: English, and Translit\r\nMinimal requirements\r\nWindows 95 and RichEdit version 3.0 (Internet Explorer 5.7 and higher)\r\nThis program is freeware and provided ""AS-IS"".\r\nI take no responsibility for any damage this program cause.\r\nSpecial thanks to :\r\nMyxamore6e , DnAp and Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E-mail : nn-mail@bk.ru" + IDC_SITE "Site : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit to Russian" + IDC_RUSTOTRNS "Russian to Translit" + IDC_SPATH "Path" + IDC_BROWSE "..." + IDC_SFOLDER "Folder" + IDC_FILES "Files" + IDC_FOLDERS "Folders" + IDC_SUBFOLDERS "Folders in selected folder" + IDC_SELFOLDER "Selected Folder" + IDC_SFILE "File" + IDC_NAME "Name" + IDC_ENTRY "Entry" + IDC_MP3TAGS "MP3 Tags" + IDC_SDIRECTION "Direction" + IDC_TRANSLATE "Translate" + IDC_CLOSE "Close" + IDC_SNAME "Name :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russian :" + IDC_ADD "Add" + IDC_REMOVE "Remove" + IDC_CLEAR "Clear" + IDC_SIGNORE "Ignore" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russian :" + IDC_SBEGIN "Begin :" + IDC_SEND "End :" + IDC_SBEGIN2 "Begin :" + IDC_SEND2 "End :" + IDC_SCOPYPROFILE "Copy From" + IDC_COPY "Copy" + IDC_SIN "Into" + IDC_RESET "Reset" + IDC_RESETALL "Reset all" + IDC_SRESET "Reset" + ID_SHOW "Show" + ID_HIDE "Hide" + IDC_APPLY "Apply" + IDOK "OK" + IDCANCEL "Cancel" + IDC_STRANSLATESYMBOLS "Translate Symbols" + IDC_SVIEW "View" + IDC_SHOWTRAYICON "System icon" + IDC_SHOWTASKBAR "TaskBar" + IDC_TOPMOST "Top Most" + IDC_SFONTS "Fonts" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russian" + IDC_FONTTRANSLATION "Translation" + IDC_SLOADONSTARTUP "Load on startup" + IDC_LOADSHOWN "Shown" + IDC_LOADHIDDEN "Hidden" + IDC_LOADNO "No load" + IDC_SHOTKEYS "Hot Keys" + IDC_SACTION "Action :" + IDC_SKEY "Key :" + IDC_ACTION "Translit to Russian\nRussian to Translit\nAuto Translation\nShow/Hide Program\nCopy to Translit\nCopy to Russian\n" + IDC_SAUTOTRANSLATION "Auto Translation" + IDC_COPYIGNORE "Copy ignore" + IDC_SLOADSAVE "Load/Save" + IDC_LOAD "Load" + IDC_SAVE "Save" + IDC_STEXT "Text :" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC2) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Main\nEdit\nIgnore\nCopy\nView\nProfile\nLanguage\nControls\nTools\nHelp" + IDR_TRAYICON "1\nProfile\nLanguage" + IDR_EDIT "1\nIgnore\nCopy\nProfile\nLanguage\nControls\nTools" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, (SUBLANG_DEFAULT+4) +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Sozdanie novogo okna\nSozdat'" + ID_FILE_OPEN "Otkry'tie susch'estvuesch'ego dokumenta\nOtkry't'" + ID_FILE_CLOSE "Zakry'tie aktivnogo okna\nZakry't'" + ID_FILE_SAVE "Sohranenie aktivnogo dokumenta\nSohranit'" + ID_FILE_SAVE_AS "Sohranenie aktivnogo dokumenta pod drugim imenem\nSohranit' kak" + ID_FILE_PAGE_SETUP "Izmenenie parametrov stranicy'\nParametry' stranicy'" + ID_FILE_PRINT_SETUP "Smena prontera i izmenenie ego parametrov\nNastroyka printera" + ID_FILE_PRINT "Pechat' aktivnogo dokumenta\nPechat'" + ID_FILE_PRINT_PREVIEW "Prosmotr pechataemogo materiala v polnostranichnom rejime\nPredvaritel'ny'y prosmotr" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Udalenie simvolov ignorirovaniya\nUdalit' ignorirovanie" + ID_EDIT_COPY_TRNSTORUS "Kopirovanie teksta iz okna translita v russkiy\nKopirovat' translit v russkiy" + ID_EDIT_COPY_RUSTOTRNS "Kopirovanie teksta iz russkogo okna v translit\nKopirovat' russkiy v translit" + ID_VIEW_LANGUAGE_ENGLISH "Angliyskiy yazy'k\nAngliyskiy yazy'k" + ID_VIEW_LANGUAGE_RUSSIAN "Russkiy yazy'k\nRusskiy yazy'k" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\nPerenosit' tekst" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\nProkruchivat' tekst" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Perevodit' tekst\nAvto Transliteraciya" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignorirovat' tekst\nAvto Ignorirovanie" + ID_TOOLS_TRANSLATION "Pokazat' ili skry't' okno perevoda\nPerevod" + ID_TOOLS_TRANSLATEFILES "Pokazat' ili skry't'okno perevoda faylov\nPerevod Faylov" + ID_TOOLS_OPTIONS "Pokazat' ili skry't'okno opciy\nOpcii" + ID_SHOW "Pokazat' okno prilojeniya\nPokazat'" + ID_HIDE "Skry't' okno prilojeniya\nSkry't'" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Vy'vod svedeniy o programme\nO programme" + ID_APP_EXIT "Zavershenie raboty' s prilojeniem\nVy'hod" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Perehod k sleduyusch'ey paneli okna\nSleduyusch'aya panel'" + ID_PREV_PANE "Perehod k predy'dusch'ey paneli okna\nPredy'dusch'aya panel'" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Otkry't' drugoe okno\nNovoe okno" + ID_WINDOW_ARRANGE "Uporyadochit' znachki v nijney chasti okna\nUporyadochit' znachki" + ID_WINDOW_CASCADE "Uporyadochit' okna takim obrazom, chtoby' oni perekry'valis'\nKaskadirovat' okna" + ID_WINDOW_TILE_HORZ "Uporyadochit' okna po gorizontali\nUporyadochit' po gorizontali" + ID_WINDOW_TILE_VERT "Uporyadochit' okna po vertikali\nUporyadochit' po vertikali" + ID_WINDOW_SPLIT "Razbit' aktivnoe okno na paneli\nRazbit'" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Udalenie vy'delenongo fragmenta\nUdalit'" + ID_EDIT_CLEAR_ALL "Udalit' vse\nUdalit' vse" + ID_EDIT_COPY "Kopirovanie vy'delennogo fragmenta v bufer obmena\nKopirovat' v buffer" + ID_EDIT_CUT "Udalenie vy'delennogo fragmenta v bufer obmena\nUdalit' v buffer" + ID_EDIT_FIND "Poisk zadannogo tekstaNayti" + ID_EDIT_PASTE "Vstavka soderjimogo buffera obmena\nVstavit'" + ID_EDIT_REPEAT "Povtorit' poslednee deystvie\nPovtorit'" + ID_EDIT_REPLACE "Zamena teksta\nZamenit'" + ID_EDIT_SELECT_ALL "Vy'delenie vsego dokumenta celikom\nVy'delit' vse" + ID_EDIT_UNDO "Otmena poslednego vy'polnennogo deystviya\nOtmena" + ID_EDIT_REDO "Vernut' rezul'tat poslednego otmenennogo deystviya\nVernut'" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Izmenenie razmerov okna" + ATL_IDS_SCMOVE "Izmenenie polojeniya okna" + ATL_IDS_SCMINIMIZE "Minimizaciya okna" + ATL_IDS_SCMAXIMIZE "Maksimizaciya okna" + ATL_IDS_SCNEXTWINDOW "Perehod k sleduyusch'emu oknu" + ATL_IDS_SCPREVWINDOW "Perehod k predy'dusch'emu oknu" + ATL_IDS_SCCLOSE "Zakry'tie aktivnogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Vosstanovlenie razmerov okna" + ATL_IDS_SCTASKLIST "Aktivizaciya spiska zadach" + ATL_IDS_MDICHILD "Aktivizaciya dannogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Otkry't' e`tot dokument" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Oshibka" + IDS_HELP "Pomosch''" + IDS_TRNSTORUS "Translit v Russkiy" + IDS_RUSTOTRNS "Russkiy v Translit" + IDS_NOTRANSLATE "Net perevoda" + IDS_GENERAL "Obsch'ee" + IDS_HOTKEYS "Goryachie klavishi" + IDS_PROFILE "Profil'" + IDS_IGNORE "Ignorirovanie" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russkiy" + IDS_ALL "Vse" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Vstavka simvolov ignorirovaniya\nVstavit' ignorirovanie" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profil' 1" + ID_PROFILE2 "Profil' 2" + ID_PROFILE3 "Profil' 3" + ID_PROFILE4 "Profil' 4" + ID_PROFILE5 "Profil' 5" + ID_PROFILE6 "Profil' 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Gotovo" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_ABOUT "O programme" + IDD_TRANSLATEFILES "Perevod Faylov" + IDD_OPTIONS "Opcii" + IDD_TRANSLATION "Perevod" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russkiy" + IDC_SPROFILE "Profil'" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "Vy'hod\tAlt+F4" + ID_EDIT_UNDO "Otmenit'\tCtrl+Z" + ID_EDIT_REDO "Povtorit'\tCtrl+Y" + ID_EDIT_CUT "Vy'rezat'\tCtrl+X" + ID_EDIT_COPY "Kopirovat'\tCtrl+C" + ID_EDIT_PASTE "Vstavit'\tCtrl+V" + ID_EDIT_CLEAR "Udalit'\tDel" + ID_EDIT_CLEAR_ALL "Udalit' Vse" + ID_EDIT_SELECT_ALL "Vy'delit' Vse\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Vstavit'\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Udalit'\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit v russkiy\tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russkiy v translit\tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Avto Transliteraciya\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Avto Ignorirovanie\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Perevod...\tF3" + ID_TOOLS_TRANSLATEFILES "Perevod Faylov...\tF4" + ID_TOOLS_OPTIONS "Opcii...\tF2" + ID_APP_ABOUT "O programme...\tF1" + IDC_SABOUT "Programma dlya raboty' s russkimi (kirillicheskimi) bukvami i perevoda russkih bukv v translit i naoborot.\r\nKratkoe opisanie:\r\nPerevod v oboih napravleniyah (translit v russkiy, russkiy v translit).\r\nRazlichny'e profili transliteracii:\r\n - translit > russkiy, russkiy > translit\r\n- qwerty > ycuken, ycuken > qwerty\r\n- Russkiy > CuMBo/\bHblu`, CuMBo/\bHblu` > Russkiy\r\n- Pol'zovatel'skiy > Pol'zovatel'skiy\r\nSimvoly' ignorirovaniya perevoda (posle ustanovki takogo simvola, ukazannaya chast' teksta ne transliteruyutsya).\r\nVy'zov programmy' s pomosch''yu goryachey klavishi: pokaz/skry'tie, avtomaticheskaya transliteraciya.\r\nVozmojnost' Transliteracii faylov (nazvanie fayla ili papki, soderjanie teksta, MP3 te`gi)\r\nVozmojnost' izmeneniya parametrov transliteracii (simvolov perevoda, ignorirovaniya), profiley transliteracii i goryachih klavish na svoy vkus.\r\nSvorachivanie v ikonku , a takje nastroyki pokaza i skry'tiya ikonki v sistemnoy paneli.\r\nYAzy'ki interfeysa: English, Russkiy i Translit\r\nMinimal'ny'y trebovaniya:\r\nWindows 95 i RichEdit versii 3.0 (vhodit v sostav Internet Explorer 5.7 i vy'she)\r\nE`ta programma besplatna i predostavlena ""KAK-EST''"".\r\nYA ne nesu nikakoy otvetsvennosti za usherb , kotory'y mojet by't' nanesen.\r\nBlagodarnosti :\r\nMyxamore6e , DnAp i Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E`l.Pochta : nn-mail@bk.ru" + IDC_SITE "Sayt : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit v Russkiy" + IDC_RUSTOTRNS "Russkiy v Translit" + IDC_SPATH "Put'" + IDC_BROWSE "..." + IDC_SFOLDER "Papka" + IDC_FILES "Fayly'" + IDC_FOLDERS "Papki" + IDC_SUBFOLDERS "Papki v vy'brannoy papke" + IDC_SELFOLDER "Vy'brannaya Papka" + IDC_SFILE "Fayl" + IDC_NAME "Imya" + IDC_ENTRY "Soderjanie" + IDC_MP3TAGS "MP3 Tegi" + IDC_SDIRECTION "Napravlenie" + IDC_TRANSLATE "Perevod" + IDC_CLOSE "Zakry't'" + IDC_SNAME "Nazvanie :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russkiy :" + IDC_ADD "Dobavit'" + IDC_REMOVE "Udalit'" + IDC_CLEAR "Ochistit'" + IDC_SIGNORE "Ignorirovanie" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russkiy :" + IDC_SBEGIN "Ot :" + IDC_SEND "Do :" + IDC_SBEGIN2 "Ot :" + IDC_SEND2 "Do :" + IDC_SCOPYPROFILE "Kopirovat' Iz" + IDC_COPY "Kopirovat'" + IDC_SIN "V" + IDC_RESET "Sbros" + IDC_RESETALL "Sbrosit' vse" + IDC_SRESET "Sbros" + ID_SHOW "Pokazat'" + ID_HIDE "Skry't'" + IDC_APPLY "Primenit'" + IDOK "OK" + IDCANCEL "Otmena" + IDC_STRANSLATESYMBOLS "Simvoly' perevoda" + IDC_SVIEW "Vid" + IDC_SHOWTRAYICON "Sistemnaya ikonka" + IDC_SHOWTASKBAR "Panel' Zadach" + IDC_TOPMOST "Poverh vseh okon" + IDC_SFONTS "SHrifty'" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russkiy" + IDC_FONTTRANSLATION "Perevod" + IDC_SLOADONSTARTUP "Zapusk pri zagruzke" + IDC_LOADSHOWN "Pokazy'vat'" + IDC_LOADHIDDEN "Skry'vat'" + IDC_LOADNO "Ne zagrujat'" + IDC_SHOTKEYS "Goryachie klavishi" + IDC_SACTION "Deystvie :" + IDC_SKEY "Klavisha :" + IDC_ACTION "Translit v Russkiy\nRusskiy v Translit\nAvto Perevod\nPokazat'/Skry't' Programmu\nKopirovat' v Translit\nKopirovat' v Russkiy\n" + IDC_SAUTOTRANSLATION "Avto Perevod" + IDC_COPYIGNORE "Kopirovat' ignorirovanie" + IDC_SLOADSAVE "Zagruzka/Sohranenie" + IDC_LOAD "Zagruzit'" + IDC_SAVE "Sohranit'" + IDC_STEXT "Tekst :" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Glavnaya\nPravka\nIgnorirovanie\nKopirovanie\nVid\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'\nPomosch''" + IDR_TRAYICON "1\nProfil'\nYAzy'k" + IDR_EDIT "1\nIgnorirovanie\nKopirovanie\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Transliterator_5.7/Transliterator.sln b/legacy/Transliterator_5.7/Transliterator.sln new file mode 100644 index 0000000..11e119b --- /dev/null +++ b/legacy/Transliterator_5.7/Transliterator.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{E5DCB808-B8B0-4487-B6C5-0D43578C25A3}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.ActiveCfg = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.Build.0 = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.ActiveCfg = Release|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_5.7/Transliterator.vcproj b/legacy/Transliterator_5.7/Transliterator.vcproj new file mode 100644 index 0000000..706fd40 --- /dev/null +++ b/legacy/Transliterator_5.7/Transliterator.vcproj @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Transliterator_5.7/TransliteratorDlg.cpp b/legacy/Transliterator_5.7/TransliteratorDlg.cpp new file mode 100644 index 0000000..2fd40d3 --- /dev/null +++ b/legacy/Transliterator_5.7/TransliteratorDlg.cpp @@ -0,0 +1,1059 @@ +#include "stdafx.h" +#include "resource.h" + +#include "transliteratordlg.h" +#include "progcommandline.h" + +const LANGID CTransliteratorDlg::s_langEnglish=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +const LANGID CTransliteratorDlg::s_langRussian=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT); +const LANGID CTransliteratorDlg::s_langTranslit=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT+4); + +BOOL CTransliteratorDlg::OnIdle() +{ + BOOL bSelection,bText; + CRichEditCtrl re=::GetFocus(); + + if(re==m_reTrnsRus[Trns]|| + re==m_reTrnsRus[Rus]) + { + bSelection=re.GetSelectionType()!=SEL_EMPTY; + bText=re.GetTextLength()?TRUE:FALSE; + UIEnable(ID_EDIT_UNDO,re.CanUndo()); + UIEnable(ID_EDIT_REDO,re.CanRedo()); + UIEnable(ID_EDIT_CUT,bSelection); + UIEnable(ID_EDIT_COPY,bSelection); + UIEnable(ID_EDIT_PASTE,re.CanPaste()); + UIEnable(ID_EDIT_SELECT_ALL,bText); + UIEnable(ID_EDIT_CLEAR,bSelection); + UIEnable(ID_EDIT_CLEAR_ALL,bText); + UIEnable(ID_EDIT_IGNORE_INSERT,TRUE); + UIEnable(ID_EDIT_IGNORE_REMOVE,TRUE); + } + else + { + for(int i=ID_EDIT_CLEAR;im_strName); + lstrcat(strText,"\tCtrl+"); + strKey[0]=(char)i+'1'; + lstrcat(strText,strKey); + + UISetText(ID_PROFILE1+i,strText); + + UISetCheck(ID_PROFILE1+i,i==g_Options.m_nCurProfile?1:0); + } + + return FALSE; +} + +void CTransliteratorDlg::DlgResize_UpdateLayout(int cxWidth, int cyHeight) +{ + CDialogResize::DlgResize_UpdateLayout(cxWidth,cyHeight); + UpdateLayout(); +} + +void CTransliteratorDlg::Translate(Translate::Direction dir) +{ + bool b1= dir==Translate::dirTrnstoRus; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + const unsigned nChar=((unsigned)reFrom.GetWindowTextLength()+1)*LangString::nCountInit; + NN::AutoArray aText(nChar*2); + if(!aText.GetData()) + return; + + { + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + reFrom.GetTextEx((LPSTR)aText.GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + g_Language.Translate(aText.GetData(),dir,nChar); + reTo.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + } +} + +bool CTransliteratorDlg::Show() +{ + LoadSettings(); + + if(!Create(::GetDesktopWindow())) + return false; + + // Command Line + ProgCommandLine cmdLine; + int nCmdShow; + if(cmdLine.GetCommandLineInfo().IsDefault()) + nCmdShow=g_Options.m_wndState.nCmdShow; + else // CmdLine + nCmdShow=cmdLine.GetCommandLineInfo().nCmdShow; + + ShowWindow(nCmdShow); + + m_bShown = (nCmdShow==SW_HIDE|| + ((nCmdShow==SW_MINIMIZE||nCmdShow==SW_SHOWMINIMIZED)&& + g_Options.m_bShowTrayIcon))?false:true; + if(!m_bShown) + ShowWindow(SW_HIDE); + + UpdateTrayIcon(); + UpdateTaskBar(); + + return true; +} + +void CTransliteratorDlg::CloseDialog() +{ + SaveSettings(); + m_dlgTranslation.DestroyWindow(); + m_dlgTranslateFiles.DestroyWindow(); + m_dlgOptions.DestroyWindow(); + m_dlgAbout.DestroyWindow(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void CTransliteratorDlg::UpdateLayout() +{ + for(int i=0;i<2;i++) + { + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_STRNSTEXT+i),&rect); + ScreenToClient(&rect); + rect.left+=size_delta_left; + rect.right-=size_delta_right; + rect.top+=size_delta_top; + rect.bottom-=size_delta_bottom; + ::MoveWindow(GetDlgItem(IDC_TRNS+i),rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + } +} + +BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||nSize!=size); +} + +BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||!nSize||nSize>size); +} + +void CTransliteratorDlg::LoadSettings() +{ + CRegKey regProg; + + if(!regProg.Open(HKEY_CURRENT_USER,"Software\\NN\\Transliterator")) + { + g_Language.ResetAll(); + + char strUser[6]="User"; + LangProfile langprof; + for(int i=Language::profUser1;im_strName; + HDC hDC=m_wndStatusBar.GetDC(); + SIZE size; + ::GetTextExtentPoint32(hDC,pName,lstrlen(pName),&size); + m_wndStatusBar.ReleaseDC(hDC); + m_wndStatusBar.SetPaneWidth(ID_PROFILE,size.cx); + m_wndStatusBar.SetPaneText(ID_PROFILE,pName); +} + +void CTransliteratorDlg::SaveWindowPlacement() +{ + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(&wndpl); + if(wndpl.showCmd==SW_SHOWMINIMIZED||wndpl.showCmd==SW_MINIMIZE) + wndpl.showCmd=SW_RESTORE; + g_Options.m_wndState.nCmdShow=wndpl.showCmd; +} + +void CTransliteratorDlg::UpdateTrnsRusString() +{ + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); +} + +HWND CTransliteratorDlg::GetActiveWindowChild() +{ + DWORD dwThreadID = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); + GUITHREADINFO gti; + + ZeroMemory(>i, sizeof(GUITHREADINFO)); + gti.cbSize = sizeof(GUITHREADINFO); + ::GetGUIThreadInfo(dwThreadID, >i); + return gti.hwndFocus; +} + +void CTransliteratorDlg::HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)) +{ + HWND hWndTranslation = GetActiveWindowChild(); + if(!hWndTranslation) + return; + + char szClass[64]={0}; + GetClassName(hWndTranslation,szClass,sizeof(szClass)/sizeof(char)-1); + + // Edit control + // Prepare + char szClassEdit[sizeof(szClass)/sizeof(char)]={0}; + lstrcpy(szClassEdit,szClass); + ::CharUpperBuff(szClassEdit, lstrlen(szClassEdit)); + // Check + if((_tcsstr(szClassEdit, "EDIT")|| + _tcsstr(szClassEdit, "TEXT"))) + { + CEdit wndTranslation=hWndTranslation; + const unsigned nChar = (unsigned)(wndTranslation.GetWindowTextLength()+1)*LangString::nCountInit; + + NN::AutoArray aText(nChar); + + if(!aText.GetData()) + return; + + int nStart,nEnd; + wndTranslation.GetSel(nStart,nEnd); + + if(nStart==nEnd||(!nStart&&nEnd==-1)) + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.GetData()); + + (*pDo)(aText.GetData(),dir,nChar,hWndTransliterator); + + wndTranslation.SendMessage(WM_SETTEXT,0,(LPARAM)aText.GetData()); + } + else + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.GetData()); + for(int nItem=nStart;nItem spDoc; + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + if(LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, _T("ObjectFromLresult"))) + { + if(SUCCEEDED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + { + CComPtr spDisp; + CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + CComQIPtr spInput=spElem; + CComQIPtr spTA=spElem; + + CComBSTR strText; + CComVariant v; + + if(spInput) + spInput->get_value(&strText); + else + if(spTA) + spTA->get_value(&strText); + else + spElem->get_innerText(&strText); + + if(strText) + { + const unsigned nChar=(strText.Length()+1)*LangString::nCountInit; + + { + NN::AutoArray aTextA(nChar); + if(!aTextA.GetData()) + return; + ::WideCharToMultiByte(CP,0,strText.m_str,nChar,aTextA.GetData(),nChar,0,0); + (*pDo)(aTextA.GetData(),dir,nChar,hWndTransliterator); + strText.Empty(); + strText.Append(aTextA.GetData()); + } + + if(spInput) + spInput->put_value(strText); + else + if(spTA) + spTA->put_value(strText); + else + spElem->put_innerText(strText); + } + } + ::FreeLibrary(hOleAccInstance); + } // else Active Accessibility is not installed + } + // Window + else + { + unsigned nChar = (unsigned)::SendMessage(hWndTranslation,WM_GETTEXTLENGTH,0,0)+1; + nChar*=LangString::nCountInit; + + NN::AutoArray aText(nChar); + if(!aText.GetData()) + return; + + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(nChar-1),(LPARAM)aText.GetData()); + + (*pDo)(aText.GetData(),dir,nChar,hWndTransliterator); + + ::SendMessage(hWndTranslation,WM_SETTEXT,0,(LPARAM)aText.GetData()); + } +} + +void CTransliteratorDlg::HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND) +{ + g_Language.Translate(pText,DefineDirection(dir,pText),nChar); +} + +void CTransliteratorDlg::HotKeyCopy(char* pText,Translate::Direction dir,int /*nChar*/,HWND hWndTransliterator) +{ + ::SendDlgItemMessage(hWndTransliterator, + dir==Translate::dirTrnstoRus?IDC_TRNS:IDC_RUS, + WM_SETTEXT,0,(LPARAM)pText); +} + +void CTransliteratorDlg::HotKeyShow(bool bShow) +{ + if(bShow) + { + ShowWindow(g_Options.m_wndState.nCmdShow==SW_SHOWMINIMIZED|| + g_Options.m_wndState.nCmdShow==SW_MINIMIZE? + SW_RESTORE:g_Options.m_wndState.nCmdShow); + } + else + { + SaveWindowPlacement(); + ShowWindow(SW_HIDE); + } + UpdateTrayIcon(); +} + +Translate::Direction CTransliteratorDlg::DefineDirection(Translate::Direction dir,LPCSTR strText) +{ + if(dir==Translate::dirAuto) + { + char str[2]={strText[0]}; + LangType t(str,str); + unsigned u=g_Language.GetCurProfile()->m_map.Find(t,0,0); + if(u!=(unsigned)-1) + return Translate::dirTrnstoRus; + u=g_Language.GetCurProfile()->m_map.Find(t,0,1); + if(u!=(unsigned)-1) + return Translate::dirRusToTrns; + return g_Options.m_nAutoTranslation; + } + else + return dir; +} + +void CTransliteratorDlg::UpdateTranslation() +{ + Translate(::GetFocus()==m_reTrnsRus[Trns]? + Translate::dirTrnstoRus: + Translate::dirRusToTrns); +} + +void CTransliteratorDlg::InitControls() +{ + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + // Save Text + NN::AutoArray aText[2]; + bool bCreated=m_reTrnsRus[0].m_hWnd&&m_reTrnsRus[1].m_hWnd; + if(bCreated) + { + for(int i=0;i<2;i++) + { + // Text + unsigned nChar=(unsigned)m_reTrnsRus[i].GetWindowTextLength()+1; + aText[i].Allocate(nChar); + if(aText[i].GetData()) + m_reTrnsRus[i].GetTextEx((LPSTR)aText[i].GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Destroy + m_reTrnsRus[i].DestroyWindow(); + } + } + + // Create + DWORD dwStyle= + WS_TABSTOP| + WS_BORDER| + WS_CHILD| + WS_VISIBLE| + ES_WANTRETURN| + ES_MULTILINE| + WS_VSCROLL| + ES_AUTOVSCROLL; + + if(!g_Options.m_bWrapText) + dwStyle|=WS_HSCROLL|ES_AUTOHSCROLL; + DWORD dwExStyle=0; + + RECT rect={0,0,1,1}; + for(int i=0;i<2;i++) + { + if(!m_reTrnsRus[i].Create(m_hWnd,rect,"",dwStyle,dwExStyle,IDC_TRNS+i)) + { + ShowError(m_hWnd,_T("Cannot create text box")); + return; + } + + m_reTrnsRus[i].SendMessage(EM_SETLIMITTEXT,(WPARAM)MAX_SYMBOL,0); + m_reTrnsRus[i].SetEventMask(ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + } + + UpdateLayout(); + + if(bCreated) + { + for(int i=0;i<2;i++) + if(aText[i].GetData()) + m_reTrnsRus[i].SetTextEx((LPCSTR)aText[i].GetData(),ST_DEFAULT,1200); + } + + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); +} + +void CTransliteratorDlg::InitDialog() +{ + m_dlgTranslation.Create(m_hWnd); + m_dlgTranslateFiles.Create(m_hWnd); + m_dlgOptions.Create(m_hWnd); + m_dlgAbout.Create(m_hWnd); +} + +void CTransliteratorDlg::InitMessageLoop() +{ + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + pLoop->AddMessageFilter(&m_dlgOptions); + pLoop->AddMessageFilter(&m_dlgTranslation); + pLoop->AddMessageFilter(&m_dlgTranslateFiles); + pLoop->AddMessageFilter(&m_dlgAbout); + + UIAddChildWindowContainer(m_hWnd); +} + +LRESULT CTransliteratorDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Icon + DialogIcon_Init(); + // StatusBar + m_wndStatusBar.Create(m_hWnd); + m_hWndStatusBar = m_wndStatusBar; + int panes[] = { ID_COUNTTRNS, ID_COUNTRUS, ID_DEFAULT_PANE, ID_PROFILE }; + m_wndStatusBar.SetPanes(panes, sizeof(panes)/sizeof(panes[0]), false); + + HDC hDC=m_wndStatusBar.GetDC(); + SetTextCharacterExtra(hDC,0); + m_wndStatusBar.ReleaseDC(hDC); + + UpdateStatusBar(); + // Language + DialogLang_Init(); + // Controls + InitControls(); + // Resize + DlgResize_Init(false,true); + + m_hAccel=::LoadAccelerators(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)); + + InitDialog(); + + InitTrayIcon(IDR_TRANSLITERATOR, + ::LoadIcon(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)), + IDR_TRAYICON); + + { + NN::AutoSGRef sg(g_Options.m_bShowTrayIcon,FALSE,g_Options.m_bShowTrayIcon); + SetOptions(true); + } + + UpdateTrnsRusString(); + UpdateCount(); + m_dlgTranslation.UpdateCurProfile(); + + // Set Text + if(m_aText[Trns].GetData()||m_aText[Rus].GetData()) + { + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + for(int i=0;i<2;i++) + { + if(m_aText[i].GetData()) + { + m_reTrnsRus[i].SetTextEx((LPCSTR)m_aText[i].GetData(),ST_DEFAULT,1200); + m_aText[i].Free(); + } + } + } + + InitMessageLoop(); + + return TRUE; +} + +LRESULT CTransliteratorDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled=FALSE; + WORD wMsg=LOWORD(wParam); + + if(wMsg==SC_CLOSE) + CloseDialog(); + else + if(wMsg==SC_MINIMIZE&&g_Options.m_bShowTrayIcon) + { + bHandled=TRUE; + ShowWindow(SW_MINIMIZE); + HotKeyShow(false); + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam-hkID) + { + case Options::hkTrnstoRus: + HotKeyText(Translate::dirTrnstoRus,NULL,HotKeyTranslate); + break; + case Options::hkRusEndTrns: + HotKeyText(Translate::dirRusToTrns,NULL,HotKeyTranslate); + break; + case Options::hkAuto: + HotKeyText(Translate::dirAuto,m_hWnd,HotKeyTranslate); + break; + case Options::hkShowHide: + HotKeyShow(IsWindowVisible()?false:true); + break; + case Options::hkCopyTrns: + HotKeyText(Translate::dirTrnstoRus,m_hWnd,HotKeyCopy); + break; + case Options::hkCopyRus: + HotKeyText(Translate::dirRusToTrns,m_hWnd,HotKeyCopy); + break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnQueryEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + SaveSettings(); + return TRUE; +} + +LRESULT CTransliteratorDlg::OnApply(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) +{ + if(lParam) + SetOptions(); + if(wParam) + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CloseDialog(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnEditIgnore(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + bool bInsert=wID==ID_EDIT_IGNORE_INSERT; + + // Get Text + unsigned nChar=re.GetWindowTextLength()*LangProfile::nIgnore*2+1; + NN::AutoArray aText(nChar); + long nStart,nEnd; + re.GetSel(nStart,nEnd); + + re.GetTextEx((LPSTR)aText.GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Insert/Remove + if(nStart==nEnd) + { + if(bInsert) + { + g_Language.SetIgnore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + + int nText=lstrlenW(aText.GetData()); + re.SetSel(nText,nText); + } + else + { + g_Language.SetIgnore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + re.SetSel(nStart,nStart); + } + } + // Ignore + else + { + if(!nStart&&nEnd==-1|| + !nStart&&nEnd==lstrlenW(aText.GetData())) // All + { + g_Language.Ignore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + } + else // Selection + { + for(long nItem=nStart;nItem aTextA(nChar); + ::WideCharToMultiByte(CP,0,aText.GetData(),nChar,aTextA.GetData(),nChar,0,0); + re.ReplaceSel(aTextA.GetData()); + } + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCopy(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE); + + bool b1= wID==ID_EDIT_COPY_TRNSTORUS; + + CRichEditCtrl& reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl& reTo=m_reTrnsRus[b1]; + + int nLen=reFrom.GetTextLength()+1; + NN::AutoArray aText(nLen); + reFrom.GetTextEx((LPSTR)aText.GetData(),nLen,GT_DEFAULT,CP); + reTo.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,CP); + + return 0; +} + +LRESULT CTransliteratorDlg::OnProfile(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_nCurProfile=wID-ID_PROFILE1; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + m_dlgTranslation.UpdateCurProfile(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewLanguage(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + switch(wID) + { + case ID_VIEW_LANGUAGE_ENGLISH: + g_LangID=s_langEnglish; + break; + case ID_VIEW_LANGUAGE_RUSSIAN: + g_LangID=s_langRussian; + break; + case ID_VIEW_LANGUAGE_TRANSLIT: + g_LangID=s_langTranslit; + break; + default: + return 0; + } + + UpdateLanguage(); + + m_dlgTranslation.UpdateLanguage(); + m_dlgTranslateFiles.UpdateLanguage(); + m_dlgOptions.UpdateLanguage(); + m_dlgAbout.UpdateLanguage(); + + UpdateTrnsRusString(); + UpdateCount(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControls(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==ID_VIEW_CONTROLS_WRAPTEXT) + g_Options.m_bWrapText=!g_Options.m_bWrapText; + else + g_Options.m_bScrollText=!g_Options.m_bScrollText; + + InitControls(); + SetOptionsFont(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoTransliteration(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bTranslate=!g_Options.m_bTranslate; + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bIgnore=!g_Options.m_bIgnore; + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslation(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslation.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslateFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslateFiles.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgOptions.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgAbout.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + HotKeyShow(wID==ID_SHOW); + UpdateTrayIcon(); + if(wID==ID_SHOW) + UpdateTaskBar(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnChangeTrnsRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslate=false; + if(g_Options.m_bTranslate&&!bTranslate) + { + NN::AutoSGRefT sg(bTranslate); + Translate(wID==IDC_TRNS?Translate::dirTrnstoRus:Translate::dirRusToTrns); + + bool b1= wID==IDC_TRNS; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + if(g_Options.m_bScrollText) + reTo.LineScroll(reFrom.GetFirstVisibleLine()); + } + UpdateCount(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnMsgFilterTrnsRus(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + ::SetFocus(pMsgFilter->nmhdr.hwndFrom); + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_EDIT)); + hMenu=::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; +} + +LRESULT CTransliteratorDlg::OnClickStatusBar(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + if(pnmhdr->code==NM_RCLICK) + { + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_PROFILE)); + hMenu=::GetSubMenu(hMenu,0); + ::SetMenuDefaultItem(hMenu,IsWindowVisible()?ID_HIDE:ID_SHOW,FALSE); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + else + if(pnmhdr->code==NM_DBLCLK) + { + if(++g_Options.m_nCurProfile==Language::nProfiles) + g_Options.m_nCurProfile=0; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_5.7/TransliteratorDlg.h b/legacy/Transliterator_5.7/TransliteratorDlg.h new file mode 100644 index 0000000..abc3b91 --- /dev/null +++ b/legacy/Transliterator_5.7/TransliteratorDlg.h @@ -0,0 +1,215 @@ +#ifndef __TRANSLITERATORDLG_H__ +#define __TRANSLITERATORDLG_H__ + +#include "translatefilesdlg.h" +#include "translationdlg.h" +#include "optionsdlg.h" +#include "aboutdlg.h" + +class CTransliteratorDlg : public CDialogImpl, + public CUpdateUI, + public CIdleHandler, + public CDialogResize, + public NN::TrayIcon, + public NN::DialogStatusBarMenu, + public NN::DialogIcon, + public NN::DialogLang, + public NN::MessageFilterDlgAccel +{ +public: + enum { IDD=IDR_TRANSLITERATOR } ; + enum { Trns , Rus }; + enum + { + size_delta_left = 5, + size_delta_right = 5, + size_delta_top = 15, + size_delta_bottom = 5 + }; + enum { CP = 1251 }; + enum { hkID = 1000 }; + + // Static + static const LANGID s_langEnglish; + static const LANGID s_langRussian; + static const LANGID s_langTranslit; + + // Text + NN::AutoArray m_aText[2]; + + // Members + NN::AutoValue m_hAccel; + POINT m_ptMinTrackSize; + NN::AutoValue m_bTrayIcon; + NN::AutoValue m_bShown; + + CMultiPaneStatusBarCtrl m_wndStatusBar; + CRichEditCtrl m_reTrnsRus[2]; + + enum { nTrnsRus = 30 }; + char m_strTrnsRus[2][nTrnsRus]; + + // Dialogs + CTranslationDlg m_dlgTranslation; + CTranslateFilesDlg m_dlgTranslateFiles; + COptionsDlg m_dlgOptions; + CAboutDlg m_dlgAbout; + + // Virtual Functions + virtual BOOL OnIdle(); + + // Override + void DlgResize_UpdateLayout(int cxWidth, int cyHeight); + + // Not Virtual + void Translate(Translate::Direction dir); + bool Show(); + void CloseDialog(); + void UpdateLayout(); + + BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size); + BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size); + void LoadSettings(); + void SaveSettings(); + + void SetOptions(bool bFirst=false); + void SetOptionsFont(); + + void UpdateCount(); + void UpdateTrayIcon(); + void UpdateTaskBar(); + void UpdateStatusBar(); + void SaveWindowPlacement(); + + void UpdateTrnsRusString(); + + static HWND GetActiveWindowChild(); + void HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)); + static void HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND); + static void HotKeyCopy(char* pText,Translate::Direction dir,int nChar,HWND hWndTransliterator); + void HotKeyShow(bool bShow); + + static Translate::Direction DefineDirection(Translate::Direction dir,LPCSTR strText); + + void UpdateTranslation(); + + void InitControls(); + void InitDialog(); + void InitMessageLoop(); + + // Maps + BEGIN_UPDATE_UI_MAP(CTransliteratorDlg) + UPDATE_ELEMENT(ID_EDIT_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_INSERT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_REMOVE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_ENGLISH,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_RUSSIAN,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_TRANSLIT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_WRAPTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_SCROLLTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOTRANSLITERATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOIGNORE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATEFILES,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_OPTIONS,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_APP_ABOUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE1,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE2,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE3,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE4,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE5,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE6,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE7,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE8,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE9,UPDUI_MENUPOPUP|UPDUI_TEXT) + END_UPDATE_UI_MAP() + + BEGIN_DLGRESIZE_MAP(CTransliteratorDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_STRNSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_SRUSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslieratortDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + MESSAGE_HANDLER(WM_QUERYENDSESSION, OnQueryEndSession) + MESSAGE_HANDLER(WM_APPLY, OnApply) + + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_INSERT, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_REMOVE, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_COPY_TRNSTORUS, OnEditCopy) + COMMAND_ID_HANDLER(ID_EDIT_COPY_RUSTOTRNS, OnEditCopy) + COMMAND_RANGE_HANDLER(ID_PROFILE1,ID_PROFILE9,OnProfile) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_ENGLISH, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_RUSSIAN, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_TRANSLIT, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_WRAPTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_SCROLLTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOTRANSLITERATION, OnViewControlsAutoTransliteration) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOIGNORE, OnViewControlsAutoIgnore) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATION, OnToolsTranslation) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATEFILES, OnToolsTranslateFiles) + COMMAND_ID_HANDLER(ID_TOOLS_OPTIONS, OnToolsOptions) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + + COMMAND_HANDLER(IDC_TRNS, EN_CHANGE, OnEnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChangeTrnsRus) + NOTIFY_HANDLER(IDC_TRNS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_RCLICK, OnClickStatusBar) + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_DBLCLK, OnClickStatusBar) + + CHAIN_MSG_MAP(NN::DialogStatusBarMenu) + CHAIN_MSG_MAP(NN::TrayIcon) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(CUpdateUI) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnQueryEndSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnApply(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCommands(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewLanguage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControls(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoTransliteration(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslation(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslateFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAppAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTrnsRus(int code, NMHDR* pnmhdr, BOOL& bHandled); + + LRESULT OnClickStatusBar(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLITERATORDLG_H__ diff --git a/legacy/Transliterator_5.7/TrnsOptionsPage.h b/legacy/Transliterator_5.7/TrnsOptionsPage.h new file mode 100644 index 0000000..a8e2431 --- /dev/null +++ b/legacy/Transliterator_5.7/TrnsOptionsPage.h @@ -0,0 +1,18 @@ +#ifndef __TRNSOPTIONSPAGE_H__ +#define __TRNSOPTIONSPAGE_H__ + +#include "optionsstruct.h" + +template +class TrnsOptionsPage : public NN::OptionsPageImpl, + public NN::DialogLang +{ +public: + typedef NN::OptionsPageImpl baseClass; + + BEGIN_MSG_MAP(TrnsOptionsPage) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() +}; + +#endif // __TRNSOPTIONSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/Types.h b/legacy/Transliterator_5.7/Types.h new file mode 100644 index 0000000..a7bfc37 --- /dev/null +++ b/legacy/Transliterator_5.7/Types.h @@ -0,0 +1,22 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +// Translate +#define LANG_COUNT 6 +#define LANGMAP_COUNT 150 +typedef NN::StaticArray LangString; +typedef LangString::Traits LangStringTraits; +typedef NN::StaticArray LangStringW; +typedef LangStringW::Traits LangStringTraitsW; +typedef NN::Tuple LangType; +typedef NN::Tuple LangTypeW; +typedef NN::StaticArrayMap LangMap; + +// Ignore +#define IGNORE_COUNT 30 +#define IGNOREMAP_COUNT 50 +typedef NN::StaticArray IgnoreString; +typedef NN::Tuple IgnoreType; +typedef NN::StaticArrayMap IgnoreMap; + +#endif // __TYPES_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/WindowState.h b/legacy/Transliterator_5.7/WindowState.h new file mode 100644 index 0000000..bc09734 --- /dev/null +++ b/legacy/Transliterator_5.7/WindowState.h @@ -0,0 +1,15 @@ +#ifndef __WINDOWSTATE_H__ +#define __WINDOWSTATE_H__ + +struct WindowState +{ + int nCmdShow; + void Reset() + { nCmdShow=SW_SHOWNORMAL; } + const bool IsDefault() const + { return nCmdShow==SW_SHOWNORMAL; } + const bool operator==(const WindowState& state) const + { return nCmdShow==state.nCmdShow; } +}; + +#endif // __WINDOWSTATE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.7/res/Transliterator.ico b/legacy/Transliterator_5.7/res/Transliterator.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Transliterator_5.7/res/Transliterator.ico differ diff --git a/legacy/Transliterator_5.7/stdafx.cpp b/legacy/Transliterator_5.7/stdafx.cpp new file mode 100644 index 0000000..1577c4e --- /dev/null +++ b/legacy/Transliterator_5.7/stdafx.cpp @@ -0,0 +1 @@ +#include "stdafx.h" \ No newline at end of file diff --git a/legacy/Transliterator_5.7/stdafx.h b/legacy/Transliterator_5.7/stdafx.h new file mode 100644 index 0000000..dd354a5 --- /dev/null +++ b/legacy/Transliterator_5.7/stdafx.h @@ -0,0 +1,85 @@ +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +#pragma once + +// Definitions +#define WINVER 0x0500 +#define _WIN32_IE 0x0500 +#define _RICHEDIT_VER 0x0300 +#define _ATL_NO_COM +#define _ATL_NO_OLD_NAMES +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS + +//#define _ATL_ALL_WARNINGS +#define NN_WINDOWS + +#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning) + +// Language +#include +#define _LANG_R_ +extern LANGID g_LangID; +#define _LANG_LangID_ g_LangID +#include + +// ATL / WTL +#include +#include +extern CAppModule _Module; + +#include +#include +#include +#include +#include +#include +#include + +// NN +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Program +#include "msg.h" +#include "translate.h" +#include "change.h" +#include "splitstr.h" +#include "types.h" +#include "traits.h" +#include "langprofile.h" +#include "langstruct.h" +#include "ignore.h" + +#include "error.h" +#include "language.h" +#include "options.h" +#include "global.h" +#include "controls.h" + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) +#endif // _DEBUG + +#endif // __STDAFX_H__ diff --git a/legacy/Transliterator_5.8/AboutDlg.h b/legacy/Transliterator_5.8/AboutDlg.h new file mode 100644 index 0000000..1ab4e90 --- /dev/null +++ b/legacy/Transliterator_5.8/AboutDlg.h @@ -0,0 +1,33 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +class CAboutDlg : public CDialogImpl, + public NN::DialogLang, + public NN::ToolWindow, + public NN::MessageFilterDlg +{ +public: + enum { IDD= IDD_ABOUT }; + typedef CAboutDlg thisClass; + + BEGIN_MSG_MAP(thisClass) + COMMAND_ID_HANDLER(IDC_EMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_SITE, OnSite) + CHAIN_MSG_MAP(NN::ToolWindow) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() + + LRESULT OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; + } + + LRESULT OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; + } +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Change.h b/legacy/Transliterator_5.8/Change.h new file mode 100644 index 0000000..6543e24 --- /dev/null +++ b/legacy/Transliterator_5.8/Change.h @@ -0,0 +1,16 @@ +#ifndef __CHANGE_H__ +#define __CHANGE_H__ + +inline size_t strcpy_change(char** out,const char* in) +{ + char** out_o=out; + while(*in) + { + **out=*in; + (*out)++; + in++; + } + return *out-*out_o; +} + +#endif // __CHANGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Controls.h b/legacy/Transliterator_5.8/Controls.h new file mode 100644 index 0000000..f70f85a --- /dev/null +++ b/legacy/Transliterator_5.8/Controls.h @@ -0,0 +1,31 @@ +#ifndef __CONTROLS_H__ +#define __CONTROLS_H__ + +inline void InitCmbLanguage(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageUser(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageDefUser(HWND hWnd,int nCurSel,const Language& rL) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + + +#endif // __CONTROLS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/DDXHotKey.h b/legacy/Transliterator_5.8/DDXHotKey.h new file mode 100644 index 0000000..d55a03f --- /dev/null +++ b/legacy/Transliterator_5.8/DDXHotKey.h @@ -0,0 +1,48 @@ +#ifndef __DDXHOTKEY_H__ +#define __DDXHOTKEY_H__ + +/*#define DDX_HOTKEY(nID,vk,fsModifiers) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,vk,fsModifiers,bSaveAndValidate); + +#define DDX_HOTKEY_C(nID,rHotKey,bConvert) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate,bConvert); + +#define DDX_HOTKEY_(nID,rHotKey) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate); +*/ +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,WORD& vk,WORD& fsModifiers,BOOL bSave) +{ + if(bSave) + { + WORD wHotKey=(WORD)::SendDlgItemMessage(hWnd,nID,HKM_GETHOTKEY,0,0); + vk=LOBYTE(wHotKey); + fsModifiers=HIBYTE(wHotKey); + } + else + ::SendDlgItemMessage(hWnd,nID,HKM_SETHOTKEY,(WPARAM)MAKEWORD(vk,fsModifiers),0); + return TRUE; +} + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,NN::HotKey& rHotKey,BOOL bSave,BOOL bConvert=TRUE) +{ + NN::HotKey hk=rHotKey; + if(bConvert) + hk.ConvertToHotKey(); + if(bSave) + { + BOOL bRet=DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); + if(bRet) + { + hk.ConvertToWnd(); + rHotKey=hk; + } + return bRet; + } + else + return DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); +} + +#endif // __DDXHOTKEY_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Error.h b/legacy/Transliterator_5.8/Error.h new file mode 100644 index 0000000..5f596b2 --- /dev/null +++ b/legacy/Transliterator_5.8/Error.h @@ -0,0 +1,22 @@ +#ifndef __ERROR_H____ +#define __ERROR_H____ + +#ifndef IDS_ERROR +#define IDS_ERROR 62000 +#define IDS_ERROR_DEFINED +#endif // !IDS_ERROR + +inline int ShowError(HWND hWnd, _U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return AtlMessageBox(hWnd,Text,Caption,uType); } + +inline int ShowError(_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return ShowError(NULL,Text,uType,Caption); } + +#ifdef IDS_ERROR_DEFINED +#undef IDS_ERROR +#undef IDS_ERROR_DEFINED +#endif // IDS_ERROR_DEFINED + +#endif // __ERROR_H____ diff --git a/legacy/Transliterator_5.8/GeneralPage.h b/legacy/Transliterator_5.8/GeneralPage.h new file mode 100644 index 0000000..ed8edc8 --- /dev/null +++ b/legacy/Transliterator_5.8/GeneralPage.h @@ -0,0 +1,77 @@ +#ifndef __GENERALPAGE_H__ +#define __GENERALPAGE_H__ + +#include "trnsoptionspage.h" + +class CGeneralPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEGENERAL }; + + void FontDialog(LPLOGFONT pLF) + { + CFontDialog fontdlg(pLF); + if(fontdlg.DoModal()==IDOK) + *pLF=fontdlg.m_lf; + } + + void UpdateFont() + { + char strFont[200]; + + HDC hDC = ::GetDC(NULL); + TEXTMETRIC tm; + ::GetTextMetrics(hDC,&tm); + for(int i=0;im_Options.m_lfFont[i]; + + wsprintf(strFont,"%s - %d", + lf.lfFaceName, + (int)(0 - + ( + (double) + MulDiv(lf.lfHeight, 72, + GetDeviceCaps(hDC, LOGPIXELSY)) - 0.5) + ) + ); + + if(lf.lfWeight>=FW_BOLD) + lstrcat(strFont," - Bold"); + if(lf.lfItalic) + lstrcat(strFont," - Italic"); + if(lf.lfUnderline) + lstrcat(strFont," - Underline"); + if(lf.lfStrikeOut) + lstrcat(strFont," - StrikeOut"); + + SetDlgItemText(IDC_FONTNAMETRNS+i,strFont); + } + ::ReleaseDC(NULL,hDC); + } + + BEGIN_DDX_MAP(CGeneralPage) + DDX_CHECK(IDC_SHOWTRAYICON,GetOptions()->m_Options.m_bShowTrayIcon) + DDX_CHECK(IDC_SHOWTASKBAR,GetOptions()->m_Options.m_bShowTaskBar) + DDX_CHECK(IDC_TOPMOST,GetOptions()->m_Options.m_bTopMost) + DDX_RADIO(IDC_LOADNO,(int&)GetOptions()->m_Options.m_nLoadOnStartUp) + if(bSaveAndValidate==DDX_LOAD) + UpdateFont(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CGeneralPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_ID_HANDLER(IDC_FONTTRNS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTRUS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTTRANSLATION,OnFont) + END_MSG_MAP() + + LRESULT OnFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + FontDialog(&GetOptions()->m_Options.m_lfFont[wID-IDC_FONTTRNS]); + UpdateFont(); + return 0; + } +}; + +#endif // __GENERALPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Global.cpp b/legacy/Transliterator_5.8/Global.cpp new file mode 100644 index 0000000..6e9e94b --- /dev/null +++ b/legacy/Transliterator_5.8/Global.cpp @@ -0,0 +1,8 @@ +#include "stdafx.h" + +CAppModule _Module; +Language g_Language; +LANGID g_LangID; +const LANGID g_LangIDDefault=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +Options g_Options; +Ignore g_Ignore; \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Global.h b/legacy/Transliterator_5.8/Global.h new file mode 100644 index 0000000..e5773a8 --- /dev/null +++ b/legacy/Transliterator_5.8/Global.h @@ -0,0 +1,13 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +extern CAppModule _Module; +extern Language g_Language; +extern LANGID g_LangID; +extern const LANGID g_LangIDDefault; +extern Options g_Options; +extern Ignore g_Ignore; + +#define MAX_SYMBOL 1000 + +#endif // __GLOBAL_H__ diff --git a/legacy/Transliterator_5.8/HotKeysPage.h b/legacy/Transliterator_5.8/HotKeysPage.h new file mode 100644 index 0000000..0e45839 --- /dev/null +++ b/legacy/Transliterator_5.8/HotKeysPage.h @@ -0,0 +1,53 @@ +#ifndef __HOTKEYSPAGE_H__ +#define __HOTKEYSPAGE_H__ + +#include "trnsoptionspage.h" +#include "ddxhotkey.h" + +class CHotKeysPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEHOTKEYS }; + + NN::auto_value m_nCurSel; + + BEGIN_DDX_MAP(CHotKeysPage) + DDX_RADIO(IDC_TRNSTORUS,(int&)GetOptions()->m_Options.m_nAutoTranslation) + if(bSaveAndValidate) + SaveHotKey(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_HANDLER(IDC_ACTION,CBN_SELCHANGE,OnCmbSelChangeAction) + END_MSG_MAP() + + void SaveHotKey() + { + if(m_nCurSel!=CB_ERR) + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hotkey.GetHotKey(hk.vk,hk.fsModifiers); + hk.ConvertToWnd(); + } + } + + void LoadHotKey() + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + m_nCurSel=SendDlgItemMessage(IDC_ACTION,CB_GETCURSEL,0,0); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hk.ConvertToHotKey(); + hotkey.SetHotKey(hk.vk,hk.fsModifiers); + } + + LRESULT OnCmbSelChangeAction(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SaveHotKey(); + LoadHotKey(); + return 0; + } +}; + +#endif // __HOTKEYSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Ignore.h b/legacy/Transliterator_5.8/Ignore.h new file mode 100644 index 0000000..cab0772 --- /dev/null +++ b/legacy/Transliterator_5.8/Ignore.h @@ -0,0 +1,38 @@ +#ifndef __IGNORE_H__ +#define __IGNORE_H__ + +class Ignore +{ + IgnoreMap m_map; +public: + unsigned GetLast() const { return m_map.GetLast(); } + + IgnoreType& GetAt(unsigned nItem) { return m_map[nItem]; } + const IgnoreType& GetAt(unsigned nItem) const { return m_map[nItem]; } + IgnoreType& operator[](unsigned nItem) { return GetAt(nItem); } + const IgnoreType& operator[](unsigned nItem) const { return GetAt(nItem); } + + void Add(const IgnoreType& t) { m_map.Add(t); } + void Remove(const IgnoreType& t) { m_map.Remove(t); } + void RemoveAt(unsigned nItem) { m_map.RemoveAt(nItem); } + void RemoveAll() { m_map.RemoveAll(); } + + void Reset() { m_map.RemoveAll(); } + + unsigned Find(const IgnoreType& t) { return m_map.Find(t); } + + const Ignore& operator=(const Ignore& ignore) + { + m_map.SetData(ignore.m_map); + return *this; + } + + bool operator!=(const Ignore& ignore) const + { return m_map.Compare(ignore.m_map); } + bool operator==(const Ignore& ignore) const + { return !operator!=(ignore); } +}; + + + +#endif // __IGNORE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/IgnorePage.h b/legacy/Transliterator_5.8/IgnorePage.h new file mode 100644 index 0000000..d69fff3 --- /dev/null +++ b/legacy/Transliterator_5.8/IgnorePage.h @@ -0,0 +1,188 @@ +#ifndef __IGNOREPAGE_H__ +#define __IGNOREPAGE_H__ + +#include "trnsoptionspage.h" + +class CIgnorePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEIGNORE }; + + CRichEditCtrl m_reIgnore; + CListBox m_lbIgnore; + enum { Trns , Rus }; + enum { nTrnsRus = 50 }; + enum { CP = 1251 }; + char m_strTrnsRus[2][nTrnsRus]; + + void UpdateLanguage() + { + TrnsOptionsPage::UpdateLanguage(); + UpdateTrnsRusString(); + InitListIgnore(); + } + + void UpdateTrnsRusString() + { + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); + } + + void InitListIgnore() + { + m_lbIgnore.ResetContent(); + char strText[IgnoreString::nCountInit+40]; + const Ignore& rIgnore=GetOptions()->m_Ignore; + for(unsigned i=0;i().GetData()); + if(rIgnore[i].Get<1>() != Translate::trnsNone) + { + lstrcat(strText," - "); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsTrnstoRus) + lstrcat(strText,m_strTrnsRus[Trns]); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsRustoTrns) + { + lstrcat(strText,","); + lstrcat(strText,m_strTrnsRus[Rus]); + } + } + m_lbIgnore.AddString(strText); + } + } + + void Init() + { + InitListIgnore(); + m_reIgnore.SetWindowText(""); + CheckDlgButton(IDC_TRNSTORUS,FALSE); + CheckDlgButton(IDC_RUSTOTRNS,FALSE); + } + + unsigned FindIgnore(const char* str) + { + static const Translate::LangTranslate aMapLT[]= + { + Translate::trnsNone, + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsAll, + }; + + IgnoreType type; + type.Get<0>()=str; + + for(int i=0;i()=aMapLT[i]; + unsigned uFind=GetOptions()->m_Ignore.Find(type); + if(uFind!=(unsigned)-1) + return uFind; + } + return (unsigned)-1; + } + + BEGIN_DDX_MAP(CIgnorePage) + if(!bSaveAndValidate) + { + Init(); + } + END_DDX_MAP() + + BEGIN_MSG_MAP(CIgnorePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_LISTIGNORE,LBN_SELCHANGE, OnLbnSelChangeListIgnore) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_CLEAR, OnAddRemoveClear) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_lbIgnore=GetDlgItem(IDC_LISTIGNORE); + m_reIgnore=GetDlgItem(IDC_IGNORE); + SendDlgItemMessage(IDC_IGNORE,EM_LIMITTEXT,(WPARAM)IgnoreString::nCountInit-1,0); + UpdateTrnsRusString(); + + return 0; + } + + LRESULT OnLbnSelChangeListIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + char strText[IgnoreString::nCountInit]; + wchar_t strTextW[IgnoreString::nCountInit]; + + IgnoreType& type=GetOptions()->m_Ignore[m_lbIgnore.GetCurSel()]; + lstrcpy(strText,type.Get<0>().GetData()); + + ::MultiByteToWideChar(CP,0,strText,IgnoreString::nCountInit-1,strTextW,IgnoreString::nCountInit-1); + + m_reIgnore.SetTextEx((LPCSTR)strTextW,ST_DEFAULT,1200); + + CheckDlgButton(IDC_TRNSTORUS,type.Get<1>()&Translate::trnsTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,type.Get<1>()&Translate::trnsRustoTrns); + + return 0; + } + + LRESULT OnAddRemoveClear(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Ignore& rIgnore=GetOptions()->m_Ignore; + switch(wID) + { + case IDC_ADD: + { + IgnoreType type; + + wchar_t wstr[IgnoreString::nCountInit]; + m_reIgnore.GetTextEx((LPSTR)wstr,(IgnoreString::nCountInit-1)*sizeof(wchar_t),GT_DEFAULT,1200); + if(!wstr[0]) + break; + + ::WideCharToMultiByte(CP,0,wstr,IgnoreString::nCountInit-1,type.Get<0>().GetData(), + IgnoreString::nCountInit-1,0,0); + + unsigned uFind=FindIgnore(type.Get<0>().GetData()); + if(uFind!=(unsigned)-1) + { + rIgnore[uFind].Get<0>()=type.Get<0>(); + Translate::LangTranslate& lt=rIgnore[uFind].Get<1>(); + lt=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)lt|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)lt|= (int)Translate::trnsRustoTrns; + } + else + { + type.Get<1>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<1>()|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<1>()|= (int)Translate::trnsRustoTrns; + rIgnore.Add(type); + } + } + break; + case IDC_REMOVE: + { + unsigned cursel = (unsigned)m_lbIgnore.GetCurSel(); + if(cursel!=(unsigned)LB_ERR) + rIgnore.RemoveAt(cursel); + } + break; + case IDC_CLEAR: + rIgnore.RemoveAll(); + break; + } + InitListIgnore(); + + return 0; + } +}; + +#endif // __IGNOREPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/LangProfile.h b/legacy/Transliterator_5.8/LangProfile.h new file mode 100644 index 0000000..fbb724b --- /dev/null +++ b/legacy/Transliterator_5.8/LangProfile.h @@ -0,0 +1,19 @@ +#ifndef __LANGPROFILE_H___ +#define __LANGPROFILE_H___ + +#include "types.h" + +struct LangProfile +{ + // Map + LangMap m_map; + // Name + enum { nName = 15 }; + char m_strName[nName]; + // Ignore + enum BeginEnd { BeginTrns, EndTrns, BeginRus, EndRus, nBeginEnd }; + enum { nIgnore = 4 }; + char m_strIgnore[nBeginEnd][nIgnore]; +}; + +#endif // __LANGPROFILE_H___ diff --git a/legacy/Transliterator_5.8/LangStruct.h b/legacy/Transliterator_5.8/LangStruct.h new file mode 100644 index 0000000..05c8822 --- /dev/null +++ b/legacy/Transliterator_5.8/LangStruct.h @@ -0,0 +1,136 @@ +#ifndef __LANGSTRUCT_H___ +#define __LANGSTRUCT_H___ + +#include "types.h" +#include "langprofile.h" + +struct LangStruct +{ + enum { CP = 1251 }; +private: + // In + char* m_strIn; + wchar_t* m_strInW; + // Out + char* m_strOut; + + // Translate + Translate::Direction m_dir; + // Ignore + bool m_bInsert; + bool m_bTrns; + + size_t m_nChar; + + const LangProfile* m_pProfile; + + // Helper + bool m_bOut; + bool m_bWide; +public: + LangStruct(const char* strIn,char* strOut,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strIn(const_cast(strIn)), + m_strOut(strOut), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + LangStruct(const char* strIn,char* strOut,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(const_cast(strIn)), + m_strOut(strOut), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + ~LangStruct() + { Destroy(); } + + void Init() + { + // nChar + if(!m_nChar) + m_nChar=m_bWide?(size_t)lstrlenW(m_strInW):(size_t)lstrlenA(m_strIn); + // Wide + if(m_bWide) + { + m_strIn=new char[m_nChar+1]; + ::WideCharToMultiByte(CP,0,m_strInW,m_nChar+1,m_strIn,m_nChar+1,0,0); + } + // Out + m_bOut= !m_strOut; + if(m_bOut) + m_strOut=new char[m_nChar*LangString::nCountInit+1]; + } + + void Destroy() + { + if(m_bOut) + { + lstrcpyn(m_strIn,m_strOut,m_nChar); + delete[] m_strOut; + } + if(m_bWide) + { + ::MultiByteToWideChar(CP,0,m_strIn,m_nChar+1,m_strInW,m_nChar+1); + delete[] m_strIn; + } + } + + inline const char* GetIn() const { return m_strIn; } + inline char* GetOut() const { return m_strOut; } + inline Translate::Direction GetDirection() const { return m_dir; } + inline size_t GetCharCount() const { return m_nChar; } + inline const LangProfile* GetProfile() const { return m_pProfile; } + inline void SetProfile(const LangProfile* pProfile) const + { (const_cast(this))->m_pProfile=pProfile; } + inline bool IsTrns() const { return m_bTrns; } + inline bool GetInsert() const { return m_bInsert; } + + inline bool Empty() const { return !m_pProfile->m_map.GetLast()||!*m_strIn||!m_nChar; } + inline void Clear() const { GetOut()[0]=0; } +}; + +#endif // __LANGSTRUCT_H___ diff --git a/legacy/Transliterator_5.8/Language.cpp b/legacy/Transliterator_5.8/Language.cpp new file mode 100644 index 0000000..c677950 --- /dev/null +++ b/legacy/Transliterator_5.8/Language.cpp @@ -0,0 +1,977 @@ +#include "stdafx.h" +#include "language.h" + +void Language::ResetStandard(LangProfile& profile) +{ + // Map + static const LangType defMap[]= + { + LangType("a","",Translate::trnsAll), + LangType("A","",Translate::trnsAll), + LangType("b","",Translate::trnsAll), + LangType("B","",Translate::trnsAll), + LangType("c","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("ch","",Translate::trnsAll), + LangType("cH","",Translate::trnsTrnstoRus), + LangType("CH","",Translate::trnsAll), + LangType("Ch","",Translate::trnsTrnstoRus), + LangType("d","",Translate::trnsAll), + LangType("D","",Translate::trnsAll), + LangType("e","",Translate::trnsAll), + LangType("E","",Translate::trnsAll), + LangType("e'","",Translate::trnsAll), + LangType("E'","",Translate::trnsAll), + LangType("e`","",Translate::trnsAll), + LangType("E`","",Translate::trnsAll), + LangType("e''","",Translate::trnsAll), + LangType("E''","",Translate::trnsAll), + LangType("f","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("g","",Translate::trnsAll), + LangType("G","",Translate::trnsAll), + LangType("g'`","",Translate::trnsAll), + LangType("g`'","",Translate::trnsTrnstoRus), + LangType("G'`","",Translate::trnsAll), + LangType("G`'","",Translate::trnsTrnstoRus), + LangType("h","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("i","",Translate::trnsAll), + LangType("I","",Translate::trnsAll), + LangType("i'","",Translate::trnsAll), + LangType("I'","",Translate::trnsAll), + LangType("i`","",Translate::trnsAll), + LangType("I`","",Translate::trnsAll), + LangType("j","",Translate::trnsAll), + LangType("J","",Translate::trnsAll), + LangType("k","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("l","",Translate::trnsAll), + LangType("L","",Translate::trnsAll), + LangType("m","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + LangType("n","",Translate::trnsAll), + LangType("N","",Translate::trnsAll), + LangType("o","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("p","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("q","",Translate::trnsTrnstoRus), + LangType("Q","",Translate::trnsTrnstoRus), + LangType("r","",Translate::trnsAll), + LangType("R","",Translate::trnsAll), + LangType("s","",Translate::trnsAll), + LangType("S","",Translate::trnsAll), + LangType("sh","",Translate::trnsAll), + LangType("sH","",Translate::trnsTrnstoRus), + LangType("SH","",Translate::trnsAll), + LangType("Sh","",Translate::trnsTrnstoRus), + LangType("sh''","",Translate::trnsTrnstoRus), + LangType("sH''","",Translate::trnsTrnstoRus), + LangType("Sh''","",Translate::trnsTrnstoRus), + LangType("SH''","",Translate::trnsTrnstoRus), + LangType("sch'","",Translate::trnsAll), + LangType("sCh'","",Translate::trnsTrnstoRus), + LangType("scH'","",Translate::trnsTrnstoRus), + LangType("sCH'","",Translate::trnsTrnstoRus), + LangType("Sch'","",Translate::trnsTrnstoRus), + LangType("SCh'","",Translate::trnsTrnstoRus), + LangType("ScH'","",Translate::trnsTrnstoRus), + LangType("SCH'","",Translate::trnsAll), + LangType("t","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("tc'","",Translate::trnsTrnstoRus), + LangType("tC'","",Translate::trnsTrnstoRus), + LangType("Tc'","",Translate::trnsTrnstoRus), + LangType("TC'","",Translate::trnsTrnstoRus), + LangType("u","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("u'","",Translate::trnsAll), + LangType("U'","",Translate::trnsAll), + LangType("v","",Translate::trnsAll), + LangType("V","",Translate::trnsAll), + LangType("w","",Translate::trnsTrnstoRus), + LangType("W","",Translate::trnsTrnstoRus), + LangType("w''","",Translate::trnsTrnstoRus), + LangType("W''","",Translate::trnsTrnstoRus), + LangType("x","",Translate::trnsTrnstoRus), + LangType("X","",Translate::trnsTrnstoRus), + LangType("y","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("ya","",Translate::trnsAll), + LangType("yA","",Translate::trnsTrnstoRus), + LangType("YA","",Translate::trnsAll), + LangType("Ya","",Translate::trnsTrnstoRus), + LangType("yu","",Translate::trnsAll), + LangType("yU","",Translate::trnsTrnstoRus), + LangType("YU","",Translate::trnsAll), + LangType("Yu","",Translate::trnsTrnstoRus), + LangType("y'","",Translate::trnsAll), + LangType("Y'","",Translate::trnsAll), + LangType("z","",Translate::trnsAll), + LangType("Z","",Translate::trnsAll), + LangType("'","",Translate::trnsAll), + LangType("''","",Translate::trnsAll), + LangType("`","",Translate::trnsAll), + LangType("``","",Translate::trnsAll), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="Standard"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i|<","",Translate::trnsAll), + LangType("}|{","",Translate::trnsAll), + LangType(">-|-<","",Translate::trnsRustoTrns), + LangType("}-|-{","",Translate::trnsTrnstoRus), + LangType("3","",Translate::trnsAll), + LangType("3","",Translate::trnsRustoTrns), + LangType("u","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("u'","",Translate::trnsAll), + LangType("U'","",Translate::trnsAll), + LangType("u`","",Translate::trnsTrnstoRus), + LangType("U`","",Translate::trnsTrnstoRus), + LangType("k","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("/\\","",Translate::trnsAll), + LangType("JI","",Translate::trnsAll), + LangType("m","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("H","",Translate::trnsRustoTrns), + LangType("o","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("n","",Translate::trnsAll), + LangType("n","",Translate::trnsRustoTrns), + LangType("p","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("c","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("T","",Translate::trnsRustoTrns), + LangType("y","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("f","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("<|>","",Translate::trnsAll), + LangType("","",Translate::trnsAll), + LangType("x","",Translate::trnsAll), + LangType("X","",Translate::trnsAll), + LangType("L|","",Translate::trnsAll), + LangType("L|","",Translate::trnsRustoTrns), + LangType("4","",Translate::trnsAll), + LangType("4","",Translate::trnsRustoTrns), + LangType("LLI","",Translate::trnsAll), + LangType("w","",Translate::trnsAll), + LangType("LL|","",Translate::trnsAll), + LangType("LL|","",Translate::trnsRustoTrns), + LangType("\\","",Translate::trnsAll), + LangType("\\\\","",Translate::trnsRustoTrns), + LangType("bI","",Translate::trnsAll), + LangType("bI","",Translate::trnsRustoTrns), + LangType("b","",Translate::trnsAll), + LangType("b","",Translate::trnsRustoTrns), + LangType("e","",Translate::trnsRustoTrns), + LangType("E","",Translate::trnsRustoTrns), + LangType("IO","",Translate::trnsAll), + LangType("IO","",Translate::trnsRustoTrns), + LangType("I-O","",Translate::trnsTrnstoRus), + LangType("I-O","",Translate::trnsRustoTrns), + LangType("9I","",Translate::trnsAll), + LangType("9I","",Translate::trnsRustoTrns), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="Symbols"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i","",Translate::trnsAll), + LangType("/",".",Translate::trnsAll), + LangType("?",",",Translate::trnsAll), + LangType("Q","",Translate::trnsAll), + LangType("W","",Translate::trnsAll), + LangType("E","",Translate::trnsAll), + LangType("R","",Translate::trnsAll), + LangType("T","",Translate::trnsAll), + LangType("Y","",Translate::trnsAll), + LangType("U","",Translate::trnsAll), + LangType("I","",Translate::trnsAll), + LangType("O","",Translate::trnsAll), + LangType("P","",Translate::trnsAll), + LangType("A","",Translate::trnsAll), + LangType("S","",Translate::trnsAll), + LangType("D","",Translate::trnsAll), + LangType("F","",Translate::trnsAll), + LangType("G","",Translate::trnsAll), + LangType("H","",Translate::trnsAll), + LangType("J","",Translate::trnsAll), + LangType("K","",Translate::trnsAll), + LangType("L","",Translate::trnsAll), + LangType("Z","",Translate::trnsAll), + LangType("X","",Translate::trnsAll), + LangType("C","",Translate::trnsAll), + LangType("V","",Translate::trnsAll), + LangType("B","",Translate::trnsAll), + LangType("N","",Translate::trnsAll), + LangType("M","",Translate::trnsAll), + }; + profile.m_map.SetData(defMap); + // Name + static const char strName[]="QWER-"; + lstrcpy(profile.m_strName,strName); + // Ignore + static const char strIgnore[LangProfile::nBeginEnd][LangProfile::nIgnore]= + { + "**", + "**", + "**", + "**" + }; + for(int i=0;i aInIgnore; + + const int i1= ls.GetDirection()==Translate::dirRusToTrns; + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + const char* pFromOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + // Lenth array + size_t aLen[LangMap::nCountInit]; + size_t maxlen=0; + for(size_t i=0;im_map.GetLast();i++) + { + aLen[i]=((LangString*)ls.GetProfile()->m_map[i].Get(i1))->GetLength(); + + if(maxlen().GetLength(); + + if(maxlenI=ls.GetCharCount()) + break; + pIn+=nToIn; + + // Copy Ignore + if(g_Options.m_bCopyIgnore) + iChar+=strcpy_change(&pOut,pToOut); + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + } + // Ignore + for(size_t lenI=maxlenI;lenI;lenI--) + { + for(size_t nItem=0;nItem(); + if(ls.GetDirection()==Translate::dirTrnstoRus) + { + if(!(trnsItem&Translate::trnsTrnstoRus)) + continue; + } + else + { + if(!(trnsItem&Translate::trnsRustoTrns)) + continue; + } + + if(aLenI[nItem] == lenI&& + !LangStringTraits::CompareArrayLength(pIn, + g_Ignore[nItem].Get<0>().GetData(),lenI)) + { + strcpy_change(&pOut,g_Ignore[nItem].Get<0>().GetData()); + pIn+=lenI; + iChar+=lenI; + goto lNext; + } + } + } + // Translate + for(size_t len=maxlen;len;len--) + { + for(size_t nItem=0;nItemm_map.GetLast();nItem++) + { + // Translate::LangTranslate + const Translate::LangTranslate& trnsItem=ls.GetProfile()->m_map[nItem].Get<2>(); + if(ls.GetDirection()==Translate::dirTrnstoRus) + { + if(!(trnsItem&Translate::trnsTrnstoRus)) + continue; + } + else + { + if(!(trnsItem&Translate::trnsRustoTrns)) + continue; + } + if(aLen[nItem] == len && + !LangStringTraits::CompareArrayLength(pIn, + ((LangString*)ls.GetProfile()->m_map[nItem].Get(i1))->GetData(),len)) + { + LangString* pString=(LangString*)ls.GetProfile()->m_map[nItem].Get(!i1); + strcpy_change(&pOut,pString->GetData()); + pIn+=len; + iChar+=len; + goto lNext; + } + } + } + *pOut++=*pIn++; + lNext:; + } + // End + *pOut=0; +} + +void Language::Ignore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + // Empty + if(ls.Empty()) + { + ls.Clear(); + return; + } + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + const char* pFromOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + NN::Tuple aCheck[LangMap::nCountInit]; + UpdateCheck(ls.GetProfile(),aCheck); + + if(ls.GetInsert()) + { + bool bInsert=false; + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + // Text + if(IsTrnsRus(*pIn,ls.IsTrns(),aCheck)) + { + bInsert=true; + + strcpy_change(&pOut,pFromOut); + + while(*pIn&& + (IsTrnsRus(*pIn,ls.IsTrns(),aCheck)|| + (!IsTrns(*pIn,aCheck)&&!IsRus(*pIn,aCheck)))&& + iChar=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + *pOut++=*pIn++; + } + if(bInsert) + strcpy_change(&pOut,pToOut); + } + else + { + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + if(!LangStringTraits::CompareArrayLength( + pIn,pToIn,LangProfile::nIgnore)) + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + } + *pOut++=*pIn++; + } + } + *pOut=0; +} + +void Language::SetIgnore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + if(ls.GetInsert()) + { + bool bFrom=true; + lstrcpy(pOut,pIn); + + for(size_t iChar=0;*pIn&&iChar TupleCharChar; + template + bool FindCheck_(char c,TupleCharChar* paCheck) + { + while(paCheck->Get()) + if((paCheck++)->Get()==c) + return true; + return false; + } + + inline bool FindCheck(char c,bool bTrns,TupleCharChar* paCheck) + { return bTrns?FindCheck_<0>(c,paCheck):FindCheck_<1>(c,paCheck); } + + void UpdateCheck(const LangProfile* pProfile,TupleCharChar* paCheck) + { + for(size_t i=0;im_map.GetCount();i++) + { + paCheck[i].Get<0>()=pProfile->m_map[i].Get<0>().GetAt(0); + paCheck[i].Get<1>()=pProfile->m_map[i].Get<1>().GetAt(0); + } + } + + bool IsTrnsRus(CHAR c,bool bTrns,TupleCharChar* paCheck) + { return FindCheck(c,bTrns,paCheck); } + + bool IsTrns(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,true,paCheck); } + + bool IsRus(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,false,paCheck); } +public: + const Language& operator=(const Language& src) + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName); + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j]); + + // Map + pProfile->m_map.SetData(pProfileR->m_map); + } + return *this; + } + + bool operator!=(const Language& language) const + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName)) + return true; + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j])) + return true; + + // Map + if(pProfile->m_map.Compare(pProfileR->m_map)) + return true; + } + return false; + } + bool operator==(const Language& language) const + { return !operator!=(language); } + + typedef void (*ResetFunc)(LangProfile&); + static ResetFunc m_aResetFunc[nProfiles]; +}; + +#endif // __LANGUAGE_H__ diff --git a/legacy/Transliterator_5.8/Msg.h b/legacy/Transliterator_5.8/Msg.h new file mode 100644 index 0000000..d0d2881 --- /dev/null +++ b/legacy/Transliterator_5.8/Msg.h @@ -0,0 +1,6 @@ +#ifndef __MSG_H__ +#define __MSG_H__ + +#define WM_APPLY (WM_USER+1) + +#endif // __MSG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Options.h b/legacy/Transliterator_5.8/Options.h new file mode 100644 index 0000000..3b8a4f0 --- /dev/null +++ b/legacy/Transliterator_5.8/Options.h @@ -0,0 +1,111 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#include "windowstate.h" + +struct Options +{ + enum { Trns , Rus }; + + BOOL m_bTranslate; + WindowState m_wndState; + + BOOL m_bShowTrayIcon; + BOOL m_bShowTaskBar; + BOOL m_bTopMost; + enum LoadOnStartUp + { + loadNo, + loadShown, + loadHidden + }; + LoadOnStartUp m_nLoadOnStartUp; + + enum Fonts + { + fontTrns, + fontRus, + fontTranslation, + nFont + }; + LOGFONT m_lfFont[nFont]; + + enum HotKeys + { + hkTrnstoRus, + hkRusToTrns, + hkAuto, + hkShowHide, + hkCopyTrns, + hkCopyRus, + nHotKey + }; + NN::HotKey m_HotKey[nHotKey]; + + BOOL m_bCopyIgnore; + Translate::Direction m_nAutoTranslation; + + BOOL m_bWrapText; + BOOL m_bScrollText; + + UINT m_nCurProfile; + + BOOL m_bIgnore; + + void Reset() + { + m_bTranslate=TRUE; + m_wndState.Reset(); + + m_bShowTrayIcon=FALSE; + m_bShowTaskBar=TRUE; + m_bTopMost=FALSE; + m_nLoadOnStartUp=loadNo; + + m_HotKey[hkTrnstoRus].SetHotKey('T',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkRusToTrns].SetHotKey('R',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkAuto].SetHotKey('A',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkShowHide].SetHotKey('S',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyTrns].SetHotKey('C',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyRus].SetHotKey('O',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + + // Fonts + LOGFONT lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-14; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTrns]=lfCommon; + m_lfFont[fontRus]=lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-10; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTranslation]=lfCommon; + + m_bCopyIgnore=FALSE; + m_nAutoTranslation=Translate::dirTrnstoRus; + + m_bWrapText=TRUE; + m_bScrollText=TRUE; + + m_nCurProfile=0; + + m_bIgnore=TRUE; + } + + const Options& operator=(const Options& options) + { + memcpy(this,&options,sizeof(Options)); + return *this; + } + + bool operator==(const Options& options) const + { return !operator!=(options); } + bool operator!=(const Options& options) const + { return memcmp(this,&options,sizeof(Options)); } +}; + +#endif // __OPTIONS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/OptionsDlg.h b/legacy/Transliterator_5.8/OptionsDlg.h new file mode 100644 index 0000000..b3c9cdd --- /dev/null +++ b/legacy/Transliterator_5.8/OptionsDlg.h @@ -0,0 +1,166 @@ +#ifndef __OPTIONSDLG_H__ +#define __OPTIONSDLG_H__ + +#include "generalpage.h" +#include "hotkeyspage.h" +#include "profilepage.h" +#include "ignorepage.h" + +class COptionsDlg : public NN::OptionsDialogImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_OPTIONS }; + + NN::auto_value m_nCurPage; + CListBox m_ctrlOptions; + + CGeneralPage m_pageGeneral; + CHotKeysPage m_pageHotKeys; + CProfilePage m_pageProfile; + CIgnorePage m_pageIgnore; + + void UpdateLanguage() + { + NN::DialogLang::UpdateLanguage(); + + m_pageGeneral.UpdateLanguage(); + m_pageHotKeys.UpdateLanguage(); + m_pageProfile.UpdateLanguage(); + m_pageIgnore.UpdateLanguage(); + + InitListOptions(); + } + + void InitListOptions() + { + for(int i=0;i + void UpdateChange(T& t,const T& tc,BOOL& bChange) + { + if(t!=tc) + { + t=tc; + bChange=TRUE; + } + } + + void Apply() + { + DoDataExchange(DDX_SAVE); + + BOOL bChangeTranslation=FALSE; + BOOL bChangeOptions=FALSE; + + UpdateChange(g_Language,GetOptions()->m_Language,bChangeTranslation); + UpdateChange(g_Ignore,GetOptions()->m_Ignore,bChangeTranslation); + UpdateChange(g_Options,GetOptions()->m_Options,bChangeOptions); + + ::SendMessage(GetParent(),WM_APPLY,(WPARAM)bChangeTranslation,(LPARAM)bChangeOptions); + } + + void InitOptionsPage() + { + GetOptions()->Set(g_Language,g_Options,g_Ignore); + SetOptionsPage(); + DoDataExchange(DDX_LOAD); + } + + BEGIN_MSG_MAP(COptionsDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + + COMMAND_ID_HANDLER(IDOK, OnOK) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDC_APPLY, OnApply) + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + + COMMAND_HANDLER(IDC_LISTOPTIONS, LBN_SELCHANGE, OnSelChangeListOptions) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DialogLang_Init(); + m_ctrlOptions=GetDlgItem(IDC_LISTOPTIONS); + + // Create + m_pageGeneral.Create(m_hWnd); + m_pageHotKeys.Create(m_hWnd); + m_pageProfile.Create(m_hWnd); + m_pageIgnore.Create(m_hWnd); + + AddPage(&m_pageGeneral); + AddPage(&m_pageHotKeys); + AddPage(&m_pageProfile); + AddPage(&m_pageIgnore); + + // Prepare Move Window + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_SDLGPLACE),&rect); + ScreenToClient(&rect); + // Move Window + for(int i=0;iMoveWindow(&rect); + + InitListOptions(); + InitOptionsPage(); + + SetCurrentPage(0); + + return 0; + } + + LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DestroyOptions(); + return 0; + } + + LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + if(!wParam) + InitOptionsPage(); + + return 0; + } + + LRESULT OnOK(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + CloseDialog(); + return 0; + } + + LRESULT OnApply(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetOptions()->Reset(); + DoDataExchange(DDX_LOAD); + return 0; + } + + LRESULT OnSelChangeListOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SetCurrentPage(m_ctrlOptions.GetCurSel()); + return 0; + } +}; + +#endif // __OPTIONSDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/OptionsStruct.h b/legacy/Transliterator_5.8/OptionsStruct.h new file mode 100644 index 0000000..e634b54 --- /dev/null +++ b/legacy/Transliterator_5.8/OptionsStruct.h @@ -0,0 +1,40 @@ +#ifndef __OPTIONSSTRUCT_H__ +#define __OPTIONSSTRUCT_H__ + +struct OptionsStruct +{ + Language m_Language; + Options m_Options; + Ignore m_Ignore; + + void Set(Language& rL,Options& rO,Ignore& rI) + { + Set(rL); + Set(rO); + Set(rI); + } + + void Set(Language& r) { m_Language=r; } + void Set(Options& r) { m_Options=r; } + void Set(Ignore& r) { m_Ignore=r; } + + void Get(Language& rL,Options& rO,Ignore& rI) + { + Get(rL); + Get(rO); + Get(rI); + } + + void Get(Language& r) { r=m_Language; } + void Get(Options& r) { r=m_Options; } + void Get(Ignore& r) { r=m_Ignore; } + + void Reset() + { + m_Language.ResetUser(); + m_Options.Reset(); + m_Ignore.Reset(); + } +}; + +#endif // __OptionsStruct_H__ diff --git a/legacy/Transliterator_5.8/ProfilePage.h b/legacy/Transliterator_5.8/ProfilePage.h new file mode 100644 index 0000000..dfc5012 --- /dev/null +++ b/legacy/Transliterator_5.8/ProfilePage.h @@ -0,0 +1,517 @@ +#ifndef __PROFILEPAGE_H__ +#define __PROFILEPAGE_H__ + +#include "trnsoptionspage.h" + +class CProfilePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEPROFILE }; + + int m_nCurSel; + CComboBox m_cmbTrnsRus[2]; + CComboBox m_cmbProfile; + enum { Trns , Rus }; + + enum Use { useNone, useEng, useRus }; + NN::auto_value m_nUse; + + Language& GetLanguage() + { return GetOptions()->m_Language; } + LangProfile* GetProfile(int nProfile) + { + return nProfile::UpdateLanguage(); + InitProfile(); + } + + typedef NN::StaticArray LangStringArray; + + void SetTrnsRus(bool b1,const char* strText=NULL) + { + LangStringArray aLangString; + + int iCmb; + unsigned last=0; + + if(strText) + { + iCmb=b1; + LangString lstr(strText); + + for(unsigned nItem=0;nItemm_map.GetLast();nItem++) + { + if(lstr==*(LangString*)GetProfile()->m_map[nItem].Get(b1)) + aLangString[last++]=*(LangString*)GetProfile()->m_map[nItem].Get(!b1); + } + iCmb=!b1; + } + else + { + for(unsigned i=0;im_map.GetLast();i++) + { + LangString* plstr = (LangString*)GetProfile()->m_map[i].Get(b1); + if(aLangString.Find(*plstr)==(unsigned)-1) + aLangString[last++]=*plstr; + } + iCmb=b1; + } + + if(last) + aLangString.Sort(true,last-1); + + m_cmbTrnsRus[iCmb].ResetContent(); + + for(unsigned i=0;im_strIgnore[i]); + } + + void SaveIgnore() + { + for(int i=0;im_strIgnore[i],LangProfile::nIgnore-1); + } + + void UpdateCheck(const LangType* pType) + { + BOOL bEnable=FALSE; + BOOL bTrnstoRus=FALSE; + BOOL bRustoTrns=FALSE; + if(pType) + { + bEnable=pType->Get<0>()[0]&&pType->Get<1>()[0]; + if(bEnable) + { + unsigned nFind=GetProfile()->m_map.Find(*pType); + if(nFind!=(unsigned)-1) + { + LangType& rType=GetProfile()->m_map[nFind]; + bTrnstoRus=(int)rType.Get<2>()&(int)Translate::trnsTrnstoRus; + bRustoTrns=(int)rType.Get<2>()&(int)Translate::trnsRustoTrns; + } + } + } + ::EnableWindow(GetDlgItem(IDC_TRNSTORUS),bEnable); + ::EnableWindow(GetDlgItem(IDC_RUSTOTRNS),bEnable); + CheckDlgButton(IDC_TRNSTORUS,bTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,bRustoTrns); + } + + void Clear() + { + for(int i=0;i<2;i++) + m_cmbTrnsRus[i].SetCurSel(-1); + UpdateCheck(NULL); + } + + void InitAll(bool bProfile=true) + { + if(bProfile) + InitProfile(); + InitTrnsRus(); + LoadIgnore(); + LoadProfileName(); + Clear(); + } + + void SaveProfileName() + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + } + + void LoadProfileName() + { + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + } + + void SplitStr(const char* str,char* l,char* r) + { + splitstr(str,l,r,LangString::nCountInit-1,LangString::nCountInit-1,'='); + } + + BEGIN_DDX_MAP(CProfilePage) + if(bSaveAndValidate==DDX_LOAD) + { + InitAll(); + } + else + { + SaveIgnore(); + SaveProfileName(); + } + DDX_CHECK(IDC_COPYIGNORE,GetOptions()->m_Options.m_bCopyIgnore) + END_DDX_MAP() + + BEGIN_MSG_MAP(CProfilePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnCmbSelChangeProfile) + COMMAND_HANDLER(IDC_PROFILENAME, EN_CHANGE, OnEnChangeProfileName) + + COMMAND_HANDLER(IDC_TRNS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_TRNS, CBN_EDITCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, CBN_EDITCHANGE, OnChangeTrnsRus) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemove) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemove) + COMMAND_ID_HANDLER(IDC_CLEAR, OnClear) + + COMMAND_ID_HANDLER(IDC_COPY, OnCopy) + + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + COMMAND_ID_HANDLER(IDC_RESETALL, OnReset) + + COMMAND_ID_HANDLER(IDC_LOAD, OnLoadSave) + COMMAND_ID_HANDLER(IDC_SAVE, OnLoadSave) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_nCurSel=0; + for(int i=0;i<2;i++) + { + m_cmbTrnsRus[i]=GetDlgItem(IDC_TRNS+i); + m_cmbTrnsRus[i].LimitText(LangString::nCountInit-1); + } + m_cmbProfile = GetDlgItem(IDC_PROFILE); + SendDlgItemMessage(IDC_PROFILENAME,EM_LIMITTEXT,(WPARAM)LangProfile::nName-1,0); + InitIgnore(); + return 0; + } + + LRESULT OnCmbSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + m_nCurSel=m_cmbProfile.GetCurSel(); + InitTrnsRus(); + LoadProfileName(); + return 0; + } + + LRESULT OnEnChangeProfileName(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + InitProfile(); + m_cmbProfile.SetCurSel(m_nCurSel); + LoadIgnore(); + return 0; + } + + LRESULT OnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int i1= wID!=IDC_TRNS; + + LangType type; + + if(wNotifyCode==CBN_SELCHANGE) + { + m_cmbTrnsRus[i1].GetLBText(m_cmbTrnsRus[i1].GetCurSel(),((LangString*)type.Get(i1))->GetData()); + m_cmbTrnsRus[!i1].GetWindowText(((LangString*)type.Get(!i1))->GetData(),LangString::nCountInit); + } + else + { + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + } + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + { + UpdateCheck(NULL); + InitTrnsRus(); + return 0; + } + else + { + if(!*((LangString*)type.Get(!i1))->GetData()) + SetTrnsRus(i1,((LangString*)type.Get(i1))->GetData()); + } + + UpdateCheck(&type); + + return 0; + } + + LRESULT OnAddRemove(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + LangType type; + + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + return 0; + + bool bAdd= wID==IDC_ADD; + if(bAdd) + { + type.Get<2>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<2>()|=(int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<2>()|=(int)Translate::trnsRustoTrns; + unsigned nFind=GetProfile()->m_map.Find(type); + if(nFind==(unsigned)-1) + GetProfile()->m_map.Add(type); + else + GetProfile()->m_map[nFind].Get<2>()=type.Get<2>(); + } + else + { + GetProfile()->m_map.Remove(type); + } + + InitTrnsRus(); + if(bAdd) + { + GetProfile()->m_map.Find(type); + UpdateCheck(&type); + } + else + UpdateCheck(NULL); + + return 0; + } + + LRESULT OnClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Clear(); + return 0; + } + + LRESULT OnCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int iFrom=SendDlgItemMessage(IDC_COPYFROM,CB_GETCURSEL); + + LangProfile* pFrom=GetProfile(iFrom); + + char strName[LangProfile::nName]; + lstrcpy(strName,GetProfile()->m_strName); + memcpy(GetProfile(),pFrom,sizeof(LangProfile)); + lstrcpy(GetProfile()->m_strName,strName); + + InitAll(); + + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + if(wID==IDC_RESET) + GetOptions()->m_Language.ResetProfile((Language::Profiles)m_nCurSel); + else + GetOptions()->m_Language.ResetUser(); + InitAll(); + return 0; + } + + LRESULT OnLoadSave(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + BOOL bLoad=wID==IDC_LOAD; + CFileDialog dlgFile(bLoad,"txt","",OFN_OVERWRITEPROMPT,"Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0",m_hWnd); + if(dlgFile.DoModal()!=IDOK) + return 0; + + // Test file + CAtlFile file; + if(file.Create(dlgFile.m_szFileName,bLoad?GENERIC_READ:GENERIC_WRITE,0,bLoad?OPEN_EXISTING:CREATE_ALWAYS)) + { + ShowError(m_hWnd,"Error opening file"); + return 0; + } + if(!bLoad) + file.SetSize(0); + file.Close(); + + static const unsigned size_string=LangString::nCountInit*2+1; + static const unsigned size_section=(size_string)*LangMap::nCountInit; + + static const char strProfileName[]="Profile Name"; + static const char strName[]="Name"; + static const char astrIgnore[][30]= + { + "Translit Ignore Symbols", + "Russian Ignore Symbols" + }; + static const char astrBeginEnd[][10]= + { + "Begin", + "End" + }; + static const char astrTranslation[][20]= + { + "Translit to Russian", + "Russian to Translit", + "No Translate" + }; + static const Translate::LangTranslate aTranslation[]= + { + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsNone + }; + + if(bLoad) + { + LangProfile profile; + // Name + GetPrivateProfileString(strProfileName,strName,"", + profile.m_strName,LangProfile::nName-1, + dlgFile.m_szFileName); + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + "", + profile.m_strIgnore[i], + LangProfile::nIgnore-1, + dlgFile.m_szFileName); + + // Translation + NN::auto_array section(size_section); + for(int i=0;i<3;i++) + { + GetPrivateProfileSection( + astrTranslation[i], + section.data(), + size_section, + dlgFile.m_szFileName); + + if(!section[0]) + continue; + + const char* pstr; + pstr=section.data(); + + char left[LangString::nCountInit]; + char right[LangString::nCountInit]; + + while(pstr[0]&&pstr[1]) + { + SplitStr(pstr,left,right); + if(left[0]&&right[0]) + { + LangType type( + i==1?right:left, + i==1?left:right); + unsigned nFind=profile.m_map.Find(type); + if(nFind==(unsigned)-1) + { + ((int&)type.Get<2>())=(int)aTranslation[i]; + profile.m_map.Add(type); + } + else + { + if(aTranslation[i]!=Translate::trnsNone) + ((int&)profile.m_map[nFind].Get<2>())|=(int)aTranslation[i]; + else + profile.m_map[nFind].Get<2>()=Translate::trnsNone; + } + } + pstr+=lstrlen(pstr)+1; + } + } + + // Load + // Name + if(profile.m_strName[0]) + lstrcpy(GetProfile()->m_strName,profile.m_strName); + for(int i=0;im_strIgnore[i],profile.m_strIgnore[i]); + if(profile.m_map.GetLast()) + GetProfile()->m_map.SetData(profile.m_map); + + // Update + InitProfile(); + LoadIgnore(); + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + InitTrnsRus(); + } + else + { + // Name + WritePrivateProfileString( + strProfileName, + strName, + GetProfile()->m_strName, + dlgFile.m_szFileName); + + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + GetProfile()->m_strIgnore[i], + dlgFile.m_szFileName); + + // Translation + NN::auto_array section(size_section); + for(int i=0;i<3;i++) + { + char* psection=section.data(); + LangMap map; + map.SetData(GetProfile()->m_map); + + map.Sort(true,i==1); + for(unsigned item=0;item()&(int)aTranslation[i]) + { + if(i==1) + strcpy_change(&psection,map[item].Get<1>().GetData()); + else + strcpy_change(&psection,map[item].Get<0>().GetData()); + strcpy_change(&psection,"="); + if(i==1) + strcpy_change(&psection,map[item].Get<0>().GetData()); + else + strcpy_change(&psection,map[item].Get<1>().GetData()); + *psection++=0; + } + } + *psection=0; + WritePrivateProfileSection(astrTranslation[i], + section.data(), + dlgFile.m_szFileName); + } + } + return 0; + } +}; + +#endif // __PROFILEPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/ProgCommandLine.h b/legacy/Transliterator_5.8/ProgCommandLine.h new file mode 100644 index 0000000..4a6edc7 --- /dev/null +++ b/legacy/Transliterator_5.8/ProgCommandLine.h @@ -0,0 +1,40 @@ +#ifndef __PROGCOMMANDLINE_H__ +#define __PROGCOMMANDLINE_H__ + +#include "WindowState.h" + +typedef WindowState ProgCommandLineInfo; + +class ProgCommandLine : public NN::CommandLine +{ + struct ParseCommandLineStruct + { + TCHAR szCmdLine[10]; + CommandLineInfoType cmdInfo; + }; +public: + ProgCommandLine() + { + SetCommandLine(GetCommandLine()); + ParseCommandLine(); + } + void ParseCommandLine() + { + static const ParseCommandLineStruct aParseCommandLine[]= + { + {_T("-min"),{SW_SHOWMINIMIZED}}, + {_T("-max"),{SW_SHOWMAXIMIZED}}, + {_T("-hide"),{SW_HIDE}} + }; + for(int i=1;i +class NN::StaticArrayMapTraitsLastArrayItem +{ +public: + inline static bool LastArrayItem(const LangType& Item) + { + return !(Item.Get<0>()[0]&&Item.Get<1>()[0]); + } +}; + +#endif // __TRAITS_H___ diff --git a/legacy/Transliterator_5.8/Translate.h b/legacy/Transliterator_5.8/Translate.h new file mode 100644 index 0000000..389f733 --- /dev/null +++ b/legacy/Transliterator_5.8/Translate.h @@ -0,0 +1,23 @@ +#ifndef __TRANSLATE_H__ +#define __TRANSLATE_H__ + +struct Translate +{ +public: + enum LangTranslate + { + trnsNone, + trnsTrnstoRus, + trnsRustoTrns, + trnsAll=trnsTrnstoRus|trnsRustoTrns, + }; + + enum Direction + { + dirTrnstoRus, + dirRusToTrns, + dirAuto, + }; +}; + +#endif // __TRANSLATE_H__ diff --git a/legacy/Transliterator_5.8/TranslateFilesDlg.cpp b/legacy/Transliterator_5.8/TranslateFilesDlg.cpp new file mode 100644 index 0000000..4babbb7 --- /dev/null +++ b/legacy/Transliterator_5.8/TranslateFilesDlg.cpp @@ -0,0 +1,275 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translatefilesdlg.h" + +void CTranslateFilesDlg::UpdateCmbProfile() +{ + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); +} + +void CTranslateFilesDlg::TranslateFile(LPCSTR szPath,Translate::Direction dir) +{ + char szFileExt[_MAX_PATH*LangString::nCountInit]; + char szFileName[_MAX_PATH*LangString::nCountInit]; + + const int nFileName=lstrlen(szPath); + + int i=nFileName; + while(i&&szPath[i]!='.') i--; + + if(i) + { + memcpy(szFileExt,szPath+i,(nFileName-i)*sizeof(char)); + szFileExt[nFileName-i]=0; + memcpy(szFileName,szPath,i*sizeof(char)); + szFileName[i]=0; + } + else + { + szFileExt[0]=0; + lstrcpy(szFileName,szPath); + } + + g_Language.Translate(szFileName,dir,sizeof(szFileName)/sizeof(szFileName[0]),m_pProfile); + + lstrcat(szFileName,szFileExt); + + ::MoveFile(szPath,szFileName); +} + +void CTranslateFilesDlg::TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry) +{ + CAtlFile file; + if(file.Create(szFile,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING)!=S_OK) + return; + + long lFileSize=::GetFileSize(file,NULL); + if(bEntry) + lFileSize*=LangString::nCountInit; + CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize,0,PAGE_READWRITE,FILE_MAP_WRITE)!=S_OK) + return; + + LPSTR pFileView=(LPSTR)filemap.GetData(); + + if(bEntry) + { + g_Language.Translate(pFileView,dir,lFileSize,m_pProfile); + lFileSize=lstrlen(pFileView); + } + else + { + LPSTR pCur; + + // Mp3 Tag V1 + pCur=pFileView+lFileSize-(sizeof(NN::MP3Tag)); + NN::MP3Tag mp3tag; + memcpy(&mp3tag,pCur,sizeof(NN::MP3Tag)); + + if(!LangStringTraits::CompareArrayLength(mp3tag.szTag,"TAG",3)) + { + TranslateTag(mp3tag.szAlbom,dir); + TranslateTag(mp3tag.szArtist,dir); + TranslateTag(mp3tag.szTitle,dir); + TranslateTag(mp3tag.szComment,dir); + memcpy(pCur,&mp3tag,sizeof(NN::MP3Tag)); + } + } + + filemap.Unmap(); + file.SetSize(lFileSize); +} + +void CTranslateFilesDlg::Translate(LPCSTR szPath) +{ + NN::CurrentDirectory curdir(szPath); + + HANDLE hFindFile; + WIN32_FIND_DATA ffd; + + hFindFile = ::FindFirstFile("*.*",&ffd); + if(hFindFile==INVALID_HANDLE_VALUE) + return; + + do{ + if(!LangStringTraits::CompareArrayLength(ffd.cFileName,".",1)|| + !LangStringTraits::CompareArrayLength(ffd.cFileName,"..",2)) + continue; + + if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) + { + if(m_bSubFolders) + { + char szNextPath[_MAX_PATH]; + lstrcpy(szNextPath,szPath); + lstrcat(szNextPath,"\\"); + lstrcat(szNextPath,ffd.cFileName); + Translate(szNextPath); + } + if(m_bFolders) + TranslateFile(ffd.cFileName,m_nDirection); + } + else + { + bool bNotMP3=LangStringTraits::CompareArray(ffd.cFileName+lstrlen(ffd.cFileName)-4,".mp3",4); + if(bNotMP3&&m_bEntry|| + !bNotMP3&&m_bMP3Tags) + TranslateEntryMP3Tags(ffd.cFileName,m_nDirection,bNotMP3); + if(m_bName) + TranslateFile(ffd.cFileName,m_nDirection); + } + }while(::FindNextFile(hFindFile,&ffd)); + + ::FindClose(hFindFile); +} + +void CTranslateFilesDlg::TranslateThisFolder() +{ + NN::CurrentDirectory curdir(m_szPath); + char *pszPath=m_szPath+lstrlen(m_szPath); + pszPath--; + while(*pszPath!='\\'&&*pszPath!='/') + pszPath--; + pszPath++; + char c=*pszPath; + *pszPath=0; + ::SetCurrentDirectory(m_szPath); + *pszPath=c; + + TranslateFile(pszPath,m_nDirection); +} + +void CTranslateFilesDlg::TranslateTag(LPSTR szTag,Translate::Direction dir) +{ + g_Language.Translate(szTag,dir,NN::MP3Tag::nCount,m_pProfile); +} + +void CTranslateFilesDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateCmbProfile(); +} + +void CTranslateFilesDlg::EnableDirs(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_FILES),bEnable); + ::EnableWindow(GetDlgItem(IDC_FOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SUBFOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SELFOLDER),bEnable); +} + +void CTranslateFilesDlg::EnableFiles(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_NAME),bEnable); + ::EnableWindow(GetDlgItem(IDC_ENTRY),bEnable); + ::EnableWindow(GetDlgItem(IDC_MP3TAGS),bEnable); +} + +LRESULT CTranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + SendDlgItemMessage(IDC_PATH,EM_LIMITTEXT,(WPARAM)(_MAX_PATH-1)); + m_szPath[0]=0; + DoDataExchange(DDX_LOAD); + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); + m_pProfile=g_Language.GetProfile((Language::Profiles)0); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + + struct sgMB + { + ~sgMB() + { + AtlMessageBox(0,IDS_DONE,IDR_TRANSLITERATOR,MB_OK|MB_ICONINFORMATION); + } + }sg; + + if(!m_szPath[0]) + return 0; + + if(m_bFiles&& + (!m_bName&&!m_bEntry&&!m_bMP3Tags)) + m_bFiles=FALSE; + + if(m_bFiles&&!(GetFileAttributes(m_szPath)&FILE_ATTRIBUTE_DIRECTORY)) + { + char* pszPath; + pszPath=m_szPath+lstrlen(m_szPath); + while(*pszPath!='\\') + pszPath--; + *pszPath=0; + NN::CurrentDirectory curdir(m_szPath); + if(m_bMP3Tags||m_bEntry) + TranslateEntryMP3Tags(pszPath+1,m_nDirection,m_bEntry); + if(m_bName) + TranslateFile(pszPath+1,m_nDirection); + return 0; + } + + if(!m_bFiles&&!m_bFolders&&!m_bSubFolders&& + !m_bThisFolder) + return 0; + + char *pszPath=m_szPath+lstrlen(m_szPath)-1; + if(*pszPath=='\\') + *pszPath=0; + + Translate(m_szPath); + + if(m_bThisFolder) + TranslateThisFolder(); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CFolderDialog fd(m_hWnd,0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal()==IDOK) + SetDlgItemText(IDC_PATH,fd.m_szFolderPath); + return 0; +} + +LRESULT CTranslateFilesDlg::OnFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_pProfile=g_Language.GetProfile((Language::Profiles)SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL)); + return 0; +} + +LRESULT CTranslateFilesDlg::OnEnChangePath(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + DWORD dwAttr = GetFileAttributes(m_szPath); + + if(!*m_szPath) + { + EnableFiles(FALSE); + EnableDirs(FALSE); + } + else + { + if(dwAttr & FILE_ATTRIBUTE_DIRECTORY) + { + EnableDirs(TRUE); + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + } + else + EnableFiles(TRUE); + } + + return 0; +} diff --git a/legacy/Transliterator_5.8/TranslateFilesDlg.h b/legacy/Transliterator_5.8/TranslateFilesDlg.h new file mode 100644 index 0000000..f77f25c --- /dev/null +++ b/legacy/Transliterator_5.8/TranslateFilesDlg.h @@ -0,0 +1,70 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +class CTranslateFilesDlg : public CDialogImpl, + public CWinDataExchange, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_TRANSLATEFILES } ; + + NN::auto_value m_bFiles; + NN::auto_value m_bFolders; + NN::auto_value m_bSubFolders; + NN::auto_value m_bThisFolder; + NN::auto_value m_bName; + NN::auto_value m_bEntry; + NN::auto_value m_bMP3Tags; + NN::auto_value m_nDirection; + TCHAR m_szPath[_MAX_PATH]; + LangProfile* m_pProfile; + + void UpdateCmbProfile(); + + void TranslateFile(LPCSTR szPath,Translate::Direction dir); + void TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry); + void Translate(LPCSTR szPath); + void TranslateThisFolder(); + + void TranslateTag(LPSTR szTag,Translate::Direction dir); + + void UpdateLanguage(); + + void EnableDirs(BOOL bEnable); + void EnableFiles(BOOL bEnable); + + BEGIN_DDX_MAP(CTranslateFilesDlg) + DDX_RADIO(IDC_TRNSTORUS,(int&)m_nDirection) + DDX_CHECK(IDC_FILES,m_bFiles) + DDX_CHECK(IDC_FOLDERS,m_bFolders) + DDX_CHECK(IDC_SUBFOLDERS,m_bSubFolders) + DDX_CHECK(IDC_SELFOLDER,m_bThisFolder) + DDX_CHECK(IDC_NAME,m_bName) + DDX_CHECK(IDC_ENTRY,m_bEntry) + DDX_CHECK(IDC_MP3TAGS,m_bMP3Tags) + DDX_TEXT(IDC_PATH,m_szPath) + END_DDX_MAP() + + BEGIN_MSG_MAP(CTranslateFilesDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_TRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_FILES, OnFiles) + COMMAND_HANDLER(IDC_PROFILE, CBN_SELCHANGE, OnSelChangeProfile) + COMMAND_HANDLER(IDC_PATH, EN_CHANGE, OnEnChangePath) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSelChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnChangePath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/TranslationDlg.cpp b/legacy/Transliterator_5.8/TranslationDlg.cpp new file mode 100644 index 0000000..68edc4b --- /dev/null +++ b/legacy/Transliterator_5.8/TranslationDlg.cpp @@ -0,0 +1,187 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translationdlg.h" + +void CTranslationDlg::UpdateCmbProfile() +{ + CComboBox cmbProfile=GetDlgItem(IDC_PROFILE); + InitCmbLanguage(cmbProfile); + char strAll[50]; + ::LoadString(_AtlBaseModule.GetResourceInstance(),IDS_ALL,strAll,sizeof(strAll)/sizeof(strAll[0])); + cmbProfile.AddString(strAll); + cmbProfile.SetCurSel(m_nCurProfile); +} + +void CTranslationDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateCurProfile() +{ + m_nCurProfile=g_Options.m_nCurProfile; + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateTranslation() +{ + const int nSize=TranslationCount()+1000; + NN::auto_array aText(nSize); + if(!aText.data()) + return; + MakeTranslation(aText.data()); + + NN::auto_array awText(nSize); + if(!awText.data()) + return; + ::MultiByteToWideChar(1251,0,aText.data(),nSize,awText.data(),nSize); + + m_reTranslation.SetTextEx((LPTSTR)awText.data(),ST_DEFAULT,1200); + m_reTranslation.HideSelection(true,TRUE); + m_reTranslation.LineScroll(0); +} + +void CTranslationDlg::MakeTranslation(LPTSTR strTranslation) +{ + strTranslation[0]=0; + + char strText[2][40]; + for(int i=0;i<2;i++) + AtlLoadString(IDS_TRNSTORUS+i,strText[i],40); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + continue; + } + + for(int i=0;i<2;i++) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + lstrcat(strTranslation,strText[i]); + lstrcat(strTranslation,":\r\n"); + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)i))->GetData()); + lstrcat(strTranslation," - "); + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)!i))->GetData()); + lstrcat(strTranslation,"\r\n"); + } + if(!i) + lstrcat(strTranslation,"\r\n"); + } + lstrcat(strTranslation,"\r\n"); + } +} + +size_t CTranslationDlg::TranslationCount() +{ + size_t nCount=0; + size_t nrn=lstrlen("\r\n"); + + size_t nText[2]; + for(int i=0;i<2;i++) + nText[i]=AtlLoadString(IDC_TRNSTORUS+i,0,0); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + nCount+=lstrlen(pProfile->m_strName)+1; + continue; + } + + for(int i=0;i<2;i++) + { + nCount+=lstrlen(pProfile->m_strName)+nrn+1; + nCount+=nText[i]+nrn; + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)i))->GetData()); + nCount+=lstrlen(" - "); + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)!i))->GetData()); + nCount+=nrn; + } + if(!i) + nCount+=nrn; + } + nCount+=nrn; + } + return nCount; +} + +LRESULT CTranslationDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + DlgResize_Init(); + + m_reTranslation=GetDlgItem(IDC_TRANSLATION); + m_reTranslation.SetEventMask(ENM_KEYEVENTS); + m_reTranslation.SetFocus(); + + m_nCurProfile=Language::nProfiles; + UpdateCmbProfile(); + + return 0; +} + +LRESULT CTranslationDlg::OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + static bool bInit; + if(wParam&&!bInit) + { + bInit=true; + UpdateTranslation(); + } + return 0; +} + +LRESULT CTranslationDlg::OnChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_nCurProfile=SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL,0,0); + UpdateTranslation(); + return 0; +} + +LRESULT CTranslationDlg::OnEnMsgFilterTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_KEYDOWN&&pMsgFilter->wParam==VK_ESCAPE) + CloseDialog(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_5.8/TranslationDlg.h b/legacy/Transliterator_5.8/TranslationDlg.h new file mode 100644 index 0000000..eb8f188 --- /dev/null +++ b/legacy/Transliterator_5.8/TranslationDlg.h @@ -0,0 +1,46 @@ +#ifndef __TRANSLATIONDLG_H__ +#define __TRANSLATIONDLG_H__ + +class CTranslationDlg : public CDialogImpl, + public NN::DialogLang, + public CDialogResize, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_TRANSLATION }; + + CRichEditCtrl m_reTranslation; + int m_nCurProfile; + + void UpdateCmbProfile(); + void UpdateLanguage(); + void UpdateCurProfile(); + + void UpdateTranslation(); + void MakeTranslation(LPTSTR strTranslation); + size_t TranslationCount(); + + BEGIN_DLGRESIZE_MAP(CTranslationDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_TRANSLATION, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + NOTIFY_HANDLER(IDC_TRANSLATION, EN_MSGFILTER, OnEnMsgFilterTranslation) + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnChangeProfile) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLATIONDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Transliterator.cpp b/legacy/Transliterator_5.8/Transliterator.cpp new file mode 100644 index 0000000..14543ee --- /dev/null +++ b/legacy/Transliterator_5.8/Transliterator.cpp @@ -0,0 +1,62 @@ +#include "stdafx.h" +#include "resource.h" +#include "transliteratordlg.h" + +int Run() +{ + CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + CTransliteratorDlg dlgTransliterator; + int nRet=0; + + if(!dlgTransliterator.Show()) + { + ShowError(_T("Cannot create main window")); + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + return nRet; +} + +HMODULE LoadRichEditLibrary() +{ + HMODULE hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + ShowError(_T("Cannot load \"riched20.dll\"")); + return hRichEdit; +} + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + // One Instance + if(NN::SetOneInstance(_T("Transliterator"))) + return 0; + + // RichEdit Library + if(!LoadRichEditLibrary()) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + ::DefWindowProc(NULL, 0, 0, 0L); + + AtlInitCommonControls(0xFF); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(); + + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} diff --git a/legacy/Transliterator_5.8/Transliterator.rc b/legacy/Transliterator_5.8/Transliterator.rc new file mode 100644 index 0000000..86b67c8 --- /dev/null +++ b/legacy/Transliterator_5.8/Transliterator.rc @@ -0,0 +1,953 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Transliterator.rc2" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 5,7,0,0 + PRODUCTVERSION 5,7,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + BLOCK "041904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200, 0x419, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLITERATOR ICON "res\\Transliterator.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLITERATOR DIALOGEX 0, 0, 177, 185 +STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +CAPTION " " +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + GROUPBOX "",IDC_STRNSTEXT,2,2,172,75,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SRUSTEXT,2,80,172,75,0,WS_EX_TRANSPARENT + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,177,1 +END + +IDD_ABOUT DIALOGEX 0, 0, 280, 295 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "",IDC_EMAIL,10,275,125,13,BS_FLAT + PUSHBUTTON "",IDC_SITE,145,275,125,13,BS_FLAT + EDITTEXT IDC_SABOUT,10,25,260,245,ES_MULTILINE | ES_READONLY | + WS_VSCROLL + LTEXT "",IDC_SABOUTPROGRAM,10,5,260,10,SS_SUNKEN +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 158, 252 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATH,8,35,120,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BROWSE,128,35,16,12 + CONTROL "",IDC_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65, + 125,10 + CONTROL "",IDC_FOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 80,125,10 + CONTROL "",IDC_SUBFOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,95,125,10 + CONTROL "",IDC_SELFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,110,125,10 + CONTROL "",IDC_NAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,140, + 125,10 + CONTROL "",IDC_ENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 155,125,10 + CONTROL "",IDC_MP3TAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 170,125,10 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,10,196,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,10,210,125,10 + DEFPUSHBUTTON "",IDC_TRANSLATE,40,230,50,14 + PUSHBUTTON "",IDC_CLOSE,98,230,50,14 + GROUPBOX "",IDC_SFOLDER,5,55,145,70 + GROUPBOX "",IDC_SDIRECTION,5,186,145,39 + GROUPBOX "",IDC_SFILE,5,128,144,58 + COMBOBOX IDC_PROFILE,45,6,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + GROUPBOX "",IDC_SPROFILE,5,0,143,23,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SPATH,5,22,145,30 +END + +IDD_OPTIONS DIALOGEX 0, 0, 305, 164 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDOK,10,83,50,14 + PUSHBUTTON "",IDC_CLOSE,10,104,50,14 + PUSHBUTTON "",IDC_APPLY,10,123,50,14 + PUSHBUTTON "",IDC_RESET,10,144,50,14 + LISTBOX IDC_LISTOPTIONS,0,0,70,75,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_SDLGPLACE,75,1,225,160,NOT WS_VISIBLE +END + +IDD_TRANSLATION DIALOGEX 0, 0, 90, 212 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_TRANSLATION,"RichEdit20A",ES_MULTILINE | + ES_READONLY | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,0,17, + 89,195 + COMBOBOX IDC_PROFILE,2,0,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,14,89,1, + WS_EX_TRANSPARENT +END + +IDD_PAGEGENERAL DIALOGEX 0, 0, 225, 132 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_SVIEW,0,0,110,63 + CONTROL "",IDC_SHOWTRAYICON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,14,100,8 + CONTROL "",IDC_SHOWTASKBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 5,30,100,8 + CONTROL "",IDC_TOPMOST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 47,100,8 + GROUPBOX "",IDC_SLOADONSTARTUP,115,0,110,63 + CONTROL "",IDC_LOADNO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,120,14,100,8 + CONTROL "",IDC_LOADHIDDEN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,30,100,8 + CONTROL "",IDC_LOADSHOWN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,47,100,8 + GROUPBOX "",IDC_SFONTS,0,65,135,67 + CONTROL "",IDC_FONTNAMETRNS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,75,70,14 + PUSHBUTTON "",IDC_FONTTRNS,75,76,50,14 + CONTROL "",IDC_FONTNAMERUS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,95,70,14 + PUSHBUTTON "",IDC_FONTRUS,75,95,50,14 + CONTROL "",IDC_FONTNAMETRANSLATION,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,115,70,14 + PUSHBUTTON "",IDC_FONTTRANSLATION,75,115,50,14 +END + +IDD_PAGEPROFILE DIALOGEX 0, 0, 225, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + COMBOBOX IDC_PROFILE,3,10,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SNAME,86,10,37,8 + EDITTEXT IDC_PROFILENAME,128,10,89,12,ES_AUTOHSCROLL + GROUPBOX "",IDC_SPROFILE,0,0,225,27,0,WS_EX_TRANSPARENT + LTEXT "",IDC_STRANSLIT,4,39,36,8 + COMBOBOX IDC_TRNS,45,39,38,69,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SRUSSIAN,4,55,36,8 + COMBOBOX IDC_RUS,45,55,38,68,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 74,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 87,78,8 + PUSHBUTTON "",IDC_ADD,85,39,42,14 + PUSHBUTTON "",IDC_REMOVE,85,59,42,14 + PUSHBUTTON "",IDC_CLEAR,85,79,42,14 + COMBOBOX IDC_COPYFROM,145,41,76,30,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "",IDC_COPY,145,57,45,14 + GROUPBOX "",IDC_SCOPYPROFILE,140,28,85,48 + LTEXT "",IDC_STRANSLIT2,3,116,37,8 + LTEXT "",IDC_SBEGIN,43,116,22,8 + EDITTEXT IDC_BEGINTRNS,67,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND,86,116,17,8 + EDITTEXT IDC_ENDTRNS,108,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SRUSSIAN2,3,131,37,8 + LTEXT "",IDC_SBEGIN2,43,132,22,8 + EDITTEXT IDC_BEGINRUS,67,130,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND2,86,132,17,8 + EDITTEXT IDC_ENDRUS,108,130,15,12,ES_AUTOHSCROLL + CONTROL "",IDC_COPYIGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 2,145,123,8 + GROUPBOX "",IDC_SRESET,140,119,85,40 + PUSHBUTTON "",IDC_RESET,145,130,50,12 + PUSHBUTTON "",IDC_RESETALL,145,143,50,12 + GROUPBOX "",IDC_SIGNORE,0,104,133,55 + GROUPBOX "",IDC_STRANSLATESYMBOLS,0,28,133,74 + GROUPBOX "",IDC_SLOADSAVE,140,77,85,41 + PUSHBUTTON "",IDC_SAVE,145,101,50,12 + PUSHBUTTON "",IDC_LOAD,145,88,50,12 +END + +IDD_PAGEHOTKEYS DIALOGEX 0, 0, 191, 117 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_SACTION,15,17,40,8 + COMBOBOX IDC_ACTION,60,17,110,46,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SKEY,15,37,40,8 + CONTROL "",IDC_HOTKEYACTION,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,60,37,110,14 + GROUPBOX "",IDC_SHOTKEYS,5,5,175,56 + GROUPBOX "",IDC_SAUTOTRANSLATION,5,64,175,47 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,15,79,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,15,94,125,10 +END + +IDD_PAGEIGNORE DIALOGEX 0, 0, 200, 135 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_IGNORE,"RichEdit20A",ES_AUTOHSCROLL | WS_BORDER | + WS_TABSTOP,41,10,89,13 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,25,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,38,78,8 + PUSHBUTTON "",IDC_ADD,140,11,50,13 + PUSHBUTTON "",IDC_REMOVE,140,27,50,13 + PUSHBUTTON "",IDC_CLEAR,140,42,50,13 + LISTBOX IDC_LISTIGNORE,10,58,180,70,LBS_SORT | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "",IDC_STEXT,10,12,25,8 + GROUPBOX "",IDC_SIGNORE,0,0,200,135 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLITERATOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 273 + TOPMARGIN, 7 + BOTTOMMARGIN, 288 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + BOTTOMMARGIN, 232 + END + + IDD_OPTIONS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 298 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + IDD_TRANSLATION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 83 + TOPMARGIN, 7 + BOTTOMMARGIN, 205 + END + + IDD_PAGEGENERAL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 219 + TOPMARGIN, 7 + BOTTOMMARGIN, 126 + END + + IDD_PAGEPROFILE, DIALOG + BEGIN + RIGHTMARGIN, 158 + BOTTOMMARGIN, 131 + END + + IDD_PAGEHOTKEYS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 185 + TOPMARGIN, 7 + BOTTOMMARGIN, 111 + END + + IDD_PAGEIGNORE, DIALOG + BEGIN + BOTTOMMARGIN, 113 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLITERATOR ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "R", ID_EDIT_COPY_RUSTOTRNS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "T", ID_EDIT_COPY_TRNSTORUS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "I", ID_EDIT_IGNORE_INSERT, VIRTKEY, SHIFT, ALT, NOINVERT + "R", ID_EDIT_IGNORE_REMOVE, VIRTKEY, SHIFT, ALT, NOINVERT + "1", ID_PROFILE1, VIRTKEY, CONTROL, NOINVERT + "2", ID_PROFILE2, VIRTKEY, CONTROL, NOINVERT + "3", ID_PROFILE3, VIRTKEY, CONTROL, NOINVERT + "4", ID_PROFILE4, VIRTKEY, CONTROL, NOINVERT + "5", ID_PROFILE5, VIRTKEY, CONTROL, NOINVERT + "6", ID_PROFILE6, VIRTKEY, CONTROL, NOINVERT + "7", ID_PROFILE7, VIRTKEY, CONTROL, NOINVERT + "8", ID_PROFILE8, VIRTKEY, CONTROL, NOINVERT + "9", ID_PROFILE9, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F4, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_TRANSLATION, VIRTKEY, NOINVERT + "A", ID_VIEW_CONTROLS_AUTOTRANSLITERATION, VIRTKEY, SHIFT, + CONTROL, NOINVERT + "S", ID_VIEW_CONTROLS_SCROLLTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "W", ID_VIEW_CONTROLS_WRAPTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + VK_F1, ID_VIEW_LANGUAGE_ENGLISH, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_VIEW_LANGUAGE_RUSSIAN, VIRTKEY, CONTROL, NOINVERT + VK_F3, ID_VIEW_LANGUAGE_TRANSLIT, VIRTKEY, CONTROL, NOINVERT + "G", ID_VIEW_CONTROLS_AUTOIGNORE, VIRTKEY, SHIFT, CONTROL, + NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLITERATOR MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_EXIT + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + END + POPUP " " + BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + END +END + +IDR_TRAYICON MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + MENUITEM SEPARATOR + MENUITEM " ", ID_SHOW + MENUITEM " ", ID_HIDE + MENUITEM SEPARATOR + MENUITEM " ", ID_APP_EXIT + END +END + +IDR_PROFILE MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END +END + +IDR_EDIT MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + END +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE " \n " + ID_EDIT_COPY_TRNSTORUS " \n " + ID_EDIT_COPY_RUSTOTRNS " \n " + ID_VIEW_LANGUAGE_ENGLISH " \n " + ID_VIEW_LANGUAGE_RUSSIAN " \n " + ID_VIEW_LANGUAGE_TRANSLIT "\n" + ID_VIEW_CONTROLS_WRAPTEXT " \n " + ID_VIEW_CONTROLS_SCROLLTEXT " \n " + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + " \n " + ID_VIEW_CONTROLS_AUTOIGNORE " \n " + ID_TOOLS_TRANSLATION " \n" + ID_TOOLS_TRANSLATEFILES " \n " + ID_TOOLS_OPTIONS " \n" + ID_SHOW " \n" + ID_HIDE " \n" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + IDS_ERROR "" + IDS_HELP "" + IDS_TRNSTORUS " " + IDS_RUSTOTRNS " " + IDS_NOTRANSLATE " " + IDS_GENERAL "" + IDS_HOTKEYS " " + IDS_PROFILE "" + IDS_IGNORE "" + IDS_TRANSLIT "" + IDS_RUSSIAN "" + IDS_ALL "" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT " \n " +END + +STRINGTABLE +BEGIN + ID_PROFILE1 " 1" + ID_PROFILE2 " 2" + ID_PROFILE3 " 3" + ID_PROFILE4 " 4" + ID_PROFILE5 " 5" + ID_PROFILE6 " 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Transliterator.rc2""\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Remove ignore symbols\nRemove ignore" + ID_EDIT_COPY_TRNSTORUS "Copy text from translit to russian\nCopy translit to russian" + ID_EDIT_COPY_RUSTOTRNS "Copy text from russian to translit\nCopy russian to translit" + ID_VIEW_LANGUAGE_ENGLISH "Enlish language\nEnglish language" + ID_VIEW_LANGUAGE_RUSSIAN "Russian language\nRussian language" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\nWrap text" + ID_VIEW_CONTROLS_SCROLLTEXT "Scroll text\nScroll text" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Translate text\nAuto Transliteration" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignore text\nAuto Ignore" + ID_TOOLS_TRANSLATION "Show or hide translation window\nTranslation" + ID_TOOLS_TRANSLATEFILES "Show or hide translate files window\nTranslate Files" + ID_TOOLS_OPTIONS "Show or hide options window\nOptions" + ID_SHOW "Show application window\nShow" + ID_HIDE "Hide application window\nHide" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Error" + IDS_HELP "Help" + IDS_TRNSTORUS "Translit to Russian" + IDS_RUSTOTRNS "Russian to Translit" + IDS_NOTRANSLATE "No translation" + IDS_GENERAL "General" + IDS_HOTKEYS "Hot Keys" + IDS_PROFILE "Profile" + IDS_IGNORE "Ignore" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russian" + IDS_ALL "All" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Insert ignore symbols\nInsert ignore" +END + +STRINGTABLE +BEGIN + ATL_IDC_TAB_CONTROL "Russian to Translit" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profile 1" + ID_PROFILE2 "Profile 2" + ID_PROFILE3 "Profile 3" + ID_PROFILE4 "Profile 4" + ID_PROFILE5 "Profile 5" + ID_PROFILE6 "Profile 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Done" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Transliterator_5.8/Transliterator.rc2 b/legacy/Transliterator_5.8/Transliterator.rc2 new file mode 100644 index 0000000..43cc53f --- /dev/null +++ b/legacy/Transliterator_5.8/Transliterator.rc2 @@ -0,0 +1,571 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Transliterator.exe.manifest" + +#define SUBLANG_LOC 0x30 +#define SUBLANG_LOC2 0x31 + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" + IDD_ABOUT " " + IDD_TRANSLATEFILES " " + IDD_OPTIONS "" + IDD_TRANSLATION "" + IDC_STRNSTEXT "" + IDC_SRUSTEXT "" + IDC_SPROFILE "" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "\tAlt+F4" + ID_EDIT_UNDO "\tCtrl+Z" + ID_EDIT_REDO "\tCtrl+Y" + ID_EDIT_CUT "\tCtrl+X" + ID_EDIT_COPY "\tCtrl+C" + ID_EDIT_PASTE "\tCtrl+V" + ID_EDIT_CLEAR "\tDel" + ID_EDIT_CLEAR_ALL " " + ID_EDIT_SELECT_ALL " \tCtrl+A" + ID_EDIT_IGNORE_INSERT "\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS " \tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS " \tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT " \tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT " \tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION " \tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE " \tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "...\tF3" + ID_TOOLS_TRANSLATEFILES " ...\tF4" + ID_TOOLS_OPTIONS "...\tF2" + ID_APP_ABOUT " ...\tF1" + IDC_SABOUT " () .\r\n :\r\n (translit , translit).\r\n :\r\n - translit > , > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- > \r\n ( , ).\r\n : /, .\r\n ( , , MP3 )\r\n ( , ), .\r\n , .\r\n : English, Translit\r\n :\r\nWindows 95 RichEdit 3.0 ( Internet Explorer 5.7 )\r\n ""-"".\r\n , .\r\n :\r\nMyxamore6e , DnAp Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM " 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL ". : nn-mail@bk.ru" + IDC_SITE " : http://our-site.nm.ru" + IDC_TRNSTORUS " " + IDC_RUSTOTRNS " " + IDC_SPATH "" + IDC_BROWSE "..." + IDC_SFOLDER "" + IDC_FILES "" + IDC_FOLDERS "" + IDC_SUBFOLDERS " " + IDC_SELFOLDER " " + IDC_SFILE "" + IDC_NAME "" + IDC_ENTRY "" + IDC_MP3TAGS "MP3 " + IDC_SDIRECTION "" + IDC_TRANSLATE "" + IDC_CLOSE "" + IDC_SNAME " :" + IDC_STRANSLIT " :" + IDC_SRUSSIAN " :" + IDC_ADD "" + IDC_REMOVE "" + IDC_CLEAR "" + IDC_SIGNORE "" + IDC_STRANSLIT2 " :" + IDC_SRUSSIAN2 " :" + IDC_SBEGIN " :" + IDC_SEND " :" + IDC_SBEGIN2 " :" + IDC_SEND2 " :" + IDC_SCOPYPROFILE " " + IDC_COPY "" + IDC_SIN "" + IDC_RESET "" + IDC_RESETALL " " + IDC_SRESET "" + ID_SHOW "" + ID_HIDE "" + IDC_APPLY "" + IDOK "" + IDCANCEL "" + IDC_STRANSLATESYMBOLS " " + IDC_SVIEW "" + IDC_SHOWTRAYICON " " + IDC_SHOWTASKBAR " " + IDC_TOPMOST " " + IDC_SFONTS "" + IDC_FONTTRNS "" + IDC_FONTRUS "" + IDC_FONTTRANSLATION "" + IDC_SLOADONSTARTUP " " + IDC_LOADSHOWN "" + IDC_LOADHIDDEN "" + IDC_LOADNO " " + IDC_SHOTKEYS " " + IDC_SACTION " :" + IDC_SKEY " :" + IDC_ACTION " \n \n \n/ \n \n \n" + IDC_SAUTOTRANSLATION " " + IDC_COPYIGNORE " " + IDC_SLOADSAVE "/" + IDC_LOAD "" + IDC_SAVE "" + IDC_STEXT " :" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "\n\n\n\n\n\n\n \n\n" + IDR_TRAYICON "1\n\n" + IDR_EDIT "1\n\n\n\n\n \n" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_TRANSLATEFILES "Translate Files" + IDD_ABOUT "About" + IDD_TRANSLATION "Translation" + IDD_OPTIONS "Options" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russian" + IDC_SPROFILE "Profile" + IDC_PROFILE "" + IDC_TRANSLATION "" + ID_APP_EXIT "Exit\tAlt+F4" + ID_EDIT_UNDO "Undo\tCtrl+Z" + ID_EDIT_REDO "Redo\tCtrl+Y" + ID_EDIT_CUT "Cut\tCtrl+X" + ID_EDIT_COPY "Copy\tCtrl+C" + ID_EDIT_PASTE "Paste\tCtrl+V" + ID_EDIT_CLEAR "Delete\tDel" + ID_EDIT_CLEAR_ALL "Delete All" + ID_EDIT_SELECT_ALL "Select All\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Insert\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Remove\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit to russian\tAlt+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russian to translit\tAlt+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Scrol text\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Auto Transliteration\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Auto Ignore\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Translation...\tF3" + ID_TOOLS_TRANSLATEFILES "Translate Files...\tF4" + ID_TOOLS_OPTIONS "Options...\tF2" + ID_APP_ABOUT "About...\tF1" + IDC_SABOUT "This program works with russian (cyrillic) letters and translation russian letters into translit and translit letters into russian\r\nShort review:\r\nTranslation two-way (translit into russian, russian into translit).\r\nDifferent profiles of transliteration:\r\n- translit > russian, russian > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- User > User\r\nIgnore translation symbols (after insertion this symbol some part of will no be transliterated\r\nHot Keys: show/hide, auto transliteration\r\nTransliteration files (file name or folder, entry of the file, MP3 tags)\r\nOptions for change: (transliteration, ignore), transliteration profiles and hot keys\r\nMinimization to tray icon and option to show or hide tray icon\r\nInterface languages: English, and Translit\r\nMinimal requirements\r\nWindows 95 and RichEdit version 3.0 (Internet Explorer 5.7 and higher)\r\nThis program is freeware and provided ""AS-IS"".\r\nI take no responsibility for any damage this program cause.\r\nSpecial thanks to :\r\nMyxamore6e , DnAp and Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E-mail : nn-mail@bk.ru" + IDC_SITE "Site : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit to Russian" + IDC_RUSTOTRNS "Russian to Translit" + IDC_SPATH "Path" + IDC_BROWSE "..." + IDC_SFOLDER "Folder" + IDC_FILES "Files" + IDC_FOLDERS "Folders" + IDC_SUBFOLDERS "Folders in selected folder" + IDC_SELFOLDER "Selected Folder" + IDC_SFILE "File" + IDC_NAME "Name" + IDC_ENTRY "Entry" + IDC_MP3TAGS "MP3 Tags" + IDC_SDIRECTION "Direction" + IDC_TRANSLATE "Translate" + IDC_CLOSE "Close" + IDC_SNAME "Name :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russian :" + IDC_ADD "Add" + IDC_REMOVE "Remove" + IDC_CLEAR "Clear" + IDC_SIGNORE "Ignore" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russian :" + IDC_SBEGIN "Begin :" + IDC_SEND "End :" + IDC_SBEGIN2 "Begin :" + IDC_SEND2 "End :" + IDC_SCOPYPROFILE "Copy From" + IDC_COPY "Copy" + IDC_SIN "Into" + IDC_RESET "Reset" + IDC_RESETALL "Reset all" + IDC_SRESET "Reset" + ID_SHOW "Show" + ID_HIDE "Hide" + IDC_APPLY "Apply" + IDOK "OK" + IDCANCEL "Cancel" + IDC_STRANSLATESYMBOLS "Translate Symbols" + IDC_SVIEW "View" + IDC_SHOWTRAYICON "System icon" + IDC_SHOWTASKBAR "TaskBar" + IDC_TOPMOST "Top Most" + IDC_SFONTS "Fonts" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russian" + IDC_FONTTRANSLATION "Translation" + IDC_SLOADONSTARTUP "Load on startup" + IDC_LOADSHOWN "Shown" + IDC_LOADHIDDEN "Hidden" + IDC_LOADNO "No load" + IDC_SHOTKEYS "Hot Keys" + IDC_SACTION "Action :" + IDC_SKEY "Key :" + IDC_ACTION "Translit to Russian\nRussian to Translit\nAuto Translation\nShow/Hide Program\nCopy to Translit\nCopy to Russian\n" + IDC_SAUTOTRANSLATION "Auto Translation" + IDC_COPYIGNORE "Copy ignore" + IDC_SLOADSAVE "Load/Save" + IDC_LOAD "Load" + IDC_SAVE "Save" + IDC_STEXT "Text :" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC2) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Main\nEdit\nIgnore\nCopy\nView\nProfile\nLanguage\nControls\nTools\nHelp" + IDR_TRAYICON "1\nProfile\nLanguage" + IDR_EDIT "1\nIgnore\nCopy\nProfile\nLanguage\nControls\nTools" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, (SUBLANG_DEFAULT+4) +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Sozdanie novogo okna\nSozdat'" + ID_FILE_OPEN "Otkry'tie susch'estvuesch'ego dokumenta\nOtkry't'" + ID_FILE_CLOSE "Zakry'tie aktivnogo okna\nZakry't'" + ID_FILE_SAVE "Sohranenie aktivnogo dokumenta\nSohranit'" + ID_FILE_SAVE_AS "Sohranenie aktivnogo dokumenta pod drugim imenem\nSohranit' kak" + ID_FILE_PAGE_SETUP "Izmenenie parametrov stranicy'\nParametry' stranicy'" + ID_FILE_PRINT_SETUP "Smena prontera i izmenenie ego parametrov\nNastroyka printera" + ID_FILE_PRINT "Pechat' aktivnogo dokumenta\nPechat'" + ID_FILE_PRINT_PREVIEW "Prosmotr pechataemogo materiala v polnostranichnom rejime\nPredvaritel'ny'y prosmotr" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Udalenie simvolov ignorirovaniya\nUdalit' ignorirovanie" + ID_EDIT_COPY_TRNSTORUS "Kopirovanie teksta iz okna translita v russkiy\nKopirovat' translit v russkiy" + ID_EDIT_COPY_RUSTOTRNS "Kopirovanie teksta iz russkogo okna v translit\nKopirovat' russkiy v translit" + ID_VIEW_LANGUAGE_ENGLISH "Angliyskiy yazy'k\nAngliyskiy yazy'k" + ID_VIEW_LANGUAGE_RUSSIAN "Russkiy yazy'k\nRusskiy yazy'k" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\nPerenosit' tekst" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\nProkruchivat' tekst" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Perevodit' tekst\nAvto Transliteraciya" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignorirovat' tekst\nAvto Ignorirovanie" + ID_TOOLS_TRANSLATION "Pokazat' ili skry't' okno perevoda\nPerevod" + ID_TOOLS_TRANSLATEFILES "Pokazat' ili skry't'okno perevoda faylov\nPerevod Faylov" + ID_TOOLS_OPTIONS "Pokazat' ili skry't'okno opciy\nOpcii" + ID_SHOW "Pokazat' okno prilojeniya\nPokazat'" + ID_HIDE "Skry't' okno prilojeniya\nSkry't'" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Vy'vod svedeniy o programme\nO programme" + ID_APP_EXIT "Zavershenie raboty' s prilojeniem\nVy'hod" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Perehod k sleduyusch'ey paneli okna\nSleduyusch'aya panel'" + ID_PREV_PANE "Perehod k predy'dusch'ey paneli okna\nPredy'dusch'aya panel'" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Otkry't' drugoe okno\nNovoe okno" + ID_WINDOW_ARRANGE "Uporyadochit' znachki v nijney chasti okna\nUporyadochit' znachki" + ID_WINDOW_CASCADE "Uporyadochit' okna takim obrazom, chtoby' oni perekry'valis'\nKaskadirovat' okna" + ID_WINDOW_TILE_HORZ "Uporyadochit' okna po gorizontali\nUporyadochit' po gorizontali" + ID_WINDOW_TILE_VERT "Uporyadochit' okna po vertikali\nUporyadochit' po vertikali" + ID_WINDOW_SPLIT "Razbit' aktivnoe okno na paneli\nRazbit'" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Udalenie vy'delenongo fragmenta\nUdalit'" + ID_EDIT_CLEAR_ALL "Udalit' vse\nUdalit' vse" + ID_EDIT_COPY "Kopirovanie vy'delennogo fragmenta v bufer obmena\nKopirovat' v buffer" + ID_EDIT_CUT "Udalenie vy'delennogo fragmenta v bufer obmena\nUdalit' v buffer" + ID_EDIT_FIND "Poisk zadannogo tekstaNayti" + ID_EDIT_PASTE "Vstavka soderjimogo buffera obmena\nVstavit'" + ID_EDIT_REPEAT "Povtorit' poslednee deystvie\nPovtorit'" + ID_EDIT_REPLACE "Zamena teksta\nZamenit'" + ID_EDIT_SELECT_ALL "Vy'delenie vsego dokumenta celikom\nVy'delit' vse" + ID_EDIT_UNDO "Otmena poslednego vy'polnennogo deystviya\nOtmena" + ID_EDIT_REDO "Vernut' rezul'tat poslednego otmenennogo deystviya\nVernut'" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Izmenenie razmerov okna" + ATL_IDS_SCMOVE "Izmenenie polojeniya okna" + ATL_IDS_SCMINIMIZE "Minimizaciya okna" + ATL_IDS_SCMAXIMIZE "Maksimizaciya okna" + ATL_IDS_SCNEXTWINDOW "Perehod k sleduyusch'emu oknu" + ATL_IDS_SCPREVWINDOW "Perehod k predy'dusch'emu oknu" + ATL_IDS_SCCLOSE "Zakry'tie aktivnogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Vosstanovlenie razmerov okna" + ATL_IDS_SCTASKLIST "Aktivizaciya spiska zadach" + ATL_IDS_MDICHILD "Aktivizaciya dannogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Otkry't' e`tot dokument" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Oshibka" + IDS_HELP "Pomosch''" + IDS_TRNSTORUS "Translit v Russkiy" + IDS_RUSTOTRNS "Russkiy v Translit" + IDS_NOTRANSLATE "Net perevoda" + IDS_GENERAL "Obsch'ee" + IDS_HOTKEYS "Goryachie klavishi" + IDS_PROFILE "Profil'" + IDS_IGNORE "Ignorirovanie" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russkiy" + IDS_ALL "Vse" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Vstavka simvolov ignorirovaniya\nVstavit' ignorirovanie" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profil' 1" + ID_PROFILE2 "Profil' 2" + ID_PROFILE3 "Profil' 3" + ID_PROFILE4 "Profil' 4" + ID_PROFILE5 "Profil' 5" + ID_PROFILE6 "Profil' 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Gotovo" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_ABOUT "O programme" + IDD_TRANSLATEFILES "Perevod Faylov" + IDD_OPTIONS "Opcii" + IDD_TRANSLATION "Perevod" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russkiy" + IDC_SPROFILE "Profil'" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "Vy'hod\tAlt+F4" + ID_EDIT_UNDO "Otmenit'\tCtrl+Z" + ID_EDIT_REDO "Povtorit'\tCtrl+Y" + ID_EDIT_CUT "Vy'rezat'\tCtrl+X" + ID_EDIT_COPY "Kopirovat'\tCtrl+C" + ID_EDIT_PASTE "Vstavit'\tCtrl+V" + ID_EDIT_CLEAR "Udalit'\tDel" + ID_EDIT_CLEAR_ALL "Udalit' Vse" + ID_EDIT_SELECT_ALL "Vy'delit' Vse\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Vstavit'\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Udalit'\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit v russkiy\tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russkiy v translit\tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Avto Transliteraciya\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Avto Ignorirovanie\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Perevod...\tF3" + ID_TOOLS_TRANSLATEFILES "Perevod Faylov...\tF4" + ID_TOOLS_OPTIONS "Opcii...\tF2" + ID_APP_ABOUT "O programme...\tF1" + IDC_SABOUT "Programma dlya raboty' s russkimi (kirillicheskimi) bukvami i perevoda russkih bukv v translit i naoborot.\r\nKratkoe opisanie:\r\nPerevod v oboih napravleniyah (translit v russkiy, russkiy v translit).\r\nRazlichny'e profili transliteracii:\r\n - translit > russkiy, russkiy > translit\r\n- qwerty > ycuken, ycuken > qwerty\r\n- Russkiy > CuMBo/\bHblu`, CuMBo/\bHblu` > Russkiy\r\n- Pol'zovatel'skiy > Pol'zovatel'skiy\r\nSimvoly' ignorirovaniya perevoda (posle ustanovki takogo simvola, ukazannaya chast' teksta ne transliteruyutsya).\r\nVy'zov programmy' s pomosch''yu goryachey klavishi: pokaz/skry'tie, avtomaticheskaya transliteraciya.\r\nVozmojnost' Transliteracii faylov (nazvanie fayla ili papki, soderjanie teksta, MP3 te`gi)\r\nVozmojnost' izmeneniya parametrov transliteracii (simvolov perevoda, ignorirovaniya), profiley transliteracii i goryachih klavish na svoy vkus.\r\nSvorachivanie v ikonku , a takje nastroyki pokaza i skry'tiya ikonki v sistemnoy paneli.\r\nYAzy'ki interfeysa: English, Russkiy i Translit\r\nMinimal'ny'y trebovaniya:\r\nWindows 95 i RichEdit versii 3.0 (vhodit v sostav Internet Explorer 5.7 i vy'she)\r\nE`ta programma besplatna i predostavlena ""KAK-EST''"".\r\nYA ne nesu nikakoy otvetsvennosti za usherb , kotory'y mojet by't' nanesen.\r\nBlagodarnosti :\r\nMyxamore6e , DnAp i Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E`l.Pochta : nn-mail@bk.ru" + IDC_SITE "Sayt : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit v Russkiy" + IDC_RUSTOTRNS "Russkiy v Translit" + IDC_SPATH "Put'" + IDC_BROWSE "..." + IDC_SFOLDER "Papka" + IDC_FILES "Fayly'" + IDC_FOLDERS "Papki" + IDC_SUBFOLDERS "Papki v vy'brannoy papke" + IDC_SELFOLDER "Vy'brannaya Papka" + IDC_SFILE "Fayl" + IDC_NAME "Imya" + IDC_ENTRY "Soderjanie" + IDC_MP3TAGS "MP3 Tegi" + IDC_SDIRECTION "Napravlenie" + IDC_TRANSLATE "Perevod" + IDC_CLOSE "Zakry't'" + IDC_SNAME "Nazvanie :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russkiy :" + IDC_ADD "Dobavit'" + IDC_REMOVE "Udalit'" + IDC_CLEAR "Ochistit'" + IDC_SIGNORE "Ignorirovanie" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russkiy :" + IDC_SBEGIN "Ot :" + IDC_SEND "Do :" + IDC_SBEGIN2 "Ot :" + IDC_SEND2 "Do :" + IDC_SCOPYPROFILE "Kopirovat' Iz" + IDC_COPY "Kopirovat'" + IDC_SIN "V" + IDC_RESET "Sbros" + IDC_RESETALL "Sbrosit' vse" + IDC_SRESET "Sbros" + ID_SHOW "Pokazat'" + ID_HIDE "Skry't'" + IDC_APPLY "Primenit'" + IDOK "OK" + IDCANCEL "Otmena" + IDC_STRANSLATESYMBOLS "Simvoly' perevoda" + IDC_SVIEW "Vid" + IDC_SHOWTRAYICON "Sistemnaya ikonka" + IDC_SHOWTASKBAR "Panel' Zadach" + IDC_TOPMOST "Poverh vseh okon" + IDC_SFONTS "SHrifty'" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russkiy" + IDC_FONTTRANSLATION "Perevod" + IDC_SLOADONSTARTUP "Zapusk pri zagruzke" + IDC_LOADSHOWN "Pokazy'vat'" + IDC_LOADHIDDEN "Skry'vat'" + IDC_LOADNO "Ne zagrujat'" + IDC_SHOTKEYS "Goryachie klavishi" + IDC_SACTION "Deystvie :" + IDC_SKEY "Klavisha :" + IDC_ACTION "Translit v Russkiy\nRusskiy v Translit\nAvto Perevod\nPokazat'/Skry't' Programmu\nKopirovat' v Translit\nKopirovat' v Russkiy\n" + IDC_SAUTOTRANSLATION "Avto Perevod" + IDC_COPYIGNORE "Kopirovat' ignorirovanie" + IDC_SLOADSAVE "Zagruzka/Sohranenie" + IDC_LOAD "Zagruzit'" + IDC_SAVE "Sohranit'" + IDC_STEXT "Tekst :" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Glavnaya\nPravka\nIgnorirovanie\nKopirovanie\nVid\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'\nPomosch''" + IDR_TRAYICON "1\nProfil'\nYAzy'k" + IDR_EDIT "1\nIgnorirovanie\nKopirovanie\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Transliterator_5.8/Transliterator.sln b/legacy/Transliterator_5.8/Transliterator.sln new file mode 100644 index 0000000..11e119b --- /dev/null +++ b/legacy/Transliterator_5.8/Transliterator.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{E5DCB808-B8B0-4487-B6C5-0D43578C25A3}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.ActiveCfg = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.Build.0 = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.ActiveCfg = Release|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_5.8/Transliterator.vcproj b/legacy/Transliterator_5.8/Transliterator.vcproj new file mode 100644 index 0000000..5f11038 --- /dev/null +++ b/legacy/Transliterator_5.8/Transliterator.vcproj @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Transliterator_5.8/TransliteratorDlg.cpp b/legacy/Transliterator_5.8/TransliteratorDlg.cpp new file mode 100644 index 0000000..5c90e24 --- /dev/null +++ b/legacy/Transliterator_5.8/TransliteratorDlg.cpp @@ -0,0 +1,1060 @@ +#include "stdafx.h" +#include "resource.h" + +#include "transliteratordlg.h" +#include "progcommandline.h" + +const LANGID CTransliteratorDlg::s_langEnglish=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +const LANGID CTransliteratorDlg::s_langRussian=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT); +const LANGID CTransliteratorDlg::s_langTranslit=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT+4); + +BOOL CTransliteratorDlg::OnIdle() +{ + BOOL bSelection,bText; + CRichEditCtrl re=::GetFocus(); + + if(re==m_reTrnsRus[Trns]|| + re==m_reTrnsRus[Rus]) + { + bSelection=re.GetSelectionType()!=SEL_EMPTY; + bText=re.GetTextLength()?TRUE:FALSE; + UIEnable(ID_EDIT_UNDO,re.CanUndo()); + UIEnable(ID_EDIT_REDO,re.CanRedo()); + UIEnable(ID_EDIT_CUT,bSelection); + UIEnable(ID_EDIT_COPY,bSelection); + UIEnable(ID_EDIT_PASTE,re.CanPaste()); + UIEnable(ID_EDIT_SELECT_ALL,bText); + UIEnable(ID_EDIT_CLEAR,bSelection); + UIEnable(ID_EDIT_CLEAR_ALL,bText); + UIEnable(ID_EDIT_IGNORE_INSERT,TRUE); + UIEnable(ID_EDIT_IGNORE_REMOVE,TRUE); + } + else + { + for(int i=ID_EDIT_CLEAR;im_strName); + lstrcat(strText,"\tCtrl+"); + strKey[0]=(char)i+'1'; + lstrcat(strText,strKey); + + UISetText(ID_PROFILE1+i,strText); + + UISetCheck(ID_PROFILE1+i,i==g_Options.m_nCurProfile?1:0); + } + + return FALSE; +} + +void CTransliteratorDlg::DlgResize_UpdateLayout(int cxWidth, int cyHeight) +{ + CDialogResize::DlgResize_UpdateLayout(cxWidth,cyHeight); + UpdateLayout(); +} + +void CTransliteratorDlg::Translate(Translate::Direction dir) +{ + bool b1= dir==Translate::dirTrnstoRus; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + const unsigned nChar=((unsigned)reFrom.GetWindowTextLength()+1)*LangString::nCountInit; + NN::auto_array aText(nChar*2); + if(!aText.data()) + return; + + { + NN::auto_sg_ref sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + reFrom.GetTextEx((LPSTR)aText.data(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + g_Language.Translate(aText.data(),dir,nChar); + reTo.SetTextEx((LPCSTR)aText.data(),ST_DEFAULT,1200); + } +} + +bool CTransliteratorDlg::Show() +{ + LoadSettings(); + + if(!Create(::GetDesktopWindow())) + return false; + + // Command Line + ProgCommandLine cmdLine; + int nCmdShow; + if(cmdLine.GetCommandLineInfo().IsDefault()) + nCmdShow=g_Options.m_wndState.nCmdShow; + else // CmdLine + nCmdShow=cmdLine.GetCommandLineInfo().nCmdShow; + + ShowWindow(nCmdShow); + + m_bShown = (nCmdShow==SW_HIDE|| + ((nCmdShow==SW_MINIMIZE||nCmdShow==SW_SHOWMINIMIZED)&& + g_Options.m_bShowTrayIcon))?false:true; + if(!m_bShown) + ShowWindow(SW_HIDE); + + UpdateTrayIcon(); + UpdateTaskBar(); + + return true; +} + +void CTransliteratorDlg::CloseDialog() +{ + SaveSettings(); + m_dlgTranslation.DestroyWindow(); + m_dlgTranslateFiles.DestroyWindow(); + m_dlgOptions.DestroyWindow(); + m_dlgAbout.DestroyWindow(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void CTransliteratorDlg::UpdateLayout() +{ + for(int i=0;i<2;i++) + { + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_STRNSTEXT+i),&rect); + ScreenToClient(&rect); + rect.left+=size_delta_left; + rect.right-=size_delta_right; + rect.top+=size_delta_top; + rect.bottom-=size_delta_bottom; + ::MoveWindow(GetDlgItem(IDC_TRNS+i),rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + } +} + +BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||nSize!=size); +} + +BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||!nSize||nSize>size); +} + +void CTransliteratorDlg::LoadSettings() +{ + CRegKey regProg; + + if(!regProg.Open(HKEY_CURRENT_USER,"Software\\NN\\Transliterator")) + { + g_Language.ResetAll(); + + char strUser[6]="User"; + LangProfile langprof; + for(int i=Language::profUser1;im_strName; + HDC hDC=m_wndStatusBar.GetDC(); + SIZE size; + ::GetTextExtentPoint32(hDC,pName,lstrlen(pName),&size); + m_wndStatusBar.ReleaseDC(hDC); + m_wndStatusBar.SetPaneWidth(ID_PROFILE,size.cx); + m_wndStatusBar.SetPaneText(ID_PROFILE,pName); +} + +void CTransliteratorDlg::SaveWindowPlacement() +{ + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(&wndpl); + if(wndpl.showCmd==SW_SHOWMINIMIZED||wndpl.showCmd==SW_MINIMIZE) + wndpl.showCmd=SW_RESTORE; + g_Options.m_wndState.nCmdShow=wndpl.showCmd; +} + +void CTransliteratorDlg::UpdateTrnsRusString() +{ + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); +} + +HWND CTransliteratorDlg::GetActiveWindowChild() +{ + DWORD dwThreadID = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); + GUITHREADINFO gti; + + ZeroMemory(>i, sizeof(GUITHREADINFO)); + gti.cbSize = sizeof(GUITHREADINFO); + ::GetGUIThreadInfo(dwThreadID, >i); + return gti.hwndFocus; +} + +void CTransliteratorDlg::HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)) +{ + HWND hWndTranslation = GetActiveWindowChild(); + if(!hWndTranslation) + return; + + char szClass[64]={0}; + GetClassName(hWndTranslation,szClass,sizeof(szClass)/sizeof(char)-1); + + // Edit control + // Prepare + char szClassEdit[sizeof(szClass)/sizeof(char)]={0}; + lstrcpy(szClassEdit,szClass); + ::CharUpperBuff(szClassEdit, lstrlen(szClassEdit)); + // Check + if((_tcsstr(szClassEdit, "EDIT")|| + _tcsstr(szClassEdit, "TEXT"))) + { + CEdit wndTranslation=hWndTranslation; + const unsigned nChar = (unsigned)(wndTranslation.GetWindowTextLength()+1)*LangString::nCountInit; + + NN::auto_array aText(nChar); + + if(!aText.data()) + return; + + int nStart,nEnd; + wndTranslation.GetSel(nStart,nEnd); + + if(nStart==nEnd||(!nStart&&nEnd==-1)) + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.data()); + + (*pDo)(aText.data(),dir,nChar,hWndTransliterator); + + wndTranslation.SendMessage(WM_SETTEXT,0,(LPARAM)aText.data()); + } + else + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.data()); + for(int nItem=nStart;nItem spDoc; + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + if(LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, _T("ObjectFromLresult"))) + { + if(SUCCEEDED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + { + CComPtr spDisp; + CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + CComQIPtr spInput=spElem; + CComQIPtr spTA=spElem; + + CComBSTR strText; + CComVariant v; + + if(spInput) + spInput->get_value(&strText); + else + if(spTA) + spTA->get_value(&strText); + else + spElem->get_innerText(&strText); + + if(strText) + { + const unsigned nChar=(strText.Length()+1)*LangString::nCountInit; + + { + NN::auto_array aTextA(nChar); + if(!aTextA.data()) + return; + ::WideCharToMultiByte(CP,0,strText.m_str,nChar,aTextA.data(),nChar,0,0); + (*pDo)(aTextA.data(),dir,nChar,hWndTransliterator); + strText.Empty(); + strText.Append(aTextA.data()); + } + + if(spInput) + spInput->put_value(strText); + else + if(spTA) + spTA->put_value(strText); + else + spElem->put_innerText(strText); + } + } + ::FreeLibrary(hOleAccInstance); + } // else Active Accessibility is not installed + } + // Window + else + { + unsigned nChar = (unsigned)::SendMessage(hWndTranslation,WM_GETTEXTLENGTH,0,0)+1; + nChar*=LangString::nCountInit; + + NN::auto_array aText(nChar); + if(!aText.data()) + return; + + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(nChar-1),(LPARAM)aText.data()); + + (*pDo)(aText.data(),dir,nChar,hWndTransliterator); + + ::SendMessage(hWndTranslation,WM_SETTEXT,0,(LPARAM)aText.data()); + } +} + +void CTransliteratorDlg::HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND) +{ + g_Language.Translate(pText,DefineDirection(dir,pText),nChar); +} + +void CTransliteratorDlg::HotKeyCopy(char* pText,Translate::Direction dir,int /*nChar*/,HWND hWndTransliterator) +{ + ::SendDlgItemMessage(hWndTransliterator, + dir==Translate::dirTrnstoRus?IDC_TRNS:IDC_RUS, + WM_SETTEXT,0,(LPARAM)pText); +} + +void CTransliteratorDlg::HotKeyShow(bool bShow) +{ + if(bShow) + { + ShowWindow(g_Options.m_wndState.nCmdShow==SW_SHOWMINIMIZED|| + g_Options.m_wndState.nCmdShow==SW_MINIMIZE? + SW_RESTORE:g_Options.m_wndState.nCmdShow); + } + else + { + SaveWindowPlacement(); + ShowWindow(SW_HIDE); + } + UpdateTrayIcon(); +} + +Translate::Direction CTransliteratorDlg::DefineDirection(Translate::Direction dir,LPCSTR strText) +{ + if(dir==Translate::dirAuto) + { + char str[2]={strText[0]}; + LangType t(str,str); + unsigned u=g_Language.GetCurProfile()->m_map.Find(t,0,0); + if(u!=(unsigned)-1) + return Translate::dirTrnstoRus; + u=g_Language.GetCurProfile()->m_map.Find(t,0,1); + if(u!=(unsigned)-1) + return Translate::dirRusToTrns; + return g_Options.m_nAutoTranslation; + } + else + return dir; +} + +void CTransliteratorDlg::UpdateTranslation() +{ + Translate(::GetFocus()==m_reTrnsRus[Trns]? + Translate::dirTrnstoRus: + Translate::dirRusToTrns); +} + +void CTransliteratorDlg::InitControls() +{ + NN::auto_sg_ref sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + // Save Text + NN::auto_array aText[2]; + bool bCreated=m_reTrnsRus[0].m_hWnd&&m_reTrnsRus[1].m_hWnd; + if(bCreated) + { + for(int i=0;i<2;i++) + { + // Text + unsigned nChar=(unsigned)m_reTrnsRus[i].GetWindowTextLength()+1; + aText[i].alloc(nChar); + if(aText[i].data()) + m_reTrnsRus[i].GetTextEx((LPSTR)aText[i].data(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Destroy + m_reTrnsRus[i].DestroyWindow(); + } + } + + // Create + DWORD dwStyle= + WS_TABSTOP| + WS_BORDER| + WS_CHILD| + WS_VISIBLE| + ES_WANTRETURN| + ES_MULTILINE| + WS_VSCROLL| + ES_AUTOVSCROLL; + + if(!g_Options.m_bWrapText) + dwStyle|=WS_HSCROLL|ES_AUTOHSCROLL; + DWORD dwExStyle=0; + + RECT rect={0,0,1,1}; + for(int i=0;i<2;i++) + { + if(!m_reTrnsRus[i].Create(m_hWnd,rect,"",dwStyle,dwExStyle,IDC_TRNS+i)) + { + ShowError(m_hWnd,_T("Cannot create text box")); + return; + } + + m_reTrnsRus[i].SendMessage(EM_SETLIMITTEXT,(WPARAM)MAX_SYMBOL,0); + m_reTrnsRus[i].SetEventMask(ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + } + + UpdateLayout(); + + if(bCreated) + { + NN::auto_sg_ref sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + for(int i=0;i<2;i++) + if(aText[i].data()) + m_reTrnsRus[i].SetTextEx((LPCSTR)aText[i].data(),ST_DEFAULT,1200); + } + + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); +} + +void CTransliteratorDlg::InitDialog() +{ + m_dlgTranslation.Create(m_hWnd); + m_dlgTranslateFiles.Create(m_hWnd); + m_dlgOptions.Create(m_hWnd); + m_dlgAbout.Create(m_hWnd); +} + +void CTransliteratorDlg::InitMessageLoop() +{ + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + pLoop->AddMessageFilter(&m_dlgOptions); + pLoop->AddMessageFilter(&m_dlgTranslation); + pLoop->AddMessageFilter(&m_dlgTranslateFiles); + pLoop->AddMessageFilter(&m_dlgAbout); + + UIAddChildWindowContainer(m_hWnd); +} + +LRESULT CTransliteratorDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Icon + DialogIcon_Init(); + // StatusBar + m_wndStatusBar.Create(m_hWnd); + m_hWndStatusBar = m_wndStatusBar; + int panes[] = { ID_COUNTTRNS, ID_COUNTRUS, ID_DEFAULT_PANE, ID_PROFILE }; + m_wndStatusBar.SetPanes(panes, sizeof(panes)/sizeof(panes[0]), false); + + HDC hDC=m_wndStatusBar.GetDC(); + SetTextCharacterExtra(hDC,0); + m_wndStatusBar.ReleaseDC(hDC); + + UpdateStatusBar(); + // Language + DialogLang_Init(); + // Controls + InitControls(); + // Resize + DlgResize_Init(false,true); + + m_hAccel=::LoadAccelerators(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)); + + InitDialog(); + + InitTrayIcon(IDR_TRANSLITERATOR, + ::LoadIcon(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)), + IDR_TRAYICON); + + { + NN::auto_sg_ref sg(g_Options.m_bShowTrayIcon,FALSE,g_Options.m_bShowTrayIcon); + SetOptions(true); + } + + UpdateTrnsRusString(); + UpdateCount(); + m_dlgTranslation.UpdateCurProfile(); + + // Set Text + if(m_aText[Trns].data()||m_aText[Rus].data()) + { + NN::auto_sg_ref sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + for(int i=0;i<2;i++) + { + if(m_aText[i].data()) + { + m_reTrnsRus[i].SetTextEx((LPCSTR)m_aText[i].data(),ST_DEFAULT,1200); + m_aText[i].free(); + } + } + } + + InitMessageLoop(); + + return TRUE; +} + +LRESULT CTransliteratorDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled=FALSE; + WORD wMsg=LOWORD(wParam); + + if(wMsg==SC_CLOSE) + CloseDialog(); + else + if(wMsg==SC_MINIMIZE&&g_Options.m_bShowTrayIcon) + { + bHandled=TRUE; + ShowWindow(SW_MINIMIZE); + HotKeyShow(false); + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam-hkID) + { + case Options::hkTrnstoRus: + HotKeyText(Translate::dirTrnstoRus,NULL,HotKeyTranslate); + break; + case Options::hkRusToTrns: + HotKeyText(Translate::dirRusToTrns,NULL,HotKeyTranslate); + break; + case Options::hkAuto: + HotKeyText(Translate::dirAuto,m_hWnd,HotKeyTranslate); + break; + case Options::hkShowHide: + HotKeyShow(IsWindowVisible()?false:true); + break; + case Options::hkCopyTrns: + HotKeyText(Translate::dirTrnstoRus,m_hWnd,HotKeyCopy); + break; + case Options::hkCopyRus: + HotKeyText(Translate::dirRusToTrns,m_hWnd,HotKeyCopy); + break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnQueryEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + SaveSettings(); + return TRUE; +} + +LRESULT CTransliteratorDlg::OnApply(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) +{ + if(lParam) + SetOptions(); + if(wParam) + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CloseDialog(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnEditIgnore(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + bool bInsert=wID==ID_EDIT_IGNORE_INSERT; + + // Get Text + unsigned nChar=re.GetWindowTextLength()*LangProfile::nIgnore*2+1; + NN::auto_array aText(nChar); + long nStart,nEnd; + re.GetSel(nStart,nEnd); + + re.GetTextEx((LPSTR)aText.data(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Insert/Remove + if(nStart==nEnd) + { + if(bInsert) + { + g_Language.SetIgnore(aText.data(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + + re.SetTextEx((LPCSTR)aText.data(),ST_DEFAULT,1200); + + int nText=lstrlenW(aText.data()); + re.SetSel(nText,nText); + } + else + { + g_Language.SetIgnore(aText.data(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.data(),ST_DEFAULT,1200); + re.SetSel(nStart,nStart); + } + } + // Ignore + else + { + if(!nStart&&nEnd==-1|| + !nStart&&nEnd==lstrlenW(aText.data())) // All + { + g_Language.Ignore(aText.data(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.data(),ST_DEFAULT,1200); + } + else // Selection + { + for(long nItem=nStart;nItem aTextA(nChar); + ::WideCharToMultiByte(CP,0,aText.data(),nChar,aTextA.data(),nChar,0,0); + re.ReplaceSel(aTextA.data()); + } + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCopy(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + NN::auto_sg_ref sg(g_Options.m_bTranslate,FALSE); + + bool b1= wID==ID_EDIT_COPY_TRNSTORUS; + + CRichEditCtrl& reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl& reTo=m_reTrnsRus[b1]; + + int nLen=reFrom.GetTextLength()+1; + NN::auto_array aText(nLen); + reFrom.GetTextEx((LPSTR)aText.data(),nLen,GT_DEFAULT,CP); + reTo.SetTextEx((LPCSTR)aText.data(),ST_DEFAULT,CP); + + return 0; +} + +LRESULT CTransliteratorDlg::OnProfile(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_nCurProfile=wID-ID_PROFILE1; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + m_dlgTranslation.UpdateCurProfile(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewLanguage(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + switch(wID) + { + case ID_VIEW_LANGUAGE_ENGLISH: + g_LangID=s_langEnglish; + break; + case ID_VIEW_LANGUAGE_RUSSIAN: + g_LangID=s_langRussian; + break; + case ID_VIEW_LANGUAGE_TRANSLIT: + g_LangID=s_langTranslit; + break; + default: + return 0; + } + + UpdateLanguage(); + + m_dlgTranslation.UpdateLanguage(); + m_dlgTranslateFiles.UpdateLanguage(); + m_dlgOptions.UpdateLanguage(); + m_dlgAbout.UpdateLanguage(); + + UpdateTrnsRusString(); + UpdateCount(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControls(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==ID_VIEW_CONTROLS_WRAPTEXT) + g_Options.m_bWrapText=!g_Options.m_bWrapText; + else + g_Options.m_bScrollText=!g_Options.m_bScrollText; + + InitControls(); + SetOptionsFont(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoTransliteration(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bTranslate=!g_Options.m_bTranslate; + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bIgnore=!g_Options.m_bIgnore; + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslation(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslation.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslateFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslateFiles.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgOptions.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgAbout.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + HotKeyShow(wID==ID_SHOW); + UpdateTrayIcon(); + if(wID==ID_SHOW) + UpdateTaskBar(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnChangeTrnsRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslate=false; + if(g_Options.m_bTranslate&&!bTranslate) + { + NN::auto_sg_ref_t sg(bTranslate); + Translate(wID==IDC_TRNS?Translate::dirTrnstoRus:Translate::dirRusToTrns); + + bool b1= wID==IDC_TRNS; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + if(g_Options.m_bScrollText) + reTo.LineScroll(reFrom.GetFirstVisibleLine()); + } + UpdateCount(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnMsgFilterTrnsRus(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + ::SetFocus(pMsgFilter->nmhdr.hwndFrom); + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_EDIT)); + hMenu=::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; +} + +LRESULT CTransliteratorDlg::OnClickStatusBar(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + if(pnmhdr->code==NM_RCLICK) + { + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_PROFILE)); + hMenu=::GetSubMenu(hMenu,0); + ::SetMenuDefaultItem(hMenu,IsWindowVisible()?ID_HIDE:ID_SHOW,FALSE); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + else + if(pnmhdr->code==NM_DBLCLK) + { + if(++g_Options.m_nCurProfile==Language::nProfiles) + g_Options.m_nCurProfile=0; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_5.8/TransliteratorDlg.h b/legacy/Transliterator_5.8/TransliteratorDlg.h new file mode 100644 index 0000000..d47c2e9 --- /dev/null +++ b/legacy/Transliterator_5.8/TransliteratorDlg.h @@ -0,0 +1,215 @@ +#ifndef __TRANSLITERATORDLG_H__ +#define __TRANSLITERATORDLG_H__ + +#include "translatefilesdlg.h" +#include "translationdlg.h" +#include "optionsdlg.h" +#include "aboutdlg.h" + +class CTransliteratorDlg : public CDialogImpl, + public CUpdateUI, + public CIdleHandler, + public CDialogResize, + public NN::TrayIcon, + public NN::DialogStatusBarMenu, + public NN::DialogIcon, + public NN::DialogLang, + public NN::MessageFilterDlgAccel +{ +public: + enum { IDD=IDR_TRANSLITERATOR } ; + enum { Trns , Rus }; + enum + { + size_delta_left = 5, + size_delta_right = 5, + size_delta_top = 15, + size_delta_bottom = 5 + }; + enum { CP = 1251 }; + enum { hkID = 1000 }; + + // Static + static const LANGID s_langEnglish; + static const LANGID s_langRussian; + static const LANGID s_langTranslit; + + // Text + NN::auto_array m_aText[2]; + + // Members + NN::auto_value m_hAccel; + POINT m_ptMinTrackSize; + NN::auto_value m_bTrayIcon; + NN::auto_value m_bShown; + + CMultiPaneStatusBarCtrl m_wndStatusBar; + CRichEditCtrl m_reTrnsRus[2]; + + enum { nTrnsRus = 30 }; + char m_strTrnsRus[2][nTrnsRus]; + + // Dialogs + CTranslationDlg m_dlgTranslation; + CTranslateFilesDlg m_dlgTranslateFiles; + COptionsDlg m_dlgOptions; + CAboutDlg m_dlgAbout; + + // Virtual Functions + virtual BOOL OnIdle(); + + // Override + void DlgResize_UpdateLayout(int cxWidth, int cyHeight); + + // Not Virtual + void Translate(Translate::Direction dir); + bool Show(); + void CloseDialog(); + void UpdateLayout(); + + BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size); + BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size); + void LoadSettings(); + void SaveSettings(); + + void SetOptions(bool bFirst=false); + void SetOptionsFont(); + + void UpdateCount(); + void UpdateTrayIcon(); + void UpdateTaskBar(); + void UpdateStatusBar(); + void SaveWindowPlacement(); + + void UpdateTrnsRusString(); + + static HWND GetActiveWindowChild(); + void HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)); + static void HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND); + static void HotKeyCopy(char* pText,Translate::Direction dir,int nChar,HWND hWndTransliterator); + void HotKeyShow(bool bShow); + + static Translate::Direction DefineDirection(Translate::Direction dir,LPCSTR strText); + + void UpdateTranslation(); + + void InitControls(); + void InitDialog(); + void InitMessageLoop(); + + // Maps + BEGIN_UPDATE_UI_MAP(CTransliteratorDlg) + UPDATE_ELEMENT(ID_EDIT_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_INSERT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_REMOVE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_ENGLISH,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_RUSSIAN,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_TRANSLIT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_WRAPTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_SCROLLTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOTRANSLITERATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOIGNORE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATEFILES,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_OPTIONS,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_APP_ABOUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE1,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE2,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE3,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE4,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE5,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE6,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE7,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE8,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE9,UPDUI_MENUPOPUP|UPDUI_TEXT) + END_UPDATE_UI_MAP() + + BEGIN_DLGRESIZE_MAP(CTransliteratorDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_STRNSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_SRUSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslieratortDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + MESSAGE_HANDLER(WM_QUERYENDSESSION, OnQueryEndSession) + MESSAGE_HANDLER(WM_APPLY, OnApply) + + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_INSERT, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_REMOVE, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_COPY_TRNSTORUS, OnEditCopy) + COMMAND_ID_HANDLER(ID_EDIT_COPY_RUSTOTRNS, OnEditCopy) + COMMAND_RANGE_HANDLER(ID_PROFILE1,ID_PROFILE9,OnProfile) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_ENGLISH, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_RUSSIAN, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_TRANSLIT, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_WRAPTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_SCROLLTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOTRANSLITERATION, OnViewControlsAutoTransliteration) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOIGNORE, OnViewControlsAutoIgnore) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATION, OnToolsTranslation) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATEFILES, OnToolsTranslateFiles) + COMMAND_ID_HANDLER(ID_TOOLS_OPTIONS, OnToolsOptions) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + + COMMAND_HANDLER(IDC_TRNS, EN_CHANGE, OnEnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChangeTrnsRus) + NOTIFY_HANDLER(IDC_TRNS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_RCLICK, OnClickStatusBar) + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_DBLCLK, OnClickStatusBar) + + CHAIN_MSG_MAP(NN::DialogStatusBarMenu) + CHAIN_MSG_MAP(NN::TrayIcon) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(CUpdateUI) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnQueryEndSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnApply(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCommands(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewLanguage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControls(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoTransliteration(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslation(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslateFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAppAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTrnsRus(int code, NMHDR* pnmhdr, BOOL& bHandled); + + LRESULT OnClickStatusBar(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLITERATORDLG_H__ diff --git a/legacy/Transliterator_5.8/TrnsOptionsPage.h b/legacy/Transliterator_5.8/TrnsOptionsPage.h new file mode 100644 index 0000000..a8e2431 --- /dev/null +++ b/legacy/Transliterator_5.8/TrnsOptionsPage.h @@ -0,0 +1,18 @@ +#ifndef __TRNSOPTIONSPAGE_H__ +#define __TRNSOPTIONSPAGE_H__ + +#include "optionsstruct.h" + +template +class TrnsOptionsPage : public NN::OptionsPageImpl, + public NN::DialogLang +{ +public: + typedef NN::OptionsPageImpl baseClass; + + BEGIN_MSG_MAP(TrnsOptionsPage) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() +}; + +#endif // __TRNSOPTIONSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/Types.h b/legacy/Transliterator_5.8/Types.h new file mode 100644 index 0000000..a7bfc37 --- /dev/null +++ b/legacy/Transliterator_5.8/Types.h @@ -0,0 +1,22 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +// Translate +#define LANG_COUNT 6 +#define LANGMAP_COUNT 150 +typedef NN::StaticArray LangString; +typedef LangString::Traits LangStringTraits; +typedef NN::StaticArray LangStringW; +typedef LangStringW::Traits LangStringTraitsW; +typedef NN::Tuple LangType; +typedef NN::Tuple LangTypeW; +typedef NN::StaticArrayMap LangMap; + +// Ignore +#define IGNORE_COUNT 30 +#define IGNOREMAP_COUNT 50 +typedef NN::StaticArray IgnoreString; +typedef NN::Tuple IgnoreType; +typedef NN::StaticArrayMap IgnoreMap; + +#endif // __TYPES_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/WindowState.h b/legacy/Transliterator_5.8/WindowState.h new file mode 100644 index 0000000..bc09734 --- /dev/null +++ b/legacy/Transliterator_5.8/WindowState.h @@ -0,0 +1,15 @@ +#ifndef __WINDOWSTATE_H__ +#define __WINDOWSTATE_H__ + +struct WindowState +{ + int nCmdShow; + void Reset() + { nCmdShow=SW_SHOWNORMAL; } + const bool IsDefault() const + { return nCmdShow==SW_SHOWNORMAL; } + const bool operator==(const WindowState& state) const + { return nCmdShow==state.nCmdShow; } +}; + +#endif // __WINDOWSTATE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_5.8/res/Transliterator.ico b/legacy/Transliterator_5.8/res/Transliterator.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Transliterator_5.8/res/Transliterator.ico differ diff --git a/legacy/Transliterator_5.8/stdafx.cpp b/legacy/Transliterator_5.8/stdafx.cpp new file mode 100644 index 0000000..1577c4e --- /dev/null +++ b/legacy/Transliterator_5.8/stdafx.cpp @@ -0,0 +1 @@ +#include "stdafx.h" \ No newline at end of file diff --git a/legacy/Transliterator_5.8/stdafx.h b/legacy/Transliterator_5.8/stdafx.h new file mode 100644 index 0000000..a19d3cb --- /dev/null +++ b/legacy/Transliterator_5.8/stdafx.h @@ -0,0 +1,86 @@ +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +#pragma once + +// Definitions +#define WINVER 0x0500 +#define _WIN32_IE 0x0500 +#define _RICHEDIT_VER 0x0300 +#define _ATL_NO_COM +#define _ATL_NO_OLD_NAMES +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS + +//#define _ATL_ALL_WARNINGS +#define NN_WINDOWS + +#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning) + +// Language +#include +#define NN_LANG_STR +#define NN_LANG_R +#define NN_LANG_ID g_LangID +extern LANGID g_LangID; +#include + +// ATL / WTL +#include +#include +extern CAppModule _Module; + +#include +#include +#include +#include +#include +#include +#include + +// NN +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Program +#include "msg.h" +#include "translate.h" +#include "change.h" +#include "splitstr.h" +#include "types.h" +#include "traits.h" +#include "langprofile.h" +#include "langstruct.h" +#include "ignore.h" + +#include "error.h" +#include "language.h" +#include "options.h" +#include "global.h" +#include "controls.h" + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) +#endif // _DEBUG + +#endif // __STDAFX_H__ diff --git a/legacy/Transliterator_6.0/AboutDlg.cpp b/legacy/Transliterator_6.0/AboutDlg.cpp new file mode 100644 index 0000000..37cdab0 --- /dev/null +++ b/legacy/Transliterator_6.0/AboutDlg.cpp @@ -0,0 +1,27 @@ +#include "stdafx.h" + +#include "resource.h" + +#include "aboutdlg.h" + +LRESULT AboutDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + + m_hlEmail.SubclassWindow(GetDlgItem(IDC_BTNEMAIL)); + m_hlSite.SubclassWindow(GetDlgItem(IDC_BTNSITE)); + + return 0; +} + +LRESULT AboutDlg::OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::ShellExecute(m_hWnd, _T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; +} + +LRESULT AboutDlg::OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ::ShellExecute(m_hWnd, _T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/AboutDlg.h b/legacy/Transliterator_6.0/AboutDlg.h new file mode 100644 index 0000000..3b79cdd --- /dev/null +++ b/legacy/Transliterator_6.0/AboutDlg.h @@ -0,0 +1,31 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +#pragma once + +class AboutDlg : public ATL::CDialogImpl, + public NN::DialogLang, + public NN::ToolWindow, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_ABOUT }; + + WTL::CHyperLink m_hlEmail; + WTL::CHyperLink m_hlSite; + + BEGIN_MSG_MAP(AboutDlg) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDC_BTNEMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_BTNSITE, OnSite) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnEmail(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Compare.h b/legacy/Transliterator_6.0/Compare.h new file mode 100644 index 0000000..20cc179 --- /dev/null +++ b/legacy/Transliterator_6.0/Compare.h @@ -0,0 +1,54 @@ +#ifndef __COMPARE_H__ +#define __COMPARE_H__ + +#pragma once + +#include "types.h" + +template +inline bool CompareLangType(const LangType& l, const LangType& r) +{ + return l.get() == r.get() && + l.get() == r.get(); +} + +inline bool CompareIgnore(const IgnoreTextType& l, const IgnoreTextType& r) +{ return l.get() == r.get(); } + +template +struct CompareSearchTraits; + +template<> +struct CompareSearchTraits +{ typedef LangString::traits_type traits_type; }; + +template<> +struct CompareSearchTraits +{ typedef IgnoreTextString::traits_type traits_type; }; + +template +class CompareSearch +{ + const TType& m_r; + size_t m_len; +public: + CompareSearch(const TType& r,size_t len) : + m_r(r) , m_len(len) {} + + bool operator()(const TType& r) const + { return cmp(r); } +private: + bool cmp(const TType& r) const + { + return CompareSearchTraits::traits_type::compare( + m_r.get().c_str(), + r.get().c_str(), + m_len)?false:true; + } +}; + +typedef CompareSearch CompareSearchLangTop; +typedef CompareSearch CompareSearchLangBottom; +typedef CompareSearch CompareSearchIgnoreText; + +#endif // __COMPARE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Controls.cpp b/legacy/Transliterator_6.0/Controls.cpp new file mode 100644 index 0000000..816f456 --- /dev/null +++ b/legacy/Transliterator_6.0/Controls.cpp @@ -0,0 +1,36 @@ +#include "stdafx.h" + +#include "language.h" +#include "storage.h" +#include "makedirection.h" + +#include "controls.h" + +void InitCmbProfile(HWND hWnd, + int nCurSel/* = 0*/, + const Storage& storage/* = g_Storage*/) +{ + WTL::CComboBox cmb(hWnd); + cmb.ResetContent(); + + for(size_t i=0; i +inline BOOL DDX_RE_Ex( + HWND hWnd, + UINT nID, + std::basic_string& strText, + BOOL bSave) +{ + BOOL bRet = TRUE; + HWND hWndCtrl = ::GetDlgItem(hWnd,nID); + + if(bSave) + { + size_t nLen = (size_t)::GetWindowTextLength(hWndCtrl)+1; + + typedef typename std::basic_string::value_type value_type; + value_type* pstr; + pstr = (value_type*)malloc(nLen*sizeof(value_type)); + if(!pstr) + { + strText.clear(); + return FALSE; + } + + GETTEXTEX gte = + { + nLen*sizeof(value_type), + GT_DEFAULT, + 1200 + }; + + ::SendMessage(hWndCtrl,EM_GETTEXTEX,(WPARAM)>e,(LPARAM)pstr); + + try + { + strText = pstr; + } + catch(...) + { + bRet = FALSE; + } + free(pstr); + } + else + { + SETTEXTEX ste = + { + ST_DEFAULT, + 1200 + }; + + ::SendMessage(hWndCtrl,EM_SETTEXTEX,(WPARAM)&ste,(LPARAM)strText.c_str()); + } + return bRet; +} + +#endif // __DDX_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Error.h b/legacy/Transliterator_6.0/Error.h new file mode 100644 index 0000000..b5162ee --- /dev/null +++ b/legacy/Transliterator_6.0/Error.h @@ -0,0 +1,24 @@ +#ifndef __ERROR_H____ +#define __ERROR_H____ + +#pragma once + +#ifndef IDS_ERROR +#define IDS_ERROR 62000 +#define IDS_ERROR_DEFINED +#endif // !IDS_ERROR + +inline int ShowError(HWND hWnd, ATL::_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, ATL::_U_STRINGorID Caption = IDS_ERROR) +{ return WTL::AtlMessageBox(hWnd,Text,Caption,uType); } + +inline int ShowError(ATL::_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, ATL::_U_STRINGorID Caption = IDS_ERROR) +{ return ShowError(NULL,Text,uType,Caption); } + +#ifdef IDS_ERROR_DEFINED +#undef IDS_ERROR +#undef IDS_ERROR_DEFINED +#endif // IDS_ERROR_DEFINED + +#endif // __ERROR_H____ diff --git a/legacy/Transliterator_6.0/Functor.h b/legacy/Transliterator_6.0/Functor.h new file mode 100644 index 0000000..20a51d1 --- /dev/null +++ b/legacy/Transliterator_6.0/Functor.h @@ -0,0 +1,11 @@ +#ifndef __FUNCTOR_H__ +#define __FUNCTOR_H__ + +template +struct TupleShorter +{ + bool operator()(const T& l, const T& r) const + { return l.get().size() < r.get().size(); } +}; + +#endif // __FUNCTOR_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/GeneralPage.cpp b/legacy/Transliterator_6.0/GeneralPage.cpp new file mode 100644 index 0000000..a9b26b9 --- /dev/null +++ b/legacy/Transliterator_6.0/GeneralPage.cpp @@ -0,0 +1,28 @@ +#include "stdafx.h" + +#include "resource.h" +#include "controls.h" + +#include "generalpage.h" + +void GeneralPage::DialogLang_LanguageChanged() +{ + for(size_t i=0; i<2; ++i) + SetDlgItemText(IDC_EDTLANGTOP+i, + GetOptions()->m_Storage.m_astrLang[i].c_str()); +} + +void GeneralPage::UpdateText() +{ + const BOOL bEnable = IsDlgButtonChecked(IDC_CHKSAVETEXTONEXIT); + ::EnableWindow(GetDlgItem(IDC_EDTLANGTOP),bEnable); + ::EnableWindow(GetDlgItem(IDC_EDTLANGBOTTOM),bEnable); + ::EnableWindow(GetDlgItem(IDC_RADTEXTREGISTRY),bEnable); + ::EnableWindow(GetDlgItem(IDC_RADTEXTFILE),bEnable); +} + +LRESULT GeneralPage::OnSaveTextOnExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + UpdateText(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/GeneralPage.h b/legacy/Transliterator_6.0/GeneralPage.h new file mode 100644 index 0000000..66dd717 --- /dev/null +++ b/legacy/Transliterator_6.0/GeneralPage.h @@ -0,0 +1,60 @@ +#ifndef __GENERALPAGE_H__ +#define __GENERALPAGE_H__ + +#pragma once + +#include "optionsstruct.h" +#include "profilechanged.h" + +class GeneralPage : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public ProfileChanged +{ +public: + enum { IDD = IDD_PAGEGENERAL }; + + NN::auto_value m_nCurSel; + + void DialogLang_LanguageChanged(); + void UpdateText(); + + BEGIN_DDX_MAP(GeneralPage) + DDX_RADIO(IDC_RADLOADNO,(int&)GetOptions()->m_Options.m_nLoadOnStartUp) + DDX_CHECK(IDC_CHKSAVETEXTONEXIT,GetOptions()->m_Options.m_bSaveText) + DDX_RADIO(IDC_RADTEXTREGISTRY, + (int&)GetOptions()->m_Storage.m_stg[Storage::stgText]) + DDX_RADIO(IDC_RADPROFILESREGISTRY, + (int&)GetOptions()->m_Storage.m_stg[Storage::stgProfiles]) + + DDX_TEXT_STRING(IDC_EDTLANGTOP,GetOptions()->m_Storage.m_astrLang[0]); + DDX_TEXT_STRING(IDC_EDTLANGBOTTOM,GetOptions()->m_Storage.m_astrLang[1]); + + // Language + int nLangID = g_LangDefault; + for(size_t i=0; im_LangID == g_aLanguage[i]) + { + nLangID = i; + break; + } + DDX_RADIO(IDC_RADENGLISH,nLangID) + if(bSaveAndValidate) + { + GetOptions()->m_LangID = g_aLanguage[nLangID]; + if(GetOptions()->m_LangID != g_LangID) + g_UpdateOptions.m_bLanguage = true; + } + else + UpdateText(); + END_DDX_MAP() + + BEGIN_MSG_MAP(GeneralPage) + NN_MSGFILTER_MESSAGE_ADD() + COMMAND_ID_HANDLER(IDC_CHKSAVETEXTONEXIT,OnSaveTextOnExit) + END_MSG_MAP() + + LRESULT OnSaveTextOnExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __GENERALPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Global.cpp b/legacy/Transliterator_6.0/Global.cpp new file mode 100644 index 0000000..1cb7a84 --- /dev/null +++ b/legacy/Transliterator_6.0/Global.cpp @@ -0,0 +1,29 @@ +#include "stdafx.h" + +#include "global.h" + +// Module +WTL::CAppModule _Module; +// Language ID +LANGID g_LangID; +const LANGID g_LangDefault = g_aLanguage[0]; +const LANGID g_aLanguage[] = +{ + MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US), + MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT), + MAKELANGID(LANG_BELARUSIAN,SUBLANG_DEFAULT), + MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT+4) +}; +const size_t g_nLanguage = NN::array_length(g_aLanguage); +// Language +Language g_Language; +// CP +const UINT g_CP = 1251; +// Storage +Storage g_Storage; +Storage g_OldStorage; +// Options +Options g_Options; +UpdateOptions g_UpdateOptions; +// Text +TextType g_Text[2]; diff --git a/legacy/Transliterator_6.0/Global.h b/legacy/Transliterator_6.0/Global.h new file mode 100644 index 0000000..7ffbf97 --- /dev/null +++ b/legacy/Transliterator_6.0/Global.h @@ -0,0 +1,32 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +#pragma once + +#include "types.h" +#include "language.h" +#include "options.h" +#include "storage.h" +#include "updateoptions.h" + +// Module +extern WTL::CAppModule _Module; +// Language ID +extern LANGID g_LangID; +extern const LANGID g_LangDefault; +extern const LANGID g_aLanguage[]; +extern const size_t g_nLanguage; +// Language +extern Language g_Language; +// CP +extern const UINT g_CP; +// Storage +extern Storage g_Storage; +extern Storage g_OldStorage; +// Options +extern Options g_Options; +extern UpdateOptions g_UpdateOptions; +// Text +extern TextType g_Text[2]; + +#endif // __GLOBAL_H__ diff --git a/legacy/Transliterator_6.0/HotKeysPage.cpp b/legacy/Transliterator_6.0/HotKeysPage.cpp new file mode 100644 index 0000000..7a34acb --- /dev/null +++ b/legacy/Transliterator_6.0/HotKeysPage.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +#include "resource.h" +#include "global.h" +#include "makedirection.h" + +#include "hotkeyspage.h" + +void HotKeysPage::DialogLang_LanguageChanged() +{ + ProfileChanged(); +} + +void HotKeysPage::ProfileChanged() +{ + LangStringT strDir[2]; + MakeDirection::MakeT(strDir); + + WTL::CComboBox cmbAction = GetDlgItem(IDC_CMBACTION); + int iSel = cmbAction.GetCurSel(); + for(size_t i=0; i<2; ++i) + cmbAction.DeleteString(0); + for(size_t i=0; i<2; ++i) + { + cmbAction.InsertString(i,strDir[i].c_str()); + SetDlgItemText(IDC_RADLANGTOPTOLANGBOTTOM+i,strDir[i].c_str()); + } + cmbAction.SetCurSel(iSel); +} + +void HotKeysPage::SaveHotKey() +{ + if(m_nCurSel != CB_ERR) + { + WTL::CHotKeyCtrl hotkey = GetDlgItem(IDC_HKACTION); + NN::HotKey hk; + hotkey.GetHotKey(hk.vk,hk.fsModifiers); + hk.ConvertToWnd(); + if(GetOptions()->m_Options.m_HotKey[m_nCurSel] != hk) + { + g_UpdateOptions.m_bHotKey = true; + GetOptions()->m_Options.m_HotKey[m_nCurSel] = hk; + } + } +} + +void HotKeysPage::LoadHotKey() +{ + WTL::CHotKeyCtrl hotkey = GetDlgItem(IDC_HKACTION); + m_nCurSel = SendDlgItemMessage(IDC_CMBACTION,CB_GETCURSEL,0,0); + NN::HotKey& hk = GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hk.ConvertToHotKey(); + hotkey.SetHotKey(hk.vk,hk.fsModifiers); +} + +LRESULT HotKeysPage::OnCmbSelChangeAction(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + SaveHotKey(); + LoadHotKey(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/HotKeysPage.h b/legacy/Transliterator_6.0/HotKeysPage.h new file mode 100644 index 0000000..1db55e2 --- /dev/null +++ b/legacy/Transliterator_6.0/HotKeysPage.h @@ -0,0 +1,39 @@ +#ifndef __HOTKEYSPAGE_H__ +#define __HOTKEYSPAGE_H__ + +#pragma once + +#include "optionsstruct.h" +#include "profilechanged.h" + +class HotKeysPage : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public ProfileChanged +{ +public: + enum { IDD = IDD_PAGEHOTKEYS }; + + NN::auto_value m_nCurSel; + + void DialogLang_LanguageChanged(); + void ProfileChanged(); + void SaveHotKey(); + void LoadHotKey(); + + BEGIN_DDX_MAP(HotKeysPage) + DDX_RADIO(IDC_RADLANGTOPTOLANGBOTTOM,(int&)GetOptions()->m_Options.m_nAutoTransliteration) + if(bSaveAndValidate) + SaveHotKey(); + END_DDX_MAP() + + BEGIN_MSG_MAP(HotKeysPage) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + COMMAND_HANDLER(IDC_CMBACTION,CBN_SELCHANGE,OnCmbSelChangeAction) + END_MSG_MAP() + + LRESULT OnCmbSelChangeAction(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __HOTKEYSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LangProfile.h b/legacy/Transliterator_6.0/LangProfile.h new file mode 100644 index 0000000..b798db4 --- /dev/null +++ b/legacy/Transliterator_6.0/LangProfile.h @@ -0,0 +1,70 @@ +#ifndef __LANGPROFILE_H___ +#define __LANGPROFILE_H___ + +#pragma once + +#include "types.h" + +struct LangProfile +{ + // Array + LangArray m_aTranslation; + // Language + enum { LangTop, LangBottom }; + LangStringT m_astrLang[2]; + // Ignore + enum + { + BeginTop, + EndTop, + BeginBottom, + EndBottom, + nIgnore + }; + LangString m_astrIgnore[nIgnore]; + // IgnoreText + IgnoreTextArray m_aIgnoreText; + + // Default + static const wchar_t* DefaultIgnore() { return L"**"; } + + // Reset + void ResetTranslation() { m_aTranslation.clear(); } + void ResetLang() + { + m_astrLang[LangTop] = "LangTop"; + m_astrLang[LangBottom] = "LangBottom"; + } + void ResetIgnore() + { + for(size_t i=0; i +typename T::size_type Language::MaxLengthArray(const T& c) +{ + if(!c.size()) + return (typename T::size_type)0; + else + return std::max_element + ( + c.begin(), + c.end(), + TupleShorter() + )->get().size(); +} + +size_t Language::MaxLengthTranslate(const LangProfile* pProfile, bool bfirst) +{ + return bfirst ? + MaxLengthArray<0,LangArray>(pProfile->m_aTranslation) : + MaxLengthArray<1,LangArray>(pProfile->m_aTranslation); +} + +size_t Language::MaxLengthIgnore(const LangProfile* pProfile) +{ + return std::max_element( + pProfile->m_astrIgnore, + pProfile->m_astrIgnore+LangProfile::nIgnore, + NN::shorter())->size(); +} + +size_t Language::MaxLengthIgnoreText(const LangProfile* pProfile) +{ + return MaxLengthArray<0>(pProfile->m_aIgnoreText); +} + +size_t Language::CountOutTranslate(size_t nCharIn, + Translate::Direction dir,BOOL bIgnore,const LangProfile* pProfile) +{ + if(!pProfile) + return 0; + return nCharIn* + (1+ + std::max( + MaxLengthTranslate(pProfile,dir == Translate::dirBottomtoTop), + (bIgnore?MaxLengthIgnore(pProfile):1) + ) + )+1; +} + +void Language::Translate(const wchar_t* strIn,wchar_t* strOut, + Translate::Direction dir,const LangProfile* pProfile) +{ + if(!InitTI(strIn,strOut,&pProfile)) + return; + + const wchar_t* pIn = strIn; + wchar_t* pOut = strOut; + + // Max length + const size_t maxlenT = MaxLengthTranslate(pProfile, IsFirst(dir)); + const size_t maxlenI = MaxLengthIgnoreText(pProfile); + + while(*pIn) + { + if(g_Options.m_bIgnore) + { + if(Translate_Ignore(&pIn,&pOut,dir,pProfile)) + continue; + } + if(g_Options.m_bIgnoreText) + { + if(Translate_IgnoreText(&pIn,&pOut,dir,pProfile,maxlenI)) + continue; + } + if(g_Options.m_bTranslate) + { + if(Translate_Translate(&pIn,&pOut,dir,pProfile,maxlenT)) + continue; + } + if(*pIn) + *pOut++= *pIn++; + } + // End + *pOut = 0; +} + +bool Language::Translate_Translate(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile,size_t maxlenT) +{ + // Check + if(!**ppIn) + return true; + + // Init + const bool bfirst = dir == Translate::dirToptoBottom; + + // Translate + for(size_t len = maxlenT;len;len--) + { + for(LangArray::const_iterator it = pProfile->m_aTranslation.begin(); + it != pProfile->m_aTranslation.end(); ++it) + { + // Translate::LangTranslate + const Translate::Translation& TrnsItem = it->get(); + if(dir == Translate::dirToptoBottom) + { + if(!(TrnsItem & Translate::trnsToptoBottom)) + continue; + } + else + { + if(!(TrnsItem & Translate::trnsBottomtoTop)) + continue; + } + + const LangString& rStringIn = + bfirst ? + it->get() : + it->get(); + + const LangString& rStringOut = + bfirst ? + it->get() : + it->get(); + + if(rStringIn.length() == len && + !LangStringTraits::compare(*ppIn,rStringIn.c_str(),len)) + { + NN::wcscpy_change(ppOut,rStringOut.c_str()); + (*ppIn)+= len; + + return true; + } + } + } + return false; +} + +bool Language::Translate_Ignore(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile) +{ + // Check + if(!**ppIn) + return true; + + // Init + const bool bfirst = dir == Translate::dirToptoBottom; + + const LangString& strBeginIn = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginTop:LangProfile::BeginBottom]; + const LangString& strEndIn = + pProfile->m_astrIgnore[bfirst?LangProfile::EndTop:LangProfile::EndBottom]; + const LangString& strBeginOut = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginBottom:LangProfile::BeginTop]; + const LangString& strEndOut = + pProfile->m_astrIgnore[bfirst?LangProfile::EndBottom:LangProfile::EndTop]; + + // Ignore + if(!LangStringTraits::compare(*ppIn,strBeginIn.c_str(),strBeginIn.length())) + { + // Continue + (*ppIn)+= strBeginIn.length(); + + // Copy Ignore + if(g_Options.m_bCopyIgnore) + NN::wcscpy_change(ppOut,strBeginOut.c_str()); + + // Copy + while(**ppIn&& + LangStringTraits::compare(*ppIn,strEndIn.c_str(),strEndIn.length())) + *(*ppOut)++= *(*ppIn)++; + + if(!**ppIn) + return true; + + (*ppIn)+= strEndIn.length(); + + // Copy Ignore + if(g_Options.m_bCopyIgnore) + NN::wcscpy_change(ppOut,strEndOut.c_str()); + + if(!**ppIn) + return true; + } + return false; +} + +bool Language::Translate_IgnoreText(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile,size_t maxlenI) +{ + // Check + if(!**ppIn) + return true; + + // Ignore text + for(size_t lenI = maxlenI;lenI;lenI--) + { + for(IgnoreTextArray::const_iterator it = pProfile->m_aIgnoreText.begin(); + it != pProfile->m_aIgnoreText.end(); ++it) + { + // Check translation direction + const Translate::Translation& TrnsItem = it->get(); + if(dir == Translate::dirToptoBottom) + { + if(!(TrnsItem&Translate::trnsToptoBottom)) + continue; + } + else + { + if(!(TrnsItem&Translate::trnsBottomtoTop)) + continue; + } + + const IgnoreTextString& ignorestr = it->get(); + if(ignorestr.length() == lenI&& + !LangStringTraits::compare(*ppIn,ignorestr.c_str(),lenI)) + { + NN::wcscpy_change(ppOut,ignorestr.c_str()); + (*ppIn)+= ignorestr.length(); + return true; + } + } + } + return false; +} + +void Language::Ignore(const wchar_t* strIn,wchar_t* strOut, + bool bInsert,bool bfirst,const LangProfile* pProfile) +{ + if(!InitTI(strIn,strOut,&pProfile)) + { + if(bInsert) + wcscpy(strOut,pProfile->m_astrIgnore[ + bfirst?LangProfile::BeginBottom:LangProfile::BeginTop].c_str()); + return; + } + + const wchar_t* pIn = strIn; + wchar_t* pOut = strOut; + + if(bInsert) + Ignore_Insert(pIn,pOut,bfirst,pProfile); + else + Ignore_Remove(pIn,pOut,bfirst,pProfile); +} + +void Language::Ignore_Insert(const wchar_t* pIn,wchar_t* pOut, + bool bfirst,const LangProfile* pProfile) +{ + // Init + const LangString& strBeginIn = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginTop:LangProfile::BeginBottom]; + const LangString& strEndIn = + pProfile->m_astrIgnore[bfirst?LangProfile::EndTop:LangProfile::EndBottom]; + const LangString& strBeginOut = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginBottom:LangProfile::BeginTop]; + const LangString& strEndOut = + pProfile->m_astrIgnore[bfirst?LangProfile::EndBottom:LangProfile::EndTop]; + + // List Details + int Language_Ignore_Insert; // Not Used + + typedef std::vector ListWChar; + ListWChar aCheck[] = + { + ListWChar(pProfile->m_aTranslation.size()), + ListWChar(pProfile->m_aTranslation.size()) + }; + + { + ListWChar::iterator aitCheck[] = + { + aCheck[0].begin(), + aCheck[1].begin() + }; + + for(LangArray::const_iterator itProfile = pProfile->m_aTranslation.begin(); + itProfile != pProfile->m_aTranslation.end(); + ++itProfile, ++aitCheck[0], ++aitCheck[1]) + { + *aitCheck[LangPos::Top] = itProfile->get()[0]; + *aitCheck[LangPos::Bottom] = itProfile->get()[0]; + } + } + const ListWChar& lCheck = aCheck[!bfirst]; + + bool bDoInsert = false; + while(*pIn) + { + // Ignore + if(!LangStringTraits::compare( + pIn,strBeginIn.c_str(),strBeginIn.length())) + { + bDoInsert = true; + + pIn+= strBeginIn.length(); + + NN::wcscpy_change(&pOut,strBeginOut.c_str()); + + while(*pIn&& + LangStringTraits::compare( + pIn,strEndIn.c_str(),strEndIn.length())) + *pOut++= *pIn++; + + if(!*pIn) + break; + + pIn+= strEndIn.length(); + + if(!*pIn) + break; + + NN::wcscpy_change(&pOut,strEndOut.c_str()); + + bDoInsert = false; + } + // Text + if(std::find(lCheck.begin(),lCheck.end(),*pIn) != lCheck.end()) + { + bDoInsert = true; + + NN::wcscpy_change(&pOut,strBeginOut.c_str()); + + while(*pIn&& + ( + std::find(lCheck.begin(),lCheck.end(),*pIn) != lCheck.end()) || + ( + std::find(aCheck[0].begin(),aCheck[0].end(),*pIn) == aCheck[0].end() && + std::find(aCheck[1].begin(),aCheck[1].end(),*pIn) == aCheck[1].end() + ) + ) + *pOut++= *pIn++; + + if(!*pIn) + break; + + NN::wcscpy_change(&pOut,strEndOut.c_str()); + + bDoInsert = false; + } + *pOut++= *pIn++; + } + if(bDoInsert) + NN::wcscpy_change(&pOut,strEndOut.c_str()); + *pOut = 0; +} + +void Language::Ignore_Remove(const wchar_t* pIn,wchar_t* pOut, + bool bfirst,const LangProfile* pProfile) +{ + // Init + const LangString& strBeginIn = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginTop:LangProfile::BeginBottom]; + const LangString& strEndIn = + pProfile->m_astrIgnore[bfirst?LangProfile::EndTop:LangProfile::EndBottom]; + + while(*pIn) + { + // Ignore + if(!LangStringTraits::compare(pIn,strBeginIn.c_str(),strBeginIn.length())) + { + pIn+= strBeginIn.length(); + + while(*pIn&& + LangStringTraits::compare( + pIn,strEndIn.c_str(),strEndIn.length())) + *pOut++= *pIn++; + + if(!*pIn) + break; + + pIn+= strEndIn.length(); + + continue; + } + *pOut++= *pIn++; + } + *pOut = 0; +} + +void Language::SetIgnore(const wchar_t* strIn,wchar_t* strOut, + Translate::Direction dir,bool bInsert,const LangProfile* pProfile) +{ + if(!InitTI(strIn,strOut,&pProfile)&&*strIn&&bInsert) + return; + + const wchar_t* pIn = strIn; + wchar_t* pOut = strOut; + + if(bInsert) + SetIgnore_Insert(pIn,pOut,dir,pProfile); + else + SetIgnore_Remove(pIn,pOut,dir,pProfile); +} + +void Language::SetIgnore_Insert(const wchar_t* pIn,wchar_t* pOut, + Translate::Direction dir,const LangProfile* pProfile) +{ + // Init + const bool bfirst = dir == Translate::dirToptoBottom; + + const LangString& strBeginIn = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginTop:LangProfile::BeginBottom]; + const LangString& strEndIn = + pProfile->m_astrIgnore[bfirst?LangProfile::EndTop:LangProfile::EndBottom]; + const LangString& strBeginOut = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginBottom:LangProfile::BeginTop]; + const LangString& strEndOut = + pProfile->m_astrIgnore[bfirst?LangProfile::EndBottom:LangProfile::EndTop]; + + wcscpy(pOut,pIn); + bool bBegin = true; + + pIn--; + while(*++pIn) + { + // Begin + if(!LangStringTraits::compare( + pIn,strBeginIn.c_str(),strBeginIn.length())&&bBegin) + { + pIn+= strBeginIn.length(); + bBegin = !bBegin; + } + + // End + if(!LangStringTraits::compare( + pIn,strEndIn.c_str(),strEndIn.length())&&!bBegin) + { + pIn+= strEndIn.length(); + bBegin = !bBegin; + } + } + + wcscat(pOut,bBegin?strBeginOut.c_str():strEndOut.c_str()); +} + +void Language::SetIgnore_Remove(const wchar_t* pIn,wchar_t* pOut, + Translate::Direction dir,const LangProfile* pProfile) +{ + // Init + const bool bfirst = dir == Translate::dirToptoBottom; + + const LangString& strBeginIn = + pProfile->m_astrIgnore[bfirst?LangProfile::BeginTop:LangProfile::BeginBottom]; + const LangString& strEndIn = + pProfile->m_astrIgnore[bfirst?LangProfile::EndTop:LangProfile::EndBottom]; + + const wchar_t* pIn_o = pIn; + *pOut = 0; + + bool bBegin = false; + bool bT = false; + const size_t nIn = wcslen(pIn); + + pIn = pIn+nIn; + + while(*--pIn) + { + if(!LangStringTraits::compare( + pIn,strEndIn.c_str(),strEndIn.length())) + { + bT = true; + bBegin = false; + } + else + if(!LangStringTraits::compare( + pIn,strBeginIn.c_str(),strBeginIn.length())) + { + bT = true; + bBegin = true; + } + + if(bT) + { + wmemcpy(pOut,pIn_o,pIn-pIn_o); + pOut[pIn-pIn_o] = 0; + pIn+= bBegin?strBeginIn.length():strEndIn.length(); + wcscat(pOut,pIn); + break; + } + } + if(!bT) + wcscpy(pOut,pIn_o); +} + +bool Language::InitTI(const wchar_t* strIn,wchar_t* strOut,const LangProfile** ppProfile) +{ + if(!*ppProfile) + *ppProfile = GetCurProfile(); + if(!*strIn||!strIn) + { + *strOut = 0; + return false; + } + if((*ppProfile)->m_aTranslation.empty()) + { + wcscpy(strOut,strIn); + return false; + } + return true; +} + +const Language& Language::operator = (const Language& r) +{ + for(unsigned i = 0;i + static typename T::size_type MaxLengthArray(const T& c); + + static size_t MaxLengthTranslate(const LangProfile* pProfile,bool bfirst); + static size_t MaxLengthIgnore(const LangProfile* pProfile); + static size_t MaxLengthIgnoreText(const LangProfile* pProfile); + + bool IsFirst(Translate::Direction dir) + { return dir == Translate::dirToptoBottom; } + + // Output Length + static size_t Language::CountOutTranslate(size_t nCharIn, + Translate::Direction dir,BOOL bIgnore,const LangProfile* pProfile); + + // Profiles + LangProfile* GetProfile(unsigned nProfile) + { return &m_aProfile[nProfile]; } + const LangProfile* GetProfile(unsigned nProfile) const + { return &m_aProfile[nProfile]; } + LangProfile* GetCurProfile() + { return m_pCurProfile; } + const LangProfile* GetCurProfile() const + { return m_pCurProfile; } + unsigned GetCurProfileNum() + { return m_pCurProfile-&m_aProfile[0]; } + void SetCurProfile(LangProfile* pProfile) + { m_pCurProfile = pProfile; } + void SetCurProfile(unsigned nProfile) + { m_pCurProfile = &m_aProfile[nProfile]; } + + // Reset + + // Standard + static void Reset1(LangProfile& rProfile); + static void ResetTranslation1(LangProfile& rProfile); + static void ResetIgnore1(LangProfile& rProfile); + static void ResetIgnoreText1(LangProfile& rProfile); + static void ResetName1(LangProfile& rProfile); + // Fonetic + static void Reset2(LangProfile& rProfile); + static void ResetTranslation2(LangProfile& rProfile); + static void ResetIgnore2(LangProfile& rProfile); + static void ResetIgnoreText2(LangProfile& rProfile); + static void ResetName2(LangProfile& rProfile); + // GOST + static void Reset3(LangProfile& rProfile); + static void ResetTranslation3(LangProfile& rProfile); + static void ResetIgnore3(LangProfile& rProfile); + static void ResetIgnoreText3(LangProfile& rProfile); + static void ResetName3(LangProfile& rProfile); + // Symbols + static void Reset4(LangProfile& rProfile); + static void ResetTranslation4(LangProfile& rProfile); + static void ResetIgnore4(LangProfile& rProfile); + static void ResetIgnoreText4(LangProfile& rProfile); + static void ResetName4(LangProfile& rProfile); + // QWER + static void Reset5(LangProfile& rProfile); + static void ResetTranslation5(LangProfile& rProfile); + static void ResetIgnore5(LangProfile& rProfile); + static void ResetIgnoreText5(LangProfile& rProfile); + static void ResetName5(LangProfile& rProfile); + // DOS-Win + static void Reset6(LangProfile& rProfile); + static void ResetTranslation6(LangProfile& rProfile); + static void ResetIgnore6(LangProfile& rProfile); + static void ResetIgnoreText6(LangProfile& rProfile); + static void ResetName6(LangProfile& rProfile); + // KOI8-R-Win + static void Reset7(LangProfile& rProfile); + static void ResetTranslation7(LangProfile& rProfile); + static void ResetIgnore7(LangProfile& rProfile); + static void ResetIgnoreText7(LangProfile& rProfile); + static void ResetName7(LangProfile& rProfile); + // HebRus + static void Reset8(LangProfile& rProfile); + static void ResetTranslation8(LangProfile& rProfile); + static void ResetIgnore8(LangProfile& rProfile); + static void ResetIgnoreText8(LangProfile& rProfile); + static void ResetName8(LangProfile& rProfile); + // User + static void Reset9(LangProfile& rProfile); + static void ResetTranslation9(LangProfile& rProfile); + static void ResetIgnore9(LangProfile& rProfile); + static void ResetIgnoreText9(LangProfile& rProfile); + static void ResetName9(LangProfile& rProfile); + // User2 + static void Reset10(LangProfile& rProfile); + static void ResetTranslation10(LangProfile& rProfile); + static void ResetIgnore10(LangProfile& rProfile); + static void ResetIgnoreText10(LangProfile& rProfile); + static void ResetName10(LangProfile& rProfile); + + static void ResetProfile(unsigned nProfile,LangProfile& rProfile); + static void ResetTranslation(unsigned nProfile,LangProfile& rProfile); + static void ResetIgnore(unsigned nProfile,LangProfile& rProfile); + static void ResetIgnoreText(unsigned nProfile,LangProfile& rProfile); + static void ResetName(unsigned nProfile,LangProfile& rProfile); + + void Reset(); + + // Translate + void Translate(const wchar_t* strIn,wchar_t* strOut, + Translate::Direction dir,const LangProfile* pProfile); +private: + bool Translate_Translate(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile,size_t maxlenT); + bool Translate_Ignore(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile); + bool Translate_IgnoreText(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,const LangProfile* pProfile,size_t maxlenI); +public: + + // Ignore + void Ignore(const wchar_t* strIn,wchar_t* strOut, + bool bInsert,bool bfirst,const LangProfile* pProfile); +private: + void Ignore_Insert(const wchar_t* pIn,wchar_t* pOut, + bool bfirst,const LangProfile* pProfile); + void Ignore_Remove(const wchar_t* pIn,wchar_t* pOut, + bool bfirst,const LangProfile* pProfile); +public: + + // SetIgnore + void SetIgnore(const wchar_t* strIn,wchar_t* strOut, + Translate::Direction dir,bool bInsert,const LangProfile* pProfile); +private: + void SetIgnore_Insert(const wchar_t* pIn,wchar_t* pOut, + Translate::Direction dir,const LangProfile* pProfile); + void SetIgnore_Remove(const wchar_t* pIn,wchar_t* pOut, + Translate::Direction dir,const LangProfile* pProfile); +private: + bool InitTI(const wchar_t* strIn,wchar_t* strOut,const LangProfile** ppProfile); + +public: + // operator + const Language& operator = (const Language& r); +}; + +#endif // __LANGUAGE_H__ diff --git a/legacy/Transliterator_6.0/LanguageReset.cpp b/legacy/Transliterator_6.0/LanguageReset.cpp new file mode 100644 index 0000000..d7631c7 --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset.cpp @@ -0,0 +1,109 @@ +#include "stdafx.h" + +#include "language.h" + +void Language::ResetProfile(unsigned nProfile,LangProfile& rProfile) +{ + typedef void (*ResetFunc)(LangProfile&); + + static const ResetFunc aResetFunc[nProfiles] = + { + &Language::Reset1, + &Language::Reset2, + &Language::Reset3, + &Language::Reset4, + &Language::Reset5, + &Language::Reset6, + &Language::Reset7, + &Language::Reset8, + &Language::Reset9, + &Language::Reset10, + }; + (*aResetFunc[nProfile])(rProfile); +} + +void Language::ResetTranslation(unsigned nProfile,LangProfile& rProfile) +{ + typedef void (*ResetTranslationFunc)(LangProfile&); + + static const ResetTranslationFunc aResetTranslationFunc[nProfiles] = + { + &Language::ResetTranslation1, + &Language::ResetTranslation2, + &Language::ResetTranslation3, + &Language::ResetTranslation4, + &Language::ResetTranslation5, + &Language::ResetTranslation6, + &Language::ResetTranslation7, + &Language::ResetTranslation8, + &Language::ResetTranslation9, + &Language::ResetTranslation10, + }; + (*aResetTranslationFunc[nProfile])(rProfile); +} + +void Language::ResetIgnore(unsigned nProfile,LangProfile& rProfile) +{ + typedef void (*ResetIgnoreFunc)(LangProfile&); + + static const ResetIgnoreFunc aResetIgnoreFunc[nProfiles] = + { + &Language::ResetIgnore1, + &Language::ResetIgnore2, + &Language::ResetIgnore3, + &Language::ResetIgnore4, + &Language::ResetIgnore5, + &Language::ResetIgnore6, + &Language::ResetIgnore7, + &Language::ResetIgnore8, + &Language::ResetIgnore9, + &Language::ResetIgnore10, + }; + (*aResetIgnoreFunc[nProfile])(rProfile); +} + +void Language::ResetIgnoreText(unsigned nProfile,LangProfile& rProfile) +{ + typedef void (*ResetIgnoreTextFunc)(LangProfile&); + + static const ResetIgnoreTextFunc aResetIgnoreTextFunc[nProfiles] = + { + &Language::ResetIgnoreText1, + &Language::ResetIgnoreText2, + &Language::ResetIgnoreText3, + &Language::ResetIgnoreText4, + &Language::ResetIgnoreText5, + &Language::ResetIgnoreText6, + &Language::ResetIgnoreText7, + &Language::ResetIgnoreText8, + &Language::ResetIgnoreText9, + &Language::ResetIgnoreText10, + }; + (*aResetIgnoreTextFunc[nProfile])(rProfile); +} + +void Language::ResetName(unsigned nProfile,LangProfile& rProfile) +{ + typedef void (*ResetNameFunc)(LangProfile&); + + static const ResetNameFunc aResetNameFunc[nProfiles] = + { + &Language::ResetName1, + &Language::ResetName2, + &Language::ResetName3, + &Language::ResetName4, + &Language::ResetName5, + &Language::ResetName6, + &Language::ResetName7, + &Language::ResetName8, + &Language::ResetName9, + &Language::ResetName10, + }; + (*aResetNameFunc[nProfile])(rProfile); +} + +void Language::Reset() +{ + for(unsigned i = 0;i|<",L"",Translate::trnsAll), + LangTypeNS(L"}|{",L"",Translate::trnsAll), + LangTypeNS(L">-|-<",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"}-|-{",L"",Translate::trnsToptoBottom), + LangTypeNS(L"3",L"",Translate::trnsAll), + LangTypeNS(L"3",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"u",L"",Translate::trnsAll), + LangTypeNS(L"U",L"",Translate::trnsAll), + LangTypeNS(L"u'",L"",Translate::trnsAll), + LangTypeNS(L"U'",L"",Translate::trnsAll), + LangTypeNS(L"u`",L"",Translate::trnsToptoBottom), + LangTypeNS(L"U`",L"",Translate::trnsToptoBottom), + LangTypeNS(L"k",L"",Translate::trnsAll), + LangTypeNS(L"K",L"",Translate::trnsAll), + LangTypeNS(L"/\\",L"",Translate::trnsAll), + LangTypeNS(L"JI",L"",Translate::trnsAll), + LangTypeNS(L"m",L"",Translate::trnsAll), + LangTypeNS(L"M",L"",Translate::trnsAll), + LangTypeNS(L"H",L"",Translate::trnsAll), + LangTypeNS(L"H",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"o",L"",Translate::trnsAll), + LangTypeNS(L"O",L"",Translate::trnsAll), + LangTypeNS(L"n",L"",Translate::trnsAll), + LangTypeNS(L"n",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"p",L"",Translate::trnsAll), + LangTypeNS(L"P",L"",Translate::trnsAll), + LangTypeNS(L"c",L"",Translate::trnsAll), + LangTypeNS(L"C",L"",Translate::trnsAll), + LangTypeNS(L"T",L"",Translate::trnsAll), + LangTypeNS(L"T",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"y",L"",Translate::trnsAll), + LangTypeNS(L"Y",L"",Translate::trnsAll), + LangTypeNS(L"f",L"",Translate::trnsToptoBottom), + LangTypeNS(L"F",L"",Translate::trnsToptoBottom), + LangTypeNS(L"(|)",L"",Translate::trnsToptoBottom), + LangTypeNS(L"(I)",L"",Translate::trnsToptoBottom), + LangTypeNS(L"<|>",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"x",L"",Translate::trnsAll), + LangTypeNS(L"X",L"",Translate::trnsAll), + LangTypeNS(L"L|",L"",Translate::trnsAll), + LangTypeNS(L"L|",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"4",L"",Translate::trnsAll), + LangTypeNS(L"4",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"LLI",L"",Translate::trnsAll), + LangTypeNS(L"w",L"",Translate::trnsAll), + LangTypeNS(L"LL|",L"",Translate::trnsAll), + LangTypeNS(L"LL|",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"\\",L"",Translate::trnsAll), + LangTypeNS(L"\\\\",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"bI",L"",Translate::trnsAll), + LangTypeNS(L"bI",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"b",L"",Translate::trnsAll), + LangTypeNS(L"b",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"e",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"E",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"IO",L"",Translate::trnsAll), + LangTypeNS(L"IO",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"I-O",L"",Translate::trnsToptoBottom), + LangTypeNS(L"I-O",L"",Translate::trnsBottomtoTop), + LangTypeNS(L"9I",L"",Translate::trnsAll), + LangTypeNS(L"9I",L"",Translate::trnsBottomtoTop), + }; + try + { + rProfile.m_aTranslation.assign(aTranslation, NN_ARRAY_END(aTranslation)); + } + catch(...) + { + rProfile.ResetTranslation(); + } +} + +void Language::ResetIgnore4(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText4(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName4(LangProfile& rProfile) +{ + // Lang + rProfile.m_astrLang[0] = "Symbols"; + rProfile.m_astrLang[1] = "Cyrillic"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LanguageReset5.cpp b/legacy/Transliterator_6.0/LanguageReset5.cpp new file mode 100644 index 0000000..4bf859a --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset5.cpp @@ -0,0 +1,118 @@ +#include "stdafx.h" + +#include "language.h" + +// QWER +void Language::Reset5(LangProfile& rProfile) +{ + ResetTranslation5(rProfile); + ResetIgnore5(rProfile); + ResetIgnoreText5(rProfile); + ResetName5(rProfile); +} + +void Language::ResetTranslation5(LangProfile& rProfile) +{ + static const LangTypeNS aTranslation[] = + { + LangTypeNS(L"`",L"",Translate::trnsAll), + LangTypeNS(L"~",L"",Translate::trnsAll), + LangTypeNS(L"@",L"\"",Translate::trnsAll), + LangTypeNS(L"#",L"",Translate::trnsAll), + LangTypeNS(L"$",L";",Translate::trnsAll), + LangTypeNS(L"^",L":",Translate::trnsAll), + LangTypeNS(L"&",L"?",Translate::trnsAll), + LangTypeNS(L"|",L"/",Translate::trnsAll), + LangTypeNS(L"q",L"",Translate::trnsAll), + LangTypeNS(L"w",L"",Translate::trnsAll), + LangTypeNS(L"e",L"",Translate::trnsAll), + LangTypeNS(L"r",L"",Translate::trnsAll), + LangTypeNS(L"t",L"",Translate::trnsAll), + LangTypeNS(L"y",L"",Translate::trnsAll), + LangTypeNS(L"u",L"",Translate::trnsAll), + LangTypeNS(L"i",L"",Translate::trnsAll), + LangTypeNS(L"o",L"",Translate::trnsAll), + LangTypeNS(L"p",L"",Translate::trnsAll), + LangTypeNS(L"[",L"",Translate::trnsAll), + LangTypeNS(L"{",L"",Translate::trnsAll), + LangTypeNS(L"]",L"",Translate::trnsAll), + LangTypeNS(L"}",L"",Translate::trnsAll), + LangTypeNS(L"a",L"",Translate::trnsAll), + LangTypeNS(L"s",L"",Translate::trnsAll), + LangTypeNS(L"d",L"",Translate::trnsAll), + LangTypeNS(L"f",L"",Translate::trnsAll), + LangTypeNS(L"g",L"",Translate::trnsAll), + LangTypeNS(L"h",L"",Translate::trnsAll), + LangTypeNS(L"j",L"",Translate::trnsAll), + LangTypeNS(L"k",L"",Translate::trnsAll), + LangTypeNS(L"l",L"",Translate::trnsAll), + LangTypeNS(L";",L"",Translate::trnsAll), + LangTypeNS(L":",L"",Translate::trnsAll), + LangTypeNS(L"'",L"",Translate::trnsAll), + LangTypeNS(L"\"",L"",Translate::trnsAll), + LangTypeNS(L"z",L"",Translate::trnsAll), + LangTypeNS(L"x",L"",Translate::trnsAll), + LangTypeNS(L"c",L"",Translate::trnsAll), + LangTypeNS(L"v",L"",Translate::trnsAll), + LangTypeNS(L"b",L"",Translate::trnsAll), + LangTypeNS(L"n",L"",Translate::trnsAll), + LangTypeNS(L"m",L"",Translate::trnsAll), + LangTypeNS(L",",L"",Translate::trnsAll), + LangTypeNS(L"<",L"",Translate::trnsAll), + LangTypeNS(L".",L"",Translate::trnsAll), + LangTypeNS(L">",L"",Translate::trnsAll), + LangTypeNS(L"/",L".",Translate::trnsAll), + LangTypeNS(L"?",L",",Translate::trnsAll), + LangTypeNS(L"Q",L"",Translate::trnsAll), + LangTypeNS(L"W",L"",Translate::trnsAll), + LangTypeNS(L"E",L"",Translate::trnsAll), + LangTypeNS(L"R",L"",Translate::trnsAll), + LangTypeNS(L"T",L"",Translate::trnsAll), + LangTypeNS(L"Y",L"",Translate::trnsAll), + LangTypeNS(L"U",L"",Translate::trnsAll), + LangTypeNS(L"I",L"",Translate::trnsAll), + LangTypeNS(L"O",L"",Translate::trnsAll), + LangTypeNS(L"P",L"",Translate::trnsAll), + LangTypeNS(L"A",L"",Translate::trnsAll), + LangTypeNS(L"S",L"",Translate::trnsAll), + LangTypeNS(L"D",L"",Translate::trnsAll), + LangTypeNS(L"F",L"",Translate::trnsAll), + LangTypeNS(L"G",L"",Translate::trnsAll), + LangTypeNS(L"H",L"",Translate::trnsAll), + LangTypeNS(L"J",L"",Translate::trnsAll), + LangTypeNS(L"K",L"",Translate::trnsAll), + LangTypeNS(L"L",L"",Translate::trnsAll), + LangTypeNS(L"Z",L"",Translate::trnsAll), + LangTypeNS(L"X",L"",Translate::trnsAll), + LangTypeNS(L"C",L"",Translate::trnsAll), + LangTypeNS(L"V",L"",Translate::trnsAll), + LangTypeNS(L"B",L"",Translate::trnsAll), + LangTypeNS(L"N",L"",Translate::trnsAll), + LangTypeNS(L"M",L"",Translate::trnsAll), + }; + try + { + rProfile.m_aTranslation.assign(aTranslation, NN_ARRAY_END(aTranslation)); + } + catch(...) + { + rProfile.ResetTranslation(); + } + +} + +void Language::ResetIgnore5(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText5(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName5(LangProfile& rProfile) +{ + rProfile.m_astrLang[0] = "QWERTY"; + rProfile.m_astrLang[1] = "YCUKEN"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LanguageReset6.cpp b/legacy/Transliterator_6.0/LanguageReset6.cpp new file mode 100644 index 0000000..9d120ce --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset6.cpp @@ -0,0 +1,116 @@ +#include "stdafx.h" + +#include "language.h" + +// DOS-Win +void Language::Reset6(LangProfile& rProfile) +{ + ResetTranslation6(rProfile); + ResetIgnore6(rProfile); + ResetIgnoreText6(rProfile); + ResetName6(rProfile); +} + +void Language::ResetTranslation6(LangProfile& rProfile) +{ + static const LangTypeNS aTranslation[] = + { + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + }; + try + { + rProfile.m_aTranslation.assign(aTranslation, NN_ARRAY_END(aTranslation)); + } + catch(...) + { + rProfile.ResetTranslation(); + } +} + +void Language::ResetIgnore6(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText6(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName6(LangProfile& rProfile) +{ + rProfile.m_astrLang[0] = "Cyrillic(DOS)"; + rProfile.m_astrLang[1] = "Cyrillic(Win)"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LanguageReset7.cpp b/legacy/Transliterator_6.0/LanguageReset7.cpp new file mode 100644 index 0000000..d670c5e --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset7.cpp @@ -0,0 +1,110 @@ +#include "stdafx.h" + +#include "language.h" + +// KOI8-R-Win +void Language::Reset7(LangProfile& rProfile) +{ + ResetTranslation7(rProfile); + ResetIgnore7(rProfile); + ResetIgnoreText7(rProfile); + ResetName7(rProfile); +} + +void Language::ResetTranslation7(LangProfile& rProfile) +{ + static const LangTypeNS aTranslation[] = + { + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + LangTypeNS(L"",L"",Translate::trnsAll), + }; + try + { + rProfile.m_aTranslation.assign(aTranslation, NN_ARRAY_END(aTranslation)); + } + catch(...) + { + rProfile.ResetTranslation(); + } +} + +void Language::ResetIgnore7(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText7(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName7(LangProfile& rProfile) +{ + rProfile.m_astrLang[0] = "Cyrillic(KOI8-R)"; + rProfile.m_astrLang[1] = "Cyrillic(Win)"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LanguageReset8.cpp b/legacy/Transliterator_6.0/LanguageReset8.cpp new file mode 100644 index 0000000..4b9d98f --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset8.cpp @@ -0,0 +1,70 @@ +#include "stdafx.h" + +#include "language.h" + +// HebRus +void Language::Reset8(LangProfile& rProfile) +{ + ResetTranslation8(rProfile); + ResetIgnore8(rProfile); + ResetIgnoreText8(rProfile); + ResetName8(rProfile); +} + +void Language::ResetTranslation8(LangProfile& rProfile) +{ + static const LangTypeNS aTranslation[] = + { + LangTypeNS(L"\x5d0",L"",Translate::trnsAll), + LangTypeNS(L"\x5d1",L"",Translate::trnsAll), + LangTypeNS(L"\x5d2",L"",Translate::trnsAll), + LangTypeNS(L"\x5d3",L"",Translate::trnsAll), + LangTypeNS(L"\x5d4",L"",Translate::trnsAll), + LangTypeNS(L"\x5d5",L"",Translate::trnsAll), + LangTypeNS(L"\x5d6",L"",Translate::trnsAll), + LangTypeNS(L"\x5d7",L"",Translate::trnsAll), + LangTypeNS(L"\x5d8",L"",Translate::trnsAll), + LangTypeNS(L"\x5d9",L"",Translate::trnsAll), + LangTypeNS(L"\x5da",L"",Translate::trnsAll), + LangTypeNS(L"\x5db",L"",Translate::trnsAll), + LangTypeNS(L"\x5dc",L"",Translate::trnsAll), + LangTypeNS(L"\x5dd",L"",Translate::trnsAll), + LangTypeNS(L"\x5de",L"",Translate::trnsAll), + LangTypeNS(L"\x5df",L"",Translate::trnsAll), + LangTypeNS(L"\x5e0",L"",Translate::trnsAll), + LangTypeNS(L"\x5e1",L"",Translate::trnsAll), + LangTypeNS(L"\x5e2",L"",Translate::trnsAll), + LangTypeNS(L"\x5e3",L"",Translate::trnsAll), + LangTypeNS(L"\x5e4",L"",Translate::trnsAll), + LangTypeNS(L"\x5e5",L"",Translate::trnsAll), + LangTypeNS(L"\x5e6",L"",Translate::trnsAll), + LangTypeNS(L"\x5e7",L"",Translate::trnsAll), + LangTypeNS(L"\x5e8",L"",Translate::trnsAll), + LangTypeNS(L"\x5e9",L"",Translate::trnsAll), + LangTypeNS(L"\x5ea",L"",Translate::trnsAll), + }; + try + { + rProfile.m_aTranslation.assign(aTranslation, NN_ARRAY_END(aTranslation)); + } + catch(...) + { + rProfile.ResetTranslation(); + } +} + +void Language::ResetIgnore8(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText8(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName8(LangProfile& rProfile) +{ + rProfile.m_astrLang[0] = "Hebrew"; + rProfile.m_astrLang[1] = "Russian"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/LanguageReset9.cpp b/legacy/Transliterator_6.0/LanguageReset9.cpp new file mode 100644 index 0000000..a320439 --- /dev/null +++ b/legacy/Transliterator_6.0/LanguageReset9.cpp @@ -0,0 +1,33 @@ +#include "stdafx.h" + +#include "language.h" + +// User +void Language::Reset9(LangProfile& rProfile) +{ + ResetTranslation9(rProfile); + ResetIgnore9(rProfile); + ResetIgnoreText9(rProfile); + ResetName9(rProfile); +} + +void Language::ResetTranslation9(LangProfile& rProfile) +{ + rProfile.ResetTranslation(); +} + +void Language::ResetIgnore9(LangProfile& rProfile) +{ + rProfile.ResetIgnore(); +} + +void Language::ResetIgnoreText9(LangProfile& rProfile) +{ + rProfile.ResetIgnoreText(); +} + +void Language::ResetName9(LangProfile& rProfile) +{ + rProfile.m_astrLang[0] = "LangTop"; + rProfile.m_astrLang[1] = "LangBottom"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/MakeDirection.h b/legacy/Transliterator_6.0/MakeDirection.h new file mode 100644 index 0000000..860198f --- /dev/null +++ b/legacy/Transliterator_6.0/MakeDirection.h @@ -0,0 +1,73 @@ +#ifndef __MAKEDIRECTION_H__ +#define __MAKEDIRECTION_H__ + +#include "global.h" + +struct MakeDirection +{ + static const char* DirA() { return " -> "; } + static const wchar_t* DirW() { return L" -> "; } + static const TCHAR* DirT() + { +#ifdef UNICODE + return DirW(); +#else + return DirA(); +#endif // UNICODE + } + + static const char* DirBackA() { return " <- "; } + static const wchar_t* DirBackW() { return L" <- "; } + static const TCHAR* DirBackT() + { +#ifdef UNICODE + return DirBackW(); +#else + return DirBackA(); +#endif // UNICODE + } + + template + static void MakeW(T (&a)[2],const LangProfile* pProfile = 0) + { + if(!pProfile) + pProfile = g_Language.GetCurProfile(); + + NN::CharAWT astrLang[2]; + for(size_t i=0; i<2; ++i) + astrLang[i].SetData(g_Language.GetCurProfile()->m_astrLang[i].c_str()); + + for(size_t i=0; i<2; ++i) + { + a[i] = astrLang[i]; + a[i]+= DirW(); + a[i]+= astrLang[!i]; + } + } + + template + static void MakeA(T (&a)[2],const LangProfile* pProfile = 0) + { + if(!pProfile) + pProfile = g_Language.GetCurProfile(); + + for(size_t i=0; i<2; ++i) + { + a[i] = pProfile->m_astrLang[i]; + a[i]+= DirA(); + a[i]+= pProfile->m_astrLang[!i]; + } + } + + template + static void MakeT(T (&a)[2],const LangProfile* pProfile = 0) + { +#ifdef UNICODE + MakeW(a,pProfile); +#else + MakeA(a,pProfile); +#endif // UNICODE + } +}; + +#endif // __MAKEDIRECTION_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Msg.h b/legacy/Transliterator_6.0/Msg.h new file mode 100644 index 0000000..2f1ad96 --- /dev/null +++ b/legacy/Transliterator_6.0/Msg.h @@ -0,0 +1,17 @@ +#ifndef __MSG_H__ +#define __MSG_H__ + +// Apply +#define UWM_APPLY (WM_USER+5) +// Profile Name changed +#define UWM_PROFILENAME (WM_USER+6) +// Profile changed +#define UWM_PROFILECHANGE (WM_USER+7) +// Profile was changed +#define UWM_PROFILEUPDATE (WM_USER+8) +// Copy profile +#define UWM_PROFILECOPYPROFILE (WM_USER+9) +// Reset profile +#define UWM_PROFILERESET (WM_USER+10) + +#endif // __MSG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Options.h b/legacy/Transliterator_6.0/Options.h new file mode 100644 index 0000000..a1d7ca7 --- /dev/null +++ b/legacy/Transliterator_6.0/Options.h @@ -0,0 +1,160 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#pragma once + +#include "translate.h" + +struct Options +{ + // Profile + unsigned m_nCurProfile; + + // Show + WINDOWPLACEMENT m_wndpl; + + // Action + BOOL m_bTranslate; + BOOL m_bIgnore; + BOOL m_bIgnoreText; + + // Ignore + BOOL m_bCopyIgnore; + + // AutoTransliteration + Translate::Direction m_nAutoTransliteration; + + // Controls + BOOL m_bWrapText; + BOOL m_bScrollText; + + // Caption + BOOL m_bCaptionProfile; + BOOL m_bCaptionCount; + + // StatusBar + BOOL m_bStatusBarCount; + + // Tray Icon + BOOL m_bTrayIconShow; + + // TaskBar + BOOL m_bTaskBarShow; + + // View + enum Placement + { + placementNormal, + placementOnTop, + placementOnBottom + }; + Placement m_nPlacement; + + // Font + enum Font + { + fontLangTop, + fontLangBottom, + fontDetails, + nFonts + }; + LOGFONT m_alfFont[nFonts]; + + // HotKeys + enum HotKeys + { + hkLangToptoLangBottom, + hkLangBottomtoLangTop, + hkAuto, + hkShowHide, + hkCopyIgnore, + nHotKey + }; + NN::HotKey m_HotKey[nHotKey]; + + // LoadOnStartUp + enum LoadOnStartUp + { + loadNo, + loadShown, + loadHidden + }; + LoadOnStartUp m_nLoadOnStartUp; + + // SaveText + BOOL m_bSaveText; + + void Reset() + { + // CurProfile + m_nCurProfile = 0; + + // Show + ::memset(&m_wndpl,0,sizeof(m_wndpl)); + m_wndpl.showCmd = SW_SHOWNORMAL; + + // Action + m_bTranslate = TRUE; + m_bIgnore = TRUE; + m_bIgnoreText = TRUE; + + // CopyIgnore + m_bCopyIgnore = FALSE; + + // AutoTransliteration + m_nAutoTransliteration = Translate::dirToptoBottom; + + // Controls + m_bWrapText = TRUE; + m_bScrollText = TRUE; + + // Caption + m_bCaptionProfile = TRUE; + m_bCaptionCount = FALSE; + + // StatusBar + m_bStatusBarCount = TRUE; + + // Tray Icon + m_bTrayIconShow = FALSE; + + // TaskBar + m_bTaskBarShow = TRUE; + + // View + m_nPlacement = placementNormal; + + // Font + LOGFONT lfCommon = {}; + lfCommon.lfCharSet = ANSI_CHARSET; + lfCommon.lfHeight = -14; + lfCommon.lfWeight = FW_NORMAL; + _tcscpy(lfCommon.lfFaceName,_T("Verdana")); + m_alfFont[fontLangTop] = lfCommon; + m_alfFont[fontLangBottom] = lfCommon; + + lfCommon.lfHeight = -10; + m_alfFont[fontDetails] = lfCommon; + + // HotKey + m_HotKey[hkLangToptoLangBottom].SetHotKey('X',MOD_CONTROL|MOD_SHIFT); + m_HotKey[hkLangBottomtoLangTop].SetHotKey('C',MOD_CONTROL|MOD_SHIFT); + m_HotKey[hkAuto].SetHotKey('Z',MOD_CONTROL|MOD_SHIFT); + m_HotKey[hkShowHide].SetHotKey('S',MOD_CONTROL|MOD_SHIFT); + m_HotKey[hkCopyIgnore].SetHotKey('D',MOD_CONTROL|MOD_SHIFT); + + // LoadOnStartUp + m_nLoadOnStartUp = loadNo; + + // SaveText + m_bSaveText = TRUE; + } + + const Options& operator = (const Options& r) + { + memcpy(this,&r,sizeof(*this)); + return *this; + } +}; + +#endif // __OPTIONS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/OptionsDlg.cpp b/legacy/Transliterator_6.0/OptionsDlg.cpp new file mode 100644 index 0000000..23dcbd0 --- /dev/null +++ b/legacy/Transliterator_6.0/OptionsDlg.cpp @@ -0,0 +1,121 @@ +#include "stdafx.h" + +#include "resource.h" +#include "global.h" +#include "msg.h" + +#include "optionsdlg.h" + +void OptionsDlg::DialogLang_LanguageChanged() +{ + m_pageGeneral.UpdateLanguage(); + m_pageView.UpdateLanguage(); + m_pageHotKeys.UpdateLanguage(); + m_pageProfile.UpdateLanguage(); + + m_ctrlOptions.SetCurSel(GetCurrentPage()); +} + +void OptionsDlg::NotifyProfileChanged() +{ + m_pageGeneral.NotifyProfileChanged(); + m_pageView.NotifyProfileChanged(); + m_pageHotKeys.NotifyProfileChanged(); + m_pageProfile.NotifyProfileChanged(); +} + +void OptionsDlg::InitOptionsPage() +{ + GetOptions()->Set(g_Language,g_Options,g_Storage); + SetOptionsPage(); + DoDataExchange(DDX_LOAD); +} + +void OptionsDlg::Apply() +{ + DoDataExchange(DDX_SAVE); + + for(unsigned i = 0;im_Language.GetProfile(i); + + if(g_UpdateOptions.m_bLanguage) + g_LangID = GetOptions()->m_LangID; + + g_Options = GetOptions()->m_Options; + g_Storage = GetOptions()->m_Storage; + + ::PostMessage(GetParent(),UWM_APPLY,0,0); +} + +LRESULT OptionsDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Options Control + m_ctrlOptions = GetDlgItem(IDC_LSTOPTIONS); + + // Create Pages + m_pageGeneral.Create(m_hWnd); + m_pageView.Create(m_hWnd); + m_pageHotKeys.Create(m_hWnd); + m_pageProfile.Create(m_hWnd); + + // Add Pages + AddPage(&m_pageGeneral); + AddPage(&m_pageView); + AddPage(&m_pageHotKeys); + AddPage(&m_pageProfile); + + // Move Pages + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_GRPOPTIONPLACE),&rect); + ScreenToClient(&rect); + for(int i=0; iMoveWindow(&rect); + + // Init + InitOptionsPage(); + + // CurrentPage + SetCurrentPage(0); + + return 0; +} + +LRESULT OptionsDlg::OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Hide + if(!wParam) + InitOptionsPage(); + + return 0; +} + +LRESULT OptionsDlg::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DestroyOptions(); + + return 0; +} + +LRESULT OptionsDlg::OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) +{ + for(int i=0; iSendMessage(uMsg,wParam,lParam); + + return 0; +} + +LRESULT OptionsDlg::OnOKApply(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + Apply(); + if(wID == IDOK) + CloseDialog(); + + return 0; +} + +LRESULT OptionsDlg::OnSelChangeLstOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + SetCurrentPage(m_ctrlOptions.GetCurSel()); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/OptionsDlg.h b/legacy/Transliterator_6.0/OptionsDlg.h new file mode 100644 index 0000000..89e49be --- /dev/null +++ b/legacy/Transliterator_6.0/OptionsDlg.h @@ -0,0 +1,61 @@ +#ifndef __OPTIONSDLG_H__ +#define __OPTIONSDLG_H__ + +#pragma once + +#include "optionsstruct.h" +#include "generalpage.h" +#include "viewpage.h" +#include "hotkeyspage.h" +#include "profilepage.h" + +class OptionsDlg : public NN::OptionsDialogImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_OPTIONS }; + + typedef NN::OptionsDialogImpl baseClass; + + WTL::CListBox m_ctrlOptions; + + GeneralPage m_pageGeneral; + ViewPage m_pageView; + HotKeysPage m_pageHotKeys; + ProfilePage m_pageProfile; + + void DialogLang_LanguageChanged(); + void NotifyProfileChanged(); + + void InitOptionsPage(); + void Apply(); + + BEGIN_MSG_MAP(OptionsDlg) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_ACTIVATE, OnActivate) + + COMMAND_ID_HANDLER(IDOK, OnOKApply) + COMMAND_ID_HANDLER(IDC_BTNAPPLY, OnOKApply) + + COMMAND_HANDLER(IDC_LSTOPTIONS, LBN_SELCHANGE, OnSelChangeLstOptions) + + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnOKApply(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnSelChangeLstOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __OPTIONSDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/OptionsStruct.h b/legacy/Transliterator_6.0/OptionsStruct.h new file mode 100644 index 0000000..b1b1d40 --- /dev/null +++ b/legacy/Transliterator_6.0/OptionsStruct.h @@ -0,0 +1,26 @@ +#ifndef __OPTIONSSTRUCT_H__ +#define __OPTIONSSTRUCT_H__ + +#pragma once + +#include "options.h" +#include "language.h" +#include "storage.h" + +struct OptionsStruct +{ + LANGID m_LangID; + Options m_Options; + Language m_Language; + Storage m_Storage; + + void Set(const Language& l,const Options& o,const Storage& s) + { + m_LangID = g_LangID; + m_Language = l; + m_Options = o; + m_Storage = s; + } +}; + +#endif // __OPTIONSSTRUCT_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileChanged.h b/legacy/Transliterator_6.0/ProfileChanged.h new file mode 100644 index 0000000..a974b89 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileChanged.h @@ -0,0 +1,12 @@ +#ifndef __PROFILECHANGED_H__ +#define __PROFILECHANGED_H__ + +class ProfileChanged +{ +public: + void NotifyProfileChanged() + { + } +}; + +#endif // __PROFILECHANGED_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileCopyProfile.cpp b/legacy/Transliterator_6.0/ProfileCopyProfile.cpp new file mode 100644 index 0000000..6a335f8 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileCopyProfile.cpp @@ -0,0 +1,38 @@ +#include "stdafx.h" + +#include "resource.h" +#include "controls.h" +#include "storage.h" +#include "msg.h" + +#include "profilecopyprofile.h" + +void ProfileCopyProfile::DialogLang_LanguageChanged() +{ + for(size_t i=0; i<2; ++i) + { + InitCmbProfile( + GetDlgItem(IDC_CMBFROM+i), + m_aFromTo[i], + *GetOptions()->m_pStorage); + } +} + +LRESULT ProfileCopyProfile::OnSelChangeFromTo(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_aFromTo[wID-IDC_CMBFROM] = SendDlgItemMessage(wID,CB_GETCURSEL); + + return 0; +} + +LRESULT ProfileCopyProfile::OnCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(m_aFromTo[0] = m_aFromTo[1]) + return 0; + + GetParent().SendMessage(UWM_PROFILECOPYPROFILE,(WPARAM)m_aFromTo[0],(LPARAM)m_aFromTo[1]); + + InvalidateRect(NULL); + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileCopyProfile.h b/legacy/Transliterator_6.0/ProfileCopyProfile.h new file mode 100644 index 0000000..1456539 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileCopyProfile.h @@ -0,0 +1,34 @@ +#ifndef __PROFILECOPYPROFILE_H__ +#define __PROFILECOPYPROFILE_H__ + +#pragma once + +#include "profilestruct.h" + +class ProfileCopyProfile : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILECOPYPROFILE }; + + NN::auto_value m_aFromTo[2]; + + void DialogLang_LanguageChanged(); + + BEGIN_DDX_MAP(ProfileCopyProfile) + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileCopyProfile) + COMMAND_HANDLER(IDC_CMBFROM,CBN_SELCHANGE,OnSelChangeFromTo) + COMMAND_HANDLER(IDC_CMBTO,CBN_SELCHANGE,OnSelChangeFromTo) + + COMMAND_ID_HANDLER(IDC_BTNCOPY,OnCopy) + END_MSG_MAP() + + LRESULT OnSelChangeFromTo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __PROFILECOPYPROFILE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileDetailsDlg.cpp b/legacy/Transliterator_6.0/ProfileDetailsDlg.cpp new file mode 100644 index 0000000..5fadc1a --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileDetailsDlg.cpp @@ -0,0 +1,219 @@ +#include "stdafx.h" + +#include "resource.h" +#include "error.h" +#include "global.h" +#include "controls.h" +#include "compare.h" +#include "makedirection.h" + +#include "profiledetailsdlg.h" + +void ProfileDetailsDlg::DialogLang_LanguageChanged() +{ + UpdateCmbView(); + static bool bfirst = true; + if(!bfirst) + { + UpdateDetails(); + bfirst = false; + } + UpdateCmbProfile(); +} + +void ProfileDetailsDlg::UpdateDetails() +{ + int nCurProfile = m_cmbProfile.GetCurSel(); + int nCurView = m_cmbView.GetCurSel(); + + LangString strDetails; + const size_t nsize = + nCurProfile == profileAll ? 2000 : 500 + + nCurView == viewAll ? 1000 : 500; + strDetails.reserve(nsize); + + LangString astrView[nView]; + for(size_t i=0; i, + &CompareLangType + }; + + static const Translate::Translation translation[] = + { + Translate::trnsToptoBottom, + Translate::trnsBottomtoTop + }; + + for(int nProfile = 0;nProfile( + g_Storage.m_astrProfile[nProfile].c_str()); + strDetails+= strNLC; + + if(pProfile->m_aTranslation.empty()) + continue; + + // Translation + if(nCurView == viewTranslation|| + nCurView == viewAll) + { + strDetails+= astrView[viewTranslation]; + strDetails+= strNL; + + // Direction + for(int trns = 0;trns<2;trns++) + { + strDetails+= astrDirection[trns]; + strDetails+= strNLC; + + LangArray aTranslation = pProfile->m_aTranslation; + + std::sort(aTranslation.begin(),aTranslation.end(),apfCompare[trns]); + + for(LangArray::const_iterator it = aTranslation.begin(); + it != aTranslation.end(); ++it) + { + if((int)it->get() & translation[trns]) + { + strDetails+= + translation[trns] & (int)Translate::trnsToptoBottom? + it->get() : it->get(); + strDetails+= L" - "; + strDetails+= + translation[trns] & (int)Translate::trnsToptoBottom? + it->get() : it->get(); + strDetails+= strNL; + } + } + } + } + + // Ignore + if(nCurView == viewIgnore|| + nCurView == viewAll) + { + strDetails+= astrView[viewIgnore]; + strDetails+= strNLC; + + for(size_t i=0; i<2; ++i) + { + strDetails+= NN::CharAWT(pProfile->m_astrLang[i].c_str()); + strDetails+= strNL; + for(int j = 0;j<2;j++) + { + strDetails+= astrIgnore[j]; + strDetails+= strC; + strDetails+= pProfile->m_astrIgnore[i+j]; + strDetails+= strNL; + } + } + } + + // Ignore Text + if(nCurView == viewIgnoreText|| + nCurView == viewAll) + { + if(!pProfile->m_aIgnoreText.empty()&& + (nCurView == viewIgnoreText|| + nCurView == viewAll)) + { + strDetails+= astrView[viewIgnoreText]; + strDetails+= strNLC; + + for(size_t i=0; i<2; ++i) + { + IgnoreTextArray aIgnoreText = pProfile->m_aIgnoreText; + + std::sort(aIgnoreText.begin(),aIgnoreText.end(),CompareIgnore); + + strDetails+= astrDirection[i]; + strDetails+= strNLC; + + for(IgnoreTextArray::const_iterator it = aIgnoreText.begin(); + it != aIgnoreText.end(); ++it) + if((int)it->get() & i) + strDetails+= it->get(); + } + } + } + } + + m_reDetails.SetWindowText(_T("")); + m_reDetails.SetTextEx((LPTSTR)strDetails.c_str(),ST_DEFAULT,1200); + m_reDetails.HideSelection(true,TRUE); +} + +void ProfileDetailsDlg::UpdateCmbProfile() +{ + InitCmbProfile(m_cmbProfile); + LangStringT str; + NN::WndLoadString(IDS_ALL,str); + m_cmbProfile.AddString(str.c_str()); +} + +void ProfileDetailsDlg::UpdateCmbView() +{ + m_cmbView.SetCurSel(0); +} + +LRESULT ProfileDetailsDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + m_reDetails = GetDlgItem(IDC_REDETAILS); + m_reDetails.SetEventMask(ENM_KEYEVENTS); + m_reDetails.SetFocus(); + + m_cmbProfile = GetDlgItem(IDC_CMBPROFILE); + m_cmbView = GetDlgItem(IDC_CMBVIEW); + + DlgResize_Init(false,false); + + return 0; +} + +LRESULT ProfileDetailsDlg::OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + static bool bfirst = false; + if(wParam&&!bfirst) + { + bfirst = true; + UpdateDetails(); + } + return 0; +} + +LRESULT ProfileDetailsDlg::OnChange(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + UpdateDetails(); + return 0; +} + +LRESULT ProfileDetailsDlg::OnEnMsgFilterDetails(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter = (MSGFILTER *)pnmhdr; + if(pMsgFilter->msg == WM_KEYDOWN&&pMsgFilter->wParam == VK_ESCAPE) + CloseDialog(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileDetailsDlg.h b/legacy/Transliterator_6.0/ProfileDetailsDlg.h new file mode 100644 index 0000000..77bd859 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileDetailsDlg.h @@ -0,0 +1,75 @@ +#ifndef __PROFILEDETAILSDLG_H__ +#define __PROFILEDETAILSDLG_H__ + +#pragma once + +class ProfileDetailsDlg : public ATL::CDialogImpl, + public WTL::CDialogResize, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_PROFILEDETAILS }; + + WTL::CRichEditCtrl m_reDetails; + WTL::CComboBox m_cmbProfile; + WTL::CComboBox m_cmbView; + + enum Profile + { + profileAll = Language::nProfiles + }; + + enum View + { + viewTranslation, + viewIgnore, + viewIgnoreText, + viewAll + }; + + enum NumAll + { + nLang = 2, + nView = 3, + nDirection = 2 + }; + + void UpdateDetails(); + void UpdateCmbProfile(); + void UpdateCmbView(); + + void DialogLang_LanguageChanged(); + + BEGIN_DLGRESIZE_MAP(CSymbolslg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_REDETAILS, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(ProfileDetailsDlg) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + + COMMAND_HANDLER(IDC_CMBPROFILE,CBN_SELCHANGE,OnChange) + COMMAND_HANDLER(IDC_CMBVIEW,CBN_SELCHANGE,OnChange) + + NOTIFY_HANDLER(IDC_REDETAILS, EN_MSGFILTER, OnEnMsgFilterDetails) + + CHAIN_MSG_MAP(WTL::CDialogResize) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnChange(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnMsgFilterDetails(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __PROFILEDETAILSDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileExportImport.cpp b/legacy/Transliterator_6.0/ProfileExportImport.cpp new file mode 100644 index 0000000..0073d09 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileExportImport.cpp @@ -0,0 +1,122 @@ +#include "stdafx.h" + +#include "resource.h" +#include "settings.h" +#include "error.h" +#include "msg.h" + +#include "profileexportimport.h" + +void ProfileExportImport::DialogLang_LanguageChanged() +{ + SetDlgItemText(IDC_EDTPATH,m_szPath); +} + +LRESULT ProfileExportImport::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + m_szPath[0] = 0; + SendDlgItemMessage(IDC_EDTPATH,EM_SETLIMITTEXT,(WPARAM)MAX_PATH,0); + + CheckDlgButton(IDC_CHKUNICODE,TRUE); + + return 0; +} + +LRESULT ProfileExportImport::OnExport(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + const BOOL bUnicode = IsDlgButtonChecked(IDC_CHKUNICODE); + + GetDlgItemText(IDC_EDTPATH,m_szPath,MAX_PATH); + + ATL::CAtlFile file; + file.Create( + m_szPath, + GENERIC_WRITE, + NULL, + CREATE_ALWAYS); + + if(!file) + return 0; + file.SetSize(0); + + try + { + LangString str; + Settings::PrepareSaveProfileFile(GetOptions()->m_pProfile,str); + + if(bUnicode) + { + file.Write( + &Settings::s_cUnicodeHeader, + sizeof(Settings::s_cUnicodeHeader)); + file.Write(str.c_str(),str.length()*sizeof(WCHAR)); + } + else + file.Write(NN::CharAWT(str.c_str()),str.length()*sizeof(char)); + + WTL::AtlMessageBox(m_hWnd, IDS_DONE,IDR_TRANSLITERATOR,MB_OK|MB_ICONINFORMATION); + } + catch(...) + { + ShowError(m_hWnd, IDS_EXPORT); + } + + return 0; +} + +LRESULT ProfileExportImport::OnImport(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + GetDlgItemText(IDC_EDTPATH,m_szPath,MAX_PATH); + + TCHAR* pszPathIni = m_szPath+_tcslen(m_szPath)-_tcslen(Settings::s_szIni); + + if(!_tcscmp(pszPathIni, Settings::s_szIni)) + *pszPathIni = 0; + + LangProfile profile; + size_t reset = Settings::LoadProfileFile(m_szPath, &profile); + if(reset != Settings::resetAll) + { + *GetOptions()->m_pProfile = profile; + + // Reset what wasn't imported + if(reset & Settings::resetName) + Language::ResetName(GetOptions()->m_nProfile, *GetOptions()->m_pProfile); + if(reset & Settings::resetTranslation) + Language::ResetTranslation(GetOptions()->m_nProfile, *GetOptions()->m_pProfile); + if(reset & Settings::resetIgnore) + Language::ResetIgnore(GetOptions()->m_nProfile, *GetOptions()->m_pProfile); + if(reset & Settings::resetIgnoreText) + Language::ResetIgnoreText(GetOptions()->m_nProfile, *GetOptions()->m_pProfile); + + GetParent().PostMessage(UWM_PROFILECHANGE); + + WTL::AtlMessageBox(m_hWnd, IDS_DONE, IDR_TRANSLITERATOR, MB_OK|MB_ICONINFORMATION); + + InvalidateRect(NULL); + } + else + ShowError(m_hWnd, IDS_IMPORT); + + return 0; +} + +LRESULT ProfileExportImport::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static const TCHAR szFilter[] = _T("Profile (*.ini*)\0*.ini\0All Files (*.*)\0*.*\0"); + + WTL::CFileDialog fd( + TRUE, + Settings::s_szIni, + NULL, + OFN_HIDEREADONLY, + szFilter); + + if(fd.DoModal() == IDOK) + { + _tcscpy(m_szPath,fd.m_szFileName); + SetDlgItemText(IDC_EDTPATH,m_szPath); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileExportImport.h b/legacy/Transliterator_6.0/ProfileExportImport.h new file mode 100644 index 0000000..c9aa28c --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileExportImport.h @@ -0,0 +1,39 @@ +#ifndef __PROFILEEXPORTIMPORT_H__ +#define __PROFILEEXPORTIMPORT_H__ + +#pragma once + +#include "profilestruct.h" + +class ProfileExportImport : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILEEXPORTIMPORT }; + + TCHAR m_szPath[MAX_PATH+1]; + + void DialogLang_LanguageChanged(); + + BEGIN_DDX_MAP(ProfileExportImport) + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileExportImport) + MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog) + + COMMAND_ID_HANDLER(IDC_BTNEXPORT,OnExport) + COMMAND_ID_HANDLER(IDC_BTNIMPORT,OnImport) + + COMMAND_ID_HANDLER(IDC_BTNBROWSE,OnBrowse) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnExport(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnImport(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __PROFILEEXPORTIMPORT_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileIgnore.cpp b/legacy/Transliterator_6.0/ProfileIgnore.cpp new file mode 100644 index 0000000..2cdbdc8 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileIgnore.cpp @@ -0,0 +1,339 @@ +#include "stdafx.h" + +#include "resource.h" +#include "makedirection.h" +#include "compare.h" +#include "ddx.h" +#include "msg.h" + +#include "profileignore.h" + +const Translate::Translation ProfileIgnore::s_aTranslation[2] = +{ + Translate::trnsToptoBottom, + Translate::trnsBottomtoTop +}; + +void ProfileIgnore::DialogLang_LanguageChanged() +{ + UpdateLang(); + + LVCOLUMN lvcolumn = {}; + lvcolumn.mask = LVCF_TEXT; + m_lvIgnoreText.GetColumn(clText,&lvcolumn); + + LangStringT strText; + NN::WndGetText(GetDlgItem(IDC_LBLTEXT),strText); + lvcolumn.cchTextMax = (int)strText.length(); + lvcolumn.pszText = (LPTSTR)strText.c_str(); + + m_lvIgnoreText.SetColumn(clText,&lvcolumn); +} + +void ProfileIgnore::UpdateLang() +{ + LangStringT aDir[2]; + MakeDirection::MakeT(aDir,GetOptions()->m_pProfile); + + for(size_t i=0; i<2; ++i) + { + SetDlgItemText(IDC_LBLLANGTOP+i, + GetOptions()->m_pProfile->m_astrLang[i].c_str()); + SetDlgItemText(IDC_CHKLANGTOPTOLANGBOTTOM+i, + aDir[i].c_str()); + } +} + +void ProfileIgnore::UpdateIgnoreText() +{ + m_lvIgnoreText.DeleteAllItems(); + + const IgnoreTextArray& aIgnoreText = GetOptions()->m_pProfile->m_aIgnoreText; + if(aIgnoreText.empty()) + { + m_nCurItem = -1; + return; + } + + int nItem = 0; + for(IgnoreTextArray::const_iterator it = aIgnoreText.begin(); + it != aIgnoreText.end(); + it++,nItem++) + { + m_lvIgnoreText.InsertItem(nItem,NULL); + + m_lvIgnoreText.SetItem( + nItem, + clText, + LVIF_TEXT, + NN::CharAWT(it->get().c_str()), + 0, + 0, + 0, + 0); + + if(it->get() & (int)Translate::trnsToptoBottom) + m_lvIgnoreText.SetItem( + nItem, + clLangToptoLangBottom, + LVIF_TEXT, + MakeDirection::DirT(), + 0, + 0, + 0, + 0); + + if(it->get() & (int)Translate::trnsBottomtoTop) + m_lvIgnoreText.SetItem( + nItem, + clLangBottomtoLangTop, + LVIF_TEXT, + MakeDirection::DirBackT(), + 0, + 0, + 0, + 0); + } + + if(m_nCurItem>(int)aIgnoreText.size()) + m_nCurItem = (int)aIgnoreText.size(); + + LoadData(); +} + +void ProfileIgnore::LoadData() +{ + if(m_nCurItem == -1) + return; + + const IgnoreTextType& item = GetOptions()->m_pProfile->m_aIgnoreText[m_nCurItem]; + + m_reText.SetTextEx( + (LPCTSTR)item.get().c_str(), + ST_DEFAULT, + 1200); + + for(size_t i=0; i<2; ++i) + CheckDlgButton(IDC_CHKLANGTOPTOLANGBOTTOM+i, + item.get() & (int)s_aTranslation[i]); +} + +void ProfileIgnore::SaveData() +{ + try + { + IgnoreTextType item(L"",Translate::trnsNone); + + for(size_t i=0; i<2; ++i) + if(IsDlgButtonChecked(IDC_CHKLANGTOPTOLANGBOTTOM+i)) + (int&)item.get() |= s_aTranslation[i]; + + if(item.get() == Translate::trnsNone|| + !m_reText.GetTextLength()) + return; + + DDX_RE_Ex( + m_hWnd, + IDC_RETEXT, + item.get(), + TRUE); + + IgnoreTextArray& aIgnoreText = GetOptions()->m_pProfile->m_aIgnoreText; + + IgnoreTextArray::iterator it = aIgnoreText.begin(); + for(;it != aIgnoreText.end(); ++it) + if(CompareIgnore(*it,item)) + break; + if(it == aIgnoreText.end()) + { + aIgnoreText.push_back(item); + m_nCurItem = (int)aIgnoreText.size()-1; + } + else + { + it->get() = + item.get(); + m_nCurItem = (int)std::distance(aIgnoreText.begin(),it); + } + + UpdateIgnoreText(); + + m_lvIgnoreText.SelectItem(m_nCurItem); + m_lvIgnoreText.SetFocus(); + } + catch(...) + { + } + +} + +LRESULT ProfileIgnore::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // InitLV + m_lvIgnoreText = GetDlgItem(IDC_LVIGNORETEXT); + // Style + m_lvIgnoreText.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); + // Columns + m_lvIgnoreText.InsertColumn( + clText, + _T(""), + LVCFMT_LEFT, + 70, + -1); + m_lvIgnoreText.InsertColumn( + clLangToptoLangBottom, + MakeDirection::DirT(), + LVCFMT_CENTER, + 40, + -1); + m_lvIgnoreText.InsertColumn( + clLangBottomtoLangTop, + MakeDirection::DirBackT(), + LVCFMT_CENTER, + 40, + -1); + + // InitRE + m_reText = GetDlgItem(IDC_RETEXT); + m_reText.SetEventMask(ENM_CHANGE); + + return 0; +} + +LRESULT ProfileIgnore::OnActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + InvalidateRect(NULL,FALSE); + + return 0; +} + +LRESULT ProfileIgnore::OnAdd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + SaveData(); + + GetParent().SendMessage(UWM_PROFILEUPDATE); + + return 0; +} + +LRESULT ProfileIgnore::OnDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(m_nCurItem == -1) + return 0; + + IgnoreTextArray& aIgnoreText = GetOptions()->m_pProfile->m_aIgnoreText; + + IgnoreTextArray::iterator it = aIgnoreText.begin(); + std::advance(it,m_nCurItem); + aIgnoreText.erase(it); + + m_lvIgnoreText.DeleteItem(m_nCurItem); + if(!m_lvIgnoreText.GetItemCount()) + m_nCurItem = -1; + + UpdateIgnoreText(); + m_lvIgnoreText.SelectItem(m_nCurItem); + m_lvIgnoreText.SetFocus(); + + GetParent().SendMessage(UWM_PROFILEUPDATE); + + return 0; +} + +LRESULT ProfileIgnore::OnEnChangeText(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(!m_bChange) + return 0; + + IgnoreTextType item(L"",Translate::trnsNone); + IgnoreTextString& itemstr = item.get(); + + DDX_RE_Ex(m_hWnd, IDC_RETEXT,itemstr,TRUE); + + if(!itemstr.length()) + return 0; + + const IgnoreTextArray& aIgnoreText = GetOptions()->m_pProfile->m_aIgnoreText; + IgnoreTextArray::const_iterator itfind; + + size_t lenI = 0; + for(lenI = itemstr.length(); lenI; --lenI) + { + itfind = std::find_if + ( + aIgnoreText.begin(), + aIgnoreText.end(), + CompareSearchIgnoreText(item,lenI) + ); + + if(itfind != aIgnoreText.end()) + break; + } + if(!lenI) + return 0; + + int nItem = (int)std::distance(aIgnoreText.begin(),itfind); + m_lvIgnoreText.SelectItem(nItem); + m_nCurItem = nItem; + + return 0; +} + +LRESULT ProfileIgnore::OnKeyDownLVIgnoreText(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + NMLVKEYDOWN* pnmkeydown = (NMLVKEYDOWN*)pnmhdr; + + const nLastItem = m_lvIgnoreText.GetItemCount()-1; + switch(pnmkeydown->wVKey) + { + case VK_UP: + if(m_nCurItem) + m_nCurItem--; + break; + case VK_DOWN: + if(m_nCurItem != nLastItem) + m_nCurItem++; + break; + case VK_NEXT: + m_nCurItem+= eNextPage; + if(m_nCurItem>nLastItem) + m_nCurItem = nLastItem; + break; + case VK_PRIOR: + m_nCurItem-= eNextPage; + if(m_nCurItem<0) + m_nCurItem = 0; + break; + case VK_HOME: + m_nCurItem = 0; + break; + case VK_END: + m_nCurItem = nLastItem; + break; + default: + return 0; + } + + m_lvIgnoreText.SetSelectionMark(m_nCurItem); + + m_bChange = false; + LoadData(); + m_bChange = true; + + return 0; +} + +LRESULT ProfileIgnore::OnClickLVIgnoreText(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + NMITEMACTIVATE* pnmitem = (NMITEMACTIVATE*)pnmhdr; + if(pnmitem->iItem != -1) + { + m_nCurItem = pnmitem->iItem; + + m_bChange = false; + LoadData(); + m_bChange = true; + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileIgnore.h b/legacy/Transliterator_6.0/ProfileIgnore.h new file mode 100644 index 0000000..645b708 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileIgnore.h @@ -0,0 +1,80 @@ +#ifndef __PROFILEIGNORE_H__ +#define __PROFILEIGNORE_H__ + +#pragma once + +#include "profilestruct.h" +#include "ddx.h" + +class ProfileIgnore : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILEIGNORE }; + + WTL::CListViewCtrl m_lvIgnoreText; + WTL::CRichEditCtrl m_reText; + + NN::auto_value m_nCurItem; + + NN::auto_value m_bChange; + + enum Column + { + clText, + clLangToptoLangBottom, + clLangBottomtoLangTop + }; + + static const Translate::Translation s_aTranslation[2]; + + enum { eNextPage = 10 }; + + void DialogLang_LanguageChanged(); + void UpdateLang(); + void UpdateIgnoreText(); + + void LoadData(); + void SaveData(); + + BEGIN_DDX_MAP(ProfileIgnore) + for(unsigned i = 0;im_pProfile->m_astrIgnore[i]) + if(bSaveAndValidate) + { + } + else + { + UpdateLang(); + UpdateIgnoreText(); + } + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileIgnore) + MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog) + MESSAGE_HANDLER(WM_ACTIVATE, OnActivate) + + COMMAND_ID_HANDLER(IDC_BTNADD,OnAdd) + COMMAND_ID_HANDLER(IDC_BTNDELETE,OnDelete) + + COMMAND_HANDLER(IDC_RETEXT, EN_CHANGE, OnEnChangeText) + + NOTIFY_HANDLER(IDC_LVIGNORETEXT,NM_CLICK,OnClickLVIgnoreText) + NOTIFY_HANDLER(IDC_LVIGNORETEXT,NM_RCLICK,OnClickLVIgnoreText) + NOTIFY_HANDLER(IDC_LVIGNORETEXT,LVN_KEYDOWN,OnKeyDownLVIgnoreText) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeText(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnClickLVIgnoreText(int code, NMHDR* pnmhdr, BOOL& bHandled); + LRESULT OnKeyDownLVIgnoreText(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __PROFILEIGNORE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileName.cpp b/legacy/Transliterator_6.0/ProfileName.cpp new file mode 100644 index 0000000..031a123 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileName.cpp @@ -0,0 +1,42 @@ +#include "stdafx.h" + +#include "resource.h" +#include "storage.h" +#include "msg.h" + +#include "profilename.h" + +void ProfileName::DialogLang_LanguageChanged() +{ + LoadName(); +} + +void ProfileName::LoadName() +{ + SetDlgItemText(IDC_EDTPROFILENAME, + GetOptions()->m_pStorage->m_astrProfile[GetOptions()->m_nProfile].c_str()); + + for(size_t i=0; i<2; ++i) + SetDlgItemText(IDC_EDTLANGTOP+i,GetOptions()->m_pProfile->m_astrLang[i].c_str()); +} + +void ProfileName::SaveName() +{ + NN::WndGetText(GetDlgItem(IDC_EDTPROFILENAME), + GetOptions()->m_pStorage->m_astrProfile[GetOptions()->m_nProfile]); + + for(size_t i=0; i<2; ++i) + NN::WndGetText(GetDlgItem(IDC_EDTLANGTOP+i),GetOptions()->m_pProfile->m_astrLang[i]); +} + +LRESULT ProfileName::OnSet(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + SaveName(); + + GetParent().SendMessage(UWM_PROFILENAME); + GetParent().SendMessage(UWM_PROFILEUPDATE); + + InvalidateRect(NULL); + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileName.h b/legacy/Transliterator_6.0/ProfileName.h new file mode 100644 index 0000000..19b62d6 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileName.h @@ -0,0 +1,32 @@ +#ifndef __PROFILENAME_H__ +#define __PROFILENAME_H__ + +#pragma once + +#include "profilestruct.h" + +class ProfileName : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILENAME }; + + void DialogLang_LanguageChanged(); + + void LoadName(); + void SaveName(); + + BEGIN_DDX_MAP(ProfileName) + if(!bSaveAndValidate) + LoadName(); + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileName) + COMMAND_ID_HANDLER(IDC_BTNSET,OnSet) + END_MSG_MAP() + + LRESULT OnSet(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __PROFILENAME__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfilePage.cpp b/legacy/Transliterator_6.0/ProfilePage.cpp new file mode 100644 index 0000000..e03485a --- /dev/null +++ b/legacy/Transliterator_6.0/ProfilePage.cpp @@ -0,0 +1,176 @@ +#include "stdafx.h" + +#include "resource.h" +#include "optionsstruct.h" +#include "controls.h" + +#include "profilepage.h" + +void ProfilePage::DialogLang_LanguageChanged() +{ + InitCmbProfile( + GetDlgItem(IDC_CMBPROFILE), + m_nCurProfile, + GetOptions()->m_Storage); + + m_profileTranslation.UpdateLanguage(); + m_profileIgnore.UpdateLanguage(); + m_profileExportImport.UpdateLanguage(); + m_profileCopyProfile.UpdateLanguage(); + m_profileName.UpdateLanguage(); + m_profileReset.UpdateLanguage(); +} + +void ProfilePage::ProfileChanged() +{ +} + +void ProfilePage::UpdateProfile() +{ + m_ps.m_nProfile = (unsigned)m_nCurProfile; + m_ps.m_pProfile = GetOptions()->m_Language.GetProfile((unsigned)m_nCurProfile); + m_ps.m_pStorage = &GetOptions()->m_Storage; + + for(int i=0; iSetOptions(&m_ps); +} + +LRESULT ProfilePage::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + m_profileTranslation.Create(m_hWnd); + m_profileIgnore.Create(m_hWnd); + m_profileExportImport.Create(m_hWnd); + m_profileCopyProfile.Create(m_hWnd); + m_profileName.Create(m_hWnd); + m_profileReset.Create(m_hWnd); + + // Add Tabs + AddPage(&m_profileTranslation); + AddPage(&m_profileIgnore); + AddPage(&m_profileExportImport); + AddPage(&m_profileCopyProfile); + AddPage(&m_profileName); + AddPage(&m_profileReset); + + // Move Pages + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_GRPPROFILEACTION),&rect); + ScreenToClient(&rect); + for(int i=0; iMoveWindow(&rect); + + // Init Tabs + m_tabAction = GetDlgItem(IDC_TABPROFILEACTION); + TCITEM tcitem = {}; + for(int i=0; iSendMessage(uMsg,wParam,lParam); + + return 0; +} + +LRESULT ProfilePage::OnProfileName(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + UpdateLanguage(); + + return 0; +} + +LRESULT ProfilePage::OnProfileChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_LOAD); + UpdateLanguage(); + g_UpdateOptions.m_abProfile[m_nCurProfile] = true; + + return 0; +} + +LRESULT ProfilePage::OnProfileCopyProfile(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) +{ + *GetOptions()->m_Language.GetProfile((unsigned)lParam) = + *GetOptions()->m_Language.GetProfile((unsigned)wParam); + + UpdateLanguage(); + DoDataExchange(DDX_LOAD); + + g_UpdateOptions.m_abProfile[lParam] = true; + + return 0; +} + +LRESULT ProfilePage::OnProfileUpdate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + g_UpdateOptions.m_abProfile[m_nCurProfile] = true; + + return 0; +} + +LRESULT ProfilePage::OnProfileReset(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + struct Reset_Func + { + ProfileReset::Reset reset; + void (*pFReset)(unsigned,LangProfile&); + }; + + static const Reset_Func aReset_Func[] = + { + {ProfileReset::resetTranslation, Language::ResetTranslation }, + {ProfileReset::resetIgnore, Language::ResetIgnore }, + {ProfileReset::resetIgnoreText, Language::ResetIgnoreText }, + {ProfileReset::resetName, Language::ResetName }, + }; + + LangProfile* pProfile = GetOptions()->m_Language.GetProfile(m_nCurProfile); + + for(size_t i=0; im_Storage.m_astrProfile[m_nCurProfile] = + Storage::s_aszProfileName[m_nCurProfile]; + + InitCmbProfile(GetDlgItem(IDC_CMBPROFILE), m_nCurProfile, GetOptions()->m_Storage); + DoDataExchange(DDX_LOAD); + + g_UpdateOptions.m_abProfile[m_nCurProfile] = true; + + return 0; +} + +LRESULT ProfilePage::OnCmbSelChangeProfileName(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + SetCurrentPage(m_tabAction.GetCurSel()); + m_nCurProfile = SendDlgItemMessage(IDC_CMBPROFILE,CB_GETCURSEL); + GetOptions()->m_Language.SetCurProfile(m_nCurProfile); + DoDataExchange(DDX_LOAD); + + return 0; +} + +LRESULT ProfilePage::OnTcnSelChangeProfileAction(int /*code*/, NMHDR* /*pnmhdr*/, BOOL& /*bHandled*/) +{ + SetCurrentPage(m_tabAction.GetCurSel()); + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfilePage.h b/legacy/Transliterator_6.0/ProfilePage.h new file mode 100644 index 0000000..a023dfd --- /dev/null +++ b/legacy/Transliterator_6.0/ProfilePage.h @@ -0,0 +1,81 @@ +#ifndef __PROFILEPAGE_H__ +#define __PROFILEPAGE_H__ + +#pragma once + +#include "optionsstruct.h" +#include "profilestruct.h" +#include "profilechanged.h" +#include "ddx.h" +#include "msg.h" + +#include "profiletranslation.h" +#include "profileignore.h" +#include "profileexportimport.h" +#include "profilecopyprofile.h" +#include "profilename.h" +#include "profilereset.h" + +class ProfilePage : public NN::OptionsPageImpl, + public NN::OptionsDialogPagesT, + public NN::DialogLang, + public NN::MessageFilterDlg, + public ProfileChanged +{ +public: + enum { IDD = IDD_PAGEPROFILE }; + + typedef NN::OptionsDialogPagesT DDXPagesClass; + + ProfileStruct m_ps; + + NN::auto_value m_nCurProfile; + WTL::CTabCtrl m_tabAction; + + ProfileTranslation m_profileTranslation; + ProfileIgnore m_profileIgnore; + ProfileExportImport m_profileExportImport; + ProfileCopyProfile m_profileCopyProfile; + ProfileName m_profileName; + ProfileReset m_profileReset; + + void DialogLang_LanguageChanged(); + void ProfileChanged(); + void UpdateProfile(); + + BEGIN_DDX_MAP(ProfilePage) + UpdateProfile(); + DDXPagesClass::DoDataExchange(bSaveAndValidate); + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfilePage) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_ACTIVATE, OnActivate) + MESSAGE_HANDLER(UWM_PROFILENAME,OnProfileName) + MESSAGE_HANDLER(UWM_PROFILECHANGE, OnProfileChange) + MESSAGE_HANDLER(UWM_PROFILEUPDATE, OnProfileUpdate) + MESSAGE_HANDLER(UWM_PROFILECOPYPROFILE, OnProfileCopyProfile) + MESSAGE_HANDLER(UWM_PROFILERESET, OnProfileReset) + + COMMAND_HANDLER(IDC_CMBPROFILE,CBN_SELCHANGE,OnCmbSelChangeProfileName) + NOTIFY_HANDLER(IDC_TABPROFILEACTION,TCN_SELCHANGE,OnTcnSelChangeProfileAction) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnProfileName(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnProfileChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnProfileUpdate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnProfileCopyProfile(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnProfileReset(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnCmbSelChangeProfileName(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnTcnSelChangeProfileAction(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __PROFILEPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileReset.cpp b/legacy/Transliterator_6.0/ProfileReset.cpp new file mode 100644 index 0000000..bad5600 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileReset.cpp @@ -0,0 +1,38 @@ +#include "stdafx.h" + +#include "resource.h" +#include "msg.h" + +#include "profilereset.h" + +LRESULT ProfileReset::OnReset(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + struct ID_Reset + { + unsigned ID; + Reset reset; + }; + + static const ID_Reset aIDReset[] = + { + {IDC_CHKRESETTRANSLATION, resetTranslation}, + {IDC_CHKRESETIGNORE, resetIgnore}, + {IDC_CHKRESETIGNORETEXT, resetIgnoreText}, + {IDC_CHKRESETNAME, resetName} + }; + + unsigned nReset = 0; + + for(size_t i=0; i, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILERESET }; + + enum Reset + { + resetTranslation = 1, + resetIgnore = 2, + resetIgnoreText = 4, + resetName = 8 + }; + + BEGIN_DDX_MAP(ProfileReset) + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileReset) + COMMAND_ID_HANDLER(IDC_BTNRESET,OnReset) + END_MSG_MAP() + + LRESULT OnReset(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __PROFILERESET_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileStruct.h b/legacy/Transliterator_6.0/ProfileStruct.h new file mode 100644 index 0000000..9db9442 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileStruct.h @@ -0,0 +1,14 @@ +#ifndef __PROFILESTRUCT_H__ +#define __PROFILESTRUCT_H__ + +#include "langprofile.h" +#include "storage.h" + +struct ProfileStruct +{ + LangProfile* m_pProfile; + Storage* m_pStorage; + unsigned m_nProfile; +}; + +#endif // __PROFILESTRUCT_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileTranslation.cpp b/legacy/Transliterator_6.0/ProfileTranslation.cpp new file mode 100644 index 0000000..df1a872 --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileTranslation.cpp @@ -0,0 +1,354 @@ +#include "stdafx.h" +#include "resource.h" + +#include "makedirection.h" +#include "compare.h" +#include "ddx.h" +#include "msg.h" + +#include "profiletranslation.h" + +const Translate::Translation ProfileTranslation::s_aTranslation[2] = +{ + Translate::trnsToptoBottom, + Translate::trnsBottomtoTop +}; +const ProfileTranslation::Column ProfileTranslation::s_clLang[2] = +{ + clLangTop, + clLangBottom +}; + +void ProfileTranslation::DialogLang_LanguageChanged() +{ + UpdateLang(); + UpdateHeaders(); +} + +void ProfileTranslation::UpdateLang() +{ + LangStringT aDir[2]; + MakeDirection::MakeT(aDir,GetOptions()->m_pProfile); + + for(size_t i=0; i<2; ++i) + { + SetDlgItemText(IDC_LBLLANGTOP+i, + GetOptions()->m_pProfile->m_astrLang[i].c_str()); + SetDlgItemText(IDC_CHKLANGTOPTOLANGBOTTOM+i, + aDir[i].c_str()); + } +} + +void ProfileTranslation::UpdateHeaders() +{ + for(size_t i=0; i<2; ++i) + { + LVCOLUMN lvcolumn = {}; + lvcolumn.mask = LVCF_TEXT; + + m_lvTranslation.GetColumn(s_clLang[i],&lvcolumn); + + const LangStringT& strLang = GetOptions()->m_pProfile->m_astrLang[i]; + lvcolumn.cchTextMax = (int)strLang.length(); + lvcolumn.pszText = (LPTSTR)strLang.c_str(); + + m_lvTranslation.SetColumn(s_clLang[i],&lvcolumn); + } +} + +void ProfileTranslation::UpdateTranslation() +{ + m_lvTranslation.DeleteAllItems(); + + const LangArray& aTranslation = GetOptions()->m_pProfile->m_aTranslation; + if(aTranslation.empty()) + { + m_nCurItem = -1; + return; + } + + int nItem = 0; + for(LangArray::const_iterator it = aTranslation.begin(); + it != aTranslation.end(); + it++,nItem++) + { + m_lvTranslation.InsertItem(nItem,_T("")); + + m_lvTranslation.SetItem( + nItem, + clLangTop, + LVIF_TEXT, + NN::CharAWT(it->get().c_str()), + 0, + 0, + 0, + 0); + m_lvTranslation.SetItem( + nItem, + clLangBottom, + LVIF_TEXT, + NN::CharAWT(it->get().c_str()), + 0, + 0, + 0, + 0); + + if(it->get() & (int)Translate::trnsToptoBottom) + m_lvTranslation.SetItem( + nItem, + clLangToptoLangBottom, + LVIF_TEXT, + MakeDirection::DirT(), + 0, + 0, + 0, + 0); + + if(it->get() & (int)Translate::trnsBottomtoTop) + m_lvTranslation.SetItem( + nItem, + clLangBottomtoLangTop, + LVIF_TEXT, + MakeDirection::DirBackT(), + 0, + 0, + 0, + 0); + + } + + if(m_nCurItem>(int)aTranslation.size()) + m_nCurItem = (int)aTranslation.size(); + + LoadData(); +} + +void ProfileTranslation::LoadData() +{ + if(m_nCurItem == -1) + return; + + const LangType& langitem = GetOptions()->m_pProfile->m_aTranslation[m_nCurItem]; + + m_reLang[0].SetTextEx( + (LPCTSTR)langitem.get().c_str(), + ST_DEFAULT, + 1200); + m_reLang[1].SetTextEx( + (LPCTSTR)langitem.get().c_str(), + ST_DEFAULT, + 1200); + + for(size_t i=0; i<2; ++i) + CheckDlgButton(IDC_CHKLANGTOPTOLANGBOTTOM+i, + langitem.get() & (int)s_aTranslation[i]); +} + +void ProfileTranslation::SaveData() +{ + try + { + LangType item(L"",L"",Translate::trnsNone); + + for(size_t i=0; i<2; ++i) + if(IsDlgButtonChecked(IDC_CHKLANGTOPTOLANGBOTTOM+i)) + (int&)item.get() |= s_aTranslation[i]; + + if(item.get() == Translate::trnsNone|| + (!m_reLang[0].GetTextLength()&&!m_reLang[1].GetTextLength())) + return; + + DDX_RE_Ex(m_hWnd, IDC_RELANGTOP,item.get(),TRUE); + DDX_RE_Ex(m_hWnd, IDC_RELANGBOTTOM,item.get(),TRUE); + + LangArray& aTranslation = GetOptions()->m_pProfile->m_aTranslation; + + LangArray::iterator it = aTranslation.begin(); + for(;it != aTranslation.end(); ++it) + if(CompareLangType(*it,item)) + break; + if(it == aTranslation.end()) + { + aTranslation.push_back(item); + m_nCurItem = (int)aTranslation.size()-1; + } + else + { + it->get() = item.get(); + m_nCurItem = (int)std::distance(aTranslation.begin(),it); + } + + UpdateTranslation(); + + m_lvTranslation.SelectItem(m_nCurItem); + m_lvTranslation.SetFocus(); + } + catch(...) + { + } +} + +LRESULT ProfileTranslation::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // InitLV + m_lvTranslation = GetDlgItem(IDC_LVTRANSLATION); + // Style + m_lvTranslation.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES); + // Columns + m_lvTranslation.InsertColumn(clLangTop,_T(""),LVCFMT_LEFT,70,-1); + m_lvTranslation.InsertColumn(clLangToptoLangBottom,MakeDirection::DirT(),LVCFMT_CENTER,40,-1); + m_lvTranslation.InsertColumn(clLangBottomtoLangTop,MakeDirection::DirBackT(),LVCFMT_CENTER,40,-1); + m_lvTranslation.InsertColumn(clLangBottom,_T(""),LVCFMT_LEFT,70,-1); + + // InitRE + for(size_t i=0; i<2; ++i) + { + m_reLang[i] = GetDlgItem(IDC_RELANGTOP+i); + m_reLang[i].SetEventMask(ENM_CHANGE); + } + + return 0; +} + +LRESULT ProfileTranslation::OnActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + InvalidateRect(NULL,FALSE); + + return 0; +} + +LRESULT ProfileTranslation::OnAdd(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + SaveData(); + + GetParent().SendMessage(UWM_PROFILEUPDATE); + + return 0; +} + +LRESULT ProfileTranslation::OnDelete(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(m_nCurItem == -1) + return 0; + + LangArray& aTranslation = GetOptions()->m_pProfile->m_aTranslation; + + LangArray::iterator it = aTranslation.begin(); + std::advance(it,m_nCurItem); + aTranslation.erase(it); + + m_lvTranslation.DeleteItem(m_nCurItem); + if(!m_lvTranslation.GetItemCount()) + m_nCurItem = -1; + + UpdateTranslation(); + m_lvTranslation.SelectItem(m_nCurItem); + m_lvTranslation.SetFocus(); + + GetParent().SendMessage(UWM_PROFILEUPDATE); + + return 0; +} + +LRESULT ProfileTranslation::OnEnChangeLang(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(!m_bChange) + return 0; + + LangType item(L"", L"", Translate::trnsNone); + + const bool l1 = wID == IDC_RELANGTOP; + LangString& itemstr = l1?item.get():item.get(); + + DDX_RE_Ex(m_hWnd, wID,itemstr,TRUE); + if(!itemstr.length()) + return 0; + + const LangArray& aTranslation = GetOptions()->m_pProfile->m_aTranslation; + size_t len = itemstr.length(); + LangArray::const_iterator itfind; + while(len) + { + itfind = + l1? + std::find_if( + aTranslation.begin(), + aTranslation.end(), + CompareSearchLangTop(item,len)): + std::find_if( + aTranslation.begin(), + aTranslation.end(), + CompareSearchLangBottom(item,len)); + if(itfind != aTranslation.end()) + break; + --len; + } + if(!len) + return 0; + + LangArray::const_iterator it = aTranslation.begin(); + int nItem = (int)std::distance(it,itfind); + m_lvTranslation.SelectItem(nItem); + m_nCurItem = nItem; + + return 0; +} + +LRESULT ProfileTranslation::OnKeyDownLVTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + NMLVKEYDOWN* pnmkeydown = (NMLVKEYDOWN*)pnmhdr; + + const int nLastItem = m_lvTranslation.GetItemCount()-1; + switch(pnmkeydown->wVKey) + { + case VK_UP: + if(m_nCurItem) + m_nCurItem--; + break; + case VK_DOWN: + if(m_nCurItem != nLastItem) + m_nCurItem++; + break; + case VK_NEXT: + m_nCurItem+= eNextPage; + if(m_nCurItem>nLastItem) + m_nCurItem = nLastItem; + break; + case VK_PRIOR: + m_nCurItem-= eNextPage; + if(m_nCurItem<0) + m_nCurItem = 0; + break; + case VK_HOME: + m_nCurItem = 0; + break; + case VK_END: + m_nCurItem = nLastItem; + break; + default: + return 0; + } + + m_lvTranslation.SetSelectionMark(m_nCurItem); + + m_bChange = false; + LoadData(); + m_bChange = true; + + return 0; +} + +LRESULT ProfileTranslation::OnClickLVTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + NMITEMACTIVATE* pnmitem = (NMITEMACTIVATE*)pnmhdr; + if(pnmitem->iItem != -1) + { + m_nCurItem = pnmitem->iItem; + + m_bChange = false; + LoadData(); + m_bChange = true; + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ProfileTranslation.h b/legacy/Transliterator_6.0/ProfileTranslation.h new file mode 100644 index 0000000..e7a959c --- /dev/null +++ b/legacy/Transliterator_6.0/ProfileTranslation.h @@ -0,0 +1,83 @@ +#ifndef __PROFILETRANSLATION_H__ +#define __PROFILETRANSLATION_H__ + +#pragma once + +#include "profilestruct.h" + +class ProfileTranslation : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg +{ +public: + enum { IDD = IDD_PROFILETRANSLATION }; + + WTL::CRichEditCtrl m_reLang[2]; + WTL::CListViewCtrl m_lvTranslation; + + NN::auto_value m_nCurItem; + + NN::auto_value m_bChange; + + enum Column + { + clLangTop, + clLangToptoLangBottom, + clLangBottomtoLangTop, + clLangBottom + }; + + static const Translate::Translation s_aTranslation[2]; + static const Column s_clLang[2]; + + enum { eNextPage = 10 }; + + void DialogLang_LanguageChanged(); + + void UpdateLang(); + void UpdateHeaders(); + void UpdateTranslation(); + + void LoadData(); + void SaveData(); + + BEGIN_DDX_MAP(ProfileTranslation) + if(bSaveAndValidate) + { + } + else + { + UpdateLang(); + UpdateHeaders(); + UpdateTranslation(); + } + END_DDX_MAP() + + BEGIN_MSG_MAP(ProfileTranslation) + MESSAGE_HANDLER(WM_INITDIALOG,OnInitDialog) + MESSAGE_HANDLER(WM_ACTIVATE, OnActivate) + + COMMAND_ID_HANDLER(IDC_BTNADD,OnAdd) + COMMAND_ID_HANDLER(IDC_BTNDELETE,OnDelete) + + COMMAND_HANDLER(IDC_RELANGTOP, EN_CHANGE, OnEnChangeLang) + COMMAND_HANDLER(IDC_RELANGBOTTOM, EN_CHANGE, OnEnChangeLang) + + NOTIFY_HANDLER(IDC_LVTRANSLATION,NM_CLICK,OnClickLVTranslation) + NOTIFY_HANDLER(IDC_LVTRANSLATION,NM_RCLICK,OnClickLVTranslation) + NOTIFY_HANDLER(IDC_LVTRANSLATION,LVN_KEYDOWN,OnKeyDownLVTranslation) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeLang(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnClickLVTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); + LRESULT OnKeyDownLVTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __PROFILETRANSLATION_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Resource.h b/legacy/Transliterator_6.0/Resource.h new file mode 100644 index 0000000..36e1ce2 --- /dev/null +++ b/legacy/Transliterator_6.0/Resource.h @@ -0,0 +1,215 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Transliterator.rc +// +#define IDR_TRANSLITERATOR 100 +#define IDD_PROFILEDETAILS 201 +#define IDD_TRANSLATEFILES 202 +#define IDD_ABOUT 203 +#define IDD_OPTIONS 204 +#define IDD_PAGEGENERAL 205 +#define IDD_PAGEVIEW 206 +#define IDD_PAGEHOTKEYS 207 +#define IDD_PAGEPROFILE 208 +#define IDD_PROFILETRANSLATION 210 +#define IDD_PROFILEIGNORE 211 +#define IDD_PROFILEEXPORTIMPORT 212 +#define IDD_PROFILECOPYPROFILE 213 +#define IDD_PROFILENAME 214 +#define IDD_PROFILERESET 215 +#define IDR_PROFILE 220 +#define IDR_TRAYICON 221 +#define IDR_EDIT 222 +#define IDC_RELANGTOP 1000 +#define IDC_RELANGBOTTOM 1001 +#define IDC_GRPLANGTOP 1002 +#define IDC_GRPLANGBOTTOM 1003 +#define IDC_STATICSEPARATOR 1004 +#define IDC_LBLPROFILE 1005 +#define IDC_CMBPROFILE 1006 +#define IDC_LBLVIEW 1007 +#define IDC_CMBVIEW 1008 +#define IDC_REDETAILS 1009 +#define IDC_LBLEMAIL 1010 +#define IDC_BTNEMAIL 1011 +#define IDC_LBLSITE 1012 +#define IDC_BTNSITE 1013 +#define IDC_LBLABOUTPROGRAM 1014 +#define IDC_EDTABOUT 1015 +#define IDC_GRPPATH 1016 +#define IDC_CMBPATH 1017 +#define IDC_BTNBROWSE 1018 +#define IDC_GRPFOLDER 1019 +#define IDC_CHKSELFOLDER 1020 +#define IDC_CHKALLFILES 1021 +#define IDC_CHKALLFOLDERS 1022 +#define IDC_CHKALLSUBFOLDERS 1023 +#define IDC_GRPFILE 1024 +#define IDC_CHKNAME 1025 +#define IDC_CHKENTRY 1026 +#define IDC_CHKMP3TAGV1 1027 +#define IDC_CHKMP3TAGV2 1028 +#define IDC_GRPPROFILE 1029 +#define IDC_GRPDIRECTION 1030 +#define IDC_CMBDIRECTION 1031 +#define IDC_GRPIGNORE 1032 +#define IDC_CHKUSEIGNORE 1033 +#define IDC_GRPEXTRA 1034 +#define IDC_EDTPREFIX 1035 +#define IDC_EDTSUFFIX 1036 +#define IDC_LBLPREFIX 1037 +#define IDC_LBLSUFFIX 1038 +#define IDC_BTNTRANSLATE 1039 +#define IDC_BTNAPPLY 1040 +#define IDC_LSTOPTIONS 1041 +#define IDC_GRPOPTIONPLACE 1042 +#define IDC_GRPLANGUAGE 1043 +#define IDC_RADENGLISH 1044 +#define IDC_RADRUSSIAN 1045 +#define IDC_RADBELARUSIAN 1046 +#define IDC_RADTRANSLIT 1047 +#define IDC_GRPHOTKEYS 1048 +#define IDC_GRPAUTOTRANSLITERATION 1049 +#define IDC_CMBACTION 1050 +#define IDC_HKACTION 1051 +#define IDC_LBLACTION 1052 +#define IDC_LBLHOTKEY 1053 +#define IDC_RADLANGTOPTOLANGBOTTOM 1054 +#define IDC_RADLANGBOTTOMTOLANGTOP 1055 +#define IDC_GRPCAPTION 1056 +#define IDC_CHKCAPTIONPROFILE 1057 +#define IDC_CHKCAPTIONCOUNT 1058 +#define IDC_GRPSTATUSBAR 1059 +#define IDC_CHKSTATUSBARCOUNT 1060 +#define IDC_GRPTRAYICON 1061 +#define IDC_CHKTRAYICONSHOW 1062 +#define IDC_GRPTASKBAR 1063 +#define IDC_CHKTASKBARSHOW 1064 +#define IDC_GRPPLACEMENT 1065 +#define IDC_RADNORMAL 1066 +#define IDC_RADONTOP 1067 +#define IDC_RADONBOTTOM 1068 +#define IDC_GRPCONTROLS 1069 +#define IDC_CHKWRAPTEXT 1070 +#define IDC_CHKSCROLLTEXT 1071 +#define IDC_GRPFONTS 1072 +#define IDC_REFONTLANGTOP 1073 +#define IDC_REFONTLANGBOTTOM 1074 +#define IDC_REFONTDetails 1075 +#define IDC_BTNFONTLANGTOP 1076 +#define IDC_BTNFONTLANGBOTTOM 1077 +#define IDC_BTNFONTPROFILEDETAILS 1078 +#define IDC_GRPLOADONSTARTUP 1079 +#define IDC_RADLOADNO 1080 +#define IDC_RADLOADSHOWN 1081 +#define IDC_RADLOADHIDDEN 1082 +#define IDC_CHKSAVETEXTONEXIT 1083 +#define IDC_GRPSTORAGE 1084 +#define IDC_GRPSTORAGETEXT 1085 +#define IDC_RADTEXTREGISTRY 1086 +#define IDC_RADTEXTFILE 1087 +#define IDC_GRPSTORAGEPROFILES 1088 +#define IDC_RADPROFILESREGISTRY 1089 +#define IDC_RADPROFILESFILE 1090 +#define IDC_LBLTOP 1091 +#define IDC_LBLBOTTOM 1092 +#define IDC_EDTLANGTOP 1093 +#define IDC_EDTLANGBOTTOM 1094 +#define IDC_LBLPROFILENAME 1095 +#define IDC_EDTPROFILENAME 1096 +#define IDC_BTNSET 1097 +#define IDC_TABPROFILEACTION 1098 +#define IDC_GRPPROFILEACTION 1099 +#define IDC_LBLLANGTOP 1100 +#define IDC_LBLLANGBOTTOM 1101 +#define IDC_LBLBEGIN 1102 +#define IDC_LBLLANGTOP2 1102 +#define IDC_LBLEND 1103 +#define IDC_REBEGINTOP 1104 +#define IDC_REENDTOP 1105 +#define IDC_REBEGINBOTTOM 1106 +#define IDC_REENDBOTTOM 1107 +#define IDC_BTNADD 1108 +#define IDC_BTNDELETE 1109 +#define IDC_LVTRANSLATION 1110 +#define IDC_CHKLANGTOPTOLANGBOTTOM 1112 +#define IDC_CHKLANGBOTTOMTOLANGTOP 1113 +#define IDC_LVIGNORETEXT 1114 +#define IDC_GRPIGNORETEXT 1115 +#define IDC_RETEXT 1116 +#define IDC_LBLTEXT 1117 +#define IDC_GRPNAME 1118 +#define IDC_GRPCOPYPROFILE 1119 +#define IDC_LBLFROM 1120 +#define IDC_LBLTO 1121 +#define IDC_CMBFROM 1122 +#define IDC_CMBTO 1123 +#define IDC_BTNCOPY 1124 +#define IDC_GRPRESET 1125 +#define IDC_CHKRESETTRANSLATION 1126 +#define IDC_CHKRESETIGNORE 1127 +#define IDC_CHKRESETIGNORETEXT 1128 +#define IDC_CHKRESETNAME 1129 +#define IDC_BTNRESET 1130 +#define IDC_GRPEXPORTIMPORT 1131 +#define IDC_CHKUNICODE 1132 +#define IDC_LBLPATH 1133 +#define IDC_EDTPATH 1134 +#define IDC_BTNEXPORT 1135 +#define IDC_BTNIMPORT 1136 +#define ID_PROFILE 32780 +#define ID_EDIT_IGNORE_INSERT 32781 +#define ID_EDIT_IGNORE_REMOVE 32782 +#define ID_EDIT_COPY_LANGTOPTOLANGBOTTOM 32783 +#define ID_EDIT_COPY_LANGBOTTOMTOLANGTOP 32784 +#define ID_TOOLS_PROFILEDETAILS 32785 +#define ID_TOOLS_TRANSLATEFILES 32786 +#define ID_TOOLS_OPTIONS 32787 +#define ID_TOOLS_ACTION_TRANSLITERATION 32788 +#define ID_TOOLS_ACTION_IGNORE 32789 +#define ID_TOOLS_ACTION_IGNORETEXT 32800 +#define ID_TOOLS_ACTION_COPYIGNORE 32801 +#define ID_PROFILE1 32811 +#define ID_PROFILE2 32812 +#define ID_PROFILE3 32813 +#define ID_PROFILE4 32814 +#define ID_PROFILE5 32815 +#define ID_PROFILE6 32816 +#define ID_PROFILE7 32817 +#define ID_PROFILE8 32818 +#define ID_PROFILE9 32819 +#define ID_PROFILE10 32820 +#define ID_SHOW 32821 +#define ID_HIDE 32822 +#define ID_COUNTLANGTOP 32823 +#define ID_COUNTLANGBOTTOM 32824 +#define IDS_ERROR 62000 +#define IDS_HELP 62001 +#define IDS_TRANSLATION 62002 +#define IDS_IGNORE 62003 +#define IDS_IGNORETEXT 62004 +#define IDS_ALL 62005 +#define IDS_DONE 62006 +#define IDS_BOLD 62007 +#define IDS_ITALIC 62008 +#define IDS_UNDERLINE 62009 +#define IDS_STRIKEOUT 62010 +#define IDS_NEWVERSION 62011 +#define IDS_IMPORT 62012 +#define IDS_EXPORT 62013 +#define IDS_TRANSLATEFILES 62014 +#define IDS_BEGIN 62015 +#define IDS_END 62016 +#define IDS_TRANSLITERATOR_IS_RUNNING 62017 + + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_DETAILS +#define _APS_NEXT_RESOURCE_VALUE 216 +#define _APS_NEXT_COMMAND_VALUE 32814 +#define _APS_NEXT_CONTROL_VALUE 1137 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/legacy/Transliterator_6.0/Settings.cpp b/legacy/Transliterator_6.0/Settings.cpp new file mode 100644 index 0000000..a7eef08 --- /dev/null +++ b/legacy/Transliterator_6.0/Settings.cpp @@ -0,0 +1,1198 @@ +#include "stdafx.h" + +#include "resource.h" +#include "global.h" +#include "makedirection.h" + +#include "settings.h" + +/* +Registry Format : +HKEY_CURRENT_USER\Software\NN\Transliterator\ + Storage\ + Lang + Profiles + Profile[n] + Path\ + n - Path + [Profiles]\ + Translation\ + n - LangTop [->] [<-] LangBottom + Ignore\ + BeginTop + EndTop + BeginBottom + EndBottom + IgnoreText\ + n - IgnoreText [->] [<-] + Lang\ + LangTop + LangBottom + +File Format: +[Lang] +LangTop = +LangBottom = +[Translation] +LangTop [->] [<-] LangBottom +[Ignore] +BeginTop = +EndTop = +BeginBottom = +EndBottom = +[IgnoreText] +IgnoreText [->] [<-] +*/ + +const HKEY Settings::s_hkProgKey = HKEY_CURRENT_USER; +const TCHAR Settings::s_szProgPath[] = _T("Software\\NN\\Transliterator"); +const TCHAR Settings::s_szNNPath[] = _T("Software\\NN"); +const TCHAR Settings::s_szTransliterator[] = _T("Transliterator"); +const TCHAR Settings::s_szRunPath[] = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); + +const TCHAR* const Settings::s_aszLang[] = +{ + _T("LangTop"), + _T("LangBottom") +}; + +const WCHAR* const Settings::s_aszLangF[] = +{ + L"LangTop", + L"LangBottom" +}; + +const TCHAR Settings::s_szStorageName[] = _T("Storage"); +const TCHAR Settings::s_szLangIDName[] = _T("LangID"); +const TCHAR Settings::s_szIgnoreName[] = _T("Ignore"); +const TCHAR Settings::s_szIgnoreTextName[] = _T("IgnoreText"); +const TCHAR Settings::s_szLangName[] = _T("Lang"); + +const TCHAR Settings::s_szTxt[] = _T(".txt"); +const TCHAR Settings::s_szIni[] = _T(".ini"); + +// Storage +const TCHAR* const Settings::s_aszStorageStg[] = +{ + _T("TextStorage"), + _T("ProfilesStorage") +}; +const TCHAR Settings::s_szOptions[] = _T("Options"); +const TCHAR* const Settings::s_aszProfiles[] = +{ + _T("Profile1"), + _T("Profile2"), + _T("Profile3"), + _T("Profile4"), + _T("Profile5"), + _T("Profile6"), + _T("Profile7"), + _T("Profile8"), + _T("Profile9"), + _T("Profile10") +}; + +// Profiles +const TCHAR Settings::s_szTranslationName[] = _T("Translation"); + +const TCHAR* const Settings::s_aszIgnoreName[] = +{ + _T("BeginTop"), + _T("EndTop"), + _T("BeginBottom"), + _T("EndBottom") +}; + +const WCHAR* const Settings::s_aszIgnoreNameF[] = +{ + L"BeginTop", + L"EndTop", + L"BeginBottom", + L"EndBottom" +}; + +const WCHAR Settings::s_szLangF[] = L"[Lang]"; +const WCHAR Settings::s_szTranslationF[] = L"[Translation]"; +const WCHAR Settings::s_szIgnoreF[] = L"[Ignore]"; +const WCHAR Settings::s_szIgnoreTextF[] = L"[IgnoreText]"; + +const WCHAR Settings::s_cUnicodeHeader = L'\xFEFF'; +const WCHAR Settings::s_szDivider[] = L" "; +const WCHAR Settings::s_szEQ[] = L"="; +const WCHAR Settings::s_szNL[] = L"\r\n"; + +const WCHAR* const Settings::s_aszDirDiv[] = +{ + L"", // None + L" -> ", // Top to Bottom + L" <- ", // Bottom to Top + L" -> <- " // Two way +}; + +const TCHAR Settings::s_szVersionName[] = _T("Version"); +const TCHAR Settings::s_szVersion[] = _T("6.00"); + +ATL::CRegKey Settings::s_regProg; + +HKEY Settings::OpenKeyLoad(HKEY hKey , LPCTSTR szSubKey) +{ + HKEY hKeyResult; + ::RegOpenKeyEx( + hKey, + szSubKey, + REG_OPTION_NON_VOLATILE, + KEY_READ, + &hKeyResult); + return hKeyResult; +} + +HKEY Settings::OpenKeySave(HKEY hKey , LPCTSTR szSubKey) +{ + HKEY hKeyResult; + + ::RegDeleteKey(hKey , szSubKey); + + ::RegCreateKeyEx( + hKey, + szSubKey, + NULL, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_WRITE, + NULL, + &hKeyResult, + NULL); + return hKeyResult; +} + +HANDLE Settings::OpenFileLoad(LPCTSTR szFile) +{ + return ::CreateFile( + szFile, + GENERIC_READ, + 0, + 0, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + 0); +} + +HANDLE Settings::OpenFileSave(LPCTSTR szFile) +{ + HANDLE hFile = + ::CreateFile( + szFile, + GENERIC_WRITE, + 0, + 0, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + 0); + + if(hFile != INVALID_HANDLE_VALUE) + { + ::SetFilePointer(hFile, 0, NULL, FILE_BEGIN); + ::SetEndOfFile(hFile); + } + + return hFile; +} + +bool Settings::Load() +{ + s_regProg.Attach(OpenKeyLoad(s_hkProgKey, s_szProgPath)); + + if(!LoadVersion()) + return false; + + LoadStorage(); + LoadOptions(); + LoadLanguage(); + LoadText(); + LoadLangID(); + + g_Language.SetCurProfile(g_Options.m_nCurProfile); + g_UpdateOptions.Reset(); + g_OldStorage = g_Storage; + + s_regProg.Close(); + + return true; +} + +void Settings::Save() +{ + s_regProg.Attach(OpenKeySave(s_hkProgKey,s_szProgPath)); + + SaveVersion(); + SaveStorage(); + SaveOptions(); + SaveLanguage(); + SaveText(); + SaveLangID(); + + s_regProg.Close(); +} + +bool Settings::LoadVersion() +{ + do + { + if(!s_regProg) + break; + + DWORD size; + if(s_regProg.QueryStringValue(s_szVersionName,NULL,&size)) + break; + + const DWORD sizeVersion = sizeof(s_szVersion)/sizeof(s_szVersion[0]); + if(size != sizeVersion) + break; + + TCHAR szVersion[sizeVersion]; + if(s_regProg.QueryStringValue(s_szVersionName,szVersion,&size)) + break; + + if(_tcscmp(szVersion,s_szVersion)) + { + LangStringT strCaption; + NN::WndLoadString(IDR_TRANSLITERATOR,strCaption); + + LangStringT strText; + NN::WndLoadString(IDS_NEWVERSION,strText); + + if(::MessageBox( + NULL, + strText.c_str(), + strCaption.c_str(), + MB_YESNO|MB_ICONINFORMATION) == IDYES) + break; + else + return false; + } + return true; + }while(false); + + s_regProg.Close(); + + ATL::CRegKey regNN; + if(!regNN.Open(s_hkProgKey,s_szNNPath,KEY_WRITE)) + regNN.RecurseDeleteKey(s_szTransliterator); + + return true; +} + +void Settings::LoadStorage() +{ + do + { + if(!s_regProg) + break; + + ATL::CRegKey regStorage(OpenKeyLoad(s_regProg,s_szStorageName)); + if(!regStorage) + break; + + // Storage + for(size_t i=0; i aLang(size); + + if(regStorage.QueryStringValue(s_aszLang[i],&aLang[0],&size)) + throw 0; + + NN::vector_to_string(aLang,g_Storage.m_astrLang[i]); + } + catch(...) + { + g_Storage.ResetLang(i); + } + } + + // Profiles + for(size_t i=0; i aProfile(size); + + if(regStorage.QueryStringValue( + s_aszProfiles[i], + &aProfile[0], + &size)) + throw 0; + + NN::vector_to_string(aProfile,g_Storage.m_astrProfile[i]); + } + catch(...) + { + g_Storage.ResetProfile(i); + } + } + + return; + } + while(false); + + g_Storage.Reset(); +} + +void Settings::LoadOptions() +{ + do{ + if(!s_regProg) + break; + + DWORD size = sizeof(g_Options); + LONG lRes = s_regProg.QueryBinaryValue(s_szOptions,&g_Options,&size); + if(lRes||size != sizeof(g_Options)) + break; + + return; + }while(false); + + g_Options.Reset(); +} + +void Settings::LoadLanguage() +{ + size_t (*pFuncLoad)(const TCHAR*, LangProfile*) = + g_Storage.m_stg[Storage::stgProfiles] == Storage::stgRegistry? + LoadProfileReg: + LoadProfileFile; + + for(size_t i=0 ;i fmProfile; + if(fmProfile.MapFile(fileProfile) != S_OK) + return reset; + + const bool bUnicode = + memcmp(fmProfile,&s_cUnicodeHeader,sizeof(s_cUnicodeHeader))?false:true; + + // Copy to memory + NN::CharAWT caw; + + if(!bUnicode) + caw.SetData( + reinterpret_cast(fmProfile.GetData()), + fmProfile.GetMappingSize()); + else + caw.SetData( + reinterpret_cast(fmProfile.GetData())+ + sizeof(s_cUnicodeHeader)/sizeof(WCHAR), + fmProfile.GetMappingSize()); + + // Closing file + fmProfile.Unmap(); + fileProfile.Close(); + + // Parsing + reset = LoadProfileFileData(caw.GetData(), pProfile); + + return reset; +} + +size_t Settings::LoadProfileFileData(const WCHAR* pData, LangProfile* pProfile) +{ + size_t reset = resetAll; + + const WCHAR* pBegin = NULL; + const WCHAR* pEnd = NULL; + + // Lang + if(FindProfileFileSection(pData, s_szLangF, &pBegin, &pEnd)) + if(LoadProfileFileName(pBegin + NN_ARRAY_LENGTH_1(s_szNL), pEnd, pProfile)) + reset&= ~resetName; + + // Translation + if(FindProfileFileSection(pData, s_szTranslationF, &pBegin, &pEnd)) + if(LoadProfileFileTranslation(pBegin + NN_ARRAY_LENGTH_1(s_szNL), pEnd, pProfile)) + reset&= ~resetTranslation; + + // Ignore + if(FindProfileFileSection(pData, s_szIgnoreF, &pBegin, &pEnd)) + if(LoadProfileFileIgnore(pBegin + NN_ARRAY_LENGTH_1(s_szNL), pEnd, pProfile)) + reset&= ~resetIgnore; + + // IgnoreText + if(FindProfileFileSection(pData, s_szIgnoreTextF, &pBegin, &pEnd)) + if(LoadProfileFileIgnoreText(pBegin + NN_ARRAY_LENGTH_1(s_szNL), pEnd, pProfile)) + reset&= ~resetIgnoreText; + + return reset; +} + +bool Settings::LoadProfileFileName(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile) +{ + if(NN::count(pBegin, pEnd, s_szNL, NN_ARRAY_END_1(s_szNL)) != + NN_ARRAY_LENGTH(pProfile->m_astrLang)) + return false; + + try + { + const WCHAR* pFind = pBegin; + + pFind = std::search(pBegin, pEnd, s_szNL, NN_ARRAY_END_1(s_szNL)); + + } + catch(...) + { + for(size_t i=0; im_astrLang); ++i) + pProfile->m_astrLang[i].clear(); + } + + return false; +} + +bool Settings::LoadProfileFileTranslation(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile) +{ + const size_t nItems = NN::count(pBegin, pEnd, s_szNL, NN_ARRAY_END_1(s_szNL)); + if(!nItems) + return false; + + pProfile->m_aTranslation.reserve(nItems); + + const WCHAR* pItem = pBegin; + while(pItem != pEnd) + { + const WCHAR* pItemEnd = wcsstr(pItem, s_szNL); + if(pItemEnd) + { + LangType item(L"", L"", Translate::trnsNone); + + if(ParseLoadTranslation(pItem, pItemEnd, item)) + pProfile->m_aTranslation.push_back(item); + + pItem = pItemEnd + NN_ARRAY_LENGTH_1(s_szNL); + } + } + + return pProfile->m_aTranslation.size() != 0; +} + +bool Settings::LoadProfileFileIgnore(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile) +{ + bool b = false; +/* for(size_t i=0; im_astrIgnore[i]); + + if(pProfile->m_astrIgnore[i].size()) + true; + } +*/ + return b; +} + +bool Settings::LoadProfileFileIgnoreText(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile) +{ + const size_t nItems = NN::count(pBegin, pEnd, s_szNL, NN_ARRAY_END_1(s_szNL)); + if(!nItems) + return false; + + pProfile->m_aTranslation.reserve(nItems); + + const WCHAR* pItem = pBegin; + while(pItem != pEnd) + { + const WCHAR* pItemEnd = wcsstr(pItem, s_szNL); + if(pItemEnd) + { + IgnoreTextType item(L"", Translate::trnsNone); + + if(ParseLoadIgnoreText(pItem, pItemEnd+1, item)) + pProfile->m_aIgnoreText.push_back(item); + + pItem = pItemEnd + NN_ARRAY_LENGTH_1(s_szNL); + } + } + + return pProfile->m_aTranslation.size() != 0; +} + +bool Settings::FindProfileFileSection(const WCHAR* pData, const WCHAR* szSection, const WCHAR** ppBegin, const WCHAR** ppEnd) +{ + // Begin + const WCHAR* pBegin = wcsstr(pData, szSection); + if(!pBegin) + { + *ppBegin = *ppEnd = NULL; + return false; + } + *ppBegin = pBegin + wcslen(szSection); + + // End + pData = *ppBegin; + while(*pData) + { + // Read line + const WCHAR* pLineEnd = wcsstr(pData, s_szNL); + if(!pLineEnd) + pLineEnd = &pData[wcslen(pData)]; + + // Check + if(pData[0] == '[' && wcschr(pData, ']') < pLineEnd) + { + *ppEnd = pData; + return true; + } + + // Next line + pData = pLineEnd + NN_ARRAY_LENGTH_1(s_szNL); + } + // Reached end + *ppEnd = &pData[wcslen(pData)]; + + return *ppBegin != *ppEnd; +} + +size_t Settings::LoadProfileReg(const TCHAR* szProfileName, LangProfile* pProfile) +{ + size_t reset = resetAll; + + if(!s_regProg) + return reset; + + ATL::CRegKey regProfile(OpenKeyLoad(s_regProg,szProfileName)); + if(!regProfile) + return reset; + + if(LoadProfileRegName(regProfile, pProfile)) + reset&= ~resetName; + if(LoadProfileRegTranslation(regProfile, pProfile)) + reset&= ~resetTranslation; + if(LoadProfileRegIgnore(regProfile, pProfile)) + reset&= ~resetIgnore; + if(LoadProfileRegIgnoreText(regProfile, pProfile)) + reset&= ~resetIgnoreText; + + return reset; +} + +bool Settings::LoadProfileRegTranslation(HKEY hkProfile, LangProfile* pProfile) +{ + ATL::CRegKey regTranslation; + regTranslation.Open(hkProfile,s_szTranslationName); + if(!regTranslation) + return false; + + DWORD nValues; + ::RegQueryInfoKey( + regTranslation, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &nValues, + NULL, + NULL, + NULL, + NULL); + if(!nValues) + return false; + + TCHAR szName[NN::digits_number::value+1]; + + for(DWORD i=0; i aTranslation(size/2); + if(regTranslation.QueryBinaryValue(szName, &aTranslation[0], &size)) + continue; + + LangType item(L"", L"", Translate::trnsNone); + if(ParseLoadTranslation(&aTranslation[0], + &*aTranslation.end(), + item)) + pProfile->m_aTranslation.push_back(item); + } + catch(...) + { + continue; + } + } + + return true; +} + +bool Settings::LoadProfileRegIgnore(HKEY hkProfile, LangProfile* pProfile) +{ + ATL::CRegKey regIgnore; + regIgnore.Open(hkProfile,s_szIgnoreName); + if(!regIgnore) + return false; + + for(size_t i=0; i aIgnore; + + DWORD size; + if(regIgnore.QueryBinaryValue(s_aszIgnoreName[i],NULL,&size)) + return false; + aIgnore.resize(size); + if(regIgnore.QueryBinaryValue(s_aszIgnoreName[i],&aIgnore[0],&size)) + return false; + + NN::vector_to_string(aIgnore,pProfile->m_astrIgnore[i]); + } + catch(...) + { + continue; + } + } + + return true; +} + +bool Settings::LoadProfileRegIgnoreText(HKEY hkProfile, LangProfile* pProfile) +{ + ATL::CRegKey regIgnoreText; + regIgnoreText.Open(hkProfile,s_szIgnoreTextName); + if(!regIgnoreText) + return false; + + DWORD nValues; + ::RegQueryInfoKey( + regIgnoreText, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &nValues, + NULL, + NULL, + NULL, + NULL); + if(!nValues) + return false; + + TCHAR szName[NN::digits_number::value+1]; + + for(size_t i=0; i aIgnoreText; + + DWORD size; + if(regIgnoreText.QueryBinaryValue(szName,NULL,&size)) + continue; + aIgnoreText.resize(size); + if(regIgnoreText.QueryBinaryValue(szName,&aIgnoreText[0],&size)) + continue; + + IgnoreTextType item(L"",Translate::trnsNone); + if(ParseLoadIgnoreText(&aIgnoreText[0], + &aIgnoreText[aIgnoreText.size()-1], + item)) + pProfile->m_aIgnoreText.push_back(item); + } + + return true; +} + +bool Settings::LoadProfileRegName(HKEY hkProfile, LangProfile* pProfile) +{ + ATL::CRegKey regLang; + regLang.Open(hkProfile,s_szLangName); + if(!regLang) + return false; + + try + { + for(size_t i=0; i<2; ++i) + { + std::vector aLang; + + DWORD size; + if(regLang.QueryStringValue(s_aszLang[i],NULL,&size)) + continue; + aLang.resize(size); + if(regLang.QueryStringValue(s_aszLang[i],&aLang[0],&size)) + return false; + + NN::vector_to_string(aLang,pProfile->m_astrLang[i]); + } + } + catch(...) + { + return false; + } + + return true; +} + +bool Settings::ParseLoadTranslation(const WCHAR* pBegin, const WCHAR* pEnd, LangType& item) +{ + // str - [t] [->] [<-] [b] + for(size_t i=NN_ARRAY_LENGTH(s_aszDirDiv)-1; i; --i) + { + const WCHAR* pFind = std::search(pBegin, + pEnd, + s_aszDirDiv[i], + s_aszDirDiv[i] + wcslen(s_aszDirDiv[i])); + + if(pFind != pEnd) + { + item.get().assign(pBegin, pFind); + item.get().assign(pFind + wcslen(s_aszDirDiv[i]), pEnd); + + item.get() = (Translate::Translation)i; + + return true; + } + } + + + return false; +} + +bool Settings::ParseLoadIgnoreText(const WCHAR* pBegin, const WCHAR* pEnd, IgnoreTextType& item) +{ + // str - [t] [->] [<-] + for(size_t i=NN_ARRAY_LENGTH(s_aszDirDiv)-1; i != 0 ; --i) + { + const WCHAR* pFind = std::search(pBegin, + pEnd, + s_aszDirDiv[i], + s_aszDirDiv[i] + wcslen(s_aszDirDiv[i])); + + if(pFind) + { + item.get().assign(pBegin, pFind); + item.get() = (Translate::Translation)i; + + return true; + } + } + + return false; +} + +void Settings::SaveVersion() +{ + if(!s_regProg) + return; + + s_regProg.SetStringValue(s_szVersionName,s_szVersion); +} + +void Settings::SaveStorage() +{ + if(!s_regProg) + return; + + // Deleting Old + s_regProg.DeleteSubKey(s_szStorageName); + for(size_t i=0; i<2; ++i) + ::DeleteFile(g_OldStorage.m_astrLang[i].c_str()); + + for(size_t i=0; im_aTranslation.size()* + (Language::MaxLengthTranslate(pProfile,true)+ + Language::MaxLengthTranslate(pProfile,true))+ + LangProfile::nIgnore* + (Language::MaxLengthIgnore(pProfile))+ + pProfile->m_aIgnoreText.size()* + (Language::MaxLengthIgnoreText(pProfile))); + + str+= Settings::s_szLangF; + str+= s_szNL; + for(size_t i=0; i<2; ++i) + { + str+= s_aszLangF[i]; + str+= s_szEQ; + str+= NN::CharAWT(pProfile->m_astrLang[i].c_str()); + str+= s_szNL; + } + + // Translation + str+= Settings::s_szTranslationF; + str+= s_szNL; + for(LangArray::const_iterator it = pProfile->m_aTranslation.begin(); + it != pProfile->m_aTranslation.end(); + ++it) + { + LangString strTranslation; + ParseSaveTranslation(*it, strTranslation); + str+= strTranslation; + str+= s_szNL; + } + + // Ignore + str+= Settings::s_szIgnoreF; + str+= s_szNL; + for(size_t i=0; im_astrIgnore[i]; + str+= s_szNL; + } + + // IgnoreText + str+= Settings::s_szIgnoreTextF; + str+= s_szNL; + for(IgnoreTextArray::const_iterator it = pProfile->m_aIgnoreText.begin(); + it != pProfile->m_aIgnoreText.end(); + ++it) + { + LangString strIgnoreText; + ParseSaveIgnoreText(*it,strIgnoreText); + str+= strIgnoreText; + str+= s_szNL; + } +} + +void Settings::SaveProfileReg(const TCHAR* szProfileName,const LangProfile* pProfile) +{ + ATL::CRegKey regProfile(OpenKeySave(s_regProg,szProfileName)); + if(!regProfile) + return; + + SaveProfileTranslation(regProfile,pProfile); + SaveProfileIgnore(regProfile,pProfile); + SaveProfileIgnoreText(regProfile,pProfile); + SaveProfileLangName(regProfile,pProfile); +} + +void Settings::SaveProfileTranslation(HKEY hkProfile, const LangProfile* pProfile) +{ + ATL::CRegKey regTranslation(OpenKeySave(hkProfile,s_szTranslationName)); + if(!regTranslation) + return; + + TCHAR szName[NN::digits_number::value+1]; + + int iTranslation = 0; + for(LangArray::const_iterator it = pProfile->m_aTranslation.begin(); + it != pProfile->m_aTranslation.end(); + ++it, ++iTranslation) + { + _itot(iTranslation,szName,10); + + LangString strTranslation; + + ParseSaveTranslation(*it,strTranslation); + + regTranslation.SetBinaryValue( + szName, + strTranslation.c_str(), + strTranslation.length()*sizeof(LangChar)); + } +} + +void Settings::SaveProfileIgnore(HKEY hkProfile, const LangProfile* pProfile) +{ + ATL::CRegKey regIgnore(OpenKeySave(hkProfile,s_szIgnoreName)); + if(!regIgnore) + return; + + for(size_t i=0; im_astrIgnore[i].c_str(), + (pProfile->m_astrIgnore[i].length()+1)*sizeof(wchar_t)); +} + +void Settings::SaveProfileIgnoreText(HKEY hkProfile, const LangProfile* pProfile) +{ + ATL::CRegKey regIgnoreText(OpenKeySave(hkProfile,s_szIgnoreTextName)); + if(!regIgnoreText) + return; + + TCHAR szName[NN::digits_number::value+1]; + + int iIgnoreText = 0; + for(IgnoreTextArray::const_iterator it = pProfile->m_aIgnoreText.begin(); + it != pProfile->m_aIgnoreText.end(); + it++,iIgnoreText++) + { + _itot(iIgnoreText,szName,10); + + LangString strIgnoreText; + + ParseSaveIgnoreText(*it,strIgnoreText); + + regIgnoreText.SetBinaryValue( + szName, + strIgnoreText.c_str(), + strIgnoreText.length()*sizeof(LangChar)); + } +} + +void Settings::SaveProfileLangName(HKEY hkProfile, const LangProfile* pProfile) +{ + ATL::CRegKey regLang(OpenKeySave(hkProfile,s_szLangName)); + + for(size_t i=0; i<2; ++i) + regLang.SetStringValue(s_aszLang[i],pProfile->m_astrLang[i].c_str()); +} + +void Settings::ParseSaveTranslation(const LangType& item, LangString &str) +{ + str+= item.get(); + str+= s_aszDirDiv[item.get()]; + str+= item.get(); +} + +void Settings::ParseSaveIgnoreText(const IgnoreTextType& item, IgnoreTextString& str) +{ + str+= item.get(); + str+= s_aszDirDiv[item.get()]; +} diff --git a/legacy/Transliterator_6.0/Settings.h b/legacy/Transliterator_6.0/Settings.h new file mode 100644 index 0000000..33e84e0 --- /dev/null +++ b/legacy/Transliterator_6.0/Settings.h @@ -0,0 +1,119 @@ +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +#include "langprofile.h" + +struct Settings +{ + static const HKEY s_hkProgKey; + static const TCHAR s_szProgPath[]; + static const TCHAR s_szNNPath[]; + static const TCHAR s_szTransliterator[]; + static const TCHAR s_szRunPath[]; + + static const TCHAR* const s_aszLang[]; + static const WCHAR* const s_aszLangF[]; + + static const TCHAR s_szStorageName[]; + static const TCHAR s_szLangIDName[]; + static const TCHAR s_szIgnoreName[]; + static const TCHAR s_szIgnoreTextName[]; + static const TCHAR s_szLangName[]; + + static const TCHAR s_szTxt[]; + static const TCHAR s_szIni[]; + + // Storage + static const TCHAR* const s_aszStorageStg[]; + static const TCHAR s_szOptions[]; + static const TCHAR* const s_aszProfiles[]; + + // Profiles + static const TCHAR s_szTranslationName[]; + static const TCHAR* const s_aszIgnoreName[]; + static const WCHAR* const s_aszIgnoreNameF[]; + + // File + static const WCHAR s_szLangF[]; + static const WCHAR s_szTranslationF[]; + static const WCHAR s_szIgnoreF[]; + static const WCHAR s_szIgnoreTextF[]; + + static const WCHAR s_cUnicodeHeader; + static const WCHAR s_szDivider[]; + static const WCHAR s_szEQ[]; + static const WCHAR s_szNL[]; + + static const WCHAR* const s_aszDirDiv[]; + + static const TCHAR s_szVersionName[]; + static const TCHAR s_szVersion[]; + + static ATL::CRegKey s_regProg; + + static HKEY OpenKeyLoad(HKEY hKey,LPCTSTR szSubKey); + static HKEY OpenKeySave(HKEY hKey,LPCTSTR szSubKey); + + static HANDLE OpenFileLoad(LPCTSTR szFile); + static HANDLE OpenFileSave(LPCTSTR szFile); + + static bool Load(); + static void Save(); + + static bool LoadVersion(); + static void LoadStorage(); + static void LoadOptions(); + static void LoadLanguage(); + static void LoadText(); + static void LoadLangID(); + + enum ResetFlag + { + resetNone = 0, + resetName = 1, + resetTranslation = 2, + resetIgnore = 4, + resetIgnoreText = 8, + resetAll = resetIgnoreText*2 - 1 + }; + + static size_t LoadProfileFile(const TCHAR* szProfileName, LangProfile* pProfile); + static size_t LoadProfileFileData(const WCHAR* pData, LangProfile* pProfile); + + static bool LoadProfileFileName(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile); + static bool LoadProfileFileTranslation(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile); + static bool LoadProfileFileIgnore(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile); + static bool LoadProfileFileIgnoreText(const WCHAR* pBegin, const WCHAR* pEnd, LangProfile* pProfile); + + static bool FindProfileFileSection(const WCHAR* pData, const WCHAR* szSection, const WCHAR** ppBegin, const WCHAR** ppEnd); + + static size_t LoadProfileReg(const TCHAR* szProfileName, LangProfile* pProfile); + static bool LoadProfileRegTranslation(HKEY hkProfile, LangProfile* pProfile); + static bool LoadProfileRegIgnore(HKEY hkProfile, LangProfile* pProfile); + static bool LoadProfileRegIgnoreText(HKEY hkProfile, LangProfile* pProfile); + static bool LoadProfileRegName(HKEY hkProfile, LangProfile* pProfile); + + static bool ParseLoadTranslation(const WCHAR* pBegin, const WCHAR* pEnd, LangType& item); + static bool ParseLoadIgnoreText(const WCHAR* pBegin, const WCHAR* pEnd, IgnoreTextType& item); + + static void SaveVersion(); + static void SaveStorage(); + static void SaveOptions(); + static void SaveLanguage(); + static void SaveText(); + static void SaveLangID(); + + static void SaveProfileFile(const TCHAR* szProfileName,const LangProfile* pProfile); + static void PrepareSaveProfileFile(const LangProfile* pProfile,LangString& str); + + static void SaveProfileReg(const TCHAR* szProfileName,const LangProfile* pProfile); + static void SaveProfileTranslation(HKEY hkProfile, const LangProfile* pProfile); + static void SaveProfileIgnore(HKEY hkProfile, const LangProfile* pProfile); + static void SaveProfileIgnoreText(HKEY hkProfile, const LangProfile* pProfile); + static void SaveProfileLangName(HKEY hkProfile, const LangProfile* pProfile); + + static void ParseSaveTranslation(const LangType& item, LangString &str); + static void ParseSaveIgnoreText(const IgnoreTextType& item, IgnoreTextString& str); +}; + +#endif // __SETTINGS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Storage.cpp b/legacy/Transliterator_6.0/Storage.cpp new file mode 100644 index 0000000..aff731a --- /dev/null +++ b/legacy/Transliterator_6.0/Storage.cpp @@ -0,0 +1,75 @@ +#include "stdafx.h" + +#include "language.h" + +#include "storage.h" + +const TCHAR* const Storage::s_aszLangName[2] = +{ + _T("TopText.txt"), + _T("BottomText.txt") +}; + +const TCHAR* const Storage::s_aszProfileName[Language::nProfiles] = +{ + _T("Standard"), + _T("Fonetic"), + _T("GOST"), + _T("Symbols"), + _T("QWER"), + _T("DOS-Win"), + _T("KOI8-R-Win"), + _T("HebRus"), + _T("User1"), + _T("User2") +}; + +void Storage::Reset() +{ + for(size_t i=0; i aNameOut( + nNameOut+ + _tcslen(m_szPrefix)+ + _tcslen(m_szSuffix)); + + _tcscpy(&aNameOut[0],m_szPrefix); + { + NN::sg sg( + g_Options.m_bIgnore, + m_bUseIgnore, + g_Options.m_bIgnore); + + g_Language.Translate( + NN::CharAWT(szName,0,CP_ACP), + NN::CharAWT(&aNameOut[_tcslen(m_szPrefix)],nNameOut,CP_ACP), + (Translate::Direction)m_nDirection, + pProfile); + } + TCHAR* pNameOut = _tcscat(&aNameOut[0],m_szSuffix); + + _tcscat(pNameOut,szExt); + + std::vector aNameOutPS; + + ::MoveFile(szPath,&aNameOut[0]); + } + catch(...) + { + } +} + +void TranslateFiles::TranslateEntryMP3Tag(const TCHAR* szPath) +{ + ATL::CAtlFile file; + if(file.Create(szPath,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING) != S_OK) + return; + + const LangProfile* pProfile = g_Language.GetProfile(m_nProfile); + size_t lFileSize = (size_t)::GetFileSize(file,NULL); + const size_t maxTI = + std::max( + Language::MaxLengthTranslate(pProfile,!m_nDirection), + (m_bUseIgnore?Language::MaxLengthIgnore(pProfile):1) + ); + size_t lFileSizeTranslate = Language::CountOutTranslate(lFileSize, + (Translate::Direction)m_nDirection,m_bUseIgnore,pProfile); + + ATL::CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize+1,0,PAGE_READWRITE,FILE_MAP_WRITE) != S_OK) + return; + + if(m_bEntry&&(m_bMP3TagV1||m_bMP3TagV2)&& + _tcsicmp(szPath+_tcslen(szPath)-4,_T(".mp3"))) + m_bEntry = FALSE; + + if(m_bEntry) + { + const bool bUnicode = + (unsigned char)static_cast(filemap)[0] == 0xFF && + (unsigned char)static_cast(filemap)[1] == 0xFE; + + filemap[lFileSize] = 0; + if(bUnicode) + filemap[lFileSize+1] = 0; + + try + { + std::vector aOutW(lFileSizeTranslate+1); + + { + NN::sg sg( + g_Options.m_bIgnore, + m_bUseIgnore, + g_Options.m_bIgnore); + + g_Language.Translate( + bUnicode? + reinterpret_cast( + static_cast(filemap)+2): + NN::CharAWT( + static_cast(filemap)), + &aOutW[0], + (Translate::Direction)m_nDirection, + pProfile); + } + + size_t len = wcslen(&aOutW[0]); + if(!bUnicode) + { + ::WideCharToMultiByte(CP_ACP,0,&aOutW[0],len,filemap,len,0,0); + lFileSize = len; + } + else + { + memcpy(static_cast(filemap)+2,&aOutW[0],len*sizeof(wchar_t)); + lFileSize = (len+2)*sizeof(wchar_t); + } + } + catch(...) + { + return; + } + } + else + { + char* pCur; + + // Mp3 Tag V1 + if(m_bMP3TagV1) + { + pCur = filemap+lFileSize-(sizeof(NN::ID3Tag)); + NN::ID3Tag mp3tagIn; + NN::ID3Tag mp3tagOut; + memcpy(&mp3tagIn,pCur,sizeof(NN::ID3Tag)); + mp3tagOut = mp3tagIn; + + static const char szTag[3] = {'T','A','G'}; + + static size_t nOut = NN::ID3Tag::nCount*maxTI+1; + + if(!LangStringTraitsA::compare(mp3tagIn.szTag, + szTag, + NN_ARRAY_LENGTH(szTag))) + { + TranslateTag(mp3tagIn.szAlbom,mp3tagOut.szAlbom); + TranslateTag(mp3tagIn.szArtist,mp3tagOut.szArtist); + TranslateTag(mp3tagIn.szTitle,mp3tagOut.szTitle); + TranslateTag(mp3tagIn.szComment,mp3tagOut.szComment); + + memcpy(pCur,&mp3tagOut,sizeof(NN::ID3Tag)); + } + } + } + + filemap.Unmap(); + file.SetSize(lFileSize); +} + +void TranslateFiles::TranslateTag(const char* szTagIn, char* szTagOut) +{ + g_Language.Translate( + NN::CharAWT(szTagIn), + NN::CharAWT(szTagOut,NN::ID3Tag::nCount), + (Translate::Direction)m_nDirection, + g_Language.GetProfile(m_nProfile)); +} + +void TranslateFiles::TranslateFile(const TCHAR* szPath) +{ + if(m_bEntry|| + m_bMP3TagV1|| + m_bMP3TagV2) + TranslateEntryMP3Tag(szPath); + + if(m_bName) + TranslateName(szPath); +} + +void TranslateFiles::TranslateFolder(const TCHAR* szPath) +{ + NN::CurrentDirectory curdir(szPath); + + WTL::CFindFile ff; + + if(!ff.FindFile()) + return; + + do{ + if(!_tcscmp(ff.m_fd.cFileName,_T("."))|| + !_tcscmp(ff.m_fd.cFileName,_T(".."))) + continue; + + if(ff.IsDirectory()) + { + if(m_bAllSubFolders&& + _tcslen(szPath)+ + _tcslen(_T("\\"))+ + _tcslen(ff.m_fd.cFileName) <= MAX_PATH) + { + TCHAR szNextPath[MAX_PATH]; + TCHAR* pszNextPath = _tcscpy(szNextPath,szPath); + _tcscat(pszNextPath,_T("\\")); + _tcscat(pszNextPath,ff.m_fd.cFileName); + TranslateFolder(szNextPath); + } + if(m_bAllFolders) + TranslateName(ff.m_fd.cFileName); + } + else + { + TranslateFile(ff.m_fd.cFileName); + } + }while(ff.FindNextFile()); + + ff.Close(); +} + +void TranslateFiles::TranslateSelFolder() +{ + TranslatePathName(m_szPath); +} + +void TranslateFiles::TranslatePathName(const TCHAR* szPath) +{ + NN::CurrentDirectory curdir(szPath); + + const size_t nPath = _tcslen(szPath); + try + { + std::vector aszPath(szPath,&szPath[nPath+1]); + + TCHAR* pszPath = &aszPath[nPath]; + while(*pszPath != _T('\\')&&*pszPath != _T('/')) + pszPath--; + + const TCHAR c = *++pszPath; + *pszPath = 0; + ::SetCurrentDirectory(&aszPath[0]); + *pszPath = c; + + TranslateName(pszPath); + } + catch(...) + { + } +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/TranslateFiles.h b/legacy/Transliterator_6.0/TranslateFiles.h new file mode 100644 index 0000000..f7ed4fd --- /dev/null +++ b/legacy/Transliterator_6.0/TranslateFiles.h @@ -0,0 +1,60 @@ +#ifndef __TRANSLATEFILES_H__ +#define __TRANSLATEFILES_H__ + +#pragma once + +struct TranslateFiles +{ + // Members + + // Path + enum + { + nPath = _MAX_PATH + }; + TCHAR m_szPath[nPath+1]; + + // Profile + size_t m_nProfile; + + // UseIgnore + BOOL m_bUseIgnore; + + // Folder + BOOL m_bSelFolder; + BOOL m_bAllFiles; + BOOL m_bAllFolders; + BOOL m_bAllSubFolders; + + // File + BOOL m_bName; + BOOL m_bEntry; + BOOL m_bMP3TagV1; + BOOL m_bMP3TagV2; + + // Direction + int m_nDirection; + + // Extra + enum + { + nPrefix = 30, + nSuffix = 30 + }; + + TCHAR m_szPrefix[nPrefix+1]; + TCHAR m_szSuffix[nSuffix+1]; + + // Functions + bool Translate(); + void TranslateName(const TCHAR* szPath); + void TranslateEntryMP3Tag(const TCHAR* szPath); + void TranslateFile(const TCHAR* szPath); + void TranslateTag(const char* szTagIn, char* szTagOut); + void TranslateFolder(const TCHAR*); + + void TranslateSelFolder(); + void TranslatePathName(const TCHAR* szPath); +}; + +#endif // __TRANSLATEFILES_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/TranslateFilesDlg.cpp b/legacy/Transliterator_6.0/TranslateFilesDlg.cpp new file mode 100644 index 0000000..5af1ecd --- /dev/null +++ b/legacy/Transliterator_6.0/TranslateFilesDlg.cpp @@ -0,0 +1,193 @@ +#include "stdafx.h" + +#include "resource.h" +#include "language.h" +#include "global.h" +#include "controls.h" +#include "error.h" +#include "translatefiles.h" +#include "settings.h" + +#include "translatefilesdlg.h" + +void TranslateFilesDlg::UpdateCmbProfile() +{ + InitCmbProfile(GetDlgItem(IDC_CMBPROFILE)); +} + +void TranslateFilesDlg::UpdatePath() +{ + DoDataExchange(DDX_SAVE); + if(!m_tf.m_szPath[0]) + { + EnableAll(FALSE); + return; + } + + DWORD dwAttr = GetFileAttributes(m_tf.m_szPath); + + if(dwAttr == (DWORD)-1) + { + EnableAll(FALSE); + return; + } + + EnableExtra(TRUE); + EnableIgnore(TRUE); + EnableDirection(TRUE); + EnableProfile(TRUE); + + if(dwAttr & FILE_ATTRIBUTE_DIRECTORY) + { + EnableFolder(TRUE); + EnableFile(m_tf.m_bAllFiles); + } + else + { + EnableFolder(FALSE); + EnableFile(TRUE); + } +} + +void TranslateFilesDlg::DialogLang_LanguageChanged() +{ + UpdateCmbProfile(); + + WTL::CComboBox cmbDir = GetDlgItem(IDC_CMBDIRECTION); + int nCurSel = cmbDir.GetCurSel(); + InitCmbDir( + cmbDir, + nCurSel = CB_ERR?0:nCurSel, + g_Language.GetProfile(m_tf.m_nProfile)); + m_cmbPath.LoadEntries(Settings::s_hkProgKey,Settings::s_szProgPath,_T("Path")); +} + +void TranslateFilesDlg::EnableFile(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_CHKNAME),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKENTRY),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKMP3TAGV1),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKMP3TAGV2),bEnable); +} + +void TranslateFilesDlg::EnableFolder(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_CHKSELFOLDER),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKALLFILES),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKALLFOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_CHKALLSUBFOLDERS),bEnable); +} + +void TranslateFilesDlg::EnableExtra(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_EDTPREFIX),bEnable); + ::EnableWindow(GetDlgItem(IDC_EDTSUFFIX),bEnable); +} + +void TranslateFilesDlg::EnableIgnore(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_CHKUSEIGNORE),bEnable); +} + +void TranslateFilesDlg::EnableDirection(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_CMBDIRECTION),bEnable); +} + +void TranslateFilesDlg::EnableProfile(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_CMBPROFILE),bEnable); +} + +void TranslateFilesDlg::EnableAll(BOOL bEnable) +{ + EnableFile(bEnable); + EnableFolder(bEnable); + EnableExtra(bEnable); + EnableIgnore(bEnable); + EnableDirection(bEnable); + EnableProfile(bEnable); +} + +LRESULT TranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + memset(&m_tf,0,sizeof(m_tf)); + m_cmbPath.SubclassWindow(GetDlgItem(IDC_CMBPATH)); + + SendDlgItemMessage(IDC_CMBPATH,CB_LIMITTEXT,(WPARAM)TranslateFiles::nPath,0); + SendDlgItemMessage(IDC_EDTPREFIX,EM_LIMITTEXT,(WPARAM)TranslateFiles::nPrefix,0); + SendDlgItemMessage(IDC_EDTSUFFIX,EM_LIMITTEXT,(WPARAM)TranslateFiles::nSuffix,0); + + DoDataExchange(DDX_LOAD); + + EnableAll(FALSE); + + return 0; +} + +LRESULT TranslateFilesDlg::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + m_cmbPath.SaveEntries(Settings::s_hkProgKey,Settings::s_szProgPath,_T("Path")); + return 0; +} + +LRESULT TranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + if(m_tf.Translate()) + { + m_cmbPath.AddEntry(); + WTL::AtlMessageBox(m_hWnd, IDS_DONE,IDR_TRANSLITERATOR,MB_OK|MB_ICONINFORMATION); + } + else + ShowError(m_hWnd, IDS_TRANSLATEFILES); + + return 0; +} + +LRESULT TranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + WTL::CFolderDialog fd(m_hWnd, 0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal() == IDOK) + { + SetDlgItemText(IDC_CMBPATH,fd.m_szFolderPath); + UpdatePath(); + } + return 0; +} + +LRESULT TranslateFilesDlg::OnAllFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EnableFile(IsDlgButtonChecked(IDC_CHKALLFILES)); + return 0; +} + +LRESULT TranslateFilesDlg::OnCbnSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_tf.m_nProfile = SendDlgItemMessage(IDC_CMBPROFILE,CB_GETCURSEL,0,0); + + WTL::CComboBox cmbDir = GetDlgItem(IDC_CMBDIRECTION); + int nCurSel = cmbDir.GetCurSel(); + InitCmbDir( + cmbDir, + nCurSel = CB_ERR?0:nCurSel, + g_Language.GetProfile(m_tf.m_nProfile)); + + return 0; +} + + +LRESULT TranslateFilesDlg::OnCbnEditChangePath(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + UpdatePath(); + return 0; +} + +LRESULT TranslateFilesDlg::OnCbnSelChangePath(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_cmbPath.GetLBText(m_cmbPath.GetCurSel(),m_tf.m_szPath); + m_cmbPath.SetWindowText(m_tf.m_szPath); + UpdatePath(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/TranslateFilesDlg.h b/legacy/Transliterator_6.0/TranslateFilesDlg.h new file mode 100644 index 0000000..a1af6a4 --- /dev/null +++ b/legacy/Transliterator_6.0/TranslateFilesDlg.h @@ -0,0 +1,84 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +#pragma once + +#include "translatefiles.h" + +class TranslateFilesDlg : public ATL::CDialogImpl, + public WTL::CWinDataExchange, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_TRANSLATEFILES }; + + // Data + TranslateFiles m_tf; + + // Controls + NN::ComboBoxMRUCtrl m_cmbPath; + + // Update + void UpdateCmbProfile(); + void UpdatePath(); + + // Language + void DialogLang_LanguageChanged(); + + // Enable + void EnableFile(BOOL bEnable); + void EnableFolder(BOOL bEnable); + void EnableExtra(BOOL bEnable); + void EnableIgnore(BOOL bEnable); + void EnableDirection(BOOL bEnable); + void EnableProfile(BOOL bEnable); + void EnableAll(BOOL bEnable); + + BEGIN_DDX_MAP(TranslateFilesDlg) + DDX_CHECK(IDC_CHKUSEIGNORE,m_tf.m_bUseIgnore) + DDX_CHECK(IDC_CHKSELFOLDER,m_tf.m_bSelFolder) + DDX_CHECK(IDC_CHKALLFILES,m_tf.m_bAllFiles) + DDX_CHECK(IDC_CHKALLFOLDERS,m_tf.m_bAllFolders) + DDX_CHECK(IDC_CHKALLSUBFOLDERS,m_tf.m_bAllSubFolders) + DDX_CHECK(IDC_CHKNAME,m_tf.m_bName) + DDX_CHECK(IDC_CHKENTRY,m_tf.m_bEntry) + DDX_CHECK(IDC_CHKMP3TAGV1,m_tf.m_bMP3TagV1) + DDX_CHECK(IDC_CHKMP3TAGV2,m_tf.m_bMP3TagV2) + DDX_COMBO_SEL(IDC_CMBPROFILE,(int&)m_tf.m_nProfile) + DDX_COMBO_SEL(IDC_CMBDIRECTION,m_tf.m_nDirection) + DDX_TEXT(IDC_EDTPREFIX,m_tf.m_szPrefix) + DDX_TEXT(IDC_EDTSUFFIX,m_tf.m_szSuffix) + DDX_TEXT(IDC_CMBPATH,m_tf.m_szPath) + END_DDX_MAP() + + BEGIN_MSG_MAP(TranslateFilesDlg) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_BTNTRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BTNBROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_CHKALLFILES, OnAllFiles) + COMMAND_HANDLER(IDC_CMBPROFILE, CBN_SELCHANGE, OnCbnSelChangeProfile) + COMMAND_HANDLER(IDC_CMBPATH, CBN_EDITCHANGE, OnCbnEditChangePath) + COMMAND_HANDLER(IDC_CMBPATH, CBN_SELCHANGE, OnCbnSelChangePath) + + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAllFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCbnSelChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCbnEditChangePath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnCbnSelChangePath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/Transliterator.cpp b/legacy/Transliterator_6.0/Transliterator.cpp new file mode 100644 index 0000000..5321e3e --- /dev/null +++ b/legacy/Transliterator_6.0/Transliterator.cpp @@ -0,0 +1,92 @@ +#include "stdafx.h" + +#include "resource.h" +#include "error.h" +#include "global.h" +#include "settings.h" + +#include "transliteratordlg.h" + +int Run() +{ + WTL::CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + TransliteratorDlg dlgTransliterator; + int nRet = 0; + + if(!dlgTransliterator.Show()) + { + ShowError(_T("Cannot create main window")); + _Module.RemoveMessageLoop(); + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + + return nRet; +} + +HMODULE LoadRichEditLibrary() +{ + HMODULE hRichEdit = ::LoadLibrary(_T("riched20.dll")); + if(!hRichEdit) + ShowError(_T("Cannot load riched20.dll")); + return hRichEdit; +} + +int Main(HINSTANCE hInstance) +{ + // One Instance + if(NN::SetOneInstance(_T("Transliterator 6.0"))) + { + ShowError(IDS_TRANSLITERATOR_IS_RUNNING); + return 0; + } + + // RichEdit Library + if(!LoadRichEditLibrary()) + return 0; + + if(!Settings::Load()) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + ::DefWindowProc(NULL, 0, 0, 0L); + + WTL::AtlInitCommonControls(0xFF); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(); + + Settings::Save(); + + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + g_Language.~Language(); + for(size_t i = 0;i<2; ++i) + g_Text[i].clear(); + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +{ + try + { + return Main(hInstance); + } + catch(...) + { + return -1; + } +} diff --git a/legacy/Transliterator_6.0/Transliterator.rc b/legacy/Transliterator_6.0/Transliterator.rc new file mode 100644 index 0000000..cb14a5a --- /dev/null +++ b/legacy/Transliterator_6.0/Transliterator.rc @@ -0,0 +1,978 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Transliterator.rc2" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 6,0,0,0 + PRODUCTVERSION 6,0,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "6, 0, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2005" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "6, 0, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLITERATOR ICON "res\\Transliterator.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLITERATOR DIALOGEX 0, 0, 185, 190 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | + WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +CAPTION " " +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "",IDC_GRPLANGTOP,2,2,181,80,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_GRPLANGBOTTOM,2,85,181,80,0,WS_EX_TRANSPARENT + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,186,1 +END + +IDD_PROFILEDETAILS DIALOGEX 0, 0, 111, 170 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_LBLPROFILE,2,0,32,12 + COMBOBOX IDC_CMBPROFILE,35,0,75,58,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_LBLVIEW,2,15,32,12 + COMBOBOX IDC_CMBVIEW,35,15,75,58,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,30,110,1, + WS_EX_TRANSPARENT + CONTROL "",IDC_REDETAILS,"RichEdit20A",ES_MULTILINE | + ES_READONLY | WS_BORDER | WS_VSCROLL | WS_HSCROLL | + WS_TABSTOP,0,34,110,136 +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 195, 201 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPPATH,3,0,189,33 + COMBOBOX IDC_CMBPATH,8,10,161,50,CBS_DROPDOWN | CBS_AUTOHSCROLL | + WS_TABSTOP + PUSHBUTTON "",IDC_BTNBROWSE,169,10,15,14 + GROUPBOX "",IDC_GRPFOLDER,3,35,90,70 + CONTROL "",IDC_CHKSELFOLDER,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,8,45,77,10 + CONTROL "",IDC_CHKALLFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 8,60,77,10 + CONTROL "",IDC_CHKALLFOLDERS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,8,75,77,10 + CONTROL "",IDC_CHKALLSUBFOLDERS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,8,90,77,10 + GROUPBOX "",IDC_GRPFILE,102,35,90,70 + CONTROL "",IDC_CHKNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107, + 45,77,10 + CONTROL "",IDC_CHKENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 107,60,77,10 + CONTROL "",IDC_CHKMP3TAGV1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 107,75,77,10 + CONTROL "",IDC_CHKMP3TAGV2,"Button",BS_AUTOCHECKBOX | NOT + WS_VISIBLE | WS_TABSTOP,107,90,77,10 + GROUPBOX "",IDC_GRPPROFILE,3,108,90,33 + COMBOBOX IDC_CMBPROFILE,8,121,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + GROUPBOX "",IDC_GRPIGNORE,102,108,90,23 + CONTROL "",IDC_CHKUSEIGNORE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,107,120,77,8 + GROUPBOX "",IDC_GRPDIRECTION,3,142,90,33 + COMBOBOX IDC_CMBDIRECTION,8,155,77,38,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_GRPEXTRA,102,132,90,43 + LTEXT "",IDC_LBLPREFIX,107,146,35,8 + EDITTEXT IDC_EDTPREFIX,148,143,40,12,ES_AUTOHSCROLL + LTEXT "",IDC_LBLSUFFIX,107,163,35,8 + EDITTEXT IDC_EDTSUFFIX,148,161,40,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "",IDC_BTNTRANSLATE,43,182,50,14 + PUSHBUTTON "",IDCANCEL,100,182,50,14 +END + +IDD_ABOUT DIALOGEX 0, 0, 240, 263 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0xCC +BEGIN + PUSHBUTTON "OK",IDOK,180,243,55,16 + PUSHBUTTON "",IDC_BTNEMAIL,40,225,60,13,BS_FLAT + PUSHBUTTON "",IDC_BTNSITE,40,245,60,13,BS_FLAT + LTEXT "",IDC_LBLABOUTPROGRAM,5,5,230,10,SS_SUNKEN + LTEXT "",IDC_LBLEMAIL,5,225,30,13 + LTEXT "",IDC_LBLSITE,5,245,30,13 + EDITTEXT IDC_EDTABOUT,5,20,230,200,ES_MULTILINE | ES_READONLY | + WS_VSCROLL +END + +IDD_OPTIONS DIALOGEX 0, 0, 320, 165 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LISTBOX IDC_LSTOPTIONS,0,0,70,114,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "",IDOK,10,119,50,14 + PUSHBUTTON "",IDCANCEL,10,133,50,14 + PUSHBUTTON "",IDC_BTNAPPLY,10,147,50,14 + GROUPBOX "",IDC_GRPOPTIONPLACE,75,1,240,160,NOT WS_VISIBLE +END + +IDD_PAGEGENERAL DIALOGEX 0, 0, 240, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPSTORAGE,0,0,130,159 + GROUPBOX "",IDC_GRPSTORAGETEXT,5,9,116,99 + CONTROL "",IDC_CHKSAVETEXTONEXIT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,11,23,101,8 + CONTROL "",IDC_RADTEXTREGISTRY,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,11,37,102,10 + CONTROL "",IDC_RADTEXTFILE,"Button",BS_AUTORADIOBUTTON,11,51,102, + 10 + LTEXT "",IDC_LBLTOP,11,72,50,8 + EDITTEXT IDC_EDTLANGTOP,65,69,50,14,ES_AUTOHSCROLL + LTEXT "",IDC_LBLBOTTOM,11,91,50,8 + EDITTEXT IDC_EDTLANGBOTTOM,65,89,50,14,ES_AUTOHSCROLL + GROUPBOX "",IDC_GRPSTORAGEPROFILES,5,113,116,39 + CONTROL "",IDC_RADPROFILESREGISTRY,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,11,126,103,8 + CONTROL "",IDC_RADPROFILESFILE,"Button",BS_AUTORADIOBUTTON,11, + 139,103,8 + GROUPBOX "",IDC_GRPLOADONSTARTUP,137,0,103,57 + CONTROL "",IDC_RADLOADNO,"Button",BS_AUTORADIOBUTTON | WS_GROUP, + 143,12,90,8 + CONTROL "",IDC_RADLOADSHOWN,"Button",BS_AUTORADIOBUTTON,143,27, + 90,8 + CONTROL "",IDC_RADLOADHIDDEN,"Button",BS_AUTORADIOBUTTON,143,42, + 90,8 + GROUPBOX "",IDC_GRPLANGUAGE,136,65,103,95 + CONTROL "",IDC_RADENGLISH,"Button",BS_AUTORADIOBUTTON | WS_GROUP, + 143,80,90,8 + CONTROL "",IDC_RADRUSSIAN,"Button",BS_AUTORADIOBUTTON,143,100,90, + 8 + CONTROL "",IDC_RADBELARUSIAN,"Button",BS_AUTORADIOBUTTON | + WS_DISABLED,143,120,90,8 + CONTROL "",IDC_RADTRANSLIT,"Button",BS_AUTORADIOBUTTON,143,140, + 90,8 +END + +IDD_PAGEVIEW DIALOGEX 0, 0, 240, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPCAPTION,0,0,90,35 + CONTROL "",IDC_CHKCAPTIONPROFILE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,9,77,8 + CONTROL "",IDC_CHKCAPTIONCOUNT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,23,77,8 + GROUPBOX "",IDC_GRPSTATUSBAR,0,38,90,24 + CONTROL "",IDC_CHKSTATUSBARCOUNT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,48,77,8 + GROUPBOX "",IDC_GRPTRAYICON,0,67,90,24 + CONTROL "",IDC_CHKTRAYICONSHOW,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,78,77,8 + GROUPBOX "",IDC_GRPTASKBAR,0,95,90,24 + CONTROL "",IDC_CHKTASKBARSHOW,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,106,77,8 + GROUPBOX "",IDC_GRPPLACEMENT,100,0,139,58 + CONTROL "",IDC_RADNORMAL,"Button",BS_AUTORADIOBUTTON | WS_GROUP, + 105,10,115,8 + CONTROL "",IDC_RADONTOP,"Button",BS_AUTORADIOBUTTON,105,24,115,8 + CONTROL "",IDC_RADONBOTTOM,"Button",BS_AUTORADIOBUTTON,105,40, + 115,8 + GROUPBOX "",IDC_GRPCONTROLS,0,125,90,35 + CONTROL "",IDC_CHKWRAPTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 5,134,77,8 + CONTROL "",IDC_CHKSCROLLTEXT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,148,77,8 + GROUPBOX "",IDC_GRPFONTS,100,63,139,75 + CONTROL "",IDC_REFONTLANGTOP,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,105,74,75,14 + CONTROL "",IDC_REFONTLANGBOTTOM,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,105,96,75,14 + CONTROL "",IDC_REFONTDetails,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,105,117,75,14 + PUSHBUTTON "",IDC_BTNFONTLANGTOP,180,74,55,14 + PUSHBUTTON "",IDC_BTNFONTLANGBOTTOM,180,97,55,14 + PUSHBUTTON "",IDC_BTNFONTPROFILEDETAILS,180,117,55,14 +END + +IDD_PAGEHOTKEYS DIALOGEX 0, 0, 240, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPHOTKEYS,0,0,165,53 + LTEXT "",IDC_LBLACTION,10,13,50,8 + LTEXT "",IDC_LBLHOTKEY,10,34,50,8 + COMBOBOX IDC_CMBACTION,70,10,86,61,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_HKACTION,"msctls_hotkey32",WS_BORDER | WS_TABSTOP, + 70,32,86,14 + GROUPBOX "",IDC_GRPAUTOTRANSLITERATION,0,57,165,50 + CONTROL "",IDC_RADLANGTOPTOLANGBOTTOM,"Button", + BS_AUTORADIOBUTTON | WS_GROUP,10,70,145,8 + CONTROL "",IDC_RADLANGBOTTOMTOLANGTOP,"Button", + BS_AUTORADIOBUTTON,9,90,145,8 +END + +IDD_PAGEPROFILE DIALOGEX 0, 0, 240, 159 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPPROFILE,0,0,125,27 + COMBOBOX IDC_CMBPROFILE,10,10,105,60,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_TABPROFILEACTION,"SysTabControl32",0x0,0,30,239, + 128 + GROUPBOX "",IDC_GRPPROFILEACTION,5,43,230,110,NOT WS_VISIBLE +END + +IDD_PROFILETRANSLATION DIALOGEX 0, 0, 231, 106 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_LVTRANSLATION,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOLABELWRAP | + LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | + WS_TABSTOP,2,3,170,65 + LTEXT "",IDC_LBLLANGTOP,2,75,50,8 + LTEXT "",IDC_LBLLANGBOTTOM,2,89,50,8 + CONTROL "",IDC_RELANGTOP,"RichEdit20A",ES_AUTOHSCROLL | + ES_WANTRETURN | WS_BORDER | WS_TABSTOP,55,71,40,14 + CONTROL "",IDC_RELANGBOTTOM,"RichEdit20A",ES_AUTOHSCROLL | + ES_WANTRETURN | WS_BORDER | WS_TABSTOP,55,87,40,14 + CONTROL "",IDC_CHKLANGTOPTOLANGBOTTOM,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,105,74,119,10 + CONTROL "",IDC_CHKLANGBOTTOMTOLANGTOP,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,105,89,119,10 + PUSHBUTTON "",IDC_BTNADD,180,30,50,14 + PUSHBUTTON "",IDC_BTNDELETE,180,50,50,14 +END + +IDD_PROFILEIGNORE DIALOGEX 0, 0, 230, 110 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPIGNORE,0,0,125,56 + LTEXT "",IDC_LBLLANGTOP,5,23,50,8 + LTEXT "",IDC_LBLLANGBOTTOM,5,40,50,8 + LTEXT "",IDC_LBLBEGIN,60,10,27,8 + LTEXT "",IDC_LBLEND,93,10,27,8 + CONTROL "",IDC_REBEGINTOP,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,57,20,30,14 + CONTROL "",IDC_REENDTOP,"RichEdit20A",ES_AUTOHSCROLL | WS_BORDER | + WS_TABSTOP,91,21,30,14 + CONTROL "",IDC_REBEGINBOTTOM,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,57,38,30,14 + CONTROL "",IDC_REENDBOTTOM,"RichEdit20A",ES_AUTOHSCROLL | + WS_BORDER | WS_TABSTOP,91,38,30,14 + GROUPBOX "",IDC_GRPIGNORETEXT,130,0,99,110 + LTEXT "",IDC_LBLTEXT,133,17,33,8 + CONTROL "",IDC_RETEXT,"RichEdit20A",ES_AUTOHSCROLL | WS_BORDER | + WS_TABSTOP,170,14,57,14 + CONTROL "",IDC_CHKLANGTOPTOLANGBOTTOM,"Button",BS_AUTOCHECKBOX | + BS_MULTILINE | WS_TABSTOP,133,34,90,16 + CONTROL "",IDC_CHKLANGBOTTOMTOLANGTOP,"Button",BS_AUTOCHECKBOX | + BS_MULTILINE | WS_TABSTOP,133,57,90,16 + PUSHBUTTON "",IDC_BTNADD,134,79,50,14 + PUSHBUTTON "",IDC_BTNDELETE,134,93,50,14 + CONTROL "",IDC_LVIGNORETEXT,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,0,60,124,50 +END + +IDD_PROFILEEXPORTIMPORT DIALOGEX 0, 0, 230, 110 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPEXPORTIMPORT,5,5,191,85 + LTEXT "",IDC_LBLPATH,15,25,30,8 + EDITTEXT IDC_EDTPATH,50,22,110,14,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BTNBROWSE,160,22,21,14 + CONTROL "",IDC_CHKUNICODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 16,45,92,8 + PUSHBUTTON "",IDC_BTNEXPORT,50,60,50,14 + PUSHBUTTON "",IDC_BTNIMPORT,125,60,50,14 +END + +IDD_PROFILECOPYPROFILE DIALOGEX 0, 0, 230, 110 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPCOPYPROFILE,5,5,157,82 + LTEXT "",IDC_LBLFROM,21,23,40,8 + LTEXT "",IDC_LBLTO,20,45,40,8 + COMBOBOX IDC_CMBFROM,70,21,84,45,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + COMBOBOX IDC_CMBTO,70,43,84,45,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "",IDC_BTNCOPY,105,65,50,14 +END + +IDD_PROFILENAME DIALOGEX 0, 0, 230, 110 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPNAME,5,5,172,101 + LTEXT "",IDC_LBLPROFILENAME,15,23,70,8 + LTEXT "",IDC_LBLLANGTOP,15,44,70,8 + LTEXT "",IDC_LBLLANGBOTTOM,15,66,70,8 + EDITTEXT IDC_EDTPROFILENAME,90,19,75,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDTLANGTOP,90,40,75,14,ES_AUTOHSCROLL + EDITTEXT IDC_EDTLANGBOTTOM,90,63,75,14,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BTNSET,115,85,50,14 +END + +IDD_PROFILERESET DIALOGEX 0, 0, 230, 110 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPRESET,5,5,145,100 + CONTROL "",IDC_CHKRESETTRANSLATION,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,15,20,125,8 + CONTROL "",IDC_CHKRESETIGNORE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,15,36,125,8 + CONTROL "",IDC_CHKRESETIGNORETEXT,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,15,53,125,8 + CONTROL "",IDC_CHKRESETNAME,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,15,69,125,8 + PUSHBUTTON "",IDC_BTNRESET,95,85,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLITERATOR, DIALOG + BEGIN + RIGHTMARGIN, 177 + BOTTOMMARGIN, 185 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + BOTTOMMARGIN, 196 + END + + IDD_PROFILETRANSLATION, DIALOG + BEGIN + RIGHTMARGIN, 230 + BOTTOMMARGIN, 105 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLITERATOR ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_PROFILEDETAILS, VIRTKEY, NOINVERT + VK_F4, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "1", ID_PROFILE1, VIRTKEY, CONTROL, NOINVERT + "2", ID_PROFILE2, VIRTKEY, CONTROL, NOINVERT + "3", ID_PROFILE3, VIRTKEY, CONTROL, NOINVERT + "4", ID_PROFILE4, VIRTKEY, CONTROL, NOINVERT + "5", ID_PROFILE5, VIRTKEY, CONTROL, NOINVERT + "6", ID_PROFILE6, VIRTKEY, CONTROL, NOINVERT + "7", ID_PROFILE7, VIRTKEY, CONTROL, NOINVERT + "8", ID_PROFILE8, VIRTKEY, CONTROL, NOINVERT + "9", ID_PROFILE9, VIRTKEY, CONTROL, NOINVERT + "0", ID_PROFILE10, VIRTKEY, CONTROL, NOINVERT + "I", ID_EDIT_IGNORE_INSERT, VIRTKEY, SHIFT, ALT, NOINVERT + "R", ID_EDIT_IGNORE_REMOVE, VIRTKEY, SHIFT, ALT, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLITERATOR MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_EXIT + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_LANGTOPTOLANGBOTTOM + + MENUITEM " ", ID_EDIT_COPY_LANGBOTTOMTOLANGTOP + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + MENUITEM " ", ID_PROFILE10 + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_PROFILEDETAILS + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_ACTION_TRANSLITERATION + + MENUITEM " ", ID_TOOLS_ACTION_IGNORE + MENUITEM " ", ID_TOOLS_ACTION_IGNORETEXT + + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_ACTION_COPYIGNORE + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + END +END + +IDR_TRAYICON MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_PROFILEDETAILS + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + MENUITEM " ", ID_PROFILE10 + END + MENUITEM SEPARATOR + MENUITEM " ", ID_SHOW + MENUITEM " ", ID_HIDE + MENUITEM SEPARATOR + MENUITEM " ", ID_APP_EXIT + END +END + +IDR_PROFILE MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + MENUITEM " ", ID_PROFILE10 + END +END + +IDR_EDIT MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_LANGTOPTOLANGBOTTOM + + MENUITEM " ", ID_EDIT_COPY_LANGBOTTOMTOLANGTOP + + END + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + MENUITEM " ", ID_PROFILE10 + END + END +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Transliterator.rc2""\r\n" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT " \n \n" + ID_EDIT_IGNORE_REMOVE " \n \n" + ID_EDIT_COPY_LANGTOPTOLANGBOTTOM + " \n " +END + +STRINGTABLE +BEGIN + ID_EDIT_COPY_LANGBOTTOMTOLANGTOP + " \n " + ID_TOOLS_PROFILEDETAILS " \n " + ID_TOOLS_TRANSLATEFILES " \n \n" + ID_TOOLS_OPTIONS " \n" + ID_TOOLS_ACTION_TRANSLITERATION " \n" + ID_TOOLS_ACTION_IGNORE " \n\n" +END + +STRINGTABLE +BEGIN + ID_TOOLS_ACTION_IGNORETEXT + " \n \n" + ID_TOOLS_ACTION_COPYIGNORE "Copy Ignore\nCopy Ignore" +END + +STRINGTABLE +BEGIN + ID_SHOW " \n" + ID_HIDE " \n" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + IDS_ERROR "" + IDS_HELP "" + IDS_TRANSLATION "" + IDS_IGNORE "" + IDS_IGNORETEXT " " + IDS_ALL "" + IDS_DONE "" + IDS_BOLD "" + IDS_ITALIC "" + IDS_UNDERLINE "" + IDS_STRIKEOUT "" + IDS_NEWVERSION " .\n .\n ?" + IDS_IMPORT " " + IDS_EXPORT " " + IDS_TRANSLATEFILES " " + IDS_BEGIN "" + IDS_TRANSLITERATOR_IS_RUNNING " " +END + +STRINGTABLE +BEGIN + IDS_END "" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Insert ignore symbols\nInsert ignore" + ID_EDIT_IGNORE_REMOVE "Remove ignore symbols\nRemove ignore" + ID_EDIT_COPY_LANGTOPTOLANGBOTTOM + "Copy text from Top to Bottom\nCopy Top to Bottom" +END + +STRINGTABLE +BEGIN + ID_EDIT_COPY_LANGBOTTOMTOLANGTOP + "Copy text from Bottom to Top\nCopy Bottom to Top" + ID_TOOLS_PROFILEDETAILS "Show or hide Profile Details window\nProfile Details" + ID_TOOLS_TRANSLATEFILES "Show or hide Translate Files window\nTranslate Files" + ID_TOOLS_OPTIONS "Show or hide Options window\nOptions" + ID_TOOLS_ACTION_TRANSLITERATION "Enable Tranliteration\nTransliteration" + ID_TOOLS_ACTION_IGNORE "Enable Ignore\nIgnore" +END + +STRINGTABLE +BEGIN + ID_TOOLS_ACTION_IGNORETEXT "Enable Ignore Text\nIgnore Text" + ID_TOOLS_ACTION_COPYIGNORE "Copy Ignore\nCopy Ignore" +END + +STRINGTABLE +BEGIN + ID_SHOW "Show application window\nShow" + ID_HIDE "Hide application window\nHide" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Error" + IDS_HELP "Help" + IDS_TRANSLATION "Translation" + IDS_IGNORE "Ignore" + IDS_IGNORETEXT "Ignore text" + IDS_ALL "All" + IDS_DONE "Done" + IDS_BOLD "Bold" + IDS_ITALIC "Italic" + IDS_UNDERLINE "Underline" + IDS_STRIKEOUT "StrikeOut" + IDS_NEWVERSION "You have used other version of Transliterator.\nIn order to use this version the settings must be reset\nDo you want to use this version ?" + IDS_IMPORT "Cannot import" + IDS_EXPORT "Cannot export" + IDS_TRANSLATEFILES "Cannot translate" + IDS_BEGIN "Begin" + IDS_TRANSLITERATOR_IS_RUNNING "Transliterator is already runs" +END + +STRINGTABLE +BEGIN + IDS_END "End" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Transliterator_6.0/Transliterator.rc2 b/legacy/Transliterator_6.0/Transliterator.rc2 new file mode 100644 index 0000000..ad61082 --- /dev/null +++ b/legacy/Transliterator_6.0/Transliterator.rc2 @@ -0,0 +1,640 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Transliterator.exe.manifest" + +#define SUBLANG_LOC 0x30 +#define SUBLANG_LOC2 0x31 + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDOK "OK" + IDCANCEL "" + IDD_TRANSLATEFILES " " + IDD_OPTIONS "" + IDD_ABOUT " " + IDD_PROFILEDETAILS " " + IDC_LBLPROFILE ":" + IDC_LBLVIEW ":" + IDC_CMBVIEW "\n\n \n" + IDC_EDTABOUT " () .\r\n :\r\n (translit , translit).\r\n :\r\n - translit > , > translit\r\n- qwerty > (ycuken), (ycuken) > qwerty\r\n- (Russkiy) > CuMBo/\bHblu`, CuMBo/\bHblu` > (Russkiy)\r\n- Win > DOS, DOS > Win\r\n- Win > KOI8-R, KOI8-R > Win\r\n- Rus > Heb, Heb > Rus\r\n- > \r\n ( , ).\r\n : /, .\r\n ( , , MP3 )\r\n , .\r\n : English, Translit\r\n :\r\nWindows 95 RichEdit 3.0 ( Internet Explorer 5.0 )\r\n ""-"".\r\n , .\r\n :\r\n :Myxamore6e , DnAp Shark.\r\n\r\nNN.\r\n : \r\n : NN" + IDC_LBLABOUTPROGRAM " 6.0 Copyright (C) 2003 - 2005" + IDC_LBLEMAIL ".:" + IDC_BTNEMAIL "nn-mail@bk.ru" + IDC_LBLSITE ":" + IDC_BTNSITE "http://our-site.nm.ru" + IDC_GRPPATH "" + IDC_BTNBROWSE "..." + IDC_GRPFOLDER "" + IDC_CHKSELFOLDER " " + IDC_CHKALLFILES " " + IDC_CHKALLFOLDERS " " + IDC_CHKALLSUBFOLDERS " " + IDC_GRPFILE "" + IDC_CHKNAME "" + IDC_CHKENTRY "" + IDC_CHKMP3TAGV1 "MP3V1" + IDC_CHKMP3TAGV2 "MP3V2" + IDC_GRPPROFILE "" + IDC_GRPIGNORE "" + IDC_CHKUSEIGNORE "" + IDC_GRPDIRECTION "" + IDC_GRPEXTRA "" + IDC_LBLPREFIX ":" + IDC_LBLSUFFIX ":" + IDC_BTNTRANSLATE "" + IDC_BTNAPPLY "" + IDC_LSTOPTIONS "\n\n \n" + IDC_LBLPROFILENAME " :" + IDC_BTNSET "" + IDC_GRPLANGUAGE "" + IDC_RADENGLISH "English" + IDC_RADRUSSIAN "" + IDC_RADBELARUSIAN "" + IDC_RADTRANSLIT "Translit" + IDC_GRPHOTKEYS " " + IDC_LBLACTION ":" + IDC_LBLHOTKEY ":" + IDC_CMBACTION " \n \n \n/\n " + IDC_GRPAUTOTRANSLITERATION " " + IDC_GRPCAPTION "" + IDC_CHKCAPTIONPROFILE "" + IDC_CHKCAPTIONCOUNT " " + IDC_GRPSTATUSBAR " " + IDC_CHKSTATUSBARCOUNT " " + IDC_GRPTRAYICON " " + IDC_CHKTRAYICONSHOW "" + IDC_GRPTASKBAR " " + IDC_CHKTASKBARSHOW "" + IDC_GRPPLACEMENT "" + IDC_RADNORMAL "" + IDC_RADONTOP "" + IDC_RADONBOTTOM "" + IDC_GRPCONTROLS " " + IDC_CHKWRAPTEXT " " + IDC_CHKSCROLLTEXT " " + IDC_GRPFONTS "" + IDC_BTNFONTPROFILEDETAILS "" + IDC_GRPLOADONSTARTUP " " + IDC_RADLOADNO "" + IDC_RADLOADSHOWN "" + IDC_RADLOADHIDDEN "" + IDC_CHKSAVETEXTONEXIT " " + IDC_GRPSTORAGE "" + IDC_GRPSTORAGETEXT "" + IDC_RADTEXTREGISTRY "" + IDC_RADTEXTFILE "" + IDC_LBLTOP ":" + IDC_LBLBOTTOM ":" + IDC_GRPSTORAGEPROFILES "" + IDC_RADPROFILESREGISTRY "" + IDC_RADPROFILESFILE "" + IDC_TABPROFILEACTION "\n\n/\n\n\n" + IDC_LBLBEGIN "" + IDC_LBLEND "" + IDC_GRPIGNORETEXT " " + IDC_LBLTEXT ":" + IDC_GRPNAME "" + IDC_LBLLANGTOP " :" + IDC_LBLLANGBOTTOM " :" + IDC_BTNADD "" + IDC_BTNDELETE "" + IDC_GRPCOPYPROFILE " " + IDC_LBLFROM ":" + IDC_LBLTO ":" + IDC_BTNCOPY "" + IDC_GRPRESET "" + IDC_CHKRESETTRANSLATION "" + IDC_CHKRESETIGNORE "" + IDC_CHKRESETIGNORETEXT " " + IDC_CHKRESETNAME "" + IDC_BTNRESET "" + IDC_GRPEXPORTIMPORT "/" + IDC_LBLPATH ":" + IDC_CHKUNICODE "" + IDC_BTNEXPORT "" + IDC_BTNIMPORT "" + ID_APP_EXIT "\tAlt+F4" + ID_EDIT_UNDO "\tCtrl+Z" + ID_EDIT_REDO "\tCtrl+Y" + ID_EDIT_CUT "\tCtrl+X" + ID_EDIT_COPY "\tCtrl+C" + ID_EDIT_PASTE "\tCtrl+V" + ID_EDIT_CLEAR "\tDel" + ID_EDIT_CLEAR_ALL " " + ID_EDIT_SELECT_ALL " \tCtrl+A" + ID_EDIT_IGNORE_INSERT "\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "\tAlt+Shift+R" + ID_TOOLS_PROFILEDETAILS " ...\tF3" + ID_TOOLS_TRANSLATEFILES " ...\tF4" + ID_TOOLS_OPTIONS "...\tF2" + ID_TOOLS_ACTION_TRANSLITERATION "" + ID_TOOLS_ACTION_IGNORE "" + ID_TOOLS_ACTION_IGNORETEXT " " + ID_TOOLS_ACTION_COPYIGNORE " " + ID_APP_ABOUT " ...\tF1" + ID_SHOW " " + ID_HIDE " " +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "\n\n\n\n\n\n\n" + IDR_TRAYICON "1\n" + IDR_EDIT "1\n\n\n" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDOK "OK" + IDCANCEL "Cancel" + IDD_TRANSLATEFILES "Translate Files" + IDD_OPTIONS "Options" + IDD_ABOUT "About" + IDD_PROFILEDETAILS "Profile Details" + IDC_LBLPROFILE "Profile:" + IDC_LBLVIEW "View:" + IDC_CMBVIEW "Translation\nIgnore\nIgnore Text\nAll" + IDC_EDTABOUT "This program works with russian (cyrillic) letters and translation russian letters into translit and translit letters into russian\r\nShort review:\r\nTranslation two-way (translit into russian, russian into translit).\r\nDifferent profiles of transliteration:\r\n- translit > russian, russian > translit\r\n- qwerty > (ycuken), (ycuken) > qwerty\r\n- (Russkiy) > CuMBo/\bHblu`, CuMBo/\bHblu` > (Russkiy)\r\n- Win > DOS, DOS > Win\r\n- Win > KOI8-R, KOI8-R > Win\r\n- Rus > Heb, Heb > Rus\r\n- User > User\r\nIgnore symbols (after insertion this symbol some part of will no be transliterated\r\nHot Keys: show/hide, auto transliteration\r\nTransliteration files (file name or folder, entry of the file, MP3 tags)\r\nOptions for change: (transliteration, ignore), transliteration profiles and hot keys\r\nMinimization to tray icon and option to show or hide tray icon\r\nInterface languages: English, and Translit\r\nMinimal requirements:\r\nWindows 95 and RichEdit version 3.0 (Internet Explorer 5.0 and higher)\r\nThis program is freeware and provided ""AS-IS"".\r\nI take no responsibility for any damage this program cause.\r\nSpecial thanks to :\r\nTesting : Myxamore6e , DnAp , Shark.\r\nTranslation : \r\n\r\nAuthor : NN." + IDC_LBLABOUTPROGRAM "Transliterator 6.0 Copyright (C) 2003 - 2005" + IDC_LBLEMAIL "E-mail:" + IDC_BTNEMAIL "nn-mail@bk.ru" + IDC_LBLSITE "Site:" + IDC_BTNSITE "http://our-site.nm.ru" + IDC_GRPPATH "Path" + IDC_BTNBROWSE "..." + IDC_GRPFOLDER "Folder" + IDC_CHKSELFOLDER "Selected Folder" + IDC_CHKALLFILES "All Files" + IDC_CHKALLFOLDERS "All Folders" + IDC_CHKALLSUBFOLDERS "All SubFolders" + IDC_GRPFILE "File" + IDC_CHKNAME "Name" + IDC_CHKENTRY "Entry" + IDC_CHKMP3TAGV1 "MP3TagV1" + IDC_CHKMP3TAGV2 "MP3TagV2" + IDC_GRPPROFILE "Profile" + IDC_GRPIGNORE "Ignore" + IDC_CHKUSEIGNORE "Use Ignore" + IDC_GRPDIRECTION "Direction" + IDC_GRPEXTRA "Extra" + IDC_LBLPREFIX "Prefix:" + IDC_LBLSUFFIX "Suffix:" + IDC_BTNTRANSLATE "Translate" + IDC_BTNAPPLY "Apply" + IDC_LSTOPTIONS "General\nView\nHot Keys\nProfile" + IDC_LBLPROFILENAME "Profile Name:" + IDC_BTNSET "Set" + IDC_GRPLANGUAGE "Language" + IDC_RADENGLISH "English" + IDC_RADRUSSIAN "Russian" + IDC_RADBELARUSIAN "Belarusian" + IDC_RADTRANSLIT "Translit" + IDC_GRPHOTKEYS "Hot Keys" + IDC_LBLACTION "Action:" + IDC_LBLHOTKEY "Hot Key:" + IDC_CMBACTION " \n \nAuto Transliteration\nShow/Hide\nCopy Ignore" + IDC_GRPAUTOTRANSLITERATION "Auto Transliteration" + IDC_GRPCAPTION "Caption" + IDC_CHKCAPTIONPROFILE "Profile" + IDC_CHKCAPTIONCOUNT "Symbols count" + IDC_GRPSTATUSBAR "Status Bar" + IDC_CHKSTATUSBARCOUNT "Symbols count" + IDC_GRPTRAYICON "Tray Icon" + IDC_CHKTRAYICONSHOW "Show" + IDC_GRPTASKBAR "Task Bar" + IDC_CHKTASKBARSHOW "Show" + IDC_GRPPLACEMENT "Placement" + IDC_RADNORMAL "Normal" + IDC_RADONTOP "On Top" + IDC_RADONBOTTOM "On Bottom" + IDC_GRPCONTROLS "Controls" + IDC_CHKWRAPTEXT "Wrap words" + IDC_CHKSCROLLTEXT "Scroll text" + IDC_GRPFONTS "Fonts" + IDC_BTNFONTPROFILEDETAILS "Profile Details" + IDC_GRPLOADONSTARTUP "Load on Start Up" + IDC_RADLOADNO "No" + IDC_RADLOADSHOWN "Shown" + IDC_RADLOADHIDDEN "Hidden" + IDC_CHKSAVETEXTONEXIT "Save Text on Exit" + IDC_GRPSTORAGE "Storage" + IDC_GRPSTORAGETEXT "Text" + IDC_RADTEXTREGISTRY "Registry" + IDC_RADTEXTFILE "File" + IDC_LBLTOP "Top:" + IDC_LBLBOTTOM "Bottom:" + IDC_GRPSTORAGEPROFILES "Profiles" + IDC_RADPROFILESREGISTRY "Registry" + IDC_RADPROFILESFILE "File" + IDC_TABPROFILEACTION "Translation\nIgnore\nExport/Import\nCopy Profile\nName\nReset" + IDC_LBLBEGIN "Begin" + IDC_LBLEND "End" + IDC_GRPIGNORETEXT "IgnoreText" + IDC_LBLTEXT "Text:" + IDC_GRPNAME "Name" + IDC_LBLLANGTOP "Top Language:" + IDC_LBLLANGBOTTOM "Bottom Language:" + IDC_BTNADD "Add" + IDC_BTNDELETE "Delete" + IDC_GRPCOPYPROFILE "Copy Profile" + IDC_LBLFROM "From:" + IDC_LBLTO "To:" + IDC_BTNCOPY "Copy" + IDC_GRPRESET "Reset" + IDC_CHKRESETTRANSLATION "Translation" + IDC_CHKRESETIGNORE "Ignore" + IDC_CHKRESETIGNORETEXT "IgnoreText" + IDC_CHKRESETNAME "Name" + IDC_BTNRESET "Reset" + IDC_GRPEXPORTIMPORT "Export/Import" + IDC_LBLPATH "Path:" + IDC_CHKUNICODE "Unicode" + IDC_BTNEXPORT "Export" + IDC_BTNIMPORT "Import" + ID_APP_EXIT "Exit\tAlt+F4" + ID_EDIT_UNDO "Undo\tCtrl+Z" + ID_EDIT_REDO "Redo\tCtrl+Y" + ID_EDIT_CUT "Cut\tCtrl+X" + ID_EDIT_COPY "Copy\tCtrl+C" + ID_EDIT_PASTE "Paste\tCtrl+V" + ID_EDIT_CLEAR "Delete\tDel" + ID_EDIT_CLEAR_ALL "Delete All" + ID_EDIT_SELECT_ALL "Select All\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Insert\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Remove\tAlt+Shift+R" + ID_TOOLS_PROFILEDETAILS "Profile Details...\tF3" + ID_TOOLS_TRANSLATEFILES "Translate Files...\tF4" + ID_TOOLS_OPTIONS "Options...\tF2" + ID_TOOLS_ACTION_TRANSLITERATION "Transliteration" + ID_TOOLS_ACTION_IGNORE "Ignore" + ID_TOOLS_ACTION_IGNORETEXT "Ignore Text" + ID_TOOLS_ACTION_COPYIGNORE "Copy Ignore" + ID_APP_ABOUT "About...\tF1" + ID_SHOW "Show window" + ID_HIDE "Hide window" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC2) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Main\nEdit\nIgnore\nCopy\nProfile\nTools\nAction\nHelp" + IDR_TRAYICON "1\nProfile" + IDR_EDIT "1\nIgnore\nCopy\nProfile" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, (SUBLANG_DEFAULT+4) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Sozdanie novogo okna\nSozdat'" + ID_FILE_OPEN "Otkry'tie susch'estvuesch'ego dokumenta\nOtkry't'" + ID_FILE_CLOSE "Zakry'tie aktivnogo okna\nZakry't'" + ID_FILE_SAVE "Sohranenie aktivnogo dokumenta\nSohranit'" + ID_FILE_SAVE_AS "Sohranenie aktivnogo dokumenta pod drugim imenem\nSohranit' kak" + ID_FILE_PAGE_SETUP "Izmenenie parametrov stranicy'\nParametry' stranicy'" + ID_FILE_PRINT_SETUP "Smena prontera i izmenenie ego parametrov\nNastroyka printera" + ID_FILE_PRINT "Pechat' aktivnogo dokumenta\nPechat'" + ID_FILE_PRINT_PREVIEW "Prosmotr pechataemogo materiala v polnostranichnom rejime\nPredvaritel'ny'y prosmotr" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Vstavit' simvoly' ignorirovaniya\nVstavit' ignorirovanie\n" + ID_EDIT_IGNORE_REMOVE "Udalit' simvoly' ignorirovaniya\nUdalit' ignorirovanie\n" + ID_EDIT_COPY_LANGTOPTOLANGBOTTOM + "Kopirovat' tekst sverhu vniz\nKopirovat' sverhu vniz" + +END + +STRINGTABLE +BEGIN + ID_EDIT_COPY_LANGBOTTOMTOLANGTOP + "Kopirovat' tekst snizu vverh\nKopirovat' snizu vverh" + ID_TOOLS_PROFILEDETAILS "Pokazat' ili skry't' okno Detaley Profiley\nDetali Profiley" + ID_TOOLS_TRANSLATEFILES "Pokazat' ili skry't' okno Perevoda Faylov\nPerevod Faylov\n" + ID_TOOLS_OPTIONS "Pokazat' ili skry't' okno Opciy\nOpcii" + ID_TOOLS_ACTION_TRANSLITERATION "Razreshit' transliteraciyu\nTransliteraciya" + ID_TOOLS_ACTION_IGNORE "Razreshit' Ignorirovanie\nIgnorirovanie\n" +END + +STRINGTABLE +BEGIN + ID_TOOLS_ACTION_IGNORETEXT "Razreshit' Ignoriruemy'y tekst\nIgnoriruemy'y tekst\n" + ID_TOOLS_ACTION_COPYIGNORE "Copy Ignore\nCopy Ignore" + ID_SHOW "Pokazat' glavnoe okno\nPokazat'" + ID_HIDE "Skry't' glavnoe okno\nSkry't'" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Vy'vod svedeniy o programme\nO programme" + ID_APP_EXIT "Zavershenie raboty' s prilojeniem\nVy'hod" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Perehod k sleduyusch'ey paneli okna\nSleduyusch'aya panel'" + ID_PREV_PANE "Perehod k predy'dusch'ey paneli okna\nPredy'dusch'aya panel'" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Otkry't' drugoe okno\nNovoe okno" + ID_WINDOW_ARRANGE "Uporyadochit' znachki v nijney chasti okna\nUporyadochit' znachki" + ID_WINDOW_CASCADE "Uporyadochit' okna takim obrazom, chtoby' oni perekry'valis'\nKaskadirovat' okna" + ID_WINDOW_TILE_HORZ "Uporyadochit' okna po gorizontali\nUporyadochit' po gorizontali" + ID_WINDOW_TILE_VERT "Uporyadochit' okna po vertikali\nUporyadochit' po vertikali" + ID_WINDOW_SPLIT "Razbit' aktivnoe okno na paneli\nRazbit'" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Udalenie vy'delenongo fragmenta\nUdalit'" + ID_EDIT_CLEAR_ALL "Udalit' vse\nUdalit' vse" + ID_EDIT_COPY "Kopirovanie vy'delennogo fragmenta v bufer obmena\nKopirovat' v buffer" + ID_EDIT_CUT "Udalenie vy'delennogo fragmenta v bufer obmena\nUdalit' v buffer" + ID_EDIT_FIND "Poisk zadannogo tekstaNayti" + ID_EDIT_PASTE "Vstavka soderjimogo buffera obmena\nVstavit'" + ID_EDIT_REPEAT "Povtorit' poslednee deystvie\nPovtorit'" + ID_EDIT_REPLACE "Zamena teksta\nZamenit'" + ID_EDIT_SELECT_ALL "Vy'delenie vsego dokumenta celikom\nVy'delit' vse" + ID_EDIT_UNDO "Otmena poslednego vy'polnennogo deystviya\nOtmena" + ID_EDIT_REDO "Vernut' rezul'tat poslednego otmenennogo deystviya\nVernut'" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Izmenenie razmerov okna" + ATL_IDS_SCMOVE "Izmenenie polojeniya okna" + ATL_IDS_SCMINIMIZE "Minimizaciya okna" + ATL_IDS_SCMAXIMIZE "Maksimizaciya okna" + ATL_IDS_SCNEXTWINDOW "Perehod k sleduyusch'emu oknu" + ATL_IDS_SCPREVWINDOW "Perehod k predy'dusch'emu oknu" + ATL_IDS_SCCLOSE "Zakry'tie aktivnogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Vosstanovlenie razmerov okna" + ATL_IDS_SCTASKLIST "Aktivizaciya spiska zadach" + ATL_IDS_MDICHILD "Aktivizaciya dannogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Otkry't' e`tot dokument" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Oshibka" + IDS_HELP "Pomosch''" + IDS_TRANSLATION "Perevod" + IDS_IGNORE "Ignorirovanie" + IDS_IGNORETEXT "Ignoriruemy'y tekst" + IDS_ALL "Vse" + IDS_DONE "Gotovo" + IDS_BOLD "Vy'delenny'y" + IDS_ITALIC "Kursiv" + IDS_UNDERLINE "Podcherknuty'y" + IDS_STRIKEOUT "Zacherknuty'y" + IDS_NEWVERSION "Vy' ispol'zovali druguyu versiyu Transliteratora.\nDlya ispol'zovaniya e`toy versii nastroyki doljny' by't' sbrosheny'.\nVy' hotite ispol'zovat' e`tu versiyu ?" + IDS_EXPORT "Ne vozmojno e`ksportirovat'" + IDS_IMPORT "Ne vozmojno importirovat'" + IDS_TRANSLATEFILES "Ne vozmojno perevesti" + IDS_BEGIN "Nachalo" + IDS_END "Konec" + IDS_TRANSLITERATOR_IS_RUNNING "Transliterator uje zapusch'en" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDOK "OK" + IDCANCEL "Otmena" + IDD_TRANSLATEFILES "Perevod Faylov" + IDD_OPTIONS "Opcii" + IDD_ABOUT "O Programme" + IDD_PROFILEDETAILS "Detali Profiley" + IDC_LBLPROFILE "Profil':" + IDC_LBLVIEW "Vid:" + IDC_CMBVIEW "Transliteraciya\nIgnorirovanie\nIgnoriruemy'y tekst\nVse" + IDC_EDTABOUT "Programma dlya raboty' s russkimi (kirillicheskimi) bukvami i transliteraciya russkih bukv v translit i naoborot.\r\nKratkoe opisanie:\r\nTransliteraciya v oboih napravleniyah (translit v russkiy, russkiy v translit).\r\nRazlichny'e profili transliteracii:\r\n - translit > kirillica, kirillica > translit\r\n- qwerty > ycuken(ycuken), ycuken(ycuken) > qwerty\r\n- Russkiy(Russkiy) > CuMBo/\bHblu`, CuMBo/\bHblu` > Russkiy(Russkiy)\r\n- Win > DOS, DOS > Win\r\n- Win > KOI8-R, KOI8-R > Win\r\n- Rus > Heb, Heb > Rus\r\n- Pol'zovatel'skiy > Pol'zovatel'skiy\r\nSimvoly' ignorirovaniya Transliteraciyaa (posle ustanovki takogo simvola, ukazannaya chast' teksta ne transliteruyutsya).\r\nGoryachie klavishy' : pokaz/skry'tie, avtomaticheskaya transliteracaya.\r\nTransliteraciya faylov (nazvanie fayla ili papki, soderjanie teksta, MP3 te`gi)\r\nSvorachivanie v ikonku , a takje nastroyki pokaza i skry'tiya ikonki v sistemnoy paneli.\r\nYAzy'ki interfeysa: English, Russkiy i Translit\r\nMinimal'ny'y trebovaniya:\r\nWindows 95 i RichEdit versii 3.0 (vhodit v sostav Internet Explorer 5.0 i vy'she)\r\nE`ta programma besplatna i predostavlena ""KAK-EST''"".\r\nYA ne nesu nikakoy otvetsvennosti za usherb , kotory'y mojet by't' nanesen.\r\nBlagodarnosti :\r\nTestirovanie :Myxamore6e , DnAp i Shark.\r\n\r\nNN.\r\nPerevod : \r\nAvtor : NN" + IDC_LBLABOUTPROGRAM "Transliterator 6.0 Copyright (C) 2003 - 2005" + IDC_LBLEMAIL "E`l.Pochta:" + IDC_BTNEMAIL "nn-mail@bk.ru" + IDC_LBLSITE "Sayt:" + IDC_BTNSITE "http://our-site.nm.ru" + IDC_GRPPATH "Put'" + IDC_BTNBROWSE "..." + IDC_GRPFOLDER "Papka" + IDC_CHKSELFOLDER "Vy'brannaya papka" + IDC_CHKALLFILES "Vse Fayly'" + IDC_CHKALLFOLDERS "Vse Papki" + IDC_CHKALLSUBFOLDERS "Vse PodPapki" + IDC_GRPFILE "Fayl" + IDC_CHKNAME "Imya" + IDC_CHKENTRY "Soderjimoe" + IDC_CHKMP3TAGV1 "MP3TegV1" + IDC_CHKMP3TAGV2 "MP3TegV2" + IDC_GRPPROFILE "Profil'" + IDC_GRPIGNORE "Ignorirovanie" + IDC_CHKUSEIGNORE "Ispol'zovat'" + IDC_GRPDIRECTION "Napravlenie" + IDC_GRPEXTRA "Dopolnitel'no" + IDC_LBLPREFIX "Prefiks:" + IDC_LBLSUFFIX "Suffiks:" + IDC_BTNTRANSLATE "Perevesti" + IDC_BTNAPPLY "Primenit'" + IDC_LSTOPTIONS "Obsch'ie\nVid\nGoryachie klavishi\nProfil'" + IDC_LBLPROFILENAME "Nazvanie Profilya:" + IDC_BTNSET "Ustanovit'" + IDC_GRPLANGUAGE "YAzy'k" + IDC_RADENGLISH "English" + IDC_RADRUSSIAN "Russkiy" + IDC_RADBELARUSIAN "Belorusskiy" + IDC_RADTRANSLIT "Translit" + IDC_GRPHOTKEYS "Goryachie klavishi" + IDC_LBLACTION "Deystvie:" + IDC_LBLHOTKEY "Klavisha:" + IDC_CMBACTION " \n \nAvto Transliteraciya\nPokazat'/Skry't'\nKopirovat' Ignorirovanie" + IDC_GRPAUTOTRANSLITERATION "Avto Transliteraciya" + IDC_GRPCAPTION "Zagolovok" + IDC_CHKCAPTIONPROFILE "Profil'" + IDC_CHKCAPTIONCOUNT "Podschet simvolov" + IDC_GRPSTATUSBAR "Stroka sostoyaniya" + IDC_CHKSTATUSBARCOUNT "Podschet simvolov" + IDC_GRPTRAYICON "Sistemnaya ikonka" + IDC_CHKTRAYICONSHOW "Pokazat'" + IDC_GRPTASKBAR "Panel' zadach" + IDC_CHKTASKBARSHOW "Pokazat'" + IDC_GRPPLACEMENT "Raspolojenie" + IDC_RADNORMAL "Oby'chno" + IDC_RADONTOP "Naverhu" + IDC_RADONBOTTOM "Vnizu" + IDC_GRPCONTROLS "E`lementy' upravleniya" + IDC_CHKWRAPTEXT "Perenos slov" + IDC_CHKSCROLLTEXT "Prokrutka teksta" + IDC_GRPFONTS "SHrifty'" + IDC_BTNFONTPROFILEDETAILS "Detali" + IDC_GRPLOADONSTARTUP "Zagrujat' pri zagruzke" + IDC_RADLOADNO "Net" + IDC_RADLOADSHOWN "Pokazanny'm" + IDC_RADLOADHIDDEN "Skry'ty'm" + IDC_CHKSAVETEXTONEXIT "Sohranyat' pri vy'hode" + IDC_GRPSTORAGE "Hranenie" + IDC_GRPSTORAGETEXT "Tekst" + IDC_RADTEXTREGISTRY "Reestr" + IDC_RADTEXTFILE "Fayl" + IDC_LBLTOP "Verh:" + IDC_LBLBOTTOM "Niz:" + IDC_GRPSTORAGEPROFILES "Profili" + IDC_RADPROFILESREGISTRY "Reestr" + IDC_RADPROFILESFILE "Fayl" + IDC_TABPROFILEACTION "Transliteraciya\nIgnorirovanie\nE`ksport/Import\nKopirovanie\nNazvanie\nSbros" + IDC_LBLBEGIN "Nachalo" + IDC_LBLEND "Konec" + IDC_GRPIGNORETEXT "Ignoriruemy'y Tekst" + IDC_LBLTEXT "Tekst:" + IDC_GRPNAME "Nazvanie" + IDC_LBLLANGTOP "Verhniy tekst:" + IDC_LBLLANGBOTTOM "Nijniy tekst:" + IDC_BTNADD "Dobavit'" + IDC_BTNDELETE "Udalit'" + IDC_GRPCOPYPROFILE "Kopirovanie profilya" + IDC_LBLFROM "Iz:" + IDC_LBLTO "V:" + IDC_BTNCOPY "Kopirovat'" + IDC_GRPRESET "Sbros" + IDC_CHKRESETTRANSLATION "Perevod" + IDC_CHKRESETIGNORE "Ignorirovanie" + IDC_CHKRESETIGNORETEXT "Ignoriruemy'y tekst" + IDC_CHKRESETNAME "Nazvanie" + IDC_BTNRESET "Sbros" + IDC_GRPEXPORTIMPORT "E`ksport/Import" + IDC_LBLPATH "Put':" + IDC_CHKUNICODE "YUnikod" + IDC_BTNEXPORT "E`ksport" + IDC_BTNIMPORT "Import" + ID_APP_EXIT "Vy'hod\tAlt+F4" + ID_EDIT_UNDO "Otmena\tCtrl+Z" + ID_EDIT_REDO "Povtor\tCtrl+Y" + ID_EDIT_CUT "Vy'rezat'\tCtrl+X" + ID_EDIT_COPY "Kopirovat'\tCtrl+C" + ID_EDIT_PASTE "Vstavit'\tCtrl+V" + ID_EDIT_CLEAR "Udalit'\tDel" + ID_EDIT_CLEAR_ALL "Udalit' Vse" + ID_EDIT_SELECT_ALL "Vy'delit' Vse\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Vstavit'\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Udalit'\tAlt+Shift+R" + ID_TOOLS_PROFILEDETAILS "Detali Profiley...\tF3" + ID_TOOLS_TRANSLATEFILES "Perevod Faylov...\tF4" + ID_TOOLS_OPTIONS "Opcii...\tF2" + ID_TOOLS_ACTION_TRANSLITERATION "Transliteraciya" + ID_TOOLS_ACTION_IGNORE "Ignorirovanie" + ID_TOOLS_ACTION_IGNORETEXT "Ignoriruemy'y tekst" + ID_TOOLS_ACTION_COPYIGNORE "Kopirovanie ignorirovaniya" + ID_APP_ABOUT "O Programme...\tF1" + ID_SHOW "Pokazat' okno" + ID_HIDE "Skry't' okno" +END + + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Glavnaya\nPravka\nIgnorirovanie\nKopirovanie\nProfil'\nUtility'\nDeystvie\nPomosch''" + IDR_TRAYICON "1\nProfil'" + IDR_EDIT "1\nIgnorirovanie\nKopirovanie\nProfil'" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Transliterator_6.0/Transliterator.sln b/legacy/Transliterator_6.0/Transliterator.sln new file mode 100644 index 0000000..ba3ee8a --- /dev/null +++ b/legacy/Transliterator_6.0/Transliterator.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Debug.ActiveCfg = Debug|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Debug.Build.0 = Debug|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Release.ActiveCfg = Release|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_6.0/Transliterator.vcproj b/legacy/Transliterator_6.0/Transliterator.vcproj new file mode 100644 index 0000000..4f3951d --- /dev/null +++ b/legacy/Transliterator_6.0/Transliterator.vcproj @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Transliterator_6.0/TransliteratorDlg.cpp b/legacy/Transliterator_6.0/TransliteratorDlg.cpp new file mode 100644 index 0000000..43bb026 --- /dev/null +++ b/legacy/Transliterator_6.0/TransliteratorDlg.cpp @@ -0,0 +1,1158 @@ +#include "stdafx.h" + +#include "resource.h" +#include "error.h" +#include "global.h" +#include "msg.h" +#include "makedirection.h" +#include +#include "settings.h" + +#include "transliteratordlg.h" + +BOOL TransliteratorDlg::OnIdle() +{ + BOOL bSelection,bText; + WTL::CRichEditCtrl re = ::GetFocus(); + + if(re == m_areLang[0]|| + re == m_areLang[1]) + { + bSelection = re.GetSelectionType() != SEL_EMPTY; + bText = re.GetTextLength()?TRUE:FALSE; + UIEnable(ID_EDIT_UNDO,re.CanUndo()); + UIEnable(ID_EDIT_REDO,re.CanRedo()); + UIEnable(ID_EDIT_CUT,bSelection); + UIEnable(ID_EDIT_COPY,bSelection); + UIEnable(ID_EDIT_PASTE,re.CanPaste()); + UIEnable(ID_EDIT_SELECT_ALL,bText); + UIEnable(ID_EDIT_CLEAR,bSelection); + UIEnable(ID_EDIT_CLEAR_ALL,bText); + UIEnable(ID_EDIT_IGNORE_INSERT,TRUE); + UIEnable(ID_EDIT_IGNORE_REMOVE,TRUE); + } + else + { + for(int i = ID_EDIT_CLEAR;i <= ID_EDIT_REDO; ++i) + UIEnable(i,FALSE); + UIEnable(ID_EDIT_IGNORE_INSERT,FALSE); + UIEnable(ID_EDIT_IGNORE_REMOVE,FALSE); + } + + { + LangStringT astrDir[2]; + MakeDirection::MakeT(astrDir); + for(size_t i=0; i<2; ++i) + UISetText(ID_EDIT_COPY_LANGTOPTOLANGBOTTOM+i,astrDir[i].c_str()); + } + + UISetCheck(ID_TOOLS_PROFILEDETAILS,m_dlgProfileDetails.IsWindowVisible()); + UISetCheck(ID_TOOLS_TRANSLATEFILES,m_dlgTranslateFiles.IsWindowVisible()); + UISetCheck(ID_TOOLS_OPTIONS,m_dlgOptions.IsWindowVisible()); + + UISetCheck(ID_TOOLS_ACTION_TRANSLITERATION,g_Options.m_bTranslate); + UISetCheck(ID_TOOLS_ACTION_IGNORE,g_Options.m_bIgnore); + UISetCheck(ID_TOOLS_ACTION_IGNORETEXT,g_Options.m_bIgnoreText); + UISetCheck(ID_TOOLS_ACTION_COPYIGNORE,g_Options.m_bCopyIgnore); + + UISetCheck(ID_APP_ABOUT,m_dlgAbout.IsWindowVisible()); + + // Tray Menu + BOOL bVisible = IsWindowVisible(); + UIEnable(ID_SHOW,!bVisible); + UIEnable(ID_HIDE,bVisible); + + // Profile + static const TCHAR szCtrl[] = _T("\tCtrl+"); + LangStringT strText; + strText.reserve(40); + for(unsigned i = 0;i::DlgResize_UpdateLayout(cxWidth,cyHeight); + UpdateStatusBar(); + UpdateLayout(); +} + +int TransliteratorDlg::LoadStringForMenuItem(UINT uID, LPTSTR szBuff, int cchBuff) +{ + if(uID >= ID_PROFILE1&&uID <= ID_PROFILE10) + { + LangStringT& strProfile = g_Storage.m_astrProfile[uID-ID_PROFILE1]; + _tcsncpy(szBuff,strProfile.c_str(),(size_t)cchBuff); + return std::min((int)strProfile.length(),cchBuff); + } + else + return NN::DialogStatusBarMenu::LoadStringForMenuItem(uID,szBuff,cchBuff); +} + +bool TransliteratorDlg::Show() +{ + if(!Create(::GetDesktopWindow())) + return false; + + // Command Line + int nCmdShow = g_Options.m_wndpl.showCmd; + if(__argc>1) + { + if(!_tcscmp(__targv[1],_T("-min"))) + nCmdShow = SW_MINIMIZE; + else + if(!_tcscmp(__targv[1],_T("-max"))) + nCmdShow = SW_MAXIMIZE; + else + if(!_tcscmp(__targv[1],_T("-hide"))) + nCmdShow = SW_HIDE; + } + + static const RECT zeroRECT = {}; + if(!memcmp(&g_Options.m_wndpl.rcNormalPosition, &zeroRECT, sizeof(RECT))) + CenterWindow(); + else + MoveWindow(&g_Options.m_wndpl.rcNormalPosition); + ShowWindow(nCmdShow); + + m_bShown = (nCmdShow == SW_HIDE|| + ((nCmdShow == SW_MINIMIZE||nCmdShow == SW_SHOWMINIMIZED)&& + g_Options.m_bTrayIconShow))?false:true; + if(!m_bShown) + ShowWindow(SW_HIDE); + + UpdateTaskBar(); + UpdateTrayIcon(); + + return true; +} + +void TransliteratorDlg::Close() +{ + if(g_Options.m_bSaveText) + { + try + { + for(size_t i=0; i<2; ++i) + { + size_t nLength = (size_t)m_areLang[i].GetTextLength()+1; + g_Text[i].resize(nLength); + m_areLang[i].GetTextEx((LPTSTR)&g_Text[i][0], + nLength*sizeof(wchar_t),GT_DEFAULT,1200); + } + } + catch(...) + { + for(size_t i=0; i<2; ++i) + g_Text[i].clear(); + } + } + else + { + for(size_t i=0; i<2; ++i) + g_Text[i].clear(); + } + + SaveWindowPlacement(); + + m_dlgProfileDetails.DestroyWindow(); + m_dlgTranslateFiles.DestroyWindow(); + m_dlgAbout.DestroyWindow(); + m_dlgOptions.DestroyWindow(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void TransliteratorDlg::SetOptions() +{ + if(g_UpdateOptions.m_bControls) + { + InitControls(); + SetOptionsFont(); + } + else + if(g_UpdateOptions.m_bFont) + SetOptionsFont(); + + if(g_UpdateOptions.m_abProfile[g_Language.GetCurProfileNum()]) + UpdateTranslation(); + + UpdateTaskBar(); + + UpdateTrayIcon(); + + UpdateStatusBar(); + + UpdateCaption(); + + // HotKeys + if(g_UpdateOptions.m_bHotKey) + { + for(size_t i=0; i aTextIn(nCharIn); + std::vector aTextOut(nCharOut); + + reFrom.GetTextEx((LPTSTR)&aTextIn[0], + nCharIn*sizeof(wchar_t), GT_DEFAULT, 1200); + g_Language.Translate(&aTextIn[0], &aTextOut[0], dir, 0); + + { + NN::sg sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + reTo.SetTextEx((const TCHAR*)&aTextOut[0],ST_DEFAULT,1200); + } + } + catch(...) + { + } +} + +// TranslateWindow +void TransliteratorDlg::TranslateWindow(Translate::Direction dir) +{ + HWND hWndTranslation = NN::GetActiveWindowChild(); + if(!hWndTranslation) + return; + + TCHAR szClass[64] = {}; + ::GetClassName(hWndTranslation, szClass, NN_ARRAY_LENGTH(szClass)-1); + + TCHAR szClassEdit[NN_ARRAY_LENGTH(szClass)] = {}; + _tcscpy(szClassEdit,szClass); + ::CharUpperBuff(szClassEdit, _tcslen(szClassEdit)); + // Edit control + if(_tcsstr(szClassEdit, _T("EDIT"))|| + _tcsstr(szClassEdit, _T("TEXT"))) + TranslateWindow_Edit(hWndTranslation,dir); + // IE + else + if(!_tcscmp(szClass,_T("Internet Explorer_Server"))) + TranslateWindow_IE(hWndTranslation,dir); + // Window + else + TranslateWindow_Window(hWndTranslation,dir); +} + +void TransliteratorDlg::TranslateWindow_Edit(HWND hWndTranslation,Translate::Direction dir) +{ + const size_t nCharIn = (size_t)::SendMessage(hWndTranslation,WM_GETTEXTLENGTH,0,0)+1; + try + { + std::vector aTextIn(nCharIn); + + DWORD nStart,nEnd; + ::SendMessage(hWndTranslation,EM_GETSEL,(WPARAM)&nStart,(LPARAM)&nEnd); + + if(nStart == nEnd||(!nStart&&nEnd == (DWORD)-1)) + { + ::SendMessage(hWndTranslation,WM_GETTEXT,nCharIn,(LPARAM)&aTextIn[0]); + + dir = DefineDirection(dir,&aTextIn[0]); + const size_t nCharOut = + Language::CountOutTranslate( + nCharIn, + dir, + g_Options.m_bIgnore, + g_Language.GetCurProfile()); + + std::vector aTextOut(nCharOut); + g_Language.Translate( + NN::CharAWT(&aTextIn[0]), + &aTextOut[0], + dir,0); + + ::SendMessage(hWndTranslation,WM_SETTEXT,0, + (LPARAM)(const TCHAR*)NN::CharAWT(&aTextOut[0])); + } + else + { + ::SendMessage(hWndTranslation,WM_GETTEXT,nCharIn,(LPARAM)&aTextIn[0]); + + std::copy(&aTextIn[nStart],&aTextIn[nEnd+1],&aTextIn[0]); + aTextIn[nEnd-nStart] = 0; + + const size_t nCharOut = + Language::CountOutTranslate( + nCharIn, + dir, + g_Options.m_bIgnore, + g_Language.GetCurProfile()); + + std::vector aTextOut(nCharOut); + g_Language.Translate( + NN::CharAWT(&aTextIn[0]), + &aTextOut[0], + dir,0); + + ::SendMessage(hWndTranslation,EM_REPLACESEL,TRUE, + (LPARAM)(const TCHAR*)NN::CharAWT(&aTextOut[0])); + } + } + catch(...) + { + } +} + +void TransliteratorDlg::TranslateWindow_IE(HWND hWndTranslation,Translate::Direction dir) +{ + static bool binit = false; + HINSTANCE hOleAccInstance; + if(!binit) + hOleAccInstance = ::LoadLibrary(_T("OLEACC.DLL")); + else + hOleAccInstance = ::GetModuleHandle(_T("OLEACC.DLL")); + if(!hOleAccInstance) + return; + + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, "ObjectFromLresult"); + if(!pfObjectFromLresult) + return; + + ATL::CComPtr spDoc; + if(FAILED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + return; + + ATL::CComPtr spDisp; + ATL::CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + ATL::CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + ATL::CComQIPtr spInput = spElem; + ATL::CComQIPtr spTA = spElem; + + ATL::CComBSTR strText; + ATL::CComVariant v; + + if(spInput) + spInput->get_value(&strText); + else + if(spTA) + spTA->get_value(&strText); + else + spElem->get_innerText(&strText); + + dir; // Unused variable + if(strText) + { + dir = DefineDirection(dir,strText); + try + { + const size_t nCharOut = + Language::CountOutTranslate( + strText.Length(), + dir, + g_Options.m_bIgnore, + g_Language.GetCurProfile()); + + std::vector aTextOut(nCharOut); + g_Language.Translate(strText,&aTextOut[0],dir,0); + strText = &aTextOut[0]; + } + catch(...) + { + return; + } + + if(spInput) + spInput->put_value(strText); + else + if(spTA) + spTA->put_value(strText); + else + spElem->put_innerText(strText); + } +} + +void TransliteratorDlg::TranslateWindow_Window(HWND hWndTranslation,Translate::Direction dir) +{ + const size_t nCharIn = (size_t)::SendMessage(hWndTranslation,WM_GETTEXTLENGTH,0,0)+1; + + try + { + std::vector aTextIn(nCharIn); + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(nCharIn),(LPARAM)&aTextIn[0]); + + dir = DefineDirection(dir,&aTextIn[0]); + std::vector aTextOut( + Language::CountOutTranslate( + nCharIn, + dir, + g_Options.m_bIgnore, + g_Language.GetCurProfile())); + + g_Language.Translate(NN::CharAWT(&aTextIn[0]),&aTextOut[0],dir,0); + + ::SendMessage( + hWndTranslation, + WM_SETTEXT, + 0, + (LPARAM)(const TCHAR*)NN::CharAWT(&aTextOut[0])); + } + catch(...) + { + } +} + +Translate::Direction TransliteratorDlg::DefineDirection(Translate::Direction dir, const LangChar* strText) +{ + if(dir == Translate::dirAuto) + { + const LangChar str[2] = {strText[0]}; + + // Find + const LangArray& aTranslation = g_Language.GetCurProfile()->m_aTranslation; + + for(LangArray::const_iterator it = aTranslation.begin(); + it != aTranslation.end(); ++it) + if(it->get() == str) + return Translate::dirToptoBottom; + + for(LangArray::const_iterator it = aTranslation.begin(); + it != aTranslation.end(); ++it) + if(it->get() == str) + return Translate::dirBottomtoTop; + + return g_Options.m_nAutoTransliteration; + } + else + return dir; +} + +Translate::Direction TransliteratorDlg::DefineDirection(Translate::Direction dir, const LangCharA* strText) +{ + return DefineDirection(dir,NN::CharAWT(strText)); +} + +void TransliteratorDlg::UpdateLayout() +{ + for(size_t i=0; i<2; ++i) + { + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_GRPLANGTOP+i),&rect); + ScreenToClient(&rect); + rect.left+= size_delta_left; + rect.right-= size_delta_right; + rect.top+= size_delta_top; + rect.bottom-= size_delta_bottom; + ::MoveWindow( + GetDlgItem(IDC_RELANGTOP +i), + rect.left, + rect.top, + rect.right-rect.left, + rect.bottom-rect.top, + TRUE); + } +} + +void TransliteratorDlg::UpdateStatusBar() +{ + HDC hDC = m_wndStatusBar.GetDC(); + ::SetTextCharacterExtra(hDC,0); + + // Count + for(size_t i=0; i<2; ++i) + { + LangStringT str = g_Language.GetCurProfile()->m_astrLang[i]; + + if(g_Options.m_bStatusBarCount) + { + str+= _T(" - "); + + TCHAR strLength[NN::digits_number::value+1]; + _itot(m_areLang[i].GetWindowTextLength(),strLength,10); + str+= strLength; + } + + SIZE size; + ::GetTextExtentPoint32(hDC,str.c_str(),str.length(),&size); + m_wndStatusBar.SetPaneWidth(ID_COUNTLANGTOP+i,size.cx); + m_wndStatusBar.SetPaneText(ID_COUNTLANGTOP+i,str.c_str()); + } + + // Profile + const LangStringT& strProfile = g_Storage.m_astrProfile[g_Language.GetCurProfileNum()]; + + SIZE size; + ::GetTextExtentPoint32(hDC,strProfile.c_str(),strProfile.length(),&size); + m_wndStatusBar.ReleaseDC(hDC); + m_wndStatusBar.SetPaneWidth(ID_PROFILE,size.cx); + m_wndStatusBar.SetPaneText(ID_PROFILE,strProfile.c_str()); + + m_wndStatusBar.ReleaseDC(hDC); +} + +void TransliteratorDlg::UpdateCaption() +{ + LangStringT strCaption; + + const LangStringT& strLang = g_Language.GetCurProfile()->m_astrLang[0]; + + strCaption.reserve( + g_Storage.m_astrProfile[g_Language.GetCurProfileNum()].length()+ + strLang.length()+ + strLang.length()+10); + NN::WndLoadString(IDR_TRANSLITERATOR,strCaption); + + if(g_Options.m_bCaptionProfile) + { + strCaption+= _T(" - "); + strCaption+= g_Storage.m_astrProfile[g_Language.GetCurProfileNum()]; + } + + if(g_Options.m_bCaptionCount) + { + strCaption+= _T(" - "); + for(size_t i=0; i<2; ++i) + { + strCaption+= g_Language.GetCurProfile()->m_astrLang[i]; + strCaption+= _T(" - "); + + TCHAR strLength[10]; + _itot(m_areLang[i].GetWindowTextLength(),strLength,10); + strCaption+= strLength; + if(i<1) + strCaption+= _T(" , "); + } + } + + SetWindowText(strCaption.c_str()); +} + +void TransliteratorDlg::UpdateTranslation() +{ + Translate(::GetFocus() == m_areLang[0]? + Translate::dirToptoBottom: + Translate::dirBottomtoTop); +} + +void TransliteratorDlg::UpdateTrayIcon() +{ + if(g_Options.m_bTrayIconShow) + { + if(!m_bTrayIcon) + { + ShowTrayIcon(); + m_bTrayIcon = !m_bTrayIcon; + } + } + else + { + if(m_bTrayIcon) + { + HideTrayIcon(); + m_bTrayIcon = !m_bTrayIcon; + } + } + SetDefaultItem(IsWindowVisible()?ID_HIDE:ID_SHOW); +} + +void TransliteratorDlg::UpdateTaskBar() +{ + SetWindowLong(GWL_HWNDPARENT, (LONG)HWND_DESKTOP); + if(!g_Options.m_bTaskBarShow) + SetWindowLong(GWL_HWNDPARENT, (LONG)::GetDesktopWindow()); +} + +void TransliteratorDlg::UpdatePlacement() +{ + SetWindowPos( + g_Options.m_nPlacement == Options::placementOnTop?HWND_TOPMOST: + g_Options.m_nPlacement == Options::placementOnBottom?HWND_BOTTOM: + HWND_NOTOPMOST, + 0,0,0,0,SWP_NOSIZE|SWP_NOREPOSITION|SWP_NOMOVE); +} + +void TransliteratorDlg::UpdateLang() +{ + for(size_t i=0; i<2; ++i) + SetDlgItemText(IDC_GRPLANGTOP+i, + g_Language.GetCurProfile()->m_astrLang[i].c_str()); +} + +void TransliteratorDlg::DialogLang_LanguageChanged() +{ + m_dlgProfileDetails.UpdateLanguage(); + m_dlgTranslateFiles.UpdateLanguage(); + m_dlgOptions.UpdateLanguage(); + m_dlgAbout.UpdateLanguage(); + + UpdateCaption(); + UpdateStatusBar(); + UpdateLang(); +} + +void TransliteratorDlg::InitControls() +{ + NN::sg sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + // Save Text + std::vector aText[2]; + bool bCreated = m_areLang[0]&&m_areLang[1]; + try + { + for(size_t i=0; i<2; ++i) + { + if(m_areLang[i]) + { + // Text + size_t nChar = (size_t)m_areLang[i].GetWindowTextLength()+1; + aText[i].resize(nChar); + + m_areLang[i].GetTextEx((LPTSTR)&aText[i][0], + nChar*sizeof(wchar_t),GT_DEFAULT,1200); + + // Destroy + m_areLang[i].DestroyWindow(); + } + } + } + catch(...) + { + for(size_t i=0; i<2; ++i) + aText[i].clear(); + } + + // Create + DWORD dwStyle = + WS_TABSTOP | + WS_BORDER | + WS_CHILD | + WS_VISIBLE | + WS_VSCROLL | + ES_WANTRETURN | + ES_MULTILINE | + ES_NOHIDESEL | + ES_AUTOVSCROLL; + + if(!g_Options.m_bWrapText) + dwStyle|= WS_HSCROLL | ES_AUTOHSCROLL; + DWORD dwExStyle = 0; + + static RECT rect = {0,0,1,1}; + for(size_t i=0; i<2; ++i) + { + if(!m_areLang[i].Create(m_hWnd, rect, _T(""), dwStyle, dwExStyle, IDC_RELANGTOP+i)) + { + ShowError(m_hWnd, _T("Cannot create text box")); + return; + } + + m_areLang[i].SetEventMask(ENM_CHANGE|ENM_MOUSEEVENTS); + } + + UpdateLayout(); + if(!bCreated) + { + if(g_Options.m_bScrollText) + m_areLang[1].LineScroll(m_areLang[0].GetFirstVisibleLine()); + } + + for(size_t i=0; i<2; ++i) + { + const wchar_t* pszText; + if(bCreated) + pszText = static_cast(&aText[i][0]); + else + { + if(!g_Text[i].empty()) + pszText = static_cast(&g_Text[i][0]); + else + pszText = 0; + } + m_areLang[i].SetTextEx((LPCTSTR)pszText,ST_DEFAULT,1200); + g_Text[i].clear(); + } +} + +void TransliteratorDlg::InitDialog() +{ + m_dlgProfileDetails.Create(m_hWnd); + m_dlgTranslateFiles.Create(m_hWnd); + m_dlgAbout.Create(m_hWnd); + m_dlgOptions.Create(m_hWnd); +} + +void TransliteratorDlg::InitStatusBar() +{ + m_wndStatusBar.Create(m_hWnd); + m_hWndStatusBar = m_wndStatusBar; + int panes[] = + { + ID_COUNTLANGTOP, + ID_COUNTLANGBOTTOM, + ID_DEFAULT_PANE, + ID_PROFILE + }; + m_wndStatusBar.SetPanes(panes, NN_ARRAY_LENGTH(panes) ,false); + + HDC hDC = m_wndStatusBar.GetDC(); + SetTextCharacterExtra(hDC,0); + m_wndStatusBar.ReleaseDC(hDC); +} + +LRESULT TransliteratorDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Icon + DialogIcon_Init(); + + // StatusBar + InitStatusBar(); + + // InitControls + InitControls(); + + // Dialog + InitDialog(); + + // Language + DialogLang_Init(); + + // Resize + DlgResize_Init(false,true); + + // TrayIcon + InitTrayIcon(IDR_TRANSLITERATOR, + WTL::AtlLoadIcon(IDR_TRANSLITERATOR), + IDR_TRAYICON); + + m_hAccel = WTL::AtlLoadAccelerators(IDR_TRANSLITERATOR); + + // Options + SetOptions(); + + UIAddChildWindowContainer(m_hWnd); + + return TRUE; +} + +LRESULT TransliteratorDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled = FALSE; + WORD wMsg = LOWORD(wParam); + + if(wMsg == SC_CLOSE) + Close(); + else + if(wMsg == SC_MINIMIZE&&g_Options.m_bTrayIconShow) + { + bHandled = TRUE; + ShowWindow(SW_MINIMIZE); + ShowHide(false); + } + + return 0; +} + +LRESULT TransliteratorDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam-hkID) + { + case Options::hkLangToptoLangBottom: + TranslateWindow(Translate::dirToptoBottom); + break; + case Options::hkLangBottomtoLangTop: + TranslateWindow(Translate::dirBottomtoTop); + break; + case Options::hkAuto: + TranslateWindow(Translate::dirAuto); + break; + case Options::hkShowHide: + ShowHide(IsWindowVisible()?false:true); + break; + case Options::hkCopyIgnore: + g_Options.m_bCopyIgnore = !g_Options.m_bCopyIgnore; + UpdateTranslation(); + break; + } + return 0; +} + +LRESULT TransliteratorDlg::OnQueryEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + Settings::Save(); + return TRUE; +} + +LRESULT TransliteratorDlg::OnApply(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + SetOptions(); + m_dlgOptions.SetFocus(); + + return 0; +} + +LRESULT TransliteratorDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + Close(); + + return 0; +} + +LRESULT TransliteratorDlg::OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + WTL::CRichEditCtrl re = ::GetFocus(); + + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + + return 0; +} + +LRESULT TransliteratorDlg::OnEditIgnore(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + WTL::CRichEditCtrl re = ::GetFocus(); + + const bool bInsert = wID == ID_EDIT_IGNORE_INSERT; + const bool bfirst = re == m_areLang[0]; + + const size_t nCharIn = (size_t)re.GetWindowTextLength()+1; + const size_t maxlenI = g_Language.MaxLengthIgnore(g_Language.GetCurProfile()); + + static const wchar_t strEmpty[] = {0}; + + // Text + try + { + std::vector aTextIn(nCharIn); + + re.GetTextEx((LPTSTR)&aTextIn[0],nCharIn*sizeof(wchar_t),GT_DEFAULT,1200); + + std::vector aTextIn1(strEmpty, NN_ARRAY_END(strEmpty)); + std::vector aTextInT(strEmpty, NN_ARRAY_END(strEmpty)); + std::vector aTextIn2(strEmpty, NN_ARRAY_END(strEmpty)); + + std::vector aTextOutT; // InT -> OutT + + // CharRange + CHARRANGE cr; + re.GetSel(cr); + + const bool bSetIgnore = cr.cpMin == cr.cpMax; + + // Insert/Remove + if(bSetIgnore) + { + // In1 + // aTextIn1 = strEmpty; + + // InT + aTextInT.resize(cr.cpMin+1); + + std::copy(&aTextIn[0],&aTextIn[cr.cpMin],&aTextInT[0]); + aTextInT[cr.cpMin] = 0; + + // In2 + if((size_t)cr.cpMax != nCharIn-1) + { + aTextIn2.resize(nCharIn-cr.cpMax); + wcscpy(&aTextIn2[0],&aTextIn[cr.cpMax]); + } + + // OutT + aTextOutT.resize(cr.cpMin + maxlenI +1); + } + // Ignore + else + { + if(!cr.cpMin && (size_t)cr.cpMax == nCharIn-1) // All + { + aTextInT = aTextIn; + } + else // Selection + { + aTextIn1.resize(cr.cpMin+1); + std::copy(&aTextIn[0],&aTextIn[cr.cpMin],&aTextIn1[0]); + aTextIn1[cr.cpMin] = 0; + + aTextInT.resize(cr.cpMax-cr.cpMin+1); + std::copy(&aTextIn[cr.cpMin],&aTextIn[cr.cpMax],&aTextInT[0]); + aTextInT[cr.cpMax-cr.cpMin] = 0; + + if((size_t)cr.cpMax != nCharIn-1) + { + aTextIn2.resize(nCharIn-cr.cpMax); + wcscpy(&aTextIn2[0],&aTextIn[cr.cpMax]); + } + } + + aTextOutT.resize(cr.cpMax - cr.cpMin + 2*maxlenI + 1); + } + + aTextIn.clear(); + if(bSetIgnore) + { + g_Language.SetIgnore(&aTextInT[0],&aTextOutT[0], + bfirst?Translate::dirToptoBottom:Translate::dirBottomtoTop, + bInsert,0); + + cr.cpMin = cr.cpMax = wcslen(&aTextOutT[0]); + } + else + { + g_Language.Ignore(&aTextInT[0],&aTextOutT[0], + bInsert,bfirst,0); + + cr.cpMax = cr.cpMin+wcslen(&aTextOutT[0]); + } + + std::vector aTextOut( + wcslen(&aTextIn1[0])+ + wcslen(&aTextOutT[0])+ + wcslen(&aTextIn2[0])+ + 1); + + wcscpy(&aTextOut[0],&aTextIn1[0]); + wcscat(&aTextOut[0],&aTextOutT[0]); + wcscat(&aTextOut[0],&aTextIn2[0]); + + re.SetTextEx((const TCHAR*)&aTextOut[0],ST_DEFAULT,1200); + re.SetSel(cr.cpMin,cr.cpMax); + } + catch(...) + { + } + + UpdateStatusBar(); + if(g_Options.m_bCaptionCount) + UpdateCaption(); + + return 0; +} + +LRESULT TransliteratorDlg::OnEditCopy(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + NN::sg sg(g_Options.m_bTranslate,FALSE); + + bool b1 = wID == ID_EDIT_COPY_LANGTOPTOLANGBOTTOM; + + WTL::CRichEditCtrl& reFrom = m_areLang[!b1]; + WTL::CRichEditCtrl& reTo = m_areLang[b1]; + + int nLen = reFrom.GetTextLength()+1; + std::vector aText(nLen); + reFrom.GetTextEx((LPTSTR)&aText[0],nLen*sizeof(wchar_t),GT_DEFAULT,1200); + reTo.SetTextEx((const TCHAR*)&aText[0],ST_DEFAULT,1200); + + return 0; +} + +LRESULT TransliteratorDlg::OnProfile(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_nCurProfile = wID-ID_PROFILE1; + g_Language.SetCurProfile(g_Options.m_nCurProfile); + + UpdateTranslation(); + UpdateStatusBar(); + UpdateCaption(); + UpdateLang(); + + m_dlgOptions.NotifyProfileChanged(); + + return 0; +} + +LRESULT TransliteratorDlg::OnToolsAction(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + switch(wID) + { + case ID_TOOLS_ACTION_TRANSLITERATION: + g_Options.m_bTranslate = !g_Options.m_bTranslate; + break; + case ID_TOOLS_ACTION_IGNORE: + g_Options.m_bIgnore = !g_Options.m_bIgnore; + break; + case ID_TOOLS_ACTION_IGNORETEXT: + g_Options.m_bIgnoreText = !g_Options.m_bIgnoreText; + break; + case ID_TOOLS_ACTION_COPYIGNORE: + g_Options.m_bCopyIgnore = !g_Options.m_bCopyIgnore; + break; + } + + UpdateTranslation(); + + return 0; +} + +LRESULT TransliteratorDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + ShowHide(wID == ID_SHOW); + UpdateTrayIcon(); + if(wID == ID_SHOW) + UpdateTaskBar(); + return 0; +} + +LRESULT TransliteratorDlg::OnEnChangeLang(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslate = false; + if(g_Options.m_bTranslate && !bTranslate) + { + NN::sg_t sg(bTranslate); + Translate(wID == IDC_RELANGTOP? + Translate::dirToptoBottom: + Translate::dirBottomtoTop); + + bool bfirst = wID == IDC_RELANGTOP; + + WTL::CRichEditCtrl reFrom = m_areLang[!bfirst]; + WTL::CRichEditCtrl reTo = m_areLang[bfirst]; + + if(g_Options.m_bScrollText) + reTo.LineScroll(reFrom.GetFirstVisibleLine()); + + UpdateStatusBar(); + if(g_Options.m_bCaptionCount) + UpdateCaption(); + } + + return 0; +} + +LRESULT TransliteratorDlg::OnEnMsgFilterLang(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter = (MSGFILTER *)pnmhdr; + if(pMsgFilter->msg == WM_RBUTTONDOWN) + { + ::SetFocus(pMsgFilter->nmhdr.hwndFrom); + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + HMENU hMenu = WTL::AtlLoadMenu(IDR_EDIT); + hMenu = ::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + ::DestroyMenu(hMenu); + } + return 0; +} + +LRESULT TransliteratorDlg::OnClickStatusBar(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + if(pnmhdr->code == NM_RCLICK) + { + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + + HMENU hMenu = WTL::AtlLoadMenu(IDR_PROFILE); + hMenu = ::GetSubMenu(hMenu,0); + ::SetMenuDefaultItem(hMenu,IsWindowVisible()?ID_HIDE:ID_SHOW,FALSE); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, + pt.x,pt.y,0,m_hWnd,NULL); + ::DestroyMenu(hMenu); + } + else + if(pnmhdr->code == NM_DBLCLK) + { + if(++g_Options.m_nCurProfile == Language::nProfiles) + g_Options.m_nCurProfile = 0; + g_Language.SetCurProfile(g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + UpdateCaption(); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/TransliteratorDlg.h b/legacy/Transliterator_6.0/TransliteratorDlg.h new file mode 100644 index 0000000..f2b4022 --- /dev/null +++ b/legacy/Transliterator_6.0/TransliteratorDlg.h @@ -0,0 +1,219 @@ +#ifndef __TRANSLITERATORDLG_H__ +#define __TRANSLITERATORDLG_H__ + +#pragma once + +#include "profiledetailsdlg.h" +#include "translatefilesdlg.h" +#include "aboutdlg.h" +#include "optionsdlg.h" +#include "msg.h" + +class TransliteratorDlg : public ATL::CDialogImpl, + public WTL::CUpdateUI, + public WTL::CIdleHandler, + public WTL::CDialogResize, + public NN::TrayIcon, + public NN::DialogStatusBarMenu, + public NN::DialogIcon, + public NN::DialogLang, + public NN::MessageFilterDlgAccel +{ +public: + enum { IDD = IDR_TRANSLITERATOR } ; + enum + { + size_delta_left = 5, + size_delta_right = 5, + size_delta_top = 15, + size_delta_bottom = 5 + }; + enum { hkID = 1000 }; + + // Text + std::vector m_aText[2]; + + // Members + NN::auto_value m_hAccel; + NN::auto_value m_bTrayIcon; + NN::auto_value m_bShown; + + // Controls + WTL::CMultiPaneStatusBarCtrl m_wndStatusBar; + WTL::CRichEditCtrl m_areLang[2]; + //WTL::CRichEditCtrl m_areLang[2]; + + // Dialogs + ProfileDetailsDlg m_dlgProfileDetails; + TranslateFilesDlg m_dlgTranslateFiles; + AboutDlg m_dlgAbout; + OptionsDlg m_dlgOptions; + + // Virtual Functions + virtual BOOL OnIdle(); + + // Override + void DlgResize_UpdateLayout(int cxWidth, int cyHeight); + int LoadStringForMenuItem(UINT uID, LPTSTR szBuff, int cchBuff); + + // Create and Destroy + bool Show(); + void Close(); + + // Options + void SetOptions(); + void SetOptionsFont(); + + // Placement + void SaveWindowPlacement(); + // ShowHide + void ShowHide(bool bShow); + + // Translate + void Translate(Translate::Direction dir); + // TranslateWindow + void TranslateWindow(Translate::Direction dir); + static void TranslateWindow_Edit(HWND hWndTranslation,Translate::Direction dir); + static void TranslateWindow_IE(HWND hWndTranslation,Translate::Direction dir); + static void TranslateWindow_Window(HWND hWndTranslation,Translate::Direction dir); + + static Translate::Direction DefineDirection(Translate::Direction dir, const LangChar* strText); + static Translate::Direction DefineDirection(Translate::Direction dir, const LangCharA* strText); + + // Update + // Layout + void UpdateLayout(); + // StatusBar + void UpdateStatusBar(); + // Caption + void UpdateCaption(); + // Translation + void UpdateTranslation(); + // Tray Icon + void UpdateTrayIcon(); + // TaskBar + void UpdateTaskBar(); + // Placement + void UpdatePlacement(); + // Lang + void UpdateLang(); + + // Language + void DialogLang_LanguageChanged(); + + // Init + void InitControls(); + void InitDialog(); + void InitStatusBar(); + + // Maps + BEGIN_UPDATE_UI_MAP(TransliteratorDlg) + UPDATE_ELEMENT(ID_EDIT_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_INSERT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_REMOVE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY_LANGTOPTOLANGBOTTOM,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_EDIT_COPY_LANGBOTTOMTOLANGTOP,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_TOOLS_PROFILEDETAILS,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATEFILES,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_OPTIONS,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_ACTION_TRANSLITERATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_ACTION_IGNORE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_ACTION_IGNORETEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_ACTION_COPYIGNORE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_APP_ABOUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE1,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE2,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE3,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE4,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE5,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE6,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE7,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE8,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE9,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE10,UPDUI_MENUPOPUP|UPDUI_TEXT) + END_UPDATE_UI_MAP() + + BEGIN_DLGRESIZE_MAP(TransliteratorDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_GRPLANGTOP, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_GRPLANGBOTTOM, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(TransliteratortDlg) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_IDLE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + NN_MSGFILTER_IDLE_REMOVE() + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + MESSAGE_HANDLER(WM_QUERYENDSESSION, OnQueryEndSession) + MESSAGE_HANDLER(UWM_APPLY, OnApply) + + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_INSERT, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_REMOVE, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_COPY_LANGTOPTOLANGBOTTOM, OnEditCopy) + COMMAND_ID_HANDLER(ID_EDIT_COPY_LANGBOTTOMTOLANGTOP, OnEditCopy) + COMMAND_RANGE_HANDLER(ID_PROFILE1,ID_PROFILE10,OnProfile) + NN_TOOLWINDOW(ID_TOOLS_PROFILEDETAILS, m_dlgProfileDetails) + NN_TOOLWINDOW(ID_TOOLS_TRANSLATEFILES, m_dlgTranslateFiles) + NN_TOOLWINDOW(ID_TOOLS_OPTIONS, m_dlgOptions) + NN_TOOLWINDOW(ID_APP_ABOUT, m_dlgAbout) + COMMAND_ID_HANDLER(ID_TOOLS_ACTION_TRANSLITERATION, OnToolsAction) + COMMAND_ID_HANDLER(ID_TOOLS_ACTION_IGNORE, OnToolsAction) + COMMAND_ID_HANDLER(ID_TOOLS_ACTION_IGNORETEXT, OnToolsAction) + COMMAND_ID_HANDLER(ID_TOOLS_ACTION_COPYIGNORE, OnToolsAction) + + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + + COMMAND_HANDLER(IDC_RELANGTOP, EN_CHANGE, OnEnChangeLang) + COMMAND_HANDLER(IDC_RELANGBOTTOM, EN_CHANGE, OnEnChangeLang) + + NOTIFY_HANDLER(IDC_RELANGTOP, EN_MSGFILTER, OnEnMsgFilterLang) + NOTIFY_HANDLER(IDC_RELANGBOTTOM, EN_MSGFILTER, OnEnMsgFilterLang) + + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_RCLICK, OnClickStatusBar) + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_DBLCLK, OnClickStatusBar) + + CHAIN_MSG_MAP(NN::DialogStatusBarMenu) + CHAIN_MSG_MAP(NN::TrayIcon) + CHAIN_MSG_MAP(WTL::CDialogResize) + CHAIN_MSG_MAP(WTL::CUpdateUI) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnQueryEndSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnApply(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCommands(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsAction(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeLang(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterLang(int code, NMHDR* pnmhdr, BOOL& bHandled); + + LRESULT OnClickStatusBar(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLITERATORDLG_H__ diff --git a/legacy/Transliterator_6.0/Types.h b/legacy/Transliterator_6.0/Types.h new file mode 100644 index 0000000..60734d5 --- /dev/null +++ b/legacy/Transliterator_6.0/Types.h @@ -0,0 +1,85 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +#pragma once + +#include "translate.h" + +typedef char LangCharA; +typedef wchar_t LangCharW; + +typedef boost::tuple< + const LangCharA*, + const LangCharA*, + Translate::Translation + >LangTypeNSA; + +typedef boost::tuple< + const LangCharW*, + const LangCharW*, + Translate::Translation + >LangTypeNSW; + +typedef NN::wnd_string LangStringA; +typedef NN::wnd_wstring LangStringW; +typedef std::basic_string > LangStringT; + +typedef NN::wnd_char_traits LangStringTraitsA; +typedef NN::wnd_char_traits LangStringTraitsW; + +typedef boost::tuple< + LangStringA, + LangStringA, + Translate::Translation + >LangTypeA; +typedef boost::tuple< + LangStringW, + LangStringW, + Translate::Translation + >LangTypeW; + +struct LangPos +{ + enum LangPos_E + { + Top, + Bottom, + Translation + }; +}; + +typedef std::vector LangArrayA; +typedef std::vector LangArrayW; + +typedef LangCharW LangChar; +typedef LangTypeNSW LangTypeNS; +typedef LangStringW LangString; +typedef LangStringTraitsW LangStringTraits; +typedef LangTypeW LangType; +typedef LangArrayW LangArray; +typedef LangStringTraitsW LangSringTraits; + +// IgnoreText +typedef NN::wnd_wstring IgnoreTextString; + +typedef boost::tuple< + IgnoreTextString, + Translate::Translation + >IgnoreTextType; + +struct IgnoreTextPos +{ + enum IgnoreTextPos_E + { + String, + Translation + }; +}; + + +typedef std::vector IgnoreTextArray; + +// Text +typedef std::vector TextType; + +#endif // __TYPES_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/UpdateOptions.h b/legacy/Transliterator_6.0/UpdateOptions.h new file mode 100644 index 0000000..14396b6 --- /dev/null +++ b/legacy/Transliterator_6.0/UpdateOptions.h @@ -0,0 +1,24 @@ +#ifndef __UPDATEOPTIONS_H__ +#define __UPDATEOPTIONS_H__ + +#include "language.h" + +struct UpdateOptions +{ + bool m_bControls; + bool m_bHotKey; + bool m_bFont; + bool m_bLanguage; + bool m_abProfile[Language::nProfiles]; + + void Reset() + { + m_bControls = false; + m_bHotKey = true; + m_bFont = true; + m_bLanguage = false; + memset(m_abProfile,0,sizeof(m_abProfile)); + } +}; + +#endif // __UPDATEOPTIONS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ViewPage.cpp b/legacy/Transliterator_6.0/ViewPage.cpp new file mode 100644 index 0000000..fc29599 --- /dev/null +++ b/legacy/Transliterator_6.0/ViewPage.cpp @@ -0,0 +1,92 @@ +#include "stdafx.h" + +#include "resource.h" + +#include "viewpage.h" + +void ViewPage::DialogLang_LanguageChanged() +{ + UpdateFont(); + ProfileChanged(); +} + +void ViewPage::ProfileChanged() +{ + for(size_t i=0; i<2; ++i) + SetDlgItemText(IDC_BTNFONTLANGTOP+i, + g_Language.GetCurProfile()->m_astrLang[i].c_str()); +} + +void ViewPage::FontDialog(LPLOGFONT pLF) +{ + const LOGFONT lfCurrent = *pLF; + WTL::CFontDialog fontdlg(pLF); + if(fontdlg.DoModal() == IDOK) + { + if(memcmp(pLF,&lfCurrent,sizeof(LOGFONT))) + g_UpdateOptions.m_bFont = true; + *pLF = fontdlg.m_lf; + } +} + +void ViewPage::UpdateFont() +{ + HDC hDC = ::GetDC(NULL); + TEXTMETRIC tm; + ::GetTextMetrics(hDC,&tm); + const int nLogPixelY = ::GetDeviceCaps(hDC, LOGPIXELSY); + + TCHAR szBold[255]; + ATL::AtlLoadString(IDS_BOLD, szBold, NN_ARRAY_LENGTH(szBold)-1); + TCHAR szItalic[255]; + ATL::AtlLoadString(IDS_ITALIC, szItalic, NN_ARRAY_LENGTH(szItalic)-1); + TCHAR szUnderline[255]; + ATL::AtlLoadString(IDS_UNDERLINE, szUnderline, NN_ARRAY_LENGTH(szUnderline)-1); + TCHAR szStrikeOut[255]; + ATL::AtlLoadString(IDS_STRIKEOUT, szStrikeOut, NN_ARRAY_LENGTH(szStrikeOut)-1); + + static const TCHAR szDivider[] = _T(" - "); + + for(size_t i=0; im_Options.m_alfFont[i]; + + TCHAR szFont[200]; + int size = (int)(0 - (::MulDiv(lf.lfHeight, 72, nLogPixelY) - 0.5)); + wsprintf(szFont,_T("%s - %d"),lf.lfFaceName,size); + + TCHAR* pszFont = szFont; + if(lf.lfWeight >= FW_BOLD) + { + pszFont = _tcscat(pszFont,szDivider); + pszFont = _tcscat(pszFont,szBold); + } + if(lf.lfItalic) + { + pszFont = _tcscat(pszFont,szDivider); + pszFont = _tcscat(pszFont,szItalic); + } + if(lf.lfUnderline) + { + pszFont = _tcscat(pszFont,szDivider); + pszFont = _tcscat(pszFont,szUnderline); + } + if(lf.lfStrikeOut) + { + pszFont = _tcscat(pszFont,szDivider); + pszFont = _tcscat(pszFont,szStrikeOut); + } + + SetDlgItemText(IDC_REFONTLANGTOP+i,szFont); + } + + ::ReleaseDC(NULL,hDC); +} + +LRESULT ViewPage::OnFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + FontDialog(&GetOptions()->m_Options.m_alfFont[wID-IDC_BTNFONTLANGTOP]); + UpdateFont(); + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6.0/ViewPage.h b/legacy/Transliterator_6.0/ViewPage.h new file mode 100644 index 0000000..50f42e0 --- /dev/null +++ b/legacy/Transliterator_6.0/ViewPage.h @@ -0,0 +1,50 @@ +#ifndef __VIEWPAGE_H__ +#define __VIEWPAGE_H__ + +#pragma once + +#include "optionsstruct.h" +#include "profilechanged.h" +#include "global.h" + +class ViewPage : public NN::OptionsPageImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public ProfileChanged +{ +public: + enum { IDD = IDD_PAGEVIEW }; + + void DialogLang_LanguageChanged(); + void ProfileChanged(); + + void FontDialog(LPLOGFONT pLF); + void UpdateFont(); + + BEGIN_DDX_MAP(ViewPage) + DDX_CHECK(IDC_CHKCAPTIONPROFILE,GetOptions()->m_Options.m_bCaptionProfile) + DDX_CHECK(IDC_CHKCAPTIONCOUNT,GetOptions()->m_Options.m_bCaptionCount) + DDX_CHECK(IDC_CHKSTATUSBARCOUNT,GetOptions()->m_Options.m_bStatusBarCount) + DDX_CHECK(IDC_CHKTRAYICONSHOW,GetOptions()->m_Options.m_bTrayIconShow) + DDX_CHECK(IDC_CHKTASKBARSHOW,GetOptions()->m_Options.m_bTaskBarShow) + DDX_RADIO(IDC_RADNORMAL,(int&)GetOptions()->m_Options.m_nPlacement) + DDX_CHECK(IDC_CHKWRAPTEXT,GetOptions()->m_Options.m_bWrapText) + DDX_CHECK(IDC_CHKSCROLLTEXT,GetOptions()->m_Options.m_bScrollText) + if(GetOptions()->m_Options.m_bWrapText != g_Options.m_bWrapText|| + GetOptions()->m_Options.m_bScrollText != g_Options.m_bScrollText) + g_UpdateOptions.m_bControls = true; + END_DDX_MAP() + + BEGIN_MSG_MAP(ViewPage) + NN_MSGFILTER_MESSAGE_ADD() + NN_MSGFILTER_MESSAGE_REMOVE() + + COMMAND_ID_HANDLER(IDC_BTNFONTLANGTOP,OnFont) + COMMAND_ID_HANDLER(IDC_BTNFONTLANGBOTTOM,OnFont) + COMMAND_ID_HANDLER(IDC_BTNFONTPROFILEDETAILS,OnFont) + END_MSG_MAP() + + LRESULT OnFont(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __VIEWPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6.0/res/Transliterator.ico b/legacy/Transliterator_6.0/res/Transliterator.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Transliterator_6.0/res/Transliterator.ico differ diff --git a/legacy/Transliterator_6.0/stdafx.cpp b/legacy/Transliterator_6.0/stdafx.cpp new file mode 100644 index 0000000..1577c4e --- /dev/null +++ b/legacy/Transliterator_6.0/stdafx.cpp @@ -0,0 +1 @@ +#include "stdafx.h" \ No newline at end of file diff --git a/legacy/Transliterator_6.0/stdafx.h b/legacy/Transliterator_6.0/stdafx.h new file mode 100644 index 0000000..a1f61fe --- /dev/null +++ b/legacy/Transliterator_6.0/stdafx.h @@ -0,0 +1,104 @@ +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +#pragma once + +// Definitions +#define WINVER 0x0500 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 + +#define _ATL_NO_COM +#define _ATL_NO_HOSTING +#define _ATL_NO_OLD_NAMES +#define _ATL_CSTRING_NO_CRT +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS + +#define _ATL_NO_AUTOMATIC_NAMESPACE +#define _WTL_NO_AUTOMATIC_NAMESPACE + +//#define _ATL_ALL_WARNINGS + +#include + +// Language +#define NN_LANG_STR +#define NN_LANG_R +#define NN_LANG_ID g_LangID +extern LANGID g_LangID; +#include + +// ATL / WTL +#include +#include +extern WTL::CAppModule _Module; +#include +#include +#include +#include +#include +#include +#include +#include + +// std +#pragma warning(push) +#pragma warning(disable:4702) // unreachable code +#include +#include +#include +#pragma warning(pop) + +// boost +#include +#include + +// NN +#define NN_DDX_STRING +#define NN_USE_SHL_FOR_STRINGW + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__) +#define new DEBUG_NEW +#endif // _DEBUG + +#ifdef min +#undef min +using std::min; +#endif // min + +#ifdef max +#undef max +using std::max; +#endif // max + +#endif // __STDAFX_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/AboutDlg.h b/legacy/Transliterator_6b/AboutDlg.h new file mode 100644 index 0000000..1ab4e90 --- /dev/null +++ b/legacy/Transliterator_6b/AboutDlg.h @@ -0,0 +1,33 @@ +#ifndef __ABOUTDLG_H__ +#define __ABOUTDLG_H__ + +class CAboutDlg : public CDialogImpl, + public NN::DialogLang, + public NN::ToolWindow, + public NN::MessageFilterDlg +{ +public: + enum { IDD= IDD_ABOUT }; + typedef CAboutDlg thisClass; + + BEGIN_MSG_MAP(thisClass) + COMMAND_ID_HANDLER(IDC_EMAIL, OnEmail) + COMMAND_ID_HANDLER(IDC_SITE, OnSite) + CHAIN_MSG_MAP(NN::ToolWindow) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() + + LRESULT OnEmail(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("mailto:NN"),NULL,NULL,SW_SHOW); + return 0; + } + + LRESULT OnSite(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + ::ShellExecute(m_hWnd,_T("open"),_T("http://our-site.nm.ru"),NULL,NULL,SW_SHOW); + return 0; + } +}; + +#endif // __ABOUTDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Change.h b/legacy/Transliterator_6b/Change.h new file mode 100644 index 0000000..6543e24 --- /dev/null +++ b/legacy/Transliterator_6b/Change.h @@ -0,0 +1,16 @@ +#ifndef __CHANGE_H__ +#define __CHANGE_H__ + +inline size_t strcpy_change(char** out,const char* in) +{ + char** out_o=out; + while(*in) + { + **out=*in; + (*out)++; + in++; + } + return *out-*out_o; +} + +#endif // __CHANGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Controls.h b/legacy/Transliterator_6b/Controls.h new file mode 100644 index 0000000..f70f85a --- /dev/null +++ b/legacy/Transliterator_6b/Controls.h @@ -0,0 +1,31 @@ +#ifndef __CONTROLS_H__ +#define __CONTROLS_H__ + +inline void InitCmbLanguage(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageUser(HWND hWnd,int nCurSel=0,const Language& rL=g_Language) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + +inline void InitCmbLanguageDefUser(HWND hWnd,int nCurSel,const Language& rL) +{ + ::SendMessage(hWnd,CB_RESETCONTENT,0,0); + for(int i=0;im_strName)); + for(int i=Language::profUser1;im_strName)); + ::SendMessage(hWnd,CB_SETCURSEL,(WPARAM)nCurSel,0); +} + + +#endif // __CONTROLS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/DDXHotKey.h b/legacy/Transliterator_6b/DDXHotKey.h new file mode 100644 index 0000000..44890af --- /dev/null +++ b/legacy/Transliterator_6b/DDXHotKey.h @@ -0,0 +1,48 @@ +#ifndef __DDXHOTKEY_H__ +#define __DDXHOTKEY_H__ + +#define DDX_HOTKEY(nID,vk,fsModifiers) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,vk,fsModifiers,bSaveAndValidate); + +#define DDX_HOTKEY_C(nID,rHotKey,bConvert) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate,bConvert); + +#define DDX_HOTKEY_(nID,rHotKey) \ + if(nCtlID == (UINT)-1 || nCtlID == nID) \ + DDX_HotKey(m_hWnd,nID,rHotKey,bSaveAndValidate); + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,WORD& vk,WORD& fsModifiers,BOOL bSave) +{ + if(bSave) + { + WORD wHotKey=(WORD)::SendDlgItemMessage(hWnd,nID,HKM_GETHOTKEY,0,0); + vk=LOBYTE(wHotKey); + fsModifiers=HIBYTE(wHotKey); + } + else + ::SendDlgItemMessage(hWnd,nID,HKM_SETHOTKEY,(WPARAM)MAKEWORD(vk,fsModifiers),0); + return TRUE; +} + +inline BOOL DDX_HotKey(HWND hWnd,UINT nID,NN::HotKey& rHotKey,BOOL bSave,BOOL bConvert=TRUE) +{ + NN::HotKey hk=rHotKey; + if(bConvert) + hk.ConvertToHotKey(); + if(bSave) + { + BOOL bRet=DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); + if(bRet) + { + hk.ConvertToWnd(); + rHotKey=hk; + } + return bRet; + } + else + return DDX_HotKey(hWnd,nID,hk.vk,hk.fsModifiers,bSave); +} + +#endif // __DDXHOTKEY_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Error.h b/legacy/Transliterator_6b/Error.h new file mode 100644 index 0000000..5f596b2 --- /dev/null +++ b/legacy/Transliterator_6b/Error.h @@ -0,0 +1,22 @@ +#ifndef __ERROR_H____ +#define __ERROR_H____ + +#ifndef IDS_ERROR +#define IDS_ERROR 62000 +#define IDS_ERROR_DEFINED +#endif // !IDS_ERROR + +inline int ShowError(HWND hWnd, _U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return AtlMessageBox(hWnd,Text,Caption,uType); } + +inline int ShowError(_U_STRINGorID Text, + UINT uType = MB_OK|MB_ICONEXCLAMATION, _U_STRINGorID Caption = IDS_ERROR) +{ return ShowError(NULL,Text,uType,Caption); } + +#ifdef IDS_ERROR_DEFINED +#undef IDS_ERROR +#undef IDS_ERROR_DEFINED +#endif // IDS_ERROR_DEFINED + +#endif // __ERROR_H____ diff --git a/legacy/Transliterator_6b/GeneralPage.h b/legacy/Transliterator_6b/GeneralPage.h new file mode 100644 index 0000000..ed8edc8 --- /dev/null +++ b/legacy/Transliterator_6b/GeneralPage.h @@ -0,0 +1,77 @@ +#ifndef __GENERALPAGE_H__ +#define __GENERALPAGE_H__ + +#include "trnsoptionspage.h" + +class CGeneralPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEGENERAL }; + + void FontDialog(LPLOGFONT pLF) + { + CFontDialog fontdlg(pLF); + if(fontdlg.DoModal()==IDOK) + *pLF=fontdlg.m_lf; + } + + void UpdateFont() + { + char strFont[200]; + + HDC hDC = ::GetDC(NULL); + TEXTMETRIC tm; + ::GetTextMetrics(hDC,&tm); + for(int i=0;im_Options.m_lfFont[i]; + + wsprintf(strFont,"%s - %d", + lf.lfFaceName, + (int)(0 - + ( + (double) + MulDiv(lf.lfHeight, 72, + GetDeviceCaps(hDC, LOGPIXELSY)) - 0.5) + ) + ); + + if(lf.lfWeight>=FW_BOLD) + lstrcat(strFont," - Bold"); + if(lf.lfItalic) + lstrcat(strFont," - Italic"); + if(lf.lfUnderline) + lstrcat(strFont," - Underline"); + if(lf.lfStrikeOut) + lstrcat(strFont," - StrikeOut"); + + SetDlgItemText(IDC_FONTNAMETRNS+i,strFont); + } + ::ReleaseDC(NULL,hDC); + } + + BEGIN_DDX_MAP(CGeneralPage) + DDX_CHECK(IDC_SHOWTRAYICON,GetOptions()->m_Options.m_bShowTrayIcon) + DDX_CHECK(IDC_SHOWTASKBAR,GetOptions()->m_Options.m_bShowTaskBar) + DDX_CHECK(IDC_TOPMOST,GetOptions()->m_Options.m_bTopMost) + DDX_RADIO(IDC_LOADNO,(int&)GetOptions()->m_Options.m_nLoadOnStartUp) + if(bSaveAndValidate==DDX_LOAD) + UpdateFont(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CGeneralPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_ID_HANDLER(IDC_FONTTRNS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTRUS,OnFont) + COMMAND_ID_HANDLER(IDC_FONTTRANSLATION,OnFont) + END_MSG_MAP() + + LRESULT OnFont(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + FontDialog(&GetOptions()->m_Options.m_lfFont[wID-IDC_FONTTRNS]); + UpdateFont(); + return 0; + } +}; + +#endif // __GENERALPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Global.cpp b/legacy/Transliterator_6b/Global.cpp new file mode 100644 index 0000000..4ba35a5 --- /dev/null +++ b/legacy/Transliterator_6b/Global.cpp @@ -0,0 +1,8 @@ +#include "stdafx.h" +#include "language.h" + +CAppModule _Module; +LANGID g_LangID; +const LANGID g_LangIDDefault=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +Language g_Language; +IgnoreArray g_Ignore; diff --git a/legacy/Transliterator_6b/Global.h b/legacy/Transliterator_6b/Global.h new file mode 100644 index 0000000..ed795f7 --- /dev/null +++ b/legacy/Transliterator_6b/Global.h @@ -0,0 +1,10 @@ +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +extern CAppModule _Module; +extern LANGID g_LangID; +extern const LANGID g_LangIDDefault; +extern Language g_Language; +extern IgnoreArray g_Ignore; + +#endif // __GLOBAL_H__ diff --git a/legacy/Transliterator_6b/HotKeysPage.h b/legacy/Transliterator_6b/HotKeysPage.h new file mode 100644 index 0000000..005edbd --- /dev/null +++ b/legacy/Transliterator_6b/HotKeysPage.h @@ -0,0 +1,53 @@ +#ifndef __HOTKEYSPAGE_H__ +#define __HOTKEYSPAGE_H__ + +#include "trnsoptionspage.h" +#include "ddxhotkey.h" + +class CHotKeysPage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEHOTKEYS }; + + NN::AutoValue m_nCurSel; + + BEGIN_DDX_MAP(CHotKeysPage) + DDX_RADIO(IDC_TRNSTORUS,(int&)GetOptions()->m_Options.m_nAutoTranslation) + if(bSaveAndValidate) + SaveHotKey(); + END_DDX_MAP() + + BEGIN_MSG_MAP(CHotKeysPage) + CHAIN_MSG_MAP(TrnsOptionsPage) + COMMAND_HANDLER(IDC_ACTION,CBN_SELCHANGE,OnCmbSelChangeAction) + END_MSG_MAP() + + void SaveHotKey() + { + if(m_nCurSel!=CB_ERR) + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hotkey.GetHotKey(hk.vk,hk.fsModifiers); + hk.ConvertToWnd(); + } + } + + void LoadHotKey() + { + CHotKeyCtrl hotkey=GetDlgItem(IDC_HOTKEYACTION); + m_nCurSel=SendDlgItemMessage(IDC_ACTION,CB_GETCURSEL,0,0); + NN::HotKey& hk=GetOptions()->m_Options.m_HotKey[m_nCurSel]; + hk.ConvertToHotKey(); + hotkey.SetHotKey(hk.vk,hk.fsModifiers); + } + + LRESULT OnCmbSelChangeAction(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SaveHotKey(); + LoadHotKey(); + return 0; + } +}; + +#endif // __HOTKEYSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Ignore.h b/legacy/Transliterator_6b/Ignore.h new file mode 100644 index 0000000..cab0772 --- /dev/null +++ b/legacy/Transliterator_6b/Ignore.h @@ -0,0 +1,38 @@ +#ifndef __IGNORE_H__ +#define __IGNORE_H__ + +class Ignore +{ + IgnoreMap m_map; +public: + unsigned GetLast() const { return m_map.GetLast(); } + + IgnoreType& GetAt(unsigned nItem) { return m_map[nItem]; } + const IgnoreType& GetAt(unsigned nItem) const { return m_map[nItem]; } + IgnoreType& operator[](unsigned nItem) { return GetAt(nItem); } + const IgnoreType& operator[](unsigned nItem) const { return GetAt(nItem); } + + void Add(const IgnoreType& t) { m_map.Add(t); } + void Remove(const IgnoreType& t) { m_map.Remove(t); } + void RemoveAt(unsigned nItem) { m_map.RemoveAt(nItem); } + void RemoveAll() { m_map.RemoveAll(); } + + void Reset() { m_map.RemoveAll(); } + + unsigned Find(const IgnoreType& t) { return m_map.Find(t); } + + const Ignore& operator=(const Ignore& ignore) + { + m_map.SetData(ignore.m_map); + return *this; + } + + bool operator!=(const Ignore& ignore) const + { return m_map.Compare(ignore.m_map); } + bool operator==(const Ignore& ignore) const + { return !operator!=(ignore); } +}; + + + +#endif // __IGNORE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/IgnorePage.h b/legacy/Transliterator_6b/IgnorePage.h new file mode 100644 index 0000000..d69fff3 --- /dev/null +++ b/legacy/Transliterator_6b/IgnorePage.h @@ -0,0 +1,188 @@ +#ifndef __IGNOREPAGE_H__ +#define __IGNOREPAGE_H__ + +#include "trnsoptionspage.h" + +class CIgnorePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEIGNORE }; + + CRichEditCtrl m_reIgnore; + CListBox m_lbIgnore; + enum { Trns , Rus }; + enum { nTrnsRus = 50 }; + enum { CP = 1251 }; + char m_strTrnsRus[2][nTrnsRus]; + + void UpdateLanguage() + { + TrnsOptionsPage::UpdateLanguage(); + UpdateTrnsRusString(); + InitListIgnore(); + } + + void UpdateTrnsRusString() + { + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); + } + + void InitListIgnore() + { + m_lbIgnore.ResetContent(); + char strText[IgnoreString::nCountInit+40]; + const Ignore& rIgnore=GetOptions()->m_Ignore; + for(unsigned i=0;i().GetData()); + if(rIgnore[i].Get<1>() != Translate::trnsNone) + { + lstrcat(strText," - "); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsTrnstoRus) + lstrcat(strText,m_strTrnsRus[Trns]); + if((int)rIgnore[i].Get<1>() & (int)Translate::trnsRustoTrns) + { + lstrcat(strText,","); + lstrcat(strText,m_strTrnsRus[Rus]); + } + } + m_lbIgnore.AddString(strText); + } + } + + void Init() + { + InitListIgnore(); + m_reIgnore.SetWindowText(""); + CheckDlgButton(IDC_TRNSTORUS,FALSE); + CheckDlgButton(IDC_RUSTOTRNS,FALSE); + } + + unsigned FindIgnore(const char* str) + { + static const Translate::LangTranslate aMapLT[]= + { + Translate::trnsNone, + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsAll, + }; + + IgnoreType type; + type.Get<0>()=str; + + for(int i=0;i()=aMapLT[i]; + unsigned uFind=GetOptions()->m_Ignore.Find(type); + if(uFind!=(unsigned)-1) + return uFind; + } + return (unsigned)-1; + } + + BEGIN_DDX_MAP(CIgnorePage) + if(!bSaveAndValidate) + { + Init(); + } + END_DDX_MAP() + + BEGIN_MSG_MAP(CIgnorePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_LISTIGNORE,LBN_SELCHANGE, OnLbnSelChangeListIgnore) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemoveClear) + COMMAND_ID_HANDLER(IDC_CLEAR, OnAddRemoveClear) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_lbIgnore=GetDlgItem(IDC_LISTIGNORE); + m_reIgnore=GetDlgItem(IDC_IGNORE); + SendDlgItemMessage(IDC_IGNORE,EM_LIMITTEXT,(WPARAM)IgnoreString::nCountInit-1,0); + UpdateTrnsRusString(); + + return 0; + } + + LRESULT OnLbnSelChangeListIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + char strText[IgnoreString::nCountInit]; + wchar_t strTextW[IgnoreString::nCountInit]; + + IgnoreType& type=GetOptions()->m_Ignore[m_lbIgnore.GetCurSel()]; + lstrcpy(strText,type.Get<0>().GetData()); + + ::MultiByteToWideChar(CP,0,strText,IgnoreString::nCountInit-1,strTextW,IgnoreString::nCountInit-1); + + m_reIgnore.SetTextEx((LPCSTR)strTextW,ST_DEFAULT,1200); + + CheckDlgButton(IDC_TRNSTORUS,type.Get<1>()&Translate::trnsTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,type.Get<1>()&Translate::trnsRustoTrns); + + return 0; + } + + LRESULT OnAddRemoveClear(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Ignore& rIgnore=GetOptions()->m_Ignore; + switch(wID) + { + case IDC_ADD: + { + IgnoreType type; + + wchar_t wstr[IgnoreString::nCountInit]; + m_reIgnore.GetTextEx((LPSTR)wstr,(IgnoreString::nCountInit-1)*sizeof(wchar_t),GT_DEFAULT,1200); + if(!wstr[0]) + break; + + ::WideCharToMultiByte(CP,0,wstr,IgnoreString::nCountInit-1,type.Get<0>().GetData(), + IgnoreString::nCountInit-1,0,0); + + unsigned uFind=FindIgnore(type.Get<0>().GetData()); + if(uFind!=(unsigned)-1) + { + rIgnore[uFind].Get<0>()=type.Get<0>(); + Translate::LangTranslate& lt=rIgnore[uFind].Get<1>(); + lt=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)lt|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)lt|= (int)Translate::trnsRustoTrns; + } + else + { + type.Get<1>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<1>()|= (int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<1>()|= (int)Translate::trnsRustoTrns; + rIgnore.Add(type); + } + } + break; + case IDC_REMOVE: + { + unsigned cursel = (unsigned)m_lbIgnore.GetCurSel(); + if(cursel!=(unsigned)LB_ERR) + rIgnore.RemoveAt(cursel); + } + break; + case IDC_CLEAR: + rIgnore.RemoveAll(); + break; + } + InitListIgnore(); + + return 0; + } +}; + +#endif // __IGNOREPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/LangProfile.h b/legacy/Transliterator_6b/LangProfile.h new file mode 100644 index 0000000..7f65fd1 --- /dev/null +++ b/legacy/Transliterator_6b/LangProfile.h @@ -0,0 +1,52 @@ +#ifndef __LANGPROFILE_H___ +#define __LANGPROFILE_H___ + +#include "types.h" + +struct LangProfile +{ + // Array + LangArray m_aSymbols; + // Name + LangString m_strName; + // Ignore + enum + { + Begin1, + End1, + Begin2, + End2, + nIgnore + }; + LangString m_astrIgnore[nIgnore]; + + // Default + static const wchar_t* DefaultUser() { return L"User"; } + static const wchar_t* DefaultIgnore() { return L"**"; } + + // Reset + void ResetSymbols() { m_aSymbols.clear(); } + void ResetName() { m_strName.clear(); } + void ResetNameUser() { m_strName=DefaultUser(); } + + void ResetIgnore() + { + for(int i=0;i(strIn)), + m_strOut(strOut), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,Translate::Direction dir,size_t nChar,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_dir(dir), + m_nChar(nChar), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + LangStruct(const char* strIn,char* strOut,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(const_cast(strIn)), + m_strOut(strOut), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(char* strIn,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strIn(strIn), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(false) + { Init(); } + + LangStruct(wchar_t* strInW,size_t nChar,bool bTrns,bool bInsert,const LangProfile* pProfile=0) : + m_strInW(strInW), + m_strOut(0), + m_nChar(nChar), + m_bTrns(bTrns), + m_bInsert(bInsert), + m_pProfile(pProfile), + m_bWide(true) + { Init(); } + + ~LangStruct() + { Destroy(); } + + void Init() + { + // nChar + if(!m_nChar) + m_nChar=m_bWide?(size_t)lstrlenW(m_strInW):(size_t)lstrlenA(m_strIn); + // Wide + if(m_bWide) + { + m_strIn=new char[m_nChar+1]; + ::WideCharToMultiByte(CP,0,m_strInW,m_nChar+1,m_strIn,m_nChar+1,0,0); + } + // Out + m_bOut= !m_strOut; + if(m_bOut) + m_strOut=new char[m_nChar*LangString::nCountInit+1]; + } + + void Destroy() + { + if(m_bOut) + { + lstrcpyn(m_strIn,m_strOut,m_nChar); + delete[] m_strOut; + } + if(m_bWide) + { + ::MultiByteToWideChar(CP,0,m_strIn,m_nChar+1,m_strInW,m_nChar+1); + delete[] m_strIn; + } + } + + inline const char* GetIn() const { return m_strIn; } + inline char* GetOut() const { return m_strOut; } + inline Translate::Direction GetDirection() const { return m_dir; } + inline size_t GetCharCount() const { return m_nChar; } + inline const LangProfile* GetProfile() const { return m_pProfile; } + inline void SetProfile(const LangProfile* pProfile) const + { (const_cast(this))->m_pProfile=pProfile; } + inline bool IsTrns() const { return m_bTrns; } + inline bool GetInsert() const { return m_bInsert; } + + inline bool Empty() const { return !m_pProfile->m_map.GetLast()||!*m_strIn||!m_nChar; } + inline void Clear() const { GetOut()[0]=0; } +}; + +#endif // __LANGSTRUCT_H___ diff --git a/legacy/Transliterator_6b/Language.cpp b/legacy/Transliterator_6b/Language.cpp new file mode 100644 index 0000000..26b286f --- /dev/null +++ b/legacy/Transliterator_6b/Language.cpp @@ -0,0 +1,426 @@ +#include "stdafx.h" +#include "language.h" +#include "global.h" +#include + +void Language::ResetProfile(unsigned nProfile) +{ + typedef void (*ResetFunc)(LangProfile&); + + static const ResetFunc m_aResetFunc[nProfiles]= + { + &Language::Reset1, + &Language::Reset2, + &Language::Reset3, + &Language::Reset4, + &Language::Reset5, + &Language::Reset6, + &Language::Reset7, + &Language::Reset8, + &Language::Reset9, + }; + + (*m_aResetFunc[nProfile])(*GetProfile(nProfile)); +} + +void Language::Reset() +{ + for(unsigned i=0;im_aSymbols.begin(); + it!=pProfile->m_aSymbols.end();it++) + { + const LangString& rString = i1?it->get<1>():it->get<0>(); + + if(maxlenTget<0>().length()) + maxlenI=it->get<0>().length(); + } + + while(*pIn) + { + if(Translate_Ignore(&pIn,&pOut,dir,pProfile)) + continue; + if(Translate_IgnoreText(&pIn,&pOut,dir,maxlenI)) + continue; + if(Translate_Translate(&pIn,&pOut,dir,pProfile,maxlenT)) + continue; + if(*pIn) + *pOut++=*pIn++; + } + // End + *pOut=0; +} + +bool Language::Translate_Translate(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,LangProfile* pProfile,size_t maxlenT) +{ + // Check + if(!**ppIn) + return true; + + // Init + const int i1= dir==Translate::dir2_1; + + // Translate + for(size_t len=maxlenT;len;len--) + { + for(LangArray::iterator it=pProfile->m_aSymbols.begin(); + it!=pProfile->m_aSymbols.end();it++) + { + // Translate::LangTranslate + const Translate::Translation& trnsItem=it->get<2>(); + if(dir==Translate::dir1_2) + { + if(!(trnsItem&Translate::trns1_2)) + continue; + } + else + { + if(!(trnsItem&Translate::trns2_1)) + continue; + } + + const LangString& rStringIn = i1?it->get<1>():it->get<0>(); + if(rStringIn.length() == len && + !LangStringTraits::compare(*ppIn,rStringIn.c_str(),len)) + { + const LangString& rStringOut = i1?it->get<0>():it->get<1>(); + NN::wstrcpy_change(ppOut,rStringOut.c_str()); + (*ppIn)+=len; + return true; + } + } + } + return false; +} + +bool Language::Translate_Ignore(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,LangProfile* pProfile) +{ + // Check + if(!**ppIn) + return true; + + // Init + const int i1= dir==Translate::dir2_1; + + const LangString& strBeginIn= + pProfile->m_astrIgnore[i1?LangProfile::Begin2:LangProfile::Begin1]; + const LangString& strEndIn= + pProfile->m_astrIgnore[i1?LangProfile::End2:LangProfile::End1]; + const LangString& strBeginOut= + pProfile->m_astrIgnore[i1?LangProfile::Begin1:LangProfile::Begin2]; + const LangString& strEndOut= + pProfile->m_astrIgnore[i1?LangProfile::End1:LangProfile::End2]; + + // Ignore + if(!LangStringTraits::compare(*ppIn,strBeginIn.c_str(),strBeginIn.length())) + { + // Continue + (*ppIn)+=strBeginIn.length(); + + // Copy Ignore + //if(g_Options.m_bCopyIgnore) + //NN::wstrcpy_change(&pOut,strBeginOut) + strBeginOut; + + // Copy + while(**ppIn&& + LangStringTraits::compare(*ppIn,strEndIn.c_str(),strEndIn.length())) + *(*ppOut)++=*(*ppIn)++; + + if(!**ppIn) + return true; + + (*ppIn)+=strEndIn.length(); + + // Copy Ignore + //if(g_Options.m_bCopyIgnore) + //NN::wstrcpy_change(&pOut,strEndOut); + strEndOut; + + if(!**ppIn) + return true; + } + return false; +} + +bool Language::Translate_IgnoreText(const wchar_t** ppIn,wchar_t** ppOut, + Translate::Direction dir,size_t maxlenI) +{ + // Check + if(!**ppIn) + return true; + + // Ignore text + for(size_t lenI=maxlenI;lenI;lenI--) + { + for(IgnoreArray::iterator it=g_Ignore.begin();it!=g_Ignore.end();it++) + { + // Check translation direction + const Translate::Translation& trnsItem=it->get<1>(); + if(dir==Translate::dir1_2) + { + if(!(trnsItem&Translate::trns1_2)) + continue; + } + else + { + if(!(trnsItem&Translate::trns2_1)) + continue; + } + + const IgnoreString& ignorestr=it->get<0>(); + if(ignorestr.length()==lenI&& + !LangStringTraits::compare(*ppIn,ignorestr.c_str(),lenI)) + { + NN::wstrcpy_change(ppOut,ignorestr.c_str()); + (*ppIn)+=ignorestr.length(); + return true; + } + } + } + return false; +} + + /* + +void Language::Ignore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + // Empty + if(ls.Empty()) + { + ls.Clear(); + return; + } + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + const char* pFromOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToOut = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + NN::Tuple aCheck[LangMap::nCountInit]; + UpdateCheck(ls.GetProfile(),aCheck); + + if(ls.GetInsert()) + { + bool bInsert=false; + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + // Text + if(IsTrnsRus(*pIn,ls.IsTrns(),aCheck)) + { + bInsert=true; + + strcpy_change(&pOut,pFromOut); + + while(*pIn&& + (IsTrnsRus(*pIn,ls.IsTrns(),aCheck)|| + (!IsTrns(*pIn,aCheck)&&!IsRus(*pIn,aCheck)))&& + iChar=ls.GetCharCount()) + break; + + iChar+=strcpy_change(&pOut,pToOut); + + bInsert=false; + } + *pOut++=*pIn++; + } + if(bInsert) + strcpy_change(&pOut,pToOut); + } + else + { + for(size_t iChar=0;*pIn&&iChar=ls.GetCharCount()) + break; + + if(!LangStringTraits::CompareArrayLength( + pIn,pToIn,LangProfile::nIgnore)) + pIn+=nToIn; + + if(!*pIn||iChar>=ls.GetCharCount()) + break; + } + *pOut++=*pIn++; + } + } + *pOut=0; +} + +void Language::SetIgnore(const LangStruct& ls) +{ + // Profile + if(!ls.GetProfile()) + ls.SetProfile(m_pCurProfile); + if(!ls.GetProfile()->m_map.GetLast()) + { + lstrcpy(ls.GetOut(),ls.GetIn()); + return; + } + + const char* pIn=ls.GetIn(); + char* pOut=ls.GetOut(); + + const char* pFromIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::BeginTrns:LangProfile::BeginRus]; + const char* pToIn = ls.GetProfile()->m_strIgnore[ls.GetDirection()==Translate::dirTrnstoRus?LangProfile::EndTrns:LangProfile::EndRus]; + + const int nFromIn = lstrlen(pFromIn); + const int nToIn = lstrlen(pToIn); + + if(ls.GetInsert()) + { + bool bFrom=true; + lstrcpy(pOut,pIn); + + for(size_t iChar=0;*pIn&&iChar TupleCharChar; + template + bool FindCheck_(char c,TupleCharChar* paCheck) + { + while(paCheck->Get()) + if((paCheck++)->Get()==c) + return true; + return false; + } + + inline bool FindCheck(char c,bool bTrns,TupleCharChar* paCheck) + { return bTrns?FindCheck_<0>(c,paCheck):FindCheck_<1>(c,paCheck); } + + void UpdateCheck(const LangProfile* pProfile,TupleCharChar* paCheck) + { + for(size_t i=0;im_map.GetCount();i++) + { + paCheck[i].Get<0>()=pProfile->m_map[i].Get<0>().GetAt(0); + paCheck[i].Get<1>()=pProfile->m_map[i].Get<1>().GetAt(0); + } + } + + bool IsTrnsRus(CHAR c,bool bTrns,TupleCharChar* paCheck) + { return FindCheck(c,bTrns,paCheck); } + + bool IsTrns(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,true,paCheck); } + + bool IsRus(CHAR c,TupleCharChar* paCheck) + { return IsTrnsRus(c,false,paCheck); } +public: + const Language& operator=(const Language& src) + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName); + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j]); + + // Map + pProfile->m_map.SetData(pProfileR->m_map); + } + return *this; + } + + bool operator!=(const Language& language) const + { + // Language + for(int i=profUser1;im_strName,pProfileR->m_strName)) + return true; + + // Ignore + for(int j=0;jm_strIgnore[j],pProfileR->m_strIgnore[j])) + return true; + + // Map + if(pProfile->m_map.Compare(pProfileR->m_map)) + return true; + } + return false; + } + bool operator==(const Language& language) const + { return !operator!=(language); } + + typedef void (*ResetFunc)(LangProfile&); + static ResetFunc m_aResetFunc[nProfiles]; +}; +*/ + + +#endif // __LANGUAGE_H__ diff --git a/legacy/Transliterator_6b/LanguageReset1.cpp b/legacy/Transliterator_6b/LanguageReset1.cpp new file mode 100644 index 0000000..be4259f --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset1.cpp @@ -0,0 +1,128 @@ +#include "stdafx.h" +#include "language.h" + +// Standard +void Language::Reset1(LangProfile& rProfile) +{ + // Symbols + static const LangType aSymbols[]= + { + LangType(L"a",L"",Translate::trnsAll), + LangType(L"A",L"",Translate::trnsAll), + LangType(L"b",L"",Translate::trnsAll), + LangType(L"B",L"",Translate::trnsAll), + LangType(L"c",L"",Translate::trnsAll), + LangType(L"C",L"",Translate::trnsAll), + LangType(L"ch",L"",Translate::trnsAll), + LangType(L"cH",L"",Translate::trns1_2), + LangType(L"CH",L"",Translate::trnsAll), + LangType(L"Ch",L"",Translate::trns1_2), + LangType(L"d",L"",Translate::trnsAll), + LangType(L"D",L"",Translate::trnsAll), + LangType(L"e",L"",Translate::trnsAll), + LangType(L"E",L"",Translate::trnsAll), + LangType(L"e'",L"",Translate::trnsAll), + LangType(L"E'",L"",Translate::trnsAll), + LangType(L"e`",L"",Translate::trnsAll), + LangType(L"E`",L"",Translate::trnsAll), + LangType(L"e''",L"",Translate::trnsAll), + LangType(L"E''",L"",Translate::trnsAll), + LangType(L"f",L"",Translate::trnsAll), + LangType(L"F",L"",Translate::trnsAll), + LangType(L"g",L"",Translate::trnsAll), + LangType(L"G",L"",Translate::trnsAll), + LangType(L"g'`",L"",Translate::trnsAll), + LangType(L"g`'",L"",Translate::trns1_2), + LangType(L"G'`",L"",Translate::trnsAll), + LangType(L"G`'",L"",Translate::trns1_2), + LangType(L"h",L"",Translate::trnsAll), + LangType(L"H",L"",Translate::trnsAll), + LangType(L"i",L"",Translate::trnsAll), + LangType(L"I",L"",Translate::trnsAll), + LangType(L"i'",L"",Translate::trnsAll), + LangType(L"I'",L"",Translate::trnsAll), + LangType(L"i`",L"",Translate::trnsAll), + LangType(L"I`",L"",Translate::trnsAll), + LangType(L"j",L"",Translate::trnsAll), + LangType(L"J",L"",Translate::trnsAll), + LangType(L"k",L"",Translate::trnsAll), + LangType(L"K",L"",Translate::trnsAll), + LangType(L"l",L"",Translate::trnsAll), + LangType(L"L",L"",Translate::trnsAll), + LangType(L"m",L"",Translate::trnsAll), + LangType(L"M",L"",Translate::trnsAll), + LangType(L"n",L"",Translate::trnsAll), + LangType(L"N",L"",Translate::trnsAll), + LangType(L"o",L"",Translate::trnsAll), + LangType(L"O",L"",Translate::trnsAll), + LangType(L"p",L"",Translate::trnsAll), + LangType(L"P",L"",Translate::trnsAll), + LangType(L"q",L"",Translate::trns1_2), + LangType(L"Q",L"",Translate::trns1_2), + LangType(L"r",L"",Translate::trnsAll), + LangType(L"R",L"",Translate::trnsAll), + LangType(L"s",L"",Translate::trnsAll), + LangType(L"S",L"",Translate::trnsAll), + LangType(L"sh",L"",Translate::trnsAll), + LangType(L"sH",L"",Translate::trns1_2), + LangType(L"SH",L"",Translate::trnsAll), + LangType(L"Sh",L"",Translate::trns1_2), + LangType(L"sh''",L"",Translate::trns1_2), + LangType(L"sH''",L"",Translate::trns1_2), + LangType(L"Sh''",L"",Translate::trns1_2), + LangType(L"SH''",L"",Translate::trns1_2), + LangType(L"sch'",L"",Translate::trnsAll), + LangType(L"sCh'",L"",Translate::trns1_2), + LangType(L"scH'",L"",Translate::trns1_2), + LangType(L"sCH'",L"",Translate::trns1_2), + LangType(L"Sch'",L"",Translate::trns1_2), + LangType(L"SCh'",L"",Translate::trns1_2), + LangType(L"ScH'",L"",Translate::trns1_2), + LangType(L"SCH'",L"",Translate::trnsAll), + LangType(L"t",L"",Translate::trnsAll), + LangType(L"T",L"",Translate::trnsAll), + LangType(L"tc'",L"",Translate::trns1_2), + LangType(L"tC'",L"",Translate::trns1_2), + LangType(L"Tc'",L"",Translate::trns1_2), + LangType(L"TC'",L"",Translate::trns1_2), + LangType(L"u",L"",Translate::trnsAll), + LangType(L"U",L"",Translate::trnsAll), + LangType(L"u'",L"",Translate::trnsAll), + LangType(L"U'",L"",Translate::trnsAll), + LangType(L"v",L"",Translate::trnsAll), + LangType(L"V",L"",Translate::trnsAll), + LangType(L"w",L"",Translate::trns1_2), + LangType(L"W",L"",Translate::trns1_2), + LangType(L"w''",L"",Translate::trns1_2), + LangType(L"W''",L"",Translate::trns1_2), + LangType(L"x",L"",Translate::trns1_2), + LangType(L"X",L"",Translate::trns1_2), + LangType(L"y",L"",Translate::trnsAll), + LangType(L"Y",L"",Translate::trnsAll), + LangType(L"ya",L"",Translate::trnsAll), + LangType(L"yA",L"",Translate::trns1_2), + LangType(L"YA",L"",Translate::trnsAll), + LangType(L"Ya",L"",Translate::trns1_2), + LangType(L"yu",L"",Translate::trnsAll), + LangType(L"yU",L"",Translate::trns1_2), + LangType(L"YU",L"",Translate::trnsAll), + LangType(L"Yu",L"",Translate::trns1_2), + LangType(L"y'",L"",Translate::trnsAll), + LangType(L"Y'",L"",Translate::trnsAll), + LangType(L"z",L"",Translate::trnsAll), + LangType(L"Z",L"",Translate::trnsAll), + LangType(L"'",L"",Translate::trnsAll), + LangType(L"''",L"",Translate::trnsAll), + LangType(L"`",L"",Translate::trnsAll), + LangType(L"``",L"",Translate::trnsAll), + }; + rProfile.m_aSymbols.assign(aSymbols, + aSymbols+sizeof(aSymbols)/sizeof(aSymbols[0])); + + // Name + static const wchar_t strName[]=L"Standard"; + rProfile.m_strName=strName; + + // Ignore + rProfile.ResetIgnore(); +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset2.cpp b/legacy/Transliterator_6b/LanguageReset2.cpp new file mode 100644 index 0000000..b4865c6 --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset2.cpp @@ -0,0 +1,94 @@ +#include "stdafx.h" +#include "language.h" + +// Symbols +void Language::Reset2(LangProfile& rProfile) +{ + // Symbols + static const LangType aSymbols[]= + { + LangType(L"a",L"",Translate::trnsAll), + LangType(L"A",L"",Translate::trnsAll), + LangType(L"6",L"",Translate::trnsAll), + LangType(L"6",L"",Translate::trns2_1), + LangType(L"B",L"",Translate::trnsAll), + LangType(L"",L"",Translate::trns2_1), + LangType(L"r",L"",Translate::trnsAll), + LangType(L"r",L"",Translate::trns2_1), + LangType(L"D",L"",Translate::trnsAll), + LangType(L"D",L"",Translate::trns2_1), + LangType(L"e",L"",Translate::trnsAll), + LangType(L"E",L"",Translate::trnsAll), + LangType(L"e",L"",Translate::trns2_1), + LangType(L"E",L"",Translate::trns2_1), + LangType(L">|<",L"",Translate::trnsAll), + LangType(L"}|{",L"",Translate::trnsAll), + LangType(L">-|-<",L"",Translate::trns2_1), + LangType(L"}-|-{",L"",Translate::trns1_2), + LangType(L"3",L"",Translate::trnsAll), + LangType(L"3",L"",Translate::trns2_1), + LangType(L"u",L"",Translate::trnsAll), + LangType(L"U",L"",Translate::trnsAll), + LangType(L"u'",L"",Translate::trnsAll), + LangType(L"U'",L"",Translate::trnsAll), + LangType(L"u`",L"",Translate::trns1_2), + LangType(L"U`",L"",Translate::trns1_2), + LangType(L"k",L"",Translate::trnsAll), + LangType(L"K",L"",Translate::trnsAll), + LangType(L"/\\",L"",Translate::trnsAll), + LangType(L"JI",L"",Translate::trnsAll), + LangType(L"m",L"",Translate::trnsAll), + LangType(L"M",L"",Translate::trnsAll), + LangType(L"H",L"",Translate::trnsAll), + LangType(L"H",L"",Translate::trns2_1), + LangType(L"o",L"",Translate::trnsAll), + LangType(L"O",L"",Translate::trnsAll), + LangType(L"n",L"",Translate::trnsAll), + LangType(L"n",L"",Translate::trns2_1), + LangType(L"p",L"",Translate::trnsAll), + LangType(L"P",L"",Translate::trnsAll), + LangType(L"c",L"",Translate::trnsAll), + LangType(L"C",L"",Translate::trnsAll), + LangType(L"T",L"",Translate::trnsAll), + LangType(L"T",L"",Translate::trns2_1), + LangType(L"y",L"",Translate::trnsAll), + LangType(L"Y",L"",Translate::trnsAll), + LangType(L"f",L"",Translate::trnsAll), + LangType(L"F",L"",Translate::trnsAll), + LangType(L"<|>",L"",Translate::trnsAll), + LangType(L"",L"",Translate::trnsAll), + LangType(L"x",L"",Translate::trnsAll), + LangType(L"X",L"",Translate::trnsAll), + LangType(L"L|",L"",Translate::trnsAll), + LangType(L"L|",L"",Translate::trns2_1), + LangType(L"4",L"",Translate::trnsAll), + LangType(L"4",L"",Translate::trns2_1), + LangType(L"LLI",L"",Translate::trnsAll), + LangType(L"w",L"",Translate::trnsAll), + LangType(L"LL|",L"",Translate::trnsAll), + LangType(L"LL|",L"",Translate::trns2_1), + LangType(L"\\",L"",Translate::trnsAll), + LangType(L"\\\\",L"",Translate::trns2_1), + LangType(L"bI",L"",Translate::trnsAll), + LangType(L"bI",L"",Translate::trns2_1), + LangType(L"b",L"",Translate::trnsAll), + LangType(L"b",L"",Translate::trns2_1), + LangType(L"e",L"",Translate::trns2_1), + LangType(L"E",L"",Translate::trns2_1), + LangType(L"IO",L"",Translate::trnsAll), + LangType(L"IO",L"",Translate::trns2_1), + LangType(L"I-O",L"",Translate::trns1_2), + LangType(L"I-O",L"",Translate::trns2_1), + LangType(L"9I",L"",Translate::trnsAll), + LangType(L"9I",L"",Translate::trns2_1), + }; + rProfile.m_aSymbols.assign(aSymbols, + aSymbols+sizeof(aSymbols)/sizeof(aSymbols[0])); + + // Name + static const wchar_t strName[]=L"Symbols"; + rProfile.m_strName=strName; + + // Ignore + rProfile.ResetIgnore(); +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset3.cpp b/legacy/Transliterator_6b/LanguageReset3.cpp new file mode 100644 index 0000000..e6e31cf --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset3.cpp @@ -0,0 +1,110 @@ +#include "stdafx.h" +#include "language.h" + +// GOST +void Language::Reset3(LangProfile& rProfile) +{ + // Symbols + static const LangType aSymbols[]= + { + LangType(L"a",L"",Translate::trnsAll), + LangType(L"A",L"",Translate::trnsAll), + LangType(L"b",L"",Translate::trnsAll), + LangType(L"B",L"",Translate::trnsAll), + LangType(L"v",L"",Translate::trnsAll), + LangType(L"V",L"",Translate::trnsAll), + LangType(L"g",L"",Translate::trnsAll), + LangType(L"G",L"",Translate::trnsAll), + LangType(L"d",L"",Translate::trnsAll), + LangType(L"D",L"",Translate::trnsAll), + LangType(L"e",L"",Translate::trnsAll), + LangType(L"E",L"",Translate::trnsAll), + LangType(L"jo",L"",Translate::trnsAll), + LangType(L"jO",L"",Translate::trns1_2), + LangType(L"JO",L"",Translate::trnsAll), + LangType(L"Jo",L"",Translate::trns1_2), + LangType(L"zh",L"",Translate::trnsAll), + LangType(L"zH",L"",Translate::trns1_2), + LangType(L"ZH",L"",Translate::trnsAll), + LangType(L"Zh",L"",Translate::trns1_2), + LangType(L"z",L"",Translate::trnsAll), + LangType(L"Z",L"",Translate::trnsAll), + LangType(L"i",L"",Translate::trnsAll), + LangType(L"I",L"",Translate::trnsAll), + LangType(L"jj",L"",Translate::trnsAll), + LangType(L"jJ",L"",Translate::trns1_2), + LangType(L"JJ",L"",Translate::trnsAll), + LangType(L"Jj",L"",Translate::trns1_2), + LangType(L"k",L"",Translate::trnsAll), + LangType(L"K",L"",Translate::trnsAll), + LangType(L"l",L"",Translate::trnsAll), + LangType(L"L",L"",Translate::trnsAll), + LangType(L"m",L"",Translate::trnsAll), + LangType(L"M",L"",Translate::trnsAll), + LangType(L"n",L"",Translate::trnsAll), + LangType(L"N",L"",Translate::trnsAll), + LangType(L"o",L"",Translate::trnsAll), + LangType(L"O",L"",Translate::trnsAll), + LangType(L"p",L"",Translate::trnsAll), + LangType(L"P",L"",Translate::trnsAll), + LangType(L"r",L"",Translate::trnsAll), + LangType(L"R",L"",Translate::trnsAll), + LangType(L"s",L"",Translate::trnsAll), + LangType(L"S",L"",Translate::trnsAll), + LangType(L"t",L"",Translate::trnsAll), + LangType(L"T",L"",Translate::trnsAll), + LangType(L"u",L"",Translate::trnsAll), + LangType(L"U",L"",Translate::trnsAll), + LangType(L"f",L"",Translate::trnsAll), + LangType(L"F",L"",Translate::trnsAll), + LangType(L"kh",L"",Translate::trnsAll), + LangType(L"kH",L"",Translate::trns1_2), + LangType(L"KH",L"",Translate::trnsAll), + LangType(L"Kh",L"",Translate::trns1_2), + LangType(L"c",L"",Translate::trnsAll), + LangType(L"C",L"",Translate::trnsAll), + LangType(L"ch",L"",Translate::trnsAll), + LangType(L"cH",L"",Translate::trns1_2), + LangType(L"CH",L"",Translate::trnsAll), + LangType(L"Ch",L"",Translate::trns1_2), + LangType(L"sh",L"",Translate::trnsAll), + LangType(L"sH",L"",Translate::trns1_2), + LangType(L"SH",L"",Translate::trnsAll), + LangType(L"Sh",L"",Translate::trns1_2), + LangType(L"shh",L"",Translate::trnsAll), + LangType(L"shH",L"",Translate::trns1_2), + LangType(L"sHh",L"",Translate::trns1_2), + LangType(L"sHH",L"",Translate::trns1_2), + LangType(L"SHH",L"",Translate::trnsAll), + LangType(L"SHh",L"",Translate::trns1_2), + LangType(L"ShH",L"",Translate::trns1_2), + LangType(L"Shh",L"",Translate::trns1_2), + LangType(L"\"",L"",Translate::trnsAll), + LangType(L"\"\"",L"",Translate::trnsAll), + LangType(L"y",L"",Translate::trnsAll), + LangType(L"Y",L"",Translate::trnsAll), + LangType(L"'",L"",Translate::trnsAll), + LangType(L"''",L"",Translate::trnsAll), + LangType(L"eh",L"",Translate::trnsAll), + LangType(L"eH",L"",Translate::trns1_2), + LangType(L"EH",L"",Translate::trnsAll), + LangType(L"Eh",L"",Translate::trns1_2), + LangType(L"ju",L"",Translate::trnsAll), + LangType(L"jU",L"",Translate::trns1_2), + LangType(L"JU",L"",Translate::trnsAll), + LangType(L"Ju",L"",Translate::trns1_2), + LangType(L"ja",L"",Translate::trnsAll), + LangType(L"jA",L"",Translate::trns1_2), + LangType(L"JA",L"",Translate::trnsAll), + LangType(L"Ja",L"",Translate::trns1_2), + }; + rProfile.m_aSymbols.assign(aSymbols, + aSymbols+sizeof(aSymbols)/sizeof(aSymbols[0])); + + // Name + static const wchar_t strName[]=L"Symbols"; + rProfile.m_strName=strName; + + // Ignore + rProfile.ResetIgnore(); +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset4.cpp b/legacy/Transliterator_6b/LanguageReset4.cpp new file mode 100644 index 0000000..f69e80d --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset4.cpp @@ -0,0 +1,94 @@ +#include "stdafx.h" +#include "language.h" + +// QWER +void Language::Reset4(LangProfile& rProfile) +{ + // Symbols + static const LangType aSymbols[]= + { + LangType(L"`",L"",Translate::trnsAll), + LangType(L"~",L"",Translate::trnsAll), + LangType(L"@",L"\"",Translate::trnsAll), + LangType(L"#",L"",Translate::trnsAll), + LangType(L"$",L";",Translate::trnsAll), + LangType(L"^",L":",Translate::trnsAll), + LangType(L"&",L"?",Translate::trnsAll), + LangType(L"|",L"/",Translate::trnsAll), + LangType(L"q",L"",Translate::trnsAll), + LangType(L"w",L"",Translate::trnsAll), + LangType(L"e",L"",Translate::trnsAll), + LangType(L"r",L"",Translate::trnsAll), + LangType(L"t",L"",Translate::trnsAll), + LangType(L"y",L"",Translate::trnsAll), + LangType(L"u",L"",Translate::trnsAll), + LangType(L"i",L"",Translate::trnsAll), + LangType(L"o",L"",Translate::trnsAll), + LangType(L"p",L"",Translate::trnsAll), + LangType(L"[",L"",Translate::trnsAll), + LangType(L"{",L"",Translate::trnsAll), + LangType(L"]",L"",Translate::trnsAll), + LangType(L"}",L"",Translate::trnsAll), + LangType(L"a",L"",Translate::trnsAll), + LangType(L"s",L"",Translate::trnsAll), + LangType(L"d",L"",Translate::trnsAll), + LangType(L"f",L"",Translate::trnsAll), + LangType(L"g",L"",Translate::trnsAll), + LangType(L"h",L"",Translate::trnsAll), + LangType(L"j",L"",Translate::trnsAll), + LangType(L"k",L"",Translate::trnsAll), + LangType(L"l",L"",Translate::trnsAll), + LangType(L";",L"",Translate::trnsAll), + LangType(L":",L"",Translate::trnsAll), + LangType(L"'",L"",Translate::trnsAll), + LangType(L"\"",L"",Translate::trnsAll), + LangType(L"z",L"",Translate::trnsAll), + LangType(L"x",L"",Translate::trnsAll), + LangType(L"c",L"",Translate::trnsAll), + LangType(L"v",L"",Translate::trnsAll), + LangType(L"b",L"",Translate::trnsAll), + LangType(L"n",L"",Translate::trnsAll), + LangType(L"m",L"",Translate::trnsAll), + LangType(L",",L"",Translate::trnsAll), + LangType(L"<",L"",Translate::trnsAll), + LangType(L".",L"",Translate::trnsAll), + LangType(L">",L"",Translate::trnsAll), + LangType(L"/",L".",Translate::trnsAll), + LangType(L"?",L",",Translate::trnsAll), + LangType(L"Q",L"",Translate::trnsAll), + LangType(L"W",L"",Translate::trnsAll), + LangType(L"E",L"",Translate::trnsAll), + LangType(L"R",L"",Translate::trnsAll), + LangType(L"T",L"",Translate::trnsAll), + LangType(L"Y",L"",Translate::trnsAll), + LangType(L"U",L"",Translate::trnsAll), + LangType(L"I",L"",Translate::trnsAll), + LangType(L"O",L"",Translate::trnsAll), + LangType(L"P",L"",Translate::trnsAll), + LangType(L"A",L"",Translate::trnsAll), + LangType(L"S",L"",Translate::trnsAll), + LangType(L"D",L"",Translate::trnsAll), + LangType(L"F",L"",Translate::trnsAll), + LangType(L"G",L"",Translate::trnsAll), + LangType(L"H",L"",Translate::trnsAll), + LangType(L"J",L"",Translate::trnsAll), + LangType(L"K",L"",Translate::trnsAll), + LangType(L"L",L"",Translate::trnsAll), + LangType(L"Z",L"",Translate::trnsAll), + LangType(L"X",L"",Translate::trnsAll), + LangType(L"C",L"",Translate::trnsAll), + LangType(L"V",L"",Translate::trnsAll), + LangType(L"B",L"",Translate::trnsAll), + LangType(L"N",L"",Translate::trnsAll), + LangType(L"M",L"",Translate::trnsAll), + }; + rProfile.m_aSymbols.assign(aSymbols, + aSymbols+sizeof(aSymbols)/sizeof(aSymbols[0])); + + // Name + static const wchar_t strName[]=L"Symbols"; + rProfile.m_strName=strName; + + // Ignore + rProfile.ResetIgnore(); +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset5.cpp b/legacy/Transliterator_6b/LanguageReset5.cpp new file mode 100644 index 0000000..f30a7e7 Binary files /dev/null and b/legacy/Transliterator_6b/LanguageReset5.cpp differ diff --git a/legacy/Transliterator_6b/LanguageReset6.cpp b/legacy/Transliterator_6b/LanguageReset6.cpp new file mode 100644 index 0000000..4bd7a25 --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset6.cpp @@ -0,0 +1,9 @@ +#include "stdafx.h" +#include "language.h" + +// User1 +void Language::Reset6(LangProfile& rProfile) +{ + rProfile.ResetUser(); + rProfile.m_strName+=L"1"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset7.cpp b/legacy/Transliterator_6b/LanguageReset7.cpp new file mode 100644 index 0000000..aaecbed --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset7.cpp @@ -0,0 +1,9 @@ +#include "stdafx.h" +#include "language.h" + +// User2 +void Language::Reset7(LangProfile& rProfile) +{ + rProfile.ResetUser(); + rProfile.m_strName+=L"2"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset8.cpp b/legacy/Transliterator_6b/LanguageReset8.cpp new file mode 100644 index 0000000..2e2d4f5 --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset8.cpp @@ -0,0 +1,9 @@ +#include "stdafx.h" +#include "language.h" + +// User3 +void Language::Reset8(LangProfile& rProfile) +{ + rProfile.ResetUser(); + rProfile.m_strName+=L"3"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/LanguageReset9.cpp b/legacy/Transliterator_6b/LanguageReset9.cpp new file mode 100644 index 0000000..39c6906 --- /dev/null +++ b/legacy/Transliterator_6b/LanguageReset9.cpp @@ -0,0 +1,9 @@ +#include "stdafx.h" +#include "language.h" + +// User4 +void Language::Reset9(LangProfile& rProfile) +{ + rProfile.ResetUser(); + rProfile.m_strName+=L"4"; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/Msg.h b/legacy/Transliterator_6b/Msg.h new file mode 100644 index 0000000..d0d2881 --- /dev/null +++ b/legacy/Transliterator_6b/Msg.h @@ -0,0 +1,6 @@ +#ifndef __MSG_H__ +#define __MSG_H__ + +#define WM_APPLY (WM_USER+1) + +#endif // __MSG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Options.h b/legacy/Transliterator_6b/Options.h new file mode 100644 index 0000000..11b8183 --- /dev/null +++ b/legacy/Transliterator_6b/Options.h @@ -0,0 +1,111 @@ +#ifndef __OPTIONS_H__ +#define __OPTIONS_H__ + +#include "windowstate.h" + +struct Options +{ + enum { Trns , Rus }; + + BOOL m_bTranslate; + WindowState m_wndState; + + BOOL m_bShowTrayIcon; + BOOL m_bShowTaskBar; + BOOL m_bTopMost; + enum LoadOnStartUp + { + loadNo, + loadShown, + loadHidden + }; + LoadOnStartUp m_nLoadOnStartUp; + + enum Fonts + { + fontTrns, + fontRus, + fontTranslation, + nFont + }; + LOGFONT m_lfFont[nFont]; + + enum HotKeys + { + hkTrnstoRus, + hkRusEndTrns, + hkAuto, + hkShowHide, + hkCopyTrns, + hkCopyRus, + nHotKey + }; + NN::HotKey m_HotKey[nHotKey]; + + BOOL m_bCopyIgnore; + Translate::Direction m_nAutoTranslation; + + BOOL m_bWrapText; + BOOL m_bScrollText; + + UINT m_nCurProfile; + + BOOL m_bIgnore; + + void Reset() + { + m_bTranslate=TRUE; + m_wndState.Reset(); + + m_bShowTrayIcon=FALSE; + m_bShowTaskBar=TRUE; + m_bTopMost=FALSE; + m_nLoadOnStartUp=loadNo; + + m_HotKey[hkTrnstoRus].SetHotKey('T',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkRusEndTrns].SetHotKey('R',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkAuto].SetHotKey('A',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkShowHide].SetHotKey('S',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyTrns].SetHotKey('C',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + m_HotKey[hkCopyRus].SetHotKey('O',MOD_CONTROL|MOD_ALT|MOD_SHIFT); + + // Fonts + LOGFONT lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-14; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTrns]=lfCommon; + m_lfFont[fontRus]=lfCommon; + ::ZeroMemory(&lfCommon,sizeof(LOGFONT)); + lfCommon.lfCharSet=ANSI_CHARSET; + lfCommon.lfHeight=-10; + lfCommon.lfWeight=FW_NORMAL; + lstrcpy(lfCommon.lfFaceName,"Arial"); + m_lfFont[fontTranslation]=lfCommon; + + m_bCopyIgnore=FALSE; + m_nAutoTranslation=Translate::dirTrnstoRus; + + m_bWrapText=TRUE; + m_bScrollText=TRUE; + + m_nCurProfile=0; + + m_bIgnore=TRUE; + } + + const Options& operator=(const Options& options) + { + memcpy(this,&options,sizeof(Options)); + return *this; + } + + bool operator==(const Options& options) const + { return !operator!=(options); } + bool operator!=(const Options& options) const + { return memcmp(this,&options,sizeof(Options)); } +}; + +#endif // __OPTIONS_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/OptionsDlg.h b/legacy/Transliterator_6b/OptionsDlg.h new file mode 100644 index 0000000..9e0d784 --- /dev/null +++ b/legacy/Transliterator_6b/OptionsDlg.h @@ -0,0 +1,166 @@ +#ifndef __OPTIONSDLG_H__ +#define __OPTIONSDLG_H__ + +#include "generalpage.h" +#include "hotkeyspage.h" +#include "profilepage.h" +#include "ignorepage.h" + +class COptionsDlg : public NN::OptionsDialogImpl, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_OPTIONS }; + + NN::AutoValue m_nCurPage; + CListBox m_ctrlOptions; + + CGeneralPage m_pageGeneral; + CHotKeysPage m_pageHotKeys; + CProfilePage m_pageProfile; + CIgnorePage m_pageIgnore; + + void UpdateLanguage() + { + NN::DialogLang::UpdateLanguage(); + + m_pageGeneral.UpdateLanguage(); + m_pageHotKeys.UpdateLanguage(); + m_pageProfile.UpdateLanguage(); + m_pageIgnore.UpdateLanguage(); + + InitListOptions(); + } + + void InitListOptions() + { + for(int i=0;i + void UpdateChange(T& t,const T& tc,BOOL& bChange) + { + if(t!=tc) + { + t=tc; + bChange=TRUE; + } + } + + void Apply() + { + DoDataExchange(DDX_SAVE); + + BOOL bChangeTranslation=FALSE; + BOOL bChangeOptions=FALSE; + + UpdateChange(g_Language,GetOptions()->m_Language,bChangeTranslation); + UpdateChange(g_Ignore,GetOptions()->m_Ignore,bChangeTranslation); + UpdateChange(g_Options,GetOptions()->m_Options,bChangeOptions); + + ::SendMessage(GetParent(),WM_APPLY,(WPARAM)bChangeTranslation,(LPARAM)bChangeOptions); + } + + void InitOptionsPage() + { + GetOptions()->Set(g_Language,g_Options,g_Ignore); + SetOptionsPage(); + DoDataExchange(DDX_LOAD); + } + + BEGIN_MSG_MAP(COptionsDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_DESTROY, OnDestroy) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + + COMMAND_ID_HANDLER(IDOK, OnOK) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDC_APPLY, OnApply) + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + + COMMAND_HANDLER(IDC_LISTOPTIONS, LBN_SELCHANGE, OnSelChangeListOptions) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DialogLang_Init(); + m_ctrlOptions=GetDlgItem(IDC_LISTOPTIONS); + + // Create + m_pageGeneral.Create(m_hWnd); + m_pageHotKeys.Create(m_hWnd); + m_pageProfile.Create(m_hWnd); + m_pageIgnore.Create(m_hWnd); + + AddPage(&m_pageGeneral); + AddPage(&m_pageHotKeys); + AddPage(&m_pageProfile); + AddPage(&m_pageIgnore); + + // Prepare Move Window + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_SDLGPLACE),&rect); + ScreenToClient(&rect); + // Move Window + for(int i=0;iMoveWindow(&rect); + + InitListOptions(); + InitOptionsPage(); + + SetCurrentPage(0); + + return 0; + } + + LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + DestroyOptions(); + return 0; + } + + LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + if(!wParam) + InitOptionsPage(); + + return 0; + } + + LRESULT OnOK(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + CloseDialog(); + return 0; + } + + LRESULT OnApply(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Apply(); + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetOptions()->Reset(); + DoDataExchange(DDX_LOAD); + return 0; + } + + LRESULT OnSelChangeListOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + SetCurrentPage(m_ctrlOptions.GetCurSel()); + return 0; + } +}; + +#endif // __OPTIONSDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/OptionsStruct.h b/legacy/Transliterator_6b/OptionsStruct.h new file mode 100644 index 0000000..e634b54 --- /dev/null +++ b/legacy/Transliterator_6b/OptionsStruct.h @@ -0,0 +1,40 @@ +#ifndef __OPTIONSSTRUCT_H__ +#define __OPTIONSSTRUCT_H__ + +struct OptionsStruct +{ + Language m_Language; + Options m_Options; + Ignore m_Ignore; + + void Set(Language& rL,Options& rO,Ignore& rI) + { + Set(rL); + Set(rO); + Set(rI); + } + + void Set(Language& r) { m_Language=r; } + void Set(Options& r) { m_Options=r; } + void Set(Ignore& r) { m_Ignore=r; } + + void Get(Language& rL,Options& rO,Ignore& rI) + { + Get(rL); + Get(rO); + Get(rI); + } + + void Get(Language& r) { r=m_Language; } + void Get(Options& r) { r=m_Options; } + void Get(Ignore& r) { r=m_Ignore; } + + void Reset() + { + m_Language.ResetUser(); + m_Options.Reset(); + m_Ignore.Reset(); + } +}; + +#endif // __OptionsStruct_H__ diff --git a/legacy/Transliterator_6b/ProfilePage.h b/legacy/Transliterator_6b/ProfilePage.h new file mode 100644 index 0000000..b779407 --- /dev/null +++ b/legacy/Transliterator_6b/ProfilePage.h @@ -0,0 +1,517 @@ +#ifndef __PROFILEPAGE_H__ +#define __PROFILEPAGE_H__ + +#include "trnsoptionspage.h" + +class CProfilePage : public TrnsOptionsPage +{ +public: + enum { IDD=IDD_PAGEPROFILE }; + + int m_nCurSel; + CComboBox m_cmbTrnsRus[2]; + CComboBox m_cmbProfile; + enum { Trns , Rus }; + + enum Use { useNone, useEng, useRus }; + NN::AutoValue m_nUse; + + Language& GetLanguage() + { return GetOptions()->m_Language; } + LangProfile* GetProfile(int nProfile) + { + return nProfile::UpdateLanguage(); + InitProfile(); + } + + typedef NN::StaticArray LangStringArray; + + void SetTrnsRus(bool b1,const char* strText=NULL) + { + LangStringArray aLangString; + + int iCmb; + unsigned last=0; + + if(strText) + { + iCmb=b1; + LangString lstr(strText); + + for(unsigned nItem=0;nItemm_map.GetLast();nItem++) + { + if(lstr==*(LangString*)GetProfile()->m_map[nItem].Get(b1)) + aLangString[last++]=*(LangString*)GetProfile()->m_map[nItem].Get(!b1); + } + iCmb=!b1; + } + else + { + for(unsigned i=0;im_map.GetLast();i++) + { + LangString* plstr = (LangString*)GetProfile()->m_map[i].Get(b1); + if(aLangString.Find(*plstr)==(unsigned)-1) + aLangString[last++]=*plstr; + } + iCmb=b1; + } + + if(last) + aLangString.Sort(true,last-1); + + m_cmbTrnsRus[iCmb].ResetContent(); + + for(unsigned i=0;im_strIgnore[i]); + } + + void SaveIgnore() + { + for(int i=0;im_strIgnore[i],LangProfile::nIgnore-1); + } + + void UpdateCheck(const LangType* pType) + { + BOOL bEnable=FALSE; + BOOL bTrnstoRus=FALSE; + BOOL bRustoTrns=FALSE; + if(pType) + { + bEnable=pType->Get<0>()[0]&&pType->Get<1>()[0]; + if(bEnable) + { + unsigned nFind=GetProfile()->m_map.Find(*pType); + if(nFind!=(unsigned)-1) + { + LangType& rType=GetProfile()->m_map[nFind]; + bTrnstoRus=(int)rType.Get<2>()&(int)Translate::trnsTrnstoRus; + bRustoTrns=(int)rType.Get<2>()&(int)Translate::trnsRustoTrns; + } + } + } + ::EnableWindow(GetDlgItem(IDC_TRNSTORUS),bEnable); + ::EnableWindow(GetDlgItem(IDC_RUSTOTRNS),bEnable); + CheckDlgButton(IDC_TRNSTORUS,bTrnstoRus); + CheckDlgButton(IDC_RUSTOTRNS,bRustoTrns); + } + + void Clear() + { + for(int i=0;i<2;i++) + m_cmbTrnsRus[i].SetCurSel(-1); + UpdateCheck(NULL); + } + + void InitAll(bool bProfile=true) + { + if(bProfile) + InitProfile(); + InitTrnsRus(); + LoadIgnore(); + LoadProfileName(); + Clear(); + } + + void SaveProfileName() + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + } + + void LoadProfileName() + { + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + } + + void SplitStr(const char* str,char* l,char* r) + { + splitstr(str,l,r,LangString::nCountInit-1,LangString::nCountInit-1,'='); + } + + BEGIN_DDX_MAP(CProfilePage) + if(bSaveAndValidate==DDX_LOAD) + { + InitAll(); + } + else + { + SaveIgnore(); + SaveProfileName(); + } + DDX_CHECK(IDC_COPYIGNORE,GetOptions()->m_Options.m_bCopyIgnore) + END_DDX_MAP() + + BEGIN_MSG_MAP(CProfilePage) + CHAIN_MSG_MAP(TrnsOptionsPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnCmbSelChangeProfile) + COMMAND_HANDLER(IDC_PROFILENAME, EN_CHANGE, OnEnChangeProfileName) + + COMMAND_HANDLER(IDC_TRNS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS,CBN_SELCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_TRNS, CBN_EDITCHANGE, OnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, CBN_EDITCHANGE, OnChangeTrnsRus) + + COMMAND_ID_HANDLER(IDC_ADD, OnAddRemove) + COMMAND_ID_HANDLER(IDC_REMOVE, OnAddRemove) + COMMAND_ID_HANDLER(IDC_CLEAR, OnClear) + + COMMAND_ID_HANDLER(IDC_COPY, OnCopy) + + COMMAND_ID_HANDLER(IDC_RESET, OnReset) + COMMAND_ID_HANDLER(IDC_RESETALL, OnReset) + + COMMAND_ID_HANDLER(IDC_LOAD, OnLoadSave) + COMMAND_ID_HANDLER(IDC_SAVE, OnLoadSave) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) + { + m_nCurSel=0; + for(int i=0;i<2;i++) + { + m_cmbTrnsRus[i]=GetDlgItem(IDC_TRNS+i); + m_cmbTrnsRus[i].LimitText(LangString::nCountInit-1); + } + m_cmbProfile = GetDlgItem(IDC_PROFILE); + SendDlgItemMessage(IDC_PROFILENAME,EM_LIMITTEXT,(WPARAM)LangProfile::nName-1,0); + InitIgnore(); + return 0; + } + + LRESULT OnCmbSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + m_nCurSel=m_cmbProfile.GetCurSel(); + InitTrnsRus(); + LoadProfileName(); + return 0; + } + + LRESULT OnEnChangeProfileName(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + GetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName,LangProfile::nName-1); + InitProfile(); + m_cmbProfile.SetCurSel(m_nCurSel); + LoadIgnore(); + return 0; + } + + LRESULT OnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int i1= wID!=IDC_TRNS; + + LangType type; + + if(wNotifyCode==CBN_SELCHANGE) + { + m_cmbTrnsRus[i1].GetLBText(m_cmbTrnsRus[i1].GetCurSel(),((LangString*)type.Get(i1))->GetData()); + m_cmbTrnsRus[!i1].GetWindowText(((LangString*)type.Get(!i1))->GetData(),LangString::nCountInit); + } + else + { + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + } + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + { + UpdateCheck(NULL); + InitTrnsRus(); + return 0; + } + else + { + if(!*((LangString*)type.Get(!i1))->GetData()) + SetTrnsRus(i1,((LangString*)type.Get(i1))->GetData()); + } + + UpdateCheck(&type); + + return 0; + } + + LRESULT OnAddRemove(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + LangType type; + + m_cmbTrnsRus[Trns].GetWindowText(type.Get<0>().GetData(),LangString::nCountInit); + m_cmbTrnsRus[Rus].GetWindowText(type.Get<1>().GetData(),LangString::nCountInit); + + if(!type.Get<0>()[0]&&!type.Get<1>()[0]) + return 0; + + bool bAdd= wID==IDC_ADD; + if(bAdd) + { + type.Get<2>()=Translate::trnsNone; + if(IsDlgButtonChecked(IDC_TRNSTORUS)) + (int&)type.Get<2>()|=(int)Translate::trnsTrnstoRus; + if(IsDlgButtonChecked(IDC_RUSTOTRNS)) + (int&)type.Get<2>()|=(int)Translate::trnsRustoTrns; + unsigned nFind=GetProfile()->m_map.Find(type); + if(nFind==(unsigned)-1) + GetProfile()->m_map.Add(type); + else + GetProfile()->m_map[nFind].Get<2>()=type.Get<2>(); + } + else + { + GetProfile()->m_map.Remove(type); + } + + InitTrnsRus(); + if(bAdd) + { + GetProfile()->m_map.Find(type); + UpdateCheck(&type); + } + else + UpdateCheck(NULL); + + return 0; + } + + LRESULT OnClear(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + Clear(); + return 0; + } + + LRESULT OnCopy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + int iFrom=SendDlgItemMessage(IDC_COPYFROM,CB_GETCURSEL); + + LangProfile* pFrom=GetProfile(iFrom); + + char strName[LangProfile::nName]; + lstrcpy(strName,GetProfile()->m_strName); + memcpy(GetProfile(),pFrom,sizeof(LangProfile)); + lstrcpy(GetProfile()->m_strName,strName); + + InitAll(); + + return 0; + } + + LRESULT OnReset(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + if(wID==IDC_RESET) + GetOptions()->m_Language.ResetProfile((Language::Profiles)m_nCurSel); + else + GetOptions()->m_Language.ResetUser(); + InitAll(); + return 0; + } + + LRESULT OnLoadSave(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) + { + BOOL bLoad=wID==IDC_LOAD; + CFileDialog dlgFile(bLoad,"txt","",OFN_OVERWRITEPROMPT,"Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0",m_hWnd); + if(dlgFile.DoModal()!=IDOK) + return 0; + + // Test file + CAtlFile file; + if(file.Create(dlgFile.m_szFileName,bLoad?GENERIC_READ:GENERIC_WRITE,0,bLoad?OPEN_EXISTING:CREATE_ALWAYS)) + { + ShowError(m_hWnd,"Error opening file"); + return 0; + } + if(!bLoad) + file.SetSize(0); + file.Close(); + + static const unsigned size_string=LangString::nCountInit*2+1; + static const unsigned size_section=(size_string)*LangMap::nCountInit; + + static const char strProfileName[]="Profile Name"; + static const char strName[]="Name"; + static const char astrIgnore[][30]= + { + "Translit Ignore Symbols", + "Russian Ignore Symbols" + }; + static const char astrBeginEnd[][10]= + { + "Begin", + "End" + }; + static const char astrTranslation[][20]= + { + "Translit to Russian", + "Russian to Translit", + "No Translate" + }; + static const Translate::LangTranslate aTranslation[]= + { + Translate::trnsTrnstoRus, + Translate::trnsRustoTrns, + Translate::trnsNone + }; + + if(bLoad) + { + LangProfile profile; + // Name + GetPrivateProfileString(strProfileName,strName,"", + profile.m_strName,LangProfile::nName-1, + dlgFile.m_szFileName); + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + "", + profile.m_strIgnore[i], + LangProfile::nIgnore-1, + dlgFile.m_szFileName); + + // Translation + NN::AutoArray section(size_section); + for(int i=0;i<3;i++) + { + GetPrivateProfileSection( + astrTranslation[i], + section.GetData(), + size_section, + dlgFile.m_szFileName); + + if(!section[0]) + continue; + + const char* pstr; + pstr=section.GetData(); + + char left[LangString::nCountInit]; + char right[LangString::nCountInit]; + + while(pstr[0]&&pstr[1]) + { + SplitStr(pstr,left,right); + if(left[0]&&right[0]) + { + LangType type( + i==1?right:left, + i==1?left:right); + unsigned nFind=profile.m_map.Find(type); + if(nFind==(unsigned)-1) + { + ((int&)type.Get<2>())=(int)aTranslation[i]; + profile.m_map.Add(type); + } + else + { + if(aTranslation[i]!=Translate::trnsNone) + ((int&)profile.m_map[nFind].Get<2>())|=(int)aTranslation[i]; + else + profile.m_map[nFind].Get<2>()=Translate::trnsNone; + } + } + pstr+=lstrlen(pstr)+1; + } + } + + // Load + // Name + if(profile.m_strName[0]) + lstrcpy(GetProfile()->m_strName,profile.m_strName); + for(int i=0;im_strIgnore[i],profile.m_strIgnore[i]); + if(profile.m_map.GetLast()) + GetProfile()->m_map.SetData(profile.m_map); + + // Update + InitProfile(); + LoadIgnore(); + SetDlgItemText(IDC_PROFILENAME,GetProfile()->m_strName); + InitTrnsRus(); + } + else + { + // Name + WritePrivateProfileString( + strProfileName, + strName, + GetProfile()->m_strName, + dlgFile.m_szFileName); + + // Ignore + for(int i=0;i>1)&1], + astrBeginEnd[i&1], + GetProfile()->m_strIgnore[i], + dlgFile.m_szFileName); + + // Translation + NN::AutoArray section(size_section); + for(int i=0;i<3;i++) + { + char* psection=section.GetData(); + LangMap map; + map.SetData(GetProfile()->m_map); + + map.Sort(true,i==1); + for(unsigned item=0;item()&(int)aTranslation[i]) + { + if(i==1) + strcpy_change(&psection,map[item].Get<1>().GetData()); + else + strcpy_change(&psection,map[item].Get<0>().GetData()); + strcpy_change(&psection,"="); + if(i==1) + strcpy_change(&psection,map[item].Get<0>().GetData()); + else + strcpy_change(&psection,map[item].Get<1>().GetData()); + *psection++=0; + } + } + *psection=0; + WritePrivateProfileSection(astrTranslation[i], + section.GetData(), + dlgFile.m_szFileName); + } + } + return 0; + } +}; + +#endif // __PROFILEPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/ProgCommandLine.h b/legacy/Transliterator_6b/ProgCommandLine.h new file mode 100644 index 0000000..4a6edc7 --- /dev/null +++ b/legacy/Transliterator_6b/ProgCommandLine.h @@ -0,0 +1,40 @@ +#ifndef __PROGCOMMANDLINE_H__ +#define __PROGCOMMANDLINE_H__ + +#include "WindowState.h" + +typedef WindowState ProgCommandLineInfo; + +class ProgCommandLine : public NN::CommandLine +{ + struct ParseCommandLineStruct + { + TCHAR szCmdLine[10]; + CommandLineInfoType cmdInfo; + }; +public: + ProgCommandLine() + { + SetCommandLine(GetCommandLine()); + ParseCommandLine(); + } + void ParseCommandLine() + { + static const ParseCommandLineStruct aParseCommandLine[]= + { + {_T("-min"),{SW_SHOWMINIMIZED}}, + {_T("-max"),{SW_SHOWMAXIMIZED}}, + {_T("-hide"),{SW_HIDE}} + }; + for(int i=1;i +class NN::StaticArrayMapTraitsLastArrayItem +{ +public: + inline static bool LastArrayItem(const LangType& Item) + { + return !(Item.Get<0>()[0]&&Item.Get<1>()[0]); + } +}; + +#endif // __TRAITS_H___ diff --git a/legacy/Transliterator_6b/Translate.h b/legacy/Transliterator_6b/Translate.h new file mode 100644 index 0000000..5749982 --- /dev/null +++ b/legacy/Transliterator_6b/Translate.h @@ -0,0 +1,23 @@ +#ifndef __TRANSLATE_H__ +#define __TRANSLATE_H__ + +struct Translate +{ +public: + enum Translation + { + trnsNone, + trns1_2, + trns2_1, + trnsAll=trns1_2|trns2_1 + }; + + enum Direction + { + dir1_2, + dir2_1, + dirAuto, + }; +}; + +#endif // __TRANSLATE_H__ diff --git a/legacy/Transliterator_6b/TranslateFilesDlg.cpp b/legacy/Transliterator_6b/TranslateFilesDlg.cpp new file mode 100644 index 0000000..bc9eb60 --- /dev/null +++ b/legacy/Transliterator_6b/TranslateFilesDlg.cpp @@ -0,0 +1,272 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translatefilesdlg.h" + +void CTranslateFilesDlg::UpdateCmbProfile() +{ + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); +} + +void CTranslateFilesDlg::TranslateFile(LPCSTR szPath,Translate::Direction dir) +{ + char szFileExt[_MAX_PATH*LangString::nCountInit]; + char szFileName[_MAX_PATH*LangString::nCountInit]; + + const int nFileName=lstrlen(szPath); + + int i=nFileName; + while(i&&szPath[i]!='.') i--; + + if(i) + { + memcpy(szFileExt,szPath+i,(nFileName-i)*sizeof(char)); + szFileExt[nFileName-i]=0; + memcpy(szFileName,szPath,i*sizeof(char)); + szFileName[i]=0; + } + else + { + szFileExt[0]=0; + lstrcpy(szFileName,szPath); + } + + g_Language.Translate(szFileName,dir,sizeof(szFileName)/sizeof(szFileName[0]),m_pProfile); + + lstrcat(szFileName,szFileExt); + + ::MoveFile(szPath,szFileName); +} + +void CTranslateFilesDlg::TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry) +{ + CAtlFile file; + if(file.Create(szFile,GENERIC_READ|GENERIC_WRITE,NULL,OPEN_EXISTING)!=S_OK) + return; + + long lFileSize=::GetFileSize(file,NULL); + if(bEntry) + lFileSize*=LangString::nCountInit; + CAtlFileMapping filemap; + if(filemap.MapFile(file,lFileSize,0,PAGE_READWRITE,FILE_MAP_WRITE)!=S_OK) + return; + + LPSTR pFileView=(LPSTR)filemap.GetData(); + + if(bEntry) + { + g_Language.Translate(pFileView,dir,lFileSize,m_pProfile); + lFileSize=lstrlen(pFileView); + } + else + { + LPSTR pCur; + + // Mp3 Tag V1 + pCur=pFileView+lFileSize-(sizeof(NN::MP3Tag)); + NN::MP3Tag mp3tag; + memcpy(&mp3tag,pCur,sizeof(NN::MP3Tag)); + + if(!LangStringTraits::CompareArrayLength(mp3tag.szTag,"TAG",3)) + { + TranslateTag(mp3tag.szAlbom,dir); + TranslateTag(mp3tag.szArtist,dir); + TranslateTag(mp3tag.szTitle,dir); + TranslateTag(mp3tag.szComment,dir); + memcpy(pCur,&mp3tag,sizeof(NN::MP3Tag)); + } + } + + filemap.Unmap(); + file.SetSize(lFileSize); +} + +void CTranslateFilesDlg::Translate(LPCSTR szPath) +{ + NN::CurrentDirectory curdir(szPath); + + HANDLE hFindFile; + WIN32_FIND_DATA ffd; + + hFindFile = ::FindFirstFile("*.*",&ffd); + if(hFindFile==INVALID_HANDLE_VALUE) + return; + + do{ + if(!LangStringTraits::CompareArrayLength(ffd.cFileName,".",1)|| + !LangStringTraits::CompareArrayLength(ffd.cFileName,"..",2)) + continue; + + if(ffd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) + { + if(m_bSubFolders) + { + char szNextPath[_MAX_PATH]; + lstrcpy(szNextPath,szPath); + lstrcat(szNextPath,"\\"); + lstrcat(szNextPath,ffd.cFileName); + Translate(szNextPath); + } + if(m_bFolders) + TranslateFile(ffd.cFileName,m_nDirection); + } + else + { + bool bNotMP3=LangStringTraits::CompareArray(ffd.cFileName+lstrlen(ffd.cFileName)-4,".mp3",4); + if(bNotMP3&&m_bEntry|| + !bNotMP3&&m_bMP3Tags) + TranslateEntryMP3Tags(ffd.cFileName,m_nDirection,bNotMP3); + if(m_bName) + TranslateFile(ffd.cFileName,m_nDirection); + } + }while(::FindNextFile(hFindFile,&ffd)); + + ::FindClose(hFindFile); +} + +void CTranslateFilesDlg::TranslateThisFolder() +{ + NN::CurrentDirectory curdir(m_szPath); + char *pszPath=m_szPath+lstrlen(m_szPath); + pszPath--; + while(*pszPath!='\\'&&*pszPath!='/') + pszPath--; + pszPath++; + char c=*pszPath; + *pszPath=0; + ::SetCurrentDirectory(m_szPath); + *pszPath=c; + + TranslateFile(pszPath,m_nDirection); +} + +void CTranslateFilesDlg::TranslateTag(LPSTR szTag,Translate::Direction dir) +{ + g_Language.Translate(szTag,dir,NN::MP3Tag::nCount,m_pProfile); +} + +void CTranslateFilesDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateCmbProfile(); +} + +void CTranslateFilesDlg::EnableDirs(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_FILES),bEnable); + ::EnableWindow(GetDlgItem(IDC_FOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SUBFOLDERS),bEnable); + ::EnableWindow(GetDlgItem(IDC_SELFOLDER),bEnable); +} + +void CTranslateFilesDlg::EnableFiles(BOOL bEnable) +{ + ::EnableWindow(GetDlgItem(IDC_NAME),bEnable); + ::EnableWindow(GetDlgItem(IDC_ENTRY),bEnable); + ::EnableWindow(GetDlgItem(IDC_MP3TAGS),bEnable); +} + +LRESULT CTranslateFilesDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + SendDlgItemMessage(IDC_PATH,EM_LIMITTEXT,(WPARAM)(_MAX_PATH-1)); + m_szPath[0]=0; + DoDataExchange(DDX_LOAD); + InitCmbLanguage(GetDlgItem(IDC_PROFILE)); + m_pProfile=g_Language.GetProfile((Language::Profiles)0); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnTranslate(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + + NN_AUTOSG_F4(sg_tMB,AtlMessageBox,0,IDS_DONE,IDR_TRANSLITERATOR,MB_OK|MB_ICONINFORMATION)sg; + + if(!m_szPath[0]) + return 0; + + if(m_bFiles&& + (!m_bName&&!m_bEntry&&!m_bMP3Tags)) + m_bFiles=FALSE; + + if(m_bFiles&&!(GetFileAttributes(m_szPath)&FILE_ATTRIBUTE_DIRECTORY)) + { + char* pszPath; + pszPath=m_szPath+lstrlen(m_szPath); + while(*pszPath!='\\') + pszPath--; + *pszPath=0; + NN::CurrentDirectory curdir(m_szPath); + if(m_bMP3Tags||m_bEntry) + TranslateEntryMP3Tags(pszPath+1,m_nDirection,m_bEntry); + if(m_bName) + TranslateFile(pszPath+1,m_nDirection); + return 0; + } + + if(!m_bFiles&&!m_bFolders&&!m_bSubFolders&& + !m_bThisFolder) + return 0; + + char *pszPath=m_szPath+lstrlen(m_szPath)-1; + if(*pszPath=='\\') + *pszPath=0; + + Translate(m_szPath); + + if(m_bThisFolder) + TranslateThisFolder(); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnBrowse(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CFolderDialog fd(m_hWnd,0,BIF_BROWSEINCLUDEFILES|BIF_VALIDATE); + + if(fd.DoModal()==IDOK) + SetDlgItemText(IDC_PATH,fd.m_szFolderPath); + return 0; +} + +LRESULT CTranslateFilesDlg::OnFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + + return 0; +} + +LRESULT CTranslateFilesDlg::OnSelChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_pProfile=g_Language.GetProfile((Language::Profiles)SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL)); + return 0; +} + +LRESULT CTranslateFilesDlg::OnEnChangePath(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + DoDataExchange(DDX_SAVE); + DWORD dwAttr = GetFileAttributes(m_szPath); + + if(!*m_szPath) + { + EnableFiles(FALSE); + EnableDirs(FALSE); + } + else + { + if(dwAttr & FILE_ATTRIBUTE_DIRECTORY) + { + EnableDirs(TRUE); + EnableFiles(IsDlgButtonChecked(IDC_FILES)); + } + else + { + EnableDirs(FALSE); + EnableFiles(TRUE); + } + } + + return 0; +} diff --git a/legacy/Transliterator_6b/TranslateFilesDlg.h b/legacy/Transliterator_6b/TranslateFilesDlg.h new file mode 100644 index 0000000..02d2c9f --- /dev/null +++ b/legacy/Transliterator_6b/TranslateFilesDlg.h @@ -0,0 +1,70 @@ +#ifndef __TRANSLAGEFILESDLG_H__ +#define __TRANSLAGEFILESDLG_H__ + +class CTranslateFilesDlg : public CDialogImpl, + public CWinDataExchange, + public NN::DialogLang, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD=IDD_TRANSLATEFILES } ; + + NN::AutoValue m_bFiles; + NN::AutoValue m_bFolders; + NN::AutoValue m_bSubFolders; + NN::AutoValue m_bThisFolder; + NN::AutoValue m_bName; + NN::AutoValue m_bEntry; + NN::AutoValue m_bMP3Tags; + NN::AutoValue m_nDirection; + TCHAR m_szPath[_MAX_PATH]; + LangProfile* m_pProfile; + + void UpdateCmbProfile(); + + void TranslateFile(LPCSTR szPath,Translate::Direction dir); + void TranslateEntryMP3Tags(LPCSTR szFile,Translate::Direction dir,bool bEntry); + void Translate(LPCSTR szPath); + void TranslateThisFolder(); + + void TranslateTag(LPSTR szTag,Translate::Direction dir); + + void UpdateLanguage(); + + void EnableDirs(BOOL bEnable); + void EnableFiles(BOOL bEnable); + + BEGIN_DDX_MAP(CTranslateFilesDlg) + DDX_RADIO(IDC_TRNSTORUS,(int&)m_nDirection) + DDX_CHECK(IDC_FILES,m_bFiles) + DDX_CHECK(IDC_FOLDERS,m_bFolders) + DDX_CHECK(IDC_SUBFOLDERS,m_bSubFolders) + DDX_CHECK(IDC_SELFOLDER,m_bThisFolder) + DDX_CHECK(IDC_NAME,m_bName) + DDX_CHECK(IDC_ENTRY,m_bEntry) + DDX_CHECK(IDC_MP3TAGS,m_bMP3Tags) + DDX_TEXT(IDC_PATH,m_szPath) + END_DDX_MAP() + + BEGIN_MSG_MAP(CTranslateFilesDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_ID_HANDLER(IDC_CLOSE, NN::ToolWindow::OnCloseCmd) + COMMAND_ID_HANDLER(IDOK, OnTranslate) + COMMAND_ID_HANDLER(IDC_TRANSLATE, OnTranslate) + COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse) + COMMAND_ID_HANDLER(IDC_FILES, OnFiles) + COMMAND_HANDLER(IDC_PROFILE, CBN_SELCHANGE, OnSelChangeProfile) + COMMAND_HANDLER(IDC_PATH, EN_CHANGE, OnEnChangePath) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnTranslate(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnSelChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnChangePath(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); +}; + +#endif // __TRANSLAGEFILESDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/TranslationDlg.cpp b/legacy/Transliterator_6b/TranslationDlg.cpp new file mode 100644 index 0000000..8f2d7d8 --- /dev/null +++ b/legacy/Transliterator_6b/TranslationDlg.cpp @@ -0,0 +1,187 @@ +#include "stdafx.h" +#include "resource.h" + +#include "translationdlg.h" + +void CTranslationDlg::UpdateCmbProfile() +{ + CComboBox cmbProfile=GetDlgItem(IDC_PROFILE); + InitCmbLanguage(cmbProfile); + char strAll[50]; + ::LoadString(_AtlBaseModule.GetResourceInstance(),IDS_ALL,strAll,sizeof(strAll)/sizeof(strAll[0])); + cmbProfile.AddString(strAll); + cmbProfile.SetCurSel(m_nCurProfile); +} + +void CTranslationDlg::UpdateLanguage() +{ + NN::DialogLang::UpdateLanguage(); + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateCurProfile() +{ + m_nCurProfile=g_Options.m_nCurProfile; + UpdateTranslation(); + UpdateCmbProfile(); +} + +void CTranslationDlg::UpdateTranslation() +{ + const int nSize=TranslationCount()+1000; + NN::AutoArray aText(nSize); + if(!aText.GetData()) + return; + MakeTranslation(aText.GetData()); + + NN::AutoArray awText(nSize); + if(!awText.GetData()) + return; + ::MultiByteToWideChar(1251,0,aText.GetData(),nSize,awText.GetData(),nSize); + + m_reTranslation.SetTextEx((LPTSTR)awText.GetData(),ST_DEFAULT,1200); + m_reTranslation.HideSelection(true,TRUE); + m_reTranslation.LineScroll(0); +} + +void CTranslationDlg::MakeTranslation(LPTSTR strTranslation) +{ + strTranslation[0]=0; + + char strText[2][40]; + for(int i=0;i<2;i++) + AtlLoadString(IDS_TRNSTORUS+i,strText[i],40); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + continue; + } + + for(int i=0;i<2;i++) + { + lstrcat(strTranslation,pProfile->m_strName); + lstrcat(strTranslation,":\r\n"); + lstrcat(strTranslation,strText[i]); + lstrcat(strTranslation,":\r\n"); + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)i))->GetData()); + lstrcat(strTranslation," - "); + lstrcat(strTranslation, + ((LangString*)map[nItem].Get((bool)!i))->GetData()); + lstrcat(strTranslation,"\r\n"); + } + if(!i) + lstrcat(strTranslation,"\r\n"); + } + lstrcat(strTranslation,"\r\n"); + } +} + +size_t CTranslationDlg::TranslationCount() +{ + size_t nCount=0; + size_t nrn=lstrlen("\r\n"); + + size_t nText[2]; + for(int i=0;i<2;i++) + nText[i]=AtlLoadString(IDC_TRNSTORUS+i,0,0); + Translate::LangTranslate translate[2]={Translate::trnsTrnstoRus,Translate::trnsRustoTrns}; + + LangMap map; + + for(int iProfile=0;iProfilem_map); + + if(!map.GetLast()) + { + nCount+=lstrlen(pProfile->m_strName)+1; + continue; + } + + for(int i=0;i<2;i++) + { + nCount+=lstrlen(pProfile->m_strName)+nrn+1; + nCount+=nText[i]+nrn; + + map.Sort(true,(bool)i); + for(unsigned nItem=0;nItem()&translate[i])) + continue; + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)i))->GetData()); + nCount+=lstrlen(" - "); + nCount+=lstrlen(((LangString*)map[nItem].Get((bool)!i))->GetData()); + nCount+=nrn; + } + if(!i) + nCount+=nrn; + } + nCount+=nrn; + } + return nCount; +} + +LRESULT CTranslationDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DialogLang_Init(); + DlgResize_Init(); + + m_reTranslation=GetDlgItem(IDC_TRANSLATION); + m_reTranslation.SetEventMask(ENM_KEYEVENTS); + m_reTranslation.SetFocus(); + + m_nCurProfile=Language::nProfiles; + UpdateCmbProfile(); + + return 0; +} + +LRESULT CTranslationDlg::OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + static bool bInit; + if(wParam&&!bInit) + { + bInit=true; + UpdateTranslation(); + } + return 0; +} + +LRESULT CTranslationDlg::OnChangeProfile(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_nCurProfile=SendDlgItemMessage(IDC_PROFILE,CB_GETCURSEL,0,0); + UpdateTranslation(); + return 0; +} + +LRESULT CTranslationDlg::OnEnMsgFilterTranslation(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_KEYDOWN&&pMsgFilter->wParam==VK_ESCAPE) + CloseDialog(); + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/TranslationDlg.h b/legacy/Transliterator_6b/TranslationDlg.h new file mode 100644 index 0000000..eb8f188 --- /dev/null +++ b/legacy/Transliterator_6b/TranslationDlg.h @@ -0,0 +1,46 @@ +#ifndef __TRANSLATIONDLG_H__ +#define __TRANSLATIONDLG_H__ + +class CTranslationDlg : public CDialogImpl, + public NN::DialogLang, + public CDialogResize, + public NN::MessageFilterDlg, + public NN::ToolWindow +{ +public: + enum { IDD = IDD_TRANSLATION }; + + CRichEditCtrl m_reTranslation; + int m_nCurProfile; + + void UpdateCmbProfile(); + void UpdateLanguage(); + void UpdateCurProfile(); + + void UpdateTranslation(); + void MakeTranslation(LPTSTR strTranslation); + size_t TranslationCount(); + + BEGIN_DLGRESIZE_MAP(CTranslationDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_TRANSLATION, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslationDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow) + NOTIFY_HANDLER(IDC_TRANSLATION, EN_MSGFILTER, OnEnMsgFilterTranslation) + COMMAND_HANDLER(IDC_PROFILE,CBN_SELCHANGE,OnChangeProfile) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(NN::ToolWindow) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnShowWindow(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnChangeProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTranslation(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLATIONDLG_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Transliterator.cpp b/legacy/Transliterator_6b/Transliterator.cpp new file mode 100644 index 0000000..364ec57 --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.cpp @@ -0,0 +1,84 @@ +#include "stdafx.h" +#include "resource.h" +//#include "transliteratordlg.h" + +// +#include "translate.h" +#include "types.h" +#include "langprofile.h" +#include "language.h" +#include "error.h" +// + +#include + +int Run() +{ + Language l; + l.Reset(); + wchar_t x[1000]=L"**SCh'A**"; + wchar_t y[1000]; + + l.Translate(x,y,Translate::dir1_2,l.GetProfile(0)); + /* CMessageLoop theLoop; + _Module.AddMessageLoop(&theLoop); + + CTransliteratorDlg dlgTransliterator; + int nRet=0; + + if(!dlgTransliterator.Show()) + { + ShowError(_T("Cannot create main window")); + return 0; + } + nRet = theLoop.Run(); + + _Module.RemoveMessageLoop(); + return nRet;*/ + return 0; +} + +HMODULE LoadRichEditLibrary() +{ + HMODULE hRichEdit=LoadLibrary("riched20.dll"); + if(!hRichEdit) + ShowError(_T("Cannot load \"riched20.dll\"")); + return hRichEdit; +} + +//int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpstrCmdLine*/, int /*nCmdShow*/) +int main() +{ + // + HMODULE hInstance = GetModuleHandle(NULL); + // + + // One Instance + if(NN::SetOneInstance(_T("Transliterator"))) + return 0; + + // RichEdit Library + if(!LoadRichEditLibrary()) + return 0; + + HRESULT hRes = ::CoInitialize(NULL); + ATLASSERT(SUCCEEDED(hRes)); + + ::DefWindowProc(NULL, 0, 0, 0L); + + AtlInitCommonControls(0xFF); // add flags to support other controls + + hRes = _Module.Init(NULL, hInstance); + ATLASSERT(SUCCEEDED(hRes)); + + int nRet = Run(); + + _Module.Term(); + ::CoUninitialize(); + +#ifdef _DEBUG + _CrtDumpMemoryLeaks(); +#endif // _DEBUG + + return nRet; +} diff --git a/legacy/Transliterator_6b/Transliterator.rc b/legacy/Transliterator_6b/Transliterator.rc new file mode 100644 index 0000000..86b67c8 --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.rc @@ -0,0 +1,953 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "Transliterator.rc2" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 5,7,0,0 + PRODUCTVERSION 5,7,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + BLOCK "041904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "5, 7, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2004" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductVersion", "5, 7, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200, 0x419, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLITERATOR ICON "res\\Transliterator.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLITERATOR DIALOGEX 0, 0, 177, 185 +STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +CAPTION " " +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + GROUPBOX "",IDC_STRNSTEXT,2,2,172,75,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SRUSTEXT,2,80,172,75,0,WS_EX_TRANSPARENT + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,0,177,1 +END + +IDD_ABOUT DIALOGEX 0, 0, 280, 295 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "",IDC_EMAIL,10,275,125,13,BS_FLAT + PUSHBUTTON "",IDC_SITE,145,275,125,13,BS_FLAT + EDITTEXT IDC_SABOUT,10,25,260,245,ES_MULTILINE | ES_READONLY | + WS_VSCROLL + LTEXT "",IDC_SABOUTPROGRAM,10,5,260,10,SS_SUNKEN +END + +IDD_TRANSLATEFILES DIALOGEX 0, 0, 158, 252 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_PATH,8,35,120,12,ES_AUTOHSCROLL + PUSHBUTTON "",IDC_BROWSE,128,35,16,12 + CONTROL "",IDC_FILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65, + 125,10 + CONTROL "",IDC_FOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 80,125,10 + CONTROL "",IDC_SUBFOLDERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,95,125,10 + CONTROL "",IDC_SELFOLDER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,110,125,10 + CONTROL "",IDC_NAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,140, + 125,10 + CONTROL "",IDC_ENTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 155,125,10 + CONTROL "",IDC_MP3TAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10, + 170,125,10 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,10,196,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,10,210,125,10 + DEFPUSHBUTTON "",IDC_TRANSLATE,40,230,50,14 + PUSHBUTTON "",IDC_CLOSE,98,230,50,14 + GROUPBOX "",IDC_SFOLDER,5,55,145,70 + GROUPBOX "",IDC_SDIRECTION,5,186,145,39 + GROUPBOX "",IDC_SFILE,5,128,144,58 + COMBOBOX IDC_PROFILE,45,6,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + GROUPBOX "",IDC_SPROFILE,5,0,143,23,0,WS_EX_TRANSPARENT + GROUPBOX "",IDC_SPATH,5,22,145,30 +END + +IDD_OPTIONS DIALOGEX 0, 0, 305, 164 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "",IDOK,10,83,50,14 + PUSHBUTTON "",IDC_CLOSE,10,104,50,14 + PUSHBUTTON "",IDC_APPLY,10,123,50,14 + PUSHBUTTON "",IDC_RESET,10,144,50,14 + LISTBOX IDC_LISTOPTIONS,0,0,70,75,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP + GROUPBOX "",IDC_SDLGPLACE,75,1,225,160,NOT WS_VISIBLE +END + +IDD_TRANSLATION DIALOGEX 0, 0, 90, 212 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | + WS_THICKFRAME +EXSTYLE WS_EX_TOOLWINDOW +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_TRANSLATION,"RichEdit20A",ES_MULTILINE | + ES_READONLY | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,0,17, + 89,195 + COMBOBOX IDC_PROFILE,2,0,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_STATICSEPARATOR,"Static",SS_ETCHEDHORZ,0,14,89,1, + WS_EX_TRANSPARENT +END + +IDD_PAGEGENERAL DIALOGEX 0, 0, 225, 132 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_SVIEW,0,0,110,63 + CONTROL "",IDC_SHOWTRAYICON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,5,14,100,8 + CONTROL "",IDC_SHOWTASKBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 5,30,100,8 + CONTROL "",IDC_TOPMOST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 47,100,8 + GROUPBOX "",IDC_SLOADONSTARTUP,115,0,110,63 + CONTROL "",IDC_LOADNO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,120,14,100,8 + CONTROL "",IDC_LOADHIDDEN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,30,100,8 + CONTROL "",IDC_LOADSHOWN,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,120,47,100,8 + GROUPBOX "",IDC_SFONTS,0,65,135,67 + CONTROL "",IDC_FONTNAMETRNS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,75,70,14 + PUSHBUTTON "",IDC_FONTTRNS,75,76,50,14 + CONTROL "",IDC_FONTNAMERUS,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,95,70,14 + PUSHBUTTON "",IDC_FONTRUS,75,95,50,14 + CONTROL "",IDC_FONTNAMETRANSLATION,"RichEdit20A",ES_AUTOHSCROLL | + ES_READONLY | WS_BORDER | WS_TABSTOP,5,115,70,14 + PUSHBUTTON "",IDC_FONTTRANSLATION,75,115,50,14 +END + +IDD_PAGEPROFILE DIALOGEX 0, 0, 225, 160 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + COMBOBOX IDC_PROFILE,3,10,80,38,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SNAME,86,10,37,8 + EDITTEXT IDC_PROFILENAME,128,10,89,12,ES_AUTOHSCROLL + GROUPBOX "",IDC_SPROFILE,0,0,225,27,0,WS_EX_TRANSPARENT + LTEXT "",IDC_STRANSLIT,4,39,36,8 + COMBOBOX IDC_TRNS,45,39,38,69,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SRUSSIAN,4,55,36,8 + COMBOBOX IDC_RUS,45,55,38,68,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 74,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5, + 87,78,8 + PUSHBUTTON "",IDC_ADD,85,39,42,14 + PUSHBUTTON "",IDC_REMOVE,85,59,42,14 + PUSHBUTTON "",IDC_CLEAR,85,79,42,14 + COMBOBOX IDC_COPYFROM,145,41,76,30,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "",IDC_COPY,145,57,45,14 + GROUPBOX "",IDC_SCOPYPROFILE,140,28,85,48 + LTEXT "",IDC_STRANSLIT2,3,116,37,8 + LTEXT "",IDC_SBEGIN,43,116,22,8 + EDITTEXT IDC_BEGINTRNS,67,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND,86,116,17,8 + EDITTEXT IDC_ENDTRNS,108,113,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SRUSSIAN2,3,131,37,8 + LTEXT "",IDC_SBEGIN2,43,132,22,8 + EDITTEXT IDC_BEGINRUS,67,130,15,12,ES_AUTOHSCROLL + LTEXT "",IDC_SEND2,86,132,17,8 + EDITTEXT IDC_ENDRUS,108,130,15,12,ES_AUTOHSCROLL + CONTROL "",IDC_COPYIGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 2,145,123,8 + GROUPBOX "",IDC_SRESET,140,119,85,40 + PUSHBUTTON "",IDC_RESET,145,130,50,12 + PUSHBUTTON "",IDC_RESETALL,145,143,50,12 + GROUPBOX "",IDC_SIGNORE,0,104,133,55 + GROUPBOX "",IDC_STRANSLATESYMBOLS,0,28,133,74 + GROUPBOX "",IDC_SLOADSAVE,140,77,85,41 + PUSHBUTTON "",IDC_SAVE,145,101,50,12 + PUSHBUTTON "",IDC_LOAD,145,88,50,12 +END + +IDD_PAGEHOTKEYS DIALOGEX 0, 0, 191, 117 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_SACTION,15,17,40,8 + COMBOBOX IDC_ACTION,60,17,110,46,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "",IDC_SKEY,15,37,40,8 + CONTROL "",IDC_HOTKEYACTION,"msctls_hotkey32",WS_BORDER | + WS_TABSTOP,60,37,110,14 + GROUPBOX "",IDC_SHOTKEYS,5,5,175,56 + GROUPBOX "",IDC_SAUTOTRANSLATION,5,64,175,47 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTORADIOBUTTON | WS_GROUP | + WS_TABSTOP,15,79,125,10 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,15,94,125,10 +END + +IDD_PAGEIGNORE DIALOGEX 0, 0, 200, 135 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_IGNORE,"RichEdit20A",ES_AUTOHSCROLL | WS_BORDER | + WS_TABSTOP,41,10,89,13 + CONTROL "",IDC_TRNSTORUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,25,78,8 + CONTROL "",IDC_RUSTOTRNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, + 10,38,78,8 + PUSHBUTTON "",IDC_ADD,140,11,50,13 + PUSHBUTTON "",IDC_REMOVE,140,27,50,13 + PUSHBUTTON "",IDC_CLEAR,140,42,50,13 + LISTBOX IDC_LISTIGNORE,10,58,180,70,LBS_SORT | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LTEXT "",IDC_STEXT,10,12,25,8 + GROUPBOX "",IDC_SIGNORE,0,0,200,135 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDR_TRANSLITERATOR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 178 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 273 + TOPMARGIN, 7 + BOTTOMMARGIN, 288 + END + + IDD_TRANSLATEFILES, DIALOG + BEGIN + BOTTOMMARGIN, 232 + END + + IDD_OPTIONS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 298 + TOPMARGIN, 7 + BOTTOMMARGIN, 157 + END + + IDD_TRANSLATION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 83 + TOPMARGIN, 7 + BOTTOMMARGIN, 205 + END + + IDD_PAGEGENERAL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 219 + TOPMARGIN, 7 + BOTTOMMARGIN, 126 + END + + IDD_PAGEPROFILE, DIALOG + BEGIN + RIGHTMARGIN, 158 + BOTTOMMARGIN, 131 + END + + IDD_PAGEHOTKEYS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 185 + TOPMARGIN, 7 + BOTTOMMARGIN, 111 + END + + IDD_PAGEIGNORE, DIALOG + BEGIN + BOTTOMMARGIN, 113 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLITERATOR ACCELERATORS +BEGIN + VK_F1, ID_APP_ABOUT, VIRTKEY, NOINVERT + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "R", ID_EDIT_COPY_RUSTOTRNS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "T", ID_EDIT_COPY_TRNSTORUS, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "I", ID_EDIT_IGNORE_INSERT, VIRTKEY, SHIFT, ALT, NOINVERT + "R", ID_EDIT_IGNORE_REMOVE, VIRTKEY, SHIFT, ALT, NOINVERT + "1", ID_PROFILE1, VIRTKEY, CONTROL, NOINVERT + "2", ID_PROFILE2, VIRTKEY, CONTROL, NOINVERT + "3", ID_PROFILE3, VIRTKEY, CONTROL, NOINVERT + "4", ID_PROFILE4, VIRTKEY, CONTROL, NOINVERT + "5", ID_PROFILE5, VIRTKEY, CONTROL, NOINVERT + "6", ID_PROFILE6, VIRTKEY, CONTROL, NOINVERT + "7", ID_PROFILE7, VIRTKEY, CONTROL, NOINVERT + "8", ID_PROFILE8, VIRTKEY, CONTROL, NOINVERT + "9", ID_PROFILE9, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_TOOLS_OPTIONS, VIRTKEY, NOINVERT + VK_F4, ID_TOOLS_TRANSLATEFILES, VIRTKEY, NOINVERT + VK_F3, ID_TOOLS_TRANSLATION, VIRTKEY, NOINVERT + "A", ID_VIEW_CONTROLS_AUTOTRANSLITERATION, VIRTKEY, SHIFT, + CONTROL, NOINVERT + "S", ID_VIEW_CONTROLS_SCROLLTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + "W", ID_VIEW_CONTROLS_WRAPTEXT, VIRTKEY, SHIFT, CONTROL, + NOINVERT + VK_F1, ID_VIEW_LANGUAGE_ENGLISH, VIRTKEY, CONTROL, NOINVERT + VK_F2, ID_VIEW_LANGUAGE_RUSSIAN, VIRTKEY, CONTROL, NOINVERT + VK_F3, ID_VIEW_LANGUAGE_TRANSLIT, VIRTKEY, CONTROL, NOINVERT + "G", ID_VIEW_CONTROLS_AUTOIGNORE, VIRTKEY, SHIFT, CONTROL, + NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLITERATOR MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_EXIT + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + END + POPUP " " + BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + END +END + +IDR_TRAYICON MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_APP_ABOUT + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + MENUITEM SEPARATOR + MENUITEM " ", ID_SHOW + MENUITEM " ", ID_HIDE + MENUITEM SEPARATOR + MENUITEM " ", ID_APP_EXIT + END +END + +IDR_PROFILE MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END +END + +IDR_EDIT MENU +BEGIN + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_UNDO + MENUITEM " ", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_CUT + MENUITEM " ", ID_EDIT_COPY + MENUITEM " ", ID_EDIT_PASTE + MENUITEM " ", ID_EDIT_CLEAR + MENUITEM " ", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM " ", ID_EDIT_SELECT_ALL + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_IGNORE_INSERT + MENUITEM " ", ID_EDIT_IGNORE_REMOVE + END + POPUP " " + BEGIN + MENUITEM " ", ID_EDIT_COPY_TRNSTORUS + MENUITEM " ", ID_EDIT_COPY_RUSTOTRNS + END + MENUITEM SEPARATOR + POPUP " " + BEGIN + MENUITEM " ", ID_PROFILE1 + MENUITEM " ", ID_PROFILE2 + MENUITEM " ", ID_PROFILE3 + MENUITEM " ", ID_PROFILE4 + MENUITEM " ", ID_PROFILE5 + MENUITEM " ", ID_PROFILE6 + MENUITEM " ", ID_PROFILE7 + MENUITEM " ", ID_PROFILE8 + MENUITEM " ", ID_PROFILE9 + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_LANGUAGE_ENGLISH + MENUITEM " ", ID_VIEW_LANGUAGE_RUSSIAN + MENUITEM " ", ID_VIEW_LANGUAGE_TRANSLIT + + END + POPUP " " + BEGIN + MENUITEM " ", ID_VIEW_CONTROLS_WRAPTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_SCROLLTEXT + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOTRANSLITERATION + + MENUITEM " ", ID_VIEW_CONTROLS_AUTOIGNORE + + END + POPUP " " + BEGIN + MENUITEM " ", ID_TOOLS_TRANSLATION + MENUITEM " ", ID_TOOLS_TRANSLATEFILES + MENUITEM SEPARATOR + MENUITEM " ", ID_TOOLS_OPTIONS + END + END +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW " \n" + ID_FILE_OPEN " \n" + ID_FILE_CLOSE " \n" + ID_FILE_SAVE " \n" + ID_FILE_SAVE_AS " \n " + ID_FILE_PAGE_SETUP " \n " + ID_FILE_PRINT_SETUP " \n " + ID_FILE_PRINT " \n" + ID_FILE_PRINT_PREVIEW " \n " +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE " \n " + ID_EDIT_COPY_TRNSTORUS " \n " + ID_EDIT_COPY_RUSTOTRNS " \n " + ID_VIEW_LANGUAGE_ENGLISH " \n " + ID_VIEW_LANGUAGE_RUSSIAN " \n " + ID_VIEW_LANGUAGE_TRANSLIT "\n" + ID_VIEW_CONTROLS_WRAPTEXT " \n " + ID_VIEW_CONTROLS_SCROLLTEXT " \n " + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + " \n " + ID_VIEW_CONTROLS_AUTOIGNORE " \n " + ID_TOOLS_TRANSLATION " \n" + ID_TOOLS_TRANSLATEFILES " \n " + ID_TOOLS_OPTIONS " \n" + ID_SHOW " \n" + ID_HIDE " \n" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT " \n " + ID_APP_EXIT " \n" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE " \n " + ID_PREV_PANE " \n " +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW " \n " + ID_WINDOW_ARRANGE " \n " + ID_WINDOW_CASCADE " , \n " + ID_WINDOW_TILE_HORZ " \n " + ID_WINDOW_TILE_VERT " \n " + ID_WINDOW_SPLIT " \n" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR " \n" + ID_EDIT_CLEAR_ALL " \n " + ID_EDIT_COPY " \n " + ID_EDIT_CUT " \n " + ID_EDIT_FIND " " + ID_EDIT_PASTE " \n" + ID_EDIT_REPEAT " \n" + ID_EDIT_REPLACE " \n" + ID_EDIT_SELECT_ALL " \n " + ID_EDIT_UNDO " \n" + ID_EDIT_REDO " \n" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE " " + ATL_IDS_SCMOVE " " + ATL_IDS_SCMINIMIZE " " + ATL_IDS_SCMAXIMIZE " " + ATL_IDS_SCNEXTWINDOW " " + ATL_IDS_SCPREVWINDOW " " + ATL_IDS_SCCLOSE " " +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE " " + ATL_IDS_SCTASKLIST " " + ATL_IDS_MDICHILD " " +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE " " +END + +STRINGTABLE +BEGIN + IDS_ERROR "" + IDS_HELP "" + IDS_TRNSTORUS " " + IDS_RUSTOTRNS " " + IDS_NOTRANSLATE " " + IDS_GENERAL "" + IDS_HOTKEYS " " + IDS_PROFILE "" + IDS_IGNORE "" + IDS_TRANSLIT "" + IDS_RUSSIAN "" + IDS_ALL "" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT " \n " +END + +STRINGTABLE +BEGIN + ID_PROFILE1 " 1" + ID_PROFILE2 " 2" + ID_PROFILE3 " 3" + ID_PROFILE4 " 4" + ID_PROFILE5 " 5" + ID_PROFILE6 " 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""Transliterator.rc2""\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Create a new document\nNew" + ID_FILE_OPEN "Open an existing document\nOpen" + ID_FILE_CLOSE "Close the active document\nClose" + ID_FILE_SAVE "Save the active document\nSave" + ID_FILE_SAVE_AS "Save the active document with a new name\nSave As" + ID_FILE_PAGE_SETUP "Change the printing options\nPage Setup" + ID_FILE_PRINT_SETUP "Change the printer and printing options\nPrint Setup" + ID_FILE_PRINT "Print the active document\nPrint" + ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Remove ignore symbols\nRemove ignore" + ID_EDIT_COPY_TRNSTORUS "Copy text from translit to russian\nCopy translit to russian" + ID_EDIT_COPY_RUSTOTRNS "Copy text from russian to translit\nCopy russian to translit" + ID_VIEW_LANGUAGE_ENGLISH "Enlish language\nEnglish language" + ID_VIEW_LANGUAGE_RUSSIAN "Russian language\nRussian language" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\nWrap text" + ID_VIEW_CONTROLS_SCROLLTEXT "Scroll text\nScroll text" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Translate text\nAuto Transliteration" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignore text\nAuto Ignore" + ID_TOOLS_TRANSLATION "Show or hide translation window\nTranslation" + ID_TOOLS_TRANSLATEFILES "Show or hide translate files window\nTranslate Files" + ID_TOOLS_OPTIONS "Show or hide options window\nOptions" + ID_SHOW "Show application window\nShow" + ID_HIDE "Hide application window\nHide" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Display program information\nAbout" + ID_APP_EXIT "Quit the application\nExit" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Switch to the next window pane\nNext Pane" + ID_PREV_PANE "Switch back to the previous window pane\nPrevious Pane" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Open another window for the active document\nNew Window" + ID_WINDOW_ARRANGE "Arrange icons at the bottom of the window\nArrange Icons" + ID_WINDOW_CASCADE "Arrange windows so they overlap\nCascade Windows" + ID_WINDOW_TILE_HORZ "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_TILE_VERT "Arrange windows as non-overlapping tiles\nTile Windows" + ID_WINDOW_SPLIT "Split the active window into panes\nSplit" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Erase the selection\nErase" + ID_EDIT_CLEAR_ALL "Erase everything\nErase All" + ID_EDIT_COPY "Copy the selection and put it on the Clipboard\nCopy" + ID_EDIT_CUT "Cut the selection and put it on the Clipboard\nCut" + ID_EDIT_FIND "Find the specified text\nFind" + ID_EDIT_PASTE "Insert Clipboard contents\nPaste" + ID_EDIT_REPEAT "Repeat the last action\nRepeat" + ID_EDIT_REPLACE "Replace specific text with different text\nReplace" + ID_EDIT_SELECT_ALL "Select the entire document\nSelect All" + ID_EDIT_UNDO "Undo the last action\nUndo" + ID_EDIT_REDO "Redo the previously undone action\nRedo" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Change the window size" + ATL_IDS_SCMOVE "Change the window position" + ATL_IDS_SCMINIMIZE "Reduce the window to an icon" + ATL_IDS_SCMAXIMIZE "Enlarge the window to full size" + ATL_IDS_SCNEXTWINDOW "Switch to the next document window" + ATL_IDS_SCPREVWINDOW "Switch to the previous document window" + ATL_IDS_SCCLOSE "Close the active window" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Restore the window to normal size" + ATL_IDS_SCTASKLIST "Activate Task List" + ATL_IDS_MDICHILD "Activate this window" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Open this document" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Error" + IDS_HELP "Help" + IDS_TRNSTORUS "Translit to Russian" + IDS_RUSTOTRNS "Russian to Translit" + IDS_NOTRANSLATE "No translation" + IDS_GENERAL "General" + IDS_HOTKEYS "Hot Keys" + IDS_PROFILE "Profile" + IDS_IGNORE "Ignore" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russian" + IDS_ALL "All" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Insert ignore symbols\nInsert ignore" +END + +STRINGTABLE +BEGIN + ATL_IDC_TAB_CONTROL "Russian to Translit" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profile 1" + ID_PROFILE2 "Profile 2" + ID_PROFILE3 "Profile 3" + ID_PROFILE4 "Profile 4" + ID_PROFILE5 "Profile 5" + ID_PROFILE6 "Profile 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Done" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + diff --git a/legacy/Transliterator_6b/Transliterator.rc2 b/legacy/Transliterator_6b/Transliterator.rc2 new file mode 100644 index 0000000..3ae7f7b --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.rc2 @@ -0,0 +1,571 @@ +#ifndef APSTUDIO_INVOKED + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\Transliterator.exe.manifest" + +#define SUBLANG_LOC 0x20 +#define SUBLANG_LOC2 0x21 + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" + IDD_ABOUT " " + IDD_TRANSLATEFILES " " + IDD_OPTIONS "" + IDD_TRANSLATION "" + IDC_STRNSTEXT "" + IDC_SRUSTEXT "" + IDC_SPROFILE "" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "\tAlt+F4" + ID_EDIT_UNDO "\tCtrl+Z" + ID_EDIT_REDO "\tCtrl+Y" + ID_EDIT_CUT "\tCtrl+X" + ID_EDIT_COPY "\tCtrl+C" + ID_EDIT_PASTE "\tCtrl+V" + ID_EDIT_CLEAR "\tDel" + ID_EDIT_CLEAR_ALL " " + ID_EDIT_SELECT_ALL " \tCtrl+A" + ID_EDIT_IGNORE_INSERT "\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS " \tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS " \tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT " \tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT " \tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION " \tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE " \tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "...\tF3" + ID_TOOLS_TRANSLATEFILES " ...\tF4" + ID_TOOLS_OPTIONS "...\tF2" + ID_APP_ABOUT " ...\tF1" + IDC_SABOUT " () .\r\n :\r\n (translit , translit).\r\n :\r\n - translit > , > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- > \r\n ( , ).\r\n : /, .\r\n ( , , MP3 )\r\n ( , ), .\r\n , .\r\n : English, Translit\r\n :\r\nWindows 95 RichEdit 3.0 ( Internet Explorer 5.7 )\r\n ""-"".\r\n , .\r\n :\r\nMyxamore6e , DnAp Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM " 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL ". : nn-mail@bk.ru" + IDC_SITE " : http://our-site.nm.ru" + IDC_TRNSTORUS " " + IDC_RUSTOTRNS " " + IDC_SPATH "" + IDC_BROWSE "..." + IDC_SFOLDER "" + IDC_FILES "" + IDC_FOLDERS "" + IDC_SUBFOLDERS " " + IDC_SELFOLDER " " + IDC_SFILE "" + IDC_NAME "" + IDC_ENTRY "" + IDC_MP3TAGS "MP3 " + IDC_SDIRECTION "" + IDC_TRANSLATE "" + IDC_CLOSE "" + IDC_SNAME " :" + IDC_STRANSLIT " :" + IDC_SRUSSIAN " :" + IDC_ADD "" + IDC_REMOVE "" + IDC_CLEAR "" + IDC_SIGNORE "" + IDC_STRANSLIT2 " :" + IDC_SRUSSIAN2 " :" + IDC_SBEGIN " :" + IDC_SEND " :" + IDC_SBEGIN2 " :" + IDC_SEND2 " :" + IDC_SCOPYPROFILE " " + IDC_COPY "" + IDC_SIN "" + IDC_RESET "" + IDC_RESETALL " " + IDC_SRESET "" + ID_SHOW "" + ID_HIDE "" + IDC_APPLY "" + IDOK "" + IDCANCEL "" + IDC_STRANSLATESYMBOLS " " + IDC_SVIEW "" + IDC_SHOWTRAYICON " " + IDC_SHOWTASKBAR " " + IDC_TOPMOST " " + IDC_SFONTS "" + IDC_FONTTRNS "" + IDC_FONTRUS "" + IDC_FONTTRANSLATION "" + IDC_SLOADONSTARTUP " " + IDC_LOADSHOWN "" + IDC_LOADHIDDEN "" + IDC_LOADNO " " + IDC_SHOTKEYS " " + IDC_SACTION " :" + IDC_SKEY " :" + IDC_ACTION " \n \n \n/ \n \n \n" + IDC_SAUTOTRANSLATION " " + IDC_COPYIGNORE " " + IDC_SLOADSAVE "/" + IDC_LOAD "" + IDC_SAVE "" + IDC_STEXT " :" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Russian resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "\n\n\n\n\n\n\n \n\n" + IDR_TRAYICON "1\n\n" + IDR_EDIT "1\n\n\n\n\n \n" +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_TRANSLATEFILES "Translate Files" + IDD_ABOUT "About" + IDD_TRANSLATION "Translation" + IDD_OPTIONS "Options" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russian" + IDC_SPROFILE "Profile" + IDC_PROFILE "" + IDC_TRANSLATION "" + ID_APP_EXIT "Exit\tAlt+F4" + ID_EDIT_UNDO "Undo\tCtrl+Z" + ID_EDIT_REDO "Redo\tCtrl+Y" + ID_EDIT_CUT "Cut\tCtrl+X" + ID_EDIT_COPY "Copy\tCtrl+C" + ID_EDIT_PASTE "Paste\tCtrl+V" + ID_EDIT_CLEAR "Delete\tDel" + ID_EDIT_CLEAR_ALL "Delete All" + ID_EDIT_SELECT_ALL "Select All\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Insert\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Remove\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit to russian\tAlt+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russian to translit\tAlt+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Wrap text\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Scrol text\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Auto Transliteration\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Auto Ignore\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Translation...\tF3" + ID_TOOLS_TRANSLATEFILES "Translate Files...\tF4" + ID_TOOLS_OPTIONS "Options...\tF2" + ID_APP_ABOUT "About...\tF1" + IDC_SABOUT "This program works with russian (cyrillic) letters and translation russian letters into translit and translit letters into russian\r\nShort review:\r\nTranslation two-way (translit into russian, russian into translit).\r\nDifferent profiles of transliteration:\r\n- translit > russian, russian > translit\r\n- qwerty > , > qwerty\r\n- > CuMBo/\bHblu`, CuMBo/\bHblu` > \r\n- User > User\r\nIgnore translation symbols (after insertion this symbol some part of will no be transliterated\r\nHot Keys: show/hide, auto transliteration\r\nTransliteration files (file name or folder, entry of the file, MP3 tags)\r\nOptions for change: (transliteration, ignore), transliteration profiles and hot keys\r\nMinimization to tray icon and option to show or hide tray icon\r\nInterface languages: English, and Translit\r\nMinimal requirements\r\nWindows 95 and RichEdit version 3.0 (Internet Explorer 5.7 and higher)\r\nThis program is freeware and provided ""AS-IS"".\r\nI take no responsibility for any damage this program cause.\r\nSpecial thanks to :\r\nMyxamore6e , DnAp and Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E-mail : nn-mail@bk.ru" + IDC_SITE "Site : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit to Russian" + IDC_RUSTOTRNS "Russian to Translit" + IDC_SPATH "Path" + IDC_BROWSE "..." + IDC_SFOLDER "Folder" + IDC_FILES "Files" + IDC_FOLDERS "Folders" + IDC_SUBFOLDERS "Folders in selected folder" + IDC_SELFOLDER "Selected Folder" + IDC_SFILE "File" + IDC_NAME "Name" + IDC_ENTRY "Entry" + IDC_MP3TAGS "MP3 Tags" + IDC_SDIRECTION "Direction" + IDC_TRANSLATE "Translate" + IDC_CLOSE "Close" + IDC_SNAME "Name :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russian :" + IDC_ADD "Add" + IDC_REMOVE "Remove" + IDC_CLEAR "Clear" + IDC_SIGNORE "Ignore" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russian :" + IDC_SBEGIN "Begin :" + IDC_SEND "End :" + IDC_SBEGIN2 "Begin :" + IDC_SEND2 "End :" + IDC_SCOPYPROFILE "Copy From" + IDC_COPY "Copy" + IDC_SIN "Into" + IDC_RESET "Reset" + IDC_RESETALL "Reset all" + IDC_SRESET "Reset" + ID_SHOW "Show" + ID_HIDE "Hide" + IDC_APPLY "Apply" + IDOK "OK" + IDCANCEL "Cancel" + IDC_STRANSLATESYMBOLS "Translate Symbols" + IDC_SVIEW "View" + IDC_SHOWTRAYICON "System icon" + IDC_SHOWTASKBAR "TaskBar" + IDC_TOPMOST "Top Most" + IDC_SFONTS "Fonts" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russian" + IDC_FONTTRANSLATION "Translation" + IDC_SLOADONSTARTUP "Load on startup" + IDC_LOADSHOWN "Shown" + IDC_LOADHIDDEN "Hidden" + IDC_LOADNO "No load" + IDC_SHOTKEYS "Hot Keys" + IDC_SACTION "Action :" + IDC_SKEY "Key :" + IDC_ACTION "Translit to Russian\nRussian to Translit\nAuto Translation\nShow/Hide Program\nCopy to Translit\nCopy to Russian\n" + IDC_SAUTOTRANSLATION "Auto Translation" + IDC_COPYIGNORE "Copy ignore" + IDC_SLOADSAVE "Load/Save" + IDC_LOAD "Load" + IDC_SAVE "Save" + IDC_STEXT "Text :" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH,(SUBLANG_ENGLISH_US+SUBLANG_LOC2) +#pragma code_page(1252) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Main\nEdit\nIgnore\nCopy\nView\nProfile\nLanguage\nControls\nTools\nHelp" + IDR_TRAYICON "1\nProfile\nLanguage" + IDR_EDIT "1\nIgnore\nCopy\nProfile\nLanguage\nControls\nTools" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, (SUBLANG_DEFAULT+4) +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ID_FILE_NEW "Sozdanie novogo okna\nSozdat'" + ID_FILE_OPEN "Otkry'tie susch'estvuesch'ego dokumenta\nOtkry't'" + ID_FILE_CLOSE "Zakry'tie aktivnogo okna\nZakry't'" + ID_FILE_SAVE "Sohranenie aktivnogo dokumenta\nSohranit'" + ID_FILE_SAVE_AS "Sohranenie aktivnogo dokumenta pod drugim imenem\nSohranit' kak" + ID_FILE_PAGE_SETUP "Izmenenie parametrov stranicy'\nParametry' stranicy'" + ID_FILE_PRINT_SETUP "Smena prontera i izmenenie ego parametrov\nNastroyka printera" + ID_FILE_PRINT "Pechat' aktivnogo dokumenta\nPechat'" + ID_FILE_PRINT_PREVIEW "Prosmotr pechataemogo materiala v polnostranichnom rejime\nPredvaritel'ny'y prosmotr" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_REMOVE "Udalenie simvolov ignorirovaniya\nUdalit' ignorirovanie" + ID_EDIT_COPY_TRNSTORUS "Kopirovanie teksta iz okna translita v russkiy\nKopirovat' translit v russkiy" + ID_EDIT_COPY_RUSTOTRNS "Kopirovanie teksta iz russkogo okna v translit\nKopirovat' russkiy v translit" + ID_VIEW_LANGUAGE_ENGLISH "Angliyskiy yazy'k\nAngliyskiy yazy'k" + ID_VIEW_LANGUAGE_RUSSIAN "Russkiy yazy'k\nRusskiy yazy'k" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\nTranslit" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\nPerenosit' tekst" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\nProkruchivat' tekst" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION + "Perevodit' tekst\nAvto Transliteraciya" + ID_VIEW_CONTROLS_AUTOIGNORE "Ignorirovat' tekst\nAvto Ignorirovanie" + ID_TOOLS_TRANSLATION "Pokazat' ili skry't' okno perevoda\nPerevod" + ID_TOOLS_TRANSLATEFILES "Pokazat' ili skry't'okno perevoda faylov\nPerevod Faylov" + ID_TOOLS_OPTIONS "Pokazat' ili skry't'okno opciy\nOpcii" + ID_SHOW "Pokazat' okno prilojeniya\nPokazat'" + ID_HIDE "Skry't' okno prilojeniya\nSkry't'" +END + +STRINGTABLE +BEGIN + ID_APP_ABOUT "Vy'vod svedeniy o programme\nO programme" + ID_APP_EXIT "Zavershenie raboty' s prilojeniem\nVy'hod" +END + +STRINGTABLE +BEGIN + ID_NEXT_PANE "Perehod k sleduyusch'ey paneli okna\nSleduyusch'aya panel'" + ID_PREV_PANE "Perehod k predy'dusch'ey paneli okna\nPredy'dusch'aya panel'" +END + +STRINGTABLE +BEGIN + ID_WINDOW_NEW "Otkry't' drugoe okno\nNovoe okno" + ID_WINDOW_ARRANGE "Uporyadochit' znachki v nijney chasti okna\nUporyadochit' znachki" + ID_WINDOW_CASCADE "Uporyadochit' okna takim obrazom, chtoby' oni perekry'valis'\nKaskadirovat' okna" + ID_WINDOW_TILE_HORZ "Uporyadochit' okna po gorizontali\nUporyadochit' po gorizontali" + ID_WINDOW_TILE_VERT "Uporyadochit' okna po vertikali\nUporyadochit' po vertikali" + ID_WINDOW_SPLIT "Razbit' aktivnoe okno na paneli\nRazbit'" +END + +STRINGTABLE +BEGIN + ID_EDIT_CLEAR "Udalenie vy'delenongo fragmenta\nUdalit'" + ID_EDIT_CLEAR_ALL "Udalit' vse\nUdalit' vse" + ID_EDIT_COPY "Kopirovanie vy'delennogo fragmenta v bufer obmena\nKopirovat' v buffer" + ID_EDIT_CUT "Udalenie vy'delennogo fragmenta v bufer obmena\nUdalit' v buffer" + ID_EDIT_FIND "Poisk zadannogo tekstaNayti" + ID_EDIT_PASTE "Vstavka soderjimogo buffera obmena\nVstavit'" + ID_EDIT_REPEAT "Povtorit' poslednee deystvie\nPovtorit'" + ID_EDIT_REPLACE "Zamena teksta\nZamenit'" + ID_EDIT_SELECT_ALL "Vy'delenie vsego dokumenta celikom\nVy'delit' vse" + ID_EDIT_UNDO "Otmena poslednego vy'polnennogo deystviya\nOtmena" + ID_EDIT_REDO "Vernut' rezul'tat poslednego otmenennogo deystviya\nVernut'" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCSIZE "Izmenenie razmerov okna" + ATL_IDS_SCMOVE "Izmenenie polojeniya okna" + ATL_IDS_SCMINIMIZE "Minimizaciya okna" + ATL_IDS_SCMAXIMIZE "Maksimizaciya okna" + ATL_IDS_SCNEXTWINDOW "Perehod k sleduyusch'emu oknu" + ATL_IDS_SCPREVWINDOW "Perehod k predy'dusch'emu oknu" + ATL_IDS_SCCLOSE "Zakry'tie aktivnogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_SCRESTORE "Vosstanovlenie razmerov okna" + ATL_IDS_SCTASKLIST "Aktivizaciya spiska zadach" + ATL_IDS_MDICHILD "Aktivizaciya dannogo okna" +END + +STRINGTABLE +BEGIN + ATL_IDS_MRU_FILE "Otkry't' e`tot dokument" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Oshibka" + IDS_HELP "Pomosch''" + IDS_TRNSTORUS "Translit v Russkiy" + IDS_RUSTOTRNS "Russkiy v Translit" + IDS_NOTRANSLATE "Net perevoda" + IDS_GENERAL "Obsch'ee" + IDS_HOTKEYS "Goryachie klavishi" + IDS_PROFILE "Profil'" + IDS_IGNORE "Ignorirovanie" + IDS_TRANSLIT "Translit" + IDS_RUSSIAN "Russkiy" + IDS_ALL "Vse" +END + +STRINGTABLE +BEGIN + ID_EDIT_IGNORE_INSERT "Vstavka simvolov ignorirovaniya\nVstavit' ignorirovanie" +END + +STRINGTABLE +BEGIN + ID_PROFILE1 "Profil' 1" + ID_PROFILE2 "Profil' 2" + ID_PROFILE3 "Profil' 3" + ID_PROFILE4 "Profil' 4" + ID_PROFILE5 "Profil' 5" + ID_PROFILE6 "Profil' 6" +END + +STRINGTABLE +BEGIN + IDS_DONE "Gotovo" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Translit resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" + IDD_ABOUT "O programme" + IDD_TRANSLATEFILES "Perevod Faylov" + IDD_OPTIONS "Opcii" + IDD_TRANSLATION "Perevod" + IDC_STRNSTEXT "Translit" + IDC_SRUSTEXT "Russkiy" + IDC_SPROFILE "Profil'" + IDC_TRANSLATION "" + IDC_PROFILE "" + ID_APP_EXIT "Vy'hod\tAlt+F4" + ID_EDIT_UNDO "Otmenit'\tCtrl+Z" + ID_EDIT_REDO "Povtorit'\tCtrl+Y" + ID_EDIT_CUT "Vy'rezat'\tCtrl+X" + ID_EDIT_COPY "Kopirovat'\tCtrl+C" + ID_EDIT_PASTE "Vstavit'\tCtrl+V" + ID_EDIT_CLEAR "Udalit'\tDel" + ID_EDIT_CLEAR_ALL "Udalit' Vse" + ID_EDIT_SELECT_ALL "Vy'delit' Vse\tCtrl+A" + ID_EDIT_IGNORE_INSERT "Vstavit'\tAlt+Shift+I" + ID_EDIT_IGNORE_REMOVE "Udalit'\tAlt+Shift+R" + ID_EDIT_COPY_TRNSTORUS "Translit v russkiy\tCtrl+Shift+T" + ID_EDIT_COPY_RUSTOTRNS "Russkiy v translit\tCtrl+Shift+R" + ID_VIEW_LANGUAGE_ENGLISH "English\tCtrl+F1" + ID_VIEW_LANGUAGE_RUSSIAN "\tCtrl+F2" + ID_VIEW_LANGUAGE_TRANSLIT "Translit\tCtrl+F3" + ID_VIEW_CONTROLS_WRAPTEXT "Perenos teksta\tCtrl+Shift+W" + ID_VIEW_CONTROLS_SCROLLTEXT "Prokrutka teksta\tCtrl+Shift+S" + ID_VIEW_CONTROLS_AUTOTRANSLITERATION "Avto Transliteraciya\tCtrl+Shift+A" + ID_VIEW_CONTROLS_AUTOIGNORE "Avto Ignorirovanie\tCtrl+Shift+G" + ID_TOOLS_TRANSLATION "Perevod...\tF3" + ID_TOOLS_TRANSLATEFILES "Perevod Faylov...\tF4" + ID_TOOLS_OPTIONS "Opcii...\tF2" + ID_APP_ABOUT "O programme...\tF1" + IDC_SABOUT "Programma dlya raboty' s russkimi (kirillicheskimi) bukvami i perevoda russkih bukv v translit i naoborot.\r\nKratkoe opisanie:\r\nPerevod v oboih napravleniyah (translit v russkiy, russkiy v translit).\r\nRazlichny'e profili transliteracii:\r\n - translit > russkiy, russkiy > translit\r\n- qwerty > ycuken, ycuken > qwerty\r\n- Russkiy > CuMBo/\bHblu`, CuMBo/\bHblu` > Russkiy\r\n- Pol'zovatel'skiy > Pol'zovatel'skiy\r\nSimvoly' ignorirovaniya perevoda (posle ustanovki takogo simvola, ukazannaya chast' teksta ne transliteruyutsya).\r\nVy'zov programmy' s pomosch''yu goryachey klavishi: pokaz/skry'tie, avtomaticheskaya transliteraciya.\r\nVozmojnost' Transliteracii faylov (nazvanie fayla ili papki, soderjanie teksta, MP3 te`gi)\r\nVozmojnost' izmeneniya parametrov transliteracii (simvolov perevoda, ignorirovaniya), profiley transliteracii i goryachih klavish na svoy vkus.\r\nSvorachivanie v ikonku , a takje nastroyki pokaza i skry'tiya ikonki v sistemnoy paneli.\r\nYAzy'ki interfeysa: English, Russkiy i Translit\r\nMinimal'ny'y trebovaniya:\r\nWindows 95 i RichEdit versii 3.0 (vhodit v sostav Internet Explorer 5.7 i vy'she)\r\nE`ta programma besplatna i predostavlena ""KAK-EST''"".\r\nYA ne nesu nikakoy otvetsvennosti za usherb , kotory'y mojet by't' nanesen.\r\nBlagodarnosti :\r\nMyxamore6e , DnAp i Shark.\r\n\r\nNN." + IDC_SABOUTPROGRAM "Transliterator 5.7 Copyright (C) 2003 - 2004" + IDC_EMAIL "E`l.Pochta : nn-mail@bk.ru" + IDC_SITE "Sayt : http://our-site.nm.ru" + IDC_TRNSTORUS "Translit v Russkiy" + IDC_RUSTOTRNS "Russkiy v Translit" + IDC_SPATH "Put'" + IDC_BROWSE "..." + IDC_SFOLDER "Papka" + IDC_FILES "Fayly'" + IDC_FOLDERS "Papki" + IDC_SUBFOLDERS "Papki v vy'brannoy papke" + IDC_SELFOLDER "Vy'brannaya Papka" + IDC_SFILE "Fayl" + IDC_NAME "Imya" + IDC_ENTRY "Soderjanie" + IDC_MP3TAGS "MP3 Tegi" + IDC_SDIRECTION "Napravlenie" + IDC_TRANSLATE "Perevod" + IDC_CLOSE "Zakry't'" + IDC_SNAME "Nazvanie :" + IDC_STRANSLIT "Translit :" + IDC_SRUSSIAN "Russkiy :" + IDC_ADD "Dobavit'" + IDC_REMOVE "Udalit'" + IDC_CLEAR "Ochistit'" + IDC_SIGNORE "Ignorirovanie" + IDC_STRANSLIT2 "Translit :" + IDC_SRUSSIAN2 "Russkiy :" + IDC_SBEGIN "Ot :" + IDC_SEND "Do :" + IDC_SBEGIN2 "Ot :" + IDC_SEND2 "Do :" + IDC_SCOPYPROFILE "Kopirovat' Iz" + IDC_COPY "Kopirovat'" + IDC_SIN "V" + IDC_RESET "Sbros" + IDC_RESETALL "Sbrosit' vse" + IDC_SRESET "Sbros" + ID_SHOW "Pokazat'" + ID_HIDE "Skry't'" + IDC_APPLY "Primenit'" + IDOK "OK" + IDCANCEL "Otmena" + IDC_STRANSLATESYMBOLS "Simvoly' perevoda" + IDC_SVIEW "Vid" + IDC_SHOWTRAYICON "Sistemnaya ikonka" + IDC_SHOWTASKBAR "Panel' Zadach" + IDC_TOPMOST "Poverh vseh okon" + IDC_SFONTS "SHrifty'" + IDC_FONTTRNS "Translit" + IDC_FONTRUS "Russkiy" + IDC_FONTTRANSLATION "Perevod" + IDC_SLOADONSTARTUP "Zapusk pri zagruzke" + IDC_LOADSHOWN "Pokazy'vat'" + IDC_LOADHIDDEN "Skry'vat'" + IDC_LOADNO "Ne zagrujat'" + IDC_SHOTKEYS "Goryachie klavishi" + IDC_SACTION "Deystvie :" + IDC_SKEY "Klavisha :" + IDC_ACTION "Translit v Russkiy\nRusskiy v Translit\nAvto Perevod\nPokazat'/Skry't' Programmu\nKopirovat' v Translit\nKopirovat' v Russkiy\n" + IDC_SAUTOTRANSLATION "Avto Perevod" + IDC_COPYIGNORE "Kopirovat' ignorirovanie" + IDC_SLOADSAVE "Zagruzka/Sohranenie" + IDC_LOAD "Zagruzit'" + IDC_SAVE "Sohranit'" + IDC_STEXT "Tekst :" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Translit resources +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN,(SUBLANG_DEFAULT+4+SUBLANG_LOC2) +#pragma code_page(1251) +#endif //_WIN32 + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Glavnaya\nPravka\nIgnorirovanie\nKopirovanie\nVid\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'\nPomosch''" + IDR_TRAYICON "1\nProfil'\nYAzy'k" + IDR_EDIT "1\nIgnorirovanie\nKopirovanie\nProfil'\nYAzy'k\nE`lementy' upravleniya\nUtility'" +END + +#endif // Translit resources +///////////////////////////////////////////////////////////////////////////// + +#endif //!APSTUDIO_INVOKED diff --git a/legacy/Transliterator_6b/Transliterator.sln b/legacy/Transliterator_6b/Transliterator.sln new file mode 100644 index 0000000..e604250 --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Debug|Win32.ActiveCfg = Debug|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Debug|Win32.Build.0 = Debug|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Release|Win32.ActiveCfg = Release|Win32 + {8053407F-CD5C-4CCC-A6FC-8FAA3A8DDD51}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_6b/Transliterator.sln.bak b/legacy/Transliterator_6b/Transliterator.sln.bak new file mode 100644 index 0000000..11e119b --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.sln.bak @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{E5DCB808-B8B0-4487-B6C5-0D43578C25A3}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.ActiveCfg = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Debug.Build.0 = Debug|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.ActiveCfg = Release|Win32 + {E5DCB808-B8B0-4487-B6C5-0D43578C25A3}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_6b/Transliterator.vcproj b/legacy/Transliterator_6b/Transliterator.vcproj new file mode 100644 index 0000000..8404936 --- /dev/null +++ b/legacy/Transliterator_6b/Transliterator.vcproj @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Transliterator_6b/TransliteratorDlg.cpp b/legacy/Transliterator_6b/TransliteratorDlg.cpp new file mode 100644 index 0000000..2fd40d3 --- /dev/null +++ b/legacy/Transliterator_6b/TransliteratorDlg.cpp @@ -0,0 +1,1059 @@ +#include "stdafx.h" +#include "resource.h" + +#include "transliteratordlg.h" +#include "progcommandline.h" + +const LANGID CTransliteratorDlg::s_langEnglish=MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US); +const LANGID CTransliteratorDlg::s_langRussian=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT); +const LANGID CTransliteratorDlg::s_langTranslit=MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT+4); + +BOOL CTransliteratorDlg::OnIdle() +{ + BOOL bSelection,bText; + CRichEditCtrl re=::GetFocus(); + + if(re==m_reTrnsRus[Trns]|| + re==m_reTrnsRus[Rus]) + { + bSelection=re.GetSelectionType()!=SEL_EMPTY; + bText=re.GetTextLength()?TRUE:FALSE; + UIEnable(ID_EDIT_UNDO,re.CanUndo()); + UIEnable(ID_EDIT_REDO,re.CanRedo()); + UIEnable(ID_EDIT_CUT,bSelection); + UIEnable(ID_EDIT_COPY,bSelection); + UIEnable(ID_EDIT_PASTE,re.CanPaste()); + UIEnable(ID_EDIT_SELECT_ALL,bText); + UIEnable(ID_EDIT_CLEAR,bSelection); + UIEnable(ID_EDIT_CLEAR_ALL,bText); + UIEnable(ID_EDIT_IGNORE_INSERT,TRUE); + UIEnable(ID_EDIT_IGNORE_REMOVE,TRUE); + } + else + { + for(int i=ID_EDIT_CLEAR;im_strName); + lstrcat(strText,"\tCtrl+"); + strKey[0]=(char)i+'1'; + lstrcat(strText,strKey); + + UISetText(ID_PROFILE1+i,strText); + + UISetCheck(ID_PROFILE1+i,i==g_Options.m_nCurProfile?1:0); + } + + return FALSE; +} + +void CTransliteratorDlg::DlgResize_UpdateLayout(int cxWidth, int cyHeight) +{ + CDialogResize::DlgResize_UpdateLayout(cxWidth,cyHeight); + UpdateLayout(); +} + +void CTransliteratorDlg::Translate(Translate::Direction dir) +{ + bool b1= dir==Translate::dirTrnstoRus; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + const unsigned nChar=((unsigned)reFrom.GetWindowTextLength()+1)*LangString::nCountInit; + NN::AutoArray aText(nChar*2); + if(!aText.GetData()) + return; + + { + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + reFrom.GetTextEx((LPSTR)aText.GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + g_Language.Translate(aText.GetData(),dir,nChar); + reTo.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + } +} + +bool CTransliteratorDlg::Show() +{ + LoadSettings(); + + if(!Create(::GetDesktopWindow())) + return false; + + // Command Line + ProgCommandLine cmdLine; + int nCmdShow; + if(cmdLine.GetCommandLineInfo().IsDefault()) + nCmdShow=g_Options.m_wndState.nCmdShow; + else // CmdLine + nCmdShow=cmdLine.GetCommandLineInfo().nCmdShow; + + ShowWindow(nCmdShow); + + m_bShown = (nCmdShow==SW_HIDE|| + ((nCmdShow==SW_MINIMIZE||nCmdShow==SW_SHOWMINIMIZED)&& + g_Options.m_bShowTrayIcon))?false:true; + if(!m_bShown) + ShowWindow(SW_HIDE); + + UpdateTrayIcon(); + UpdateTaskBar(); + + return true; +} + +void CTransliteratorDlg::CloseDialog() +{ + SaveSettings(); + m_dlgTranslation.DestroyWindow(); + m_dlgTranslateFiles.DestroyWindow(); + m_dlgOptions.DestroyWindow(); + m_dlgAbout.DestroyWindow(); + DestroyWindow(); + ::PostQuitMessage(0); +} + +void CTransliteratorDlg::UpdateLayout() +{ + for(int i=0;i<2;i++) + { + RECT rect; + ::GetWindowRect(GetDlgItem(IDC_STRNSTEXT+i),&rect); + ScreenToClient(&rect); + rect.left+=size_delta_left; + rect.right-=size_delta_right; + rect.top+=size_delta_top; + rect.bottom-=size_delta_bottom; + ::MoveWindow(GetDlgItem(IDC_TRNS+i),rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,TRUE); + } +} + +BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||nSize!=size); +} + +BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size) +{ + ULONG nSize=size; + LONG lRes=reg.QueryBinaryValue(strData,data,&nSize); + return (lRes||!nSize||nSize>size); +} + +void CTransliteratorDlg::LoadSettings() +{ + CRegKey regProg; + + if(!regProg.Open(HKEY_CURRENT_USER,"Software\\NN\\Transliterator")) + { + g_Language.ResetAll(); + + char strUser[6]="User"; + LangProfile langprof; + for(int i=Language::profUser1;im_strName; + HDC hDC=m_wndStatusBar.GetDC(); + SIZE size; + ::GetTextExtentPoint32(hDC,pName,lstrlen(pName),&size); + m_wndStatusBar.ReleaseDC(hDC); + m_wndStatusBar.SetPaneWidth(ID_PROFILE,size.cx); + m_wndStatusBar.SetPaneText(ID_PROFILE,pName); +} + +void CTransliteratorDlg::SaveWindowPlacement() +{ + WINDOWPLACEMENT wndpl; + wndpl.length=sizeof(WINDOWPLACEMENT); + GetWindowPlacement(&wndpl); + if(wndpl.showCmd==SW_SHOWMINIMIZED||wndpl.showCmd==SW_MINIMIZE) + wndpl.showCmd=SW_RESTORE; + g_Options.m_wndState.nCmdShow=wndpl.showCmd; +} + +void CTransliteratorDlg::UpdateTrnsRusString() +{ + for(int i=0;i<2;i++) + ::LoadString(_AtlBaseModule.GetResourceInstance(), + IDS_TRANSLIT+i,m_strTrnsRus[i],nTrnsRus-1); +} + +HWND CTransliteratorDlg::GetActiveWindowChild() +{ + DWORD dwThreadID = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); + GUITHREADINFO gti; + + ZeroMemory(>i, sizeof(GUITHREADINFO)); + gti.cbSize = sizeof(GUITHREADINFO); + ::GetGUIThreadInfo(dwThreadID, >i); + return gti.hwndFocus; +} + +void CTransliteratorDlg::HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)) +{ + HWND hWndTranslation = GetActiveWindowChild(); + if(!hWndTranslation) + return; + + char szClass[64]={0}; + GetClassName(hWndTranslation,szClass,sizeof(szClass)/sizeof(char)-1); + + // Edit control + // Prepare + char szClassEdit[sizeof(szClass)/sizeof(char)]={0}; + lstrcpy(szClassEdit,szClass); + ::CharUpperBuff(szClassEdit, lstrlen(szClassEdit)); + // Check + if((_tcsstr(szClassEdit, "EDIT")|| + _tcsstr(szClassEdit, "TEXT"))) + { + CEdit wndTranslation=hWndTranslation; + const unsigned nChar = (unsigned)(wndTranslation.GetWindowTextLength()+1)*LangString::nCountInit; + + NN::AutoArray aText(nChar); + + if(!aText.GetData()) + return; + + int nStart,nEnd; + wndTranslation.GetSel(nStart,nEnd); + + if(nStart==nEnd||(!nStart&&nEnd==-1)) + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.GetData()); + + (*pDo)(aText.GetData(),dir,nChar,hWndTransliterator); + + wndTranslation.SendMessage(WM_SETTEXT,0,(LPARAM)aText.GetData()); + } + else + { + wndTranslation.SendMessage(WM_GETTEXT,nChar-1,(LPARAM)aText.GetData()); + for(int nItem=nStart;nItem spDoc; + LRESULT lRes; + + UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT")); + ::SendMessageTimeout(hWndTranslation, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes); + + if(LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hOleAccInstance, _T("ObjectFromLresult"))) + { + if(SUCCEEDED((*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc))) + { + CComPtr spDisp; + CComQIPtr spWin; + spDoc->get_Script(&spDisp); + spWin = spDisp; + spWin->get_document(&spDoc.p); + CComQIPtr spElem; + spDoc->get_activeElement(&spElem.p); + + CComQIPtr spInput=spElem; + CComQIPtr spTA=spElem; + + CComBSTR strText; + CComVariant v; + + if(spInput) + spInput->get_value(&strText); + else + if(spTA) + spTA->get_value(&strText); + else + spElem->get_innerText(&strText); + + if(strText) + { + const unsigned nChar=(strText.Length()+1)*LangString::nCountInit; + + { + NN::AutoArray aTextA(nChar); + if(!aTextA.GetData()) + return; + ::WideCharToMultiByte(CP,0,strText.m_str,nChar,aTextA.GetData(),nChar,0,0); + (*pDo)(aTextA.GetData(),dir,nChar,hWndTransliterator); + strText.Empty(); + strText.Append(aTextA.GetData()); + } + + if(spInput) + spInput->put_value(strText); + else + if(spTA) + spTA->put_value(strText); + else + spElem->put_innerText(strText); + } + } + ::FreeLibrary(hOleAccInstance); + } // else Active Accessibility is not installed + } + // Window + else + { + unsigned nChar = (unsigned)::SendMessage(hWndTranslation,WM_GETTEXTLENGTH,0,0)+1; + nChar*=LangString::nCountInit; + + NN::AutoArray aText(nChar); + if(!aText.GetData()) + return; + + ::SendMessage(hWndTranslation,WM_GETTEXT,(WPARAM)(nChar-1),(LPARAM)aText.GetData()); + + (*pDo)(aText.GetData(),dir,nChar,hWndTransliterator); + + ::SendMessage(hWndTranslation,WM_SETTEXT,0,(LPARAM)aText.GetData()); + } +} + +void CTransliteratorDlg::HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND) +{ + g_Language.Translate(pText,DefineDirection(dir,pText),nChar); +} + +void CTransliteratorDlg::HotKeyCopy(char* pText,Translate::Direction dir,int /*nChar*/,HWND hWndTransliterator) +{ + ::SendDlgItemMessage(hWndTransliterator, + dir==Translate::dirTrnstoRus?IDC_TRNS:IDC_RUS, + WM_SETTEXT,0,(LPARAM)pText); +} + +void CTransliteratorDlg::HotKeyShow(bool bShow) +{ + if(bShow) + { + ShowWindow(g_Options.m_wndState.nCmdShow==SW_SHOWMINIMIZED|| + g_Options.m_wndState.nCmdShow==SW_MINIMIZE? + SW_RESTORE:g_Options.m_wndState.nCmdShow); + } + else + { + SaveWindowPlacement(); + ShowWindow(SW_HIDE); + } + UpdateTrayIcon(); +} + +Translate::Direction CTransliteratorDlg::DefineDirection(Translate::Direction dir,LPCSTR strText) +{ + if(dir==Translate::dirAuto) + { + char str[2]={strText[0]}; + LangType t(str,str); + unsigned u=g_Language.GetCurProfile()->m_map.Find(t,0,0); + if(u!=(unsigned)-1) + return Translate::dirTrnstoRus; + u=g_Language.GetCurProfile()->m_map.Find(t,0,1); + if(u!=(unsigned)-1) + return Translate::dirRusToTrns; + return g_Options.m_nAutoTranslation; + } + else + return dir; +} + +void CTransliteratorDlg::UpdateTranslation() +{ + Translate(::GetFocus()==m_reTrnsRus[Trns]? + Translate::dirTrnstoRus: + Translate::dirRusToTrns); +} + +void CTransliteratorDlg::InitControls() +{ + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + + // Save Text + NN::AutoArray aText[2]; + bool bCreated=m_reTrnsRus[0].m_hWnd&&m_reTrnsRus[1].m_hWnd; + if(bCreated) + { + for(int i=0;i<2;i++) + { + // Text + unsigned nChar=(unsigned)m_reTrnsRus[i].GetWindowTextLength()+1; + aText[i].Allocate(nChar); + if(aText[i].GetData()) + m_reTrnsRus[i].GetTextEx((LPSTR)aText[i].GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Destroy + m_reTrnsRus[i].DestroyWindow(); + } + } + + // Create + DWORD dwStyle= + WS_TABSTOP| + WS_BORDER| + WS_CHILD| + WS_VISIBLE| + ES_WANTRETURN| + ES_MULTILINE| + WS_VSCROLL| + ES_AUTOVSCROLL; + + if(!g_Options.m_bWrapText) + dwStyle|=WS_HSCROLL|ES_AUTOHSCROLL; + DWORD dwExStyle=0; + + RECT rect={0,0,1,1}; + for(int i=0;i<2;i++) + { + if(!m_reTrnsRus[i].Create(m_hWnd,rect,"",dwStyle,dwExStyle,IDC_TRNS+i)) + { + ShowError(m_hWnd,_T("Cannot create text box")); + return; + } + + m_reTrnsRus[i].SendMessage(EM_SETLIMITTEXT,(WPARAM)MAX_SYMBOL,0); + m_reTrnsRus[i].SetEventMask(ENM_CHANGE|ENM_KEYEVENTS|ENM_MOUSEEVENTS); + } + + UpdateLayout(); + + if(bCreated) + { + for(int i=0;i<2;i++) + if(aText[i].GetData()) + m_reTrnsRus[i].SetTextEx((LPCSTR)aText[i].GetData(),ST_DEFAULT,1200); + } + + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); +} + +void CTransliteratorDlg::InitDialog() +{ + m_dlgTranslation.Create(m_hWnd); + m_dlgTranslateFiles.Create(m_hWnd); + m_dlgOptions.Create(m_hWnd); + m_dlgAbout.Create(m_hWnd); +} + +void CTransliteratorDlg::InitMessageLoop() +{ + CMessageLoop* pLoop = _Module.GetMessageLoop(); + ATLASSERT(pLoop != NULL); + pLoop->AddMessageFilter(this); + pLoop->AddIdleHandler(this); + + pLoop->AddMessageFilter(&m_dlgOptions); + pLoop->AddMessageFilter(&m_dlgTranslation); + pLoop->AddMessageFilter(&m_dlgTranslateFiles); + pLoop->AddMessageFilter(&m_dlgAbout); + + UIAddChildWindowContainer(m_hWnd); +} + +LRESULT CTransliteratorDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + // Icon + DialogIcon_Init(); + // StatusBar + m_wndStatusBar.Create(m_hWnd); + m_hWndStatusBar = m_wndStatusBar; + int panes[] = { ID_COUNTTRNS, ID_COUNTRUS, ID_DEFAULT_PANE, ID_PROFILE }; + m_wndStatusBar.SetPanes(panes, sizeof(panes)/sizeof(panes[0]), false); + + HDC hDC=m_wndStatusBar.GetDC(); + SetTextCharacterExtra(hDC,0); + m_wndStatusBar.ReleaseDC(hDC); + + UpdateStatusBar(); + // Language + DialogLang_Init(); + // Controls + InitControls(); + // Resize + DlgResize_Init(false,true); + + m_hAccel=::LoadAccelerators(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)); + + InitDialog(); + + InitTrayIcon(IDR_TRANSLITERATOR, + ::LoadIcon(ATL::_AtlBaseModule.GetResourceInstance(),MAKEINTRESOURCE(IDR_TRANSLITERATOR)), + IDR_TRAYICON); + + { + NN::AutoSGRef sg(g_Options.m_bShowTrayIcon,FALSE,g_Options.m_bShowTrayIcon); + SetOptions(true); + } + + UpdateTrnsRusString(); + UpdateCount(); + m_dlgTranslation.UpdateCurProfile(); + + // Set Text + if(m_aText[Trns].GetData()||m_aText[Rus].GetData()) + { + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE,g_Options.m_bTranslate); + for(int i=0;i<2;i++) + { + if(m_aText[i].GetData()) + { + m_reTrnsRus[i].SetTextEx((LPCSTR)m_aText[i].GetData(),ST_DEFAULT,1200); + m_aText[i].Free(); + } + } + } + + InitMessageLoop(); + + return TRUE; +} + +LRESULT CTransliteratorDlg::OnSysCommand(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) +{ + bHandled=FALSE; + WORD wMsg=LOWORD(wParam); + + if(wMsg==SC_CLOSE) + CloseDialog(); + else + if(wMsg==SC_MINIMIZE&&g_Options.m_bShowTrayIcon) + { + bHandled=TRUE; + ShowWindow(SW_MINIMIZE); + HotKeyShow(false); + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnHotKey(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + switch(wParam-hkID) + { + case Options::hkTrnstoRus: + HotKeyText(Translate::dirTrnstoRus,NULL,HotKeyTranslate); + break; + case Options::hkRusEndTrns: + HotKeyText(Translate::dirRusToTrns,NULL,HotKeyTranslate); + break; + case Options::hkAuto: + HotKeyText(Translate::dirAuto,m_hWnd,HotKeyTranslate); + break; + case Options::hkShowHide: + HotKeyShow(IsWindowVisible()?false:true); + break; + case Options::hkCopyTrns: + HotKeyText(Translate::dirTrnstoRus,m_hWnd,HotKeyCopy); + break; + case Options::hkCopyRus: + HotKeyText(Translate::dirRusToTrns,m_hWnd,HotKeyCopy); + break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnQueryEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + SaveSettings(); + return TRUE; +} + +LRESULT CTransliteratorDlg::OnApply(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) +{ + if(lParam) + SetOptions(); + if(wParam) + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CloseDialog(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCommands(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + switch(wID) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + return 0; +} + +LRESULT CTransliteratorDlg::OnEditIgnore(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + CRichEditCtrl re=::GetFocus(); + + bool bInsert=wID==ID_EDIT_IGNORE_INSERT; + + // Get Text + unsigned nChar=re.GetWindowTextLength()*LangProfile::nIgnore*2+1; + NN::AutoArray aText(nChar); + long nStart,nEnd; + re.GetSel(nStart,nEnd); + + re.GetTextEx((LPSTR)aText.GetData(),nChar*sizeof(wchar_t),GT_DEFAULT,1200); + // Insert/Remove + if(nStart==nEnd) + { + if(bInsert) + { + g_Language.SetIgnore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + + int nText=lstrlenW(aText.GetData()); + re.SetSel(nText,nText); + } + else + { + g_Language.SetIgnore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + re.SetSel(nStart,nStart); + } + } + // Ignore + else + { + if(!nStart&&nEnd==-1|| + !nStart&&nEnd==lstrlenW(aText.GetData())) // All + { + g_Language.Ignore(aText.GetData(),nChar-1,re==m_reTrnsRus[Trns],bInsert); + re.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,1200); + } + else // Selection + { + for(long nItem=nStart;nItem aTextA(nChar); + ::WideCharToMultiByte(CP,0,aText.GetData(),nChar,aTextA.GetData(),nChar,0,0); + re.ReplaceSel(aTextA.GetData()); + } + } + + return 0; +} + +LRESULT CTransliteratorDlg::OnEditCopy(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + NN::AutoSGRef sg(g_Options.m_bTranslate,FALSE); + + bool b1= wID==ID_EDIT_COPY_TRNSTORUS; + + CRichEditCtrl& reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl& reTo=m_reTrnsRus[b1]; + + int nLen=reFrom.GetTextLength()+1; + NN::AutoArray aText(nLen); + reFrom.GetTextEx((LPSTR)aText.GetData(),nLen,GT_DEFAULT,CP); + reTo.SetTextEx((LPCSTR)aText.GetData(),ST_DEFAULT,CP); + + return 0; +} + +LRESULT CTransliteratorDlg::OnProfile(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_nCurProfile=wID-ID_PROFILE1; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + m_dlgTranslation.UpdateCurProfile(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewLanguage(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + switch(wID) + { + case ID_VIEW_LANGUAGE_ENGLISH: + g_LangID=s_langEnglish; + break; + case ID_VIEW_LANGUAGE_RUSSIAN: + g_LangID=s_langRussian; + break; + case ID_VIEW_LANGUAGE_TRANSLIT: + g_LangID=s_langTranslit; + break; + default: + return 0; + } + + UpdateLanguage(); + + m_dlgTranslation.UpdateLanguage(); + m_dlgTranslateFiles.UpdateLanguage(); + m_dlgOptions.UpdateLanguage(); + m_dlgAbout.UpdateLanguage(); + + UpdateTrnsRusString(); + UpdateCount(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControls(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + if(wID==ID_VIEW_CONTROLS_WRAPTEXT) + g_Options.m_bWrapText=!g_Options.m_bWrapText; + else + g_Options.m_bScrollText=!g_Options.m_bScrollText; + + InitControls(); + SetOptionsFont(); + + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoTransliteration(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bTranslate=!g_Options.m_bTranslate; + return 0; +} + +LRESULT CTransliteratorDlg::OnViewControlsAutoIgnore(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + g_Options.m_bIgnore=!g_Options.m_bIgnore; + UpdateTranslation(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslation(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslation.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsTranslateFiles(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgTranslateFiles.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnToolsOptions(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgOptions.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + m_dlgAbout.ShowHide(); + return 0; +} + +LRESULT CTransliteratorDlg::OnShowHide(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + HotKeyShow(wID==ID_SHOW); + UpdateTrayIcon(); + if(wID==ID_SHOW) + UpdateTaskBar(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnChangeTrnsRus(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) +{ + static bool bTranslate=false; + if(g_Options.m_bTranslate&&!bTranslate) + { + NN::AutoSGRefT sg(bTranslate); + Translate(wID==IDC_TRNS?Translate::dirTrnstoRus:Translate::dirRusToTrns); + + bool b1= wID==IDC_TRNS; + + CRichEditCtrl reFrom=m_reTrnsRus[!b1]; + CRichEditCtrl reTo=m_reTrnsRus[b1]; + + if(g_Options.m_bScrollText) + reTo.LineScroll(reFrom.GetFirstVisibleLine()); + } + UpdateCount(); + return 0; +} + +LRESULT CTransliteratorDlg::OnEnMsgFilterTrnsRus(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + MSGFILTER *pMsgFilter=(MSGFILTER *)pnmhdr; + if(pMsgFilter->msg==WM_RBUTTONDOWN) + { + ::SetFocus(pMsgFilter->nmhdr.hwndFrom); + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_EDIT)); + hMenu=::GetSubMenu(hMenu,0); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + return 0; +} + +LRESULT CTransliteratorDlg::OnClickStatusBar(int /*code*/, NMHDR* pnmhdr, BOOL& /*bHandled*/) +{ + if(pnmhdr->code==NM_RCLICK) + { + OnIdle(); + POINT pt; + ::GetCursorPos(&pt); + + HMENU hMenu=::LoadMenu(_AtlBaseModule.GetResourceInstance(), + MAKEINTRESOURCE(IDR_PROFILE)); + hMenu=::GetSubMenu(hMenu,0); + ::SetMenuDefaultItem(hMenu,IsWindowVisible()?ID_HIDE:ID_SHOW,FALSE); + ::TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON| + TPM_RIGHTBUTTON,pt.x,pt.y,0,m_hWnd,NULL); + } + else + if(pnmhdr->code==NM_DBLCLK) + { + if(++g_Options.m_nCurProfile==Language::nProfiles) + g_Options.m_nCurProfile=0; + g_Language.SetCurProfile((Language::Profiles)g_Options.m_nCurProfile); + UpdateTranslation(); + UpdateStatusBar(); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_6b/TransliteratorDlg.h b/legacy/Transliterator_6b/TransliteratorDlg.h new file mode 100644 index 0000000..abc3b91 --- /dev/null +++ b/legacy/Transliterator_6b/TransliteratorDlg.h @@ -0,0 +1,215 @@ +#ifndef __TRANSLITERATORDLG_H__ +#define __TRANSLITERATORDLG_H__ + +#include "translatefilesdlg.h" +#include "translationdlg.h" +#include "optionsdlg.h" +#include "aboutdlg.h" + +class CTransliteratorDlg : public CDialogImpl, + public CUpdateUI, + public CIdleHandler, + public CDialogResize, + public NN::TrayIcon, + public NN::DialogStatusBarMenu, + public NN::DialogIcon, + public NN::DialogLang, + public NN::MessageFilterDlgAccel +{ +public: + enum { IDD=IDR_TRANSLITERATOR } ; + enum { Trns , Rus }; + enum + { + size_delta_left = 5, + size_delta_right = 5, + size_delta_top = 15, + size_delta_bottom = 5 + }; + enum { CP = 1251 }; + enum { hkID = 1000 }; + + // Static + static const LANGID s_langEnglish; + static const LANGID s_langRussian; + static const LANGID s_langTranslit; + + // Text + NN::AutoArray m_aText[2]; + + // Members + NN::AutoValue m_hAccel; + POINT m_ptMinTrackSize; + NN::AutoValue m_bTrayIcon; + NN::AutoValue m_bShown; + + CMultiPaneStatusBarCtrl m_wndStatusBar; + CRichEditCtrl m_reTrnsRus[2]; + + enum { nTrnsRus = 30 }; + char m_strTrnsRus[2][nTrnsRus]; + + // Dialogs + CTranslationDlg m_dlgTranslation; + CTranslateFilesDlg m_dlgTranslateFiles; + COptionsDlg m_dlgOptions; + CAboutDlg m_dlgAbout; + + // Virtual Functions + virtual BOOL OnIdle(); + + // Override + void DlgResize_UpdateLayout(int cxWidth, int cyHeight); + + // Not Virtual + void Translate(Translate::Direction dir); + bool Show(); + void CloseDialog(); + void UpdateLayout(); + + BOOL CTransliteratorDlg::LoadData(CRegKey& reg,const char* strData,void* data,unsigned size); + BOOL CTransliteratorDlg::LoadDataSize(CRegKey& reg,const char* strData,void* data,unsigned size); + void LoadSettings(); + void SaveSettings(); + + void SetOptions(bool bFirst=false); + void SetOptionsFont(); + + void UpdateCount(); + void UpdateTrayIcon(); + void UpdateTaskBar(); + void UpdateStatusBar(); + void SaveWindowPlacement(); + + void UpdateTrnsRusString(); + + static HWND GetActiveWindowChild(); + void HotKeyText(Translate::Direction dir,HWND hWndTransliterator,void (*pDo)(char*,Translate::Direction,int,HWND)); + static void HotKeyTranslate(char* pText,Translate::Direction dir,int nChar,HWND); + static void HotKeyCopy(char* pText,Translate::Direction dir,int nChar,HWND hWndTransliterator); + void HotKeyShow(bool bShow); + + static Translate::Direction DefineDirection(Translate::Direction dir,LPCSTR strText); + + void UpdateTranslation(); + + void InitControls(); + void InitDialog(); + void InitMessageLoop(); + + // Maps + BEGIN_UPDATE_UI_MAP(CTransliteratorDlg) + UPDATE_ELEMENT(ID_EDIT_UNDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_INSERT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_IGNORE_REMOVE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_ENGLISH,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_RUSSIAN,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_LANGUAGE_TRANSLIT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_WRAPTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_SCROLLTEXT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOTRANSLITERATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_VIEW_CONTROLS_AUTOIGNORE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATION,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_TRANSLATEFILES,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_TOOLS_OPTIONS,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_APP_ABOUT,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_SHOW,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HIDE,UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE1,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE2,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE3,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE4,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE5,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE6,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE7,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE8,UPDUI_MENUPOPUP|UPDUI_TEXT) + UPDATE_ELEMENT(ID_PROFILE9,UPDUI_MENUPOPUP|UPDUI_TEXT) + END_UPDATE_UI_MAP() + + BEGIN_DLGRESIZE_MAP(CTransliteratorDlg) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_STATICSEPARATOR, DLSZ_SIZE_X) + DLGRESIZE_CONTROL(IDC_STRNSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_SRUSTEXT, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + BEGIN_MSG_MAP(CTranslieratortDlg) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + MESSAGE_HANDLER(WM_SYSCOMMAND, OnSysCommand) + MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) + MESSAGE_HANDLER(WM_QUERYENDSESSION, OnQueryEndSession) + MESSAGE_HANDLER(WM_APPLY, OnApply) + + COMMAND_ID_HANDLER(ID_APP_EXIT, OnAppExit) + COMMAND_RANGE_HANDLER(ID_EDIT_CLEAR,ID_EDIT_REDO,OnEditCommands) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_INSERT, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_IGNORE_REMOVE, OnEditIgnore) + COMMAND_ID_HANDLER(ID_EDIT_COPY_TRNSTORUS, OnEditCopy) + COMMAND_ID_HANDLER(ID_EDIT_COPY_RUSTOTRNS, OnEditCopy) + COMMAND_RANGE_HANDLER(ID_PROFILE1,ID_PROFILE9,OnProfile) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_ENGLISH, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_RUSSIAN, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_LANGUAGE_TRANSLIT, OnViewLanguage) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_WRAPTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_SCROLLTEXT, OnViewControls) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOTRANSLITERATION, OnViewControlsAutoTransliteration) + COMMAND_ID_HANDLER(ID_VIEW_CONTROLS_AUTOIGNORE, OnViewControlsAutoIgnore) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATION, OnToolsTranslation) + COMMAND_ID_HANDLER(ID_TOOLS_TRANSLATEFILES, OnToolsTranslateFiles) + COMMAND_ID_HANDLER(ID_TOOLS_OPTIONS, OnToolsOptions) + COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) + + COMMAND_ID_HANDLER(ID_SHOW, OnShowHide) + COMMAND_ID_HANDLER(ID_HIDE, OnShowHide) + + COMMAND_HANDLER(IDC_TRNS, EN_CHANGE, OnEnChangeTrnsRus) + COMMAND_HANDLER(IDC_RUS, EN_CHANGE, OnEnChangeTrnsRus) + NOTIFY_HANDLER(IDC_TRNS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + NOTIFY_HANDLER(IDC_RUS, EN_MSGFILTER, OnEnMsgFilterTrnsRus) + + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_RCLICK, OnClickStatusBar) + NOTIFY_HANDLER(ATL_IDW_STATUS_BAR, NM_DBLCLK, OnClickStatusBar) + + CHAIN_MSG_MAP(NN::DialogStatusBarMenu) + CHAIN_MSG_MAP(NN::TrayIcon) + CHAIN_MSG_MAP(CDialogResize) + CHAIN_MSG_MAP(CUpdateUI) + END_MSG_MAP() + + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnQueryEndSession(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + LRESULT OnApply(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); + + LRESULT OnAppExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCommands(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEditCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnProfile(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewLanguage(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControls(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoTransliteration(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnViewControlsAutoIgnore(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslation(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsTranslateFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnToolsOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnAppAbout(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnShowHide(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + + LRESULT OnEnChangeTrnsRus(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); + LRESULT OnEnMsgFilterTrnsRus(int code, NMHDR* pnmhdr, BOOL& bHandled); + + LRESULT OnClickStatusBar(int code, NMHDR* pnmhdr, BOOL& bHandled); +}; + +#endif // __TRANSLITERATORDLG_H__ diff --git a/legacy/Transliterator_6b/TrnsOptionsPage.h b/legacy/Transliterator_6b/TrnsOptionsPage.h new file mode 100644 index 0000000..a8e2431 --- /dev/null +++ b/legacy/Transliterator_6b/TrnsOptionsPage.h @@ -0,0 +1,18 @@ +#ifndef __TRNSOPTIONSPAGE_H__ +#define __TRNSOPTIONSPAGE_H__ + +#include "optionsstruct.h" + +template +class TrnsOptionsPage : public NN::OptionsPageImpl, + public NN::DialogLang +{ +public: + typedef NN::OptionsPageImpl baseClass; + + BEGIN_MSG_MAP(TrnsOptionsPage) + CHAIN_MSG_MAP(NN::DialogLang) + END_MSG_MAP() +}; + +#endif // __TRNSOPTIONSPAGE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/Types.h b/legacy/Transliterator_6b/Types.h new file mode 100644 index 0000000..f5b6c83 --- /dev/null +++ b/legacy/Transliterator_6b/Types.h @@ -0,0 +1,45 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +#include "translate.h" + +typedef NN::wnd_string LangStringA; +typedef NN::wnd_wstring LangStringW; + +typedef NN::wnd_char_traits LangStringTraitsA; +typedef NN::wnd_char_traits LangStringTraitsW; + +typedef boost::tuple< + LangStringA, + LangStringA, + Translate::Translation + >LangTypeA; +typedef boost::tuple< + LangStringW, + LangStringW, + Translate::Translation + >LangTypeW; + +typedef std::list LangArrayA; +typedef std::list LangArrayW; + +typedef NN::wnd_char_traits LangArrayTraitsA; +typedef NN::wnd_char_traits LangArrayTraitsW; + +typedef LangStringW LangString; +typedef LangStringTraitsW LangStringTraits; +typedef LangTypeW LangType; +typedef LangArrayW LangArray; +typedef LangStringTraitsW LangSringTraits; + +// Ignore +typedef NN::wnd_wstring IgnoreString; + +typedef boost::tuple< + IgnoreString, + Translate::Translation + >IgnoreType; + +typedef std::list IgnoreArray; + +#endif // __TYPES_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/WindowState.h b/legacy/Transliterator_6b/WindowState.h new file mode 100644 index 0000000..bc09734 --- /dev/null +++ b/legacy/Transliterator_6b/WindowState.h @@ -0,0 +1,15 @@ +#ifndef __WINDOWSTATE_H__ +#define __WINDOWSTATE_H__ + +struct WindowState +{ + int nCmdShow; + void Reset() + { nCmdShow=SW_SHOWNORMAL; } + const bool IsDefault() const + { return nCmdShow==SW_SHOWNORMAL; } + const bool operator==(const WindowState& state) const + { return nCmdShow==state.nCmdShow; } +}; + +#endif // __WINDOWSTATE_H__ \ No newline at end of file diff --git a/legacy/Transliterator_6b/res/Transliterator.ico b/legacy/Transliterator_6b/res/Transliterator.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Transliterator_6b/res/Transliterator.ico differ diff --git a/legacy/Transliterator_6b/stdafx.cpp b/legacy/Transliterator_6b/stdafx.cpp new file mode 100644 index 0000000..1577c4e --- /dev/null +++ b/legacy/Transliterator_6b/stdafx.cpp @@ -0,0 +1 @@ +#include "stdafx.h" \ No newline at end of file diff --git a/legacy/Transliterator_6b/stdafx.h b/legacy/Transliterator_6b/stdafx.h new file mode 100644 index 0000000..ee5b3ec --- /dev/null +++ b/legacy/Transliterator_6b/stdafx.h @@ -0,0 +1,85 @@ +#ifndef __STDAFX_H__ +#define __STDAFX_H__ + +#pragma once + +// Definitions +#define WINVER 0x0500 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 +#define _ATL_NO_COM +#define _ATL_NO_OLD_NAMES +#define _WTL_NO_WTYPES +#define _WTL_NO_CSTRING +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS + +//#define _ATL_ALL_WARNINGS + +//#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning) +#ifndef _DEBUG +#pragma warning(disable:4530) +#endif // !_DEBUG + + +// Language +#include +#define _LANG_R_ +extern LANGID g_LangID; +#define _LANG_LangID_ g_LangID +#include + +// ATL / WTL +#include +#include +extern CAppModule _Module; +#include +#include +#include +#include +#include +#include +#include + +// std +#include +#include +#include + +// boost +#include + +// NN +#define NN_USE_SHL_FOR_STRINGW +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Program +/* +#include "translate.h" +#include "types.h" +#include "langprofile.h" +#include "language.h" +#include "error.h" +*/ + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#define new new(_NORMAL_BLOCK,__FILE__,__LINE__) +#endif // _DEBUG + +#endif // __STDAFX_H__ \ No newline at end of file diff --git a/legacy/Transliterator_7a/Transliterator.hpp b/legacy/Transliterator_7a/Transliterator.hpp new file mode 100644 index 0000000..c03bc62 --- /dev/null +++ b/legacy/Transliterator_7a/Transliterator.hpp @@ -0,0 +1 @@ +// Transliterator.h diff --git a/legacy/Transliterator_7a/Transliterator.rc b/legacy/Transliterator_7a/Transliterator.rc new file mode 100644 index 0000000..d92f7f6 --- /dev/null +++ b/legacy/Transliterator_7a/Transliterator.rc @@ -0,0 +1,331 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.hpp" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "atlres.h" +#include "richedit.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 7,0,0,0 + PRODUCTVERSION 7,0,0,0 + FILEFLAGSMASK 0x1fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "FileDescription", "Transliterator" + VALUE "FileVersion", "7, 0, 0, 0" + VALUE "InternalName", "Transliterator" + VALUE "LegalCopyright", "Copyright (C) 2003 - 2005" + VALUE "OriginalFilename", "Transliterator.exe" + VALUE "ProductName", "Transliterator" + VALUE "ProductVersion", "7, 0, 0, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_TRANSLITERATOR ACCELERATORS +BEGIN + VK_F4, ID_APP_EXIT, VIRTKEY, ALT, NOINVERT + "1", ID_PROFILE_FIRST, VIRTKEY, CONTROL, NOINVERT + "2", 32781, VIRTKEY, CONTROL, NOINVERT + "3", 32782, VIRTKEY, CONTROL, NOINVERT + "4", 32783, VIRTKEY, CONTROL, NOINVERT + "5", 32784, VIRTKEY, CONTROL, NOINVERT + "6", 32785, VIRTKEY, CONTROL, NOINVERT + "7", 32786, VIRTKEY, CONTROL, NOINVERT + "8", 32787, VIRTKEY, CONTROL, NOINVERT + "9", 32788, VIRTKEY, CONTROL, NOINVERT + "0", 32789, VIRTKEY, CONTROL, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_TRANSLITERATOR ICON "res\\Transliterator.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_TRANSLITERATOR MENU +BEGIN + POPUP "File" + BEGIN + MENUITEM "Open to top...", ID_FILE_OPEN_TOP + MENUITEM "Open to bottom...", ID_FILE_OPEN_BOTTOM + MENUITEM "Save top...", ID_FILE_SAVE_TOP + MENUITEM "Save bottom...", ID_FILE_SAVE_BOTTOM + MENUITEM SEPARATOR + MENUITEM "Exit", ID_APP_EXIT + END + POPUP "Edit" + BEGIN + MENUITEM "Undo", ID_EDIT_UNDO + MENUITEM "Redo", ID_EDIT_REDO + MENUITEM SEPARATOR + MENUITEM "Cut", ID_EDIT_CUT + MENUITEM "Copy", ID_EDIT_COPY + MENUITEM "Paste", ID_EDIT_PASTE + MENUITEM "Clear", ID_EDIT_CLEAR + MENUITEM "Clear All", ID_EDIT_CLEAR_ALL + MENUITEM SEPARATOR + MENUITEM "Select All", ID_EDIT_SELECT_ALL + END + POPUP "Profile" + BEGIN + MENUITEM " ", ID_PROFILE_ + END + POPUP "Options" + BEGIN + MENUITEM "General", ID_OPTIONS_GENERAL + MENUITEM "View", ID_OPTIONS_VIEW + MENUITEM "Hot Keys", ID_OPTIONS_HOTKEYS + END + POPUP "Tools" + BEGIN + MENUITEM "Files Translation", ID_TOOLS_FILES_TRANSLATION + END + POPUP "Help" + BEGIN + MENUITEM "Usage", ID_HELP_USAGE + MENUITEM SEPARATOR + MENUITEM "About", ID_HELP_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDR_TRANSLITERATOR DIALOGEX 0, 0, 185, 170 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + +IDD_PROFILE DIALOGEX 0, 0, 185, 156 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +EXSTYLE WS_EX_ACCEPTFILES +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "",IDC_GRPTOP,0,0,185,77,BS_LEFTTEXT,WS_EX_TRANSPARENT + GROUPBOX "",IDC_GRPBOTTOM,0,79,185,77,BS_LEFTTEXT,WS_EX_TRANSPARENT +END + +IDD_OPTIONS_GENERAL DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Language",IDC_GRPLANGUAGE,0,0,85,31 + COMBOBOX IDC_CMBLANGUAGE,5,11,72,55,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Startup",IDC_GRPSTARTUP,89,0,96,31 + COMBOBOX IDC_CMBSTARTUP,95,11,85,56,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Save Text",IDC_GRPSAVETEXT,0,35,85,32 + COMBOBOX IDC_CMBSAVETEXT,5,48,70,59,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Apply",IDC_BTNAPPLY,65,135,55,14 + PUSHBUTTON "Restore",IDC_BTNRESTORE,125,135,55,14 +END + +IDD_OPTIONS_VIEW DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + GROUPBOX "Controls",IDC_GRPCONTROLS,95,0,89,60 + GROUPBOX "Placement",IDC_GRPPLACEMENT,0,0,89,60 + CONTROL "Task Bar",IDC_CHKTASKBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,12,80,10 + PUSHBUTTON "Apply",IDC_BTNAPPLY,65,135,55,14 + PUSHBUTTON "Restore",IDC_BTNRESTORE,125,135,55,14 + CONTROL "Tray",IDC_CHKTRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,27,80,10 + COMBOBOX IDC_CMBPLACEMENT,5,42,78,64,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + CONTROL "Wrap Text",IDC_CHKWRAPTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,12,80,10 + CONTROL "Scroll Text",IDC_CHKSCROLLTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,27,80,8 + CONTROL "Switch Controls",IDC_CHKSWITCHCONTROLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,42,80,10 +END + +IDD_OPTIONS_HOTKEYS DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + +IDD_TOOLS_FILES_TRANSLATION DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + +IDD_HELP_USAGE DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + +IDD_HELP_ABOUT DIALOGEX 0, 0, 185, 155 +STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_PROFILE, DIALOG + BEGIN + BOTTOMMARGIN, 155 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.hpp\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""atlres.h""\r\n" + "#include ""richedit.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDR_TRANSLITERATOR "Transliterator" +END + +STRINGTABLE +BEGIN + ATL_IDS_IDLEMESSAGE " " +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/legacy/Transliterator_7a/Transliterator.sln b/legacy/Transliterator_7a/Transliterator.sln new file mode 100644 index 0000000..87cb8e2 --- /dev/null +++ b/legacy/Transliterator_7a/Transliterator.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Transliterator", "Transliterator.vcproj", "{98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Unicode|Win32 = Debug Unicode|Win32 + Debug|Win32 = Debug|Win32 + Release Unicode|Win32 = Release Unicode|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Debug|Win32.ActiveCfg = Debug|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Debug|Win32.Build.0 = Debug|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Release Unicode|Win32.Build.0 = Release Unicode|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Release|Win32.ActiveCfg = Release|Win32 + {98A9F624-C00F-49D9-9E1E-BE09DE1A9F16}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/legacy/Transliterator_7a/Transliterator.vcproj b/legacy/Transliterator_7a/Transliterator.vcproj new file mode 100644 index 0000000..fbe39eb --- /dev/null +++ b/legacy/Transliterator_7a/Transliterator.vcproj @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/Transliterator_7a/direction.hpp b/legacy/Transliterator_7a/direction.hpp new file mode 100644 index 0000000..ea029f2 --- /dev/null +++ b/legacy/Transliterator_7a/direction.hpp @@ -0,0 +1,13 @@ +#ifndef TRANSLITERATOR_DIRECTION_H +#define TRANSLITERATOR_DIRECTION_H + +struct direction +{ + enum type + { + top_to_bottom, + bottom_to_top + }; +}; + +#endif // TRANSLITERATOR_DIRECTION_H diff --git a/legacy/Transliterator_7a/global.cpp b/legacy/Transliterator_7a/global.cpp new file mode 100644 index 0000000..2df33aa --- /dev/null +++ b/legacy/Transliterator_7a/global.cpp @@ -0,0 +1,4 @@ +#include "stdafx.hpp" + +// Application Module +CAppModule _Module; diff --git a/legacy/Transliterator_7a/help_about_page.cpp b/legacy/Transliterator_7a/help_about_page.cpp new file mode 100644 index 0000000..fb98aec --- /dev/null +++ b/legacy/Transliterator_7a/help_about_page.cpp @@ -0,0 +1,3 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "help_about_page.hpp" diff --git a/legacy/Transliterator_7a/help_about_page.hpp b/legacy/Transliterator_7a/help_about_page.hpp new file mode 100644 index 0000000..91e2c0c --- /dev/null +++ b/legacy/Transliterator_7a/help_about_page.hpp @@ -0,0 +1,21 @@ +#ifndef TRANSLITERATOR_ABOUT_PAGE_H +#define TRANSLITERATOR_ABOUT_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" + +class help_about_page : public page_impl +{ +public: + enum { IDD = IDD_HELP_ABOUT }; + + // Message map + BEGIN_MSG_MAP(help_about_page) + CHAIN_MSG_MAP(page_impl) + END_MSG_MAP() +}; + +#endif // TRANSLITERATOR_ABOUT_PAGE_H diff --git a/legacy/Transliterator_7a/help_usage_page.cpp b/legacy/Transliterator_7a/help_usage_page.cpp new file mode 100644 index 0000000..251f288 --- /dev/null +++ b/legacy/Transliterator_7a/help_usage_page.cpp @@ -0,0 +1,3 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "help_usage_page.hpp" diff --git a/legacy/Transliterator_7a/help_usage_page.hpp b/legacy/Transliterator_7a/help_usage_page.hpp new file mode 100644 index 0000000..7d5a10f --- /dev/null +++ b/legacy/Transliterator_7a/help_usage_page.hpp @@ -0,0 +1,21 @@ +#ifndef TRANSLITERATOR_USAGE_PAGE_H +#define TRANSLITERATOR_USAGE_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" + +class help_usage_page : public page_impl +{ +public: + enum { IDD = IDD_HELP_USAGE }; + + // Message map + BEGIN_MSG_MAP(using_page) + CHAIN_MSG_MAP(page_impl) + END_MSG_MAP() +}; + +#endif // TRANSLITERATOR_USAGE_PAGE_H diff --git a/legacy/Transliterator_7a/i_dialog_impl_allocator.hpp b/legacy/Transliterator_7a/i_dialog_impl_allocator.hpp new file mode 100644 index 0000000..b81c110 --- /dev/null +++ b/legacy/Transliterator_7a/i_dialog_impl_allocator.hpp @@ -0,0 +1,18 @@ +#ifndef TRANSLITERATOR_I_DIALOG_IMPL_ALLOCATOR_H +#define TRANSLITERATOR_I_DIALOG_IMPL_ALLOCATOR_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +// Same as boost::heap_clone_allocator except from deallocate_clone +struct i_dialog_impl_clone_allocator : boost::heap_clone_allocator +{ + template + static void deallocate_clone(const i_dialog_impl* r) + { + r->delete_this(); + } +}; + +#endif // TRANSLITERATOR_I_DIALOG_IMPL_ALLOCATOR_H diff --git a/legacy/Transliterator_7a/language.cpp b/legacy/Transliterator_7a/language.cpp new file mode 100644 index 0000000..209f652 --- /dev/null +++ b/legacy/Transliterator_7a/language.cpp @@ -0,0 +1,21 @@ +#include "stdafx.hpp" +#include "language.hpp" +#include "settings.hpp" + +const array< + translations::language_type, + settings::language_count +> language::s_languages = +{ + MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), + MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), + MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT + 0x30) +}; + +// Translation init +void language::init() +{ + insert_language(settings::language_english, english_text, english_other); + //insert_language(settings::language_russian, russian_text, russian_other); + //insert_language(settings::language_translit, translit_text, translit_other); +} diff --git a/legacy/Transliterator_7a/language.hpp b/legacy/Transliterator_7a/language.hpp new file mode 100644 index 0000000..3aab06c --- /dev/null +++ b/legacy/Transliterator_7a/language.hpp @@ -0,0 +1,67 @@ +#ifndef TRANSLITERATOR_LANGUAGE_H +#define TRANSLITERATOR_LANGUAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +struct language +{ + // Size language + static const size_t size = 2; + + enum type + { + top, + bottom + }; + + static void init(); + + // Cannot use settings::language_count because of recursive include + static const size_t language_count = 3; + static const array s_languages; + +private: + typedef const pair id_text_type; + + // Automatic insert + template + static void insert_translation(translations::lang_to_translation& translation, + size_t lang, + const array& idtext) + { + typedef translations::lang_to_translation::value_type translation_value_type; + typedef translations::id_to_text id_to_text; + + id_to_text id_text_temp(idtext.begin(), idtext.end()); + translation_value_type translation_value(s_languages[lang], id_text_temp); + + translation.insert(translation_value); + } + + template + static void insert_language(size_t lang, + const array& text, + const array& other) + { + insert_translation(translations::text(), lang, text); + insert_translation(translations::other(), lang, other); + } + + // Translations + static const size_t text_size = 45; + static const size_t other_size = 1; + + // English + static const array english_text; + static const array english_other; + + //static const id_text russian_text[]; + //static const id_text russian_other[]; + + //static const id_text translit_text[]; + //static const id_text translit_other[]; +}; + +#endif // TRANSLITERATOR_LANGUAGE_H diff --git a/legacy/Transliterator_7a/language_english.cpp b/legacy/Transliterator_7a/language_english.cpp new file mode 100644 index 0000000..d140521 --- /dev/null +++ b/legacy/Transliterator_7a/language_english.cpp @@ -0,0 +1,68 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "language.hpp" + +const array< + language::id_text_type, + language::text_size +> language::english_text = +{ + id_text_type(IDOK, _T("OK")), + id_text_type(IDCANCEL, _T("Cancel")), + id_text_type(IDR_TRANSLITERATOR, _T("Transliterator")), + id_text_type(IDD_OPTIONS_GENERAL, _T("Options - General")), + id_text_type(IDD_OPTIONS_VIEW, _T("Options - View")), + id_text_type(IDD_OPTIONS_HOTKEYS, _T("Options - Hot Keys")), + id_text_type(IDD_TOOLS_FILES_TRANSLATION, _T("Tools - Files Translation")), + id_text_type(IDD_HELP_USAGE, _T("Help - Usage")), + id_text_type(IDD_HELP_ABOUT, _T("Help - About")), + id_text_type(IDC_CMBSAVETEXT, _T("Don't save\nSave")), + id_text_type(IDC_GRPSAVETEXT, _T("Save Text")), + id_text_type(IDC_GRPLANGUAGE, _T("Language")), + id_text_type(IDC_CMBLANGUAGE, _T("English")), + id_text_type(IDC_CMBSTARTUP, _T("Don't load\nLoad shown\nLoad hidden")), + id_text_type(IDC_GRPSTARTUP, _T("StartUp")), + id_text_type(IDC_BTNAPPLY, _T("Apply")), + id_text_type(IDC_BTNRESTORE, _T("Restore")), + id_text_type(IDC_GRPCONTROLS, _T("Controls")), + id_text_type(IDC_GRPPLACEMENT, _T("Placement")), + id_text_type(IDC_CHKTASKBAR, _T("Task Bar")), + id_text_type(IDC_CHKTRAY, _T("Tray")), + id_text_type(IDC_CMBPLACEMENT, _T("Normal\nOn Top\nOn Bottom")), + id_text_type(IDC_CHKWRAPTEXT, _T("Wrap Text")), + id_text_type(IDC_CHKSCROLLTEXT, _T("Scroll Text")), + id_text_type(IDC_CHKSWITCHCONTROLS, _T("Switch Controls")), + id_text_type(ID_FILE_EXIT, _T("Exit")), + id_text_type(ID_FILE_OPEN_TOP, _T("Open to top...")), + id_text_type(ID_FILE_OPEN_BOTTOM, _T("Open to bottom...")), + id_text_type(ID_FILE_SAVE_TOP, _T("Save top...")), + id_text_type(ID_FILE_SAVE_BOTTOM, _T("Save bottom...")), + id_text_type(ID_APP_EXIT, _T("Exit\tAlt+F4")), + id_text_type(ID_EDIT_UNDO, _T("Undo\tCtrl+Z")), + id_text_type(ID_EDIT_REDO, _T("Redo\tCtrl+Y")), + id_text_type(ID_EDIT_CUT, _T("Cut\tCtrl+X")), + id_text_type(ID_EDIT_COPY, _T("Copy\tCtrl+C")), + id_text_type(ID_EDIT_PASTE, _T("Paste\tCtrl+V")), + id_text_type(ID_EDIT_CLEAR, _T("Clear\tDel")), + id_text_type(ID_EDIT_CLEAR_ALL, _T("Clear All")), + id_text_type(ID_EDIT_SELECT_ALL, _T("Select All\tCtrl+A")), + id_text_type(ID_OPTIONS_GENERAL, _T("General")), + id_text_type(ID_OPTIONS_VIEW, _T("View")), + id_text_type(ID_OPTIONS_HOTKEYS, _T("Hot Keys")), + id_text_type(ID_TOOLS_FILES_TRANSLATION, _T("Files Translation")), + id_text_type(ID_HELP_USAGE, _T("Usage")), + id_text_type(ID_HELP_ABOUT, _T("About")), +}; + +const array< + language::id_text_type, + language::other_size +> language::english_other = +{ + id_text_type(IDR_TRANSLITERATOR, _T("File\n") + _T("Edit\n") + _T("Profile\n") + _T("Options\n") + _T("Tools\n") + _T("Help\n")) +}; diff --git a/legacy/Transliterator_7a/main.cpp b/legacy/Transliterator_7a/main.cpp new file mode 100644 index 0000000..63593a4 --- /dev/null +++ b/legacy/Transliterator_7a/main.cpp @@ -0,0 +1,52 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "language.hpp" +#include "settings_saver.hpp" +#include "transliterator_dlg.hpp" + +void run() +{ + CMessageLoop the_loop; + _Module.AddMessageLoop(&the_loop); + + transliterator_dlg dlg; + dlg.Create(GetDesktopWindow()); + dlg.ShowWindow(SW_SHOW); + + the_loop.Run(); + + _Module.RemoveMessageLoop(); +} + +int WINAPI _tWinMain(HINSTANCE instance, + HINSTANCE /*prev_instance*/, + LPTSTR /*cmd_line*/, + int /*cmd_show*/) +{ + // Initialize RichEdit + LoadLibrary(CRichEditCtrl::GetLibraryName()); + + // Initialize common controls + AtlInitCommonControls(0xFF); + + struct coinitialize + { + coinitialize() { ::CoInitialize(NULL); } + ~coinitialize() {:: CoUninitialize(); } + } coinitialize_; + + struct module_init + { + module_init(HINSTANCE instance) { _Module.Init(NULL, instance); } + ~module_init() { _Module.Term(); } + } module_init_(instance); + + // Init language translation + language::init(); + + // Load settings + if(settings_saver::instance().load()) + run(); + + return 0; +} diff --git a/legacy/Transliterator_7a/options_general_page.cpp b/legacy/Transliterator_7a/options_general_page.cpp new file mode 100644 index 0000000..c7b50a9 --- /dev/null +++ b/legacy/Transliterator_7a/options_general_page.cpp @@ -0,0 +1,5 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "language.hpp" +#include "settings.hpp" +#include "options_general_page.hpp" diff --git a/legacy/Transliterator_7a/options_general_page.hpp b/legacy/Transliterator_7a/options_general_page.hpp new file mode 100644 index 0000000..01ef731 --- /dev/null +++ b/legacy/Transliterator_7a/options_general_page.hpp @@ -0,0 +1,24 @@ +#ifndef TRANSLITERATOR_OPTIONS_GENERAL_PAGE_H +#define TRANSLITERATOR_OPTIONS_GENERAL_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" +#include "settings.hpp" + +class options_general_page : public page_impl +{ +public: + enum { IDD = IDD_OPTIONS_GENERAL }; + + // DDX map + BEGIN_DDX_MAP(options_general_page) + DDX_COMBO_SEL(IDC_CMBLANGUAGE, settings::instance().m_language) + DDX_COMBO_SEL(IDC_CMBSTARTUP, settings::instance().m_startup) + DDX_COMBO_SEL(IDC_CMBSAVETEXT, settings::instance().m_save_text) + END_DDX_MAP() +}; + +#endif // TRANSLITERATOR_OPTIONS_GENERAL_PAGE_H diff --git a/legacy/Transliterator_7a/options_hotkeys_page.cpp b/legacy/Transliterator_7a/options_hotkeys_page.cpp new file mode 100644 index 0000000..a1a611a --- /dev/null +++ b/legacy/Transliterator_7a/options_hotkeys_page.cpp @@ -0,0 +1,3 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "options_hotkeys_page.hpp" diff --git a/legacy/Transliterator_7a/options_hotkeys_page.hpp b/legacy/Transliterator_7a/options_hotkeys_page.hpp new file mode 100644 index 0000000..b6916b6 --- /dev/null +++ b/legacy/Transliterator_7a/options_hotkeys_page.hpp @@ -0,0 +1,19 @@ +#ifndef TRANSLITERATOR_OPTIONS_HOTKEYS_PAGE_H +#define TRANSLITERATOR_OPTIONS_HOTKEYS_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" + +class options_hotkeys_page : public page_impl +{ +public: + enum { IDD = IDD_OPTIONS_HOTKEYS }; + + BEGIN_DDX_MAP(options_hotkeys_page) + END_DDX_MAP() +}; + +#endif // TRANSLITERATOR_OPTIONS_HOTKEYS_PAGE_H diff --git a/legacy/Transliterator_7a/options_view_page.cpp b/legacy/Transliterator_7a/options_view_page.cpp new file mode 100644 index 0000000..a2c1853 --- /dev/null +++ b/legacy/Transliterator_7a/options_view_page.cpp @@ -0,0 +1,3 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "options_view_page.hpp" diff --git a/legacy/Transliterator_7a/options_view_page.hpp b/legacy/Transliterator_7a/options_view_page.hpp new file mode 100644 index 0000000..b0a47e3 --- /dev/null +++ b/legacy/Transliterator_7a/options_view_page.hpp @@ -0,0 +1,26 @@ +#ifndef TRANSLITERATOR_OPTIONS_VIEW_PAGE_H +#define TRANSLITERATOR_OPTIONS_VIEW_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" +#include "settings.hpp" + +class options_view_page : public page_impl +{ +public: + enum { IDD = IDD_OPTIONS_VIEW }; + + BEGIN_DDX_MAP(options_view_page) + DDX_CHECK(IDC_CHKTASKBAR, settings::instance().m_task_bar) + DDX_CHECK(IDC_CHKTRAY, settings::instance().m_tray) + DDX_COMBO_SEL(IDC_CMBPLACEMENT, settings::instance().m_placement) + DDX_CHECK(IDC_CHKWRAPTEXT, settings::instance().m_wrap_text) + DDX_CHECK(IDC_CHKSCROLLTEXT, settings::instance().m_scroll_text) + DDX_CHECK(IDC_CHKSWITCHCONTROLS, settings::instance().m_switch_controls) + END_DDX_MAP() +}; + +#endif // TRANSLITERATOR_OPTIONS_VIEW_PAGE_H diff --git a/legacy/Transliterator_7a/page_impl.hpp b/legacy/Transliterator_7a/page_impl.hpp new file mode 100644 index 0000000..4a95a06 --- /dev/null +++ b/legacy/Transliterator_7a/page_impl.hpp @@ -0,0 +1,147 @@ +#ifndef TRANSLITERATOR_PAGE_IMPL_H +#define TRANSLITERATOR_PAGE_IMPL_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "types.hpp" + +struct i_dialog_lang +{ + virtual void update_language_i() = 0; +}; + +struct i_profile_changed +{ + virtual void profile_changed() = 0; +}; + +struct i_caption +{ + virtual lang_tstring caption() = 0; +}; + +struct i_open_save +{ + virtual void open_save(bool open, bool top) = 0; +}; + +struct i_page_impl : i_dialog_lang, + i_profile_changed, + i_caption, + i_open_save +{ +}; + +template +class page_impl : public CDialogImpl, + public CDialogResize, + public CWinDataExchange, + public dialog_lang, + public dialog_impl + +{ +public: + // Override + virtual void update_language_i() + { + static_cast(this)->update_language(); + } + + virtual void profile_changed() + { + } + + virtual lang_tstring caption() + { + // Load string with IDD + lang_tstring caption; + get_translation_text(static_cast(this)->IDD, + caption, + default_language::get()); + return caption; + } + + virtual void open_save(bool /*open*/, bool /*top*/) + { + } + + void dialog_lang_language_changed() + { + load_settings(); + } + + // Initialization + void page_impl_init() + { + // Init resize + DlgResize_Init(false, false); + + // Init language + dialog_lang_init(); + } + + // Resize Map + BEGIN_DLGRESIZE_MAP(page_impl) + END_DLGRESIZE_MAP() + + // DDX Map + virtual BEGIN_DDX_MAP(page_impl) + END_DDX_MAP() + + // Message Map + BEGIN_MSG_MAP(page_impl) + MSG_WM_INITDIALOG(on_init_dialog) + MSG_WM_SHOWWINDOW(on_show_window) + + #pragma warning(push) +#pragma warning(disable:4244) // 'argument' : conversion from 'int' to 'WORD', possible loss of data + COMMAND_ID_HANDLER_EX(IDC_BTNAPPLY, on_apply) + COMMAND_ID_HANDLER_EX(IDC_BTNRESTORE, on_restore) +#pragma warning(pop) + + CHAIN_MSG_MAP(CDialogResize) + END_MSG_MAP() + +private: + void save_settings() + { + DoDataExchange(DDX_SAVE); + } + + void load_settings() + { + DoDataExchange(DDX_LOAD); + } + + LRESULT on_init_dialog(HWND /*wnd_focus*/, LPARAM /*lparam*/) + { + page_impl_init(); + + return FALSE; + } + + LRESULT on_show_window(BOOL show, UINT /*status*/) + { + // Load settings + if(show == TRUE) + load_settings(); + + return 0; + } + + LRESULT on_apply(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) + { + save_settings(); + return 0; + } + + LRESULT on_restore(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) + { + load_settings(); + return 0; + } +}; + +#endif // TRANSLITERATOR_PAGE_IMPL_H diff --git a/legacy/Transliterator_7a/profile.hpp b/legacy/Transliterator_7a/profile.hpp new file mode 100644 index 0000000..e3df62f --- /dev/null +++ b/legacy/Transliterator_7a/profile.hpp @@ -0,0 +1,47 @@ +#ifndef TRANSLITERATOR_PROFILE_H +#define TRANSLITERATOR_PROFILE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "types.hpp" +#include "language.hpp" + +struct profile +{ + profile() + { + } + + profile(const profile& right) : + m_profile_name(right.m_profile_name), + m_lang_name(right.m_lang_name), + m_translation(right.m_translation) + { + } + + ~profile() + { + } + + profile& operator=(const profile& right) + { + m_profile_name = right.m_profile_name; + m_lang_name = right.m_lang_name; + m_translation = right.m_translation; + + return *this; + } + + // Profile Name + lang_string m_profile_name; + + // Language Name + array m_lang_name; + + // Translation + lang_map m_translation; +}; + +#endif // TRANSLITERATOR_PROFILE_H diff --git a/legacy/Transliterator_7a/profile_page.cpp b/legacy/Transliterator_7a/profile_page.cpp new file mode 100644 index 0000000..64c3bbd --- /dev/null +++ b/legacy/Transliterator_7a/profile_page.cpp @@ -0,0 +1,324 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "settings.hpp" +#include "profiles.hpp" +#include "types.hpp" +#include "translation.hpp" +#include "text.hpp" +#include "profile_page.hpp" + +const CRect profile_page::s_delta_rect(5, 15, 5 ,5); + +// Unicode CP +static const UINT unicode_cp = 1200; + +void profile_page::DlgResize_UpdateLayout(int cxWidth, int cyHeight) +{ + CDialogResize::DlgResize_UpdateLayout(cxWidth, cyHeight); + update_layout(); +} + +void profile_page::dialog_lang_language_changed() +{ + // Update language + update_lang(); +} + +void profile_page::profile_changed() +{ + update_translation(); + update_lang(); +} + +lang_tstring profile_page::caption() +{ + return convert_cast(profiles::instance().get_profile().m_profile_name); +} + +void profile_page::init_controls() +{ + // Create + DWORD style(WS_TABSTOP | + WS_BORDER | + WS_CHILD | + WS_VISIBLE | + WS_VSCROLL | + ES_WANTRETURN | + ES_MULTILINE | + ES_NOHIDESEL | + ES_AUTOVSCROLL); + if(!settings::instance().m_wrap_text) + style|= WS_HSCROLL | ES_AUTOHSCROLL; + DWORD style_ex(0); + + // Load text + + NN_UPTO_T(i, m_text.size()) + { + // Create + m_text[i].Create(m_hWnd, + NULL, + _T(""), + style, + style_ex, + IDC_RETOP + i); + + // Set text + text::text_type& t = text::instance().get_text(); + if(t[i].size() != 0) + { + m_text[i].SetTextEx(reinterpret_cast(&t[i][0]), + ST_DEFAULT, + unicode_cp); + + // Clear text + t[i].clear(); + } + } + + // Set focus to prevent selection + m_text[0].SetFocus(); + + // Set notification + set_lang_notification(true); + + // Update layout + update_layout(); +} + +void profile_page::open_save(bool open, bool top) +{open;top; + MessageBox(_T("Not implemented yet"), _T("Transliterator"), MB_OK); + //DWORD flags = OFN_EXPLORER | OFN_LONGNAMES | OFN_ENABLESIZING | + // (!open ? + // OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT : + // OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST); + + //CFileDialog fd(open, + // _T("*.*"), + // NULL, + // flags, + // _T("Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"), + // m_hWnd); + //if(fd.DoModal() != IDOK) + // return; + // + //if(open) + //{ + // CAtlFile file; + // file.Create(fd.m_ofn.lpstrFile, + // GENERIC_READ, + // FILE_SHARE_READ, + // OPEN_EXISTING, + // FILE_ATTRIBUTE_NORMAL); + // + // ULONGLONG size; + // file.GetSize(size); + //} + //else + //{ + //} +} + +void profile_page::update_layout() +{ + // Resize edit boxes + NN_UPTO_T(i, m_text.size()) + { + // Get rect + CRect rect; + + ::GetWindowRect(GetDlgItem(IDC_GRPTOP + i), &rect); + ScreenToClient(&rect); + + // Calculate new rect + rect -= s_delta_rect; + + // Move + m_text[i].MoveWindow(&rect); + } +} + +void profile_page::update_translation() +{ + translate(::GetFocus() == m_text[language::top] ? + direction::top_to_bottom : + direction::bottom_to_top); +} + +void profile_page::update_lang() +{ + static const lang_tstring separator(_T(" - ")); + + NN_UPTO_T(i, m_text.size()) + { + // Prepare string + lang_tstring count_string; + convert(profiles::instance().get_profile().m_lang_name[i], count_string); + + // Add separator + count_string += separator; + + // Add length + TCHAR length[digits_number::value + 1]; + _itot(m_text[i].GetWindowTextLength(), length, 10); + count_string += length; + + SetDlgItemText(IDC_GRPTOP + i, count_string.c_str()); + } +} + +void profile_page::translate(direction::type dir) +{ + // disable_lang_notify + struct disable_lang_notify + { + disable_lang_notify(profile_page& t) : m_t(t) + { + m_t.set_lang_notification(false); + } + + ~disable_lang_notify() + { + m_t.set_lang_notification(true); + } + + private: + profile_page& m_t; + } dln(*this); + + // Controls + CRichEditCtrl from_ctrl = m_text[dir == direction::top_to_bottom ? 0 : 1]; + CRichEditCtrl to_ctrl = m_text[dir == direction::top_to_bottom ? 1 : 0]; + + // Get text + typedef vector text_vector; + text_vector text_in( + static_cast(from_ctrl.GetWindowTextLength()) + 1); + text_vector text_out(translation::size(text_in.size(), + dir, + profiles::instance().get_profile())); + + from_ctrl.GetTextEx(reinterpret_cast(&text_in[0]), + text_in.size() * sizeof(text_vector::value_type), + GT_DEFAULT, + unicode_cp); + + // Translate + translation::translate(&text_in[0], + &text_out[0], + dir, + profiles::instance().get_profile()); + + // Set text + to_ctrl.SetTextEx(reinterpret_cast(&text_out[0]), + ST_DEFAULT, + unicode_cp); +} + +void profile_page::set_lang_notification(bool notify) +{ + NN_FOREACH(text_type::iterator, it, m_text) + it->SetEventMask(notify ? ENM_CHANGE | ENM_MOUSEEVENTS : 0); +} + +void profile_page::save_text() +{ + // Save text + NN_UPTO_T(i, language::size) + { + text::text_type& t = text::instance().get_text(); + + // Resize + size_t length = static_cast(m_text[i].GetTextLength() + 1); + t[i].resize(length); + + // Get text + m_text[i].GetTextEx(reinterpret_cast(&t[i][0]), + length * sizeof(lang_char), + GT_DEFAULT, + unicode_cp); + } +} + +LRESULT profile_page::on_init_dialog(HWND /*wnd_focus*/, LPARAM /*lparam*/) +{ + // Init controls + init_controls(); + + // Not handled + SetMsgHandled(FALSE); + + return 0; +} + +LRESULT profile_page::on_destroy() +{ + // Save text + if(settings::instance().m_save_text != settings::save_text_no) + save_text(); + + return 0; +} + +LRESULT profile_page::on_drop_files(HDROP drop) +{ + struct drag_finish + { + drag_finish(HDROP drop) : m_drop(drop) {} + ~drag_finish() { ::DragFinish(m_drop); } + private: + HDROP m_drop; + } df(drop); + + + + return 0; +} + +LRESULT profile_page::on_en_change_lang(WORD /*notify_code*/, WORD id, HWND /*wnd_control*/) +{ + bool top(id == IDC_RETOP); + + // Direction + translate(top ? + direction::top_to_bottom : + direction::bottom_to_top); + + // Scroll + CRichEditCtrl from(m_text[top ? language::top : language::bottom]); + CRichEditCtrl to(m_text[top ? language::bottom : language::top]); + + if(settings::instance().m_scroll_text) + to.LineScroll(from.GetFirstVisibleLine()); + + // Update + update_lang(); + + return 0; +} + +LRESULT profile_page::on_en_msg_filter_lang(LPNMHDR notify) +{ + MSGFILTER *msg_filter = reinterpret_cast(notify); + if(msg_filter->msg == WM_RBUTTONDOWN) + { + //::SetFocus(msg_filter->nmhdr.hwndFrom); + + //OnIdle(); + + //CPoint pt; + //::GetCursorPos(&pt); + + //CMenu menu = WTL::AtlLoadMenu(IDR_EDIT); + //::TrackPopupMenu(menu.GetSubMenu(0), + // TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, + // pt.x, + // pt.y, + // 0, + // m_hWnd, + // NULL); + } + + return 0; +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profile_page.hpp b/legacy/Transliterator_7a/profile_page.hpp new file mode 100644 index 0000000..e7c667d --- /dev/null +++ b/legacy/Transliterator_7a/profile_page.hpp @@ -0,0 +1,89 @@ +#ifndef TRANSLITERATOR_PROFILE_PAGE_H +#define TRANSLITERATOR_PROFILE_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" +#include "language.hpp" +#include "direction.hpp" + +class profile_page : public page_impl +{ +public: + enum { IDD = IDD_PROFILE }; + + // Overrides + void DlgResize_UpdateLayout(int cxWidth, int cyHeight); + + void dialog_lang_language_changed(); + + virtual void profile_changed(); + + virtual lang_tstring caption(); + + virtual void open_save(bool open, bool top); + + // Resize map + BEGIN_DLGRESIZE_MAP(profile_page) + BEGIN_DLGRESIZE_GROUP() + DLGRESIZE_CONTROL(IDC_GRPTOP, DLSZ_SIZE_X|DLSZ_SIZE_Y) + DLGRESIZE_CONTROL(IDC_GRPBOTTOM, DLSZ_SIZE_X|DLSZ_SIZE_Y) + END_DLGRESIZE_GROUP() + END_DLGRESIZE_MAP() + + // Message map + BEGIN_MSG_MAP(profile_part) + MSG_WM_INITDIALOG(on_init_dialog) + MSG_WM_DESTROY(on_destroy) + MSG_WM_DROPFILES(on_drop_files) + +#pragma warning(push) +#pragma warning(disable:4244) // 'argument' : conversion from 'int' to 'WORD', possible loss of data + COMMAND_HANDLER_EX(IDC_RETOP, EN_CHANGE, on_en_change_lang) + COMMAND_HANDLER_EX(IDC_REBOTTOM, EN_CHANGE, on_en_change_lang) +#pragma warning(pop) + + NOTIFY_HANDLER_EX(IDC_RETOP, EN_MSGFILTER, on_en_msg_filter_lang) + NOTIFY_HANDLER_EX(IDC_REBOTTOM, EN_MSGFILTER, on_en_msg_filter_lang) + + CHAIN_MSG_MAP(page_impl) + END_MSG_MAP() + +private: + // Controls + void init_controls(); + + // Layout + void update_layout(); + + // Language + void update_lang(); + + // Translation + void update_translation(); + void translate(direction::type dir); + + // Notification + void set_lang_notification(bool notify); + + // Text + void save_text(); + + // Messages + LRESULT on_init_dialog(HWND wnd_focus, LPARAM lparam); + LRESULT on_destroy(); + LRESULT on_drop_files(HDROP drop); + + LRESULT on_en_change_lang(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_en_msg_filter_lang(LPNMHDR notify); + + // Variables + static const CRect s_delta_rect; + + typedef array text_type; + text_type m_text; +}; + +#endif // TRANSLITERATOR_PROFILE_PAGE_H diff --git a/legacy/Transliterator_7a/profiles.cpp b/legacy/Transliterator_7a/profiles.cpp new file mode 100644 index 0000000..4dac048 --- /dev/null +++ b/legacy/Transliterator_7a/profiles.cpp @@ -0,0 +1,45 @@ +#include "stdafx.hpp" +#include "profiles.hpp" +#include "settings.hpp" + +profiles& profiles::instance() +{ + static profiles s; + return s; +} + +const profile& profiles::get_profile() const +{ + return m_profiles[settings::instance().m_profile]; +} + +profile& profiles::get_profile(size_t n) +{ + return m_profiles[n]; +} + +size_t profiles::get_profiles_count() +{ + return m_profiles.size(); +} + +void profiles::reset() +{ + static const array init_profile = + { + &init_profile1, + &init_profile2, + &init_profile3, + &init_profile4, + &init_profile5, + &init_profile6, + &init_profile7, + &init_profile8 + }; + + NN_UPTO_T(i, init_profile.size()) + { + m_profiles.push_back(new profile()); + init_profile[i](m_profiles[i]); + } +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles.hpp b/legacy/Transliterator_7a/profiles.hpp new file mode 100644 index 0000000..2c7a127 --- /dev/null +++ b/legacy/Transliterator_7a/profiles.hpp @@ -0,0 +1,41 @@ +#ifndef TRANSLITERATOR_PROFILES_H +#define TRANSLITERATOR_PROFILES_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "profile.hpp" + +class profiles +{ +public: + static profiles& instance(); + + // Get profile + const profile& get_profile() const; + profile& get_profile(size_t n); + size_t get_profiles_count(); + + void reset(); + +private: + // Profiles + static const size_t max_profiles = 20; + typedef ptr_vector profiles_type; + profiles_type m_profiles; + + static void init_profile1(profile& p); + static void init_profile2(profile& p); + static void init_profile3(profile& p); + static void init_profile4(profile& p); + static void init_profile5(profile& p); + static void init_profile6(profile& p); + static void init_profile7(profile& p); + static void init_profile8(profile& p); + + // Initialize default profiles + static const size_t default_profiles_count = 8; +}; + +#endif // TRANSLITERATOR_PROFILES_H diff --git a/legacy/Transliterator_7a/profiles_profile1.cpp b/legacy/Transliterator_7a/profiles_profile1.cpp new file mode 100644 index 0000000..c364ee1 --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile1.cpp @@ -0,0 +1,127 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile1(profile& p) +{ + // Profile Name + p.m_profile_name = L"Standard"; + + // Lang Name + p.m_lang_name[0] = L"Translit"; + p.m_lang_name[1] = L"Cyrillic"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"a", L"", bimap_direction::all_to_all), + lang_type_nc(L"A", L"", bimap_direction::all_to_all), + lang_type_nc(L"b", L"", bimap_direction::all_to_all), + lang_type_nc(L"B", L"", bimap_direction::all_to_all), + lang_type_nc(L"c", L"", bimap_direction::all_to_all), + lang_type_nc(L"C", L"", bimap_direction::all_to_all), + lang_type_nc(L"ch", L"", bimap_direction::all_to_all), + lang_type_nc(L"cH", L"", bimap_direction::left_to_right), + lang_type_nc(L"CH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ch", L"", bimap_direction::left_to_right), + lang_type_nc(L"d", L"", bimap_direction::all_to_all), + lang_type_nc(L"D", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::all_to_all), + lang_type_nc(L"E", L"", bimap_direction::all_to_all), + lang_type_nc(L"e'", L"", bimap_direction::all_to_all), + lang_type_nc(L"E'", L"", bimap_direction::all_to_all), + lang_type_nc(L"e`", L"", bimap_direction::all_to_all), + lang_type_nc(L"E`", L"", bimap_direction::all_to_all), + lang_type_nc(L"e''", L"", bimap_direction::all_to_all), + lang_type_nc(L"E''", L"", bimap_direction::all_to_all), + lang_type_nc(L"f", L"", bimap_direction::all_to_all), + lang_type_nc(L"F", L"", bimap_direction::all_to_all), + lang_type_nc(L"g", L"", bimap_direction::all_to_all), + lang_type_nc(L"G", L"", bimap_direction::all_to_all), + lang_type_nc(L"g'`", L"", bimap_direction::all_to_all), + lang_type_nc(L"g`'", L"", bimap_direction::left_to_right), + lang_type_nc(L"G'`", L"", bimap_direction::all_to_all), + lang_type_nc(L"G`'", L"", bimap_direction::left_to_right), + lang_type_nc(L"h", L"", bimap_direction::all_to_all), + lang_type_nc(L"H", L"", bimap_direction::all_to_all), + lang_type_nc(L"i", L"", bimap_direction::all_to_all), + lang_type_nc(L"I", L"", bimap_direction::all_to_all), + lang_type_nc(L"i'", L"", bimap_direction::all_to_all), + lang_type_nc(L"I'", L"", bimap_direction::all_to_all), + lang_type_nc(L"i`", L"", bimap_direction::all_to_all), + lang_type_nc(L"I`", L"", bimap_direction::all_to_all), + lang_type_nc(L"j", L"", bimap_direction::all_to_all), + lang_type_nc(L"J", L"", bimap_direction::all_to_all), + lang_type_nc(L"k", L"", bimap_direction::all_to_all), + lang_type_nc(L"K", L"", bimap_direction::all_to_all), + lang_type_nc(L"l", L"", bimap_direction::all_to_all), + lang_type_nc(L"L", L"", bimap_direction::all_to_all), + lang_type_nc(L"m", L"", bimap_direction::all_to_all), + lang_type_nc(L"M", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::all_to_all), + lang_type_nc(L"N", L"", bimap_direction::all_to_all), + lang_type_nc(L"o", L"", bimap_direction::all_to_all), + lang_type_nc(L"O", L"", bimap_direction::all_to_all), + lang_type_nc(L"p", L"", bimap_direction::all_to_all), + lang_type_nc(L"P", L"", bimap_direction::all_to_all), + lang_type_nc(L"q", L"", bimap_direction::left_to_right), + lang_type_nc(L"Q", L"", bimap_direction::left_to_right), + lang_type_nc(L"r", L"", bimap_direction::all_to_all), + lang_type_nc(L"R", L"", bimap_direction::all_to_all), + lang_type_nc(L"s", L"", bimap_direction::all_to_all), + lang_type_nc(L"S", L"", bimap_direction::all_to_all), + lang_type_nc(L"sh", L"", bimap_direction::all_to_all), + lang_type_nc(L"sH", L"", bimap_direction::left_to_right), + lang_type_nc(L"SH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Sh", L"", bimap_direction::left_to_right), + lang_type_nc(L"sh''", L"", bimap_direction::left_to_right), + lang_type_nc(L"sH''", L"", bimap_direction::left_to_right), + lang_type_nc(L"Sh''", L"", bimap_direction::left_to_right), + lang_type_nc(L"SH''", L"", bimap_direction::left_to_right), + lang_type_nc(L"sch'", L"", bimap_direction::all_to_all), + lang_type_nc(L"sCh'", L"", bimap_direction::left_to_right), + lang_type_nc(L"scH'", L"", bimap_direction::left_to_right), + lang_type_nc(L"sCH'", L"", bimap_direction::left_to_right), + lang_type_nc(L"Sch'", L"", bimap_direction::left_to_right), + lang_type_nc(L"SCh'", L"", bimap_direction::left_to_right), + lang_type_nc(L"ScH'", L"", bimap_direction::left_to_right), + lang_type_nc(L"SCH'", L"", bimap_direction::all_to_all), + lang_type_nc(L"t", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::all_to_all), + lang_type_nc(L"tc'", L"", bimap_direction::left_to_right), + lang_type_nc(L"tC'", L"", bimap_direction::left_to_right), + lang_type_nc(L"Tc'", L"", bimap_direction::left_to_right), + lang_type_nc(L"TC'", L"", bimap_direction::left_to_right), + lang_type_nc(L"u", L"", bimap_direction::all_to_all), + lang_type_nc(L"U", L"", bimap_direction::all_to_all), + lang_type_nc(L"u'", L"", bimap_direction::all_to_all), + lang_type_nc(L"U'", L"", bimap_direction::all_to_all), + lang_type_nc(L"v", L"", bimap_direction::all_to_all), + lang_type_nc(L"V", L"", bimap_direction::all_to_all), + lang_type_nc(L"w", L"", bimap_direction::left_to_right), + lang_type_nc(L"W", L"", bimap_direction::left_to_right), + lang_type_nc(L"w''", L"", bimap_direction::left_to_right), + lang_type_nc(L"W''", L"", bimap_direction::left_to_right), + lang_type_nc(L"x", L"", bimap_direction::left_to_right), + lang_type_nc(L"X", L"", bimap_direction::left_to_right), + lang_type_nc(L"y", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y", L"", bimap_direction::all_to_all), + lang_type_nc(L"ya", L"", bimap_direction::all_to_all), + lang_type_nc(L"yA", L"", bimap_direction::left_to_right), + lang_type_nc(L"YA", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ya", L"", bimap_direction::left_to_right), + lang_type_nc(L"yu", L"", bimap_direction::all_to_all), + lang_type_nc(L"yU", L"", bimap_direction::left_to_right), + lang_type_nc(L"YU", L"", bimap_direction::all_to_all), + lang_type_nc(L"Yu", L"", bimap_direction::left_to_right), + lang_type_nc(L"y'", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y'", L"", bimap_direction::all_to_all), + lang_type_nc(L"z", L"", bimap_direction::all_to_all), + lang_type_nc(L"Z", L"", bimap_direction::all_to_all), + lang_type_nc(L"'", L"", bimap_direction::all_to_all), + lang_type_nc(L"''", L"", bimap_direction::all_to_all), + lang_type_nc(L"`", L"", bimap_direction::all_to_all), + lang_type_nc(L"``", L"", bimap_direction::all_to_all), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile2.cpp b/legacy/Transliterator_7a/profiles_profile2.cpp new file mode 100644 index 0000000..5cd30cd --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile2.cpp @@ -0,0 +1,110 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile2(profile& p) +{ + // Profile Name + p.m_profile_name = L"Fonetic"; + + // Lang Name + p.m_lang_name[0] = L"Translit"; + p.m_lang_name[1] = L"Cyrillic"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"a", L"", bimap_direction::all_to_all), + lang_type_nc(L"A", L"", bimap_direction::all_to_all), + lang_type_nc(L"b", L"", bimap_direction::all_to_all), + lang_type_nc(L"B", L"", bimap_direction::all_to_all), + lang_type_nc(L"c", L"", bimap_direction::all_to_all), + lang_type_nc(L"C", L"", bimap_direction::all_to_all), + lang_type_nc(L"ch", L"", bimap_direction::all_to_all), + lang_type_nc(L"cH", L"", bimap_direction::left_to_right), + lang_type_nc(L"CH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ch", L"", bimap_direction::left_to_right), + lang_type_nc(L"d", L"", bimap_direction::all_to_all), + lang_type_nc(L"D", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::all_to_all), + lang_type_nc(L"E", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::right_to_left), + lang_type_nc(L"E", L"", bimap_direction::right_to_left), + lang_type_nc(L"e", L"", bimap_direction::right_to_left), + lang_type_nc(L"E", L"", bimap_direction::right_to_left), + lang_type_nc(L"f", L"", bimap_direction::all_to_all), + lang_type_nc(L"F", L"", bimap_direction::all_to_all), + lang_type_nc(L"g", L"", bimap_direction::all_to_all), + lang_type_nc(L"G", L"", bimap_direction::all_to_all), + lang_type_nc(L"h", L"", bimap_direction::all_to_all), + lang_type_nc(L"H", L"", bimap_direction::all_to_all), + lang_type_nc(L"i", L"", bimap_direction::all_to_all), + lang_type_nc(L"I", L"", bimap_direction::all_to_all), + lang_type_nc(L"i", L"", bimap_direction::right_to_left), + lang_type_nc(L"I", L"", bimap_direction::right_to_left), + lang_type_nc(L"j", L"", bimap_direction::left_to_right), + lang_type_nc(L"J", L"", bimap_direction::left_to_right), + lang_type_nc(L"k", L"", bimap_direction::all_to_all), + lang_type_nc(L"K", L"", bimap_direction::all_to_all), + lang_type_nc(L"l", L"", bimap_direction::all_to_all), + lang_type_nc(L"L", L"", bimap_direction::all_to_all), + lang_type_nc(L"m", L"", bimap_direction::all_to_all), + lang_type_nc(L"M", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::all_to_all), + lang_type_nc(L"N", L"", bimap_direction::all_to_all), + lang_type_nc(L"o", L"", bimap_direction::all_to_all), + lang_type_nc(L"O", L"", bimap_direction::all_to_all), + lang_type_nc(L"p", L"", bimap_direction::all_to_all), + lang_type_nc(L"P", L"", bimap_direction::all_to_all), + lang_type_nc(L"r", L"", bimap_direction::all_to_all), + lang_type_nc(L"R", L"", bimap_direction::all_to_all), + lang_type_nc(L"s", L"", bimap_direction::all_to_all), + lang_type_nc(L"S", L"", bimap_direction::all_to_all), + lang_type_nc(L"sh", L"", bimap_direction::all_to_all), + lang_type_nc(L"sH", L"", bimap_direction::left_to_right), + lang_type_nc(L"SH", L"", bimap_direction::all_to_all), + lang_type_nc(L"sch", L"", bimap_direction::all_to_all), + lang_type_nc(L"sCh", L"", bimap_direction::left_to_right), + lang_type_nc(L"scH", L"", bimap_direction::left_to_right), + lang_type_nc(L"sCH", L"", bimap_direction::left_to_right), + lang_type_nc(L"Sch", L"", bimap_direction::left_to_right), + lang_type_nc(L"SCh", L"", bimap_direction::left_to_right), + lang_type_nc(L"ScH", L"", bimap_direction::left_to_right), + lang_type_nc(L"SCH", L"", bimap_direction::all_to_all), + lang_type_nc(L"t", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::all_to_all), + lang_type_nc(L"tc", L"", bimap_direction::left_to_right), + lang_type_nc(L"tC", L"", bimap_direction::left_to_right), + lang_type_nc(L"Tc", L"", bimap_direction::left_to_right), + lang_type_nc(L"TC", L"", bimap_direction::left_to_right), + lang_type_nc(L"u", L"", bimap_direction::all_to_all), + lang_type_nc(L"U", L"", bimap_direction::all_to_all), + lang_type_nc(L"v", L"", bimap_direction::all_to_all), + lang_type_nc(L"V", L"", bimap_direction::all_to_all), + lang_type_nc(L"w", L"", bimap_direction::left_to_right), + lang_type_nc(L"W", L"", bimap_direction::left_to_right), + lang_type_nc(L"x", L"", bimap_direction::left_to_right), + lang_type_nc(L"X", L"", bimap_direction::left_to_right), + lang_type_nc(L"y", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y", L"", bimap_direction::all_to_all), + lang_type_nc(L"ya", L"", bimap_direction::all_to_all), + lang_type_nc(L"yA", L"", bimap_direction::left_to_right), + lang_type_nc(L"YA", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ya", L"", bimap_direction::left_to_right), + lang_type_nc(L"yu", L"", bimap_direction::all_to_all), + lang_type_nc(L"yU", L"", bimap_direction::left_to_right), + lang_type_nc(L"YU", L"", bimap_direction::all_to_all), + lang_type_nc(L"Yu", L"", bimap_direction::left_to_right), + lang_type_nc(L"z", L"", bimap_direction::all_to_all), + lang_type_nc(L"Z", L"", bimap_direction::all_to_all), + lang_type_nc(L"zh", L"", bimap_direction::all_to_all), + lang_type_nc(L"zH", L"", bimap_direction::left_to_right), + lang_type_nc(L"ZH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Zh", L"", bimap_direction::left_to_right), + lang_type_nc(L"'", L"", bimap_direction::all_to_all), + lang_type_nc(L"'", L"", bimap_direction::right_to_left), + lang_type_nc(L"'", L"", bimap_direction::right_to_left), + lang_type_nc(L"'", L"", bimap_direction::right_to_left), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile3.cpp b/legacy/Transliterator_7a/profiles_profile3.cpp new file mode 100644 index 0000000..e18c067 --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile3.cpp @@ -0,0 +1,111 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile3(profile& p) +{ + // Profile Name + p.m_profile_name = L"GOST"; + + // Lang Name + p.m_lang_name[0] = L"Translit"; + p.m_lang_name[1] = L"Cyrillic"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"a", L"", bimap_direction::all_to_all), + lang_type_nc(L"A", L"", bimap_direction::all_to_all), + lang_type_nc(L"b", L"", bimap_direction::all_to_all), + lang_type_nc(L"B", L"", bimap_direction::all_to_all), + lang_type_nc(L"v", L"", bimap_direction::all_to_all), + lang_type_nc(L"V", L"", bimap_direction::all_to_all), + lang_type_nc(L"w", L"", bimap_direction::left_to_right), + lang_type_nc(L"W", L"", bimap_direction::left_to_right), + lang_type_nc(L"g", L"", bimap_direction::all_to_all), + lang_type_nc(L"G", L"", bimap_direction::all_to_all), + lang_type_nc(L"d", L"", bimap_direction::all_to_all), + lang_type_nc(L"D", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::all_to_all), + lang_type_nc(L"E", L"", bimap_direction::all_to_all), + lang_type_nc(L"jo", L"", bimap_direction::all_to_all), + lang_type_nc(L"jO", L"", bimap_direction::left_to_right), + lang_type_nc(L"JO", L"", bimap_direction::all_to_all), + lang_type_nc(L"Jo", L"", bimap_direction::left_to_right), + lang_type_nc(L"zh", L"", bimap_direction::all_to_all), + lang_type_nc(L"zH", L"", bimap_direction::left_to_right), + lang_type_nc(L"ZH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Zh", L"", bimap_direction::left_to_right), + lang_type_nc(L"z", L"", bimap_direction::all_to_all), + lang_type_nc(L"Z", L"", bimap_direction::all_to_all), + lang_type_nc(L"i", L"", bimap_direction::all_to_all), + lang_type_nc(L"I", L"", bimap_direction::all_to_all), + lang_type_nc(L"jj", L"", bimap_direction::all_to_all), + lang_type_nc(L"jJ", L"", bimap_direction::left_to_right), + lang_type_nc(L"JJ", L"", bimap_direction::all_to_all), + lang_type_nc(L"Jj", L"", bimap_direction::left_to_right), + lang_type_nc(L"k", L"", bimap_direction::all_to_all), + lang_type_nc(L"K", L"", bimap_direction::all_to_all), + lang_type_nc(L"l", L"", bimap_direction::all_to_all), + lang_type_nc(L"L", L"", bimap_direction::all_to_all), + lang_type_nc(L"m", L"", bimap_direction::all_to_all), + lang_type_nc(L"M", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::all_to_all), + lang_type_nc(L"N", L"", bimap_direction::all_to_all), + lang_type_nc(L"o", L"", bimap_direction::all_to_all), + lang_type_nc(L"O", L"", bimap_direction::all_to_all), + lang_type_nc(L"p", L"", bimap_direction::all_to_all), + lang_type_nc(L"P", L"", bimap_direction::all_to_all), + lang_type_nc(L"r", L"", bimap_direction::all_to_all), + lang_type_nc(L"R", L"", bimap_direction::all_to_all), + lang_type_nc(L"s", L"", bimap_direction::all_to_all), + lang_type_nc(L"S", L"", bimap_direction::all_to_all), + lang_type_nc(L"t", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::all_to_all), + lang_type_nc(L"u", L"", bimap_direction::all_to_all), + lang_type_nc(L"U", L"", bimap_direction::all_to_all), + lang_type_nc(L"f", L"", bimap_direction::all_to_all), + lang_type_nc(L"F", L"", bimap_direction::all_to_all), + lang_type_nc(L"kh", L"", bimap_direction::all_to_all), + lang_type_nc(L"kH", L"", bimap_direction::left_to_right), + lang_type_nc(L"KH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Kh", L"", bimap_direction::left_to_right), + lang_type_nc(L"c", L"", bimap_direction::all_to_all), + lang_type_nc(L"C", L"", bimap_direction::all_to_all), + lang_type_nc(L"ch", L"", bimap_direction::all_to_all), + lang_type_nc(L"cH", L"", bimap_direction::left_to_right), + lang_type_nc(L"CH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ch", L"", bimap_direction::left_to_right), + lang_type_nc(L"sh", L"", bimap_direction::all_to_all), + lang_type_nc(L"sH", L"", bimap_direction::left_to_right), + lang_type_nc(L"SH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Sh", L"", bimap_direction::left_to_right), + lang_type_nc(L"shh", L"", bimap_direction::all_to_all), + lang_type_nc(L"shH", L"", bimap_direction::left_to_right), + lang_type_nc(L"sHh", L"", bimap_direction::left_to_right), + lang_type_nc(L"sHH", L"", bimap_direction::left_to_right), + lang_type_nc(L"SHH", L"", bimap_direction::all_to_all), + lang_type_nc(L"SHh", L"", bimap_direction::left_to_right), + lang_type_nc(L"ShH", L"", bimap_direction::left_to_right), + lang_type_nc(L"Shh", L"", bimap_direction::left_to_right), + lang_type_nc(L"\"", L"", bimap_direction::all_to_all), + lang_type_nc(L"\"\"", L"", bimap_direction::all_to_all), + lang_type_nc(L"y", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y", L"", bimap_direction::all_to_all), + lang_type_nc(L"'", L"", bimap_direction::all_to_all), + lang_type_nc(L"''", L"", bimap_direction::all_to_all), + lang_type_nc(L"eh", L"", bimap_direction::all_to_all), + lang_type_nc(L"eH", L"", bimap_direction::left_to_right), + lang_type_nc(L"EH", L"", bimap_direction::all_to_all), + lang_type_nc(L"Eh", L"", bimap_direction::left_to_right), + lang_type_nc(L"ju", L"", bimap_direction::all_to_all), + lang_type_nc(L"jU", L"", bimap_direction::left_to_right), + lang_type_nc(L"JU", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ju", L"", bimap_direction::left_to_right), + lang_type_nc(L"ja", L"", bimap_direction::all_to_all), + lang_type_nc(L"jA", L"", bimap_direction::left_to_right), + lang_type_nc(L"JA", L"", bimap_direction::all_to_all), + lang_type_nc(L"Ja", L"", bimap_direction::left_to_right), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile4.cpp b/legacy/Transliterator_7a/profiles_profile4.cpp new file mode 100644 index 0000000..99583b6 --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile4.cpp @@ -0,0 +1,94 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile4(profile& p) +{ + // Profile Name + p.m_profile_name = L"Symbols"; + + // Lang Name + p.m_lang_name[0] = L"Symbols"; + p.m_lang_name[1] = L"Cyrillic"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"a", L"", bimap_direction::all_to_all), + lang_type_nc(L"A", L"", bimap_direction::all_to_all), + lang_type_nc(L"6", L"", bimap_direction::all_to_all), + lang_type_nc(L"6", L"", bimap_direction::right_to_left), + lang_type_nc(L"B", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::right_to_left), + lang_type_nc(L"r", L"", bimap_direction::all_to_all), + lang_type_nc(L"r", L"", bimap_direction::right_to_left), + lang_type_nc(L"D", L"", bimap_direction::all_to_all), + lang_type_nc(L"D", L"", bimap_direction::right_to_left), + lang_type_nc(L"e", L"", bimap_direction::all_to_all), + lang_type_nc(L"E", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::right_to_left), + lang_type_nc(L"E", L"", bimap_direction::right_to_left), + lang_type_nc(L">|<", L"", bimap_direction::all_to_all), + lang_type_nc(L"}|{", L"", bimap_direction::all_to_all), + lang_type_nc(L">-|-<", L"", bimap_direction::left_to_right), + lang_type_nc(L"}-|-{", L"", bimap_direction::left_to_right), + lang_type_nc(L"3", L"", bimap_direction::all_to_all), + lang_type_nc(L"3", L"", bimap_direction::right_to_left), + lang_type_nc(L"u", L"", bimap_direction::all_to_all), + lang_type_nc(L"U", L"", bimap_direction::right_to_left), + lang_type_nc(L"u'", L"", bimap_direction::all_to_all), + lang_type_nc(L"U'", L"", bimap_direction::all_to_all), + lang_type_nc(L"u`", L"", bimap_direction::left_to_right), + lang_type_nc(L"U`", L"", bimap_direction::left_to_right), + lang_type_nc(L"k", L"", bimap_direction::all_to_all), + lang_type_nc(L"K", L"", bimap_direction::all_to_all), + lang_type_nc(L"/\\", L"", bimap_direction::all_to_all), + lang_type_nc(L"JI", L"", bimap_direction::all_to_all), + lang_type_nc(L"m", L"", bimap_direction::all_to_all), + lang_type_nc(L"M", L"", bimap_direction::all_to_all), + lang_type_nc(L"H", L"", bimap_direction::all_to_all), + lang_type_nc(L"H", L"", bimap_direction::right_to_left), + lang_type_nc(L"o", L"", bimap_direction::all_to_all), + lang_type_nc(L"O", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::right_to_left), + lang_type_nc(L"p", L"", bimap_direction::all_to_all), + lang_type_nc(L"P", L"", bimap_direction::all_to_all), + lang_type_nc(L"c", L"", bimap_direction::all_to_all), + lang_type_nc(L"C", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::right_to_left), + lang_type_nc(L"y", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y", L"", bimap_direction::all_to_all), + lang_type_nc(L"f", L"", bimap_direction::left_to_right), + lang_type_nc(L"F", L"", bimap_direction::left_to_right), + lang_type_nc(L"(|)", L"", bimap_direction::left_to_right), + lang_type_nc(L"(I)", L"", bimap_direction::left_to_right), + lang_type_nc(L"<|>", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"x", L"", bimap_direction::all_to_all), + lang_type_nc(L"X", L"", bimap_direction::all_to_all), + lang_type_nc(L"L|", L"", bimap_direction::all_to_all), + lang_type_nc(L"L|", L"", bimap_direction::right_to_left), + lang_type_nc(L"4", L"", bimap_direction::all_to_all), + lang_type_nc(L"4", L"", bimap_direction::right_to_left), + lang_type_nc(L"LLI", L"", bimap_direction::all_to_all), + lang_type_nc(L"w", L"", bimap_direction::all_to_all), + lang_type_nc(L"LL|", L"", bimap_direction::all_to_all), + lang_type_nc(L"LL|", L"", bimap_direction::right_to_left), + lang_type_nc(L"\\", L"", bimap_direction::all_to_all), + lang_type_nc(L"\\\\", L"", bimap_direction::right_to_left), + lang_type_nc(L"bI", L"", bimap_direction::all_to_all), + lang_type_nc(L"bI", L"", bimap_direction::right_to_left), + lang_type_nc(L"b", L"", bimap_direction::all_to_all), + lang_type_nc(L"b", L"", bimap_direction::right_to_left), + lang_type_nc(L"e", L"", bimap_direction::right_to_left), + lang_type_nc(L"E", L"", bimap_direction::right_to_left), + lang_type_nc(L"IO", L"", bimap_direction::right_to_left), + lang_type_nc(L"I-O", L"", bimap_direction::left_to_right), + lang_type_nc(L"I-O", L"", bimap_direction::right_to_left), + lang_type_nc(L"9I", L"", bimap_direction::all_to_all), + lang_type_nc(L"9I", L"", bimap_direction::right_to_left), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile5.cpp b/legacy/Transliterator_7a/profiles_profile5.cpp new file mode 100644 index 0000000..4dc132e --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile5.cpp @@ -0,0 +1,93 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile5(profile& p) +{ + // Profile Name + p.m_profile_name = L"QWERTY"; + + // Lang Name + p.m_lang_name[0] = L"QWERTY"; + p.m_lang_name[1] = L""; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"`", L"", bimap_direction::all_to_all), + lang_type_nc(L"~", L"", bimap_direction::all_to_all), + lang_type_nc(L"@", L"\"", bimap_direction::all_to_all), + lang_type_nc(L"#", L"", bimap_direction::all_to_all), + lang_type_nc(L"$", L";", bimap_direction::all_to_all), + lang_type_nc(L"^", L":", bimap_direction::all_to_all), + lang_type_nc(L"&", L"?", bimap_direction::all_to_all), + lang_type_nc(L"|", L"/", bimap_direction::all_to_all), + lang_type_nc(L"q", L"", bimap_direction::all_to_all), + lang_type_nc(L"w", L"", bimap_direction::all_to_all), + lang_type_nc(L"e", L"", bimap_direction::all_to_all), + lang_type_nc(L"r", L"", bimap_direction::all_to_all), + lang_type_nc(L"t", L"", bimap_direction::all_to_all), + lang_type_nc(L"y", L"", bimap_direction::all_to_all), + lang_type_nc(L"u", L"", bimap_direction::all_to_all), + lang_type_nc(L"i", L"", bimap_direction::all_to_all), + lang_type_nc(L"o", L"", bimap_direction::all_to_all), + lang_type_nc(L"p", L"", bimap_direction::all_to_all), + lang_type_nc(L"[", L"", bimap_direction::all_to_all), + lang_type_nc(L"{", L"", bimap_direction::all_to_all), + lang_type_nc(L"]", L"", bimap_direction::all_to_all), + lang_type_nc(L"}", L"", bimap_direction::all_to_all), + lang_type_nc(L"a", L"", bimap_direction::all_to_all), + lang_type_nc(L"s", L"", bimap_direction::all_to_all), + lang_type_nc(L"d", L"", bimap_direction::all_to_all), + lang_type_nc(L"f", L"", bimap_direction::all_to_all), + lang_type_nc(L"g", L"", bimap_direction::all_to_all), + lang_type_nc(L"h", L"", bimap_direction::all_to_all), + lang_type_nc(L"j", L"", bimap_direction::all_to_all), + lang_type_nc(L"k", L"", bimap_direction::all_to_all), + lang_type_nc(L"l", L"", bimap_direction::all_to_all), + lang_type_nc(L";", L"", bimap_direction::all_to_all), + lang_type_nc(L":", L"", bimap_direction::all_to_all), + lang_type_nc(L"'", L"", bimap_direction::all_to_all), + lang_type_nc(L"\"", L"", bimap_direction::all_to_all), + lang_type_nc(L"z", L"", bimap_direction::all_to_all), + lang_type_nc(L"x", L"", bimap_direction::all_to_all), + lang_type_nc(L"c", L"", bimap_direction::all_to_all), + lang_type_nc(L"v", L"", bimap_direction::all_to_all), + lang_type_nc(L"b", L"", bimap_direction::all_to_all), + lang_type_nc(L"n", L"", bimap_direction::all_to_all), + lang_type_nc(L"m", L"", bimap_direction::all_to_all), + lang_type_nc(L",", L"", bimap_direction::all_to_all), + lang_type_nc(L"<", L"", bimap_direction::all_to_all), + lang_type_nc(L".", L"", bimap_direction::all_to_all), + lang_type_nc(L">", L"", bimap_direction::all_to_all), + lang_type_nc(L"/", L".", bimap_direction::all_to_all), + lang_type_nc(L"?", L",", bimap_direction::all_to_all), + lang_type_nc(L"Q", L"", bimap_direction::all_to_all), + lang_type_nc(L"W", L"", bimap_direction::all_to_all), + lang_type_nc(L"E", L"", bimap_direction::all_to_all), + lang_type_nc(L"R", L"", bimap_direction::all_to_all), + lang_type_nc(L"T", L"", bimap_direction::all_to_all), + lang_type_nc(L"Y", L"", bimap_direction::all_to_all), + lang_type_nc(L"U", L"", bimap_direction::all_to_all), + lang_type_nc(L"I", L"", bimap_direction::all_to_all), + lang_type_nc(L"O", L"", bimap_direction::all_to_all), + lang_type_nc(L"P", L"", bimap_direction::all_to_all), + lang_type_nc(L"A", L"", bimap_direction::all_to_all), + lang_type_nc(L"S", L"", bimap_direction::all_to_all), + lang_type_nc(L"D", L"", bimap_direction::all_to_all), + lang_type_nc(L"F", L"", bimap_direction::all_to_all), + lang_type_nc(L"G", L"", bimap_direction::all_to_all), + lang_type_nc(L"H", L"", bimap_direction::all_to_all), + lang_type_nc(L"J", L"", bimap_direction::all_to_all), + lang_type_nc(L"K", L"", bimap_direction::all_to_all), + lang_type_nc(L"L", L"", bimap_direction::all_to_all), + lang_type_nc(L"Z", L"", bimap_direction::all_to_all), + lang_type_nc(L"X", L"", bimap_direction::all_to_all), + lang_type_nc(L"C", L"", bimap_direction::all_to_all), + lang_type_nc(L"V", L"", bimap_direction::all_to_all), + lang_type_nc(L"B", L"", bimap_direction::all_to_all), + lang_type_nc(L"N", L"", bimap_direction::all_to_all), + lang_type_nc(L"M", L"", bimap_direction::all_to_all), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile6.cpp b/legacy/Transliterator_7a/profiles_profile6.cpp new file mode 100644 index 0000000..95cb20b --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile6.cpp @@ -0,0 +1,91 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile6(profile& p) +{ + // Profile Name + p.m_profile_name = L"Dos <-> Win"; + + // Lang Name + p.m_lang_name[0] = L"DOS"; + p.m_lang_name[1] = L"Win"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"\xA0", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile7.cpp b/legacy/Transliterator_7a/profiles_profile7.cpp new file mode 100644 index 0000000..be8477b --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile7.cpp @@ -0,0 +1,85 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile7(profile& p) +{ + // Profile Name + p.m_profile_name = L"KOI8-R <-> Win"; + + // Lang Name + p.m_lang_name[0] = L"KOI8-R"; + p.m_lang_name[1] = L"Win"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + lang_type_nc(L"", L"", bimap_direction::all_to_all), + //lang_type_nc(L"", L"", bimap_direction::all_to_all), + //lang_type_nc(L"", L"", bimap_direction::all_to_all), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/profiles_profile8.cpp b/legacy/Transliterator_7a/profiles_profile8.cpp new file mode 100644 index 0000000..b06ee7c --- /dev/null +++ b/legacy/Transliterator_7a/profiles_profile8.cpp @@ -0,0 +1,55 @@ +#include "stdafx.hpp" +#include "profiles.hpp" + +void profiles::init_profile8(profile& p) +{ + // Profile Name + p.m_profile_name = L"Heb <-> Cyr"; + + // Lang Name + p.m_lang_name[0] = L"Hebrew"; + p.m_lang_name[1] = L"Cyrillic"; + + // Translation + static const lang_type_nc translation[] = + { + lang_type_nc(L"\x5d0", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d1", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d2", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d3", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d4", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d5", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d6", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d7", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d8", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5d9", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5da", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5db", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5dc", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5dd", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5de", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5df", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e0", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e1", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e2", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e3", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e4", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e5", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e6", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e7", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e8", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5e9", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x5ea", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xf894", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xf895", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x200e", L"", bimap_direction::all_to_all), + lang_type_nc(L"\x200f", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xf896", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xb8", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xb3", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xbf", L"", bimap_direction::all_to_all), + lang_type_nc(L"\xa2", L"", bimap_direction::all_to_all), + }; + + p.m_translation.insert(translation, end(translation)); +} \ No newline at end of file diff --git a/legacy/Transliterator_7a/res/Transliterator.ico b/legacy/Transliterator_7a/res/Transliterator.ico new file mode 100644 index 0000000..eeb16bf Binary files /dev/null and b/legacy/Transliterator_7a/res/Transliterator.ico differ diff --git a/legacy/Transliterator_7a/resource.hpp b/legacy/Transliterator_7a/resource.hpp new file mode 100644 index 0000000..e1c5426 --- /dev/null +++ b/legacy/Transliterator_7a/resource.hpp @@ -0,0 +1,62 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Transliterator.rc +// +#define IDR_TRANSLITERATOR 128 +#define IDD_PROFILE 200 +#define IDD_OPTIONS_GENERAL 201 +#define IDD_OPTIONS_VIEW 202 +#define IDD_OPTIONS_HOTKEYS 203 +#define IDD_TOOLS_FILES_TRANSLATION 204 +#define IDD_HELP_USAGE 205 +#define IDD_HELP_ABOUT 206 +#define IDC_RETOP 1000 +#define IDC_REBOTTOM 1001 +#define IDC_GRPTOP 1002 +#define IDC_GRPBOTTOM 1003 +#define IDC_GRPPART 1004 +#define IDC_CMBSAVETEXT 1005 +#define IDC_RELANGTOP 1006 +#define IDC_RELANGBOTTOM 1007 +#define IDC_LBLLANGTOP 1008 +#define IDC_LBLLANGBOTTOM 1009 +#define IDC_GRPSAVETEXT 1010 +#define IDC_GRPLANGUAGE 1011 +#define IDC_CMBLANGUAGE 1012 +#define IDC_CMBSTARTUP 1013 +#define IDC_GRPSTARTUP 1014 +#define IDC_BTNAPPLY 1015 +#define IDC_BTNRESTORE 1016 +#define IDC_GRPCONTROLS 1018 +#define IDC_GRPPLACEMENT 1019 +#define IDC_CHKTASKBAR 1020 +#define IDC_CHKTRAY 1021 +#define IDC_CMBPLACEMENT 1022 +#define IDC_CHKWRAPTEXT 1023 +#define IDC_CHKSCROLLTEXT 1024 +#define IDC_CHKSWITCHCONTROLS 1025 +#define ID_FILE_EXIT 32774 +#define ID_FILE_OPEN_TOP 32775 +#define ID_FILE_OPEN_BOTTOM 32776 +#define ID_FILE_SAVE_TOP 32777 +#define ID_FILE_SAVE_BOTTOM 32778 +#define ID_PROFILE_FIRST 32780 +#define ID_PROFILE_LAST 32799 +#define ID_OPTIONS_GENERAL 32800 +#define ID_OPTIONS_VIEW 32801 +#define ID_OPTIONS_HOTKEYS 32802 +#define ID_TOOLS_FILES_TRANSLATION 32803 +#define ID_HELP_USAGE 32804 +#define ID_HELP_ABOUT 32805 +#define ID_PROFILE_ 32806 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 207 +#define _APS_NEXT_COMMAND_VALUE 32807 +#define _APS_NEXT_CONTROL_VALUE 1026 +#define _APS_NEXT_SYMED_VALUE 129 +#endif +#endif diff --git a/legacy/Transliterator_7a/settings.cpp b/legacy/Transliterator_7a/settings.cpp new file mode 100644 index 0000000..7b96868 --- /dev/null +++ b/legacy/Transliterator_7a/settings.cpp @@ -0,0 +1,54 @@ +#include "stdafx.hpp" +#include "settings.hpp" + +settings& settings::instance() +{ + static settings s; + return s; +} + +void settings::reset() +{ + // Transliterator dialog placement + static const WINDOWPLACEMENT default_placement = + { + sizeof(placement), + 0, + SW_SHOWNORMAL + }; + m_window_placement = default_placement; + + // Profile details + m_profile_details = false; + + // Current profile + m_profile = 0; + + // Language + m_language = language_english; + + // StartUp + // TODO m_startup = startup_hidden; + m_startup = startup_no; + + // Save Text + m_save_text = save_text_save; + + // Task Bar + m_task_bar = true; + + // Tray + m_tray = true; + + // Placement + m_placement = placement_normal; + + // Wrap Text + m_wrap_text = false; + + // Scroll Text + m_scroll_text = true; + + // Switch Controls + m_switch_controls = false; +} diff --git a/legacy/Transliterator_7a/settings.hpp b/legacy/Transliterator_7a/settings.hpp new file mode 100644 index 0000000..a8f4e8e --- /dev/null +++ b/legacy/Transliterator_7a/settings.hpp @@ -0,0 +1,78 @@ +#ifndef TRANSLITERATOR_SETTINGS_H +#define TRANSLITERATOR_SETTINGS_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "profile.hpp" +#include "language.hpp" + +struct settings +{ + static settings& instance(); + + void reset(); + + // Window Placement + WINDOWPLACEMENT m_window_placement; + + // Profile details + bool m_profile_details; + + // Current profile + size_t m_profile; + + // Languages + enum languages + { + language_english, + language_russian, + language_translit, + language_count + }; + int m_language; + + // Start Up + enum startup + { + startup_no, + startup_shown, + startup_hidden + }; + int m_startup; + + // Save Text + enum save_text + { + save_text_no, + save_text_save + }; + int m_save_text; + + // Task Bar + BOOL m_task_bar; + + // Tray + BOOL m_tray; + + // Placement + enum placement + { + placement_normal, + placement_top, + placement_bottom, + }; + int m_placement; + + // Wrap Text + BOOL m_wrap_text; + + // Scroll Text + BOOL m_scroll_text; + + // Switch Controls + BOOL m_switch_controls; +}; + +#endif // TRANSLITERATOR_SETTINGS_H diff --git a/legacy/Transliterator_7a/settings_saver.cpp b/legacy/Transliterator_7a/settings_saver.cpp new file mode 100644 index 0000000..ddb3505 --- /dev/null +++ b/legacy/Transliterator_7a/settings_saver.cpp @@ -0,0 +1,183 @@ +#include "stdafx.hpp" +#include "settings_saver.hpp" +#include "settings.hpp" +#include "profiles.hpp" +#include "text.hpp" + +// Key +const HKEY settings_saver::s_root_key(HKEY_CURRENT_USER); + +const lang_tstring settings_saver::s_root_key_path(_T("Software\\NN")); +const lang_tstring settings_saver::s_program_key_path(_T("Transliterator\\7.0")); +const lang_tstring settings_saver::s_run_path( + _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run")); + +// Value +const lang_tstring settings_saver::s_settings_value(_T("Settings")); +const array settings_saver::s_text_value = +{ + lang_tstring(_T("Top")), + lang_tstring(_T("Bottom")), +}; +const lang_tstring settings_saver::s_run_value(_T("Transliterator")); + +// More +const lang_tstring settings_saver::s_load_hidden(_T(" -h")); + +settings_saver::settings_saver() +{ + // Initialize key + m_root_key.Create(s_root_key, s_root_key_path.c_str()); +} + +settings_saver& settings_saver::instance() +{ + static settings_saver s; + return s; +} + +bool settings_saver::load() +{ + // Initialize key + m_program_key.Open(m_root_key, s_program_key_path.c_str()); + + load_settings(); + + // Default language + default_language::set(language::s_languages[settings::instance().m_language]); + + load_text(); + load_profiles(); + + return true; +} + +void settings_saver::load_settings() +{ + settings& rsettings = settings::instance(); + + // Load settings + if(m_program_key != NULL) + { + ULONG settings_size = sizeof(settings); + LONG res = m_program_key.QueryBinaryValue(s_settings_value.c_str(), + &rsettings, + &settings_size); + + // Check result + if(res == ERROR_SUCCESS && settings_size == sizeof(settings)) + return; + } + + // Reset + rsettings.reset(); +} + +void settings_saver::load_text() +{ + // Load text + if(m_program_key == NULL || + settings::instance().m_save_text == settings::save_text_no) + return; + + text& rtext = text::instance(); + text::text_type& t = rtext.get_text(); + + NN_UPTO_T(i, t.size()) + { + ULONG text_size = 0; + // Query size + if(m_program_key.QueryBinaryValue(s_text_value[i].c_str(), + NULL, + &text_size) != ERROR_SUCCESS) + continue; + + // Resize + t[i].resize(text_size / sizeof(lang_char) + 1); + + // Query value + if(m_program_key.QueryBinaryValue(s_text_value[i].c_str(), + &t[i][0], + &text_size) != ERROR_SUCCESS) + continue; + + // Set '\0' at the end + t[i][t[i].size() - 1] = 0; + } +} + +void settings_saver::load_profiles() +{ + // Default profiles. + profiles::instance().reset(); + + // TODO: Load additional profiles +} + +void settings_saver::save() +{ + // Prepare registry keys. + // Delete all values + m_root_key.RecurseDeleteKey(s_program_key_path.c_str()); + + // Create new key + m_program_key.Create(m_root_key, s_program_key_path.c_str()); + if(m_program_key == NULL) + { + //show_error() + MessageBox(NULL, "Cannot save settings", "Transliterator", MB_OK); + return; + } + + save_settings(); + save_text(); +} + +void settings_saver::save_settings() +{ + settings& rsettings = settings::instance(); + + // Set settings + m_program_key.SetBinaryValue(s_settings_value.c_str(), + &rsettings, + sizeof(settings)); + + // Run + CRegKey run_key; + run_key.Create(s_root_key, s_run_path.c_str()); + if(run_key == NULL) + return; + + if(rsettings.m_startup == settings::startup_no) + // Delete if we don't want to load + run_key.DeleteValue(s_run_value.c_str()); + else + { + // Get module path + array module_path; + GetModuleFileName(module_instance(), &module_path[0], module_path.size()); + + // Prepare string + lang_tstring run_value(&module_path[0]); + if(rsettings.m_startup == settings::startup_hidden) + run_value += s_load_hidden; + + // Set value + run_key.SetStringValue(s_run_value.c_str(), run_value.c_str()); + } +} + +void settings_saver::save_text() +{ + if(settings::instance().m_save_text == settings::save_text_no) + return; + + text& rtext = text::instance(); + text::text_type& t = rtext.get_text(); + + NN_UPTO_T(i, t.size()) + if(t[i].size() != 0) + m_program_key.SetBinaryValue(s_text_value[i].c_str(), + &t[i][0], + t[i].size() * sizeof(lang_char)); +} diff --git a/legacy/Transliterator_7a/settings_saver.hpp b/legacy/Transliterator_7a/settings_saver.hpp new file mode 100644 index 0000000..efad6eb --- /dev/null +++ b/legacy/Transliterator_7a/settings_saver.hpp @@ -0,0 +1,55 @@ +#ifndef TRANSLITERATOR_SETTINGS_SAVER_H +#define TRANSLITERATOR_SETTINGS_SAVER_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "types.hpp" +#include "language.hpp" + +class settings_saver +{ +public: + settings_saver(); + + static settings_saver& instance(); + + // Load values + bool load(); + + // Save values + void save(); + +private: + void load_settings(); + void load_text(); + void load_profiles(); + + void save_settings(); + void save_text(); + + // HKEY_CURRENT_USER + static const HKEY s_root_key; + + // s_root_key\Software\NN + CRegKey m_root_key; + + // m_root_key\Transliterator\{Version} + CRegKey m_program_key; + + // Strings + static const lang_tstring s_root_key_path; + static const lang_tstring s_program_key_path; + static const lang_tstring s_run_path; + + // Values + static const lang_tstring s_settings_value; + static const array s_text_value; + static const lang_tstring s_run_value; + + // More + static const lang_tstring s_load_hidden; +}; + +#endif // TRANSLITERATOR_SETTINGS_SAVER_H diff --git a/legacy/Transliterator_7a/stdafx.cpp b/legacy/Transliterator_7a/stdafx.cpp new file mode 100644 index 0000000..7845e6a --- /dev/null +++ b/legacy/Transliterator_7a/stdafx.cpp @@ -0,0 +1 @@ +#include "stdafx.hpp" diff --git a/legacy/Transliterator_7a/stdafx.hpp b/legacy/Transliterator_7a/stdafx.hpp new file mode 100644 index 0000000..42f37b5 --- /dev/null +++ b/legacy/Transliterator_7a/stdafx.hpp @@ -0,0 +1,98 @@ +#ifndef TRANSLITERATOR_STDAFX_H +#define TRANSLITERATOR_STDAFX_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +// Windows API Definitions +#define WINVER 0x0400 +#define _WIN32_IE 0x0400 +#define _RICHEDIT_VER 0x0300 +#define NOMINMAX + +// CRT Definitions +#define _CRT_SECURE_NO_DEPRECATE +#define _SCL_SECURE_NO_DEPRECATE + +// ATL Definitions +#define _ATL_NO_AUTOMATIC_NAMESPACE +#define _ATL_NO_COM +#define _ATL_NO_HOSTING +#define _ATL_NO_OLD_NAMES + +// WTL Definitions +#define _WTL_NO_CSTRING +#define _WTL_NO_WTYPES +#define _WTL_NO_AUTOMATIC_NAMESPACE +#define _WTL_NEW_PAGE_NOTIFY_HANDLERS + +// STL Includes +#include +#include +#include +#include +#include +#include + +// Using for WTL +using std::min; +using std::max; + +// ATL Includes +#include +#include +#include +#include + +// WTL Includes +#include +extern WTL::CAppModule _Module; +#include +#include +#include +#include +#include +#include +#include + +// boost Includes +#pragma warning(push) +#pragma warning(disable:4510) // default constructor could not be generated +#pragma warning(disable:4610) // class can never be instantiated - user defined constructor required +#include +#pragma warning(pop) +#include +#include + +// nn Includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Debug Information +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#endif // _DEBUG + +using namespace ATL; +using namespace WTL; +using namespace std; +using namespace boost; +using namespace nn; + +#endif // TRANSLITERATOR_STDAFX_H diff --git a/legacy/Transliterator_7a/text.cpp b/legacy/Transliterator_7a/text.cpp new file mode 100644 index 0000000..1c40eb2 --- /dev/null +++ b/legacy/Transliterator_7a/text.cpp @@ -0,0 +1,13 @@ +#include "stdafx.hpp" +#include "text.hpp" + +text& text::instance() +{ + static text s; + return s; +} + +text::text_type& text::get_text() +{ + return m_text; +} diff --git a/legacy/Transliterator_7a/text.hpp b/legacy/Transliterator_7a/text.hpp new file mode 100644 index 0000000..f49c3d2 --- /dev/null +++ b/legacy/Transliterator_7a/text.hpp @@ -0,0 +1,24 @@ +#ifndef TRANSLITERATOR_TEXT_H +#define TRANSLITERATOR_TEXT_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "types.hpp" +#include "language.hpp" + +class text +{ +public: + static text& instance(); + + typedef array, language::size> text_type; + text_type& get_text(); + +private: + // Text + text_type m_text; +}; + +#endif // TRANSLITERATOR_TEXT_H diff --git a/legacy/Transliterator_7a/tools_files_translation_page.cpp b/legacy/Transliterator_7a/tools_files_translation_page.cpp new file mode 100644 index 0000000..f6748b3 --- /dev/null +++ b/legacy/Transliterator_7a/tools_files_translation_page.cpp @@ -0,0 +1,10 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "tools_files_translation_page.hpp" + +LRESULT tools_files_translation_page::on_init_dialog(HWND /*wnd_focus*/, LPARAM /*lparam*/) +{ + page_impl_init(); + + return 0; +} diff --git a/legacy/Transliterator_7a/tools_files_translation_page.hpp b/legacy/Transliterator_7a/tools_files_translation_page.hpp new file mode 100644 index 0000000..b3f69d5 --- /dev/null +++ b/legacy/Transliterator_7a/tools_files_translation_page.hpp @@ -0,0 +1,26 @@ +#ifndef TRANSLITERATOR_FILES_TRANSLATION_PAGE_H +#define TRANSLITERATOR_FILES_TRANSLATION_PAGE_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" + +class tools_files_translation_page : public page_impl +{ +public: + enum { IDD = IDD_TOOLS_FILES_TRANSLATION }; + + // Message map + BEGIN_MSG_MAP(tools_files_translation_page) + MSG_WM_INITDIALOG(on_init_dialog) + + CHAIN_MSG_MAP(page_impl) + END_MSG_MAP() + +private: + LRESULT on_init_dialog(HWND wnd_focus, LPARAM lparam); +}; + +#endif // TRANSLITERATOR_FILES_TRANSLATION_PAGE_H diff --git a/legacy/Transliterator_7a/translation.cpp b/legacy/Transliterator_7a/translation.cpp new file mode 100644 index 0000000..907adcf --- /dev/null +++ b/legacy/Transliterator_7a/translation.cpp @@ -0,0 +1,107 @@ +#include "stdafx.hpp" +#include "translation.hpp" + +namespace translation +{ + +namespace +{ + +struct compare_length +{ + template + bool operator()(const T& left, const T& right) + { + return left.first.length() < right.first.length(); + } +}; + +template +size_t max_length(const T& c) +{ + return max_element(c.begin(), + c.end(), + compare_length())->first.length(); +} + +size_t max_length_translation(const profile& p, direction::type dir) +{ + return dir == direction::top_to_bottom ? + max_length(p.m_translation.left) : + max_length(p.m_translation.right); +} + +template +bool translation_impl_(const lang_char*& in, + lang_char*& out, + const Map& m, + size_t max_length) +{ + NN_DOWNFROM_T(length, max_length) + { + NN_FOREACH(Map::const_iterator, it, m) + { + // Compare + if(it->first.length() == length && + lang_string_traits::compare(in, it->first.c_str(), length) == 0) + { + copy(it->second->c_str(), + &it->second->c_str()[it->second->length() + 1], + out); + advance(out, it->second->length()); + advance(in, length); + + return true; + } + } + } + + return false; +} + +bool translation_impl(const lang_char*& in, + lang_char*& out, + direction::type dir, + const profile& p, + size_t max_length) +{ + if(*in == 0) + return true; + + if(dir == direction::top_to_bottom) + return translation_impl_(in, out, p.m_translation.left, max_length); + else + return translation_impl_(in, out, p.m_translation.right, max_length); +} + +} // anonymous namespace + +void translate(const lang_char* in, + lang_char* out, + direction::type dir, + const profile& p) +{ + if(*in != 0) + { + const size_t max_translation_length = max_length_translation(p, dir); + + while(*in != 0) + { + if(translation_impl(in, out, dir, p, max_translation_length)) + continue; + + if(*in != 0) + *out++ = *in++; + } + } + + // Set end + *out = 0; +} + +size_t size(size_t in_size, direction::type dir, const profile& p) +{ + return in_size * (1 + max_length_translation(p, dir)); +} + +} // namespace translation diff --git a/legacy/Transliterator_7a/translation.hpp b/legacy/Transliterator_7a/translation.hpp new file mode 100644 index 0000000..5a0012d --- /dev/null +++ b/legacy/Transliterator_7a/translation.hpp @@ -0,0 +1,20 @@ +#ifndef TRANSLITERATOR_TRANSLATION_H +#define TRANSLITERATOR_TRANSLATION_H + +#include "profile.hpp" +#include "types.hpp" +#include "direction.hpp" + +namespace translation +{ + +void translate(const lang_char* in, + lang_char* out, + direction::type dir, + const profile& p); + +size_t size(size_t in_size, direction::type dir, const profile& p); + +} // namespace translation + +#endif // TRANSLITERATOR_TRANSLATION_H diff --git a/legacy/Transliterator_7a/transliterator_dlg.cpp b/legacy/Transliterator_7a/transliterator_dlg.cpp new file mode 100644 index 0000000..26be60a --- /dev/null +++ b/legacy/Transliterator_7a/transliterator_dlg.cpp @@ -0,0 +1,362 @@ +#include "stdafx.hpp" +#include "resource.hpp" +#include "settings.hpp" +#include "profiles.hpp" +#include "settings_saver.hpp" +#include "profile_page.hpp" +#include "options_general_page.hpp" +#include "options_view_page.hpp" +#include "options_hotkeys_page.hpp" +#include "tools_files_translation_page.hpp" +#include "help_usage_page.hpp" +#include "help_about_page.hpp" +#include "transliterator_dlg.hpp" + +const LONG transliterator_dlg::s_right_size = 110; + +transliterator_dlg::transliterator_dlg() : m_page(0) +{ +} + +BOOL transliterator_dlg::OnIdle() +{ + if(m_page == page_profile) + { + CRichEditCtrl re = ::GetFocus(); + if(re.IsWindow() == TRUE) + { + // Selection + BOOL selection = re.GetSelectionType() != SEL_EMPTY ? TRUE : FALSE; + + // Text + BOOL text = re.GetTextLength() != 0 ? TRUE : FALSE; + + UIEnable(ID_EDIT_UNDO, re.CanUndo()); + UIEnable(ID_EDIT_REDO, re.CanRedo()); + UIEnable(ID_EDIT_CUT, selection); + UIEnable(ID_EDIT_COPY, selection); + UIEnable(ID_EDIT_PASTE, re.CanPaste()); + UIEnable(ID_EDIT_SELECT_ALL, text); + UIEnable(ID_EDIT_CLEAR, selection); + UIEnable(ID_EDIT_CLEAR_ALL, text); + } + } + else // Other window + { + NN_UPTO_TL(i, (ID_EDIT_CLEAR)(ID_EDIT_REDO + 1)) + UIEnable(i, FALSE); + } + + // Pages + // Clear all + NN_UPTO_TL(i, (ID_PROFILE_FIRST)(ID_HELP_ABOUT + 1)) + UISetCheck(i, FALSE); + // Check active + if(m_page == page_profile) + UISetCheck(ID_PROFILE_FIRST + settings::instance().m_profile, + TRUE); + else + // -1, because profile is 0 + UISetCheck(ID_OPTIONS_GENERAL + m_page - 1, TRUE); + + return FALSE; +} + +void transliterator_dlg::dialog_lang_language_changed() +{ + // Update pages + NN_FOREACH(pages_type::iterator, it, m_pages) + it->update_language_i(); + + // Update caption + update_caption(); +} + +void transliterator_dlg::init_size() +{ + // Minimum size + CRect rect; + GetWindowRect(&rect); + + m_min_size = rect.Size(); +} + +void transliterator_dlg::update_caption() +{ + static const lang_tstring separator(_T(" - ")); + + // Load caption + lang_tstring caption; + load_string_ex(_AtlBaseModule.GetResourceInstance(), + IDR_TRANSLITERATOR, + caption, + nn::default_language::get()); + + // Set text + caption += separator; + caption += m_pages[m_page].caption(); + SetWindowText(caption.c_str()); +} + +void transliterator_dlg::init_pages() +{ + // Create parts + m_pages.push_back(new profile_page()); + m_pages.push_back(new options_general_page()); + m_pages.push_back(new options_view_page()); + m_pages.push_back(new options_hotkeys_page()); + m_pages.push_back(new tools_files_translation_page()); + m_pages.push_back(new help_usage_page()); + m_pages.push_back(new help_about_page()); + + NN_FOREACH(pages_type::iterator, it, m_pages) + it->create(m_hWnd); +} + +void transliterator_dlg::update_layout() +{ + // Resize parts + CRect rect; + GetClientRect(&rect); + + NN_FOREACH(pages_type::iterator, it, m_pages) + it->get_base().MoveWindow(&rect); +} + +void transliterator_dlg::init_profile() +{ + static const tstring ctrl(_T("\tCtrl+")); + + CMenuHandle profile_menu( + CMenuHandle(GetMenu()).GetSubMenu(profile_menu_position)); + + // Remove dummy item + profile_menu.DeleteMenu(0, MF_BYPOSITION); + + NN_UPTO_T(i, profiles::instance().get_profiles_count()) + { + // Add menu item + profile_menu.AppendMenu(MF_BYCOMMAND, ID_PROFILE_FIRST + i); + + // Prepare string + tstring menu_string; + convert(profiles::instance().get_profile(i).m_profile_name, menu_string); + + if(i < profile_menu_count) + { + menu_string += ctrl; + menu_string += (i == 9 ? _T('0') : _T('1') + static_cast(i)); + } + + // Update translations + NN_FOREACH(translations::lang_to_translation::iterator, + it, + translations::text()) + it->second[static_cast(ID_PROFILE_FIRST + i)] = menu_string; + } +} + +void transliterator_dlg::init_accelerator() +{ + // Set Accelerators + set_accelerator(AtlLoadAccelerators(IDR_TRANSLITERATOR)); +} + +void transliterator_dlg::close() +{ + // Destroy parts + // Update parts settings + NN_FOREACH(pages_type::iterator, it, m_pages) + it->destroy_window(); + + // Save settings + settings_saver::instance().save(); + + // Destroy window + DestroyWindow(); + ::PostQuitMessage(0); +} + +void transliterator_dlg::set_page(size_t page) +{ + if(m_page == page) + return; + + // Hide + m_pages[m_page].get_base().ShowWindow(SW_HIDE); + + // Show + m_page = page; + m_pages[m_page].get_base().ShowWindow(SW_SHOW); + + // Update caption + update_caption(); +} + +// Message +LRESULT transliterator_dlg::on_close(void) +{ + close(); + return 0; +} + +LRESULT transliterator_dlg::on_get_min_max_info(LPMINMAXINFO min_max_info) +{ + min_max_info->ptMinTrackSize = m_min_size; + + return 0; +} + +LRESULT transliterator_dlg::on_hot_key(int /*id*/, UINT /*flags*/, UINT /*vk*/) +{ + + return 0; +} + +LRESULT transliterator_dlg::on_init_dialog(HWND /*wnd_focus*/, LPARAM /*lparam*/) +{ + // Load menu + SetMenu(AtlLoadMenu(IDR_TRANSLITERATOR)); + + // Minimum size + init_size(); + + // Icon + dialog_icon_init(IDR_TRANSLITERATOR); + + // Pages + init_pages(); + + // Profile + init_profile(); + + // Accelerator + init_accelerator(); + + // Language + dialog_lang_init(); + + // Show profile part + // Set other page so set_page will show the needed page + m_page = page_options_general; + set_page(page_profile); + + // UpdateUI + UIAddChildWindowContainer(m_hWnd); + + return 0; +} + + +LRESULT transliterator_dlg::on_size(UINT /*state*/, CSize /*size*/) +{ + update_layout(); + + return 0; +} + +LRESULT transliterator_dlg::on_sys_command(UINT cmd, CPoint /*pt*/) +{ + SetMsgHandled(FALSE); + + if(cmd == SC_CLOSE) + close(); + + return 0; +} + +LRESULT transliterator_dlg::on_query_end_session(UINT /*reserved*/, UINT /*logoff_option*/) +{ + + return TRUE; +} + +LRESULT transliterator_dlg::on_file_open_save(WORD /*notify_code*/, WORD id, HWND /*wnd_control*/) +{ + // Refer to page_profile + m_pages[page_profile].open_save(id == ID_FILE_OPEN_TOP || + id == ID_FILE_OPEN_BOTTOM, + id == ID_FILE_OPEN_TOP || + id == ID_FILE_SAVE_TOP); + + return 0; +} + +LRESULT transliterator_dlg::on_app_exit(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) +{ + close(); + return 0; +} + +LRESULT transliterator_dlg::on_edit_commands(WORD /*notify_code*/, WORD id, HWND /*wnd_control*/) +{ + if(m_page != page_profile) + return 0; + + CRichEditCtrl re = ::GetFocus(); + + switch(id) + { + case ID_EDIT_UNDO: re.Undo(); break; + case ID_EDIT_REDO: re.Redo(); break; + case ID_EDIT_CUT: re.Cut(); break; + case ID_EDIT_COPY: re.Copy(); break; + case ID_EDIT_PASTE: re.Paste(); break; + case ID_EDIT_SELECT_ALL: re.SetSelAll(); break; + case ID_EDIT_CLEAR_ALL: re.SetSel(0, -1); + case ID_EDIT_CLEAR: re.Clear(); break; + } + + return 0; +} + +LRESULT transliterator_dlg::on_profile(WORD /*notify_code*/, WORD id, HWND /*wnd_control*/) +{ + WORD nprofile = id - ID_PROFILE_FIRST; + + if(m_page != page_profile || + (nprofile < profiles::instance().get_profiles_count()) && // Check for accelerator + (nprofile != settings::instance().m_profile)) + { + // Change page + set_page(page_profile); + settings::instance().m_profile = nprofile; + + // Update profile + NN_FOREACH(pages_type::iterator, it, m_pages) + it->profile_changed(); + + // Profile has changed update caption + update_caption(); + } + + return 0; +} + +LRESULT transliterator_dlg::on_options(WORD /*notify_code*/, WORD id, HWND /*wnd_control*/) +{ + set_page(id - ID_OPTIONS_GENERAL + page_options_general); + + return 0; +} + +LRESULT transliterator_dlg::on_tools_files_translation(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) +{ + set_page(page_files_translation); + + return 0; +} + +LRESULT transliterator_dlg::on_help_usage(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) +{ + set_page(page_usage); + + return 0; +} + +LRESULT transliterator_dlg::on_help_about(WORD /*notify_code*/, WORD /*id*/, HWND /*wnd_control*/) +{ + set_page(page_about); + + return 0; +} diff --git a/legacy/Transliterator_7a/transliterator_dlg.hpp b/legacy/Transliterator_7a/transliterator_dlg.hpp new file mode 100644 index 0000000..7d5cc65 --- /dev/null +++ b/legacy/Transliterator_7a/transliterator_dlg.hpp @@ -0,0 +1,217 @@ +#ifndef TRANSLITERATOR_TRANSLITERATOR_DLG_H +#define TRANSLITERATOR_TRANSLITERATOR_DLG_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +#include "page_impl.hpp" +#include "i_dialog_impl_allocator.hpp" + +class transliterator_dlg : public CDialogImpl, + public CIdleHandler, + public CUpdateUI, + public dialog_icon, + public dialog_lang, + public message_filter_dlg_accel +{ +public: + enum { IDD = IDR_TRANSLITERATOR }; + + // Constructor + transliterator_dlg(); + + // Overrides + virtual BOOL OnIdle(); + + void dialog_lang_language_changed(); + + POINT GetButtonPos(int index) + { + CRect rcWnd; + GetWindowRect(&rcWnd); + rcWnd.OffsetRect(-rcWnd.TopLeft()); + + rcWnd.DeflateRect(2, 2); + + //locate the top right base point + CPoint pt(rcWnd.right, rcWnd.top); + pt.x -= 20; + pt.y += 2; + switch (index) + { + case 0://autohide pin + pt.x -= 16*3; + break; + } + + return pt; + } + + // UpdateUI map + BEGIN_UPDATE_UI_MAP(transliterator_dlg) + // File + // Edit + UPDATE_ELEMENT(ID_EDIT_UNDO, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_REDO, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CUT, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_COPY, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_PASTE, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_CLEAR_ALL, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_EDIT_SELECT_ALL, UPDUI_MENUPOPUP) + // Profile + UPDATE_ELEMENT(ID_PROFILE_FIRST, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 1, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 2, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 3, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 4, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 5, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 6, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 7, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 8, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 9, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 10, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 11, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 12, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 13, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 14, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 15, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 16, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 17, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_FIRST + 18, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_PROFILE_LAST, UPDUI_MENUPOPUP) + // Options + UPDATE_ELEMENT(ID_OPTIONS_GENERAL, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_OPTIONS_VIEW, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_OPTIONS_HOTKEYS, UPDUI_MENUPOPUP) + // Tools + UPDATE_ELEMENT(ID_TOOLS_FILES_TRANSLATION, UPDUI_MENUPOPUP) + // Help + UPDATE_ELEMENT(ID_HELP_USAGE, UPDUI_MENUPOPUP) + UPDATE_ELEMENT(ID_HELP_ABOUT, UPDUI_MENUPOPUP) + END_UPDATE_UI_MAP() + + // Message map + BEGIN_MSG_MAP(transliterator_dlg) + NN_MSGFILTER() + NN_IDLE() + + // Window Message + MSG_WM_CLOSE(on_close) + MSG_WM_GETMINMAXINFO(on_get_min_max_info) + MSG_WM_HOTKEY(on_hot_key) + MSG_WM_INITDIALOG(on_init_dialog) + MSG_WM_SIZE(on_size) + MSG_WM_SYSCOMMAND(on_sys_command) + MSG_WM_QUERYENDSESSION(on_query_end_session) + + // Command +#pragma warning(push) +#pragma warning(disable:4244) // 'argument' : conversion from 'int' to 'WORD', possible loss of data + COMMAND_ID_HANDLER_EX(ID_FILE_OPEN_TOP, on_file_open_save) + COMMAND_ID_HANDLER_EX(ID_FILE_OPEN_BOTTOM, on_file_open_save) + COMMAND_ID_HANDLER_EX(ID_FILE_SAVE_TOP, on_file_open_save) + COMMAND_ID_HANDLER_EX(ID_FILE_SAVE_BOTTOM, on_file_open_save) + COMMAND_ID_HANDLER_EX(ID_APP_EXIT, on_app_exit) + COMMAND_RANGE_HANDLER_EX(ID_EDIT_CLEAR, ID_EDIT_REDO, on_edit_commands) + COMMAND_RANGE_HANDLER_EX(ID_PROFILE_FIRST, ID_PROFILE_LAST, on_profile) + COMMAND_RANGE_HANDLER_EX(ID_OPTIONS_GENERAL, ID_OPTIONS_HOTKEYS, on_options) + COMMAND_ID_HANDLER_EX(ID_TOOLS_FILES_TRANSLATION, on_tools_files_translation) + COMMAND_ID_HANDLER_EX(ID_HELP_USAGE, on_help_usage) + COMMAND_ID_HANDLER_EX(ID_HELP_ABOUT, on_help_about) +#pragma warning(pop) + + // Chain Message Map base + CHAIN_MSG_MAP(CUpdateUI) + END_MSG_MAP() + +private: + // Functions + // Init size + void init_size(); + + // Caption + void update_caption(); + + // Parts + void init_pages(); + + // Layout + void update_layout(); + + // Profile + void init_profile(); + + // Accelerator + void init_accelerator(); + + // Close + void close(); + + // Set page + void set_page(size_t page); + + // Message functions + LRESULT on_close(void); + LRESULT on_get_min_max_info(LPMINMAXINFO min_max_info); + LRESULT on_hot_key(int id, UINT flags, UINT vk); + LRESULT on_init_dialog(HWND wnd_focus, LPARAM lparam); + LRESULT on_size(UINT state, CSize size); + LRESULT on_sys_command(UINT cmd, CPoint pt); + LRESULT on_query_end_session(UINT reserved, UINT logoff_option); + + LRESULT on_file_open_save(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_app_exit(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_edit_commands(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_profile(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_options(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_tools_files_translation(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_help_usage(WORD notify_code, WORD id, HWND wnd_control); + LRESULT on_help_about(WORD notify_code, WORD id, HWND wnd_control); + + // Variables + // Menu position + enum + { + file_menu_position, + edit_menu_position, + profile_menu_position, + options_menu_position, + help_menu_position + }; + + // Max items for accelerators + static const size_t profile_menu_count = 10; + + // Layout + + // Size + CPoint m_min_size; + static const LONG s_right_size; + + // Pages rect + CRect m_pages_rect; + + // Pages + enum + { + page_profile, + page_options_general, + page_options_view, + page_options_hotkeys, + page_files_translation, + page_usage, + page_about + }; + + size_t m_page; + + typedef ptr_vector, + i_dialog_impl_clone_allocator + > pages_type; + + pages_type m_pages; +}; + +#endif // TRANSLITERATOR_TRANSLITERATOR_DLG_H diff --git a/legacy/Transliterator_7a/types.hpp b/legacy/Transliterator_7a/types.hpp new file mode 100644 index 0000000..25921a7 --- /dev/null +++ b/legacy/Transliterator_7a/types.hpp @@ -0,0 +1,35 @@ +#ifndef TRANSLITERATOR_TYPES_H +#define TRANSLITERATOR_TYPES_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // _MSC_VER && (_MSC_VER >= 1200) + +// Char +typedef wchar_t lang_char; +typedef TCHAR lang_tchar; + +// String +typedef wnd_wstring_shell lang_string; +typedef lang_string::traits_type lang_string_traits; +typedef wnd_tstring_shell lang_tstring; +typedef lang_tstring::traits_type lang_tstring_traits; + +// Lang map +typedef bimap_from lang_map; + +// Lang type +typedef lang_map::value_type lang_type; + +// Lang type non constructible +typedef triple< + const lang_char*, + const lang_char*, + bimap_direction::type +> lang_type_nc; + +// Vector +typedef vector lang_vector; +typedef vector lang_tvector; + +#endif // TRANSLITERATOR_TYPES_H diff --git a/legacy/Transliterator_7a/window_text.cpp b/legacy/Transliterator_7a/window_text.cpp new file mode 100644 index 0000000..71760c2 --- /dev/null +++ b/legacy/Transliterator_7a/window_text.cpp @@ -0,0 +1,75 @@ +#include "stdafx.hpp" +#include "window_text.hpp" + +namespace window_text +{ + +// Unicode CP +static const UINT unicode_cp = 1200; + +void get_window_text(HWND wnd, lang_vector& text) +{ + CWindow ctrl(wnd); + + text.resize(ctrl.GetWindowTextLength() + 1); + ctrl.GetWindowText(&text[0], text.size() - 1) +} + +void get_edit_text(HWND wnd, lang_vector& text) +{ + CEdit ctrl(wnd); + + text.resize(ctrl.GetWindowTextLength() + 1); + +} + +void get_rich_text(HWND wnd, lang_vector& text) +{ + CRichEditCtrl ctrl(wnd); + + text.resize(ctrl.GetWindowTextLength() + 1); + ctrl.GetTextEx(reinterpret_cast(&text[0]), + (text.size() - 1)* sizeof(lang_vector::value_type), + GT_DEFAULT, + unicode_cp); +} + +struct class_name_to_f +{ + const lang_tchar* m_class_name; + void (*m_f)(HWND, lang_vector&); +}; + +typedef array class_name_to_f_t; +static const class_name_to_f_t c_to_f = +{ + _T("EDIT"), &get_edit_text, + _T("RichEdit"), &get_edit_text, + _T("RichEdit20A"), &get_rich_text, + _T("RichEdit20W"), &get_rich_text, +}; + +void get(HWND wnd, lang_vector& text) +{ + array class_name; + ::GetClassName(wnd, &class_name[0], class_name.size()); + + NN_FOREACH(class_name_to_f_t::const_iterator, it, c_to_f) + if(StrCmpI(&class_name[0], &it->m_class_name[0]) == 0) + { + it->m_f(wnd, text); + break; + } +} + +void set(HWND wnd, const lang_vector& text) +{ + +} + +void set(HWND wnd, const lang_string& text) +{ + +} + +} // namespace window_text \ No newline at end of file diff --git a/legacy/Transliterator_7a/window_text.hpp b/legacy/Transliterator_7a/window_text.hpp new file mode 100644 index 0000000..18bce82 --- /dev/null +++ b/legacy/Transliterator_7a/window_text.hpp @@ -0,0 +1,15 @@ +#ifndef TRANSLITERATOR_WINDOW_TEXT_H +#define TRANSLITERATOR_WINDOW_TEXT_H + +#include "types.hpp" + +namespace window_text +{ + +void get(HWND wnd, lang_vector& text); +void set(HWND wnd, const lang_vector& text); +void set(HWND wnd, const lang_string& text); + +} // namespace window_text + +#endif // TRANSLITERATOR_WINDOW_TEXT_H diff --git a/legacy/nn/bimap_from.h b/legacy/nn/bimap_from.h new file mode 100644 index 0000000..e0aa11f --- /dev/null +++ b/legacy/nn/bimap_from.h @@ -0,0 +1,763 @@ +#include +#include +#include +#include + +#include + +namespace nn +{ + +// Exceptions +class duplicate_value : public std::logic_error +{ +public: + duplicate_value() : std::logic_error("") + { + } +}; + +class duplicate_value_left_to_right : public duplicate_value +{ +}; + +class duplicate_value_right_to_left : public duplicate_value +{ +}; + +class invalid_direction : public std::logic_error +{ +public: + invalid_direction() : std::logic_error("") + { + } +}; + +// Direction +struct bimap_direction +{ + typedef int type; + + enum + { + none_to_none = 0, + left_to_right = 1, + right_to_left = 2, + all_to_all = left_to_right | right_to_left + }; + + static type invert(type direction) + { + switch(direction) + { + case none_to_none: return all_to_all; break; + case left_to_right: return right_to_left; break; + case right_to_left: return left_to_right; break; + case all_to_all: return none_to_none; break; + default: return none_to_none; break; + } + } +}; + +// Bimap Iterator +template +class bimap_iterator : public BaseIterator +{ +public: + // Typedef + typedef typename BaseIterator::iterator_category iterator_category; + typedef typename BaseIterator::difference_type difference_type; + + // Convert from std::pair to + // std::pair + typedef std::pair< + typename BaseIterator::value_type::first_type, + const typename BaseIterator::value_type::second_type + > value_type; + + typedef value_type* pointer; + typedef value_type& reference; + + // Constructor + bimap_iterator() + { + } + + bimap_iterator(const bimap_iterator& right) : + BaseIterator(right) + { + } + + template + bimap_iterator(const bimap_iterator& right) : + BaseIterator(right) + { + } + + template + explicit bimap_iterator(BaseIterator2 iterator) : + BaseIterator(iterator) + { + } + + reference operator*() const + { + return reference(BaseIterator::operator*()); + } + + pointer operator->() const + { + // Safe conversion from const* to const* const + // We use C-style convertion because reinterpret_cast do not work. + return (pointer)(BaseIterator::operator->()); + } + + + bimap_iterator& operator++() + { + BaseIterator::operator++(); + return *this; + } + + bimap_iterator operator++(int) + { + bimap_iterator temp = *this; + ++*this; + return temp; + } + + bimap_iterator& operator--() + { + BaseIterator::operator--(); + return *this; + } + + bimap_iterator operator--(int) + { + bimap_iterator temp = *this; + --*this; + return temp; + } +}; + +// BiMap Left-Right members +template +class bimap_lr +{ +public: + // Typedef + typedef Map map_type; + + typedef typename map_type::key_type key_type; + typedef typename map_type::mapped_type mapped_type; + + typedef typename map_type::key_compare key_compare; + typedef typename map_type::value_compare value_compare; + typedef typename map_type::value_type value_type; + + typedef typename map_type::allocator_type allocator_type; + typedef typename map_type::size_type size_type; + typedef typename map_type::difference_type difference_type; + + typedef typename map_type::reference reference; + typedef typename map_type::const_reference const_reference; + typedef typename map_type::pointer pointer; + typedef typename map_type::const_pointer const_pointer; + + typedef bimap_iterator< + typename map_type::iterator, + DefaultDirection + > iterator; + + typedef bimap_iterator< + typename map_type::const_iterator, + DefaultDirection + > const_iterator; + + typedef bimap_iterator< + typename map_type::reverse_iterator, + DefaultDirection + > reverse_iterator; + + typedef bimap_iterator< + typename map_type::const_reverse_iterator, + DefaultDirection + > const_reverse_iterator; + + bimap_lr(map_type& map) : m_map(map) + { + } + + bimap_lr(const bimap_lr& right) : m_map(right.m_map) + { + } + + bimap_lr& operator=(const bimap_lr& right) + { + m_map = right.m_map; + return *this; + } + + allocator_type get_allocator() const + { + return m_map.get_allocator(); + } + + iterator begin() + { + return iterator(m_map.begin()); + } + + const_iterator begin() const + { + return const_iterator(m_map.begin()); + } + + reverse_iterator rbegin() + { + return reverse_iterator(m_map.rbegin()); + } + + const_reverse_iterator rbegin() const + { + return const_reverse_iterator(m_map.rbegin()); + } + + iterator end() + { + return iterator(m_map.end()); + } + + const_iterator end() const + { + return const_iterator(m_map.end()); + } + + reverse_iterator rend() + { + return reverse_iterator(m_map.rend()); + } + + const_reverse_iterator rend() const + { + return const_reverse_iterator(m_map.rend()); + } + + bool empty() const + { + return m_map.empty(); + } + + size_type size() const + { + return m_map.size(); + } + + // key_comp + key_compare key_comp() const + { + return m_map.key_comp(); + } + + // value_comp + value_compare value_comp() const + { + return m_map.value_comp(); + } + + // Map operations + // find + iterator find(const key_type& key) + { + return iterator(m_map.find(key)); + } + + const_iterator find(const key_type& key) const + { + return m_map.find(key); + } + + // count + size_type count(const key_type& key) const + { + return m_map.count(key); + } + + // lower_bound + iterator lower_bound(const key_type& key) + { + m_map.lower_bound(key); + } + + const_iterator lower_bound(const key_type& key) const + { + m_map.lower_bound(key); + } + + // upper_bound + iterator upper_bound(const key_type& key) + { + m_map.upper_bound(key); + } + + const_iterator upper_bound(const key_type& key) const + { + m_map.upper_bound(key); + } + + std::pair equal_range(const key_type& key) + { + return m_map.equal_range(key); + } + + std::pair equal_range(const key_type& key) const + { + return m_map.equal_range(key); + } + + // Special overloading for map class + friend BiMap; + +private: + typedef typename map_type::iterator map_iterator; + typedef typename map_type::const_iterator map_const_iterator; + typedef typename map_type::reverse_iterator map_reverse_iterator; + typedef typename map_type::const_reverse_iterator map_const_reverse_iterator; + + map_iterator map_begin() + { + return m_map.begin(); + } + + map_const_iterator map_begin() const + { + return m_map.begin(); + } + + map_reverse_iterator map_rbegin() + { + return m_map.rbegin(); + } + + map_const_reverse_iterator map_rbegin() const + { + return m_map.rbegin(); + } + + map_iterator map_end() + { + return m_map.end(); + } + + map_const_iterator map_end() const + { + return m_map.end(); + } + + map_reverse_iterator map_rend() + { + return m_map.rend(); + } + + map_const_reverse_iterator map_rend() const + { + return m_map.rend(); + } + +private: + map_type& m_map; +}; + +// Bidirectional multimap, from +template, + typename CompareRight = std::less, + typename AllocatorLeft = std::allocator >, + typename AllocatorRight = std::allocator > + > +class bimap_from +{ +public: + // Typedef + typedef bimap_from< + Left, + Right, + CompareLeft, + CompareRight, + AllocatorLeft, + AllocatorRight + > this_type; + + // Map + typedef std::map< + Left, + const Right*, + CompareLeft, + AllocatorLeft + > map_left_type; + + typedef std::map< + Right, + const Left*, + CompareRight, + AllocatorRight + > map_right_type; + + // Left to Right + typedef bimap_lr< + this_type, + map_left_type, + bimap_direction::left_to_right + > left_type; + + // Right to Left + typedef bimap_lr< + this_type, + map_right_type, + bimap_direction::right_to_left + > right_type; + + // Size + typedef std::size_t size_type; + + // Value + typedef tripple value_type; + + // Iterator pair + typedef std::pair< + typename left_type::iterator, + typename right_type::iterator + > pair_iterator; + + typedef std::pair< + typename left_type::const_iterator, + typename right_type::const_iterator + > pair_const_iterator; + + typedef nn::tripple< + typename left_type::map_iterator, + typename right_type::map_iterator, + bimap_direction::type + > map_iterator_type; + + // Constructor + bimap_from() : left(m_map_left), right(m_map_right) + { + } + + template + bimap_from(ForwardIterator first, ForwardIterator last) : + left(m_map_left), + right(m_map_right) + { + insert(first, last); + } + + bimap_from(const this_type& r) : + m_map_left(r.m_map_left), + m_map_right(r.m_map_right), + m_count_to(r.m_count_to), + left(r.left), + right(r.right) + { + } + + // Destructor + ~bimap_from() + { + clear(); + } + + // Assignment + this_type& operator=(const this_type& r) + { + m_map_left = r.m_map_left; + m_map_right = r.m_map_right; + + m_count_to = r.m_count_to; + + left = r.left; + right = r.right; + + return *this; + } + + // Capacity + bool empty() const + { + return m_map_left.empty() && m_map_right.empty(); + } + + size_type size() const + { + return static_cast(std::max(left.size(), right.size())); + } + + // Modifiers + // insert + pair_const_iterator insert(const value_type& v) + { + typedef typename left_type::map_iterator left_type_iterator; + typedef typename right_type::map_iterator right_type_iterator; + + // No erase + if(v.third == bimap_direction::none_to_none) + throw invalid_direction(); + + // Insert left + std::pair insert_pair_left = + m_map_left.insert(typename left_type::value_type(v.first, NULL)); + + // Check for duplicates + if(v.third & bimap_direction::left_to_right && + !insert_pair_left.second && + insert_pair_left.first->second != NULL) + throw duplicate_value_left_to_right(); + + // Insert right + std::pair insert_pair_right = + m_map_right.insert(typename right_type::value_type(v.second, NULL)); + + // Check for duplicates + if(v.third & bimap_direction::right_to_left && + !insert_pair_right.second && + insert_pair_right.first->second != NULL) + { + // Remove value from left if was created + if(insert_pair_left.second) + m_map_left.erase(insert_pair_left.first); + + throw duplicate_value_right_to_left(); + } + + left_type_iterator& it_left = insert_pair_left.first; + right_type_iterator& it_right = insert_pair_right.first; + + // Exchange references + if(v.third & bimap_direction::left_to_right) + { + it_left->second = &it_right->first; + + // Increase reference count + ++m_count_to[&it_right->first]; + } + if(v.third & bimap_direction::right_to_left) + { + it_right->second = &it_left->first; + + // Increase reference count + ++m_count_to[&it_left->first]; + } + + return pair_const_iterator(left_type::const_iterator(), + right_type::const_iterator()); + } + + template + void insert(ForwardIterator first, ForwardIterator last) + { + for(; first != last; ++first) + insert(*first); + } + + // erase + void erase(const map_iterator_type& v) + { + // No insert + if(v.third == bimap_direction::all_to_all) + throw invalid_direction(); + + // Erase type + bimap_direction::type erase_direction = bimap_direction::none_to_none; + + // Check for direction and reference + if(!(v.third & bimap_direction::left_to_right) && + v.first->second == &v.second->first) + erase_direction |= bimap_direction::left_to_right; + + if(!(v.third & bimap_direction::right_to_left) && + v.second->second == &v.first->first) + erase_direction |= bimap_direction::right_to_left; + + if(erase_direction == bimap_direction::none_to_none) + return; + + // Erase + if(erase_direction & bimap_direction::left_to_right) + { + // Decrease reference count + if(--m_count_to[v.second->second] == 0) + { + m_count_to.erase(v.second->second); + + // Erase item + m_map_right.erase(*v.first->second); + } + + v.second->second = NULL; + } + if(erase_direction & bimap_direction::right_to_left) + { + // Decrease reference count + if(--m_count_to[v.first->second] == 0) + { + m_count_to.erase(v.first->second); + + // Erase item + m_map_left.erase(*v.second->second); + } + + v.first->second = NULL; + } + } + + void erase(const value_type& v) + { + // No insert + erase(map_iterator_type(m_map_left.find(v.first), + m_map_right.find(v.second), + v.third)); + } + + template + void erase(ForwardIterator first, ForwardIterator last) + { + for(; first != last; ++first) + erase(static_cast(*first)); + } + + // clear + void clear() + { + // Clear all values + m_map_left.clear(); + m_map_right.clear(); + } + + // swap + void swap(const this_type& right) + { + m_map_left.swap(right.m_map_left); + m_map_right.swap(right.m_map_right); + + m_count_to.swap(right.m_count_to); + + std::swap(left, right.left); + std::swap(right, right.right); + } + +public: + // Left operations + left_type left; + // Right operations + right_type right; + +private: + // Left -> Right + map_left_type m_map_left; + // Right -> Left + map_right_type m_map_right; + + // Reference counting map + std::map m_count_to; +}; + +// Operations +// Copied from +template +bool operator==(bimap_from& left, + bimap_from& right) +{ + return left.left.size() == right.left.size() && + std::equal(left.left.begin(), left.left.end(), right.left.begin()) && + left.right.size() == right.right.size() && + std::equal(left.right.begin(), left.end_y(), right.right.begin()); +} + +template +bool operator!=(bimap_from& left, + bimap_from& right) +{ + return !(left == right); +} + +template +bool operator< (bimap_from& left, + bimap_from& right) +{ + return std::lexicographical_compare(left.left.begin(), + left.end_x(), + right.left.begin(), + right.end_x()) && + std::lexicographical_compare(left.right.begin(), + left.end_y(), + right.right.begin(), + right.end_y()); + +} + +template +bool operator> (bimap_from& left, + bimap_from& right) +{ + return right < left; +} + +template +bool operator<=(bimap_from& left, + bimap_from& right) +{ + return !(right < left); +} + +template +bool operator>=(bimap_from& left, + bimap_from& right) +{ + return !(left < right); +} + +template +void swap(nn::bimap_from& left, + nn::bimap_from& right) +{ + left.swap(right); +} + +} // namespace nn \ No newline at end of file diff --git a/legacy/nn/lang.h b/legacy/nn/lang.h new file mode 100644 index 0000000..8df6833 --- /dev/null +++ b/legacy/nn/lang.h @@ -0,0 +1,968 @@ +#ifndef __NN_Lang__ +#define __NN_Lang__ + +#ifdef __cplusplus +#define NN_INLINE inline +#else +#define NN_INLINE +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" { +#endif + +// Resource +HGLOBAL +WINAPI +LoadResourceLangA( + HMODULE hModule, + LPCSTR lpType, + LPCSTR lpName, + WORD wLanguage); +HGLOBAL +WINAPI +LoadResourceLangW( + HMODULE hModule, + LPCWSTR lpType, + LPCWSTR lpName, + WORD wLanguage); +#ifdef UNICODE +#define LoadResourceLang LoadResourceLangW +#else +#define LoadResourceLang LoadResourceLangA +#endif // !UNICODE + +// String +int +WINAPI +LoadStringLangA( + HINSTANCE hInstance, + UINT uID, + LPSTR lpBuffer, + int nBufferMax, + WORD wLanguage); +int +WINAPI +LoadStringLangW( + HINSTANCE hInstance, + UINT uID, + LPWSTR lpBuffer, + int nBufferMax, + WORD wLanguage); +#ifdef UNICODE +#define LoadStringLang LoadStringLangW +#else +#define LoadStringLang LoadStringLangA +#endif // !UNICODE + +// Menu +HMENU +WINAPI +LoadMenuLangA( + HINSTANCE hInstance, + LPCSTR lpMenuName, + WORD wLanguage); +HMENU +WINAPI +LoadMenuLangW( + HINSTANCE hInstance, + LPCWSTR lpMenuName, + WORD wLanguage); +#ifdef UNICODE +#define LoadMenuLang LoadMenuLangW +#else +#define LoadMenuLang LoadMenuLangA +#endif // !UNICODE + +// Icon - Cursor +HICON +WINAPI +LoadIconCursorLangA( + HINSTANCE hInstance, + LPCSTR lpIconCursorName, + WORD wLanguage, + BOOL bIcon); +HICON +WINAPI +LoadIconCursorLangW( + HINSTANCE hInstance, + LPCWSTR lpIconCursorName, + WORD wLanguage, + BOOL bIcon); +#ifdef UNICODE +#define LoadIconCursorLang LoadIconCursorLangW +#else +#define LoadIconCursorLang LoadIconCursorLangA +#endif // UNICODE + +// Icon +HICON +WINAPI +LoadIconLangA( + HINSTANCE hInstance, + LPCSTR lpIconName, + WORD wLanguage); +HICON +WINAPI +LoadIconLangW( + HINSTANCE hInstance, + LPCWSTR lpIconName, + WORD wLanguage); +#ifdef UNICODE +#define LoadIconLang LoadIconLangW +#else +#define LoadIconLang LoadIconLangA +#endif // !UNICODE + +// Cursor +HICON +WINAPI +LoadCursorLangA( + HINSTANCE hInstance, + LPCSTR lpCursorName, + WORD wLanguage); +HICON +WINAPI +LoadCursorLangW( + HINSTANCE hInstance, + LPCWSTR lpCursorName, + WORD wLanguage); +#ifdef UNICODE +#define LoadCurosrLang LoadCursorLangW +#else +#define LoadCursorLang LoadCursorLangA +#endif // !UNICODE + +// Dialog +HWND +WINAPI +CreateDialogParamLangA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage); +HWND +WINAPI +CreateDialogParamLangW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage); +#ifdef UNICODE +#define CreateDialogParamLang CreateDialogParamLangW +#else +#define CreateDialogParamLang CreateDialogParamLangA +#endif // !UNICODE + +#ifdef UNICODE +#define CreateDialogIndirectParamLang CreateDialogIndirectParamLangW +#else +#define CreateDialogIndirectParamLang CreateDialogIndirectParamLangA +#endif // !UNICODE + +#define CreateDialogLangA(hInstance, lpName, hWndParent, lpDialogFunc, wLanguage) \ +CreateDialogParamLangA(hInstance, lpName, hWndParent, lpDialogFunc, 0L, wLanguage) +#define CreateDialogLangW(hInstance, lpName, hWndParent, lpDialogFunc, wLanguage) \ +CreateDialogParamLangW(hInstance, lpName, hWndParent, lpDialogFunc, 0L, wLanguage) +#ifdef UNICODE +#define CreateDialogLang CreateDialogLangW +#else +#define CreateDialogLang CreateDialogLangA +#endif // !UNICODE + +INT_PTR +WINAPI +DialogBoxParamLangA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage); +INT_PTR +WINAPI +DialogBoxParamLangW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage); +#ifdef UNICODE +#define DialogBoxParamLang DialogBoxParamLangW +#else +#define DialogBoxParamLang DialogBoxParamLangA +#endif // !UNICODE + +#define DialogBoxLangA(hInstance, lpTemplate, hWndParent, lpDialogFunc, wLanguage) \ +DialogBoxParamLangA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L, wLanguage) +#define DialogBoxLangW(hInstance, lpTemplate, hWndParent, lpDialogFunc, wLanguage) \ +DialogBoxParamLangW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L, wLanguage) +#ifdef UNICODE +#define DialogBoxLang DialogBoxLangW +#else +#define DialogBoxLang DialogBoxLangA +#endif // !UNICODE + +// Functions +// Resource +NN_INLINE +HGLOBAL +WINAPI +LoadResourceLangA( + HMODULE hModule, + LPCSTR lpType, + LPCSTR lpName, + WORD wLanguage) +{ + HRSRC hrRes; + + if(!wLanguage) + wLanguage=GetUserDefaultLangID(); + + hrRes=FindResourceExA(hModule, lpType, lpName, wLanguage); + + if(!hrRes&&wLanguage!=LANG_USER_DEFAULT) + hrRes=FindResourceExA(hModule, lpType, lpName , LANG_USER_DEFAULT); + + return LoadResource(hModule, hrRes); +} + +NN_INLINE +HGLOBAL +WINAPI +LoadResourceLangW( + HMODULE hModule, + LPCWSTR lpType, + LPCWSTR lpName, + WORD wLanguage) +{ + HRSRC hrRes; + + if(!wLanguage) + wLanguage=GetUserDefaultLangID(); + + hrRes=FindResourceExW(hModule, lpType, lpName, wLanguage); + + if(!hrRes&&wLanguage!=LANG_USER_DEFAULT) + hrRes=FindResourceExW(hModule, lpType, lpName , LANG_USER_DEFAULT); + + return LoadResource(hModule, hrRes); +} + +// String +NN_INLINE +WINAPI +LoadStringLangA( + HINSTANCE hInstance, + UINT uID, + LPSTR lpBuffer, + int nBufferMax, + WORD wLanguage) +{ + LPCWSTR str; + WORD strPos; + + str=(LPCWSTR) + LoadResourceLangA( + hInstance, + (LPCSTR)RT_STRING, + MAKEINTRESOURCEA(1+(uID >> 4)), + wLanguage); + if(!str) + return 0; + + for(strPos=0;strPos<(uID & 0x000F);strPos++) + str+=*str+1; + + if(!nBufferMax) + return *str; + + if(!lpBuffer) + return 0; + + WideCharToMultiByte( + CP_ACP, + 0, + str+1, + *str+1, + lpBuffer, + nBufferMax, + NULL, + NULL); + + lpBuffer[min(nBufferMax-1, *str)]='\0'; + return min(nBufferMax, *str); +} + +NN_INLINE +WINAPI +LoadStringLangW( + HINSTANCE hInstance, + UINT uID, + LPWSTR lpBuffer, + int nBufferMax, + WORD wLanguage) +{ + LPCWSTR str; + WORD strPos; + + str=(LPCWSTR)LoadResourceLangW( + hInstance, + (LPCWSTR)RT_STRING, + MAKEINTRESOURCEW(1+(uID >> 4)), + wLanguage); + if(!str) + return 0; + + for(strPos=0;strPos<(uID & 0x000F);strPos++) + str+=*str+1; + + if(!nBufferMax) + return *str; + + if(!lpBuffer) + return 0; + + lstrcpynW(lpBuffer, str+1, min(nBufferMax, *str+1)); + + lpBuffer[min(nBufferMax-1, *str)]=L'\0'; + return min(nBufferMax, *str); +} + +// Menu +NN_INLINE +HMENU +WINAPI +LoadMenuLangA( + HINSTANCE hInstance, + LPCSTR lpMenuName, + WORD wLanguage) +{ + return LoadMenuIndirectA( + (CONST MENUTEMPLATEA*) + LoadResourceLangA(hInstance,(LPCSTR)RT_MENU,lpMenuName,wLanguage)); +} + +NN_INLINE +HMENU +WINAPI +LoadMenuLangW( + HINSTANCE hInstance, + LPCWSTR lpMenuName, + WORD wLanguage) +{ + return LoadMenuIndirectW( + (CONST MENUTEMPLATEW*) + LoadResourceLangW(hInstance,(LPCWSTR)RT_MENU,lpMenuName,wLanguage)); +} + +// LoadIconCursorLang +NN_INLINE +HICON +WINAPI +LoadIconCursorLangA( + HINSTANCE hInstance, + LPCSTR lpIconCursorName, + WORD wLanguage, + BOOL bIcon) +{ + HRSRC hrIcon; + + int iid=LookupIconIdFromDirectory( + (BYTE*)LoadResourceLangA( + hInstance, + bIcon? + (LPCSTR)RT_GROUP_ICON: + (LPCSTR)RT_GROUP_CURSOR, + lpIconCursorName, + wLanguage), + bIcon); + + if(!iid) + return NULL; + + hrIcon=FindResourceExA(hInstance, + MAKEINTRESOURCEA(iid), + bIcon ? (LPCSTR)RT_ICON : (LPCSTR)RT_CURSOR, wLanguage); + + return CreateIconFromResource( + (BYTE*)LoadResource(hInstance, hrIcon), + SizeofResource(hInstance, hrIcon), + bIcon, 0x00030000); +} + +NN_INLINE +HICON +WINAPI +LoadIconCursorLangW( + HINSTANCE hInstance, + LPCWSTR lpIconCursorName, + WORD wLanguage, + BOOL bIcon) +{ + HRSRC hrIcon; + + int iid=LookupIconIdFromDirectory( + (BYTE*)LoadResourceLangW( + hInstance, + bIcon? + (LPCWSTR)RT_GROUP_ICON: + (LPCWSTR)RT_GROUP_CURSOR, + lpIconCursorName, + wLanguage), + bIcon); + + if(!iid) + return NULL; + + hrIcon=FindResourceExW(hInstance, + MAKEINTRESOURCEW(iid), + bIcon ? (LPCWSTR)RT_ICON : (LPCWSTR)RT_CURSOR, wLanguage); + + return CreateIconFromResource( + (BYTE*)LoadResource(hInstance, hrIcon), + SizeofResource(hInstance, hrIcon), + bIcon, 0x00030000); +} + +// Icon +NN_INLINE +HICON +WINAPI +LoadIconLangA( + HINSTANCE hInstance, + LPCSTR lpIconName, + WORD wLanguage) +{ + return LoadIconCursorLangA(hInstance,lpIconName,wLanguage,TRUE); +} + +NN_INLINE +HICON +WINAPI +LoadIconLangW( + HINSTANCE hInstance, + LPCWSTR lpIconName, + WORD wLanguage) +{ + return LoadIconCursorLangW(hInstance,lpIconName,wLanguage,TRUE); +} + +// Cursor +NN_INLINE +HICON +WINAPI +LoadCursorLangA( + HINSTANCE hInstance, + LPCSTR lpCursorName, + WORD wLanguage) +{ + return LoadIconCursorLangA(hInstance,lpCursorName,wLanguage,FALSE); +} + +NN_INLINE +HICON +WINAPI +LoadCursorLangW( + HINSTANCE hInstance, + LPCWSTR lpCursorName, + WORD wLanguage) +{ + return LoadIconCursorLangW(hInstance,lpCursorName,wLanguage,FALSE); +} + +// Dialog +NN_INLINE +HWND +WINAPI +CreateDialogParamLangA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage) +{ + CreateDialogIndirectParamA( + hInstance, + (LPDLGTEMPLATEA)LoadResourceLangA( + hInstance, + (LPCSTR)RT_DIALOG, + lpTemplateName, + wLanguage), + hWndParent, + lpDialogFunc, + dwInitParam); +} +HWND +WINAPI +CreateDialogParamLangW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage) +{ + return CreateDialogIndirectParamW( + hInstance, + (LPDLGTEMPLATEW)LoadResourceLangW( + hInstance, + (LPCWSTR)RT_DIALOG, + lpTemplateName, + wLanguage), + hWndParent, + lpDialogFunc, + dwInitParam); +} + +INT_PTR +WINAPI +DialogBoxParamLangA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage) +{ + return DialogBoxIndirectParamA( + hInstance, + (LPDLGTEMPLATEA)LoadResourceLangA( + hInstance, + (LPCSTR)RT_DIALOG, + lpTemplateName, + wLanguage), + hWndParent, + lpDialogFunc, + dwInitParam); +} + +INT_PTR +WINAPI +DialogBoxParamLangW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam, + WORD wLanguage) +{ + return DialogBoxIndirectParamW( + hInstance, + (LPDLGTEMPLATEW)LoadResourceLangW( + hInstance, + (LPCWSTR)RT_DIALOG, + lpTemplateName, + wLanguage), + hWndParent, + lpDialogFunc, + dwInitParam); +} + +// LangID +#ifdef NN_LANG_ID + +// String +int +WINAPI +LoadStringRA( + HINSTANCE hInstance, + UINT uID, + LPSTR lpBuffer, + int nBufferMax); +int +WINAPI +LoadStringRW( + HINSTANCE hInstance, + UINT uID, + LPWSTR lpBuffer, + int nBufferMax); +#ifdef UNICODE +#define LoadStringR LoadStringRW +#else +#define LoadStringR LoadStringRA +#endif // !UNICODE + +// Menu +HMENU +WINAPI +LoadMenuRA( + HINSTANCE hInstance, + LPCSTR lpMenuName); +HMENU +WINAPI +LoadMenuRW( + HINSTANCE hInstance, + LPCWSTR lpMenuName); +#ifdef UNICODE +#define LoadMenuR LoadMenuRW +#else +#define LoadMenuR LoadMenuRA +#endif // !UNICODE + +// Icon +HICON +WINAPI +LoadIconRA( + HINSTANCE hInstance, + LPCSTR lpIconName); +HICON +WINAPI +LoadIconRW( + HINSTANCE hInstance, + LPCWSTR lpIconName); +#ifdef UNICODE +#define LoadIconR LoadIconRW +#else +#define LoadIconR LoadIconRA +#endif // !UNICODE + +// Cursor +HICON +WINAPI +LoadCursorRA( + HINSTANCE hInstance, + LPCSTR lpCursorName); +HICON +WINAPI +LoadCursorRW( + HINSTANCE hInstance, + LPCWSTR lpCursorName); +#ifdef UNICODE +#define LoadCurosrR LoadCursorRW +#else +#define LoadCursorR LoadCursorRA +#endif // !UNICODE + +// Dialog +HWND +WINAPI +CreateDialogParamRA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +HWND +WINAPI +CreateDialogParamRW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +#ifdef UNICODE +#define CreateDialogParamR CreateDialogParamRW +#else +#define CreateDialogParamR CreateDialogParamRA +#endif // !UNICODE + +#ifdef UNICODE +#define CreateDialogIndirectParamR CreateDialogIndirectParamRW +#else +#define CreateDialogIndirectParamR CreateDialogIndirectParamRA +#endif // !UNICODE + +#define CreateDialogRA(hInstance, lpName, hWndParent, lpDialogFunc) \ +CreateDialogParamRA(hInstance, lpName, hWndParent, lpDialogFunc, 0L) +#define CreateDialogRW(hInstance, lpName, hWndParent, lpDialogFunc) \ +CreateDialogParamRW(hInstance, lpName, hWndParent, lpDialogFunc, 0L) +#ifdef UNICODE +#define CreateDialogR CreateDialogRW +#else +#define CreateDialogR CreateDialogRA +#endif // !UNICODE + +INT_PTR +WINAPI +DialogBoxParamRA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +INT_PTR +WINAPI +DialogBoxParamRW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam); +#ifdef UNICODE +#define DialogBoxParamR DialogBoxParamRW +#else +#define DialogBoxParamR DialogBoxParamRA +#endif // !UNICODE + +#define DialogBoxRA(hInstance, lpTemplate, hWndParent, lpDialogFunc) \ +DialogBoxParamRA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) +#define DialogBoxRW(hInstance, lpTemplate, hWndParent, lpDialogFunc) \ +DialogBoxParamRW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) +#ifdef UNICODE +#define DialogBoxR DialogBoxRW +#else +#define DialogBoxR DialogBoxRA +#endif // !UNICODE + +// Functions +NN_INLINE +int +WINAPI +LoadStringRA( + HINSTANCE hInstance, + UINT uID, + LPSTR lpBuffer, + int nBufferMax) +{ + return LoadStringLangA( + hInstance, + uID, + lpBuffer, + nBufferMax, + NN_LANG_ID); +} + +NN_INLINE +int +WINAPI +LoadStringRW( + HINSTANCE hInstance, + UINT uID, + LPWSTR lpBuffer, + int nBufferMax) +{ + return LoadStringLangW( + hInstance, + uID, + lpBuffer, + nBufferMax, + NN_LANG_ID); +} + +// Menu +NN_INLINE +HMENU +WINAPI +LoadMenuRA( + HINSTANCE hInstance, + LPCSTR lpMenuName) +{ + return LoadMenuLangA( + hInstance, + lpMenuName, + NN_LANG_ID); +} + +NN_INLINE +HMENU +WINAPI +LoadMenuRW( + HINSTANCE hInstance, + LPCWSTR lpMenuName) +{ + return LoadMenuLangW( + hInstance, + lpMenuName, + NN_LANG_ID); +} + +// Icon +NN_INLINE +HICON +WINAPI +LoadIconRA( + HINSTANCE hInstance, + LPCSTR lpIconName) +{ + return LoadIconLangA( + hInstance, + lpIconName, + NN_LANG_ID); +} + +NN_INLINE +HICON +WINAPI +LoadIconRW( + HINSTANCE hInstance, + LPCWSTR lpIconName) +{ + return LoadIconLangW( + hInstance, + lpIconName, + NN_LANG_ID); +} + +// Cursor +NN_INLINE +HICON +WINAPI +LoadCursorRA( + HINSTANCE hInstance, + LPCSTR lpCursorName) +{ + return LoadCursorLangA( + hInstance, + lpCursorName, + NN_LANG_ID); +} + +NN_INLINE +HICON +WINAPI +LoadCursorRW( + HINSTANCE hInstance, + LPCWSTR lpCursorName) +{ + return LoadCursorLangW( + hInstance, + lpCursorName, + NN_LANG_ID); +} + +// Dialog +NN_INLINE +HWND +WINAPI +CreateDialogParamRA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam) +{ + return CreateDialogParamLangA( + hInstance, + lpTemplateName, + hWndParent, + lpDialogFunc, + dwInitParam, + NN_LANG_ID); +} + +NN_INLINE +HWND +WINAPI +CreateDialogParamRW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam) +{ + return CreateDialogParamLangW( + hInstance, + lpTemplateName, + hWndParent, + lpDialogFunc, + dwInitParam, + NN_LANG_ID); +} + + +NN_INLINE +INT_PTR +WINAPI +DialogBoxParamRA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam) +{ + return DialogBoxParamLangA( + hInstance, + lpTemplateName, + hWndParent, + lpDialogFunc, + dwInitParam, + NN_LANG_ID); +} + +NN_INLINE +INT_PTR +WINAPI +DialogBoxParamRW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogFunc, + LPARAM dwInitParam) +{ + return DialogBoxParamLangW( + hInstance, + lpTemplateName, + hWndParent, + lpDialogFunc, + dwInitParam, + NN_LANG_ID); +} + + +// ReDefines +#ifdef NN_LANG_R +#ifndef NN_LANG_ID +#error You must define NN_LANG_ID +#endif // NN_LANG_ID + +// String +#undef LoadStringA +#define LoadStringA LoadStringRA +#undef LoadStringW +#define LoadStringW LoadStringRW +#undef LoadString +#define LoadString LoadStringR + +// Menu +#undef LoadMenuA +#define LoadMenuA LoadMenuRA +#undef LoadMenuW +#define LoadMenuW LoadMenuRW +#undef LoadMenu +#define LoadMenu LoadMenuR + +// Icon +#undef LoadIconA +#define LoadIconA LoadIconRA +#undef LoadIconW +#define LoadIconW LoadIconRW +#undef LoadIcon +#define LoadIcon LoadIconR + +// Cursor +#undef LoadCursorA +#define LoadCursorA LoadCursorRA +#undef LoadCursorW +#define LoadCursorW LoadCursorRW +#undef LoadCursor +#define LoadCursor LoadCursorR + +// Dialog +#undef CreateDialogParamA +#define CreateDialogParamA CreateDialogParamRA +#undef CreateDialogParamW +#define CreateDialogParamW CreateDialogParamRW +#undef CreateDialogParam +#define CreateDialogParam CreateDialogParam + +#undef DialogBoxParamA +#define DialogBoxParamA DialogBoxParamRA +#undef DialogBoxParamW +#define DialogBoxParamW DialogBoxParamRW +#undef DialogBoxParam +#define DialogBoxParam DialogBoxParamR +#endif // NN_LANG_R + +#endif // NN_LANG_ID + + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/legacy/nn/triple.h b/legacy/nn/triple.h new file mode 100644 index 0000000..4385839 --- /dev/null +++ b/legacy/nn/triple.h @@ -0,0 +1,111 @@ +namespace nn +{ + +// Like std::pair but takes 3 arguments +template +struct tripple +{ + typedef tripple this_type; + + typedef First first_type; + typedef Second second_type; + typedef Third third_type; + + tripple() : + first(First()), + second(Second()), + third(Third()) + { + } + + tripple(const First& first_val, + const Second& second_val, + const Third& third_val) : + first(first_val), + second(second_val), + third(third_val) + { + } + + template + tripple(const tripple& right) : + first(right.first), + second(right.second), + third(right.third) + { + } + + void swap(const this_type& right) + { + std::swap(first, right.first); + std::swap(second, right.second); + std::swap(third, right.third); + } + + First first; + Second second; + Third third; +}; + +template +bool operator==(const tripple& left, + const tripple& right) +{ + return left.first == right.first && + left.second == right.second && + left.third == right.third; +} + +template +bool operator!=(const tripple& left, + const tripple& right) +{ + return !(left == right); +} + +template +bool operator <(const tripple& left, + const tripple& right) +{ + return left.first < right.first && + left.second < right.second && + left.third < right.third; +} + +template +bool operator >(const tripple& left, + const tripple& right) +{ + return right < left; +} + +template +bool operator<=(const tripple& left, + const tripple& right) +{ + return !(right < left); +} + +template +bool operator>=(const tripple& left, + const tripple& right) +{ + return !(left < right); +} + +template +tripple make_tripple(const First& first, + const Second& second, + const Third& third) +{ + return tripple(first, second, third); +} + +template +void swap(const nn::tripple& left, + const nn::tripple& right) +{ + left.swap(right); +} + +} // namespace nn \ No newline at end of file diff --git a/legacy/nn/wnd_string.h b/legacy/nn/wnd_string.h new file mode 100644 index 0000000..a6363f0 --- /dev/null +++ b/legacy/nn/wnd_string.h @@ -0,0 +1,550 @@ +#ifndef __NN_Wnd_String__ +#define __NN_Wnd_String__ + +// код должен работать в С и в С++ +#ifdef __cplusplus +#define NN_INLINE inline +#else +#define NN_INLINE +#endif // __cplusplus + +NN_INLINE HINSTANCE NNGetModuleInstance() +{ +#if defined(_AFX) + return AfxGetInstanceHandle(); +#elif defined(_ATL) + #if _ATL_VER>=0x700 + return ATL::_AtlBaseModule.GetModuleInstance(); + #else + return _Module.GetModuleInstance(); + #endif // _ATL_VER +#elif defined(_WINDOWS) + return ::GetModuleHandle(NULL); +#else + return NULL; +#endif +} + +NN_INLINE HINSTANCE NNGetResourceInstance() +{ +#if defined(_AFX) + return AfxGetResourceInstance(); +#elif defined(_ATL) + #if _ATL_VER>=0x700 + return ATL::_AtlBaseModule.GetResourceInstance(); + #else + return _Module.GetResourceInstance(); + #endif // _ATL_VER +#elif defined(_WINDOWS) + return ::GetModuleHandle(NULL); +#else + return NULL; +#endif +} + +// Use Shell functions +#ifdef NN_USE_SHL_FOR_STRING +#define NN_USE_SHL_FOR_STRINGA +#define NN_USE_SHL_FOR_STRINGW +#endif // NN_USE_SHL_FOR_STRING + +// Use Windows functions +#ifdef NN_USE_WIN_FOR_STRING +#define NN_USE_WIN_FOR_STRINGA +#define NN_USE_WIN_FOR_STRINGW +#endif // NN_USE_WIN_FOR_STRING + +#if defined(NN_USE_SHL_FOR_STRINGA) && defined(NN_USE_WIN_FOR_STRINGA) +#error You cannot define NN_USE_SHL_FOR_STRINGA and NN_USE_WIN_FOR_STRINGA +#endif // NN_USE_SHL_FOR_STRINGA && NN_USE_WIN_FOR_STRINGA + +#if defined(NN_USE_SHL_FOR_STRINGW) && defined(NN_USE_WIN_FOR_STRINGW) +#error You cannot define NN_USE_SHL_FOR_STRINGW and NN_USE_WIN_FOR_STRINGW +#endif // NN_USE_SHL_FOR_STRINGW && NN_USE_WIN_FOR_STRINGW + +// Default Windows function +#if !defined(NN_USE_SHL_FOR_STRINGA) && !defined(NN_USE_WIN_FOR_STRINGA) +#define NN_USE_WIN_FOR_STRINGA +#endif // !NN_USE_SHL_FOR_STRINGA && !NN_USE_WIN_FOR_STRINGA + +// Default Windows function +#if !defined(NN_USE_SHL_FOR_STRINGW) && !defined(NN_USE_WIN_FOR_STRINGW) +#define NN_USE_WIN_FOR_STRINGW +#endif // !NN_USE_SHL_FOR_STRINGW && !NN_USE_WIN_FOR_STRINGW + +#include + +namespace NN +{ + +// wnd_char_traits_base - char,wchar_t +template +struct wnd_char_traits_base : public std::char_traits +{ +private: + static int cmp(const char_type& _Left, const char_type& _Right); +public: + static bool eq(const char_type& _Left, const char_type& _Right) + { return cmp(_Left,_Right)==0; } + + static bool lt(const char_type& _Left, const char_type& _Right) + { return cmp(_Left,_Right)<0; } + + static int compare(const char_type* _First1, const char_type* _First2, + std::size_t _Count) + { + for(; 0 < _Count; --_Count, ++_First1, ++_First2) + { + int icmp = cmp(*_First1,*_First2); + if(icmp) + return icmp; + } + return (0); + } +}; + +template<> +inline int wnd_char_traits_base::cmp( + const typename wnd_char_traits_base::char_type& _Left, + const typename wnd_char_traits_base::char_type& _Right) +{ + const wnd_char_traits_base::char_type left[2]={_Left}; + const wnd_char_traits_base::char_type right[2]={_Right}; + +#ifdef NN_USE_WIN_FOR_STRINGA + return ::lstrcmpA(left,right); +#else + return ::StrCmpA(left,right); +#endif // NN_USE_WIN_FOR_STRINGA +} + +template<> +inline int wnd_char_traits_base::cmp( + const typename wnd_char_traits_base::char_type& _Left, + const typename wnd_char_traits_base::char_type& _Right) +{ + const wnd_char_traits_base::char_type left[2]={_Left}; + const wnd_char_traits_base::char_type right[2]={_Right}; + +#ifdef NN_USE_WIN_FOR_STRINGW + return ::lstrcmpW(left,right); +#else + return ::StrCmpW(left,right); +#endif // NN_USE_WIN_FOR_STRINGW +} + +// wnd_char_traits +template +struct wnd_char_traits : public std::char_traits +{}; + +template<> +struct wnd_char_traits : public wnd_char_traits_base +{}; + +template<> +struct wnd_char_traits : public wnd_char_traits_base +{}; + +typedef std::basic_string< + char, + wnd_char_traits, + std::allocator + >wnd_string; + +typedef std::basic_string< + wchar_t, + wnd_char_traits, + std::allocator + >wnd_wstring; + +#ifndef NN_NO_WNDSTRING_COMPARE + +// wnd_string - std::string +inline bool operator==(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())==0; } + +inline bool operator!=(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())!=0; } + +inline bool operator>(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())>0; } + +inline bool operator>=(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())>=0; } + +inline bool operator<(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())<0; } + +inline bool operator<=(const wnd_string& left, + const std::string& right) +{ return left.compare(right.c_str())<=0; } + +// std::string - wnd_string +inline bool operator==(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())==0; } + +inline bool operator!=(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())!=0; } + +inline bool operator>(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())>0; } + +inline bool operator>=(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())>=0; } + +inline bool operator<(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())<0; } + +inline bool operator<=(const std::string& left, + const wnd_string& right) +{ return right.compare(left.c_str())<=0; } + +// wnd_wstring - std::wstring +inline bool operator==(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())==0; } + +inline bool operator!=(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())!=0; } + +inline bool operator>(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())>0; } + +inline bool operator>=(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())>=0; } + +inline bool operator<(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())<0; } + +inline bool operator<=(const wnd_wstring& left, + const std::wstring& right) +{ return left.compare(right.c_str())<=0; } + +// std::wstring - wnd_wstring +inline bool operator==(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())==0; } + +inline bool operator!=(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())!=0; } + +inline bool operator>(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())>0; } + +inline bool operator>=(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())>=0; } + +inline bool operator<(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())<0; } + +inline bool operator<=(const std::wstring& left, + const wnd_wstring& right) +{ return right.compare(left.c_str())<=0; } + +#endif // NN_NO_WNDSTRING_COMPARE + +} + +#ifndef NN_NO_WNDLOADSTRING + +#include +#include // функции поста выше + +namespace NN +{ + +// WndLoadString_Traits +template +struct WndLoadString_Traits; + +template<> +struct WndLoadString_Traits +{ + static int LS(HINSTANCE hInstance,UINT uID,CHAR* lpBuffer,int nBufferMax) + { return ::LoadStringA(hInstance,uID,lpBuffer,nBufferMax); } +}; + +template<> +struct WndLoadString_Traits +{ + static int LS(HINSTANCE hInstance,UINT uID,WCHAR* lpBuffer,int nBufferMax) + { return ::LoadStringW(hInstance,uID,lpBuffer,nBufferMax); } +}; + +// WndLoadString +template +inline int WndLoadStringT(HINSTANCE hInstance,UINT uID,TString& str) +{ + if(!hInstance) + hInstance = NNGetResourceInstance(); + + size_t buf_size = 256; + std::vector buf(buf_size); + if(buf.empty()) + return 0; + + int len; + + while((len=WndLoadString_Traits::LS( + hInstance,uID,&buf[0],buf_size)) == + (int)(buf_size-1)) + { + buf_size*=2; + buf.resize(buf_size); + if(!buf.empty()) + return 0; + } + + str.assign(&buf[0]); + return len; +} + +template +inline int WndLoadStringA(HINSTANCE hInstance,UINT uID,TString& str) +{ return WndLoadStringT(hInstance,uID,str); } + +template +inline int WndLoadStringW(HINSTANCE hInstance,UINT uID,TString& str) +{ return WndLoadStringT(hInstance,uID,str); } + +template +inline int WndLoadString(HINSTANCE hInstance,UINT uID,TString& str) +{ +#ifdef UNICODE + return WndLoadStringW(hInstance,uID,str); +#else + return WndLoadStringA(hInstance,uID,str); +#endif // UNICODE +} + +template +inline int WndLoadStringA(UINT uID,TString& str) +{ return WndLoadStringA(NULL,uID,str); } + +template +inline int WndLoadStringW(UINT uID,TString& str) +{ return WndLoadStringW(NULL,uID,str); } + +template +inline int WndLoadString(UINT uID,TString& str) +{ +#ifdef UNICODE + return WndLoadStringW(ID,str); +#else + return WndLoadStringA(uID,str); +#endif // UNICODE +} + +} + +#endif // NN_NO_WNDLOADSTRING + +// wnd_char_traits_impl +template +struct wnd_char_traits_impl : public std::char_traits +{ + static bool eq(const char_type& left, const char_type& right) + { + return Cmp::cmp(left,right) == 0; + } + + static bool lt(const char_type& left, const char_type& right) + { + return Cmp::cmp(left,right) < 0; + } + + static int compare(const char_type* first1, + const char_type* first2, + std::size_t count) + { + for(; count > 0; --count, ++first1, ++first2) + { + int ret = Cmp::cmp(*first1,*first2); + + if(ret != 0) + return ret; + } + return 0; + } +}; + +// wnd_cmp +template +struct wnd_cmp; + +template<> +struct wnd_cmp +{ + static int cmp(char left, char right) + { + char left_cmp[2] = {left, 0}; + char right_cmp[2] = {right, 0}; + + return ::lstrcmpA(left_cmp, right_cmp); + } +}; + +template<> +struct wnd_cmp +{ + static int cmp(wchar_t left, wchar_t right) + { + wchar_t left_cmp[2] = {left, 0}; + wchar_t right_cmp[2] = {right, 0}; + + return ::lstrcmpW(left_cmp, right_cmp); + } +}; + +template<> +struct wnd_cmp +{ + static int cmp(char left, char right) + { + char left_cmp[2] = {left, 0}; + char right_cmp[2] = {right, 0}; + + return ::StrCmpA(left_cmp, right_cmp); + } +}; + +template<> +struct wnd_cmp +{ + static int cmp(wchar_t left, wchar_t right) + { + wchar_t left_cmp[2] = {left, 0}; + wchar_t right_cmp[2] = {right, 0}; + + return ::StrCmpW(left_cmp, right_cmp); + } +}; + +// wnd_char_traits_windows +template +struct wnd_char_traits_windows : + public std::char_traits +{ +}; + +template<> +struct wnd_char_traits_windows : + public wnd_char_traits_impl > +{ +}; + +template<> +struct wnd_char_traits_windows : + public wnd_char_traits_impl > +{ +}; + +// wnd_char_traits_shell +template +struct wnd_char_traits_shell : + public std::char_traits +{ +}; + +template<> +struct wnd_char_traits_shell : + public wnd_char_traits_impl > +{ +}; + +template<> +struct wnd_char_traits_shell : + public wnd_char_traits_impl > +{ +}; + +// Typedef +// String Windows +typedef std::basic_string< + char, + wnd_char_traits_windows, + std::allocator +> wnd_string_windows; + +typedef std::basic_string< + wchar_t, + wnd_char_traits_windows, + std::allocator +> wnd_wstring_windows; + +typedef std::basic_string< + TCHAR, + wnd_char_traits_windows, + std::allocator +> wnd_tstring_windows; + +// String Shell +typedef std::basic_string< + char, + wnd_char_traits_shell, + std::allocator +> wnd_string_shell; + +typedef std::basic_string< + wchar_t, + wnd_char_traits_shell, + std::allocator +> wnd_wstring_shell; + +typedef std::basic_string< + TCHAR, + wnd_char_traits_shell, + std::allocator +> wnd_tstring_shell; + +// Define macros for generating code +#define WND_STR_OPERATOR(op, left_type, right_type) \ + inline bool operator##op(const left_type& left, const right_type& right) \ + { \ + return left.compare(right.c_str()) op 0; \ + } + +#define WND_STR_COMPARE_IMPL(left_type, right_type) \ + WND_STR_OPERATOR(==, left_type, right_type) \ + WND_STR_OPERATOR(!=, left_type, right_type) \ + WND_STR_OPERATOR(<, left_type, right_type) \ + WND_STR_OPERATOR(>, left_type, right_type) \ + WND_STR_OPERATOR(<=, left_type, right_type) \ + WND_STR_OPERATOR(>=, left_type, right_type) + +#define WND_STR_COMPARE(left_type, right_type) \ + WND_STR_COMPARE_IMPL(left_type, right_type) \ + WND_STR_COMPARE_IMPL(right_type, left_type) + +// Define compare +WND_STR_COMPARE(wnd_string_windows, wnd_string_shell) +WND_STR_COMPARE(wnd_wstring_windows, wnd_wstring_shell) +WND_STR_COMPARE(wnd_string_windows, std::string) +WND_STR_COMPARE(wnd_wstring_windows, std::wstring) +WND_STR_COMPARE(wnd_string_shell, std::string) +WND_STR_COMPARE(wnd_wstring_shell, std::wstring) + +// Undefine macros +#undef WND_STR_OPERATOR +#undef WND_STR_COMPARE_IMPL + +#endif // __NN_Wnd_String__ \ No newline at end of file