|
|
| (同じ利用者による、間の2版が非表示) |
| 1行目: |
1行目: |
| Mery マクロ: アラビア語ヒンディー数字
| |
| <pre>
| |
| 選択範囲のアラビア語のヒンディー数字とアラビア数字、
| |
| ۰۱۲۳۴۵۶۷۸۹ と 0123456789 を相互に置換
| |
|
| |
|
| ヒンディー数字(インド数字)と、アラビア数字は、アラビア語の文中で、
| |
| どちらを使うこともできる。
| |
| 同じ文章で両方の表記が混在していることもある。
| |
|
| |
| どちらの数字も、RTL(右から左)の文中で、左から右に読み書きする。
| |
|
| |
|
| |
| ※ ヒンディー数字は Unicode 文字なので、シフトJIS など
| |
| これ以外のエンコーディングでは扱えない。
| |
|
| |
|
| |
| ○ 検索した複数の文字の、対応する複数の文字への相互置換(交換)
| |
|
| |
| 置換の途中で、括弧で捕獲した部分文字列( p1 )を、関数で受け取り、関
| |
| 数内で必要な処理をしてから、その処理結果を括弧の値として、置換する。
| |
|
| |
| この「コールバック関数置換(ラムダ式)」は、Mery の正規表現置換では、
| |
| できない。そこで、マクロでは JavaScript の正規表現を replace で使う。
| |
| </pre>
| |
|
| |
| ※ マクロitokusu_ArabicNum: [[ファイル:itokusu_ArabicNum.zip]]
| |
| <pre>
| |
| アラビア語ヒンディー数字(Alt+N).js
| |
|
| |
| 下の内容を、上の名前のファイル (UTF-8 BOM付き) にして、
| |
| My Macros\itokusu に置く。
| |
| もしフォルダがなければ、itokusu フォルダを作成してからコピー。
| |
|
| |
| そこから Mery で開いて、マクロ - これを選択、
| |
| ツール - オプション - キーボード の マクロ で Alt+N に割り当て。
| |
|
| |
| または…、
| |
|
| |
| マクロitokusu の使い方:
| |
| フォルダ付きで展開したら、itokusu フォルダを My Macros にコピー。
| |
| (すでにフォルダがあれば、そのフォルダ内にファイルを追加コピー)
| |
|
| |
| マクロ - カスタマイズ - 新規作成 で、 My Macros\itokusu フォルダ
| |
| を選択、Ctrlキーを押しながらファイル名をクリックで、登録しようと
| |
| している複数のマクロをすべて選択してから - 開く。
| |
|
| |
| アラビア語ヒンディー数字(Alt+N).js
| |
| は、
| |
| ツール - オプション - キーボード の マクロ で Alt+N に割り当て。
| |
| </pre>
| |
|
| |
| <source lang="javascript">
| |
| // - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
| |
| // アラビア語ヒンディー数字(Alt+N)
| |
| //
| |
| // 選択範囲のアラビア語のヒンディー数字とアラビア数字、
| |
| // ۰۱۲۳۴۵۶۷۸۹ と 0123456789 を相互に置換
| |
| //
| |
| // ヒンディー数字(インド数字)と、アラビア数字は、
| |
| // アラビア語の文中で、どちらを使うこともできる。
| |
| // 同じ文章で両方の表記が混在していることもある。
| |
| //
| |
| // どちらの数字も、RTL(右から左)の文中で、左から右に
| |
| // 読み書きする。
| |
| //
| |
| // 文中の数字ではないところも、Mery は RTL 言語表記には
| |
| // 対応していないため、すべて左から右に表示する。
| |
| //
| |
| // ※ ヒンディー数字は Unicode 文字なので、シフトJIS など
| |
| // これ以外のエンコーディングでは扱えない。
| |
| //
| |
| // revised inuuik 2011-09-25
| |
| // revised inuuik 2012-09-20
| |
| // - ------------------------ --------------------------------------------------
| |
| {
| |
| var s = document.selection;
| |
| var x = s.GetActivePointX(mePosView);
| |
| var y = s.GetActivePointY(mePosView);
| |
| var tx = s.GetTopPointX(mePosView);
| |
| var ty = s.GetTopPointY(mePosView);
| |
| var bx = s.GetBottomPointX(mePosView);
| |
| var by = s.GetBottomPointY(mePosView);
| |
|
| |
| Redraw = false;
| |
| if (!s.IsEmpty) {
| |
| var t = s.Text;
| |
| s.Text = t.replace(/([0-9۰۱۲۳۴۵۶۷۸۹]+)/g,
| |
| function(str, p1, offset, s) {
| |
| var da = new Array();
| |
| da = {"0":"۰","1":"۱","2":"۲","3":"۳","4":"۴","5":"۵","6":"۶","7":"۷","8":"۸","9":"۹","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};
| |
| var r = "";
| |
| var d = p1.toString();
| |
| for (var i = 0; i < d.length; i++) {
| |
| r += da[d.charAt(i)];
| |
| }
| |
| return r;
| |
| }
| |
| );
| |
| }
| |
| if (x === tx && y === ty) {
| |
| s.SetAnchorPoint(mePosView, bx, by);
| |
| s.SetActivePoint(mePosView, tx, ty, true);
| |
| }
| |
| else {
| |
| s.SetAnchorPoint(mePosView, tx, ty);
| |
| s.SetActivePoint(mePosView, bx, by, true);
| |
| }
| |
| Redraw = true;
| |
| }
| |
| // - ------------------------ --------------------------------------------------
| |
| </source>
| |