|
ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。
ここまで、Notepad++の変更なしに日本語環境に合わせた機能の提供を行ってきました。
今回は、いよいよNotepad++に手を加えて ja-pack(日本語パック) をリリースしてみました。
今回は、今まで提供してきたような 一部のDLLだけでなく一式をZIPでまとめたものを提供しています。
そのため、ダウンロードしたZIPを解凍し、即、利用できます。
では、早速、詳細について、簡単に解説してみます。
2014-9-25 初版
Shift JIS およびUNICODE(UTF8,UTF16など)に対応していましたが、EUC-JPについては、対応していませんでした。
そこで、今回、EUC-JPについて対応してみました。もともとEUC-JPへの対応は、考えていたようで、ソースコードが一部ありましたので、そのまま流用させていただきました。
また、コード変換については、以下のWindowsAPIを使って変換するよう改版しました。
以下は、各文字コードを自動認識した例です。
既存ファイルを読み込む場合に、7bit or 8bit文字コードの場合、自動で文字コードを検出する機能があります。
ただ、これは、ある程度、日本語文字列(ひらがな)が含まれている必要があり、ヒットしない場合もあります。
その場合、デフォルトの動作では、ASCII(ANSI規格)と判断され日本語とはみなされないことになります。
このような時に、とりあえず、デフォルトとして Shift JIS or EUC JP or UTF8 で開くことができるようにするための機能です。
つまり、マルチバイトを含む文書の場合、ASCIIでなく日本語が扱える文字コードのいずれかを指定できるようにします。
マルチバイトを含まない文書の場合、ASCIIと判断されます。既存機能で、ASCIIと判断された文書を自動でUTF8として取り扱う機能もあります。
以下は、その機能の設定画面です。
[ 設定 ] - [ 環境設定 ] で以下の画面左から [ 新規作成 ] を選択します。
画面右の [ 開いているANSIファイルに適用 ] にチェックすると、ASCIIと判断された文書は、UTF8 BOMなし で開きます。
このデフォルトの文字コードの指定は、インストール先ディレクトリのconfig.xmlを直接編集することで指定することができます。
この時、必ず、Notepad++を終了した状態で編集します。
|
上記の GUIConfigタグの name="DetectEncoding" の 属性 ja-pack-auto-detection-default-ansi の値を編集することで実現します。
上記は、デフォルトの設定です。"Shift_JIS" は、文字通り Shift JISです。EUCの場合は、"EUC-JP" と指定して、Notepad++を起動すると、デフォルトでECU JPに切り替わります。
この機能のベースは、Notepad++ (日本語版) 0.2 を公開してみた。(正確には、Scintillaをカスタマイズしてみた) でリリースしている Scintilla のDLLで実現している機能です。
ただ、これまでは、タブ、空白、全角空白を一括で表示・非表示の切り替えを行うことができましたが、個別に表示・非表示の切り替えを行うことができませんでした。
これを、各タブ、空白、全角空白、改行のそれぞれで表示・非表示できるようにGUIの制御を変更しました。
これに伴い、Scintillaでもそれぞれに表示・非表示ができるように変更しました。
以下は、それぞれの設定によっての見え方です。
行の折り返し(ウィンドウ幅で折り返す機能)ワードラップは、今までもありましたが、これは、単語ワードラップ、あるいはワードラップなしのいずれかの切り替えとなっていました。
これを、単語ワードラップ、文字列ワードラップ、ワードラップなしの3択に変更しました。
ワードラップ機能では、日本語の単語を正しく認識できない上に、日本語独自の禁則処理などは皆無です。
そのため、既存のワードラップ機能ありとした場合は、以下のような変な折り返しを行ってしまいます。
これでは、禁則処理なしでも文字列できれいに並んでくれた方が、まだ、いくらかましなので、文字列ワードラップの選択ができるようにしました。
文字列ワードラップは、そもそもScintillaに既にあった機能です。それを使えるようにGUI側の変更を行いました。
以下は、それぞれの設定によっての見え方です。
上記以外にも、
Notepad++ (日本語版) 0.2 を公開してみた。(正確には、Scintillaをカスタマイズしてみた) で提供していた 日本語の選択機能や、
Notepad++ プラグイン Change Markers を公開してみた。 で提供していた 変更行の表示のためのプラグインなども同梱されています。
ここで提供しているファイルには、Notepad++本体を含め一式がZIP形式で提供されています。
そのため、適当なディレクトリに解凍し、インストール完了となります。必ず、書き込み時に管理者権限が必要でないディレクトリへ解凍してください。
以下のように無事起動すればOKです。
先にも記述したように、Notepad++内部では、日本語の取り扱いは UTF8で行います。(既存処理)
Shift JIS or EUC JPなどのマルチバイトタイプの文字コードは、一旦、UTF16(いわゆるWindowsのUNICODE)へ変換され、さらに、UTF8へ変換されます。
編集は、UTF8で行われます。
保存時は、先の逆をたどります。UTF8を、一旦、UTF16(いわゆるWindowsのUNICODE)へ変換し、Shift JIS or EUC JPへ変換、保存します。
そのため、UTF16(いわゆるWindowsのUNICODE)とShift JIS or EUC JPの間で Windows APIで変換できない文字列は、正しく動作しません。
(マイクロソフトでは、http://support2.microsoft.com/kb/170559/ja にて詳細が記載されてあります。)
先にも記述したように、ワードラップで禁則処理は行われません。
また、単語ワードラップを指定しても日本語の単語を判断して折り返しは行いません。
単語と認識するのは、英語の時と同じで、半角空白、ピリオド、カンマなどの記号によって判断されるのみです。
ワードラップの切り替え処理が、以前はマクロ制御できていたようです。 今回は、そこまで対応していません。
制御文字の切り替え処理は、マクロ制御できません。既存からできていないようです。
機能が変更されたので、上記の機能は無くなったため、ツールバーのアイコンも削除されました。
日本語でWindowsであれば、ASCII = Shift-JISと思いがちですが、Notepad++では厳密に異なります。
そのため、文字コードがASCII で認識されたドキュメントでは選択が正しく動作しません。
また、全角空白も同様表示されません。
ASCII で自動認識された場合は、[ エンコード ] - [ 文字セット ] - [ 日本語 ] - [ Shift-JIS ] を選択することで、選択および全角空白が正しく動作します。
また、上記の機能のデフォルト文字コード指定と、既存機能のASCIIと判断された文書を自動でUTF8として取り扱う機能を活用することで、ASCIIと自動認識することはなくなるかと思います。
そのため、これらの機能の組み合わせは、この問題の回避策として用いることもできるかと思います。
アメリカ合衆国の工業規格を定める機関
情報交換のための文字コード規格
Notepad++は、
たとえば、以下のように sc を選択しただけで、同一単語(ここでは"sc")を同じ文書ファイル内で、直ちに検索し、表示切替をします。
これが、日本語を選択した場合、うまく機能する場合としない場合があります。 通常の検索は、もれなくヒットしますが、上記の簡易検索ではヒットしない場合があるので注意が必要です。
2 のコメントがあります。 “Notepad++ ja-pack 1 (日本語パック) を公開してみた。”
コメントをどうぞ
2015年08月03日 @ 22:25:12
\plugins\API\に保存しなければならいファイルがあるのですが、どうすればいいですか?非日本語の本家の場合、インストーラーでインストールprogramフォルダ内のインストールした先のフォルダにつくられるようです。
2015年08月04日 @ 01:07:44
matushiro97 さん
コメントありがとうございます、管理人です。
早速ですが、簡単なやり方を解説しておきます。
基本的に解凍したディレクトリに\plugins\APIs\を丸ごとコピーすれば良いだけです。
コピーした後、notepad++.exeをダブルクリックで起動してみてください。
また、逆に本家の方へ、カスタマイズ版をコピーする方法もあります。
1. Notepad++ ja-pack All in One – Binary を適当なディレクトリに解凍する。
2.本家の同一バージョンのディレクトリへ以下のファイルをコピーする。
notepad++.exe
SciLexer.dll
コピーする際は、必ず、本家をバックアップしておきましょう。もし、動作が不満、不安定などでもとに戻せるようにしておきましょう。