home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 November / VPR9711A.ISO / VPR_DATA / Special / movemn8s / movemn8s.lzh / INP_LEFT.MAC < prev    next >
Text File  |  1997-03-06  |  4KB  |  190 lines

  1. //  左端指定左寄せマクロ ver.8.00
  2. //  by JRくん(GFB03426)  97.3.7
  3.  
  4.  
  5.     if (readonly) {
  6.         message "左端指定左寄せ:「上書き禁止」なので実行を中止します。";
  7.         endmacro;
  8.     }
  9.     if (browsemode) {
  10.         message "左端指定左寄せ:「閲覧モード」なので実行を中止します。";
  11.         endmacro;
  12.     }
  13.  
  14.     $b=searchbuffer;
  15.     #s=searchoption;
  16.  
  17.     //  INIファイルを取得
  18.     $INIdir = getinistr("HIDEMARU.INI", "Env", "MacroPath");
  19.     if ($INIdir == "") $INIdir = hidemarudir;
  20.     $INIfile = $INIdir+"\\MOVEMENU.INI";
  21.  
  22.     //  左端のデフォルト値の設定
  23.     #default = getininum($INIfile, "Margin", "LeftMargin");
  24.  
  25.     $space80 = "                                                                               ";
  26.  
  27. //  ワードラップ使用時には警告
  28.     if ( kinsokustate ) {
  29.         if ( getininum("hidemaru.ini","Env","Wordwrap") == 1 ) {
  30.         question "左端指定左寄せ:\n"
  31.                + "現在この秀丸はワードラップ機能を使用していますが、\n"
  32.                + "このまま処理を続けると、レイアウトが崩れたり、\n"
  33.                + "行の最後が2文字程度欠落したりする場合があります。\n"
  34.                + "\nこのまま処理を続けますか?";
  35.         if ( result == no ) endmacro;
  36.         }
  37.     }
  38.  
  39. disableinvert;
  40.  
  41. //  処理範囲を取得
  42.  
  43.     if ((selecting) || (rectselecting)) {
  44.         #y2 = seltopy;
  45.         #y1 = selendy;
  46.         if (selendx == 0) #y1 = #y1 - 1;
  47.         escape;
  48.     } else {
  49.         #y1 = y;
  50.         #y2 = y;
  51.     }
  52.  
  53. //  左端を入力
  54.  
  55.     #imestate = imestate;
  56.     if (#imestate) imeswitch;
  57.  
  58.     PosInput:
  59.     $Pos = input("左端指定左寄せマクロ\n"
  60.            + "左余白の値を入力してください。", str(#default));
  61.     if (result == no) endmacro;
  62.     #Pos = val($Pos);
  63.     if (#Pos < 0) {
  64.         message "0以上の値を入力してください。";
  65.         goto PosInput;
  66.     }
  67.     if (#Pos != #default) {
  68.         writeininum $INIfile, "Margin", "LeftMargin", #Pos;
  69.     }
  70.  
  71.     if (#imestate) imeswitch;
  72.  
  73.  
  74. //  1行分の文字列を処理するルーチン
  75.     OneLineLoop:
  76.     moveto 0, #y1;
  77.  
  78. //  (EOF対策)
  79.     #IsEof = ( #y1 == linecount - 1 );
  80.  
  81. //  その行の開始x座標を取得
  82.  
  83.     #xstart = 0;
  84.     #Code = code;
  85.     if (#Code == 0x0d) {
  86.         //  改行だけだった場合
  87.         goto OneLineEnd;
  88.     } else if ((#Code == 0x20) || (#Code == 0x8140)
  89.         || (#Code == 0)    || (#Code == 0x09))  {
  90.         //  半角/全角スペース・ヌル文字・タブ
  91.         searchdown "[^  \t]",regular;
  92.         if ((y > #y1) || (code == 0x0d) || (code == eof)) {
  93.             //  その行すべてがスペース等だった場合
  94.             goto AllChrDel;
  95.         } else {
  96.             #xstart = x;
  97.         }
  98.     }
  99.  
  100. //  終了x座標を取得
  101.  
  102.     golineend;
  103.     #Code = code;
  104.     if ((#Code == 0x20) || (#Code == 0x8140) || (#Code == 0)
  105.      || (#Code == 0x09) || (#Code == 0x0d)   || (#Code == eof))  {
  106.         //  半角/全角スペース・ヌル文字・タブ・改行・EOFの場合
  107.         searchup "[^  \t]",regular;
  108.     }
  109.     right;
  110.     #xend = x;
  111.     #yend = y;
  112.  
  113.  
  114. //  タブ処理
  115.     moveto 0, #y1;
  116.     beginsel;
  117.     golineend;
  118.     tospace;
  119.     escape;
  120.  
  121. //  カット後の文字列を取得
  122.     $tcutted = gettext(#xstart, #y1, #xend, #yend);
  123.  
  124.  
  125. //  左寄せ
  126.  
  127. //  左側のスペースを計算
  128.     #len = strlen($tcutted);
  129.     #space = #Pos;
  130.  
  131.     $space = "";
  132.     if (#space > 0) {
  133.  
  134.         #sp1 = #space / 80;
  135.         #sp2 = #space % 80;
  136.  
  137.         while (#sp1 > 0) {
  138.             $space = $space + $space80;
  139.             #sp1 = #sp1 - 1;
  140.         }
  141.         $space = $space + leftstr($space80, #sp2);
  142.     }
  143.  
  144.     moveto 0, #y1;
  145.  
  146. //  前行末に半角分の空きがある場合には改行を追加挿入するための下準備
  147.     $preface = "";
  148.     if (column != 0) {
  149.         up;
  150.         if (linelen < width) $preface = "\n";
  151.         down;
  152.     }
  153.  
  154. //  文字列挿入処理
  155.     beginsel;
  156.     if (#IsEof) {
  157.         golineend;
  158.         insert $preface + $space + $tcutted;
  159.     } else if (#len > width) {
  160.         down;
  161.         insert $preface + $space + $tcutted;
  162.     } else {
  163.         down;
  164.         insert $preface + $space + $tcutted + "\n";
  165.     }
  166.  
  167.     goto OneLineEnd;
  168.  
  169. //  その行すべてがスペース等の場合は、改行と置き換える、または削除
  170.     AllChrDel:
  171.     moveto 0, #y1;
  172.     beginsel;
  173.     if (#IsEof) {
  174.         golineend;
  175.         delete;
  176.     } else {
  177.         down;
  178.         insert "\n";
  179.     }
  180.  
  181. //  ループ
  182.     OneLineEnd:
  183.     #y1 = #y1 - 1;
  184.     if (#y1 >= #y2) goto OneLineLoop;
  185.  
  186. //  終了処理
  187.     setsearch $b,#s;
  188.     enableinvert;
  189.     endmacro;
  190.