diff --git a/.gitignore b/.gitignore
index b3bd1fec..f0c75e7f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,21 +13,27 @@
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
+# Mono auto generated files
+mono_crash.*
+
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
[Bb]uild/
-Win32/
x64/
x86/
+[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
+[Aa][Rr][Mm]64[Ee][Cc]/
bld/
[Bb]in/
[Oo]bj/
+[Oo]ut/
[Ll]og/
+[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
@@ -41,9 +47,10 @@ Generated\ Files/
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
-# NUNIT
+# NUnit
*.VisualState.xml
TestResult.xml
+nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
@@ -58,6 +65,9 @@ project.lock.json
project.fragment.lock.json
artifacts/
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
# StyleCop
StyleCopReport.xml
@@ -124,9 +134,6 @@ _ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
-# JustCode is a .NET coding add-in
-.JustCode
-
# TeamCity is a build add-in
_TeamCity*
@@ -137,6 +144,11 @@ _TeamCity*
.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
@@ -184,6 +196,8 @@ 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.
@@ -208,6 +222,8 @@ BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
+*.appxbundle
+*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
@@ -257,7 +273,9 @@ ServiceFabricBackup/
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
-*- Backup*.rdl
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
@@ -293,10 +311,6 @@ paket-files/
# FAKE - F# Make
.fake/
-# JetBrains Rider
-.idea/
-*.sln.iml
-
# CodeRush personal settings
.cr/personal
@@ -341,6 +355,15 @@ ASALocalRun/
# 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
+
# Backup files
*.BAK
*.bak
diff --git a/LICENSE.TXT b/LICENSE.TXT
index 6d43e2a5..fdc6311d 100644
--- a/LICENSE.TXT
+++ b/LICENSE.TXT
@@ -6,7 +6,7 @@ CorvusSKK
The MIT License
-Copyright (C) 2011-2020 SASAKI Nobuyuki
+Copyright (C) 2011-2024 SASAKI Nobuyuki
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -43,11 +43,55 @@ License:
-------------------------------------------------------------------------------
+JIS X 0208 (1990) to Unicode
+© 2015 Unicode®, Inc.
+
+JIS X 0212 (1990) to Unicode
+© 2015 Unicode®, Inc.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2021 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+
+-------------------------------------------------------------------------------
+
+
Lua
The MIT License
-Copyright (C) 1994-2018 Lua.org, PUC-Rio.
+Copyright (C) 1994-2024 Lua.org, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -75,7 +119,7 @@ zlib
The zlib/libpng License
-Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -164,89 +208,89 @@ THE SOFTWARE.
MICROSOFT SOFTWARE LICENSE TERMS
-MICROSOFT VISUAL STUDIO COMMUNITY 2019
+MICROSOFT VISUAL STUDIO COMMUNITY 2022
-3. DISTRIBUTABLE CODE.
+4. DISTRIBUTABLE CODE.
The software contains code that you may distribute in applications you
- develop as described in this Section. For purposes of this Section 3, the
- term "distribution" also means deployment of your applications for third
- parties to access over the Internet.
+ develop as described in this Section. For purposes of this Section 4,
+ the term “distribution” also means deployment of your applications for
+ third parties to access over the Internet.
a. Right to Use and Distribute.
- The code and text files listed below are "Distributable Code".
- · Distributable List.
- You may copy and distribute the object code form of code listed on the
- Distributable List located at https://aka.ms/vs/16/redistribution.
- · Sample Code, Templates and Styles.
- You may copy, modify and distribute the source and object code form of
- code marked as "sample", "template", "simple styles" and "sketch styles".
- · Third Party Distribution.
- You may permit distributors of your applications to copy and distribute
- the Distributable Code as part of those applications.
+ The code and text files listed below are “Distributable Code”.
+
+ i. Distributable List.
+ You may copy and distribute the object code form of code listed on
+ the Distributable List located at https://aka.ms/vs/17/redistribution.
+
+ ii. Sample Code, Templates and Styles.
+ You may copy, modify and distribute the source and object code form of
+ code marked as “sample”, “template”, “simple styles” and “sketch styles”.
+
+ iii. Third Party Distribution.
+ You may permit distributors of your applications to copy and distribute
+ the Distributable Code as part of those applications.
b. Distribution Requirements.
For any Distributable Code you distribute, you must:
+
· add significant primary functionality to it in your applications; and
+
· require distributors and external end users to agree to terms that
- protect the Distributable Code at least as much as this agreement.
+ protect the Distributable Code at least as much as this agreement.
+
+c. Distribution Restrictions.
+ You may not:
+
+ · distribute components or runtimes that are marked “Preview”,
+ “Pre-release” or “Beta”;
- c. Distribution Restrictions.
- You may not:
· use Microsoft’s trademarks in your applications’ names or in a way that
- suggests your applications come from or are endorsed by Microsoft; or
- · modify or distribute the source code of any Distributable Code so that any
- part of it becomes subject to an Excluded License. An "Excluded License"
- is one that requires, as a condition of use, modification or distribution
- of code, that (i) it be disclosed or distributed in source code form; or
- (ii) others have the right to modify it.
-
-
-Distributable Code Files for Visual Studio 2019
-
-The following section is the "REDIST list" that is referenced in the
-"Distributable Code" section of the Microsoft Software License Terms for Visual
-Studio Enterprise 2019, Visual Studio Professional 2019, Visual Studio
-Community 2019 ("the software"). If you have a validly licensed copy of such
-software, you may copy and distribute with your program the unmodified form of
-the files listed below, subject to the License Terms for the software.
-
-In the lists below...
- · [arch] represents the processor architecture identifier, for instance "x86",
- "x64", or "arm".
- · [locale] represents a specific language, locale, or culture identifier, for
- instance "ENU", "en-us", or "1033".
- · [version] represents a folder name that uses a version number.
- · [VisualStudioFolder] represents the install location for Visual Studio 2019.
-
-
-Visual C++ Runtime Files
-
-Subject to the License Terms for the software, you may copy and distribute
-the following files, unmodified, as a part of the installation package of your
-program:
-
- · [Program Files (x86)]\Common Files\Merge Modules\
- · Microsoft_VC141_CRT_[arch].msm
- · Microsoft_VC141_CXXAMP_[arch].msm
- · Microsoft_VC141_MFC_[arch].msm
- · Microsoft_VC141_MFCLOC_[arch].msm
- · Microsoft_VC141_OpenMP_[arch].msm
-
-Subject to the License Terms for the software, you may copy and distribute with
-your program any of the files within the following folder and its subfolders
-except as noted below. You may not modify these files.
-
- · [VisualStudioFolder]\VC\redist
- · You may not distribute the contents of the following folders:
- · [VisualStudioFolder]VC\Redist\MSVC\[version]\debug_nonredist
- · [VisualStudioFolder]VC\Redist\MSVC\[version]\debug_nonredist
- · [VisualStudioFolder]\VC\Redist\MSVC\[version]\onecore\debug_nonredist
-
-Subject to the License Terms for the software, you may copy and distribute
-the following files with your program in your program’s application local
-folder or by deploying them into the Global Assembly Cache (GAC):
-
- · [VisualStudioFolder]\VC\Tools\MSVC\[version]\atlmfc\lib\[arch]\mfcmifc80.dll
+ suggests your applications come from or are endorsed by Microsoft; or
+
+ · modify or distribute the source code of any Distributable Code so that
+ any part of it becomes subject to an Excluded License.
+ An “Excluded License” is one that requires, as a condition of use,
+ modification or distribution of code,
+ that (i) it be disclosed or distributed in source code form;
+ or (ii) others have the right to modify it.
+
+
+Distributable Code for Visual Studio 2022
+
+ In the lists below...
+
+ [arch] represents the processor architecture identifier,
+ for instance "x86", "x64", or "arm".
+ [locale] represents a specific language, locale, or culture identifier,
+ for instance "ENU", "en-us", or "1033".
+ [version] represents a folder name that uses a version number.
+ [VisualStudioFolder] represents the install location for Visual Studio 2022.
+
+ Distributable Code Files for Visual Studio 2022
+
+ The following section is the "REDIST list" that is referenced in the
+ "Distributable Code" section of the Microsoft Software License Terms for
+ Visual Studio Enterprise 2022, Visual Studio Professional 2022,
+ Visual Studio Community 2022 ("the software").
+ If you have a validly licensed copy of such software,
+ you may copy and distribute with your program the unmodified form of
+ the files listed below, subject to the License Terms for the software.
+
+ Visual C++ Runtime Files
+
+ Subject to the License Terms for the software, you may copy and distribute
+ with your program any of the files within the following folder and its
+ subfolders except as noted below. You may not modify these files.
+
+ [VisualStudioFolder]\VC\redist
+
+ You may not distribute the contents of the following folders
+ (please see List of Utilities and Build Tools for Visual Studio 2022 for
+ allowed usage for development/testing purposes):
+
+ [VisualStudioFolder]VC\Redist\MSVC\[version]\debug_nonredist
+ [VisualStudioFolder]\VC\Redist\MSVC\[version]\onecore\debug_nonredist
-------------------------------------------------------------------------------
diff --git a/README.md b/README.md
index f3ab24ba..69477018 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# CorvusSKK ver. 2.7.12
+# CorvusSKK ver. 3.3.0
-Windowsで動作するSKK風のIMEです。
+![](installer/resource-md/logo.png) Windowsで動作するSKK風のIMEです。
@@ -10,30 +10,17 @@ Windowsで動作するSKK風のIMEです。
### 対応OS
-* Windows Vista (32-bit / 64-bit)
-
- * Service Pack 2
- * プラットフォーム更新プログラム ( [KB971644](https://support.microsoft.com/en-us/kb/971644) または [KB971512](https://support.microsoft.com/en-us/kb/971512) )
-
-* Windows 7 (32-bit / 64-bit)
-
- * Service Pack 1
-
-* Windows 8 (32-bit / 64-bit)
-
-* Windows 8.1 (32-bit / 64-bit)
+* Windows 10 (32-bit / 64-bit / ARM)
- * S14 Update ( [KB2919355](https://support.microsoft.com/en-us/kb/2919355) )
+ * バージョン 1607 (Anniversary Update) ビルド 14393 以降
-* Windows 10 (32-bit / 64-bit / ARM)
+* Windows 11 (64-bit / ARM)
### インストール
corvusskk-X.Y.Z.exe を実行してください。 (X, Y, Z はバージョン番号)
-Windows 10 on ARM では corvusskk-X.Y.Z-arm.exe を実行してください。
-
アップデートの後はOSを再起動しておくと安全です。
インストール先
@@ -50,7 +37,7 @@ Windows 10 on ARM では corvusskk-X.Y.Z-arm.exe を実行してください。
* ARM 版 Windows
* %SystemRoot%\System32\IME\IMCRVSKK
- * %SystemRoot%\SysArm32\IME\IMCRVSKK
+ * %SystemRoot%\SysArm32\IME\IMCRVSKK ⦅ Windows 11 ビルド 25905 より前 ⦆
* %SystemRoot%\SysWOW64\IME\IMCRVSKK
* 共通
@@ -73,7 +60,7 @@ Windows ストアアプリ、Microsoft Edge 等で使用するには、設定フ
Windows 8 以降で動作する設定ダイアログでOKボタンを押して保存をおこなうとアクセス許可の付加が自動的におこなわれます。
-また、Windows 8 以前から Windows 8 以降へ Windows をアップグレードしたときは、CorvusSKK を一旦アンインストールした上でインストールし直してください。
+また、Windows 8 より前から Windows 8 以降へ Windows をアップグレードしたときは、CorvusSKK を一旦アンインストールした上でインストールし直してください。
インストール時に、Windows ストアアプリ、Microsoft Edge 等で使用可能となるようにIMEの登録がおこなわれます。
@@ -86,42 +73,53 @@ Adobe Reader X 以降で使用するには、設定ファイル (config.xml) に
-## 設定
+## ファイル
+### 設定ファイル
-### 設定ダイアログ
+設定ファイルは、ディレクトリ %APPDATA%\CorvusSKK に保存されます。
-設定ダイアログは、以下のいずれかの操作で開くことができます。
+| ファイル名 | 説明 |
+| --- | --- |
+| config.xml | 各種設定 |
-* 言語バーを右クリックし、メニューから「設定」を選択する。「テキストサービスと入力言語」ダイアログの「インストールされているサービス」からCorvusSKKを選択し、プロパティボタンを押す。
-* 言語バーの入力モードアイコンを左クリックし、メニューから「設定」を選択する。
-* 言語バーのヘルプボタンを左クリックし、メニューから「CorvusSKK」を選択する。
-* Windows 8 以降の通知領域の入力モードアイコンを右クリックし、メニューから「設定」を選択する。
-* スタートメニューから CorvusSKK\CONFIG を実行する。
-* %SystemRoot%\System32\IME\IMCRVSKK\imcrvcnf.exe または %SystemRoot%\SysWOW64\IME\IMCRVSKK\imcrvcnf.exe を直接実行する
- * コマンドライン引数またはドラッグアンドドロップで後述の設定ファイルを渡すことが可能です。
+* 設定サンプル https://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample
+* デフォルト https://github.com/nathancorvussolis/corvusskk/tree/master/installer/config-share
-設定ダイアログで保存した後は、IME OFF → ON で新しい設定が反映されます。
+UTF-8 の XML フォーマットのテキストファイルとなっています。
-IME ON/OFF のキーのみ、IME ON → OFF のときにも反映されます。
+設定ダイアログで OK ボタンまたは適用ボタンを押すと config.xml ファイルが保存されます。
+テキストエディタなどでも編集可能です。変更した後は、IME OFF → ON で新しい設定が反映されます。
-### 設定ファイル、SKK辞書
+下記のディレクトリの優先順位で各ファイルが読み込まれます。
-各種設定及び取込済SKK辞書は、ディレクトリ %AppData%\CorvusSKK の各ファイルに保存されます。
+1. %APPDATA%\CorvusSKK
+2. %SystemRoot%\IME\IMCRVSKK (インストーラーによりインストール済み)
+
+> **開発者向け**
+>
+> デバッグビルドでは、ディレクトリ %APPDATA%\CorvusSKK_DEBUG に保存されます。
+>
+> デバッグビルドでは、下記のディレクトリの優先順位で各ファイルが読み込まれます。
+>
+> 1. %APPDATA%\CorvusSKK_DEBUG
+> 2. 実行ファイルと同じディレクトリ (ビルドするとディレクトリ installer\config-share から上書きコピーされます)
-| ファイル名 | 説明 |
-|---|---|
-| config.xml | 各種設定 |
-| skkdict.txt | 取込済SKK辞書 |
-各種設定の config.xml ファイルは、UTF-8 の XML フォーマットのテキストファイルとなっています。
+### SKK辞書ファイル
-設定ダイアログで OK ボタンまたは適用ボタンを押すと config.xml ファイルが保存されます。テキストエディタなどでも編集可能です。変更した後は、IME OFF → ON で新しい設定が反映されます。
+後述の[SKK辞書](#skk辞書)の項も合わせて参照してください。
+
+取込済SKK辞書は、ディレクトリ %APPDATA%\CorvusSKK に保存されます。
+
+| ファイル名 | 説明 |
+| --- | --- |
+| skkdict.txt | 取込済SKK辞書 |
-取込済SKK辞書の skkdict.txt ファイルは、UTF-16 (LE, BOMあり) のSKK辞書フォーマットとなっています。
+UTF-16 (LE, BOMあり) のSKK辞書フォーマットとなっています。
-設定ダイアログのリストにSKK辞書を追加して取込ボタンを押すと取込済SKK辞書に変換されます。後述の[SKK辞書](#skk辞書)の項を参照してください。
+設定ダイアログのリストにSKK辞書を追加して取込ボタンを押すと取込済SKK辞書に変換されます。
ディレクトリ %SystemRoot%\IME\IMCRVSKK に NAIST-jdic をベースとした簡易的なSKK辞書が標準でインストール済みとなっています。取込済SKK辞書が存在しないときはこのSKK辞書が使用されます。
@@ -129,39 +127,53 @@ SKK辞書サーバーを使用するなどでローカルのSKK辞書を使用
下記のディレクトリの優先順位で各ファイルが読み込まれます。
-1. %AppData%\CorvusSKK
+1. %APPDATA%\CorvusSKK
2. %SystemRoot%\IME\IMCRVSKK (インストーラーによりインストール済み)
> **開発者向け**
>
-> デバッグビルドでは、ディレクトリ %AppData%\CorvusSKK_DEBUG の各ファイルに保存されます。
+> デバッグビルドでは、ディレクトリ %APPDATA%\CorvusSKK_DEBUG の各ファイルに保存されます。
>
> デバッグビルドでは、下記のディレクトリの優先順位で各ファイルが読み込まれます。
>
-> 1. %AppData%\CorvusSKK_DEBUG
+> 1. %APPDATA%\CorvusSKK_DEBUG
> 2. 実行ファイルと同じディレクトリ (ビルドするとディレクトリ installer\config-share から上書きコピーされます)
-### ユーザー辞書
+### ユーザー辞書ファイル
+
+後述の[ユーザー辞書](#ユーザー辞書)の項も合わせて参照してください。
-ユーザー辞書は、ディレクトリ %AppData%\CorvusSKK の各ファイルに保存されます。
+ユーザー辞書は、ディレクトリ %APPDATA%\CorvusSKK の各ファイルに保存されます。
| ファイル名 | 説明 |
-|---|---|
+| --- | --- |
| userdict.txt | ユーザー辞書 |
-| userdict.bk1
userdict.bk2
userdict.bk3 | ユーザー辞書バックアップ (3世代まで) |
+
+ユーザー辞書バックアップは、任意のディレクトリの各ファイルに保存されます。
+
+デフォルトは %APPDATA%\CorvusSKK で、設定ダイアログの「辞書2」タブのユーザー辞書バックアップディレクトリで設定可能です。
+
+| ファイル名 | 説明 |
+| --- | --- |
+| userdict.txt.*YYYYMMDDThhmmssZ*.bak | ユーザー辞書バックアップ (最大255世代まで)
*YYYYMMDDThhmmssZ* : バックアップされた日時 ISO8601 (UTC) |
UTF-16 (LE, BOMあり) のSKKユーザー辞書フォーマットで書き込まれます。
-ユーザー辞書を直接編集する際は、ログオンユーザー権限で動作している辞書管理プロセス (imcrvmgr.exe) をタスクマネージャなどで終了させた状態でおこなってください。
+ユーザー辞書を直接編集する際は、ログオンユーザー権限で動作している辞書管理プロセス (imcrvmgr.exe) を終了させた状態でおこなってください。
+
+* 設定ダイアログの「辞書2」タブの「辞書管理プロセス」で「終了」ボタンを押す。
+* タスクマネージャで 「CorvusSKK Dictionary Manager」 (imcrvmgr.exe) を終了する。
+* コマンドプロンプトなどで「taskkill /im imcrvmgr.exe」などと実行する。
編集後、以下のいずれかの操作をおこなうと辞書管理プロセスが自動的に起動します。
+* 設定ダイアログの「辞書2」タブの「辞書管理プロセス」で「実行」ボタンを押す。
* IME OFF → ON
* 仮名漢字変換開始
* 補完開始
-辞書管理プロセスを直接実行することも可能です。
+辞書管理プロセス (imcrvmgr.exe) を直接実行することも可能です。
ユーザー辞書は、辞書管理プロセスの起動時にメモリ上に読み込まれ、候補の確定、登録、削除があったとき、かつ、以下のいずれかのときに上書きされます。
@@ -170,19 +182,112 @@ UTF-16 (LE, BOMあり) のSKKユーザー辞書フォーマットで書き込ま
* IME ON 状態で別の IME に切り替えるとき
* アプリケーションがフォーカスを失うとき
* 辞書管理プロセスが終了するとき
-* スリープ、休止状態から復帰するとき
+* スリープ、休止状態から復帰したとき
+* 設定ダイアログの「辞書2」タブの「ユーザー辞書バックアップ」で手動バックアップを実行したとき
ユーザー辞書バックアップは辞書管理プロセスによって以下のいずれかのときに作成されます。
-* シャットダウン、再起動するとき
-* ログオフ、スリープ、休止状態から復帰するとき
+* ログオフ、シャットダウン、再起動するとき
+* スリープ、休止状態から復帰したとき
+* 設定ダイアログの「辞書2」タブの「ユーザー辞書バックアップ」で手動バックアップを実行したとき
+
+
+
+## 入力モード
+
+
+### 入力モードアイコン
+
+| ノーマルモード | プライベートモード | 説明 |
+| :---: | :---: | --- |
+| ![](installer/resource-md/00_input_mode_default.png) | ![](installer/resource-md/00_input_mode_default.png) | IME OFF |
+| ![](installer/resource-md/00_input_mode_hiragana.png) | ![](installer/resource-md/00_input_mode_p_hiragana.png) | ひらがなモード |
+| ![](installer/resource-md/00_input_mode_katakana.png) | ![](installer/resource-md/00_input_mode_p_katakana.png) | カタカナモード |
+| ![](installer/resource-md/00_input_mode_katakana1.png) | ![](installer/resource-md/00_input_mode_p_katakana1.png) | 半角カタカナモード |
+| ![](installer/resource-md/00_input_mode_jlatin.png) | ![](installer/resource-md/00_input_mode_p_jlatin.png) | 全角英数字モード |
+| ![](installer/resource-md/00_input_mode_ascii.png) | ![](installer/resource-md/00_input_mode_p_ascii.png) | ASCIIモード |
+
+通知領域の入力モードアイコンを左クリックすると、IME ON/OFF を切り替えます。
+
+
+### メニュー
+
+有効な項目にはチェックが入ります。
+
+| 言語バーから表示 | 通知領域から表示 |
+| :---: | :---: |
+| ![](installer/resource-md/01_input_menu_0.png) | ![](installer/resource-md/01_input_menu_1.png) |
+| 言語バーの入力モードアイコンを左クリック | 通知領域の入力モードアイコンを右クリック |
+
+| メニュー項目 | 説明 |
+| --- | --- |
+| CAPS | Caps Lock をトグルします。 |
+| KANA | カナキーロックをトグルします。 |
+| Private | プライベートモードをトグルします。 |
+| [かな] | ひらがなモードに遷移します。 |
+| [カナ] | カタカナモードに遷移します。 |
+| [-カナ] | 半角カタカナモードに遷移します。 |
+| [全英] | 全角英数字モードに遷移します。 |
+| [SKK] | ASCIIモードに遷移します。 |
+| [--] | IME OFF |
+| 設定 | 設定ダイアログを表示します。 |
+| キャンセル | メニューを閉じます。 |
+
+
+### デフォルトキー設定と入力モード遷移図
+
+![](installer/resource-md/02_key_and_mode.png)
+
+
+### 半角カタカナモード
+
+半角カタカナモードでは、ローマ字仮名変換のみ可能です。
+
+ひらがな/カタカナへの変換、仮名漢字変換は出来ません。
+
+
+### プライベートモード
+
+プライベートモードでは、通常の仮名漢字変換は可能ですが、ユーザー辞書の更新と削除をおこないません。
+
+また、辞書登録ウィンドウでの入力による確定も可能ですが、ユーザー辞書に登録されません。
+
+後述の[ユーザー辞書](#ユーザー辞書)の項を参照してください。
+
+
+
+## 設定
+
+
+### 設定ダイアログ
+
+設定ダイアログは、以下のいずれかの操作で開くことができます。
+
+* 言語バーを右クリックし、メニューから「設定」を選択する。「テキストサービスと入力言語」ダイアログの「インストールされているサービス」からCorvusSKKを選択し、プロパティボタンを押す。
+* 言語バーの入力モードアイコンを左クリックし、メニューから「設定」を選択する。
+* 言語バーのヘルプボタンを左クリックし、メニューから「CorvusSKK」を選択する。
+* Windows 8 以降の通知領域の入力モードアイコンを右クリックし、メニューから「設定」を選択する。
+* スタートメニューから CorvusSKK\CONFIG を実行する。
+* %SystemRoot%\System32\IME\IMCRVSKK\imcrvcnf.exe または %SystemRoot%\SysWOW64\IME\IMCRVSKK\imcrvcnf.exe を直接実行する
+ * コマンドライン引数、または実行ファイルやショートカットへのドラッグアンドドロップで、前述の設定ファイルを渡すことが可能です。
+
+設定ダイアログで保存した後は、IME OFF → ON で新しい設定が反映されます。
+
+IME ON/OFF のキーのみ、IME ON → OFF のときにも反映されます。
+
+
+### 仮想キーコード
+
+仮想キーコードの詳細はこちらを参照してください。 https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
+
+設定ダイアログのタブ「[辞書2](#ユーザー辞書)」「[キー0](#キー設定onoff)」「[キー2](#キー設定文字キー設定仮想キー)」のそれぞれ右上にある「仮想キーテスト」エディットボックスにフォーカスがある状態でキー入力すると仮想キーコードを表示します。
### SKK辞書
-![](installer/resource-md/01_dictionary.png)
+![](installer/resource-md/101_dictionary_1.png)
-SKK辞書の詳細はこちらを参照ください。
+SKK辞書の詳細はこちらを参照してください。
* https://skk-dev.github.io/dict/
@@ -194,7 +299,9 @@ SKK辞書の詳細はこちらを参照ください。
* http://openlab.ring.gr.jp/skk/skk/dic/
-SKK辞書ファイルの文字コードは、EUC-JIS-2004、UTF-8 (BOMなし/あり)、UTF-16 (LE, BOMあり) に対応しています。
+SKK辞書ファイルの文字コードは、EUC-JIS-2004、EUC-JP、UTF-8 (BOMなし/あり)、UTF-16 (LE, BOMあり) に対応しています。
+
+EUC-JP は、ASCII、JIS X 0208、JIS X 0201 片仮名、JIS X 0212 を実装する、いわゆる IANA の EUC-JP となっています。
アーカイブファイルフォーマットは tar、gzip に対応しています。
@@ -223,17 +330,51 @@ SKK辞書のダウンロード機能では HTTP, HTTPS が使用可能です。
同時に1つのみ使用可能です。IPv4、IPv6 に対応しています。
-通信に使用する文字コードは、EUC-JIS-2004、UTF-8 に対応していますが、通常のSKK辞書サーバーではデフォルトの EUC-JIS-2004 を使用してください。
+通信に使用する文字コードは、EUC-JIS-2004 / EUC-JP、UTF-8 に対応しています。
+
+通常のSKK辞書サーバーではデフォルトの EUC-JIS-2004 / EUC-JP を使用してください。
サーバーコンプリーション機能は未実装です。
+### ユーザー辞書
+
+![](installer/resource-md/102_dictionary_2.png)
+
+| 機能 | 説明 |
+| --- | --- |
+| 辞書管理プロセス | 辞書管理プロセスを終了または開始します。 |
+| ユーザーディレクトリ | ディレクトリ %APPDATA%\CorvusSKK をシェルで開きます。 |
+| システムディレクトリ | ディレクトリ %SystemRoot%\IME\IMCRVSKK をシェルで開きます。 |
+| ユーザー辞書バックアップ | ユーザー辞書バックアップのディレクトリと世代数を指定します。
また、そのディレクトリをシェルで開きます。
手動でバックアップを実行します。 |
+| プライベートモード | プライベートモードの任意切替のキーと自動切替を指定します。 |
+
+ユーザー辞書バックアップ
+
+* ディレクトリの指定には環境変数を使用することが可能です。
+* 存在しないディレクトリを指定した場合すぐにはシェルで開けません。
+ すぐに開くには、適用ボタンを押して設定を保存した後、辞書管理プロセスを終了→実行し、手動バックアップを実行してください。
+ 辞書管理プロセスがバックアップファイルを作成するときにディレクトリも作成します。
+* ディレクトリをWindowsネットワークの共有フォルダーにした場合、ログオフ/シャットダウン/再起動するときや、スリープ/休止状態から復帰したときに正常に保存されない可能性があります。
+* 手動バックアップを実行できる条件
+ * 辞書管理プロセスが実行中。
+ * ユーザー辞書バックアップのディレクトリと世代数が未編集、または編集した後に適用して保存済み。
+
+プライベートモード
+
+* 任意切替のデフォルトのキーは、Ctrl + Shift + F10 です。
+* 自動切替をONに設定すると、Edge の InPrivate ウィンドウ, Chrome のシークレットウィンドウ, Firefox のプライベートウィンドウなどで自動的にプライベートモードに切り替えられます。InputScope が IS_PRIVATE に設定されている入力が対象です。
+* 自動切替をOFFに設定すると、InputScope が IS_PRIVATE に設定されている入力でも自動的にプライベートモードになりません。
+
+「仮想キーテスト」エディットボックスにフォーカスがある状態でキー入力すると仮想キーコードを表示します。
+
+
### 動作
-![](installer/resource-md/02_behavior_1.png)
+![](installer/resource-md/103_behavior_1.png)
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 初期入力モード | プログラム起動時の入力モードを指定します。 |
| 送り仮名が決定したとき変換を開始する | 送り仮名を入力したとき自動的に変換を開始します。接頭辞も同様です。 |
| 送り仮名が一致した候補を優先する | 送り仮名ブロックの送り仮名が一致する候補を優先して出力します。 |
@@ -246,10 +387,10 @@ SKK辞書のダウンロード機能では HTTP, HTTPS が使用可能です。
| かな/カナ入力モードをトグルする | キー設定「かな/カナ」「カナ全英変換」のキーでひらがなモードに遷移します。
無効のときは、キー設定「ひらがな」のキーでひらがなモードに遷移してください。 |
| キー設定「直接入力」を確定入力で使用する | 確定入力のとき、キー設定の「直接入力」で設定された文字で始まるローマ字を仮名変換しません。
(ひらがな/カタカナ/半角カタカナモードのとき) |
-![](installer/resource-md/03_behavior_2.png)
+![](installer/resource-md/104_behavior_2.png)
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 複数補完/複数動的補完の表示数 | 複数補完、複数動的補完での1ページあたりの候補数を指定します。 |
| 複数補完を使用する | 通常の補完のとき、ユーザー辞書から補完された見出し語を一覧で表示します。
補完対象は「候補一覧の色」の「選択」、補完部分は「候補」の色が使用されます。 |
| 動的補完を使用する | 見出し語が入力されたとき、ユーザー辞書から補完された見出し語を表示します。 |
@@ -260,34 +401,35 @@ SKK辞書のダウンロード機能では HTTP, HTTPS が使用可能です。
### 表示
-![](installer/resource-md/04_display1.png)
+![](installer/resource-md/105_display_1.png)
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 候補一覧のフォント | 候補一覧に表示するフォントの種類、スタイル、サイズを指定します。 |
| 候補一覧の最大幅 | 候補一覧の最大幅のサイズを指定します。 |
| 候補一覧の色 | 候補一覧の色を指定します。 |
| 候補一覧の描画API | 候補一覧の描画をおこなうAPIを指定します。
Direct2Dと彩色の指定でカラーフォントを表示します。(Windows8.1以降) |
| 候補一覧表示に要する変換回数(0は表示無し) | 指定した回数変換すると候補一覧が表示されます。 |
+| 候補一覧表示のページ当たり表示数 | 一度に表示される候補の数を指定します。 |
| 候補一覧が表示無しのとき候補数を表示する | (<現在の候補の番号>/<候補数>) の形式を追加して表示します。 |
| 候補一覧を縦に表示する | 候補一覧で候補を縦に並べて表示します。 |
| 注釈を表示する | <候補><セミコロン><注釈> の形式で注釈を表示します。
「候補一覧」の指定で候補一覧に限定されます。 |
| ▽▼\*マークを表示する | 大切なものは目に見えないようです。 |
| ローマ字を表示する | 仮名文字のローマ字プレフィックスを表示します。
「全英」の指定でいわゆる全角文字で表示されます。 |
-![](installer/resource-md/05_display2.png)
+![](installer/resource-md/106_display_2.png)
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 入力モードを表示する | キャレットまたは辞書登録ウィンドウ付近に入力モードを表示します。
タイミングは、IME ON/OFF 変更、入力モード変更、IME ON/OFF キー押下、「\*無効\*」キー押下のときです。
表示する秒数として1〜60000ミリ秒を設定してください。デフォルト値は3000ミリ秒です。 |
| 入力モードの色 | 入力モード表示の色を指定します。 |
### 表示属性
-![](installer/resource-md/06_display_attribute_1.png)
+![](installer/resource-md/107_display_attribute_1.png)
-![](installer/resource-md/07_display_attribute_2.png)
+![](installer/resource-md/108_display_attribute_2.png)
入力中文字列の表示属性を設定します。
@@ -298,47 +440,65 @@ SKK辞書のダウンロード機能では HTTP, HTTPS が使用可能です。
### 候補一覧選択キー
-![](installer/resource-md/08_select_key.png)
+![](installer/resource-md/109_select_key.png)
+
+候補一覧に表示する文字とキーを設定します。数字、表示、予備1,2 のいずれかの入力で選択された候補が確定されます。
+
+「表示」にはUnicodeの基本多言語面と追加面の文字が使用可能です。追加面の文字の場合は、その文字で候補を確定することはできません。
+
+「予備1」「予備2」にはUnicodeの基本多言語面の文字のみ使用可能です。
-候補一覧での確定は、デフォルトで 1〜7 と ASDFJKL と asdfjkl を使用します。
+[表示1](#表示)の「候補一覧表示のページ当たり表示数」の設定によって一度に表示される数が決められます。
-コマンドプロンプト等では、デフォルトで 1〜9 と ASDFJKLGH と asdfjklgh を使用します。
+レガシータイプのコマンドプロンプト等の自前で候補を表示するアプリケーションでは、アプリケーション側が要求した数に従います。
候補一覧が表示されているとき、KANAキーロックは無視されます。
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 数字 | 選択キー (1〜9で固定) |
| 表示 | 選択キー (必須、候補一覧の表示にも使用) |
-| 予備1,2 | 選択キー (空でもOK) |
+| 予備1,2 | 選択キー (空でも可) |
+
+フォントによっては固定幅を持つ以下の文字が表示としては見易いようです。
+
+| 名称 | 範囲 | 文字 | 備考 |
+| --- | --- | --- | --- |
+| PARENTHESIZED
LATIN SMALL LETTER | U+249C
~U+24B5 | ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ | |
+| CIRCLED
LATIN CAPITAL LETTER | U+24B6
~U+24CF | ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ | Mは地下鉄の絵文字? |
+| CIRCLED
LATIN SMALL LETTER | U+24D0
~U+24E9 | ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ | JIS X 0213
1-12-33~1-12-58 |
+| FULLWIDTH
LATIN CAPITAL LETTER | U+FF21
~U+FF3A | ABCDEFGHIJKLMNOPQRSTUVWXYZ | JIS X 0208
3-33~3-58 |
+| FULLWIDTH
LATIN SMALL LETTER | U+FF41
~U+FF5A | abcdefghijklmnopqrstuvwxyz | JIS X 0208
3-65~3-90 |
+| PARENTHESIZED
LATIN CAPITAL LETTER | U+1F110
~U+1F129 | 🄐🄑🄒🄓🄔🄕🄖🄗🄘🄙🄚🄛🄜🄝🄞🄟🄠🄡🄢🄣🄤🄥🄦🄧🄨🄩 | |
+| SQUARED
LATIN CAPITAL LETTER | U+1F130
~U+1F149 | 🄰🄱🄲🄳🄴🄵🄶🄷🄸🄹🄺🄻🄼🄽🄾🄿🅀🅁🅂🅃🅄🅅🅆🅇🅈🅉 | |
+| NEGATIVE CIRCLED
LATIN CAPITAL LETTER | U+1F150
~U+1F169 | 🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩 | |
+| NEGATIVE SQUARED
LATIN CAPITAL LETTER | U+1F170
~U+1F189 | 🅰🅱🅲🅳🅴🅵🅶🅷🅸🅹🅺🅻🅼🅽🅾🅿🆀🆁🆂🆃🆄🆅🆆🆇🆈🆉 | ABOは血液型の絵文字
Pは駐車場の絵文字 |
### キー設定(ON/OFF)
-![](installer/resource-md/09_on_off_key.png)
+![](installer/resource-md/110_on_off_key.png)
IME ON/OFF のキーをそれぞれ指定します。
仮想キーコード、Alt、Control、Shift の組合せを設定してください。
-「仮想キー表示」エディットボックスにフォーカスがある状態でキー入力すると仮想キーコードを表示します。
-
-仮想キーコードの詳細はこちらを参照ください。 https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes
-
最大で ON/OFF それぞれ8行ずつです。
+「仮想キーテスト」エディットボックスにフォーカスがある状態でキー入力すると仮想キーコードを表示します。
+
### キー設定(文字)、キー設定(仮想キー)
-![](installer/resource-md/10_key1_character.png)
+![](installer/resource-md/111_key1_character.png)
-![](installer/resource-md/11_key2_virtual_key.png)
+![](installer/resource-md/112_key2_virtual_key.png)
各機能に対してキーを正規表現で設定してください。
-Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用しています。
+Visual C++ 2022 の 正規表現で、文法は ECMAScript を使用しています。
-正規表現の詳細はこちらを参照ください。 https://docs.microsoft.com/en-us/cpp/standard-library/regular-expressions-cpp?view=vs-2019
+正規表現の詳細はこちらを参照してください。 https://learn.microsoft.com/en-us/cpp/standard-library/regular-expressions-cpp?view=msvc-170
無効な正規表現で設定するとその機能は無効となります。警告等は表示されません。
@@ -350,101 +510,94 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
例えば、Shift+Tabであれば「S\x09」、Ctrl+Returnであれば「C\x0D」と記述します。
+「仮想キーテスト」エディットボックスにフォーカスがある状態でキー入力すると仮想キーコードを表示します。
+
### キー設定デフォルト
キー設定 ON/OFF
-| 機能 | キー | 説明 |
-|---|---|---|
-| ON / OFF | Alt+\` | 0xC0 + Alt |
-| 〃 | 漢字 | 0x19 |
-| 〃 | (Alt+半角/全角 Alt+\`) | 0x19 |
-| 〃 | 半角/全角(Ctrl+\`) | 0xF3, 0xF4 |
+| ON | OFF | キー | 仮想キーコード |
+| --- | --- | --- | --- |
+| ✓ | ✓ | Alt + \` | 0xC0 + Alt |
+| ✓ | ✓ | 漢字
Alt + 半角/全角
Alt + \` | 0x19 |
+| ✓ | ✓ | 半角/全角
Ctrl + \` | 0xF3, 0xF4 |
+| ✓ | | IME On | 0x16 |
+| | ✓ | IME Off | 0x1A |
キー設定(文字)
| 機能 | キー | 説明 |
-|---|---|---|
-| かな/カナ | q | ひらがな/カタカナモード、かなカナ変換 |
-| カナ全英変換 | Ctrl+q | ひらがな/半角カタカナモード
ひらがなカタカナ→半角カタカナ変換
abbrev→全角英数字変換 |
-| 全英 | L | 全英モード |
-| ASCII | l | アスキーモード |
-| ひらがな | | ひらがなモード |
-| abbrev | / | abbrevモード |
-| 接辞 | < > | 接頭辞・接尾辞 |
-| 次候補 | Space Ctrl+n | 辞書検索開始、次候補 |
-| 前候補 | x Ctrl+p | 「後退」のキーも使用可 |
-| 辞書削除 | X Ctrl+x | ユーザー辞書から候補を削除 |
-| 次補完 | Ctrl+i(Tab) | 補完開始、次見出し語候補 |
-| 前補完 | Ctrl+u | 前見出し語候補 |
-| 補完と変換 | Ctrl+c | 最初の見出し語候補で辞書検索開始
skk-start-henkan-with-completion-char |
-| 絞り込み | | 候補を絞り込む見出し語の入力開始
skk-hint-start-char |
-| 変換位置 | | 変換位置指定
2回連続入力で文字自体が確定する
skk-sticky-key |
-| 直接入力 | 0〜9 | 見出し語入力でローマ字仮名変換しない |
-| 確定 | Ctrl+m(Return) Ctrl+j | |
-| 取消 | Ctrl+g Ctrl+[(Escape) | |
-| 後退 | Ctrl+h(BS) | |
-| 削除 | Ctrl+d DEL(Ctrl+BS) | |
-| \*無効\* | | アプリケーション側に非通知
辞書登録/削除の確定無効 |
-| 左移動 | Ctrl+b | |
-| 先頭移動 | Ctrl+a | |
-| 右移動 | Ctrl+f | |
-| 末尾移動 | Ctrl+e | |
-| 貼付 | Ctrl+y Ctrl+v | クリップボードの文字列を貼り付け |
+| --- | --- | --- |
+| かな/カナ | q | ひらがな/カタカナモード、かなカナ変換 |
+| カナ全英変換 | Ctrl + q | ひらがな/半角カタカナモード
ひらがなカタカナ→半角カタカナ変換
abbrev→全角英数字変換 |
+| 全英 | L | 全英モード |
+| ASCII | l | アスキーモード |
+| ひらがな | | ひらがなモード |
+| abbrev | / | abbrevモード |
+| 接辞 | < > | 接頭辞・接尾辞 |
+| 次候補 | Space
Ctrl + n | 辞書検索開始、次候補 |
+| 前候補 | x
Ctrl + p | 「後退」のキーも使用可 |
+| 辞書削除 | X
Ctrl + x | ユーザー辞書から候補を削除 |
+| 次補完 | Ctrl + i (Tab) | 補完開始、次見出し語候補 |
+| 前補完 | Ctrl + u | 前見出し語候補 |
+| 補完と変換 | Ctrl + c | 最初の見出し語候補で辞書検索開始
skk-start-henkan-with-completion-char |
+| 絞り込み | | 候補を絞り込む見出し語の入力開始
skk-hint-start-char |
+| 変換位置 | | 変換位置指定
2回連続入力で文字自体が確定する
skk-sticky-key |
+| 直接入力 | 0〜9 | 見出し語入力でローマ字仮名変換しない |
+| 確定 | Ctrl + m (Return)
Ctrl + j | |
+| 取消 | Ctrl + g
Ctrl + [ (Escape) | |
+| 後退 | Ctrl + h (BS) | |
+| 削除 | Ctrl + d
DEL (Ctrl + BS) | |
+| \*無効\* | | アプリケーション側に非通知
辞書登録/削除の確定無効 |
+| 左移動 | Ctrl + b | |
+| 先頭移動 | Ctrl + a | |
+| 右移動 | Ctrl + f | |
+| 末尾移動 | Ctrl + e | |
+| 貼付 | Ctrl + y Ctrl + v | クリップボードの文字列を貼り付け |
+| 再変換 | | 選択された文字列でユーザー辞書の送りなしエントリを
逆引きしてから通常の辞書検索 |
キー設定(仮想キー)
| 機能 | キー | 説明 |
-|---|---|---|
-| かな/カナ | | ひらがな/カタカナモード、かなカナ変換 |
-| カナ全英変換 | | ひらがな/半角カタカナモード
ひらがなカタカナ→半角カタカナ変換
abbrev→全角英数字変換 |
-| 全英 | | 全英モード |
-| ASCII | | アスキーモード |
-| ひらがな | Ctrl+0x4A (Ctrl+j) | ひらがなモード |
-| abbrev | | abbrevモード |
-| 接辞 | | 接頭辞・接尾辞 |
-| 次候補 | 0x22 (PgDn) | 辞書検索開始、次候補 |
-| 前候補 | 0x21 (PgUp) | 「後退」のキーも使用可 |
-| 辞書削除 | | ユーザー辞書から候補を削除 |
-| 次補完 | | 補完開始、次見出し語候補 |
-| 前補完 | Shift+0x09(Shift+Tab) | 前見出し語候補 |
-| 補完と変換 | | 先頭の見出し語候補で辞書検索開始
skk-start-henkan-with-completion-char |
-| 絞り込み | | 候補を絞り込む見出し語の入力開始
skk-hint-start-char |
-| 変換位置 | | 変換位置指定
skk-sticky-key |
-| 直接入力 | | 見出し語入力でローマ字仮名変換しない(不使用) |
-| 確定 | | |
-| 取消 | | |
-| 後退 | | |
-| 削除 | 0x2E (Delete) | |
-| \*無効\* | Ctrl+0x4A (Ctrl+j) | アプリケーション側に非通知
辞書登録/削除の確定無効 |
-| 左移動 | 0x25 (カーソル左) | |
-| 先頭移動 | 0x26 (カーソル上) | |
-| 右移動 | 0x27 (カーソル右) | |
-| 末尾移動 | 0x28 (カーソル下) | |
-| 貼付 | | クリップボードの文字列を貼り付け |
-
-
-### キー設定と入力モード遷移図
-
-![](installer/resource-md/20_key_and_mode.png)
-
-
-### 半角カタカナモード
-
-半角カタカナモードでは、ローマ字仮名変換のみ可能です。
-
-ひらがな/カタカナへの変換、仮名漢字変換は出来ません。
+| --- | --- | --- |
+| かな/カナ | | ひらがな/カタカナモード、かなカナ変換 |
+| カナ全英変換 | | ひらがな/半角カタカナモード
ひらがなカタカナ→半角カタカナ変換
abbrev→全角英数字変換 |
+| 全英 | | 全英モード |
+| ASCII | | アスキーモード |
+| ひらがな | Ctrl + 0x4A (Ctrl + j) | ひらがなモード |
+| abbrev | | abbrevモード |
+| 接辞 | | 接頭辞・接尾辞 |
+| 次候補 | 0x22 (PgDn) | 辞書検索開始、次候補 |
+| 前候補 | 0x21 (PgUp) | 「後退」のキーも使用可 |
+| 辞書削除 | | ユーザー辞書から候補を削除 |
+| 次補完 | | 補完開始、次見出し語候補 |
+| 前補完 | Shift + 0x09 (Shift + Tab) | 前見出し語候補 |
+| 補完と変換 | | 先頭の見出し語候補で辞書検索開始
skk-start-henkan-with-completion-char |
+| 絞り込み | | 候補を絞り込む見出し語の入力開始
skk-hint-start-char |
+| 変換位置 | | 変換位置指定
skk-sticky-key |
+| 直接入力 | | 見出し語入力でローマ字仮名変換しない |
+| 確定 | | |
+| 取消 | | |
+| 後退 | | |
+| 削除 | 0x2E (Delete) | |
+| \*無効\* | Ctrl + 0x4A (Ctrl + j) | アプリケーション側に非通知
辞書登録/削除の確定無効 |
+| 左移動 | 0x25 (カーソル左) | |
+| 先頭移動 | 0x26 (カーソル上) | |
+| 右移動 | 0x27 (カーソル右) | |
+| 末尾移動 | 0x28 (カーソル下) | |
+| 貼付 | | クリップボードの文字列を貼り付け |
+| 再変換 | | 選択された文字列でユーザー辞書の送りなしエントリを
逆引きしてから通常の辞書検索 |
### 変換位置指定
-![](installer/resource-md/12_conversion_point.png)
+![](installer/resource-md/113_conversion_point.png)
変換位置での挙動を指定します。最大で256行です。
| 機能 | 説明 |
-|---|---|
+| --- | --- |
| 開始 | 変換位置開始キー |
| 代替 | 変換位置開始キーに代わってローマ字仮名変換に使用する |
| 送り | 辞書検索に使用する送りローマ字 |
@@ -452,23 +605,23 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例1)AZIK風に以下のように設定したとき「KaQ」と入力すると、表示「▽か\*ん」、辞書検索キー「かn」と入力できます。
| 開始 | 代替 | 送り |
- |---|---|---|
+ | --- | --- | --- |
| Q | q | n |
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 |
- |---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- |
| q | ん | ン | ン | OFF | OFF |
* 例2)以下のように設定したとき、かな入力で送り仮名の最初を「あ」の状態で辞書検索を開始すると、送りローマ字が「a」となります。
| 開始 | 代替 | 送り |
- |---|---|---|
+ | --- | --- | --- |
| | あ | a |
### ローマ字・仮名変換表
-![](installer/resource-md/13_kana.png)
+![](installer/resource-md/114_kana.png)
ローマ字、平仮名、片仮名、所謂半角片仮名、促音/撥音(ん)、待機の組み合せを指定します。
@@ -477,7 +630,7 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例1) 以下のように設定したとき「motto」と入力することで「もっと」と入力することができます。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 |
- |---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- |
| mo | も | モ | モ | OFF | OFF |
| tt | っ | ッ | ッ | **ON** | OFF |
| to | と | ト | ト | OFF | OFF |
@@ -485,7 +638,7 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例2) 以下のように設定したとき「dango」と入力することで「だんご」と入力することができます。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 |
- |---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- |
| da | だ | ダ | ダ | OFF | OFF |
| ng | ん | ン | ン | **ON** | OFF |
| go | ご | ゴ | ゴ | OFF | OFF |
@@ -493,17 +646,17 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例3) 以下のように設定したとき「w」の連続入力により草を生やすことができます。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 | 説明 |
- |---|---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- | --- |
| ww | w | w | w | **ON** | OFF | Latin Small Letter W → Fullwidth Latin Small Letter W |
| w | w | w | w | OFF | OFF | Latin Small Letter W → Fullwidth Latin Small Letter W |
* 「待機」
* 「待機」がONのとき、入力した文字をローマ字仮名変換した結果 (変換出来ないときは入力した文字そのまま) がローマ字として扱われ、辞書検索開始、確定、補完開始、ローマ字に設定されていない組み合わせ、のいずれかになるまで仮名の最終的な決定が遅延されます。
- * 「待機」機能サンプルを参照してください。[https://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample/config - wait-sample.xml](https://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample/config%20-%20wait-sample.xml)
+ * 「待機」機能サンプルを参照してください。[https\://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample/config - wait-sample.xml](https://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample/config%20-%20wait-sample.xml)
* 例1) カナキーロックした状態で「か」と濁点を入力することで「が」と入力することができます。濁点、半濁点のローマ字部分は、現状1文字のみ対応しています。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 | 説明 |
- |---|---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- | --- |
| カ | か | カ | カ | OFF | **ON** | JIS X 0201 仮名 → JIS X 0208 仮名 |
| ゙ | ゛ | ゛ | ゙ | OFF | **ON** | JIS X 0201 濁点 → JIS X 0208 濁点 |
| か゛ | が | ガ | ガ | OFF | ON または OFF | 仮名と濁点の合成
待機OFFのとき直ちに確定または辞書検索開始します |
@@ -511,7 +664,7 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例2) 以下のように設定したとき「zsssss …」と入力することで「☆」と「★」が繰り返され任意のタイミングで確定することができます。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 | 説明 |
- |---|---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- | --- |
| zs | ☆ | ☆ | ☆ | OFF | **ON** | |
| ☆s | ★ | ★ | ★ | OFF | **ON** | |
| ★s | ☆ | ☆ | ☆ | OFF | **ON** | |
@@ -519,7 +672,7 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
* 例3) 以下のように設定したとき「w」の連続入力により草を生やすことができます。
| ローマ字 | かな | カナ | カナ | 促/ん | 待機 | 説明 |
- |---|---|---|---|---|---|---|
+ | --- | --- | --- | --- | --- | --- | --- |
| w | w | w | w | OFF | **ON** | Latin Small Letter W → Fullwidth Latin Small Letter W |
平仮名/片仮名変換では基本的に1文字ずつ変換されます。
@@ -546,7 +699,7 @@ Visual C++ 2019 の 正規表現で、文法は ECMAScript を使用していま
### ASCII・全英変換表
-![](installer/resource-md/14_full_width_latin.png)
+![](installer/resource-md/115_full_width_latin.png)
ASCII、全英文字の組み合せを指定します。最大で128行です。
@@ -559,36 +712,36 @@ ASCII、全英文字の組み合せを指定します。最大で128行です。
辞書管理プロセス (imcrvmgr.exe) の各機能の拡張、プログラム実行変換もどき、数値変換をLuaスクリプトで実装しています。
-現在使用しているLuaのバージョンは5.3.5です。
+現在使用しているLuaのバージョンは5.4.7です。
-詳細はこちらを参照ください。https://www.lua.org/manual/5.3/manual.html
+詳細はこちらを参照してください。https://www.lua.org/manual/5.4/manual.html
Lua内部の文字コードをUTF-8に決め打ちして、Unicode版のWindowsAPIとCランタイム関数を呼ぶようにパッチを当てています。
スクリプトファイルの文字コードはUTF-8のみに対応しています。
-辞書管理プロセスのカレントディレクトリは %AppData%\CorvusSKK になっています。
+辞書管理プロセスのカレントディレクトリは %APPDATA%\CorvusSKK になっています。
コンソールプログラムのlua.exeが %SystemRoot%\System32\IME\IMCRVSKK と %SystemRoot%\SysWOW64\IME\IMCRVSKK にあるので、カスタマイズする際のデバッグ用に使ってください。
辞書管理プロセスの起動時にスクリプトファイル (init.lua) が下記の優先順位で読み込まれます。
-1. %AppData%\CorvusSKK\init.lua
+1. %APPDATA%\CorvusSKK\init.lua
2. %SystemRoot%\IME\IMCRVSKK\init.lua (インストーラーによりインストール済み)
> **開発者向け**
>
-> デバッグビルドでは、辞書管理プロセスのカレントディレクトリは %AppData%\CorvusSKK_DEBUG になっています。
+> デバッグビルドでは、辞書管理プロセスのカレントディレクトリは %APPDATA%\CorvusSKK_DEBUG になっています。
>
> デバッグビルドでは、下記の優先順位でスクリプトファイルが読み込まれます。
>
-> 1. %AppData%\CorvusSKK_DEBUG\init.lua
+> 1. %APPDATA%\CorvusSKK_DEBUG\init.lua
> 2. 実行ファイルと同じディレクトリのinit.lua (ビルドするとディレクトリ installer\config-lua から上書きコピーされます)
### プログラム実行変換もどき
-![](installer/resource-md/21_convert_program.png)
+![](installer/resource-md/201_convert_program.png)
Emacs Lispのプログラム実行変換に対応していますが、あくまで「もどき」なのでご了承ください。
@@ -597,7 +750,7 @@ Emacs Lisp 辞書ファイル (SKK-JISYO.lisp) などが必要です。 https://
以下のシンボルに大体対応しています。
| 名称 | 説明 |
-|---|---|
+| --- | --- |
| nil | |
| t | |
| lambda | |
@@ -628,7 +781,7 @@ Emacs Lisp 辞書ファイル (SKK-JISYO.lisp) などが必要です。 https://
| skk-relative-date | |
| skk-ignore-dic-word | デフォルト無効 |
| skk-omikuji | 独自実装。おみくじを引くことができます。『(skk-omikuji)』 |
-| skk-strftime | 独自実装。日時書式出力『(skk-strftime format [unit, diff])』
format : https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?view=vs-2019
unit : 単位 "year", "month", "day", "hour", "min", "sec"
diff : 現在とunitとの差分 |
+| skk-strftime | 独自実装。日時書式出力『(skk-strftime format [unit diff])』
format : 以下のstrftime関数のリンク先を参照
unit : 単位 "year", "month", "day", "hour", "min", "sec"
diff : 現在とunitとの差分 |
| fill-column | 70で固定 |
| comment-start | "/\*" |
| comment-end | "\*/" |
@@ -639,12 +792,14 @@ skk-omikuji 辞書 https://github.com/nathancorvussolis/corvusskk/blob/master/in
skk-strftime 辞書 https://github.com/nathancorvussolis/corvusskk/blob/master/installer/config-sample/skk-strftime.txt
+strftime 関数 https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l?view=msvc-170
+
### 数値変換
-![](installer/resource-md/22_convert_number.png)
+![](installer/resource-md/202_convert_number.png)
-タイプ0〜3,5,8,9に対応しています。
+タイプ0,1,2,3,4,5,8,9に対応しています。
タイプ3と5での数値は0〜10^72-1の整数に対応しています。
@@ -653,20 +808,35 @@ skk-strftime 辞書 https://github.com/nathancorvussolis/corvusskk/blob/master/i
見出し語として # (ナンバーサイン)を含み、候補として # と数字を含むエントリが辞書に存在する必要があります。(例:「めいじ#ねん /明治#3年/」)
| 候補 | 説明 | 例 |
-|---|---|---|
+| --- | --- | --- |
| #0 | タイプ0 無変換 |「1234567890」→「1234567890」 |
| #1 | タイプ1 全角 |「1234567890」→「1234567890」 |
| #2 | タイプ2 漢数字 位取りあり |「1234567890」→「一二三四五六七八九〇」 |
| #3 | タイプ3 漢数字 位取りなし |「1234567890」→「十二億三千四百五十六万七千八百九十」 |
+| #4 | タイプ4 数値再変換 |「123」→見出し語「123」の候補1つ目 |
| #5 | タイプ5 大字 |「1234567890」→「拾弐億参千四百五拾六万七千八百九拾」 |
| #6 | タイプ6 ローマ数字(独自) |「1234」→「MCCXXXIV」 |
| #8 | タイプ8 桁区切り |「1234567890」→「1,234,567,890」 |
| #9 | タイプ9 将棋 |「12kin」→「1二金」 |
+タイプ4には DDSKK と以下の相違があります。
+辞書に以下のようなエントリがあり「p125」を見出し語として変換したとき、数値エントリの1つ目だけ使用されます。
+
+ ;; 数値変換タイプ4辞書
+ ;; okuri-ari entries.
+ ;; okuri-nasi entries.
+ p# /#4/@#4/
+ 125 /東京都葛飾区/葛飾区/
+
+| \ | 数値変換タイプ4変換結果 |
+| --- | --- |
+| DDSKK | /東京都葛飾区/葛飾区/@東京都葛飾区/@葛飾区/ |
+| 本ソフト | /東京都葛飾区/@東京都葛飾区/ |
+
### Unicodeコードポイント変換
-![](installer/resource-md/23_convert_unicode_codepoint.png)
+![](installer/resource-md/203_convert_unicode_codepoint.png)
「U+XXXXXX」( コードポイント XXXXXX : 0000-FFFF または 10000-10FFFF ) または「uxxxxxx」( コードポイント xxxxxx : 0000-ffff または 10000-10ffff ) のフォーマットで変換してください。
@@ -676,7 +846,7 @@ skk-strftime 辞書 https://github.com/nathancorvussolis/corvusskk/blob/master/i
### JIS X 0213面区点番号、JIS X 0208区点番号変換
-![](installer/resource-md/24_convert_unicode_jisx0213.png)
+![](installer/resource-md/204_convert_unicode_jisx0213.png)
JIS X 0213では「X-YY-ZZ」( 面 X : 1-2、 区 YY : 01-94、点 ZZ: 01-94 )、JIS X 0208では「YY-ZZ」( 区 YY : 01-94、点 ZZ: 01-94 ) のフォーマットで変換してください。Unicodeコードポイントが注釈として付加されます。
@@ -686,7 +856,7 @@ JIS X 0213では「X-YY-ZZ」( 面 X : 1-2、 区 YY : 01-94、点 ZZ: 01-94 )
### 文字コード表記変換
-![](installer/resource-md/25_convert_character_display.png)
+![](installer/resource-md/205_convert_character_display.png)
「?X」( X : 任意の1文字以上の文字列 ) のフォーマットで変換してください。
@@ -701,7 +871,7 @@ ASCII, JIS X 0201, JIS X 0213に変換できない文字が含まれていた場
### 注釈の登録
-![](installer/resource-md/26_register_annotation.png)
+![](installer/resource-md/206_register_annotation.png)
辞書登録のとき、登録する候補の入力と同時におこないます。
@@ -719,74 +889,73 @@ ASCII, JIS X 0201, JIS X 0213に変換できない文字が含まれていた場
* 「;;セミコロン」と入力する。
-### Windows 8, 8.1, 10 のタッチキーボード
+### 開発環境
-タッチパネルを搭載したマシンでハードウェアキーボードに準拠したレイアウトを使用するには、以下の操作をおこなってください。
+Visual Studio Community 2022 17.10.5
-* Windows 8 の場合
- * 「PC設定」の画面 → 「全般」を選択 → 「タッチキーボード」の項目 → 「ハードウェアキーボードに準拠したレイアウトを使えるようにする」をオン
+* Desktop development with C++
-* Windows 8.1 の場合
- * 「PC設定」の画面 → 「PCとデバイス」の画面 → 「入力」を選択 → 「ハードウェアキーボードに準拠したレイアウトをタッチキーボードオプションとして追加する」をオン
+* Indivisual components
+ * Compilers, build tools, and runtimes
+ * MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest)
+ * MSVC v143 - VS 2022 C++ ARM build tools (Latest)
+ * MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)
+ * SDKs, libraries, and frameworks
+ * C++ ATL for latest v143 build tools (x86 & x64)
+ * C++ ATL for latest v143 build tools (ARM)
+ * C++ ATL for latest v143 build tools (ARM64/ARM64EC)
+ * Windows 11 SDK (10.0.22621.0) ⦅ バージョン固定 , ARM32 用 ⦆
+ * Windows 11 SDK (10.0.26100.0) ⦅ またはそれ以降 , x86/x64/ARM64/ARM64EC 用 ⦆
-* Windows 10 (Ver.1703 まで) の場合
- * 「デバイス」の画面 → 「入力」を選択 → 「ハードウェアキーボードに準拠したレイアウトをタッチキーボードオプションとして追加する」をオン
+WiX Toolset v4.0.5
-タッチパネルを搭載していないマシンでハードウェアキーボードに準拠したレイアウトを使用するには、レジストリに以下の値を設定してください。
+* 要 .NET SDK 6 以降
-Windows 10 (Ver.1703 まで) の場合
+* ビルド用バッチファイル内の dotnet build コマンドによって暗黙的に復元
- [HKEY_CURRENT_USER\SOFTWARE\Microsoft\TabletTip\1.7]
- "EnableCompatibilityKeyboard"=dword:00000001
+pandoc 3.3
-Windows 10 (Ver.1709 から) の場合
- [HKEY_CURRENT_USER\SOFTWARE\Microsoft\TabletTip\1.7]
- "DisableNewKeyboardExperience"=dword:00000001
+### ビルド手順
+ビルド
-### 開発環境
+ > installer\_solution_build.cmd
-Visual Studio Community 2019 16.5.4
+ > installer\_build.cmd
-* Desktop development with C++
-* MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.25)
-* MSVC v142 - VS 2019 C++ ARM build tools (v14.25)
-* MSVC v142 - VS 2019 C++ ARM64 build tools (v14.25)
-* C++ ATL for latest v142 build tools (x86 & x64)
-* C++ ATL for latest v142 build tools (ARM)
-* C++ ATL for latest v142 build tools (ARM64)
+ビルド & 署名 & 検証
-WiX Toolset v3.11.2
+ > installer\_solution_build.cmd
-pandoc 2.9.2.1
+ > installer\_sign.cmd
+ * : SHA-1 thumbprint of certificate
+ * : RFC-3161 timestamp server
-### ビルド手順
+ > installer\_verify.cmd
-ビルド
+デバッグビルド
- > installer\_solution_build.cmd
- > installer\_build.cmd
+ > installer\_solution_build_debug.cmd
-ビルド & 署名 & 検証
+デバッグビルド IME の登録 (x86, x64)
- > installer\_solution_build.cmd
- > installer\_sign.cmd
+ > installer\_debug_reg.cmd
- * : SHA-1 hash of certificate for SHA-256 file digest algorithm
- * : SHA-256 RFC-3161 timestamp server
+デバッグビルド IME の登録解除 (x86, x64)
- > installer\_verify.cmd
+ > installer\_debug_unreg.cmd
-クリア
+クリーン
> installer\_solution_clean.cmd
+
> installer\_clean.cmd
---
-Copyright (C) 2011-2020 SASAKI Nobuyuki
+Copyright (C) 2011-2024 SASAKI Nobuyuki
nathancorvussolis@gmail.com
diff --git a/common/common.cpp b/common/common.cpp
index 2902eb1f..f110b077 100644
--- a/common/common.cpp
+++ b/common/common.cpp
@@ -3,18 +3,18 @@
#pragma comment(lib, "bcrypt.lib")
-#define CCSUTF16 L", ccs=UTF-16LE"
-#define CCSUTF8 L", ccs=UTF-8"
-LPCWSTR RccsUTF16 = L"r" CCSUTF16;
-LPCWSTR WccsUTF16 = L"w" CCSUTF16;
-LPCWSTR RccsUTF8 = L"r" CCSUTF8;
-LPCWSTR WccsUTF8 = L"w" CCSUTF8;
-LPCWSTR RB = L"rb";
-LPCWSTR WB = L"wb";
+#define CCSUTF16 L",ccs=UTF-16LE"
+#define CCSUTF8 L",ccs=UTF-8"
+LPCWSTR modeRccsUTF16 = L"rt" CCSUTF16;
+LPCWSTR modeWccsUTF16 = L"wt" CCSUTF16;
+LPCWSTR modeRccsUTF8 = L"rt" CCSUTF8;
+LPCWSTR modeWccsUTF8 = L"wt" CCSUTF8;
+LPCWSTR modeRT = L"rt";
+LPCWSTR modeRB = L"rb";
+LPCWSTR modeWB = L"wb";
LPCWSTR fnconfigxml = L"config.xml"; //設定
LPCWSTR fnuserdic = L"userdict.txt"; //ユーザー辞書
-LPCWSTR fnuserbak = L"userdict.bk"; //ユーザー辞書バックアッププレフィックス
LPCWSTR fnskkdic = L"skkdict.txt"; //取込SKK辞書
LPCWSTR fninitlua = L"init.lua"; //init.lua
@@ -109,95 +109,29 @@ BOOL IsWindowsVersionOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion, DWORD d
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, mask);
}
-BOOL GetDigest(LPCWSTR pszAlgId, CONST PBYTE data, DWORD datalen, PBYTE digest, DWORD digestlen)
-{
- BOOL bRet = FALSE;
-
- if (digest == nullptr || data == nullptr)
- {
- return FALSE;
- }
-
- ZeroMemory(digest, digestlen);
-
- BCRYPT_ALG_HANDLE hAlg;
- NTSTATUS status = BCryptOpenAlgorithmProvider(&hAlg, pszAlgId, nullptr, 0);
- if (BCRYPT_SUCCESS(status))
- {
- DWORD cbHashObject;
- ULONG cbResult;
- status = BCryptGetProperty(hAlg, BCRYPT_OBJECT_LENGTH, (PBYTE)&cbHashObject, sizeof(DWORD), &cbResult, 0);
- if (BCRYPT_SUCCESS(status))
- {
- PBYTE pbHashObject = (PBYTE)LocalAlloc(LPTR, cbHashObject);
- if (pbHashObject != nullptr)
- {
- BCRYPT_HASH_HANDLE hHash;
- status = BCryptCreateHash(hAlg, &hHash, pbHashObject, cbHashObject, nullptr, 0, 0);
- if (BCRYPT_SUCCESS(status))
- {
- status = BCryptHashData(hHash, data, datalen, 0);
- if (BCRYPT_SUCCESS(status))
- {
- status = BCryptFinishHash(hHash, digest, digestlen, 0);
- if (BCRYPT_SUCCESS(status))
- {
- bRet = TRUE;
- }
- }
- BCryptDestroyHash(hHash);
- }
- LocalFree(pbHashObject);
- }
- }
- BCryptCloseAlgorithmProvider(hAlg, 0);
- }
-
- return bRet;
-}
-
BOOL IsLittleEndian()
{
ULONG n = 1;
return (*(UCHAR *)&n == 1);
}
-ULONG htonlc(ULONG h)
+ULONG bswap_l(ULONG l)
{
- if (IsLittleEndian())
- {
- h = (h << 24) | ((h & 0x0000FF00) << 8) |
- ((h >> 8) & 0x0000FF00) | (h >> 24);
- }
- return h;
+ return (IsLittleEndian() ? _byteswap_ulong(l) : l);
}
-ULONG ntohlc(ULONG n)
+USHORT bswap_s(USHORT s)
{
- return htonlc(n);
-}
-
-USHORT htonsc(USHORT h)
-{
- if (IsLittleEndian())
- {
- h = (h << 8) | (h >> 8);
- }
- return h;
-}
-
-USHORT ntohsc(USHORT n)
-{
- return htonsc(n);
+ return (IsLittleEndian() ? _byteswap_ushort(s) : s);
}
BOOL GetUUID5(REFGUID rguid, CONST PBYTE name, DWORD namelen, LPGUID puuid)
{
BOOL bRet = FALSE;
- CONST LPCWSTR pszAlgId = BCRYPT_SHA1_ALGORITHM;
- CONST DWORD dwDigestLen = 20;
- CONST USHORT maskVersion = 0x5000;
GUID lguid = rguid;
+ BCRYPT_ALG_HANDLE hAlgorithm = BCRYPT_SHA1_ALG_HANDLE;
+ CONST DWORD DIGEST_LENGTH = 20;
+ CONST USHORT MASK_VERSION = 0x5000;
if (name == nullptr || namelen == 0 || puuid == nullptr)
{
@@ -208,25 +142,32 @@ BOOL GetUUID5(REFGUID rguid, CONST PBYTE name, DWORD namelen, LPGUID puuid)
if (pMessage != nullptr)
{
//network byte order
- lguid.Data1 = htonlc(lguid.Data1);
- lguid.Data2 = htonsc(lguid.Data2);
- lguid.Data3 = htonsc(lguid.Data3);
+ lguid.Data1 = bswap_l(lguid.Data1);
+ lguid.Data2 = bswap_s(lguid.Data2);
+ lguid.Data3 = bswap_s(lguid.Data3);
memcpy_s(pMessage, sizeof(lguid), &lguid, sizeof(lguid));
memcpy_s(pMessage + sizeof(lguid), namelen, name, namelen);
- BYTE digest[dwDigestLen];
- if (GetDigest(pszAlgId,
- pMessage, sizeof(lguid) + namelen, digest, dwDigestLen))
+ BYTE digest[DIGEST_LENGTH] = {};
+ // Windows 10 or later supported
+ NTSTATUS status = BCryptHash(hAlgorithm, nullptr, 0,
+ pMessage, (ULONG)LocalSize(pMessage), digest, (ULONG)sizeof(digest));
+ if (BCRYPT_SUCCESS(status))
{
- GUID dguid = *(GUID *)digest;
- //local byte order
- dguid.Data1 = ntohlc(dguid.Data1);
- dguid.Data2 = ntohsc(dguid.Data2);
- dguid.Data3 = ntohsc(dguid.Data3);
+ GUID dguid = GUID_NULL;
+ dguid.Data1 = *(ULONG *)&digest[0];
+ dguid.Data2 = *(USHORT *)&digest[4];
+ dguid.Data3 = *(USHORT *)&digest[6];
+ *(ULONGLONG *)dguid.Data4 = *(ULONGLONG *)&digest[8];
+
+ //host byte order
+ dguid.Data1 = bswap_l(dguid.Data1);
+ dguid.Data2 = bswap_s(dguid.Data2);
+ dguid.Data3 = bswap_s(dguid.Data3);
//version
dguid.Data3 &= 0x0FFF;
- dguid.Data3 |= maskVersion;
+ dguid.Data3 |= MASK_VERSION;
//variant
dguid.Data4[0] &= 0x3F;
dguid.Data4[0] |= 0x80;
@@ -278,13 +219,13 @@ BOOL GetLogonInfo(PBYTE *ppLogonInfo)
if (bRet)
{
- TOKEN_ELEVATION_TYPE tokenElevationType;
+ TOKEN_ELEVATION_TYPE tokenElevationType = TokenElevationTypeDefault;
if (GetTokenInformation(hToken, TokenElevationType,
&tokenElevationType, sizeof(tokenElevationType), &dwLength))
{
if (tokenElevationType == TokenElevationTypeFull)
{
- TOKEN_LINKED_TOKEN tokenLinkedToken;
+ TOKEN_LINKED_TOKEN tokenLinkedToken = {};
if (GetTokenInformation(hToken, TokenLinkedToken,
&tokenLinkedToken, sizeof(tokenLinkedToken), &dwLength))
{
@@ -294,7 +235,7 @@ BOOL GetLogonInfo(PBYTE *ppLogonInfo)
}
}
- TOKEN_STATISTICS tokenStatistics;
+ TOKEN_STATISTICS tokenStatistics = {};
if (GetTokenInformation(hToken, TokenStatistics,
&tokenStatistics, sizeof(tokenStatistics), &dwLength))
{
diff --git a/common/common.h b/common/common.h
index 8e7b1d2c..b8f43f5b 100644
--- a/common/common.h
+++ b/common/common.h
@@ -2,9 +2,10 @@
#include "version.h"
-#define MAX_KRNLOBJNAME 256
+#define MAX_SECURITYDESC 256 //string security descriptor
+#define MAX_PIPENAME 256 //named pipe name
#define PIPEBUFSIZE 0x2000 //named pipe, 16KB with wchar_t
-#define READBUFSIZE 0x800 //read skk dictionary, 4KB with wchar_t/char
+#define READBUFSIZE 0x200 //read skk dictionary, 512B with wchar_t/char
#define RECVBUFSIZE 0x800 //receive from skk server, 2KB with char
#define MAX_SKKSERVER_HOST (255 + 1) //SKKサーバー ホスト 読み込みバッファ
@@ -18,14 +19,18 @@
#define MAX_SELKEY 7 //候補一覧選択キー数
#define PRESERVEDKEY_NUM 2 //キー設定ON/OFF
#define MAX_PRESERVEDKEY 8 //キー設定ON/OFF最大数
+#define PRIVATEMODEKEY_NUM 2 //プライベートモードON/OFF
#define MAX_KEYRE 256 //キー1/2 読み込みバッファ
#define MAX_CONV_POINT 256 //変換位置指定最大数
+#define DEF_BACKUPGENS 7 //ユーザー辞書バックアップ世代デフォルト
+#define MAX_BACKUPGENS 255 //ユーザー辞書バックアップ世代最大
//request
#define REQ_SEARCH L'1' //辞書検索
#define REQ_COMPLEMENT L'4' //補完
#define REQ_CONVERTKEY L'5' //見出し語変換
#define REQ_CONVERTCND L'6' //候補変換
+#define REQ_REVERSE L'7' //辞書逆検索
#define REQ_USER_ADD_A L'A' //ユーザー辞書追加(送りあり、補完なし)
#define REQ_USER_ADD_N L'B' //ユーザー辞書追加(送りなし、補完あり)
#define REQ_USER_DEL_A L'C' //ユーザー辞書削除(送りあり、補完なし)
@@ -34,10 +39,14 @@
#define REQ_EXEC_CNF L'P' //設定ダイアログ起動
#define REQ_CAPS_LOCK L'I' //Caps Lock
#define REQ_KANA_LOCK L'J' //Kana Lock
+#define REQ_BACKUP L'R' //バックアップ
+#define REQ_EXIT L'X' //終了
//reply
#define REP_OK L'T' //hit
#define REP_FALSE L'F' //nothing
+#define SYSTEMROOT_IME_DIR L"IME"
+
#define IMCRVMGREXE L"imcrvmgr.exe"
#define IMCRVCNFEXE L"imcrvcnf.exe"
#ifndef _DEBUG
@@ -51,16 +60,16 @@
#define BOM L'\uFEFF'
-extern LPCWSTR RccsUTF16;
-extern LPCWSTR WccsUTF16;
-extern LPCWSTR RccsUTF8;
-extern LPCWSTR WccsUTF8;
-extern LPCWSTR RB;
-extern LPCWSTR WB;
+extern LPCWSTR modeRccsUTF16;
+extern LPCWSTR modeWccsUTF16;
+extern LPCWSTR modeRccsUTF8;
+extern LPCWSTR modeWccsUTF8;
+extern LPCWSTR modeRT;
+extern LPCWSTR modeRB;
+extern LPCWSTR modeWB;
extern LPCWSTR fnconfigxml; //設定
extern LPCWSTR fnuserdic; //ユーザー辞書
-extern LPCWSTR fnuserbak; //ユーザー辞書バックアッププレフィックス
extern LPCWSTR fnskkdic; //取込SKK辞書
extern LPCWSTR fninitlua; //init.lua
@@ -79,31 +88,14 @@ extern const BOOL c_daDisplayAttributeSeries[DISPLAYATTRIBUTE_INFO_NUM];
BOOL IsWindowsVersionOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion, DWORD dwBuildNumber);
// Windows 8
+// supports new guidelines
#define IsWindowsVersion62OrLater() IsWindowsVersionOrLater(6, 2, 0)
// Windows 8.1
+// supports Direct2D color fonts
#define IsWindowsVersion63OrLater() IsWindowsVersionOrLater(6, 3, 0)
-//// Windows 10
-//#define IsWindowsVersion100OrLater() IsWindowsVersionOrLater(10, 0, 0)
-//// Windows 10 ver.1507 Threshold 1 Released in July 2015
-//#define IsWindowsVersion100TH1OrLater() IsWindowsVersionOrLater(10, 0, 10240)
-//// Windows 10 ver.1511 Threshold 2 November Update
-//#define IsWindowsVersion100TH2OrLater() IsWindowsVersionOrLater(10, 0, 10586)
-//// Windows 10 ver.1607 Redstone 1 Anniversary Update
-//#define IsWindowsVersion100RS1OrLater() IsWindowsVersionOrLater(10, 0, 14393)
// Windows 10 ver.1703 Redstone 2 Creators Update
+// supports Per-Monitor DPI Awareness V2
#define IsWindowsVersion100RS2OrLater() IsWindowsVersionOrLater(10, 0, 15063)
-//// Windows 10 ver.1709 Redstone 3 Fall Creators Update
-//#define IsWindowsVersion100RS3OrLater() IsWindowsVersionOrLater(10, 0, 16299)
-//// Windows 10 ver.1803 Redstone 4 April 2018 Update
-//#define IsWindowsVersion100RS4OrLater() IsWindowsVersionOrLater(10, 0, 17134)
-//// Windows 10 ver.1809 Redstone 5 October 2018 Update
-//#define IsWindowsVersion100RS5OrLater() IsWindowsVersionOrLater(10, 0, 17763)
-//// Windows 10 ver.1903 19H1 May 2019 Update
-//#define IsWindowsVersion10019H1OrLater() IsWindowsVersionOrLater(10, 0, 18362)
-//// Windows 10 ver.1909 19H2 November 2019 Update
-//#define IsWindowsVersion10019H2OrLater() IsWindowsVersionOrLater(10, 0, 18363)
-//// Windows 10 ver.2004 20H1 May 2020 Update
-//#define IsWindowsVersion10020H1OrLater() IsWindowsVersionOrLater(10, 0, 19041)
#define C_USER_DEFAULT_SCREEN_DPI 96
#define C_FONT_LOGICAL_HEIGHT_PPI 72
diff --git a/common/common.vcxproj b/common/common.vcxproj
index b0e9e953..631f6ceb 100644
--- a/common/common.vcxproj
+++ b/common/common.vcxproj
@@ -1,14 +1,6 @@
-
- Debug
- ARM
-
-
- Debug
- ARM64
-
Debug
Win32
@@ -17,12 +9,8 @@
Debug
x64
-
- Release
- ARM
-
-
- Release
+
+ Debug
ARM64
@@ -33,6 +21,10 @@
Release
x64
+
+ Release
+ ARM64
+
{EB999F4D-AD29-4049-BCCB-FABFD01DFC97}
@@ -44,114 +36,87 @@
StaticLibrary
true
- v142
+ v143
Unicode
StaticLibrary
true
- v142
- Unicode
-
-
- StaticLibrary
- true
- v142
+ v143
Unicode
StaticLibrary
true
- v142
+ v143
Unicode
StaticLibrary
false
- v142
+ v143
true
Unicode
StaticLibrary
false
- v142
- true
- Unicode
-
-
- StaticLibrary
- false
- v142
+ v143
true
Unicode
StaticLibrary
false
- v142
+ v143
true
Unicode
-
+
-
-
-
-
+
-
-
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
-
-
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
- $(SolutionDir)$(Platform)\$(Configuration)\
- $(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)build\$(Platform)\$(Configuration)\
+ $(SolutionDir)build\$(ProjectName)\$(Platform)\$(Configuration)\
@@ -160,9 +125,10 @@
Disabled
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
+ pch.h
Windows
@@ -176,25 +142,10 @@
Disabled
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
- true
- true
-
-
- Windows
- true
-
-
-
-
- Use
- Level3
- Disabled
- WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
- true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
+ pch.h
Windows
@@ -208,9 +159,10 @@
Disabled
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
+ pch.h
Windows
@@ -226,10 +178,11 @@
true
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
Guard
+ pch.h
Windows
@@ -247,31 +200,11 @@
true
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
- true
- true
- Guard
-
-
- Windows
- true
- true
- true
-
-
-
-
- Level3
- Use
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
- true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
Guard
+ pch.h
Windows
@@ -289,10 +222,11 @@
true
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
true
- stdafx.h
+ pch.h;%(ForcedIncludeFiles)
true
true
Guard
+ pch.h
Windows
@@ -307,8 +241,10 @@
+
+
-
+
@@ -317,19 +253,22 @@
+
+
-
+
Create
Create
- Create
Create
Create
Create
- Create
Create
+
+
+
diff --git a/common/common.vcxproj.filters b/common/common.vcxproj.filters
index fe63f2cb..b4eeb605 100644
--- a/common/common.vcxproj.filters
+++ b/common/common.vcxproj.filters
@@ -15,7 +15,7 @@
-
+
Header Files
@@ -33,6 +33,12 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
Header Files
@@ -44,7 +50,7 @@
-
+
Source Files
@@ -59,6 +65,12 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
Source Files
@@ -66,4 +78,7 @@
Source Files
+
+
+
\ No newline at end of file
diff --git a/common/configxml.cpp b/common/configxml.cpp
index 36e781bc..d5e1e561 100644
--- a/common/configxml.cpp
+++ b/common/configxml.cpp
@@ -1,6 +1,7 @@
#include "common.h"
#include "configxml.h"
+#include "utf8.h"
#pragma comment(lib, "shlwapi.lib")
#pragma comment(lib, "xmllite.lib")
@@ -52,6 +53,20 @@ LPCWSTR ValueServerPort = L"port";
LPCWSTR ValueServerEncoding = L"encoding";
LPCWSTR ValueServerTimeOut = L"timeout";
+//userdict section
+
+LPCWSTR SectionUserDict = L"userdict";
+
+//userdict keys
+
+LPCWSTR ValueBackupDir = L"backupdir";
+LPCWSTR ValueBackupGen = L"backupgen";
+LPCWSTR ValuePrivateOnVKey = L"privateonvkey";
+LPCWSTR ValuePrivateOnMKey = L"privateonmkey";
+LPCWSTR ValuePrivateOffVKey = L"privateoffvkey";
+LPCWSTR ValuePrivateOffMKey = L"privateoffmkey";
+LPCWSTR ValuePrivateModeAuto = L"privatemodeauto";
+
//behavior section
LPCWSTR SectionBehavior = L"behavior";
@@ -107,6 +122,7 @@ LPCWSTR ValueColorNO = L"colorno";
LPCWSTR ValueDrawAPI = L"drawapi";
LPCWSTR ValueColorFont = L"colorfont";
LPCWSTR ValueUntilCandList = L"untilcandlist";
+LPCWSTR ValuePageCandNum = L"pagecandnum";
LPCWSTR ValueDispCandNo = L"dispcandno";
LPCWSTR ValueVerticalCand = L"verticalcand";
LPCWSTR ValueAnnotation = L"annotation";
@@ -187,6 +203,7 @@ LPCWSTR ValueKeyMapUp = L"up";
LPCWSTR ValueKeyMapRight = L"right";
LPCWSTR ValueKeyMapDown = L"down";
LPCWSTR ValueKeyMapPaste = L"paste";
+LPCWSTR ValueKeyMapReconvert = L"reconvert";
//convpoint section
@@ -592,7 +609,7 @@ HRESULT WriterStartElement(IXmlWriter *pWriter, LPCWSTR element)
if (pWriter != nullptr)
{
- hr = pWriter->WriteStartElement(nullptr, element, nullptr);
+ hr = pWriter->WriteStartElement(nullptr, TOWELLFORMED(element), nullptr);
}
return hr;
@@ -616,7 +633,7 @@ HRESULT WriterAttribute(IXmlWriter *pWriter, LPCWSTR name, LPCWSTR value)
if (pWriter != nullptr)
{
- hr = pWriter->WriteAttributeString(nullptr, name, nullptr, value);
+ hr = pWriter->WriteAttributeString(nullptr, TOWELLFORMED(name), nullptr, TOWELLFORMED(value));
}
return hr;
diff --git a/common/configxml.h b/common/configxml.h
index 510ca89d..2ba7140e 100644
--- a/common/configxml.h
+++ b/common/configxml.h
@@ -47,6 +47,20 @@ extern LPCWSTR ValueServerPort;
extern LPCWSTR ValueServerEncoding;
extern LPCWSTR ValueServerTimeOut;
+//userdict section
+
+extern LPCWSTR SectionUserDict;
+
+//userdict keys
+
+extern LPCWSTR ValueBackupDir;
+extern LPCWSTR ValueBackupGen;
+extern LPCWSTR ValuePrivateOnVKey;
+extern LPCWSTR ValuePrivateOnMKey;
+extern LPCWSTR ValuePrivateOffVKey;
+extern LPCWSTR ValuePrivateOffMKey;
+extern LPCWSTR ValuePrivateModeAuto;
+
//behavior section
extern LPCWSTR SectionBehavior;
@@ -102,6 +116,7 @@ extern LPCWSTR ValueColorNO;
extern LPCWSTR ValueDrawAPI;
extern LPCWSTR ValueColorFont;
extern LPCWSTR ValueUntilCandList;
+extern LPCWSTR ValuePageCandNum;
extern LPCWSTR ValueDispCandNo;
extern LPCWSTR ValueVerticalCand;
extern LPCWSTR ValueAnnotation;
@@ -182,6 +197,7 @@ extern LPCWSTR ValueKeyMapUp;
extern LPCWSTR ValueKeyMapRight;
extern LPCWSTR ValueKeyMapDown;
extern LPCWSTR ValueKeyMapPaste;
+extern LPCWSTR ValueKeyMapReconvert;
//convpoint section
diff --git a/common/cpp.hint b/common/cpp.hint
new file mode 100644
index 00000000..8660b6f3
--- /dev/null
+++ b/common/cpp.hint
@@ -0,0 +1,5 @@
+// common.h
+#define FORWARD_ITERATION_I(iterator, container) for (auto (iterator) = (container).begin(); (iterator) != (container).end(); ++(iterator))
+#define FORWARD_ITERATION(iterator, container) for (auto (iterator) = (container).begin(); (iterator) != (container).end(); )
+#define REVERSE_ITERATION_I(reverse_iterator, container) for (auto (reverse_iterator) = (container).rbegin(); (reverse_iterator) != (container).rend(); ++(reverse_iterator))
+#define REVERSE_ITERATION(reverse_iterator, container) for (auto (reverse_iterator) = (container).rbegin(); (reverse_iterator) != (container).rend(); )
diff --git a/common/eucjis2004.cpp b/common/eucjis2004.cpp
index d9bf5ed6..b0deb1fb 100644
--- a/common/eucjis2004.cpp
+++ b/common/eucjis2004.cpp
@@ -44,7 +44,7 @@ size_t UcpToWideChar(UCSCHAR ucp, PWCHAR first, PWCHAR second)
*second = L'\0';
ret = 1;
}
- else if (ucp <= SURROGATEPAIR_UCPMAX) //surrogate pair
+ else if (ucp <= SURROGATEPAIR_UCPMAX) // surrogate pair
{
*first = (WCHAR)(SURROGATEPAIR_HIGH_MASK | ((ucp - SURROGATEPAIR_UCPMIN) >> SURROGATEPAIR_SEPBIT));
*second = (WCHAR)(SURROGATEPAIR_LOW_MASK | ((ucp - SURROGATEPAIR_UCPMIN) & SURROGATEPAIR_SEPMASK));
@@ -65,7 +65,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
CONST CHAR ejd = (CHAR)0x80;
CONST CHAR ejs = 0x21;
CONST CHAR eje = 0x7E;
- CHAR ej[2];
+ CHAR ej[2] = {};
size_t srcused = 0;
if (src == nullptr || srcsize == 0 || ucp1 == nullptr || ucp2 == nullptr)
@@ -76,7 +76,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
*ucp1 = 0;
*ucp2 = 0;
- if (as <= src[0] && src[0] <= ae) //ASCII
+ if (as <= src[0] && src[0] <= ae) // ASCII
{
*ucp1 = src[0];
*ucp2 = 0;
@@ -86,7 +86,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
{
switch (src[0])
{
- case ss3: // JIS X 0213 Plane 2
+ case ss3: // JIS X 0213 第二面
if (srcsize < 3)
{
break;
@@ -117,7 +117,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
}
break;
- case ss2: //JIS X 0201 halfwidth katakana
+ case ss2: // JIS X 0201 片仮名
if (srcsize < 2)
{
break;
@@ -138,7 +138,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
}
break;
- default: // JIS X 0213 Plane 1
+ default: // JIS X 0213 第一面
if (srcsize < 2)
{
break;
@@ -161,7 +161,7 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
{
USHORT euc = ((USHORT)ej[0] << 8) | (USHORT)ej[1] | 0x8080;
- //結合文字
+ // 結合文字
for (int i = 0; i < CMBCHARNUM; i++)
{
if (euccmb[i].euc == euc)
@@ -209,9 +209,9 @@ void AddNullWideChar(size_t *srcsize, size_t si, LPWSTR dst, size_t *dstsize, si
BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsize)
{
size_t si = 0, di = 0, ss = -1;
- UCSCHAR ucp[2];
- WCHAR utf16[2][2];
- size_t utf16num[2];
+ UCSCHAR ucp[2] = {};
+ WCHAR utf16[2][2] = {};
+ size_t utf16num[2] = {};
if (dstsize == nullptr)
{
@@ -260,7 +260,7 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
}
}
- if (*dstsize <= di + utf16num[0] + utf16num[1]) //limit
+ if (*dstsize <= di + utf16num[0] + utf16num[1]) // limit
{
AddNullWideChar(srcsize, si, dst, dstsize, di);
return FALSE;
@@ -285,7 +285,7 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
// 終端NULLを付加
-void AddNullEucJis2004(size_t *srcsize, size_t si, LPSTR dst, size_t *dstsize, size_t di)
+void AddNullMultiByte(size_t *srcsize, size_t si, LPSTR dst, size_t *dstsize, size_t di)
{
if (srcsize != nullptr)
{
@@ -339,11 +339,11 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
break;
}
- if (*(src + si) <= L'\x7F') //ASCII
+ if (*(src + si) <= L'\x7F') // ASCII
{
- if (*dstsize <= di + 1) //limit
+ if (*dstsize <= di + 1) // limit
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return FALSE;
}
if (dst != nullptr)
@@ -378,39 +378,75 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
ucp = first;
}
- //結合文字
- for (int i = 0; i < CMBCHARNUM; i++)
+ // 互換性
+ if (!exist)
{
- if (first == euccmb[i].ucp[0] && second == euccmb[i].ucp[1])
+ for (int i = 0; i < CMPEUCNUM; i++)
{
- if (*dstsize <= di + 2) //limit
+ if (ucp == euccmp[i].ucp)
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
- return FALSE;
+ if (*dstsize <= di + 2) // limit
+ {
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
+ return FALSE;
+ }
+ if (dst != nullptr)
+ {
+ *(dst + di) = (CHAR)(euccmp[i].euc >> 8);
+ *(dst + di + 1) = (CHAR)(euccmp[i].euc & 0xFF);
+ }
+ di += 2;
+ if (ucp != first) // surrogate pair
+ {
+ si++;
+ }
+ exist = TRUE;
+ break;
}
- if (dst != nullptr)
+ }
+ }
+
+ // 結合文字
+ if (!exist)
+ {
+ for (int i = 0; i < CMBCHARNUM; i++)
+ {
+ if (first == euccmb[i].ucp[0] && second == euccmb[i].ucp[1])
{
- *(dst + di) = euccmb[i].euc >> 8;
- *(dst + di + 1) = euccmb[i].euc & 0xFF;
+ if (*dstsize <= di + 2) // limit
+ {
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
+ return FALSE;
+ }
+ if (dst != nullptr)
+ {
+ *(dst + di) = euccmb[i].euc >> 8;
+ *(dst + di + 1) = euccmb[i].euc & 0xFF;
+ }
+ di += 2;
+ if (ucp != first) // surrogate pair, unused actually
+ {
+ si++;
+ }
+ si++;
+ exist = TRUE;
+ break;
}
- di += 2;
- si++;
- exist = TRUE;
- break;
}
}
+ // JIS X 0213 第一面
if (!exist)
{
for (int i = 0; i < ROWNUM; i++)
{
for (int j = 0; j < CELLNUM; j++)
{
- if (ucp == euc1[i][j]) // JIS X 0213 Plane 1
+ if (ucp == euc1[i][j])
{
- if (*dstsize <= di + 2) //limit
+ if (*dstsize <= di + 2) // limit
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return FALSE;
}
if (dst != nullptr)
@@ -419,19 +455,35 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
*(dst + di + 1) = (CHAR)((UCHAR)(ejs + j) + (UCHAR)ejd);
}
di += 2;
- if (ucp != first) //surrogate pair
+ if (ucp != first) // surrogate pair
{
si++;
}
exist = TRUE;
break;
}
- else if (euc2i[i] != 0 && euc2i[i] <= ROW2NUM &&
- ucp == euc2[euc2i[i] - 1][j]) // JIS X 0213 Plane 2
+ }
+
+ if (exist)
+ {
+ break;
+ }
+ }
+ }
+
+ // JIS X 0213 第二面
+ if (!exist)
+ {
+ for (int i = 0; i < ROWNUM; i++)
+ {
+ for (int j = 0; j < CELLNUM; j++)
+ {
+ if (euc2i[i] != 0 && euc2i[i] <= ROW2NUM &&
+ ucp == euc2[euc2i[i] - 1][j])
{
- if (*dstsize <= di + 3) //limit
+ if (*dstsize <= di + 3) // limit
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return FALSE;
}
if (dst != nullptr)
@@ -441,7 +493,7 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
*(dst + di + 2) = (CHAR)((UCHAR)(ejs + j) + (UCHAR)ejd);
}
di += 3;
- if (ucp != first) //surrogate pair
+ if (ucp != first) // surrogate pair
{
si++;
}
@@ -457,15 +509,16 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
}
}
+ // JIS X 0201 片仮名
if (!exist)
{
for (int i = 0; i < ANKNUM; i++)
{
- if (ucp == eucK[i]) //JIS X 0201 halfwidth katakana
+ if (ucp == eucK[i])
{
- if (*dstsize <= di + 2) //limit
+ if (*dstsize <= di + 2) // limit
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return FALSE;
}
if (dst != nullptr)
@@ -482,30 +535,32 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
if (!exist)
{
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return FALSE;
}
}
}
- AddNullEucJis2004(srcsize, si, dst, dstsize, di);
+ AddNullMultiByte(srcsize, si, dst, dstsize, di);
return TRUE;
}
-std::string wstring_to_eucjis2004_string(const std::wstring &s)
+std::wstring eucjis2004_string_to_wstring(const std::string &s)
{
- std::string ret;
+ std::wstring ret;
size_t len;
- BOOL b = WideCharToEucJis2004(s.c_str(), nullptr, nullptr, &len);
+ BOOL b = EucJis2004ToWideChar(s.c_str(), nullptr, nullptr, &len);
if (b && len > 0)
{
try
{
- LPSTR euc = new CHAR[len];
- WideCharToEucJis2004(s.c_str(), nullptr, euc, &len);
- ret = euc;
- delete[] euc;
+ LPWSTR wcs = new WCHAR[len];
+ if (EucJis2004ToWideChar(s.c_str(), nullptr, wcs, &len))
+ {
+ ret = wcs;
+ }
+ delete[] wcs;
}
catch (...)
{
@@ -515,20 +570,22 @@ std::string wstring_to_eucjis2004_string(const std::wstring &s)
return ret;
}
-std::wstring eucjis2004_string_to_wstring(const std::string &s)
+std::string wstring_to_eucjis2004_string(const std::wstring &s)
{
- std::wstring ret;
+ std::string ret;
size_t len;
- BOOL b = EucJis2004ToWideChar(s.c_str(), nullptr, nullptr, &len);
+ BOOL b = WideCharToEucJis2004(s.c_str(), nullptr, nullptr, &len);
if (b && len > 0)
{
try
{
- LPWSTR wcs = new WCHAR[len];
- EucJis2004ToWideChar(s.c_str(), nullptr, wcs, &len);
- ret = wcs;
- delete[] wcs;
+ LPSTR euc = new CHAR[len];
+ if (WideCharToEucJis2004(s.c_str(), nullptr, euc, &len))
+ {
+ ret = euc;
+ }
+ delete[] euc;
}
catch (...)
{
diff --git a/common/eucjis2004.h b/common/eucjis2004.h
index 3b6fa043..29044fde 100644
--- a/common/eucjis2004.h
+++ b/common/eucjis2004.h
@@ -56,8 +56,8 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
// nullptrのとき戻り値はFALSEになる
BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsize);
-std::string wstring_to_eucjis2004_string(const std::wstring &s);
-std::wstring eucjis2004_string_to_wstring(const std::string &s);
+void AddNullWideChar(size_t *srcsize, size_t si, LPWSTR dst, size_t *dstsize, size_t di);
+void AddNullMultiByte(size_t *srcsize, size_t si, LPSTR dst, size_t *dstsize, size_t di);
-#define WCTOEUC(w) wstring_to_eucjis2004_string(w).c_str()
-#define EUCTOWC(u) eucjis2004_string_to_wstring(u).c_str()
+std::wstring eucjis2004_string_to_wstring(const std::string &s);
+std::string wstring_to_eucjis2004_string(const std::wstring &s);
diff --git a/common/eucjis2004table.cpp b/common/eucjis2004table.cpp
index fbf8cf0b..d1533ddf 100644
--- a/common/eucjis2004table.cpp
+++ b/common/eucjis2004table.cpp
@@ -1,21 +1,21 @@
#include "eucjis2004table.h"
-// EUC-JIS-2004 Unicode 変換表
//
-// http://x0213.org/codetable/euc-jis-2004-std.txt を元に生成
+// EUC-JIS-2004 / Unicode 変換表
+//
+// http://x0213.org/codetable/euc-jis-2004-std.txt を元に生成
+//
+// 以下の2つの符号は、iconv 1.17 を参考にして Windows (CP932) mapping とした。
+//
+// 0xA1B1 U+203E # OVERLINE Windows: U+FFE3
+// 0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5
//
-// 以下の2つの符号は、cygwin の iconv 1.14 を参考にして、
-// Windows (CP932) mapping とした。
-// 0xA1B1 U+203E # OVERLINE Windows: U+FFE3
-// 0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5
-
-#pragma region euc table
-#pragma region combining characters
+#pragma region Unicode結合文字
const EUCCMB euccmb[CMBCHARNUM] =
{
- //EUC UCP 1st UCP 2nd
+ // EUC UCP 1st UCP 2nd
{0xA4F7, {0x304B, 0x309A}}, //0xA4F7 U+304B+309A # [2000]
{0xA4F8, {0x304D, 0x309A}}, //0xA4F8 U+304D+309A # [2000]
{0xA4F9, {0x304F, 0x309A}}, //0xA4F9 U+304F+309A # [2000]
@@ -44,9 +44,10 @@ const EUCCMB euccmb[CMBCHARNUM] =
};
#pragma endregion
-#pragma region EUC 1
+#pragma region JIS_X_0213 第一面
const UCSCHAR euc1[ROWNUM][CELLNUM] =
{
+ //1区
{
0x3000, //0xA1A1 U+3000 # IDEOGRAPHIC SPACE
0x3001, //0xA1A2 U+3001 # IDEOGRAPHIC COMMA
@@ -64,8 +65,8 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0xFF40, //0xA1AE U+FF40 # FULLWIDTH GRAVE ACCENT
0x00A8, //0xA1AF U+00A8 # DIAERESIS
0xFF3E, //0xA1B0 U+FF3E # FULLWIDTH CIRCUMFLEX ACCENT
-// 0x203E, //0xA1B1 U+203E # OVERLINE Windows: U+FFE3 //// same as iconv on cygwin ////
- 0xFFE3, //0xA1B1 U+203E # OVERLINE Windows: U+FFE3
+// 0x203E, //0xA1B1 U+203E # OVERLINE Windows: U+FFE3
+ 0xFFE3, //0xA1B1 U+203E # OVERLINE Windows: U+FFE3 //// same as iconv ////
0xFF3F, //0xA1B2 U+FF3F # FULLWIDTH LOW LINE
0x30FD, //0xA1B3 U+30FD # KATAKANA ITERATION MARK
0x30FE, //0xA1B4 U+30FE # KATAKANA VOICED ITERATION MARK
@@ -127,8 +128,8 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x2032, //0xA1EC U+2032 # PRIME
0x2033, //0xA1ED U+2033 # DOUBLE PRIME
0x2103, //0xA1EE U+2103 # DEGREE CELSIUS
-// 0x00A5, //0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5 //// same as iconv on cygwin ////
- 0xFFE5, //0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5
+// 0x00A5, //0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5
+ 0xFFE5, //0xA1EF U+00A5 # YEN SIGN Windows: U+FFE5 //// same as iconv ////
0xFF04, //0xA1F0 U+FF04 # FULLWIDTH DOLLAR SIGN
0x00A2, //0xA1F1 U+00A2 # CENT SIGN Windows: U+FFE0
0x00A3, //0xA1F2 U+00A3 # POUND SIGN Windows: U+FFE1
@@ -145,6 +146,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x25CE, //0xA1FD U+25CE # BULLSEYE
0x25C7 //0xA1FE U+25C7 # WHITE DIAMOND
},
+ //2区
{
0x25C6, //0xA2A1 U+25C6 # BLACK DIAMOND
0x25A1, //0xA2A2 U+25A1 # WHITE SQUARE
@@ -241,6 +243,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x2669, //0xA2FD U+2669 # QUARTER NOTE [2000]
0x25EF //0xA2FE U+25EF # LARGE CIRCLE [1983]
},
+ //3区
{
0x25B7, //0xA3A1 U+25B7 # WHITE RIGHT-POINTING TRIANGLE [2000]
0x25B6, //0xA3A2 U+25B6 # BLACK RIGHT-POINTING TRIANGLE [2000]
@@ -337,6 +340,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x29FA, //0xA3FD U+29FA # DOUBLE PLUS [2000] [Unicode3.2]
0x29FB //0xA3FE U+29FB # TRIPLE PLUS [2000] [Unicode3.2]
},
+ //4区
{
0x3041, //0xA4A1 U+3041 # HIRAGANA LETTER SMALL A
0x3042, //0xA4A2 U+3042 # HIRAGANA LETTER A
@@ -429,10 +433,11 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x0000, //0xA4F9 U+304F+309A # [2000] ## JIS X 0213 COMBINING CHARACTER
0x0000, //0xA4FA U+3051+309A # [2000] ## JIS X 0213 COMBINING CHARACTER
0x0000, //0xA4FB U+3053+309A # [2000] ## JIS X 0213 COMBINING CHARACTER
- 0x0000, //
- 0x0000, //
- 0x0000 //
+ 0x0000, //0xA4FC #
+ 0x0000, //0xA4FD #
+ 0x0000 //0xA4FE #
},
+ //5区
{
0x30A1, //0xA5A1 U+30A1 # KATAKANA LETTER SMALL A
0x30A2, //0xA5A2 U+30A2 # KATAKANA LETTER A
@@ -529,6 +534,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x0000, //0xA5FD U+30C4+309A # [2000] ## JIS X 0213 COMBINING CHARACTER
0x0000 //0xA5FE U+30C8+309A # [2000] ## JIS X 0213 COMBINING CHARACTER
},
+ //6区
{
0x0391, //0xA6A1 U+0391 # GREEK CAPITAL LETTER ALPHA
0x0392, //0xA6A2 U+0392 # GREEK CAPITAL LETTER BETA
@@ -625,6 +631,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x31FE, //0xA6FD U+31FE # KATAKANA LETTER SMALL RE [2000] [Unicode3.2]
0x31FF //0xA6FE U+31FF # KATAKANA LETTER SMALL RO [2000] [Unicode3.2]
},
+ //7区
{
0x0410, //0xA7A1 U+0410 # CYRILLIC CAPITAL LETTER A
0x0411, //0xA7A2 U+0411 # CYRILLIC CAPITAL LETTER BE
@@ -721,6 +728,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x2423, //0xA7FD U+2423 # OPEN BOX [2000]
0x23CE //0xA7FE U+23CE # RETURN SYMBOL [2000] [Unicode3.2]
},
+ //8区
{
0x2500, //0xA8A1 U+2500 # BOX DRAWINGS LIGHT HORIZONTAL [1983]
0x2502, //0xA8A2 U+2502 # BOX DRAWINGS LIGHT VERTICAL [1983]
@@ -784,14 +792,14 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x32BD, //0xA8DC U+32BD # CIRCLED NUMBER FORTY EIGHT [2000] [Unicode3.2]
0x32BE, //0xA8DD U+32BE # CIRCLED NUMBER FORTY NINE [2000] [Unicode3.2]
0x32BF, //0xA8DE U+32BF # CIRCLED NUMBER FIFTY [2000] [Unicode3.2]
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xA8DF #
+ 0x0000, //0xA8E0 #
+ 0x0000, //0xA8E1 #
+ 0x0000, //0xA8E2 #
+ 0x0000, //0xA8E3 #
+ 0x0000, //0xA8E4 #
+ 0x0000, //0xA8E5 #
+ 0x0000, //0xA8E6 #
0x25D0, //0xA8E7 U+25D0 # CIRCLE WITH LEFT HALF BLACK [2000]
0x25D1, //0xA8E8 U+25D1 # CIRCLE WITH RIGHT HALF BLACK [2000]
0x25D2, //0xA8E9 U+25D2 # CIRCLE WITH LOWER HALF BLACK [2000]
@@ -814,9 +822,10 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x01D8, //0xA8FA U+01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE [2000]
0x01DA, //0xA8FB U+01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON [2000]
0x01DC, //0xA8FC U+01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE [2000]
- 0x0000, //
- 0x0000 //
+ 0x0000, //0xA8FD #
+ 0x0000 //0xA8FE #
},
+ //9区
{
0x20AC, //0xA9A1 U+20AC # EURO SIGN [2000]
0x00A0, //0xA9A2 U+00A0 # NO-BREAK SPACE [2000]
@@ -913,6 +922,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x0113, //0xA9FD U+0113 # LATIN SMALL LETTER E WITH MACRON [2000]
0x014D //0xA9FE U+014D # LATIN SMALL LETTER O WITH MACRON [2000]
},
+ //10区
{
0x0104, //0xAAA1 U+0104 # LATIN CAPITAL LETTER A WITH OGONEK [2000]
0x02D8, //0xAAA2 U+02D8 # BREVE [2000]
@@ -1009,6 +1019,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x0127, //0xAAFD U+0127 # LATIN SMALL LETTER H WITH STROKE [2000]
0x0295 //0xAAFE U+0295 # LATIN LETTER PHARYNGEAL VOICED FRICATIVE [2000]
},
+ //11区
{
0x0294, //0xABA1 U+0294 # LATIN LETTER GLOTTAL STOP [2000]
0x0266, //0xABA2 U+0266 # LATIN SMALL LETTER H WITH HOOK [2000]
@@ -1105,6 +1116,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x0303, //0xABFD U+0303 # COMBINING TILDE [2000]
0x031A //0xABFE U+031A # COMBINING LEFT ANGLE ABOVE [2000]
},
+ //12区
{
0x2776, //0xACA1 U+2776 # DINGBAT NEGATIVE CIRCLED DIGIT ONE [2000]
0x2777, //0xACA2 U+2777 # DINGBAT NEGATIVE CIRCLED DIGIT TWO [2000]
@@ -1189,18 +1201,19 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x32E5, //0xACF1 U+32E5 # CIRCLED KATAKANA NI [2000]
0x32ED, //0xACF2 U+32ED # CIRCLED KATAKANA HO [2000]
0x32EC, //0xACF3 U+32EC # CIRCLED KATAKANA HE [2000]
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xACF4 #
+ 0x0000, //0xACF5 #
+ 0x0000, //0xACF6 #
+ 0x0000, //0xACF7 #
+ 0x0000, //0xACF8 #
+ 0x0000, //0xACF9 #
+ 0x0000, //0xACFA #
+ 0x0000, //0xACFB #
+ 0x0000, //0xACFC #
0x2051, //0xACFD U+2051 # TWO ASTERISKS ALIGNED VERTICALLY [2000] [Unicode3.2]
0x2042 //0xACFE U+2042 # ASTERISM [2000]
},
+ //13区
{
0x2460, //0xADA1 U+2460 # CIRCLED DIGIT ONE [2000]
0x2461, //0xADA2 U+2461 # CIRCLED DIGIT TWO [2000]
@@ -1257,13 +1270,13 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x33C4, //0xADD5 U+33C4 # SQUARE CC [2000]
0x33A1, //0xADD6 U+33A1 # SQUARE M SQUARED [2000]
0x216B, //0xADD7 U+216B # ROMAN NUMERAL TWELVE [2000]
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xADD8 #
+ 0x0000, //0xADD9 #
+ 0x0000, //0xADDA #
+ 0x0000, //0xADDB #
+ 0x0000, //0xADDC #
+ 0x0000, //0xADDD #
+ 0x0000, //0xADDE #
0x337B, //0xADDF U+337B # SQUARE ERA NAME HEISEI [2000]
0x301D, //0xADE0 U+301D # REVERSED DOUBLE PRIME QUOTATION MARK [2000]
0x301F, //0xADE1 U+301F # LOW DOUBLE PRIME QUOTATION MARK [2000]
@@ -1281,22 +1294,23 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x337E, //0xADED U+337E # SQUARE ERA NAME MEIZI [2000]
0x337D, //0xADEE U+337D # SQUARE ERA NAME TAISYOU [2000]
0x337C, //0xADEF U+337C # SQUARE ERA NAME SYOUWA [2000]
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xADF0 # Windows: U+2252
+ 0x0000, //0xADF1 # Windows: U+2261
+ 0x0000, //0xADF2 # Windows: U+222B
0x222E, //0xADF3 U+222E # CONTOUR INTEGRAL [2000]
- 0x0000, //
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xADF4 # Windows: U+2211
+ 0x0000, //0xADF5 # Windows: U+221A
+ 0x0000, //0xADF6 # Windows: U+22A5
+ 0x0000, //0xADF7 # Windows: U+2220
0x221F, //0xADF8 U+221F # RIGHT ANGLE [2000]
0x22BF, //0xADF9 U+22BF # RIGHT TRIANGLE [2000]
- 0x0000, //
- 0x0000, //
- 0x0000, //
+ 0x0000, //0xADFA # Windows: U+2235
+ 0x0000, //0xADFB # Windows: U+2229
+ 0x0000, //0xADFC # Windows: U+222A
0x2756, //0xADFD U+2756 # BLACK DIAMOND MINUS WHITE X [2000]
0x261E //0xADFE U+261E # WHITE RIGHT POINTING INDEX [2000]
},
+ //14区
{
0x4FF1, //0xAEA1 U+4FF1 # [2004]
0x2000B, //0xAEA2 U+2000B # [2000] [Unicode3.1]
@@ -1393,6 +1407,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5496, //0xAEFD U+5496 # [2000]
0x54A1 //0xAEFE U+54A1 # [2000]
},
+ //15区
{
0x54A9, //0xAFA1 U+54A9 # [2000]
0x54C6, //0xAFA2 U+54C6 # [2000]
@@ -1489,6 +1504,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5B25, //0xAFFD U+5B25 # [2000]
0x525D //0xAFFE U+525D # [2004]
},
+ //16区
{
0x4E9C, //0xB0A1 U+4E9C #
0x5516, //0xB0A2 U+5516 #
@@ -1585,6 +1601,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x80E4, //0xB0FD U+80E4 #
0x852D //0xB0FE U+852D #
},
+ //17区
{
0x9662, //0xB1A1 U+9662 #
0x9670, //0xB1A2 U+9670 #
@@ -1681,6 +1698,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5F80, //0xB1FD U+5F80 #
0x5FDC //0xB1FE U+5FDC #
},
+ //18区
{
0x62BC, //0xB2A1 U+62BC #
0x65FA, //0xB2A2 U+65FA #
@@ -1777,6 +1795,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x62D0, //0xB2FD U+62D0 #
0x6539 //0xB2FE U+6539 #
},
+ //19区
{
0x9B41, //0xB3A1 U+9B41 #
0x6666, //0xB3A2 U+6666 #
@@ -1873,6 +1892,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x8305, //0xB3FD U+8305 #
0x8431 //0xB3FE U+8431 #
},
+ //20区
{
0x7CA5, //0xB4A1 U+7CA5 #
0x5208, //0xB4A2 U+5208 #
@@ -1969,6 +1989,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x68CB, //0xB4FD U+68CB #
0x68C4 //0xB4FE U+68C4 #
},
+ //21区
{
0x6A5F, //0xB5A1 U+6A5F #
0x5E30, //0xB5A2 U+5E30 #
@@ -2065,6 +2086,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x4EAB, //0xB5FD U+4EAB #
0x4EAC //0xB5FE U+4EAC #
},
+ //22区
{
0x4F9B, //0xB6A1 U+4F9B #
0x4FA0, //0xB6A2 U+4FA0 #
@@ -2161,6 +2183,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5C51, //0xB6FD U+5C51 #
0x5C48 //0xB6FE U+5C48 #
},
+ //23区
{
0x6398, //0xB7A1 U+6398 #
0x7A9F, //0xB7A2 U+7A9F #
@@ -2257,6 +2280,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x62F3, //0xB7FD U+62F3 #
0x6372 //0xB7FE U+6372 #
},
+ //24区
{
0x691C, //0xB8A1 U+691C #
0x6A29, //0xB8A2 U+6A29 #
@@ -2353,6 +2377,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x53E3, //0xB8FD U+53E3 #
0x5411 //0xB8FE U+5411 #
},
+ //25区
{
0x540E, //0xB9A1 U+540E #
0x5589, //0xB9A2 U+5589 #
@@ -2449,6 +2474,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x72DB, //0xB9FD U+72DB #
0x8FBC //0xB9FE U+8FBC #
},
+ //26区
{
0x6B64, //0xBAA1 U+6B64 #
0x9803, //0xBAA2 U+9803 #
@@ -2545,6 +2571,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x518A, //0xBAFD U+518A #
0x5237 //0xBAFE U+5237 #
},
+ //27区
{
0x5BDF, //0xBBA1 U+5BDF #
0x62F6, //0xBBA2 U+62F6 #
@@ -2641,6 +2668,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6301, //0xBBFD U+6301 #
0x6642 //0xBBFE U+6642 #
},
+ //28区
{
0x6B21, //0xBCA1 U+6B21 #
0x6ECB, //0xBCA2 U+6ECB #
@@ -2737,6 +2765,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x53CE, //0xBCFD U+53CE #
0x5468 //0xBCFE U+5468 #
},
+ //29区
{
0x5B97, //0xBDA1 U+5B97 #
0x5C31, //0xBDA2 U+5C31 #
@@ -2833,6 +2862,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x50B7, //0xBDFD U+50B7 #
0x511F //0xBDFE U+511F #
},
+ //30区
{
0x52DD, //0xBEA1 U+52DD #
0x5320, //0xBEA2 U+5320 #
@@ -2929,6 +2959,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x57F4, //0xBEFD U+57F4 #
0x98FE //0xBEFE U+98FE #
},
+ //31区
{
0x62ED, //0xBFA1 U+62ED #
0x690D, //0xBFA2 U+690D #
@@ -3025,6 +3056,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x96C0, //0xBFFD U+96C0 #
0x88FE //0xBFFE U+88FE #
},
+ //32区
{
0x6F84, //0xC0A1 U+6F84 #
0x647A, //0xC0A2 U+647A #
@@ -3121,6 +3153,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x7BAD, //0xC0FD U+7BAD #
0x7DDA //0xC0FE U+7DDA #
},
+ //33区
{
0x7E4A, //0xC1A1 U+7E4A #
0x7FA8, //0xC1A2 U+7FA8 #
@@ -3217,6 +3250,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5897, //0xC1FD U+5897 #
0x618E //0xC1FE U+618E #
},
+ //34区
{
0x81D3, //0xC2A1 U+81D3 #
0x8535, //0xC2A2 U+8535 #
@@ -3313,6 +3347,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x86F8, //0xC2FD U+86F8 #
0x53EA //0xC2FE U+53EA #
},
+ //35区
{
0x53E9, //0xC3A1 U+53E9 #
0x4F46, //0xC3A2 U+4F46 #
@@ -3409,6 +3444,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x558B, //0xC3FD U+558B #
0x5BF5 //0xC3FE U+5BF5 #
},
+ //36区
{
0x5E16, //0xC4A1 U+5E16 #
0x5E33, //0xC4A2 U+5E33 #
@@ -3505,6 +3541,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x8E44, //0xC4FD U+8E44 #
0x9013 //0xC4FE U+9013 #
},
+ //37区
{
0x90B8, //0xC5A1 U+90B8 #
0x912D, //0xC5A2 U+912D #
@@ -3601,6 +3638,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x7D71, //0xC5FD U+7D71 #
0x5230 //0xC5FE U+5230 #
},
+ //38区
{
0x8463, //0xC6A1 U+8463 #
0x8569, //0xC6A2 U+8569 #
@@ -3697,6 +3735,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x4E73, //0xC6FD U+4E73 #
0x5165 //0xC6FE U+5165 #
},
+ //39区
{
0x5982, //0xC7A1 U+5982 #
0x5C3F, //0xC7A2 U+5C3F #
@@ -3793,6 +3832,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x99C1, //0xC7FD U+99C1 #
0x9EA6 //0xC7FE U+9EA6 #
},
+ //40区
{
0x51FD, //0xC8A1 U+51FD #
0x7BB1, //0xC8A2 U+7BB1 #
@@ -3889,6 +3929,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x7709, //0xC8FD U+7709 #
0x7F8E //0xC8FE U+7F8E #
},
+ //41区
{
0x9F3B, //0xC9A1 U+9F3B #
0x67CA, //0xC9A2 U+67CA #
@@ -3985,6 +4026,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5E45, //0xC9FD U+5E45 #
0x670D //0xC9FE U+670D #
},
+ //42区
{
0x798F, //0xCAA1 U+798F #
0x8179, //0xCAA2 U+8179 #
@@ -4081,6 +4123,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x65B9, //0xCAFD U+65B9 #
0x670B //0xCAFE U+670B #
},
+ //43区
{
0x6CD5, //0xCBA1 U+6CD5 #
0x6CE1, //0xCBA2 U+6CE1 #
@@ -4177,6 +4220,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6162, //0xCBFD U+6162 #
0x6E80 //0xCBFE U+6E80 #
},
+ //44区
{
0x6F2B, //0xCCA1 U+6F2B #
0x8513, //0xCCA2 U+8513 #
@@ -4273,6 +4317,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6CB9, //0xCCFD U+6CB9 #
0x7652 //0xCCFE U+7652 #
},
+ //45区
{
0x8AED, //0xCDA1 U+8AED #
0x8F38, //0xCDA2 U+8F38 #
@@ -4369,6 +4414,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x7406, //0xCDFD U+7406 #
0x7483 //0xCDFE U+7483 #
},
+ //46区
{
0x75E2, //0xCEA1 U+75E2 #
0x88CF, //0xCEA2 U+88CF #
@@ -4465,6 +4511,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x7DF4, //0xCEFD U+7DF4 #
0x806F //0xCEFE U+806F #
},
+ //47区
{
0x84EE, //0xCFA1 U+84EE #
0x9023, //0xCFA2 U+9023 #
@@ -4561,6 +4608,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5DCB, //0xCFFD U+5DCB # [2000]
0x541E //0xCFFE U+541E # [2004]
},
+ //48区
{
0x5F0C, //0xD0A1 U+5F0C #
0x4E10, //0xD0A2 U+4E10 #
@@ -4657,6 +4705,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x50B4, //0xD0FD U+50B4 #
0x50B2 //0xD0FE U+50B2 #
},
+ //49区
{
0x50C9, //0xD1A1 U+50C9 #
0x50CA, //0xD1A2 U+50CA #
@@ -4753,6 +4802,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5291, //0xD1FD U+5291 #
0x8FA8 //0xD1FE U+8FA8 #
},
+ //50区
{
0x8FA7, //0xD2A1 U+8FA7 #
0x52AC, //0xD2A2 U+52AC #
@@ -4849,6 +4899,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x54C8, //0xD2FD U+54C8 #
0x54A8 //0xD2FE U+54A8 #
},
+ //51区
{
0x54AB, //0xD3A1 U+54AB #
0x54C2, //0xD3A2 U+54C2 #
@@ -4945,6 +4996,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5704, //0xD3FD U+5704 #
0x5709 //0xD3FE U+5709 #
},
+ //52区
{
0x5708, //0xD4A1 U+5708 #
0x570B, //0xD4A2 U+570B #
@@ -5041,6 +5093,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x596C, //0xD4FD U+596C #
0x5969 //0xD4FE U+5969 #
},
+ //53区
{
0x5978, //0xD5A1 U+5978 #
0x5981, //0xD5A2 U+5981 #
@@ -5137,6 +5190,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5C4E, //0xD5FD U+5C4E #
0x5C53 //0xD5FE U+5C53 #
},
+ //54区
{
0x5C50, //0xD6A1 U+5C50 #
0x5C4F, //0xD6A2 U+5C4F #
@@ -5233,6 +5287,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x5ED0, //0xD6FD U+5ED0 #
0x5ECF //0xD6FE U+5ECF #
},
+ //55区
{
0x5ED6, //0xD7A1 U+5ED6 #
0x5EE3, //0xD7A2 U+5EE3 #
@@ -5329,6 +5384,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6083, //0xD7FD U+6083 #
0x609A //0xD7FE U+609A #
},
+ //56区
{
0x6084, //0xD8A1 U+6084 #
0x609B, //0xD8A2 U+609B #
@@ -5425,6 +5481,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6214, //0xD8FD U+6214 #
0x621B //0xD8FE U+621B #
},
+ //57区
{
0x621E, //0xD9A1 U+621E #
0x6221, //0xD9A2 U+6221 #
@@ -5521,6 +5578,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6488, //0xD9FD U+6488 #
0x64BC //0xD9FE U+64BC #
},
+ //58区
{
0x64DA, //0xDAA1 U+64DA #
0x64D2, //0xDAA2 U+64D2 #
@@ -5617,6 +5675,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x66BE, //0xDAFD U+66BE #
0x66BC //0xDAFE U+66BC #
},
+ //59区
{
0x66C4, //0xDBA1 U+66C4 #
0x66B8, //0xDBA2 U+66B8 #
@@ -5713,6 +5772,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x690C, //0xDBFD U+690C #
0x68CD //0xDBFE U+68CD #
},
+ //60区
{
0x68D4, //0xDCA1 U+68D4 #
0x68E7, //0xDCA2 U+68E7 #
@@ -5809,6 +5869,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6AA2, //0xDCFD U+6AA2 #
0x6AA3 //0xDCFE U+6AA3 #
},
+ //61区
{
0x6A97, //0xDDA1 U+6A97 #
0x8617, //0xDDA2 U+8617 #
@@ -5905,6 +5966,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6CB1, //0xDDFD U+6CB1 #
0x6CBE //0xDDFE U+6CBE #
},
+ //62区
{
0x6CBA, //0xDEA1 U+6CBA #
0x6CDB, //0xDEA2 U+6CDB #
@@ -6001,6 +6063,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x6F32, //0xDEFD U+6F32 #
0x6ECC //0xDEFE U+6ECC #
},
+ //63区
{
0x6F3E, //0xDFA1 U+6F3E #
0x6F13, //0xDFA2 U+6F13 #
@@ -6097,6 +6160,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x71F5, //0xDFFD U+71F5 #
0x71FC //0xDFFE U+71FC #
},
+ //64区
{
0x71F9, //0xE0A1 U+71F9 #
0x71FF, //0xE0A2 U+71FF #
@@ -6193,6 +6257,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x74D4, //0xE0FD U+74D4 #
0x73F1 //0xE0FE U+73F1 #
},
+ //65区
{
0x74E0, //0xE1A1 U+74E0 #
0x74E3, //0xE1A2 U+74E3 #
@@ -6289,6 +6354,7 @@ const UCSCHAR euc1[ROWNUM][CELLNUM] =
0x766C, //0xE1FD U+766C #
0x7670 //0xE1FE U+7670 #