/*===========================================================
	AJ[R[hiCuj
===========================================================*/

/*-----------------------------------------------------------
	AJ[u
-----------------------------------------------------------*/
OnTranslateInternal.ANCHOR
{
	if SUBSTR(SHIORI3FW.Eventid,0,3) == 'On_' {
		_argv[0]
		return
	}

	//劇ʁ^Op[^͖̓
	//̂ւقƂ͂Ɖ͂ȂƁcc
	_resarr = RE_SPLIT(_argv[0],'\\_*[0-9a-z!?]\[.+?\]')
	_restok = RE_GETSTR()
	
	_n = ARRAYSIZE(_resarr)
	_m = ARRAYSIZE(AnchorWordListFull)
	_l = ARRAYSIZE(SimpleAnchorWordList)
	for _i = 0 ; _i < _n ; _i++ {
		for _j = 0 ; _j < _m ; _j++ {
			_resarr[_i] = REPLACE(_resarr[_i],AnchorWordListFull[_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]
	}
	
	//ʏAJ[
	_resarr = SPLIT(_text,'<<++&&##')
	
	_n = ARRAYSIZE(_resarr)
	_text = _resarr[0]
	_work = IARRAY
	_word = ''
	
	for _i = 1 ; _i < _n ; _i++ {
		_work = SPLIT(_resarr[_i],'|',2)
		_w_id = TOINT(_work[0])
		_word = AnchorWordListFull[_w_id]
		
		if AnchorWordListFlag[_w_id] == 0 {
			_text += "\f[anchorfontcolor,default.plain]\f[anchorvisitedfontcolor,default.plain]\f[anchornotselectfontcolor,default.plain]\f[anchorstyle,underline]\f[anchornotselectstyle,underline]\f[anchorvisitedstyle,underline]"
			_text += '\_a[OnAnchorWordExecNotTalk,' + GXP[v(_word) + ']' + _word + '\_a'
			_text += "\f[anchorfontcolor,default]\f[anchornotselectfontcolor,default]\f[anchorvisitedfontcolor,default]\f[anchorstyle,default]\f[anchornotselectstyle,default]\f[anchorvisitedstyle,default]"
		}
		else {
			_text += '\_a[OnAnchorWordExec,' + GXP[v(_word) + ']' + _word + '\_a'
		}

		_text += _work[1]
	}
	
	//ȈՃAJ[
	_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[OnAnchorWordExecJump,' + GXP[v(SimpleAnchorWordList[_x]) + ',' + SimpleAnchorWordListTo[_x] + ']' + SimpleAnchorWordList[_x] + '\_a'
		_text += _work[1]
	}
	
	//u߂v`FbN
	if STRSTR(_text,'OnAnchorWordExec',0) >= 0 {
		if STRSTR(_text,'OnAnchorWordReturn',0) < 0 {
			LastAnchorWordScript = IARRAY
		}
		LastAnchorWordScript ,= _text
	}
	
	_text
}

OnSystemLoad.ANCHOR
{
	//ʏAJ[
	AnchorWordListFull = GETFUNCLIST('AJ[TvF')
	_n = ARRAYSIZE(AnchorWordListFull)
	for _i = 0 ; _i < _n ; _i++ {
		AnchorWordListFull[_i] = SUBSTR(AnchorWordListFull[_i],7,STRLEN(AnchorWordListFull[_i])-7)
	}
	AnchorWordListFull = ASORT('string,descending,length',AnchorWordListFull);
	
	AnchorWordList = GETFUNCLIST('AJ[F')
	_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
	
	//ȈՃAJ[
	SimpleAnchorWordList = IARRAY
	_a = SPLIT(ȈՃAJ[Xg,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]
	}
	
	_n = ARRAYSIZE(SimpleAnchorWordList)
	for _i = 0 ; _i < _n ; _i++ {
		_found_simple = ASEARCH(SimpleAnchorWordList[_i],AnchorWordListFull)
		if _found_simple >= 0 {
			AnchorWordListFull[_found_simple] = IARRAY
		}
	}
	
	AnchorWordListFlag = IARRAY
	_n = ARRAYSIZE(AnchorWordListFull)
	for _i = 0 ; _i < _n ; _i++ {
		AnchorWordListFlag ,= ( ASEARCH(AnchorWordListFull[_i],AnchorWordList) >= 0 )
	}
}

OnSystemUnload.ANCHOR
{
	ERASEVAR('AnchorWordList','AnchorWordListFull','AnchorWordListFlag','LastAnchorWordScript','AnchorWordSortedList')
	ERASEVAR('SimpleAnchorWordList','SimpleAnchorWordListTo')
}

o[c[`bvOnAnchorWordExecNotTalk //AYALILITHp
{
	o[c[`bvOnAnchorWordExec
}
o[c[`bvOnAnchorWordExecJump //AYALILITHp
{
	"[uEUURLJ]\n"
	--
	o[c[`bvOnAnchorWordExec
}
o[c[`bvOnAnchorWordExec //AYALILITHp
{
	_fn = 'AJ[TvF' + reference[2]
	if ISFUNC(_fn) {
		_v = EVAL(_fn)
		_va = SPLIT(_v,'|',2)
		_va[1]
	}
}

On_balloon_tooltip
{
	if reference[1] == 'OnAnchorWordExec' {
		o[c[`bvOnAnchorWordExec
	}
	elseif reference[1] == 'OnAnchorWordExecNotTalk' {
		o[c[`bvOnAnchorWordExecNotTalk
	}
	elseif reference[1] == 'OnAnchorWordExecJump' {
		o[c[`bvOnAnchorWordExecJump
	}
}

/*-----------------------------------------------------------
	Pp
-----------------------------------------------------------*/
OnLib.AnchorWordSelect
{
	_txt = REPLACE(EVAL('AJ[F' + reference[0] + '(reference[0])'),'\e','')
	AJ[P(reference[0],_txt,'AJ[PꃊXg\')
}

OnAnchorWordExec
{
	_txt = REPLACE(EVAL('AJ[F' + reference[0] + '(reference[0])'),'\e','')
	AJ[P(reference[0],_txt,'OnAnchorWordReturn')
}

OnAnchorWordExecNotTalk : void
{
	//_~[
}

OnAnchorWordExecJump
{
	"\C\![open,browser,%(reference[1])]"
}

OnAnchorWordReturn
{
	_n = ARRAYSIZE(LastAnchorWordScript)
	LastAnchorWordScript[_n-2]
	LastAnchorWordScript[_n-1] = IARRAY
}

/*-----------------------------------------------------------
	PꃊXg쐬
-----------------------------------------------------------*/
AJ[PꃊXg\
{
	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 = 'AJ[TvF' + _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('AJ[PꃊXgy[WPꐔ') {
		_page_num = TOINT(EVAL('AJ[PꃊXgy[WPꐔ'))
	}
	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('j[')
	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 += j[(_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'
	
	AJ[PꃊXg(_txt)
}

