EmptyPage.jp > Whining Express > 2004-08-07
サイトの更新情報や日々の雑感など。
「チュートリアル」にリンクをお願いしてみたけど、3週間たっても返事がないや。あはは。
いわゆる半角英数字と全角日本語文字との間に、スペースを入れたいと思うこともあるわけです。普段は面倒だからしないけど、たとえば「マクロ入門」のページではそのようになっています。標準の機能として、[英数字と全角文字との間に空白を開ける] というのがあるのですが([編集]-[変換])、これはちょっと挙動が単純すぎるのであまり使えません。そこで以下のようなマクロを使っています。
//## 英数・日本語間スペース調整 static void spacingonMain(TX *text) { // 英数・日本語間にスペースを開ける(メイン処理ルーチン) txJumpFileTop(text); TXCHAR ccur, cprev; // これら文字の前にスペースは入れない(¥x1f, ¥x1eはTMLタグ) mchar szIgnoreEnd[] = "¥x1f¥x1e¥x0d ¥t¥"'‾/)]}<>|,.:;+-*@?!¥¥()「」『』【】[]〔〕《》@$!?・、。,.<> …◇◆□■●○◎☆★※§〜―−‐"; // これら文字の後にスペースは入れない(¥x1f, ¥x1eはTMLタグ) mchar szIgnoreTop[] = "¥x1f¥x1e¥x0d ¥t¥"'‾/([{<>|:;+-*@¥¥()「」『』【】[]〔〕《》@$!?・、。,.<> …◇◆□■●○◎☆★※§〜―−‐"; while (txRight(text)) { // ファイル先頭にはスペースを入ることはないからこれでよい if (!txIsCurParaTop(text) && !txIsCurReturn(text)) { ccur = txGetChar(text); cprev = txGetPrevChar(text); if ((txchIsKanji(cprev) && !txchIsKanji(ccur)) || (!txchIsKanji(cprev) && txchIsKanji(ccur))) { if (!strichr(szIgnoreEnd, ccur) && !strichr(szIgnoreTop, cprev)) { // 無視する文字に一致するものがない txInsert(text, " "); } } } } } void spacingon(TX *text) { txSetBusy(text); txSetUndispEx(text); if (text->fClip) { TX *text2 = textnew(); if (text2) { txInsertTextSelect(text2, text); spacingonMain(text2); txSelectDelete(text); txInsertText(text, text2); textclose(text2); } } else { spacingonMain(text); } txSetDispEx(text); txSetUnbusy(text); } void spacing(TX *text) { HDIALOG hd = dialog("英数・日本語間スペース調整"); dialogCaption(hd, "英数・日本語間にスペースを挿入します。"); if (dialogOpen(hd)) { spacingon(text); information("変換が終了しました。"); } }
spacing関数を実行して使います。
もう何年も前に書いたやつなので、よく見ると幼稚なところもあるかもしれませんが、とりあえず動いているのでそのまま使い続けています。