#n = 0; $name[#n] = "定理"; $label[#n] = "thm"; #n = #n + 1; $name[#n] = "命題"; $label[#n] = "prop"; #n = #n + 1; $name[#n] = "補題"; $label[#n] = "lem"; #n = #n + 1; $name[#n] = "系"; $label[#n] = "cor"; #n = #n + 1; $name[#n] = "定義"; $label[#n] = "defn"; #n = #n + 1; $name[#n] = "注意"; $label[#n] = "rem"; #n = #n + 1; $name[#n] = "例"; $label[#n] = "ex"; #n = #n + 1; $name[#n] = "節"; $label[#n] = "sec"; #n = #n + 1; $searchbuf = searchbuffer; #searchopt = searchoption; ##i = 0; $$reg = "\\\\ref\\{("; while(##i < #n){ if(##i == 0)$$reg = $$reg + $label[##i]; else $$reg = $$reg + "|" + $label[##i]; ##i = ##i + 1; } $$reg = $$reg + ")"; #origx = x;#origy = y; gofiletop; while(true){ searchdown $$reg,regular; if(!result){ message "問題なさげです."; moveto #origx,#origy; setsearch $searchbuf,#searchopt; break; } escape; ##x = x;##y = y; right strlen("\\ref{"); $$s = ""; while(code != ':'){ $$s = $$s + char(code); right; } call GetNumber $$s; ##m = ##return; if(##m == -1)continue; moveto ##x,##y; // left;定理~\ref{...}じゃなく,定理\ref{...}と書く気がする. ##wx = x;##wy = y; call Left $name[##m]; if(gettext(##wx,##wy,x,y) != $name[##m]){ message "ここんとこ," + $name[##m] + "っぽいんだけど," + gettext(##wx,##wy,x,y) + "になってるよ?"; setsearch $searchbuf,#searchopt; endmacro; }else moveto ##x,##y; right strlen("\\reg{"); } setsearch $searchbuf,#searchopt; endmacro; GetNumber: ##i = 0; while(##i < #n){ if($label[##i] == $$1)return ##i; else ##i = ##i + 1; } return -1; Left: ##len = strlen($$1); ##i = 0; while(##i < ##len){ if(ascii(midstr($$1,##i,2)) > 0xFF)##i = ##i + 2; else ##i = ##i + 1; left; } return;