home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101B.BIN / APUPDATE / VC / TXC0620M / TXC0620M.LZH / SAMPLE.TXC < prev    next >
Text File  |  1998-06-14  |  8KB  |  294 lines

  1. /*
  2.     TX-C サンプルマクロ
  3.         以下のマクロは自由に骨組みとして使用してください。
  4. */
  5.  
  6. number
  7. {
  8. // テキスト全体に対して連番を振る
  9.     txSetUndisp(text);   // 動作高速化のため、textの表示をOFFに
  10.     txJumpFileTop(text);
  11.     int i;
  12.     for (i = 1;;i++) {
  13.         txInsertf(text,"%4d:",i);
  14.         if (!txNextPara(text)) break;
  15.     }
  16.     txSetDisp(text);  // textの表示を再開
  17. }
  18.  
  19. numbersel
  20. {
  21. // 選択範囲内に対して連番を振る
  22.     txWalkStart(text);
  23.     int i = 1;
  24.     while (txIsWalking(text)) {
  25.         txInsertf(text,"%4d:",i++);
  26.         if (!txNextPara(text)) break;
  27.     }
  28.     txWalkEnd(text);
  29. }
  30.  
  31. dicsearch
  32. {
  33. // カーソル位置の単語で辞書ファイルを引く
  34.     txJumpWordTop(text);
  35.     txstr szWord;
  36.     txGetWord(text,szWord);
  37.     {
  38.         TX* text2 = textopen(\"filename.dic");    // ここに辞書のファイル名を指定してください。
  39.         txSearchEx(text2,szWord,SEARCH_WORD);
  40.         dialogaText(text2,"辞書検索結果");
  41.         textclose(text2);
  42.     }
  43. }
  44.  
  45. casewordsub
  46. {
  47.     txstr sz; 
  48.     txGetWord(text,sz);    // カーソル位置の単語をszに取得します
  49.     if (isupper(sz[0])) {    // sz[0]はszの先頭の文字を取得します。
  50.         if (isupper(sz[1]) || sz[1] == 0) {    // sz[1]はszの2番目の文字を取得します。
  51.             // 文字列の最後には文字0が入っているので、sz[1]が0ならszには長さ1文字の文字列が入っていることになります。
  52.             strlwr(sz);
  53.         } else {
  54.             strupr(sz);
  55.         }
  56.     } else {
  57.         sz[0] = toupper(sz[0]);
  58.     }
  59.     txDeleteBytes(text,strlen(sz));    // szに取得した文字列を削除します。
  60.     txCurInsertBuff(text,sz,strlen(sz));    // 変換結果を挿入します。
  61.     return strlen(sz);    // 変換後の長さを返します。
  62. }
  63.  
  64. caseword
  65. {
  66. // 大文字/小文字変換
  67. // カーソル位置の1語を変換
  68. // abcd → Abcd → ABCD → abcd
  69.     if (text->fClip) {
  70.         txWalkStart(text);
  71.         while(txIsWalking(text)) {
  72.             int len = casewordsub(text);
  73.             txRightBytes(text,len);    // 次に変換する部分にカーソルを動かします。
  74.             // 下のプログラムで、アルファベットが出るまでスキップします。
  75.             while(1) {
  76.                 if (isalpha(txGetChar(text))) break;    // アルファベットが出たのでループを抜けます。
  77.                 if (!txRight(text)) break;    // 次の文字へ移動します。移動できなければEOFなのでループを抜けます。
  78.             }
  79.         }
  80.         txWalkEnd(text);
  81.     } else {
  82.         casewordsub(text);
  83.     }
  84. }
  85.  
  86. zenhan
  87. {
  88. // 全角・半角変換
  89. // カーソル位置の1語を変換
  90. // abcd → abcd → abcd
  91.     int ch;
  92.     BOOL fClip = text->fClip;
  93.     if (fClip) {    // 選択されている場合
  94.         if (txGetAddress(text) == txGetAddressSelectEnd(text)) {
  95.             // カーソル位置が選択の末尾位置にある場合は、カーソル位置を選択の先頭位置に移動します。
  96.             txSelectJump(text);
  97.         }
  98.         // chに選択の先頭位置の文字を入れます
  99.         ch = txGetChar(text);
  100.     } else {
  101.         // chに選択の先頭位置の文字を入れます
  102.         ch = txGetChar(text);
  103.         txSetUndisp(text);
  104.         // カーソル位置から単語末尾までを選択します。
  105.         txSelectEx(text,CLIP_CHAR);
  106.         txJumpWordEndMi(text);
  107.     }
  108.     if (txchIsKanji(ch)) {    // 先頭文字が全角文字なら、範囲内を半角に変換します。
  109.         txJankToAnk(text);
  110.         txJkataToKana(text);
  111.     } else {    // 範囲内を全角に変換します。
  112.         txAnkToJank(text);
  113.         txKanaToJkata(text);
  114.     }
  115.     if (!fClip) {
  116.         // 選択されてなかったときはカーソル位置を戻して選択を中止。
  117.         txSelectJump(text);
  118.         txSelectQuit(text);
  119.         txSetDisp(text);
  120.     }
  121. }
  122.  
  123. indentC
  124. {
  125. // C言語プログラムファイル編集用インデント
  126. // '{'を入力してから実行すると、インデントを一つさげた行と'}'を挿入します。
  127. // その他の場合は改行します。
  128.     if (!text->fOverWrite && txIsCurReturn(text) && txGetPrevChar(text) == '{') {
  129.         txWriteReturn(text);
  130.         txWriteReturn(text);
  131.         txInsert(text,"}");
  132.         txLeft(text);
  133.         txUp(text);
  134.         txWriteTab(text);
  135.     } else {
  136.         txWriteReturn(text);
  137.     }
  138. }
  139.  
  140. searchnextEx
  141. {
  142. // 次検索
  143. // 選択してたらその文字を取得して実行
  144.     if (txIsClipInPara(text) && !text->fClipSearch) {
  145.         txstr sz;
  146.         txGetWord(text,sz);
  147.         txSetSearchContinue(text,sz,0);
  148.         txSelectQuit(text);
  149.         txMarkCur(text);
  150.     }
  151.     txSearchContinue(text);
  152. }
  153.  
  154. esc
  155. {
  156. // 選択してれば、選択を解除。
  157.     if (text->fClip) {
  158.         txSelectQuit(text);
  159.     }
  160. }
  161.  
  162. makecontent
  163. {
  164. // 目次作成(1)
  165. // テキストの拡張子をCNTに変えたファイルに、目次を出力します。
  166. // タグジャンプでそこにジャンプできるように、出力します。
  167.     txSetUndisp(text);   // 動作高速化のため、textの表示をOFFに
  168.     txJumpFileTop(text); // テキストの先頭に移動
  169.     txstr szfilename = text->szfilename;
  170.     pathSetExt(szfilename,".cnt");
  171.     TX* text2 = textopen(szfilename); // 出力用裏テキストを作成
  172.     txDeleteText(text2); // text2の内容を空に
  173.     while(1) {
  174.         int iHeadline = txHeadlineMatch(text);
  175.         if (iHeadline) { // 見出しである。
  176.             txstr szContent;
  177.             txHeadlineGetContent(text,szContent);    // 見出しの内容を得る
  178.             txInsertf(text2,"%s(%4d)",pathGetFileName(text->szfilename),text->npara); // タグを出力
  179.             while(iHeadline--) txInsert(text2,"  "); // 見出しレベルの余白を出力
  180.             txInsert(text2,szContent);  // 見出しの内容を出力
  181.             txInsertReturn(text2);
  182.         }
  183.         if (!txNextPara(text)) break; // 次の段落へ移動。移動できなければwhileループを抜ける
  184.     }
  185.     txSave(text2);    // 出力用テキストの内容をファイルに書き出す
  186.     textclose(text2); // 裏テキストの使用を終える
  187.     txSetDisp(text);  // textの表示を再開
  188. }
  189.  
  190. makecontent2
  191. {
  192. // 目次作成(2)
  193. // テキストの拡張子をCNTに変えたファイルに、目次を出力します。
  194. // タグジャンプでそこにジャンプできるように、また、連番を付けて出力します。
  195.     #define MAX_NEST 10    // 扱える最大見出しレベル+1
  196.     int tNumber[MAX_NEST]; // 連番用
  197.     txSetUndisp(text);
  198.     txJumpFileTop(text);
  199.     txstr szfilename = text->szfilename;
  200.     pathSetExt(szfilename,".cnt");
  201.     TX* text2 = textopen(szfilename);
  202.     txDeleteText(text2);    // text2の内容を空にします。
  203.     while(1) {
  204.         int iHeadline = txHeadlineMatch(text);
  205.         if (iHeadline && iHeadline < MAX_NEST) {
  206.             txstr szContent;
  207.             txHeadlineGetContent(text,szContent);
  208.             txInsertf(text2,"%s(%4d) ",pathGetFileName(text->szfilename),text->npara);
  209.             for (int i = iHeadline + 1;i < MAX_NEST;i++) tNumber[i] = 0; // 小見出しの連番を初期化
  210.             tNumber[iHeadline]++;   // 連番を1増やす
  211.             for (i = 1;i <= iHeadline;i++) { // 連番を出力する
  212.                 txInsertf(text2,"%d",tNumber[i]);
  213.                 if (i < iHeadline) txInsert(text2,"-");
  214.             }
  215.             txInsertf(text2," %s",szContent);
  216.             txInsertReturn(text2);
  217.         }
  218.         if (!txNextPara(text)) break;
  219.     }
  220.     txSave(text2);
  221.     textclose(text2);
  222.     txSetDisp(text);
  223. }
  224.  
  225. dialogsimple
  226. {
  227. // 一番簡単なダイアログ
  228.     HDIALOG hd = dialog("ダイアログのテスト");
  229.     dialogOpen(hd);
  230. }
  231.  
  232. dialogtest
  233. {
  234. // ダイアログにアイテムを追加
  235.     txstr szString = "abc";
  236.     int integer = 123;
  237.     HDIALOG hd = dialog("ダイアログのテスト");
  238.     dialogTxstr(hd,"文字列(&S):",10,szString,16);
  239.     dialogInteger(hd,"数値(&N):",10,&integer,5);     // この場合は'&'を付けると覚えてください
  240.     if (dialogOpen(hd)) {
  241.         information("%s %d",szString,integer);
  242.     }
  243. }
  244.  
  245. dialogtest2
  246. {
  247. // ボタンを付けたダイアログ
  248.     #define IDD_MYBUTTON 100    // マイボタンのIDの定義
  249.     txstr szString;
  250.     int integer;
  251.     HDIALOG hd = dialog("ダイアログのテスト");
  252.     dialogTxstr(hd,"文字列(&S):",10,szString,16);
  253.     dialogInteger(hd,"数値(&N):",10,&integer,5);
  254.     dialogControlID(hd,IDD_MYBUTTON);dialogCmd(hd,"マイボタン(&M)",14);
  255.     int id = dialogOpen(hd);
  256.     if (id == IDD_MYBUTTON) {
  257.         information("マイボタンが押されました");
  258.     } else if (id == IDOK) {
  259.         information("%s %d",szString,integer);
  260.     }
  261. }
  262.  
  263. dialogmenu
  264. {
  265. // ダイアログをメニューとして使用する
  266.     int iCommand = 0;
  267.     HDIALOG hd = dialog("メニュー");
  268.     dialogControlRadioV(hd);
  269.     dialogChoiceRadio(hd,&iCommand,"MENU&1","MENU&2","MENU&3","MENU&4",NULL);
  270.     if (dialogOpen(hd)) {
  271.         if (iCommand == 0) {
  272.             information("MENU1が選択されました");
  273.         }
  274.         if (iCommand == 1) {
  275.             information("MENU2が選択されました");
  276.         }
  277.         if (iCommand == 2) {
  278.             information("MENU3が選択されました");
  279.         }
  280.         if (iCommand == 3) {
  281.             information("MENU4が選択されました");
  282.         }
  283.     }
  284. }
  285.  
  286. main
  287. {
  288.     caseword(text);return;
  289.     searchnextEx(text);return;
  290.     indentC(text);return;
  291.     zenhan(text);return;
  292. }
  293.  
  294.