sukemaru

Mery_StrConvテキスト変換メニュー

Aug 25th, 2018
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #title = "StrConv ▾"
  2. #tooltip = "StrConv テキスト変換メニュー"
  3. #icon = "StrConv.ico"
  4. // StrConv.dll でテキストを変換する
  5. // 非選択時には行全体を選択範囲にして変換
  6. // ref. http://gesource.jp/
  7.  
  8. // ポップアップメニュー項目の定義
  9. var m = CreatePopupMenu();
  10. m.Add( "小文字に変換する (&L)", 1 );
  11. m.Add( "大文字に変換する (&O)", 2 );
  12. m.Add( "大文字で始める (&C)", 3 );
  13. m.Add( "", 0, meMenuSeparator );
  14. m.Add( "半角文字に変換する (&H)", 4 );
  15. m.Add( "全角文字に変換する (&F)", 5 );
  16. m.Add( "", 0, meMenuSeparator );
  17. m.Add( "ひらがなに変換する (&G)", 6 );
  18. m.Add( "カタカナに変換する (&K)", 7 );
  19. m.Add( "半角カナを全角に変換する (&N)", 8 );
  20. m.Add( "", 0, meMenuSeparator );
  21. m.Add( "HTMLエスケープ (&E)", 9 );
  22. m.Add( "HTMLエスケープ解除 (&E)", 10 );
  23. m.Add( "URL %エンコード (Shift_JIS) (&J)", 11 );
  24. m.Add( "URLエンコードの解除 (Shift_JIS) (&J)", 12 );
  25. m.Add( "URL %エンコード (UTF8) (&U)",13 );
  26. m.Add( "URLエンコードの解除 (UTF-8) (&U)", 14 );
  27. // m.Add( "", 0, meMenuSeparator );
  28. // m.Add( "キャンセル", 0 );
  29.  
  30. // ポップアップメニューを表示
  31. // Track(0); ならキャレット位置、Track(1); ならカーソル位置にポップアップ
  32. var r = m.Track( mePosMouse = 1 );
  33.  
  34. if ( r > 0 ) {
  35.   var s = document.selection
  36.  
  37.   // スクロール位置の保存
  38.   var sx = ScrollX, sy = ScrollY;
  39.   // マクロ実行前の選択範囲(表示行)の各座標を取得
  40.   var ax = s.GetTopPointX( mePosLogical );
  41.   var ay = s.GetTopPointY( mePosLogical );
  42.   var bx = s.GetBottomPointX( mePosLogical );
  43.   var by = s.GetBottomPointY( mePosLogical );
  44.  
  45.   // 非選択時には論理行全体を範囲選択
  46.   if ( s.IsEmpty ) {    // ( ax == bx && ay == by ) とおなじ
  47.     s.StartOfLine( false, mePosLogical );   // 論理行の先頭に移動
  48.     s.EndOfLine( true, mePosLogical );  // 行末まで選択 (改行を含まない)
  49.   }
  50.  
  51.   var sc = new ActiveXObject("StrConv.StrConv");
  52.   var st = s.Text
  53.  
  54. // IDごとのテキスト変換処理
  55.   switch ( r ) {
  56.     case 1:     // 1. 小文字に変換する
  57.       s.Text = sc.LowerCase( st );
  58.       break;
  59.     case 2:     // 2. 大文字に変換する
  60.       s.Text = sc.UpperCase( st );
  61.       break;
  62.     case 3:     // 3. 大文字で始める
  63.       s.Text = sc.Capitalize( st );
  64.       break;
  65.     case 4:     // 4. 半角文字に変換する
  66.       s.Text = sc.HalfWidth( st );
  67.       break;
  68.     case 5:     // 5.全角文字に変換する
  69.       s.Text = sc.FullWidth( st );
  70.       break;
  71.     case 6:     // 6. ひらがなに変換する
  72.       s.Text = sc.Hiragana( st );
  73.       break;
  74.     case 7:     // 7. カタカナに変換する
  75.       s.Text = sc.Katakana( st );
  76.       break;
  77.     case 8:     // 8. 半角カナを全角に変換する
  78.       s.Text = sc.FullKatanaka( st );
  79.       break;
  80.     case 9:     // 9. HTMLエスケープ (HTML予約文字の < > " & を &lt; &gt; &quot; &amp; に変換する)
  81.       s.Text = sc.EncodeHtml( st );
  82.       break;
  83.     case 10:    // 10. HTMLエスケープ解除
  84.       s.Text = sc.DecodeHtml( st );
  85.       break;
  86.     case 11:    // 11. URLエンコード (Shift_JIS %エンコーディング)
  87.       s.Text = sc.EncodeUrl( st, 932 );
  88.       break;
  89.     case 12:    // 12. URLエンコードの解除 (Shift_JIS)
  90.       s.Text = sc.DecodeUrl( st, 932 );
  91.       break;
  92.     case 13:    // 13. URLエンコード (UTF8 %エンコーディング)
  93.       s.Text = sc.EncodeUrl( st, 65001 );
  94.       break;
  95.     case 14:    // 14. URLエンコードの解除 (UTF-8)
  96.       s.Text = sc.DecodeUrl( st, 65001 );
  97.       break;
  98.     default:
  99.       break;
  100.   }
  101.   sc = "";
  102.   // StrConv の実行後は、選択範囲が解除されて変換した末尾にカーソルが残る
  103.  
  104.   // 選択範囲とスクロール位置の復帰
  105.   if ( ax == bx && ay == by ) {
  106.     // 選択範囲なしで変換したときは、行全体を選択範囲に
  107.     s.StartOfLine( false, mePosLogical );
  108.     s.EndOfLine( true, mePosLogical );
  109.   }
  110.   else
  111.     // もとの選択範囲を復旧
  112.     s.SetAnchorPoint( mePosLogical, ax, ay );   // 変換した範囲の先頭まで選択
  113.   ScrollX = sx;  
  114.   ScrollY = sy;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment