home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 January (DVD) / VPR980100.ISO / OLS / WIN32 / KAKIMAC / KAKIMAC1.LZH / GYOUDEL2.MAC < prev    next >
Text File  |  1994-07-07  |  3KB  |  118 lines

  1. //【マクロ名】 gyoudEL2.mac by 水銀水(Suiginsui)小田 明夫 (HDG01603) 94/07/07(木)
  2. //【主な用途】日本語文書作成支援シリーズ・行数算出 でつけた [123] を除く
  3. //【使用対象】清貧にあえぐライター(締切前になると突如住所不定になる習性をお持ち)
  4. //            ならびに,印刷所のファックス前に顔面蒼白で立ち尽くす編集者のみなさま(^^;
  5. //【機    能】文章全体の行数を算出する。
  6. //        (1)●,■見出行頭に続く [123] を除く
  7. //【使用法】  全文=範囲指定をしていない状態で本マクロを実行。
  8. //            範囲指定=指定部分のみ。
  9. //変数の初期設定
  10. #gc    = 0;    // GyoutouCharacter        行頭の文字種
  11. #gcb    = 0;    //GyoutouCharacterBefoer    1行前の行頭状態
  12. //秀丸設定 freecursor  ワードラップ停止,禁則処理実施,行末処理はぶら下げに設定する。(後でやろう)
  13. #fc = 0;
  14. if (freecursor){
  15.     freecursorswitch;
  16.     #fc = 1;
  17. }
  18. if(!selecting){        // no selecting case 従って全範囲を指定
  19. #selyn = 1;    //selyn=1なら選択状態になかったため全文選択をした
  20. selectall;
  21. }    // if( !selecting )'s end ).
  22. if (selecting){ 
  23. //範囲の取得
  24. #tlx=seltopx;        //tlx:Top_Line_X
  25. #tly=seltopy;        //tly:Top_Line_Y
  26. #elx=selendx;        //elx:End_Line_X
  27. #ely=selendy;        //elx:End_Line_X
  28. // 取得範囲の確認
  29. escape;
  30. if ( #elx != 0)#ely = #ely;            // x==0:最後が[eof]だけの行
  31. else #ely = #ely -1;
  32. moveto #tlx,#tly;
  33. while( 1 )    //main start
  34. {
  35.     golinetop;
  36.     call hanbetu_joutai;    //行頭状態判別
  37.     #gc = ##return;
  38.     if (#gc == 2 )call m_ban_del; //小見出行
  39.     if ( y >= #ely )    break;
  40.     call c_move;
  41.     if ( code == eof )    break;
  42. }
  43. } // 最初のif
  44. call end_fc;
  45. endmacro;
  46.  
  47. //----------------------------------------------------------------------------------------
  48.  
  49. hanbetu_joutai:
  50. ##gc0 = 0;
  51. if ( code == 13 ){                //空白行(行頭改行)
  52. ##gc0 = 1;
  53. }else if (code == '●' || code == '■'){    //見出行の候補と判断された場合
  54. if ( y == 0 ){ ##gc0 = 2;}
  55. else{
  56.     left;
  57.     if ( code == 13 ){
  58.         right;
  59.         ##gc0 = 2;//本行は見出行である
  60.     }else{
  61.         right;
  62.         ##gc0 = 3;//本行は実本文行である
  63.     }
  64. }
  65. }else{                    //空白行でも見出行でもない
  66. ##gc0 = 3;        //本行は実本文行である
  67. }
  68. return ##gc0;
  69.  
  70.  
  71. c_move:    // 処理後のカーソル移動
  72.     if (#gcb != 2) down;
  73.     else {                //●行の時
  74.             golineend2;    //複数行にわたる見出しに対応(●で始まる行は改行不可)
  75.             right;        //●共通の2行
  76.     }
  77. return;
  78.  
  79.  
  80. m_ban_del:    //小見出行の●の次に(2)などの番号を挿入する
  81. //消去を伴う処理なので、スピードを犠牲にしてもチェック,●の次が[英数]だったらこれを削除
  82. ##xp1 = strstr(gettext(0,y,linelen,y),"[");    // [の有無 なし:-1 発見:x
  83. ##xp2 = strstr(gettext(0,y,linelen,y),"]");    // ]の有無 なし:-1 発見:x
  84. ##xp0 = ##xp2 - ##xp1;
  85. ##kkok = 0;    // KaKko OKey 0:[123]なしか[あいai]状態=最初から[1]挿入, 1:[123]=括弧内が半角数字だけの置換
  86. if ( ##xp1 == -1 || ##xp2 == -1 || ##xp1 != 2 || ##xp0 <= 1  )//{ // [111]がない
  87. {
  88. ##kkoy = 0;
  89. }else{
  90. moveto ##xp1+1,y;
  91. ##step = ##xp0;
  92. while(x < ##xp2 )
  93. {
  94.     if (code >= 48 && code <= 57 )
  95.     {
  96.         ##kkok = 1;
  97.         ##step = ##step - 1;
  98.     }else{
  99.         ##kkok = 0;
  100.         break;
  101.     }
  102.     right;
  103. }
  104. }
  105. if ( ##kkok == 1 ){            // [123]
  106. moveto ##xp1,y;            //[123] すべてを削除
  107. while (##xp0 >= 0 ){
  108.     delete ;
  109.     ##xp0 = ##xp0 -1;
  110. }
  111. }
  112. golinetop;
  113. return;
  114.  
  115. end_fc:
  116. if ( #fc == 1) freecursorswitch;
  117. return;
  118.