home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101A.BIN / OLS / JED194V / JEDDOC.LZH / TEXTFORM.MCR < prev    next >
Text File  |  1993-10-09  |  4KB  |  193 lines

  1. ;**********************************************************
  2. ;    JED マクロサンプル
  3. ;    'TEXTFORM.MCR'
  4. ;    [文書整形支援マクロ]
  5. ;    Ver 0.10    1992 初版
  6. ;        0.90    Oct.1993
  7. ;
  8. ;    Written by H.Orikawa 1992-1993
  9. ;
  10. ; 注)    1.折り返しのある行に対しては正常に動作しない。
  11. ;      (インデントを付加した後で折り返しが発生しても不可)
  12. ;    2.インデントは指定桁数の範囲内で可能な限りタブを挿入し、
  13. ;      残りをスペースで埋める
  14. ;    3.タブを含む行の場合、正常に動作しないことがある。
  15. ;    4.改行だけの行(空行)に対しては何もしない。
  16. ;**********************************************************
  17. ;    &t            ;Debug用トレースモード
  18.  
  19.     !01
  20.     (r--) >? {
  21.         &10        ;インデント
  22.         &20        ;左揃え
  23.         &30        ;右揃え
  24.         &40        ;センタリング
  25.     }
  26.     >Z
  27.  
  28.  
  29. ;----------------------------------------------------------
  30. ;    インデント
  31. ;----------------------------------------------------------
  32. 10:
  33.     &g("インデント桁数")    ;
  34.     (r == -1) ? .        ;[ESC]でキャンセル
  35.     (r == -2) ? {        ;[CR]のみの時は
  36.         xx = ht,    ;現在のタブ設定値を採用
  37.     } ? {
  38.         xx = r,
  39.     }
  40.  
  41.     &50            ;範囲設定サブルーチンコール
  42.  
  43. :I
  44.     (ln != ee) ? {
  45.         #<        ;行頭へ
  46.         (ct == 1) ? {    ;改行だけの行の時
  47.             >J
  48.         }
  49.         (xx / ht) {    ;タブ挿入数
  50.             #21    ;タブコード挿入
  51.         }
  52.         (xx % ht) {    ;スペース挿入数
  53.             ' '    ;半角スペース挿入
  54. ;            ' '    ;全角スペース挿入
  55.         }
  56. :J
  57.         #>        ;行末へ(EOF検出を確実にするため)
  58.         (ct) ?? .    ;ファイルの終わり(EOF)なら戻る
  59.         #x        ;次の行へ
  60.         >I
  61.     }
  62.  
  63.  
  64. ;----------------------------------------------------------
  65. ;    左揃え
  66. ;----------------------------------------------------------
  67. 20:
  68.     &50            ;範囲設定サブルーチンコール
  69.  
  70.     s = 0,
  71.     &60            ;共通サブルーチンコール
  72.  
  73.  
  74. ;----------------------------------------------------------
  75. ;    右揃え
  76. ;----------------------------------------------------------
  77. 30:
  78.     &50            ;範囲設定サブルーチンコール
  79.  
  80.     s = 1,
  81.     d = 1,
  82.     &60            ;共通サブルーチンコール
  83.  
  84.  
  85. ;----------------------------------------------------------
  86. ;    センタリング
  87. ;----------------------------------------------------------
  88. 40:
  89.     &50            ;範囲設定サブルーチンコール
  90.  
  91.     s = 1,
  92.     d = 2,
  93.     &60            ;共通サブルーチンコール
  94.  
  95.  
  96. ;----------------------------------------------------------
  97. ;    範囲設定サブルーチン
  98. ;----------------------------------------------------------
  99. 50:
  100.     (mi) ? #v        ;挿入モード
  101.     &m("開始行で[RET]キーを押して下さい")
  102. :R
  103.     &p            ;キー入力待ち
  104.     (r != #m) ? {        ;改行キーが押されるまで
  105.         &o(r)        ;そのまま出力
  106.         >R
  107.     }
  108.     #<            ;行頭へ
  109.     bb = ln,        ;最初の行を記憶
  110.     #b            ;範囲設定用にブロック範囲設定コマンドを代用する
  111.     &m("範囲を指定し[RET]キーを押して下さい")
  112. :K
  113.     &p            ;キーボードより1文字入力待ち
  114.     (r == #m) ? {        ;改行キーが押されたら
  115.         #03        ;[ESC]を出力しブロックモードから抜ける
  116.         ee = ln,    ;最後の行を記憶
  117.         (bb >= ee) ? >Z    ;文頭方向への範囲指定はとりあえず無視
  118.         &s        ;画面表示抑制(サイレントモード)
  119.         &v(0)        ;カーソル表示オフ
  120.         (ln - bb) {    ;最初の行まで戻る
  121.             #e
  122.         }
  123.         .        ;呼び出し元へ戻る
  124.     }
  125.     (r == #03) ? {        ;[ESC]で強制終了
  126.         #03        ;[ESC]を出力しブロックモードから抜ける
  127.         /
  128.     }
  129.     (r == #e) ? #e
  130.     (r == #x) ? #x
  131.     (r == #r) ? #r
  132.     (r == #c) ? #c
  133.     (r == #w) ? #w
  134.     (r == #z) ? #z
  135.     (r == #37) ? #37
  136.     (r == #38) ? #38
  137.     (r == #^) ? #^
  138.     (r == #_) ? #_
  139.     >K
  140.  
  141.  
  142. ;----------------------------------------------------------
  143. ;    センタリング/左揃え/右揃え共通サブルーチン
  144. ;    s    d
  145. ;    0    -    左揃え
  146. ;    1    1    右揃え
  147. ;    1    2    センタリング
  148. ;----------------------------------------------------------
  149. 60:
  150. :L
  151.     (ln != ee) ? {
  152.         #<        ;行頭へ
  153.         (ct == 1) ? {    ;改行だけの行の時
  154.             >N
  155.         }
  156.         (ct == 2) ? {    ;半角空白/制御コード/全角空白なら
  157.             #t    ;行頭から削除
  158.         }
  159.  
  160.         (s) ?? >N    ;左揃え(s==0)ならスキップ
  161.         #>        ;行末へ
  162.         n = (we - lx - 1) / d,    ;挿入する空白数計算
  163.         (n <= 0) ? >N    ;空白を挿入できない
  164.  
  165.         #<        ;行頭へ
  166.         (n) {
  167.             ' '    ;空白をn個出力
  168.         }
  169. :N
  170.         #>        ;行末へ(EOF検出を確実にするため)
  171.         (ct) ?? .    ;ファイルの終わり(EOF)なら戻る
  172.         #x        ;1行下へ
  173.         >L
  174.     }
  175.  
  176.  
  177. ;----------------------------------------------------------
  178. ;    終了処理
  179. ;----------------------------------------------------------
  180. :Z
  181.     &m("                                 ")
  182.     &d            ;画面再表示
  183.     &v(1)            ;カーソル表示オン
  184.     /
  185.  
  186. ;ポップアップメニュー
  187. 01:    "文書整形支援マクロ", 20, 4
  188.     "I:インデント"
  189.     "L:左揃え"
  190.     "R:右揃え"
  191.     "C:センタリング"
  192.     .
  193.