home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2000 December
/
VPR0012B.BIN
/
APUPDATE
/
VC
/
TXC0620H
/
TXC0620H.LZH
/
SAMPLE.TXC
< prev
next >
Wrap
Text File
|
1998-06-14
|
8KB
|
294 lines
/*
TX-C サンプルマクロ
以下のマクロは自由に骨組みとして使用してください。
*/
number
{
// テキスト全体に対して連番を振る
txSetUndisp(text); // 動作高速化のため、textの表示をOFFに
txJumpFileTop(text);
int i;
for (i = 1;;i++) {
txInsertf(text,"%4d:",i);
if (!txNextPara(text)) break;
}
txSetDisp(text); // textの表示を再開
}
numbersel
{
// 選択範囲内に対して連番を振る
txWalkStart(text);
int i = 1;
while (txIsWalking(text)) {
txInsertf(text,"%4d:",i++);
if (!txNextPara(text)) break;
}
txWalkEnd(text);
}
dicsearch
{
// カーソル位置の単語で辞書ファイルを引く
txJumpWordTop(text);
txstr szWord;
txGetWord(text,szWord);
{
TX* text2 = textopen(\"filename.dic"); // ここに辞書のファイル名を指定してください。
txSearchEx(text2,szWord,SEARCH_WORD);
dialogaText(text2,"辞書検索結果");
textclose(text2);
}
}
casewordsub
{
txstr sz;
txGetWord(text,sz); // カーソル位置の単語をszに取得します
if (isupper(sz[0])) { // sz[0]はszの先頭の文字を取得します。
if (isupper(sz[1]) || sz[1] == 0) { // sz[1]はszの2番目の文字を取得します。
// 文字列の最後には文字0が入っているので、sz[1]が0ならszには長さ1文字の文字列が入っていることになります。
strlwr(sz);
} else {
strupr(sz);
}
} else {
sz[0] = toupper(sz[0]);
}
txDeleteBytes(text,strlen(sz)); // szに取得した文字列を削除します。
txCurInsertBuff(text,sz,strlen(sz)); // 変換結果を挿入します。
return strlen(sz); // 変換後の長さを返します。
}
caseword
{
// 大文字/小文字変換
// カーソル位置の1語を変換
// abcd → Abcd → ABCD → abcd
if (text->fClip) {
txWalkStart(text);
while(txIsWalking(text)) {
int len = casewordsub(text);
txRightBytes(text,len); // 次に変換する部分にカーソルを動かします。
// 下のプログラムで、アルファベットが出るまでスキップします。
while(1) {
if (isalpha(txGetChar(text))) break; // アルファベットが出たのでループを抜けます。
if (!txRight(text)) break; // 次の文字へ移動します。移動できなければEOFなのでループを抜けます。
}
}
txWalkEnd(text);
} else {
casewordsub(text);
}
}
zenhan
{
// 全角・半角変換
// カーソル位置の1語を変換
// abcd → abcd → abcd
int ch;
BOOL fClip = text->fClip;
if (fClip) { // 選択されている場合
if (txGetAddress(text) == txGetAddressSelectEnd(text)) {
// カーソル位置が選択の末尾位置にある場合は、カーソル位置を選択の先頭位置に移動します。
txSelectJump(text);
}
// chに選択の先頭位置の文字を入れます
ch = txGetChar(text);
} else {
// chに選択の先頭位置の文字を入れます
ch = txGetChar(text);
txSetUndisp(text);
// カーソル位置から単語末尾までを選択します。
txSelectEx(text,CLIP_CHAR);
txJumpWordEndMi(text);
}
if (txchIsKanji(ch)) { // 先頭文字が全角文字なら、範囲内を半角に変換します。
txJankToAnk(text);
txJkataToKana(text);
} else { // 範囲内を全角に変換します。
txAnkToJank(text);
txKanaToJkata(text);
}
if (!fClip) {
// 選択されてなかったときはカーソル位置を戻して選択を中止。
txSelectJump(text);
txSelectQuit(text);
txSetDisp(text);
}
}
indentC
{
// C言語プログラムファイル編集用インデント
// '{'を入力してから実行すると、インデントを一つさげた行と'}'を挿入します。
// その他の場合は改行します。
if (!text->fOverWrite && txIsCurReturn(text) && txGetPrevChar(text) == '{') {
txWriteReturn(text);
txWriteReturn(text);
txInsert(text,"}");
txLeft(text);
txUp(text);
txWriteTab(text);
} else {
txWriteReturn(text);
}
}
searchnextEx
{
// 次検索
// 選択してたらその文字を取得して実行
if (txIsClipInPara(text) && !text->fClipSearch) {
txstr sz;
txGetWord(text,sz);
txSetSearchContinue(text,sz,0);
txSelectQuit(text);
txMarkCur(text);
}
txSearchContinue(text);
}
esc
{
// 選択してれば、選択を解除。
if (text->fClip) {
txSelectQuit(text);
}
}
makecontent
{
// 目次作成(1)
// テキストの拡張子をCNTに変えたファイルに、目次を出力します。
// タグジャンプでそこにジャンプできるように、出力します。
txSetUndisp(text); // 動作高速化のため、textの表示をOFFに
txJumpFileTop(text); // テキストの先頭に移動
txstr szfilename = text->szfilename;
pathSetExt(szfilename,".cnt");
TX* text2 = textopen(szfilename); // 出力用裏テキストを作成
txDeleteText(text2); // text2の内容を空に
while(1) {
int iHeadline = txHeadlineMatch(text);
if (iHeadline) { // 見出しである。
txstr szContent;
txHeadlineGetContent(text,szContent); // 見出しの内容を得る
txInsertf(text2,"%s(%4d)",pathGetFileName(text->szfilename),text->npara); // タグを出力
while(iHeadline--) txInsert(text2," "); // 見出しレベルの余白を出力
txInsert(text2,szContent); // 見出しの内容を出力
txInsertReturn(text2);
}
if (!txNextPara(text)) break; // 次の段落へ移動。移動できなければwhileループを抜ける
}
txSave(text2); // 出力用テキストの内容をファイルに書き出す
textclose(text2); // 裏テキストの使用を終える
txSetDisp(text); // textの表示を再開
}
makecontent2
{
// 目次作成(2)
// テキストの拡張子をCNTに変えたファイルに、目次を出力します。
// タグジャンプでそこにジャンプできるように、また、連番を付けて出力します。
#define MAX_NEST 10 // 扱える最大見出しレベル+1
int tNumber[MAX_NEST]; // 連番用
txSetUndisp(text);
txJumpFileTop(text);
txstr szfilename = text->szfilename;
pathSetExt(szfilename,".cnt");
TX* text2 = textopen(szfilename);
txDeleteText(text2); // text2の内容を空にします。
while(1) {
int iHeadline = txHeadlineMatch(text);
if (iHeadline && iHeadline < MAX_NEST) {
txstr szContent;
txHeadlineGetContent(text,szContent);
txInsertf(text2,"%s(%4d) ",pathGetFileName(text->szfilename),text->npara);
for (int i = iHeadline + 1;i < MAX_NEST;i++) tNumber[i] = 0; // 小見出しの連番を初期化
tNumber[iHeadline]++; // 連番を1増やす
for (i = 1;i <= iHeadline;i++) { // 連番を出力する
txInsertf(text2,"%d",tNumber[i]);
if (i < iHeadline) txInsert(text2,"-");
}
txInsertf(text2," %s",szContent);
txInsertReturn(text2);
}
if (!txNextPara(text)) break;
}
txSave(text2);
textclose(text2);
txSetDisp(text);
}
dialogsimple
{
// 一番簡単なダイアログ
HDIALOG hd = dialog("ダイアログのテスト");
dialogOpen(hd);
}
dialogtest
{
// ダイアログにアイテムを追加
txstr szString = "abc";
int integer = 123;
HDIALOG hd = dialog("ダイアログのテスト");
dialogTxstr(hd,"文字列(&S):",10,szString,16);
dialogInteger(hd,"数値(&N):",10,&integer,5); // この場合は'&'を付けると覚えてください
if (dialogOpen(hd)) {
information("%s %d",szString,integer);
}
}
dialogtest2
{
// ボタンを付けたダイアログ
#define IDD_MYBUTTON 100 // マイボタンのIDの定義
txstr szString;
int integer;
HDIALOG hd = dialog("ダイアログのテスト");
dialogTxstr(hd,"文字列(&S):",10,szString,16);
dialogInteger(hd,"数値(&N):",10,&integer,5);
dialogControlID(hd,IDD_MYBUTTON);dialogCmd(hd,"マイボタン(&M)",14);
int id = dialogOpen(hd);
if (id == IDD_MYBUTTON) {
information("マイボタンが押されました");
} else if (id == IDOK) {
information("%s %d",szString,integer);
}
}
dialogmenu
{
// ダイアログをメニューとして使用する
int iCommand = 0;
HDIALOG hd = dialog("メニュー");
dialogControlRadioV(hd);
dialogChoiceRadio(hd,&iCommand,"MENU&1","MENU&2","MENU&3","MENU&4",NULL);
if (dialogOpen(hd)) {
if (iCommand == 0) {
information("MENU1が選択されました");
}
if (iCommand == 1) {
information("MENU2が選択されました");
}
if (iCommand == 2) {
information("MENU3が選択されました");
}
if (iCommand == 3) {
information("MENU4が選択されました");
}
}
}
main
{
caseword(text);return;
searchnextEx(text);return;
indentC(text);return;
zenhan(text);return;
}