home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101A.BIN / OLS / JED194V / JEDDOC.LZH / TABSPC.MCR < prev    next >
Text File  |  1994-05-28  |  3KB  |  116 lines

  1. ;**********************************************************
  2. ;    JED マクロサンプル
  3. ;    'TABSPC.MCR'
  4. ;    [TAB←→SPACE変換マクロ]
  5. ;    Ver 0.10    Oct.1993 初版
  6. ;        0.11    May 1994 バグ修正
  7. ;
  8. ;    Written by H.Orikawa 1993, 1994
  9. ;
  10. ; 注) "..."形式の文字列内のタブコードについては考慮していない
  11. ;**********************************************************
  12. ;&t
  13.     !01
  14.     (r--) >? {
  15.         &10                    ;TAB->SPACE
  16.         &20                    ;SPACE->TAB
  17.     }
  18.     &d                        ;画面再表示
  19.     &v(1)                    ;カーソル表示オン
  20.     &b(0)                    ;終了の合図(^^)
  21.     /
  22.  
  23. ;***** TAB→スペース
  24. 10:
  25.     (mi) ? #v                ;挿入モード
  26.     #^                        ;テキスト先頭へ
  27.     &v(0)                    ;カーソル表示オフ
  28.     &s                        ;変換中の表示抑制
  29. :A
  30.     &k                        ;キー入力
  31.     (r == $1B) ? .            ;[ESC]が押されたら中断
  32.     (cd == $09) ? {            ;現カラム位置が[TAB]コードなら
  33.         #d                    ;1文字(1タブ分)進めて
  34.         x = lx,                ;そこのカラム位置を記憶
  35.         #h                    ;左1文字([TAB]コード)を削除
  36.         (x - lx) { ' ' }    ;カラム数の差分だけ空白を出力する
  37.     } ? {                    ;[TAB]コード以外なら
  38.         #d                    ;1文字右へ
  39.     }
  40.     (cd == $0D) ? {            ;行末なら
  41.         #d                    ;1文字進め次行の先頭へ
  42.         >A
  43.     }
  44.     (cd == $0A) ? .            ;テキスト末尾なら終了
  45.     >A
  46.  
  47.  
  48. ;***** スペース→TAB
  49. 20:
  50.     (mi) ? #v                ;挿入モード
  51.     #^                        ;テキスト先頭へ
  52.     &v(0)                    ;カーソル表示オフ
  53.     &s                        ;変換中の表示抑制
  54. :A
  55.     &k                        ;キー入力
  56.     (r == $1B) ? .            ;[ESC]が押されたら中断
  57.     (cd == ' ') ? {            ;現カラム位置が空白コードなら
  58.         x = lx,                ;最初に見つけたカラム位置を記憶
  59.         &40                    ;[SPACE]->[TAB]変換のローカルマクロ(サブルーチン)コール
  60.     } ? {                    ;空白コード以外なら
  61.         (cd == '\"') ? {    ;"xxxxx" 形式の文字列部をスキップする
  62.             &50
  63.         }
  64.         (cd == '\'') ? {    ;'x' 形式の文字定数部をスキップする
  65.             &60
  66.         }
  67.         #d                    ;1文字右へ
  68.     }
  69.     (cd == $0D) ? {            ;行末なら
  70.         #d                    ;1文字進め次行の先頭へ
  71.         >A
  72.     }
  73.     (cd == $0A) ? .            ;テキスト末尾なら終了
  74.     >A
  75.  
  76. 40:
  77.     #d                        ;1文字右へ進め
  78.     (cd != ' ') ? {            ;空白コード以外の文字が現れたら
  79.         .                    ;空白1個の場合なので何もせずリターン
  80.     }
  81. :L    ((lx-1) % ht == 0) ? {    ;タブストップ位置に来たら
  82.         (lx - x) {            ;空白コード部分が続く間
  83.             #h                ;[BS]で戻り
  84.         }
  85.         #21                    ;[TAB]コードを挿入して
  86.         .                    ;リターン
  87.     }
  88.     (cd != ' ') ? .            ;空白コード以外の文字が現れたら何もせずリターン
  89.     #d                        ;1文字右へ
  90.     >L                        ;空白コードが続く間ループする
  91.  
  92. 50:
  93. :W    #d                        ;1文字右へ
  94.     (cd == '\\') ? {        ;"...\"...." の場合の例外
  95.         #d #d
  96.     }
  97.     (cd == $0D)  ? .        ;次の["]の前に行末が来たら戻る
  98.     (cd == '\"') ? .        ;文字列終端の["]が来たら戻る
  99.     >W
  100.  
  101. 60:
  102. :S    #d                        ;1文字右へ
  103.     (cd == '\\') ? {        ;'\'' の場合の例外
  104.         #d #d
  105.     }
  106.     (cd == $0D)  ? .        ;次の[']の前に行末が来たら戻る
  107.     (cd == '\'') ? .        ;文字定数終端の[']が来たら戻る
  108.     >S
  109.  
  110.  
  111. ;ポップアップメニュー
  112. 01:    "TAB・スペース変換", 22, 2
  113.     "T|TAB→スペース"
  114.     "S|スペース→TAB"
  115.     .
  116.