「サロゲートペアのコードポイント表記」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Inuuik (トーク | 投稿記録)
編集の要約なし
Inuuik (トーク | 投稿記録)
編集の要約なし
1行目: 1行目:
Mery マクロ:  サロゲートペアのコードポイント表記
Mery エディタ マクロ:  サロゲートペアのコードポイント表記
<pre>
<pre>
   Surrogate Pair : Unicode UCS-4 (4バイト文字)
   Surrogate Pair : Unicode UCS-4 (4バイト文字)

2012年10月8日 (月) 13:55時点における版

Mery エディタ マクロ: サロゲートペアのコードポイント表記

  Surrogate Pair : Unicode UCS-4 (4バイト文字)


  サロゲートペアのコードポイント (16面 x 65536字)
    第1面   SMP 追加多言語面  U+10000 - U+1FFFF
    第2面   SIP 追加漢字面    U+20000 - U+2FFFF
            …
    第15面  私用面            U+F0000 - U+FFFFF
    第16面  私用面            U+100000 - U+10FFFF
      .. 16 x 256 x 256 =  16 x 65536 = 1,048,576字

  サロゲートペアの内部コード (4バイトの16進数 上位1024字 + 下位1024字)
    上位 0xD800 - 0xDBFF    0x400 (1024字)    D8 D9 DA DB  0x100 (256字) x 4
    下位 0xDC00 - 0xDFFF    0x400 (1024字)    DC DD DE DF  0x100 (256字) x 4
      .. 1024 x 1024 = 1,048,576字


  サロゲートペア (UCS-4 4バイト文字)  1,048,576字
    \uD800\uDC00 (U+10000) - \uDBFF\uDFFF (U+10FFFF)


  サロゲートペアの全文字を検索(鬼車正規表現)
    [\x{10000}-\x{10FFFF}]

  鬼車では、サロゲートペアの U+1F017  \uD83C\uDC17 を \x{1f017} のよう
  なコードポイント、または文字集合の文字で指定します。

  ※(ご注意) Mery 1.1.2.2840 に添付の onig.dll では、この \x{1f017} の
    検索はできません。コード表記ではない文字集合は使えます。

  通常の UCS-2 は、たとえば \u4E0A 上 は、\x{4e0a} または \x0a\x4e 
  または、文字集合の文字で検索します。

  ※ Mery の鬼車で、コードポイントではなく、内部コードによる検索をしたい
  ときは、Mery 内部の UTF-16LE の1バイトずつを連続の16進数で表記します。
  サロゲートペアの U+1F017  \uD83C\uDC17 は \x3c\xd8\x17\xdc として検索
  できます。

サロゲートペア コードポイント表記 (U+1HHHH) と 内部コード表記 (\uHHHH\uHHHH) の置換

 内部コードは JavaScript 表記。
 鬼車では、この内部コード表記での検索はできません(上記参照)。


※ マクロitokusu_SurrogatePair: ファイル:itokusu SurrogatePair.zip

// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// サロゲートペア_内部コードをコードポイントに.js
//
// サロゲートペアの表記置換(1字の表記を選択して実行)
// 内部コード表記 (\uHHHH\uHHHH) をコードポイント表記 (U+1HHHH) に置換
//
// revised  inuuik  2012-09-11
// revised  inuuik  2012-09-23
// - ------------------------ --------------------------------------------------
{
  var s = document.selection;

  if (!s.IsEmpty) {
    var t = s.Text;
    var re = /\\u(D[89AB][0-9A-F]{2})\\u(D[C-F][0-9A-F]{2})/ig;
    if (re.test(t)) {
      s.Text = t.replace(re, 
        function(str, p1, p2, offset, s) {
          var ucp = "", pre = "U+";
          if (p1 === undefined || p2 === undefined) {
            return ucp;
          }
          ucp = ((((parseInt(p1, 16) & 0x000003ff) << 10) | (parseInt(p2, 16) & 0x000003ff)) + 0x00010000).toString(16).toUpperCase();
          return pre + ucp;
        }
      );
    }
  }
}
// - ------------------------ --------------------------------------------------
// - 糸くす~------------------------------------- Copyright(C)2011-2012 inuuik -
// サロゲートペア_コードポイントを内部コードに.js
//
// サロゲートペアの表記置換(1字の表記を選択して実行)
// コードポイント表記 (U+1HHHH) を内部コード表記 (\uHHHH\uHHHH) に置換
//
// revised  inuuik  2012-09-11
// revised  inuuik  2012-09-23
// - ------------------------ --------------------------------------------------
{
  var s = document.selection;

  if (!s.IsEmpty) {
    var t = s.Text;
    var re = /(?:U\+)?(1?[0-9A-F][0-9A-F]{4})/ig;
    if (re.test(t)) {
      s.Text = t.replace(re, 
        function(str, p1, offset, s) {
          var spu = "", spl = "", pre = "\\u", ucp_i;
          if (p1 === undefined) {
            return spu;
          }
          spu = (0x0000d800 | (((ucp_i = parseInt(p1, 16)) - 0x00010000) >> 10)).toString(16).toUpperCase();
          spl = (0x0000dc00 | (ucp_i & 0x000003ff)).toString(16).toUpperCase();
          return pre + spu + pre + spl;
        }
      );
    }
  }
}
// - ------------------------ --------------------------------------------------
スポンサーリンク