/*=========================================================== 自動アンカーコード(ライブラリ部) ===========================================================*/ /*----------------------------------------------------------- アンカー自動置換 -----------------------------------------------------------*/ OnTranslateInternal.ANCHOR { if SUBSTR(SHIORI3FW.Eventid,0,3) == 'On_' { _argv[0] return } //大括弧=タグパラメータの内側は無視 //このへんほんとはちゃんと解析しないと…… _resarr = RE_SPLIT(_argv[0],'\\_*[0-9a-z!?]\[.+?\]') _restok = RE_GETSTR() _n = ARRAYSIZE(_resarr) _m = ARRAYSIZE(AnchorWordList) _l = ARRAYSIZE(SimpleAnchorWordList) for _i = 0 ; _i < _n ; _i++ { for _j = 0 ; _j < _m ; _j++ { _resarr[_i] = REPLACE(_resarr[_i],AnchorWordList[_j],"<<++&&##%(_j)|") } for _j = 0 ; _j < _l ; _j++ { _resarr[_i] = REPLACE(_resarr[_i],SimpleAnchorWordList[_j],">>&&++##%(_j)|") } } _text = _resarr[0] for _i = 1 ; _i < _n ; _i++ { _text += _restok[_i-1] _text += _resarr[_i] } //通常アンカー _resarr = SPLIT(_text,'<<++&&##') _n = ARRAYSIZE(_resarr) _text = _resarr[0] _work = IARRAY _word = '' for _i = 1 ; _i < _n ; _i++ { _work = SPLIT(_resarr[_i],'|',2) _word = AnchorWordList[TOINT(_work[0])] _text += '\_a[OnAnchorWordExec,' + エスケープ(_word) + ']' + _word + '\_a' _text += _work[1] } //簡易アンカー _resarr = SPLIT(_text,'>>&&++##') _n = ARRAYSIZE(_resarr) _text = _resarr[0] _work = IARRAY for _i = 1 ; _i < _n ; _i++ { _work = SPLIT(_resarr[_i],'|',2) _x = TOINT(_work[0]) _text += '\_a[' + SimpleAnchorWordListTo[_x] + ']' + SimpleAnchorWordList[_x] + '\_a' _text += _work[1] } //「戻る」時チェック if STRSTR(_text,'OnAnchorWordExec',0) >= 0 { if STRSTR(_text,'OnAnchorWordReturn',0) < 0 { LastAnchorWordScript = IARRAY } LastAnchorWordScript ,= _text } _text } OnSystemLoad.ANCHOR { //通常アンカー AnchorWordList = GETFUNCLIST('アンカー解説:') _n = ARRAYSIZE(AnchorWordList) for _i = 0 ; _i < _n ; _i++ { AnchorWordList[_i] = SUBSTR(AnchorWordList[_i],7,STRLEN(AnchorWordList[_i])-7) } AnchorWordList = ASORT('string,descending,length',AnchorWordList); LastAnchorWordScript = IARRAY //簡易アンカー SimpleAnchorWordList = IARRAY _a = SPLIT(簡易アンカーリスト,CHR(0xd,0xa)) _n = ARRAYSIZE(_a) _c1 = CHR(1) for _i = 0 ; _i < _n ; _i++ { _v = RE_SPLIT(_a[_i],'[ \t]*\|[ \t]*') if STRLEN(_v[0]) && STRLEN(_v[1]) { SimpleAnchorWordList ,= _v[0] + _c1 + STRFORM('$06d',_i) } } SimpleAnchorWordList = ASORT('string,descending,length',SimpleAnchorWordList) _n = ARRAYSIZE(SimpleAnchorWordList) SimpleAnchorWordListTo = IARRAY for _i = 0 ; _i < _n ; _i++ { _v = SPLIT(SimpleAnchorWordList[_i],_c1) SimpleAnchorWordList[_i] = _v[0] SimpleAnchorWordListTo ,= RE_SPLIT(_a[TOINT(_v[1])],'[ \t]*\|[ \t]*')[1] } } OnSystemUnload.ANCHOR { ERASEVAR('AnchorWordList','LastAnchorWordScript','AnchorWordSortedList') ERASEVAR('SimpleAnchorWordList','SimpleAnchorWordListTo') } バルーンツールチップOnAnchorWordExec //AYALILITH用 { _fn = 'アンカー概要:' + reference[2] if ISFUNC(_fn) { _v = EVAL(_fn) _va = SPLIT(_v,'|',2) _va[1] } } On_balloon_tooltip { if reference[1] == 'OnAnchorWordExec' { バルーンツールチップOnAnchorWordExec } } /*----------------------------------------------------------- 単語解説処理用 -----------------------------------------------------------*/ OnLib.AnchorWordSelect { _txt = REPLACE(EVAL('アンカー解説:' + reference[0] + '(reference[0])'),'\e','') アンカー単語解説(reference[0],_txt,'アンカー単語リスト表示') } OnAnchorWordExec { _txt = REPLACE(EVAL('アンカー解説:' + reference[0] + '(reference[0])'),'\e','') アンカー単語解説(reference[0],_txt,'OnAnchorWordReturn') } OnAnchorWordReturn { _n = ARRAYSIZE(LastAnchorWordScript) LastAnchorWordScript[_n-2] LastAnchorWordScript[_n-1] = IARRAY } /*----------------------------------------------------------- 単語リスト作成 -----------------------------------------------------------*/ アンカー単語リスト表示 { reference[0] = '0' OnAnchorWordListView } OnAnchorWordListView { _c1 = CHR(1) if ARRAYSIZE(AnchorWordSortedList) <= 0 { _wa = AnchorWordList _n = ARRAYSIZE(_wa) AnchorWordSortedList = IARRAY _val = '' for _i = 0 ; _i < _n ; _i++ { _fn = 'アンカー概要:' + _wa[_i] if ISFUNC(_fn) { _val_a = SPLIT(EVAL(_fn),'|',2) _val = _val_a[0] } else { _val = _wa[_i] } _val += _c1 _val += _wa[_i] AnchorWordSortedList ,= _val } AnchorWordSortedList = ASORT('string,ascending',AnchorWordSortedList) } _n = ARRAYSIZE(AnchorWordSortedList) _page_num = 0 if ISFUNC('アンカー単語リストページ単語数') { _page_num = TOINT(EVAL('アンカー単語リストページ単語数')) } if _page_num <= 0 { _page_num = 8 } _page_max = TOINT((_n-1) / _page_num) + 1 _page_cur = TOINT(reference[0]) if _page_cur < 0 { _page_cur = 0 } if _page_cur >= _page_max { _page_cur = _page_max-1 } _page_last = (_page_cur+1)*_page_num _page_over = 0 if _page_last > _n { _page_over = _page_last - _n _page_last = _n } _txt = '' _txt_list = '' _page_first_text = '' _page_last_text = '' _is_menu = ISFUNC('メニュー') for _i = (_page_cur*_page_num) ; _i < _page_last ; _i++ { _v = SPLIT(AnchorWordSortedList[_i],_c1) _page_last_text = HAN2ZEN(SUBSTR(_v[0],0,1)) if _page_first_text == '' { _page_first_text = _page_last_text } if _is_menu { _txt_list += メニュー(_v[1],'OnLib.AnchorWordSelect',_v[1]) + '\n' } else { _txt_list += '\q[' + _v[1] + ',OnLib.AnchorWordSelect,' + _v[1] + ']\n' } } _txt += _txt_list for _i = 0 ; _i < _page_over ; _i++ { _txt += '\n' } _txt += "\n[half][%(_page_first_text)〜%(_page_last_text)] " _pager = '' for _i = 0 ; _i < _page_max ; _i++ { _page_text = TOSTR(_i) if _i < 10 { _page_text = HAN2ZEN(_page_text) } if _i == _page_cur { _pager += '\f[bold,false]' + _page_text + '\f[bold,default] ' } else { _pager += '\__q[OnAnchorWordListView,' + TOSTR(_i) + ']\f[bold,true]' + _page_text + '\f[bold,default]\__q ' } } _txt += _pager _txt += '\n' アンカー単語リスト(_txt) }