#language pascal
//*******************************
//script_global.txt ȫֹú(¼)
//Create By Djunny @ 09.6.5 : www.mozhua.net
//ı༭иʾʹpascal﷨.
{
Ѹ£10.4.4
1޸ص½ڵ.
2RegMatch.

Ѹ£09.10.9
1ӹĶBeforeSplitContentУ.
2޸BeforeSplitContent,nowurl
3bookInitڳʼеãɳڲá

Ѹ£09.8.15
1ϵͳͨúȡ½Ϣ
function _sources(index:integer):tsourceobj;
s
Ѹ£09.7.10
ʹ uses '#siteunit'; վչű
}
//*******************************


//*******************************
//ִ
//*******************************

//ɱļ±
//begin ...() end.
//ʼִУִϺ
//º˵еĵʱе(¼)


//*******************************
//ú¼˼
//*******************************

//ڲ̶ù̶Ĺ¼
//ͬʱʹùõ¼̡
//img2txtͼƬתֵĹй̶ģͳһת
//Ϳڹúд£
//ÿļȥд(ȱ㣺ĲЧ^_^)


//*******************************
//ֵ֧¼бעµкܸı䡣
//*******************************

//1function StartDownNew(var content:string;var nosave:boolean):boolean;
//ִʱ	ڿʼһµ½ڵ֮ǰִеĺ
//ֵ	true	½طѾԶ庯,Ҫϵͳ̽
//ֵ	false ҪϵͳĹ̽ء
//ע⣺
//trueʱ
//ҪصݣһΪģ
//뷵ؽtrue,Ϊcontentֵ,true
//½ڽٵϵͳعֱ̣ӽз
//ҪصݣһΪģ
//nosavetrueʱ
//Ͳִб浱ǰص½ˡ

//2function StartDownImg(var content,imgurl,imgfile,imgtext:string):boolean;
//ִʱ	ڿʼͼƬ֮ǰ
//		ǷҪϵͳͼƬ
//		content ǰ½ڵԴ루ر޸ĹĴ룩
//		imgurl ǰͼƬַ(µͼƬַ)
//		imgfile ǰͼƬļرļ
//		imgtext ǰͼƬOCR,سԽͼƬ˵(ĬΪ_none_,ÿռɽͼƬ)

//3function img2txt(filepath,fileurl:string):string;
//ִʱ	ͼƬתTXTOCR
//		OCRԺַ_none_ʹûת
//		filepath ͼƬ·أ
//		fileurl ͼƬַԶ̣

//4procedure BeforeSplitContent(var content:string;nowurl:string;repeatindex:integer);
//ִʱ	ڷ½Դ֮ǰִеԶ庯
//		޷ֵ
//		content ǰ½ڵԴ루δ޸ĹԴ룬طĴ룩
//		nowurl ǰ½ڵĵַ
//		repeatindex ǰص

//5procedure AfterSplitContent(var content:string;repeatindex:integer);
//ִʱ	ڷ½Դִ֮еԶ庯
//		޷ֵ
//		content ǰ½ڵԴ루Ѿɳͨȡ滻Դ룬طĴ룩
//		fileurl صĵַԶ̣
//		repeatindex ǰص

//6procedure BookInit;
//ִʱ	ʼʱȡǰļϢ͸½
//		޷ֵ
//		

//*******************************
//ú,Ҫֱӵõ
//*******************************

//1procedure LG(const msg:variant);
//˵msgд־ϢУʾûʱõ
//ӣ
//LG('~');
//LG(123);

//2function alert(const msg:variant;tp:integer=0;mb:integer=0):integer;
//˵ʾ(Ϊ̰߳ȫм߳еMSG)
//tp(ͼ)ã0(Ϣ)1()2()
//mb(ť)ã0(ȷ)1(ȷȡ)2()3(ǡȡ)4(ǡ)5(ԡȡ)
//ֵ1(ȷ)2 (ȡ)3 (ֹ)4 ()5 ()6 ()7 ()
//ӣ
//alert('һС');
//alert('[][]', 2, 4);

//3function Save(const SaveFile,SaveBody:string;const Append:Boolean=false):boolean;
//˵ļ
//SaveFileļ·
//SaveBodyļ
//AppendǷдļ
//أtrueɹfalseʧ
//ӣ
//ļдһ
//APPPATHǸȫ·
//APPPATH	Ŀ¼ҲAPPPATH(1)
//APPPATH(2)	ģĿ¼(template)
//APPPATH(3)	ʷĿ¼(histroy)
//APPPATH(4)	ļĿ¼(siteconfig)
//APPPATH(5)	ļĿ¼(core)
//save(APPPATH+'html.txt', 'ݣ',true);

//4procedure Stop;
//˵ֹͣǰ

//5function IsStop:boolean;
//˵ȡǰǷֹͣ
//أtrueѾֹͣfalseûֹͣ

//6procedure ClearDownCache;
//˵صĻ
//עʱЩվҪһҳȡCOOKIEܷʣ
//ڸֵCOOKIE֮ǰñջ档

//7function F(key:string;dft:string='';Site:String='';save:boolean=false):variant;
//˵ȡվļѡֵ
//keyվļ  ѡµ ѡ
//dftûлȡֵ򷵻صĬֵ
//siteΪǰվļеֵ򽫻ȡsiteļֵ
//saveĬΪд룬Ϊtrueʱ,ѡkeyֵΪdft
//أõվļ
//1
//ȡǰվļе Cookie ֵ
//pascal﷨
{
var cookie:string;
begin
cookie:=F('Cookie');
//վļѡ Cookie
F('Cookie','abc=123','',true);
end.
}

//JS﷨
//var cookie=F('Cookie');

//2
//ȡ QQԭѡ
{
var siteurl:string;
begin
	siteurl:=F('վַ','','QQԭ');
end.
}


//8function Down(const AUrl:string;CharSet:string='';const method:string='GET';const PostPra:string='';const SaveFile:string='';const CacheTime:Integer=0):string;
//˵صҪ
//AUrlҪصĵַ
//charset: Ŀҳı롣֧utf-8\BIG5,ĬΪGB2312,ֵΪCHECKϵͳԶ⣩
//methodȡķʽ֧GETPOSTHEAD
//PosPraPOSTʱҪύֵ֧ύļ,ʽa=1&b=2&c=3&f=file:c:\a.txt
//SaveFileغֱӱ·ĿΪͼƬʱҪֱӱ棬SaveFileֵǰ׺Ϊ:ʱݵַ汣ӦĿ¼СֵΪ:list:ext򱣴history/cache/listĿ¼,׺Ϊext
//CacheTimeSaveFileǰ׺Ϊ:ʱʹûʱҳĻʱ(λ)
//أAUrlHTML루߱Ķļ
//
{
begin
	ClearDownCache;//ǰػ
	_GET.cookie	:= 'a=1;b=2';//ָCOOKIE
	_GET.referer	:= 'http://www.baidu.com/';//һҳ
	_GET.userAgent	:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';//ûͷ
	//ύs=0fΪc:\123.txtļ󣬽õݱ浽a.dat
	Down('http://www.xxx.com/downsoft.php', '', 'POST', 's=0&f=file:c:\123.txt', 'C:\a.dat');
end.
}

//9function Html2Txt(const source: String;const freespace:Integer=0;useIE:Boolean=false):String;
//˵HTMLԴȥǩתtxtʽ
//sourceĿHTMLԴ
//freespaceѹʣ0ѹ1ѹհУ2ѹհס
//useIEǷʹIEн&#12321;ʱҪIEн
//أHTMLı
//
{
begin
	html2txt('<p>asdbasdf<br>12312<div>321</div></p>',0);
end.
}

//9procedure ReloadData();
//˵µǰϢ
//
//
{
begin
	//µǰĿ¼ַἰʱУ
	_DATA.url := 'http://www.xx.com';
	ReloadData();
end.
}

//10function RegMatch(pattern:string;source:string;ReturnIndex:Integer=-1):string;
//˵ͨʽƥ䵱ǰݡ
//patternʽ
//sourceҪƥ
//returnIndexƥ䵽±꣬Ϊ-1ʱرʽ
//أΪַ˵ƥʧܣƥɹreturnindexֵ
//
{
begin
	RegMatch('\w+', 'aaa123456');//:\w+
	RegMatch('(\d+)', 'aaa111bbb', 0);//:111
end.
}

//11function RegMatchs(pattern:string;source:string;ReturnIndex:Integer=-1):string;
//˵ͨʽƥ䵱ǰݡ
//patternʽ$$$$$ָ
//sourceҪƥ
//returnIndex:ƥ䵽±꣬Ϊ-1ʱرʽ
//أΪַ˵ƥʧܣƥɹƥıʽ(ֻƥ)
//
{
begin
	RegMatchs('\s$$$$$a', 'aaa123456');//:a
	RegMatchs('(\S+)$$$$$(\w+)', 'aaa123456', 0);//һʽƥ䣬:aaa123456
	RegMatchs('(\s)$$$$$(\d+)', 'aaa123456', 0);//ڶʽƥ䣬:123456
end.
}

//12function RegReplace(source:string;pattern,target:string):string;
//˵ͨʽ滻ǰݡ
//sourceҪ滻Ŀ
//patternʽ$$$$$ָ
//أ滻ϵ
//
{
begin
	RegReplace('aaa 1234   5  6', '\s+', '');//:aaa123456
end.
}


//13function RegReplaces(source:string;pattern:string):string;
//˵ͨ()ʽ滻ǰݡ
//sourceҪ滻Ŀ
//patternʽ$$$$$ָÿǵ±Ϊʽ±Ϊ滻Ŀ,(reg)ͷĶߵıʽʽ
//أ滻ϵ
//
{
begin
	RegReplace('aaa 1234   5  6', '(reg)\s+$$$$$#space$$$$$a$$$$$b');//:bbb123456
end.
}

//14function RegPickChapter(content:string;FilterFunc:string=''):integer;
//˵ͨHTMLͱʽȡӦ½ڣͬʱԻص
//patternȡ½

//*******************************
//ñ
//*******************************
//ı
//عвıı

//_RegExp			΢ʽ
{
ԣ
//ʽ
Pattern		: string;
з
//滻
function Replace(Source,Wstr:variant):String
//
function Test(Source:variant):boolean
//ִƥ
function Execute(Source:variant):IDispatch
}
//ʽʹӣ
{
var nobr : boolean;
var i	 : integer;
var body : string;
var Matchs : variant;
begin
	body := '@nobr3213123@nobr;';
	//JS﷨ס\Ҫ˫д,pascal﷨ԲҪ
	_RegExp.Pattern	:= '(\r\n)?@nobr';
	//Ƿɹ
	if _RegExp.Test(body) then
	begin
		Matchs	:= _RegExp.Execute(body);
		//ȡƥ
		for i:=0 to Matchs.count-1 do
			LG(Matchs.Item[i].Value);
		//滻@nobr滻__
		body := _RegExp.replace(body, '__');
	end;
end.
}



//_DATAID(integer)		ǰdataid(history.mdb 7txt_dataпɲ)

//_GET(ThttpDownLoad)	HttpDownLoadصһ

{
(ͷ)
COOKIE		: string;
FROM		: string;
REFERER		: string;
ANENT		: string;
CONTENTTYPE	: string;
USERAGENT	: string;
ACCEPTCHARSET	: string;
ACCEPTENCODING	: string;
ACCEPTLANGUAGE  : string;
ACCEPT		: string;
صķ,downʾ.
}

{_Data(TDataObj)		󣬿ͨȡǰϢ
ԣ
	ID          : Integer;
	Name        : string;
	Url         : string;
	Site        : string;
	Comfrom     : string;
	OuterSite   : boolean;
	TypeName    : integer;
	SaveInOne   : boolean;
	SourceCount : integer;
	WordCount   : integer;
	SaveExt     : string;
	SaveDir     : string;
	AddTime     : TDateTime;
	DownTime    : TDateTime;
	DownPre     : integer;
	ShareTxt    : string;
	Info        : string;
	TmpFile     : string;
	DownImg     : boolean
	updateChapter : boolean;//09.9.19£Ƿ񴴽ʱ½
()
_data.Name
}

//ÿһ½ǰ¸ֵһεı
//_SourceIndex:integer 		ǰص½Ŀ¼
//_NowSource	    : TSourceObj	ǰص½ڽṹ
//function _sources(index:integer) : TSourceOjb;	ȡindex,0ʼ±½
{
TSourceObjԣ
	id          : integer;
	Name        : string;
	Url         : string;
	Dataid      : integer;
	UpTime      : TDateTime;
	WillDown    : boolean;
	IsDown      : boolean;
	ErrDown     : boolean;
	des         : integer;
	WordCount   : integer;
(õǰص½,д붼ȡͬһֵ):
_NowSource.name
_sources(_SourceIndex).name
}
//վĽű#siteunitǰվýű
//վƿӦվű(ʱ)
uses '#siteunit';
//һЩõıʽ

var
	PATTERN_A	: string= '<a[\s\S]+?href\s*=\s*["|'']?([^"'' >]*)["|'']?[^<>]*>\s*(<[^<>]+>)*?([\s\S]*?)(<[^<>]+>)*\s*</a';
	{
	}
	
	PATTERN_A_HREF	: integer= 0;
	PATTERN_A_TEXT	: integer= 2;
//ڼ⵱ǰվļĺǷ
	hasSDN		: boolean;//Ƿпʼһµ½ִеĺ
	hasSDI		: boolean;//ǷпʼһµͼƬִеĺ
	hasimg2txt	: boolean;//ǷOCR
	hasBSC		: boolean;//Ƿзǰ
	hasASC		: boolean;//Ƿзݺ

//ִվʱȴĺ
procedure OnSettingLoad();
begin
	if FUN_EXISTS('MYOnSettingLoad') then
	begin
		FUN_CALL('MYOnSettingLoad');
	end;
end;


//ڿʼһµ½ڵ֮ǰִеĺ
function StartDownNew(var content:string;var nosave:boolean):boolean;
begin
	result := false;
	if hasSDN then
	begin
		result := FUN_CALL('MyStartDownNew', content, nosave);
	end;
end;

//ͼƬתTXTҲ½ͼƬļOCR
function img2txt(filepath, fileurl:string):string;
begin
	result := '_none_';
	if hasimg2txt then//ãǰվļзͼƬת
	begin
		result := FUN_CALL('myimg2txt', filepath, fileurl);
	end
	else begin//õķδʵ,˼OLEͼƬOCR
	end;
end;


//ڿʼͼƬ֮ǰ
function StartDownImg(var content,imgurl,imgfile,imgtext:string):boolean;
begin
	if hasSDI then//ãǰվļзԴ
	begin
		result := FUN_CALL('MyStartDownImg', content, imgurl, imgfile, imgtext);
	end
	else begin//õķ
		result := false;
	end;
end;



//ڷ½Դ֮ǰִеԶ庯
procedure BeforeSplitContent(var content:string;nowurl:string;repeatindex:integer);
var
	TempReg,IndexReg1,IndexReg2,TmpStr: string;
	FindReg2			: boolean;
	//
	i,PageIndex			: Integer;
	Matchs				: variant;
begin
	//ãǰվļзԴ
	if hasBSC then
	begin
		FUN_CALL('MyBeforeSplitContent', content, url, repeatindex);
	end
	else begin//õķ
	end;
	//жóǷΪĶģʽ
	//ҳԼĿ¼ҳӵķ.
	if(_READ) then
	begin
		if FUN_EXISTS('MyBeforeRead') then
		begin
			//ӳóɹ˾Ͳٵ
			if FUN_CALL('MyBeforeRead', content, url, repeatindex) then exit;
		end;
	//һҳ1ҳ
	if(repeatindex=1)OR(GetReadUrl(0)='')then
	begin
		//Ķȡҳ½ԼĿ¼
		IndexReg1		:= F('ҳַʶ');
		IndexReg2		:= F('Ŀ¼ַʶ');
		TempReg			:= F('½ڵַʶ');
		FindReg2		:= false;//ҵĿ¼Ͳ
		PageIndex		:= 1;//ҳַ
		//ȡ
		_RegExp.pattern := PATTERN_A;
		Matchs	:= _RegExp.Execute(content);
		//save('read_.txt', content);
		//ƥеַ
		//save('read.txt', '');
		for i:=0 to Matchs.count-1 do
		begin
			url := abspath(nowurl, Matchs.Item[i].SubMatches[PATTERN_A_HREF]);
			//ƥ½ڵַ
			//һĹǣһҳһҳ
			//ƥľһҳȻƥһҳ
			//ƥͿԲ
			//save('read.txt', url, true);
			if(PageIndex<3)AND(RegMatchs(TempReg, url)<>'')then
			begin
				TmpStr := Matchs.Item[i].SubMatches[PATTERN_A_TEXT];
				if (pos('һ', TmpStr)>0)
				OR(pos('ҳ', TmpStr)>0) then
				begin
					//ò1һҳַ
					SetReadUrl(1, url);
					Inc(PageIndex);
				end
				else if (pos('һ', TmpStr)>0)
				OR(pos('ҳ', TmpStr)>0) then
				begin
					//ò2һҳַ
					SetReadUrl(2, url);
					Inc(PageIndex);
				end;
			end;
			
			//ƥĿ¼ַ
			if not FindReg2 then
			begin
				//ƥĿ¼
				if RegMatchs(IndexReg2, url)<>'' then
				begin
					SetReadUrl(0, url);
					FindReg2 := true;
					continue;
				end
				//ƥҳ
				else if RegMatchs(IndexReg1, url)<>'' then
				begin
					SetReadUrl(0, url);
					continue;
				end
			end;
			
			//save('read.txt', RegMatchs(TempReg, url)+Matchs.Item[i].SubMatches[PATTERN_A_TEXT]+':'+url+chr(13)+chr(10), true);
			
		end;
	end;
	end;
end;

//ڷ½Դִ֮еԶ庯
procedure AfterSplitContent(var content:string;repeatindex:integer);
begin
	if hasASC then//ãǰվļзԴ
	begin
		FUN_CALL('MyAfterSplitContent', content, repeatindex);
	end
	else begin//õķ
	end;
end;

procedure CallBackBookInfo(value,field,pattern:string);
begin
	//ֻеΪյʱȥ
	if(field = '')AND(_DATA.name = '')then
	begin
		_DATA.name := html2txt(value);
	end
	//ֻеΪյʱŸ
	else if (field = '')AND(_DATA.info = '')then
	begin
		_DATA.info := html2txt(value);
	end
	//ֻеΪյʱŸ
	else if (field = '')AND(_DATA.confrom = '') then
	begin
		_DATA.confrom := html2txt(value);
	end
	else if(field = '')then
	begin
		_DATA.TypeName:= html2txt(value);//಻ڣԶ
	end
	else if(field = '')then
	begin
		if trim(value)<>'' then
		begin
			//תȡõķͼƬԵַ
			_DATA.coverurl	:= abspath(_DATA.url, value);
			_DATA.coverpath	:= 'cover/'+md5(_DATA.coverurl)+GetFileExt(_DATA.coverurl);
		end;
	end
end;

//ܻȡ½бʱĹ˺
//url:ǰַ
//title :ǰַ
procedure CallBackFilterUrl(var url,title:string);
begin
	FUN_CALL('MYCallBackFitlerUrl', Url, title);
end;

//±ߵĳʼȻûС˵Ļ
//ô˺ȡĬϵС˵
function OnNoBookTitle:variant;
begin
	result := 'δ'+inttostr(_DATA.id);//ļҪΨһŶ
end;
//ʼʱȡǰļϢ͸½
procedure BookInit;
var
	HTMLcode,url,ourl: string;
	coverpath		: string;
	usesystemInit	: boolean;
	downnewurl		: boolean;
	Matchs			: variant;
	maxretry,retry	: integer;
	updatenum		: integer;
begin
	usesystemInit	:= true;
	ourl			:= '';//¼ûľɵַʹúԭ
	//ʼʼļеĿʼ
	//ڿʼУǿһʼĹ
	//磬ı䵱ǰ(_DATA.url)Ŀ¼ַ
	//ıϱ߶PATTERN_Aȡ½ӵȵȡ
	//falseĻͲټ±ߵĳʼ
	if FUN_EXISTS('MYBeforeBookInit') then
	begin
		usesystemInit := FUN_CALL('MYBeforeBookInit');
	end;
	if usesystemInit then
	begin
		repeat
		if(_DATA.url<>'')AND
			((_DATA.name='')OR(_DATA.updateChapter))then
		begin
			LG('.');
			patterns	:= F('С˵Ϣ');
			//ȡϵͳõ
			maxretry	:= strtoint(CFG('Download', 'MaxReTryCount', '10'));
			retry		:= 0;
			{********************************
				жַʼ
			*********************************}
			//½ʶ add By djunny 3.29
			if RegMatchs(F('½ڵַʶ'), _DATA.url)<>'' then
			begin
				_GET.cookie := F('Cookie');
				//Զ
				HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
				//ûжȡ
				if (Not _GET.readCache)AND(HTMLcode='') then
				begin
					repeat
						HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
						if (Not _GET.readCache) then
						begin
							ClearDownCache;
							LG('ȡϢʧܣԵ '+inttostr(retry+1)+' ...');
							inc(retry);
						end;
					until(_GET.responseCode=200)OR(maxretry<retry);
				end;
				//Դ
				if retry >= maxretry then 
				begin
					alert('½ڵַƺ޷?', 0,0);
					stop;
					exit;
				end;
				//½ҳȡϢ
				RegPickBookInfo(patterns, HTMLCode, 'CallBackBookInfo');
				//һӵʽ±ߵĳȥȡ½
				HTMLCode := '<a href="'+_DATA.url+'">'+_DATA.name+'</a>';
			end
			else begin
				//ҳĿ¼ҳԴ.
				//Զ
				_GET.cookie := F('Cookie');
				HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
				//ûжȡ
				if (Not _GET.readCache)AND(HTMLcode='') then
				begin
					repeat
						_GET.cookie := F('Cookie');
						HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
						if (Not _GET.readCache) then
						begin
							ClearDownCache;
							LG('ȡϢʧܣԵ '+inttostr(retry+1)+' ...');
							inc(retry);
						end;
					until(_GET.responseCode=200)OR(maxretry<retry);
				end;

				if retry >= maxretry then 
				begin
					if alert('С˵Ϣʧ.Ƿ?', 1, 1) = 2 then
					begin
						stop;
						exit;
					end;
				end;
				
				//ȡС˵Ϣ
				RegPickBookInfo(patterns, HTMLCode, 'CallBackBookInfo');
				
				downnewurl	:= false;
				if RegMatchs(F('ҳַʶ'), _DATA.url)<>'' then
				begin
					//ҳ
					if(FUN_EXISTS('MyBeforeGetListUrl'))AND(FUN_CALL('MyBeforeGetListUrl', HTMLCode))then
					begin
						downnewurl := true;
					end
					else begin
						//ȡ
						_RegExp.pattern := PATTERN_A;
						Matchs	:= _RegExp.Execute(HTMLCode);
						
						//ȡƥĿ¼ַ
						for i:=0 to Matchs.count-1 do
						begin
							url := abspath(_DATA.url, Matchs.Item[i].SubMatches[PATTERN_A_HREF]);
							if RegMatchs(F('Ŀ¼ַʶ'), url)<>'' then
							begin
								//õĿ¼ַ
								ourl		:= _DATA.url;
								_DATA.url	:= url;
								downnewurl	:= true;
								break;
							end;
						end;
					end;
				end;
				//ǷҪĿ¼Դ
				if downnewurl then
				begin
					retry		:= 0;
					_GET.cookie := F('Cookie');
					//Զ
					HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
					//ûжȡ
					if (Not _GET.readCache)AND(HTMLcode='') then
					begin
						repeat
							HTMLcode := Down(_DATA.url, 'CHECK', 'GET', '', ':list:lst', 300);
							if (Not _GET.readCache) then
							begin
								ClearDownCache;
								LG('½бʧܣԵ '+inttostr(retry+1)+' ...');
								inc(retry);
							end;
						until(_GET.responseCode=200)OR(maxretry<retry);
					end;
					
					//ٴλȡĿ¼ҳС˵Ϣ
					RegPickBookInfo(patterns, HTMLCode, 'CallBackBookInfo');
					//ʾ
					if retry >= maxretry then 
					begin
						if alert('½бʧ.Ƿֹͣ?', 1, 1) = 1 then
						begin
							if ourl<>'' then _DATA.url := ourl;
							stop;
							exit;
						end;
					end;
				end;
			end;
			//ַ
			
			//ⲻʱʾǰҳı
			if _DATA.name='' then 
			begin
				_DATA.name := getmidstr(lowercase(HTMLCode), 'title>', '</title');
			end;
			
			//
			//Ƿط
			if cfg('Config', 'DownCover', '1')='1' then
			if _DATA.coverurl <> '' then
			begin
				//Ŀļ
				if(not FileExists(_DATA.coverPath)) then
				begin
					LG('ʼط:'+_DATA.coverurl);
					_GET.referer := _DATA.url;
					//سɹ
					if down(_DATA.coverurl, 'CHECK', 'GET', '', _DATA.coverpath)<>'' then
					begin
					end;
				end;
			end;

			
			{********************************
				ȡ½Ϣʼ
			*********************************}
			
			//ڸ½ǰжϵǰûǷûҪ½ڡ
			//Ȼһļĺ:procedure MyBeforeGetChapter(var content:string)
			//˵һЩõ½ڣ
			//ͬʱǷٵϵͳĴ½ڷ
			if(Not FUN_EXISTS('MyBeforeGetChapter'))
				OR(Not FUN_CALL('MyBeforeGetChapter', HTMLCode))then
			begin
				//½ڣͬʱص½ڹ˺CallBackFilterUrl
				//صǸµ½Ŀ
				updatenum := RegPickChapter(F('½ڵַʶ'), HTMLCode, 'CallBackFilterUrl');
				if updatenum>0 then
				begin
					BOLDTASK;//ӴָС˵.
					LG(''+inttostr(updatenum)+'.');
				end;
			end;
			//ԭַ
			if ourl<>'' then _DATA.url := ourl;
		end;
		until true;
	end;
	//ʼļеĽ
	if FUN_EXISTS('MYAfterBookInit') then
	begin
		//ԽжǷᣨòٸ£Ȳ
		FUN_CALL('MYAfterBookInit', HTMLCode);
	end;

end;


//óʼĹ
begin
	hasSDN     := FUN_EXISTS('MYStartDownNew');
	hasSDI     := FUN_EXISTS('MYStartDownImg');
	hasimg2txt := FUN_EXISTS('MYIMG2TXT');
	hasBSC     := FUN_EXISTS('MYbeforeSplitContent');
	hasASC     := FUN_EXISTS('MYAfterSplitContent');
end.