﻿Notepad++和式 (aka Notepad++JS aka nppjs) ------------------------------------------------------------------------------

海外の掲示板で「おすすめのテキストエディタは？」と質問すると、かならず「Notepad++」という返事が返ってくるくらい有名なア
レです。

すでに日本には優秀なテキストエディタが多数存在するので、さほど価値を感じないかもしれませんがプラグインが豊富という魅力が
あります。サブ・エディタとしていかがでしょうか。

インストール方法：
  どっかテキトーなフォルダに解凍するだけです。
  C:\Program Files とかには入れないほうがいいと思いますが、自分で判断してください。
  Notepad++.exe をダブルクリックして起動してください。
  ショートカットを作成すると使いやすくなります。

  フォントは等幅フォントの「MeiryoKe_Gothic」というのが一番マシです。ネットで検索してガンバッテ入手してください。
  (ただし「TÔKYÔ」の「Ô」のような^付き欧文文字の上端が欠けますが)

すでにオリジナル Notepad++ をインストールしている場合、和式とオリジナルは同時起動しないほうがいいでしょう。
適宜使い分けてください。

開発環境 (2016年9月現在)：
• Windows 10 Pro Anniversary (64bit)  ※Windows 8.1 からのアップグレード
• Windows XP Pro SP3 (32bit)
上記での動作を確認しています。

履歴 ver7 まで ---------------------------------------------------------------------------------------------------------
                                                                                                              2016年10月

ここで使用する用語
 • オリジナル = Notepad++ https://notepad-plus-plus.org/
 • scintilla = Notepad++ など海外の多数のテキストエディタに使われているコンポーネント http://www.scintilla.org/
 • Uicode = Microsoft Windows の世界では Uicode と言えば UTF-16LE を指します。UTF-8 では無い事に注意。

 • メニューやダイアログに使用されている、いくつかの用語・表記を変更しています。
	「エンコード」 ⇒ 「文字コード」（URLエンコードとか、MIMEエンコードとか、エンコードと名の付くものがいっぱいある
		ので）
	「言語」 ⇒ 「シンタックス」（日本語・中国語などの言語と紛らわしいため。vimやWinMergeの訳にあわせました）
	「フォーマット」 ⇒ 「改行」（漠然としすぎているため）
	・・・などなど。

	※日本語翻訳(localization\japanese.xml)を全面的に書き換えています。オリジナル Notepad++ に付属の言語ファイルとは
	　互換性がなくなっています。オリジナルとNotepad++和式を混ぜないでください。


■改行、TAB、空白、折り返し、などの見えない文字を視覚化する際の記号がえぐいので、矢印記号などの控えめな表現にしました。
■全角空白、EOF も記号で視覚化しています。

■「BOM」を視覚化しました。(テキストファイルの先頭は除く)
	diff コマンドなどのファイル比較ツールで BOMなしファイルと BOM付きファイルを比較すると、出力ファイルの途中に BOM
	が混じってしまいます。このようなテキストも表示が乱れずに視覚的に表現されるようになりました。

■日本語に対応しました。
	平たく言えば、JIS漢字(ISO-2022-JP)、EUC-JP に対応しました。
	ただし mlang.dll の制限により「補助漢字」には対応できません。

■Uicode (UTF-16LE、UTF-16BE)のサロゲートペア(U+10FFFFまで)が読み書きできるようにしました。
	オリジナルは、USC-2(U+00FFFFまで)しか読み書きできませんでした。

■scintilla (SciLexer.dll) の内部表現を UTF-8 のみに統一しました。文字コードの考え方を全面的に変えました。
	テキストファイルを読み込むと、メモリー内では UTF-8 に変換して、すべての処理を行います。
	保存のときは UTF-8 から元の文字コードに変換しながら書き出します。
	オリジナルの SciLexer.dll は、テキストファイルと同じ文字コードのままの内部表現で
	ASCII、UTF-8、シフトJIS、中国語、台湾語、ハングル･･･と、それぞれで別々の処理をしていました。
	一般的な Windows アプリケーションは内部表現が Uicode (16ビット幅) なのでそうしたいとこなのですが、scintilla の制
	限で無理です。
	なお、notepad++.exe 側は基本的に Uicode (16ビット幅) アプリです。

■scintilla API を一部変更したため、オリジナル Notepad++ に付属の SciLexer.dll とは互換性がなくなっています。オリジナル
	とNotepad++和式を混ぜないでください。

■仕様変更：「文字コード」（オリジナルは「エンコード」）のメニューを一新しました。
	• 廃止
	「ANSIで開く」「UTF-8で開く」「UCS-2で開く」など「○○で開く」すべて
	「ANSIに変換」「UTF-8に変換」「UCS-2に変換」など「○○に変換」すべて

	たとえば、シフトJIS のテキストファイルを読み込んで Unicode に変更する場合・・・
	オリジナルは、内部表現が シフトJIS なので、「エンコード」メニューから「UCS-2に変換」を選んだタイミングで一旦ク
	リップボードにコピーしてから、内部表現をあらわす変数を UTF-16 に変更し、クリップボードからエディタに貼り付けてい
	ます。（つまり、メニューを選んだ時にエディタ内部で変換される）
	⇒ Notepad++和式 では、ファイルから読み込んだらすべて内部表現 UTF-8 にデコードしていますので、メニューから
	「Unicode」を選ぶと、内部表現をあらわす変数を UTF-16 に変更するだけで、内部表現は UTF-8 のままです。ファイルを保
	存するときに UTF-8 から UTF-16 に変換しながら保存します。（つまり、ファイルに保存するときに変換）

	• メニューから文字コードを選択したとき、ファイルから読み込み直すか、読み込まずにそのままかを選択するダイアログが現
	れます。
	「ファイルを読み込み直しますか？」
	「はい：読み込み直す」 ・・・編集途中の文書は失われます。メニューから選んだ文字コードでファイルから読み込み直し
				ます。
	「いいえ：このまま変換する」 ・・・編集途中の文書はそのままエディタ内に維持されます。

	• 設定ファイル「customEncodeMenu」を編集すればメニューをカスタマイズすることができます。

	• BOM付きのテキストファイルは常にUTF-8（あるいはUnicode）で読み込まれます。
	たとえば、BOMつきの UTF-8 ファイルを「シフトJIS」で読み込もうとしても、UTF-8 ファイルと判断して正常に読み込まれ
	ます。（文字化けを防ぐことができます）
	保存するときにシフトJISに変換されます。BOMつきの UTF-16についても同様です。

	注意：BOMつきの UTF-8 ファイルを BOMなし UTF-8 で読み込もうとしても正常に読み込まれるので、もともと BOM が付いて
	いたのか、無かったのかが分かりにくくなります。上書き保存するとき注意してください。

■仕様変更：テキストファイルを保存する直前に、エンコードできない文字が無いかの検査をおこなうようにしました。
	※いまのところ、ファイルを読み込むときは検査していません。

■仕様変更：スナップショットファイルのエンコードを UTF-8 BOM 付きに固定しました。
	(backup フォルダに作成されるファイルです)
	平たく言えば、メモリーをそのままダンプしてるだけです。
	オリジナルは、元のテキストファイルと同じ文字コードで保存していましたが、
	エンコードの自動判定に失敗し文字化けすることがあるという不具合がありました。

■仕様変更：セッションファイル(session.xmlなど)の encoding= (文字コード)
	オリジナルは、UTF-8・UTF-16 のユニコード系は encoding="-1" となっており、UTF-8 なのか UTF-16 なのかは区別できま
	せんでした。次回起動時のセッション復元ではユニコード系テキストファイルだけ文字コードを自動判定していましたが、
	BOM の無いものは判定に失敗することがあるため、encoding="65001" のように明示的にしました。BOM 付きは負の数であら
	わします。
	凡例:	オリジナル      ⇒ Notepad++JS
		encoding="932"  ⇒ encoding="932"    シフトJIS
		encoding="-1"   ⇒ encoding="1200"   UTF-16 LE BOMなし
		encoding="-1"   ⇒ encoding="-1200"  UTF-16 LE BOMつき
		encoding="-1"   ⇒ encoding="1201"   UTF-16 BE BOMなし
		encoding="-1"   ⇒ encoding="-1201"  UTF-16 BE BOMつき
		encoding="-1"   ⇒ encoding="65001"  UTF-8 BOMなし
		encoding="-1"   ⇒ encoding="-65001" UTF-8 BOMつき

■仕様変更：各種設定ファイルの xml ファイルのエンコードを UTF-8 に固定しました。
	config.xml、session.xml などのファイルをオープンするときは "ccs=UTF-8" 指定で開いています。
	漢字を数値文字参照でなく、そのままの漢字で保存することができるのでメンテナンス性が向上します。
	notepad++ が自動的に保存するときは xml ファイルの先頭に BOM が付きますが、BOM は付いていても無くても構いません。
	BOM が有れば読み飛す処理をしています。
	<?xml version="1.0" encoding="Windows-1252" ?> のような指示は【無視】しています。

■仕様変更：セッションファイル(session.xmlなど)の lang= (シンタックス)
	例:
	オリジナル      lang="&#x6A19;&#x6E96;&#x30C6;&#x30AD;&#x30B9;&#x30C8;" (漢字「標準テキスト」の数値文字参照)
	⇒ Notepad++JS	lang="normal" (翻訳ファイルに影響しないよう英字に統一)

■機能追加：「タグジャンプ」追加、キー割り当て：F10
	ctags ではありません。vim の gf コマンドに似ていますがちょっと違います。
	• 桁移動の機能は有りません。行移動のみです。
	• ファイル名と行番号の間区切りとなる文字
		(、*、?、"、<、>、|、および TAB などのコントロールコード 1文字
	• 空白(0x20)はファイル名に使える文字なので区切りになりません。
	• ファイル名にカッコ '(' が含まれていると区切りとみなされるので正しく動作しません。
	例：
		〇 C:\project1\src\main.c(123): error ...	cl (Visual C++) など
		〇 C:/project1/src/main.c:123:40: error ...	gcc,javac,grep など
		〇 C:/project1/src/main.c|123 col 40| error ...	vim など
		〇 C:/project1/src/main.c <TAB> 123  error ...
		× C:/project1/src/main.c <空白> 123  error ...
		× C:\project1\src\main(1).c(123):  error ...

■機能追加：指定桁数で折り返す
	折り返し線(境界線、Vertical Edge)で折り返します。折り返し線は表示していなくても折り返しできます。
	不具合：横スクロールバーが出ません。
	不具合：ドキュメントマップが指定桁数では折り返していません。

■機能追加：文字単位で折り返す（ただ単に欧文の「ワードラップ」をしないだけです）
	「ウインドウ幅で折り返す」「指定桁数で折り返す」の折り返し方
	設定 > 環境設定 > 編集画面 > 行折り返し
	• 和文折り返し：いわゆる「ワードラップ」はしません。日本語の文章(表意文字)では１文字が１単語だからです。
	• 欧文折り返し：連続する ASCII の数字・英字・「_」を単語とみなして、ワードラップします。それ以外の文字(漢字など)
	                はワードラップしません。
	• 空白折り返し：ASCII の SPACE で折り返します。
	※ いずれも、改行のぶら下げは行います。
	制限事項：禁則処理などには、まだ対応していません。

■機能追加：左マージンの調整
	行番号と編集テキストがくっついて見づらいので。
	設定 > 環境設定 > 編集画面 > 余白 の左右スライダーで設定できます。
	上マージンの調整もしたかったんですが、簡単にはいかないようです。
	オリジナルは、上下左右の境界線の幅が同時に変わる仕様でしたが、これは廃止しました。

■機能追加：行間調整
	設定 > 環境設定 > 編集画面 > 余白 の上下スライダーで設定できます。
	また、SHTFT+CTRL+マウスホイール上下でも調整できます。
	数値は文字の高さに対するパーセントです。（ドット数ではありません）

■localization\japanese.xml に、アクセス キーを記入することができるようにしました。
	アクセス キーとは、たとえば、
	  "ファイル" → "ファイル(F)"
	  "新規作成" → "新規作成(N)"
	Alt+F Alt+N を押せば、マウスを使わずにキーボードだけで新規作成できるような機能です。
	(もともとあった機能ですが、日本仕様に対応していなかったためか、削除されてしまったので復活しました)
	ユーザが japanese.xml を編集することで、アクセス キーを自由に追加変更できます。"新規作成(&amp;N)" のように記述し
	ます。localization\japanese.xml を編集したら nativeLang.xml にコピーしてください。
		例： COPY "localization\japanese.xml" "nativeLang.xml"

■ルーラ プラグイン NppHorizontalRuler を添付しました。
	オリジナル版の配布元: http://freesftys.lv9.org/app/npp/#npp-HorizontalRuler
	平たく言えば、編集画面の上に横長く出る 目盛り です。
	大幅に機能縮小したサブセット版です。他の Notepad++ では動作しません。
	目盛り1つ分はASCIIスペース(いわゆる半角スペース)の幅です。「メイリオ」や「游」のような極端に半角スペースが狭いフ
	ォントには不向きかもしれません。
	ルーラーをダブルクリックすると「折り返し線」の桁位置を変更することができます。
	表示・非表示はメニューの プラグイン > Ruler で行えます。
	フォントやフォントサイズを変えるには、plugins\Config\HorizontalRuler.ini を直接編集してください。
	「FontName=MS ゴシック」のように漢字を使うときは、Uicode または シフトJIS で保存してください。残念ながら ini フ
	ァイルは UTF-8 で保存できません。
	制限事項：動作が重いです。カーソルを左右に移動すると、ワンテンポ遅れてルーラが追いついてきます。
	制限事項：タブバーが表示されない設定(F12 など)のときはルーラも出ません。
	制限事項：アラビア語や昭和初期の日本語など、右から左に表示する機能はありません。

■仕様変更：「シンタックス」メニューの項目数が多すぎて縦一列に表示しきれずデスクトップからはみ出してしまうので、メニュー
	を折り返すようにしました。
	※ 環境設定 > シンタックス > メニューをまとめる のデフォルト値を OFF に変更しました。

■変更：カーソルは反転表示
	オリジナルのカーソルはは半透明の四角です。カラー設定によっては見えにくくなることがありました。

■変更：Blockカーソル形状の変更
	環境設定 > 編集画面 > カーソル > 幅
	       挿入    上書き
	1～3    I       █
	Block   ▄       █       ※オリジナルは Block の挿入と上書きが逆

■変更：カーソルの上下移動が奇妙な動きをするので修正。

	• 1行めで「↑」キーや「Page Up」キーを押したとき、カーソルが左端(テキストファイルの先頭)に寄る。
	最終行で「↓」キーや「Page Down」キーを押したとき、カーソルが右端(テキストファイルの末尾、EOF)に寄る。
	⇒ そのままの位置を維持（カーソルは移動しない）するように変更しました。
	別に不具合ということではなく、海外製の他のテキストエディタも同じ動きをするので、アチラの国ではアタリマエなんでし
	ょうか。日本製のテキストエディタではあまり見られない動きなので日本仕様に変更しました。

	• 座標計算を 32ビット整数の int で計算するよう変更。
	オリジナルは 32ビット単精度実数の float で計算しています。float は 24ビット分の精度しか無いため、大きなテキスト
	ファイルを扱うと「情報落ち」で誤作動していました。
	ただし、32ビット整数でも桁あふれのおそれがあるので、あまり大きなファイルは編集しないほうがいいでしょう。

	• 長さの違う行と行を縦方向にまたいでカーソル移動しても、横座標が保たれるようになっていますが、
	フォント変更、ズーム表示、折り返し表示などで誤作動するため修正しました。

	• そのた、カーソルを上下移動するときに起こるさまざまな不具合を修正しました。

■不具合修正：カーソルをエディタの右端から、さらに右へ移動すると、カーソルがはみ出したり隠れてしまう。

■仕様変更：ズーム（拡大表示、縮小表示、Ctrl+Num +、Ctrl+Num -、Ctrl+マウスホイール）
	オリジナル      左右(上下)ビュー別に、開いている文書すべてズームされる。config.xml に記録。
	⇒ Notepad++JS	タブごとに個別にズームし、session.xml に記録。

■仕様変更：指定桁で折り返す、ウインドウ幅で折り返す、折り返し線の桁位置、折り返し線の実線
	オリジナル      左右(上下)ビュー別に、開いている文書すべて同じ設定。config.xml に記録。
	⇒ Notepad++JS	タブごとに個別に管理し、session.xml に記録。

■仕様変更：挿入モード、上書きモードはタブごとに個別に管理し、session.xml に記録。

■仕様変更：「表示」メニューに「TAB幅 4」「TAB幅 8」を追加。
	TAB幅はドキュメントごとに変更することができるようにし、session.xml に記録。

■不具合修正：矩形選択時に、改行を表す記号が、カーソルを追いかけて横移動してしまう不具合を修正しました。
■不具合修正：矩形選択時に、改行を表す記号が、カーソルを追いかけて横移動してしまう不具合を修正しました。

■仕様変更：文字列ダイアログ「上へ」「下へ」ラジオボタンを廃止して押しボタンに変更
	  (追加)	⇒「上検索」
	「次を検索」	⇒「下検索」
	「上へ」	⇒  (廃止)
	「下へ」	⇒  (廃止)

■仕様変更：文字列検索開始位置
	下向き(正方向)(F3)
		オリジナル：選択範囲の末尾から検索
		変更：カーソル位置から検索
	上向き(逆方向)(Shift+F3)
		オリジナル：選択範囲の末尾の１つ前から検索
		変更：選択範囲の反対側(カーソルから遠い側)から検索

■不具合修正：SCI_WORDSTARTPOSITION (単語の先頭・末尾を探すAPI)
	オリジナルは、パラメータで指定した位置の一つ左から単語の先頭を探すという変な仕様で、単語の先頭をパラメータに渡す
	と、一つ左の文字をゴミとして拾ってしまう。
	⇒ パラメータで指定した位置からに変更。

■仕様変更：「編集禁止」は自由に解除できるようにしました。
	• 読み取り属性のついたテキストファイルを開くと、編集禁止状態になります。また、「ログ監視モード」でも編集禁止状態
	  になります。
	• 「編集禁止」はメニューから自由に解除できます。
	• このままでは上書き保存はできませんので「読み取り専用ファイルの属性を解除」して上書きするか、
	  「名前を付けて保存」してください。
	※参考：Visual Studio 2015 のオプション「読み取り専用ファイルの編集を有効にし、保存時に警告する」

■機能追加：「最後に使ったタブ」追加、キー割り当て：Ctrl + Num 0
	最後に開いたタブに切り替えます。

■仕様変更：新規作成のファイル名をフルパスに
	新規作成の文書には「new 1」のような仮の名前が付いていましたが、フォルダ名を追加してフルパスにしました。
	フォルダは 設定 > 環境設定 > 既定のフォルダ の設定に従います。

	セッションファイル(session.xmlなど)にもフルパスで保存されます。
	オリジナル      filename="new 1"
	⇒ Notepad++JS	filename="C:\Users\Tom\Documents\new 1"

■不具合修正：ユーザー定義のシンタックスを削除すると、メニュー表示のものと食い違いが出る。
■不具合修正：ユーザー定義のシンタックスをインポートしてもメニューに表示されない。

■不具合修正：「ログ監視モード (tail -f)」において他のプロセスにファイルを削除またはリネームされたときの挙動
	複数のファイルを開いており、当該ファイルが非アクティブなタブの場合、無関係なアクティブなタブが「ログ監視モード」
	になってしまう。
	⇒ 非アクティブなタブの「ログ監視モード」を自動的に OFF にしようとして失敗している。仕様上無理なので、そのまま何
	もせず続行するよう修正。
	※アプロケーションによっては、ファイルを上書き保存するときに元のファイルを上書きせずに、元のファイルを *.BAK に
	リネームしてから新規作成したファイルに保存するものがある。元のファイル名と同じファイルが即座に作成されるので、
	Notepad++ 側は無視して続行した方が扱いやすいと判断しました。

■仕様変更：「ファイルの状態監視」において他のプロセスにファイルを更新されたときの挙動
	複数のファイルを開いており、当該ファイルが非アクティブなタブの場合
	「自動で最新状態に更新」OFF、または当該ファイルに Notepad++ 側で編集を加えていた場合
	当該ファイルがアクティブに切り替わってしまう。
	⇒ 切り替わらないように変更

■仕様変更：ビュー２分割で両方に同じファイルを表示し、他のプロセスにファイルを更新されたときの自動スクロール
	• ファイルの状態監視」の「更新後最後の行にスクロール」がONのとき
		片方のビューだけスクロールする。 ⇒ 変更なし
	• 「ログ監視モード (tail -f)」
		両方のビューがスクロールする ⇒ 片方のビューだけスクロールするよう変更。
	せっかく２分割で同じファイルを表示させたのだから、一方は勝手にスクロールしないようにして別々の行を閲覧したい。

■機能追加：ビュー２分割のスプリッターのポップアップメニューに「Swap」を追加
		Rotate to right
		Rotate to left
		Swap		･･･追加

■仕様変更：ステータスバーのカーソル位置表示は、行・桁・行頭からの文字数としました。
	※参考：Visual Studio 2015 のステータスバーと同じ形式

■仕様変更：IMEの再変換機能で、範囲選択せずに「変換」キーを押しただけのときの自動選択範囲を、「メモ帳」と同じに変更しま
	した。
	※動作確認したのは Windows 10 と、OSに付属の MS-IME です。
	※Google日本語入力 では再変換キーを押しただけでは１文字分しか再変換しません。これは Google日本語入力 の仕様です。
	いずれのIMEも、範囲選択してから再変換キーを押せば意図したとおり再変換できます。

■機能追加：ASCIIコード表：マウス右クリックでコードページを切り替えられるようにしました。
	128～255(0x80～0xFF)がコードページごとに異なります。0～127(0x00～0x7F)は変わりません。

■仕様変更：文字コード検索：内部表現を UTF-8 にした都合で、UTF-8 の2バイトめ以後にはマッチしないようにしました。
	文字の2バイトめにマッチするとカーソルが隠れて見えないなどの不都合があるためです。
	たとえば、「あ」は UTF-8 表現では { 0xE3,0x81,0x82 } の3バイトですが、先頭の１バイトのみ検索対象となります。
	2～3 バイトめは無視します。
	非ASCII文字(128-255) で検索すると先頭バイトの 0xE3 にマッチしますが、2バイトめ以後の 0x81,0x82 にはマッチしませ
	ん。

■64ビット版 Windows 上で使用する場合、プロセスのユーザ空間が 4GB となるように設定しています。

	コンパイルオプション LARGEADDRESSAWARE で IMAGE_FILE_LARGE_ADDRESS_AWARE フラグを立て 4GT 動作が可能としました。

	ただし、あくまでも Notepad++JS は 32ビットアプリケーションなので、2ギガバイトを超えるテキストファイルを扱うこと
	ができません。（Notepad++ は1つのファイルを、連続した単一のメモリーブロックに配置します）
	また、読み込んだファイルを管理(文字の色など)するための作業用のメモリーが必要なので実際にはさらに制限があります。
	こちらで実験したところ、1ギガバイト程度のファイルが限界のようです。
	他のファイルを編集中に巨大なファイルを開くと、他のファイルを道連れにクラッシュすることも考えられますので、巨大フ
	ァイルは慎重に取り扱ってください。

------------------------------------------------------------------------------------------------------------------------