« 入れ替え 行 | Main | 区切り防止 »

2014.02.04

統一 括弧(秀丸)

ハードディスクのクラッシュで約200本ほどあったワードマクロを失った。その中に文章中の括弧統一マクロがあり、これは仕事でかなり頻繁に使うので秀丸で作り直した。

マクロをワードで作るか秀丸で作るかは手段の選択に過ぎない。大切なのはどのようなことを実現したいかである。それが明瞭であれば手段は如何様にもなる。

作り直してみれば、考えが前回より整理され構造が簡単になったように思う。やり直しにはそれなりの意義があるということか。使いたい方はどうぞご自由にコピーしてお使いください。

基本になる考え方は、前のワードマクロと同じで、和文の中、英文の中での統一だけではなく、和文英文が混在しており括弧の内外の文字種が異なるときの括弧の取扱も考えている。英文と和文という異なる文字種の相対関係により、どの括弧を使うと見やすくなるのか、あるいは半角スペースを入れるべきか、さらに括弧のあとの句読点やカンマピリオドなどを検討している。

ここにない場合も出てくる可能性があるが、そのときには各自で適宜追加をすること。ポイントは場合分けをすること、そして処理の順番を考えること。それがうまく行かないと、処理した括弧に対してまた処理をして元に戻ってしまうようなことが生じるので、ご注意。


//括弧統一マクロ
setcompatiblemode 0x20000;
begingroupundo;
disabledraw;
endgroupundo 2;

//// 和文の中
///// 和文の中の半角括弧の前後両方に半角空白があれば削除し、半角括弧を全角に
replaceall "([^ -~]) \\( ([^ -~])" , "\\1(\\2" , regular, nocasesense, nohilight;
replaceall "([^ -~]) \\) ([^ -~])" , "\\1)\\2" , regular, nocasesense, nohilight;
///// 和文の中の半角括弧の前後いずれかに半角空白があれば削除し、半角括弧を全角に
replaceall "([^ -~]) \\(([^ -~])" , "\\1(\\2" , regular, nocasesense, nohilight;
replaceall "([^ -~])\\) ([^ -~])" , "\\1)\\2" , regular, nocasesense, nohilight;
replaceall "([^ -~])\\( ([^ -~])" , "\\1(\\2" , regular, nocasesense, nohilight;
replaceall "([^ -~]) \\)([^ -~])" , "\\1)\\2" , regular, nocasesense, nohilight;
///// 和文の中の半角括弧を全角に これが原則
replaceall "([^ -~])\\(([^ -~])" , "\\1(\\2" , regular, nocasesense, nohilight;
replaceall "([^ -~])\\)([^ -~])" , "\\1)\\2" , regular, nocasesense, nohilight;
///// 括弧閉末尾
replaceall "([^ -~]) \\)" , "\\1)" , regular, nocasesense, nohilight;
replaceall "([^ -~])\\) " , "\\1)" , regular, nocasesense, nohilight;
//和文全角括弧の前後の全角空白を削除
replaceall "[ ]{1,}(" , "(", regular, nocasesense, nohilight;
replaceall ")[ ]{1,}", ")", regular, nocasesense, nohilight;
replaceall "([ ]{1,}" , "(", regular, nocasesense, nohilight;
replaceall "[ ]{1,})", ")", regular, nocasesense, nohilight;
//和文全角括弧の前後の半角空白を削除
replaceall "[ ]{1,}(" , "(", regular, nocasesense, nohilight;
replaceall ")[ ]{1,}", ")", regular, nocasesense, nohilight;

//// 英文の中
///// 英文の中の全角を半角に
replaceall "([ -~])(", "\\1 (", regular, nocasesense, nohilight;
replaceall ")([ -~\\.])", ") \\1", regular, nocasesense, nohilight;
///// 英文半角括弧の前が半角空白以外の英数字記号なら半角空白を付加
replaceall "([!-~]) \\(", "\\1 (", regular, nocasesense, nohilight;

//// 英文の中の括弧内に和文混在
///// 英文半角括弧の後が全角句読点なら半角空白を削除
replaceall "\\) ([。、])", "\\) \\1", regular, nocasesense, nohilight;
///// 英文半角括弧の後が半角空白全半ピリオドカンマ以外の英数字記号なら半角空白を付加
replaceall "\\)([!-+\\-/-~])", "\\) \\1", regular, nocasesense, nohilight;
///// 半角英数字+半角空白のあと半角括弧開くで括弧内が和文なら半角空白を削除し前括弧を全角に
replaceall "([\\!-~]) \\(([^ -~]{1,})", "\\1(\\2", regular, nocasesense, nohilight;
///// 括弧内が和文なら閉じる半角括弧を全角に
replaceall "([^ -~]{1,}) \\) ", "\\1)", regular, nocasesense, nohilight;
///// 前後英文で半角括弧内和文のみなら全角括弧にし半角空白があれば削除
replaceall " ([!-~]) ? (([^ -~]{1,}) )? ([!-~]) ", "\\1 (\\2) \\3", regular, nocasesense, nohilight;
///// 前後英文で不ぞろい括弧その1内和文のみなら全角括弧にし半角空白があれば削除
replaceall "([ -~]) ?(([^ -~]{1,}) \\) ?([ -~]) ", "\\1 (\\2) \\3", regular, nocasesense, nohilight;
///// 前後英文で不ぞろい括弧その2内和文のみなら全角括弧にし半角空白があれば削除
replaceall "([ -~]) ?\\(([^ -~]{1,})) ?([ -~])", "\\1(\\2)\\3", regular, nocasesense, nohilight;
///// 英数字に続き和文を入れた半角前括弧があればその半角前括弧を全角に
replaceall " ([!-'*-~]{1,}) ?\\(([ -'*-・]{1,}) ", "\\1(\\2", regular, nocasesense, nohilight;

//// 和文の中の括弧内に英数字記号混在
///// 前後和文で全角括弧内英数字記号のみなら半角括弧にし半角空白を付加
replaceall "([^ -~]) ?(([ -'*-~]{1,}) ) ?([^ -~])", "\\1 \\(\\2\\) \\3", regular, nocasesense, nohilight;
///// 前後和文で不ぞろい括弧その1内英数字記号のみなら半角括弧にし半角空白を付加
replaceall "([^ -~])(([ -'*-~]{1,})\\)([^ -~]) ", "\\1 \\(\\2\\) \\3", regular, nocasesense, nohilight;
///// 前後和文で不ぞろい括弧その2内英数字記号のみなら半角括弧にし半角空白を付加
replaceall "([^ -~])\\(([ -'*-~]{1,}))([^ -~])", "\\1 \\(\\2\\) \\3", regular, nocasesense, nohilight;
//前後和文で半角括弧内が英数字記号のみなら半角空白を付加
replaceall "([^ -~]) ?\\(([ -'*-~]{1,})\\) ?([^ -~])", "\\1 \\(\\2\\) \\3", regular, nocasesense, nohilight;
///// 和文に続き半角の空白と括弧以外の英数字記号があり半角括弧閉があればその半角括弧閉を全角に
replaceall "([ -'*-・]{1,})([!-'*-~]{1,})\\)", "\\1\\2)", regular, nocasesense, nohilight;
///// 半角括弧開の次に英数字記号があり和文が続き全角括弧閉があるときは、前の半角括弧を全角に
replaceall "\\(([ -'*-~ -'*-・]{1,}))", "(\\1)", regular, nocasesense, nohilight;

//// 見出し括弧
//ローマ数字または英文字の入った ( ) の後が和文なら半角空白付加は上で処理済み
///// ローマ数字または英数字の入った ( ) の前が和文句読点+半角空白なら半角空白削除
replaceall "([。、]{1}) ?\\(([A-Za-z0-9]{1,})" , "\\1\\(\\2", regular, nocasesense, nohilight;
endgroupundo 1;

|

« 入れ替え 行 | Main | 区切り防止 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/20048/59069962

Listed below are links to weblogs that reference 統一 括弧(秀丸):

« 入れ替え 行 | Main | 区切り防止 »