1. ͂߂
	̃vOĆAKAGParsergAȉ̋@\ǉB

		A. KAG^O𕡐sɂ킽ċLqł
		B. }N`ɁÃftHglwł
		C. [while][endwhile][continue][break]^O
		D. ignoreCRViIŕύXł
		E. s[np]}NĂяo悤ɂł
		F. [call][return]O[call]ViIύXꂽ
		@ ƂɂA[call]xTĖ߂邱Ƃł

	2014/01/26ɋggZ(1.0.0.1)KAGPlugin\[XR[h
	@򂵂܂BggZɊւXɊӒv܂B

2. g
	ExtKagParser.dllgg̃Q[fBNg(Ƃplugin/ȉ)
	zuAdata/Override.tjs̒ŁA
	Plugins.link("plugin/ExtKAGParser.dll");
	̂悤ɂēǂݍށBggZ̏ꍇAKAGParser.dll ̑
	ǂݍł悢B

	KAG^O̕sɘjLqȂAAfterinit.tjs 
		kag.mainConductor.multiLineTagEnabled = true;
		kag.extraConductor.multiLineTagEnabled = true;
	ǉ邱ƁB
	[return][call]T悤ɂɂ͈ȉǉ邱ƁB
		kag.mainConductor.fuzzyReturn = true;
	[return]sɃG[Ił͂ȂXNvgsɂ
	ȉǉ邱ƁB
		kag.mainConductor.returnErrorStorage = 'returnerror.ks';

3. ExtKAGParserŎgpł悤ɂȂ@\ڍ

  A. KAG^O𕡐sɂ킽ċLqł
	KAGParser multiLineTagEnabled  true ɂ邱ƂŁA
	ignoreCR = truêƂAs '\' ł΁As̓
	';' ǋL邱ƂȂAKAG^O𕡐sɘjċLq
	ƂłB

	၄
	[image storage=摜 layer=base page=back \
		top=%top \
		left=%left]

	KAGParser.dll Ŏ̍s`FbNĂɂ傲ɂ債
	BKAGParserEx.dll ł͕s cond= tꍇɏ
	łĂȂ߁A ExtKAGParser.dll ł͂Ƃ
	قȂB

  B. }N`ɁÃftHglwł

	}N`̂ƂɁA}NɓnɂāAꂪ
	}NgpɎw肳Ȃ̃ftHgl
	w\B

	၄
	[macro name=\ layer=base page=fore]
	[image storage= layer=%layer page=%page]
	[endmacro]

	̂ƂA
	[\ page=back]
	́A
	[image storage= layer=base page=back]
	ƏB

	ۂɂ́A̋@\́Ã}N`IɈȉ̂悤ɓWJ
	L^邱ƂŎĂ(̂߁A}N擪
	sǉ)B

	[macro name=\]
	[eval exp="mp.layer = 'base'" cond="mp.layer === void"]ǉ
	[eval exp="mp.page  = 'fore'" cond="mp.page  === void"]ǉ
	[image layer=%layer page=%fore]
	[endmacro]
		
  C. [while][endwhile][continue][break]^O

	KAG^OƂāA[while][endwhile][continue][break]V݁B
	݂͈ȉ̐ɒӁB

	E[if][ignore]^OƓlA[while]`[endwhile]ԂɃZ[ux
	@݂Ă͂ȂȂB
	@A[while][call ...]łȂZ[uxzuO.K.
	@@Ƃ͂A[call]ƓlViIύXɎキȂ̂Ő͂ȂB
	Eꃋ[v\[while]`[endwhile]A[break][continue]̓t@C
	@܂ŋLqĂ͂ȂȂB

	F	[while init= exp= each=]
	F	(=exp)ɏ]A[endwhile]܂łKAGXNvg[v
		B
		[v͓qɂ邱Ƃ\B
	F	init=	[vJnɈxsTJS(ȗ)
		exp=	[vp邩ǂfTJS(ȗs)
			true=[vpAfalse=[vI
		each=	̃[vJnOɖsTJS(ȗ)

	F	[endwhile]
	F	Ή[while]^OƂ̊ԂKAGXNvg[vB
		[if][else][endif][ignore][endignore]ȂǂƓqԂ
		ƂȂ̂ŁÃ^O͕KΉ邱ƁB

	F	[continue]
	F	œ[while]݂̌̃[v𒆒fÃ[vsB
		̃[vł́A̍sȍ~KAG^O͎sȂB

	F	[break]
	F	œ[while]݂̌̃[v𒆒fA[while]𔲂B


	၄
	 TJS̊֐need_to_loop()trueԂԃ[v
	[while exp="need_to_be_loop()"]
		; KAG̏
	[endwhile]

	; Cfor̂悤Ȃ̂
	[while init="tf.i = 0" exp="tf.i < 10" each="tf.i++"]
		; KAG̏
	[endwhile]

	; foreach 炱ȁH
	[while init="(tf.ary = [5, 8, 2, 9]).reverse()" \
		exp="(tf.val = tf.ary.pop()) !== void"]
		; tf.val ɔz̗vfÂă[v
		; KAG̏
	[endwhile]

  D. ignoreCRViIŕύXł
	IWiKAGParserłignoreCŔuύXł邪Z[u
	Ȃ߁AConfig.tjsŒ`lύXK
	Ƃɖ߂ȂƂȂvƂÂ
	ViIŕύX鎞͒ӂKvB
	ExtKAGParserłKAGParserNXIgnoreCRZ[u悤
	ύX߁AViIŔCӂɕύX\ƂȂB
	ۂɂ͎͂ E. ̋@\̕z΁B

  E. s[np]}NĂяo悤ɂł
	KAGParserCX^X(kag.mainConductor)ɂāA
	ignoreCR=false  enableNP=true ŁAs "[np]\"
	}N}悤ɂ(\)BɂAKAG
	ViIt@C̋LqȈՂɂȂBnp  New Page
	̗ƎvƋgB

	၄
	(kag.mainConductor.)ignoreCR = false łꍇ̈ȉ
	LqlB
	===  ===
	[eval exp="kag.mainConductor.enableNP = true"]\
	̍sł͉s܂B
	̍sł͉sꂸA̍s[[np]}܂B
	
	킩邩ȁH

	=== ܂ ===

	́A(ignoreCR=truȅꍇł)ȉ̂悤ɉ߂

	===  ===
	[eval exp="kag.mainConductor.enableNP = true"]
	̍sł͉s܂B[r eol=true]
	̍sł͉sꂸA̍s[[np]}܂B
	[np]
	킩邩ȁH
	[np]
	=== ܂ ===

	Pɋsuꍇ́A܂łignoreCR=false̎
	lARgs(';')ݒu邱ƁB

  F. [call][return]O[call]ViIύXꂽƂɂA
     [call]xTĖ߂邱Ƃł
	݂ȂƂāAQ[ɏoƂȂ肪
	G[bZ[WAuViIt@CɕύX
	 return ̖߂ʒuł܂vB
	ExtKAGParserł́Aȉ`邱ƂŁÃbZ[W
	x邱ƂłB
	[eval exp="kag.mainConductor.fuzzyReturn = true"]
	fuzzyReturn͌̈ӂɃZ[uȂ悤ɂĂ(
	ςKvoɑΉ邽)̂ŁAfirst.ks
	擪AfterInit.tjsŒ`邱Ƃ߂B

	̓Iɂ́Au[return]߂ʒu(=[call storage=xxx]܂
	s)AVViIt@CőO\s͈̔͂ŒTvB
	IWił͖߂낤ƂsɕύXꍇ͖ⓚ
	pŃG[ɂĂAExtKAGParserł͂
	߂*Ȃ*B

	Aȉ̂悤ȃP[Xł́Aꏊɖ߂ꍇ
	邱ƂɂӁB
	[macro name=np]
	[p]
	[cr]
	[call storage=saveanyware.ks target=*saveanywhere]
	[endmacro]
	Ƃ}N炩ߒ`Ă̂ƂB

	ύXÕViI
	łĂӂłB
	[np] 
	勹؂Ȃ邩łB
	[np]@@@@@@@@@@ ŃZ[u
	r񓙋؂ł
	[np]

	ύX̃ViI
	łĂӂłB[r]
	vbVAbvƂ܂B[r]
	Ƃ̃}łB[r]
	݂ȓ̘rɂȂ܂B
	[np]@@@@@@@@@@ [hƂĊJ
	勹؂Ȃ܂B
	[np]			 ĊJĂق̂ɁI
	r񓙋؂ł
	[np]

	fuzzyReturńAύXÕViI[call]ŝƓ
	e̍s(ł[np])AȑOł߂ӏTB
	̂߁A̗ł́A[np]܂܂Ƃ߂()
	sĊJĂ܂B

	Ƃ͂AIWiKAGParserł悤ȂƂ͋N
	Ă킯ŁA炻̂炢͂ȂAƑËB
	ƂSɖhɂ́A}WɃj[NȃZ[u
	xzuKv͕̂ςȂB

	ȂA[return]Ŗ߂ʒuTȂꍇAʏ
	uViIt@CɕύX߁cvƂ̃b
	Z[W\ăG[I邪AreturnErrorStorage
	`Ă΂ĂŏpB
	returnErrorStorageZ[uȂ̂ŁAgȂfirst.ks
	̓AfterInit.tjsŒ`邱ƁB

	first.ks̓ł̒`၄
	[eval exp="kag.mainConductor.returnErrorStorage = 'returnerror.ks'"]

	returnerror.ks̗၄
	[eval exp="System.inform('܂[return]Ŗ߂܂ł[')"]
	; ⓚpŃ^Cgɖ߂Ⴄ
	[gotostart]

4. gg2ƋggZł̑
	ggZ(ɂJŋgg2?)ł́Aȉ̊֐ǉĂB

	void TVPExecuteScript(const ttstr &, iTJSDispatch2 *, tTJSVariant *);

	gg2.32r2ɂ͂̊֐݂Ȃ߁AExtKAGParserł́A
	̊֐gEgȂIł悤Ƀ\[XR[hō׍H
	B

5. ӓ_
	EggZKAGParserQlɂ߁ACBSDCZXƂȂB
	@ȂƋR(?)dll͋ggłgpłႤǂˁI
	EVC2010ŃrĥŁAWinXPO(Win2kȂ)ł͓삵ȂB

6. \[Xt@CƂ
	ExtKAGParser.h ...... ̊֐gEgȂ̃rh𕪂`
	KAGParser.cpp ....... KAGParser{
	KAGParser.h ......... KAGParserpwb_
	krkr2_tp_stub.cpp ... gg2(2.32r2) tp_stub.cpp
			      CZXt
	krkr2_tp_stub.h	..... gg2(2.32r2) tp_stub.h
			      CZXt
	krkrz_tp_stub.cpp ... ggZ(1.0.0.1)玝Ă tp_stub.cpp
	krkrz_tp_stub.h	..... ggZ(1.0.0.1)玝Ă tp_stub.h
	Main.cpp ............ dllǂݍݗpC
	tjsHashSearch.h ..... nbVpwb_(gg[2Z]ʂ)
	tp_stab.cpp ......... ̊֐gEgȂ̃rh𕪂\[X
	tp_stab.h ........... wb_

7. Ql
	KAGPluginEx.dll
		https://sv.kikyou.info/svn/kirikiri2/trunk/kirikiri2/src/plugins/win32/KAGParserEx/
	KAGPluginExb.dll:
		http://kasekey.blog101.fc2.com/blog-entry-203.html
		https://github.com/sakano/KAGParserExb
	ggZ
		http://www.kaede-software.com/cat20/z/
	KAGPlugin.dll for ggZ
		https://github.com/krkrz/krkrz/tree/master/src/plugins/win32/KAGParser

8. ̑
	Eӌ~BقALqɂׂA
	@ȋ@\~AȂǁB[EfłǂB
		[: s_narayyahoo[dot]co[dot]jp  Ђ˂Ă̂Œ
		f: http://b.koroweb.com/pa/patio.cgi?room=kaicho
	E܂łȂ̂ŁAĂ΂ċlɎgĒB
	@񂩂Ή͉\Ȍ葁鏊iB

ƂKAGParserTagLineϐ͒NgĂȂ݂Ȃ񂾂
_Ȃ̂HNgĂ̂H

