📄 uelements.pas
字号:
continue:=parser.curfinal;
Parser.CurFinal:=Options[random(options.count)];
Parser.CurName:='li';
result:=ProcessContents(Match,Parser);
Options.Free;
parser.CurFinal:=Continue;
end;
procedure TRandomElement.register;
begin
Randomize;
ElementFactory.register('random',Self);
end;
function TConditionElement.blockCondition(variable,value:string;Match:TMatch;Parser:TXMLParser):string;
//单条件的条件(condition)元素-处理
begin
if AnsiCompareStr(Memory.getVar(variable),value)=0 then begin
result:=ProcessContents(Match,Parser);
end else begin
result:='';
SkipElement(Parser);
end;
end;
function TConditionElement.blockSwitch(variable:string;Match:TMatch;Parser:TXMLParser):string;
//多条件的条件(condition)元素-处理
var
curval:string;
curvar:string;
defaultitem:boolean;
nvItem:boolean; {<li name="xx" value=""></li>}
vItem:boolean; {<li name="xx" value=""></li>}
begin
result:='';
While (Parser.Scan) do begin
case parser.CurPartType of
ptStartTag,
ptEmptyTag:if parser.CurName='li' then begin
curval:=Parser.CurAttr.Value('value');
curvar:=Parser.CurAttr.Value('name');
defaultItem:=(Parser.CurAttr.Count= 0);
nvItem:=(Parser.CurAttr.Count= 2)and AnsiSameStr(Memory.getVar(curvar),curval);
vItem:=(variable<>'') and AnsiSameStr(Memory.getVar(variable),curval);
if (defaultItem or nvItem or vItem)
then begin
result:=ProcessContents(Match,Parser);
SkipElement('condition',parser);
break;
end else
SkipElement(parser);
end;
end;
end;
end;
function TConditionElement.Process(Match:TMatch;Parser:TXMLParser):string;
//条件(condition)元素-处理
var
mainval:string;
mainvar:string;
begin
mainval:=Parser.CurAttr.Value('value');
mainvar:=Parser.CurAttr.Value('name');
if (mainvar<>'') and (Parser.CurAttr.Node('value')<>nil) then begin
result:=blockCondition(mainvar,mainval,Match,Parser);
end else if (mainval='') then begin
result:=blockSwitch(mainvar,Match,Parser);
end;
end;
procedure TConditionElement.register;
//条件(condition)元素-注册
begin
ElementFactory.register('condition',Self);
end;
function TBrElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:=' ';
end;
procedure TBrElement.register;
begin
ElementFactory.register('br',Self);
end;
function TCaseElement.Process(Match:TMatch;Parser:TXMLParser):string;
//大小写(case)元素-处理
var
specificElement:string;
upstr:string;
i:integer;
begin
result:='';
specificElement:=Parser.Curname;
result:=ProcessContents(Match,Parser);
result:=convertWS(result,true);
if SpecificElement='uppercase' then
result:=AnsiUpperCase(result)
else if SpecificElement='lowercase' then
result:=AnsiLowerCase(result)
else if (SpecificElement='formal') and (result<>'')then begin
upstr:=AnsiUpperCase(result);
result[1]:=upstr[1];
for i:=1 to length(result)-1 do
if result[i]=' ' then
result[i+1]:=upstr[i+1];
end else if SpecificElement='sentence' then
result[1]:=AnsiUpperCase(result)[1];
end;
procedure TCaseElement.register;
//大小写(case)元素-注册
begin
ElementFactory.register('uppercase',Self);
ElementFactory.register('lowercase',Self);
ElementFactory.register('formal',Self);
ElementFactory.register('sentence',Self);
end;
function TThatElement.Process(Match:TMatch;Parser:TXMLParser):string;
//上次(that)元素-处理
var
thisTag:string;
begin
ThisTag:=Parser.CurName;
if ThisTag='botsaid' then thistag:='that';
if Parser.CurAttr.Count<>0 then result :=''
else if ThisTag='that' then
result:=Memory.getVar('that')
else if ThisTag='justbeforethat' then
result:=Memory.getVar('that',1);
SkipElement(parser);
end;
procedure TThatElement.register;
//上次(that)元素-注册
begin
ElementFactory.register('that',Self);
ElementFactory.register('justbeforethat',Self);
ElementFactory.register('botsaid',Self);
end;
function TVersionElement.Process(Match:TMatch;Parser:TXMLParser):string;
//版本(version)元素-处理
begin
result:='Operator Chat v0.2';
SkipElement(Parser);
end;
procedure TVersionElement.register;
//版本(version)元素-注册
begin
ElementFactory.register('version',Self);
ElementFactory.register('getversion',Self);
end;
function TIdElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:='0';
SkipElement(Parser);
end;
procedure TIdElement.register;
begin
ElementFactory.register('id',Self);
ElementFactory.register('get_ip',Self);
end;
function TSizeElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:=inttostr(PatternMatcher._count);
SkipElement(Parser);
end;
procedure TSizeElement.register;
begin
ElementFactory.register('size',Self);
ElementFactory.register('getsize',Self);
end;
function TDateElement.Process(Match:TMatch;Parser:TXMLParser):string;
//日期(date)元素-处理
begin
result:=DatetoStr(now); //转换日期为字符串
skipElement(parser);
end;
procedure TDateElement.register;
//日期(date)元素-注册
begin
ElementFactory.register('date',Self);
end;
function TGossipElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:=ProcessContents(Match,Parser);
WrFile('gossip.log',result);
end;
procedure TGossipElement.register;
begin
ElementFactory.register('gossip',Self);
end;
function TInputElement.Process(Match:TMatch;Parser:TXMLParser):string;
var
thisTag:string;
i:integer;
si:string;
begin
ThisTag:=Parser.CurName;
SkipElement(Parser);
if ThisTag='input' then begin
si:=Parser.CurAttr.Value('index');
if si<>'' then
i:=strtoint(si)-1
else
i:=0;
result:=Memory.getVar('input',i)
end else if ThisTag='justthat' then
result:=Memory.getVar('input',1)
else if ThisTag='beforethat' then
result:=Memory.getVar('input',2);
end;
procedure TInputElement.register;
begin
ElementFactory.register('input',Self);
ElementFactory.register('justthat',Self);
ElementFactory.register('beforethat',Self);
end;
function TSubstElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
if parser.CurPartType=ptEmptyTag then
result:=Match.get(0,1)
else
result:='';
end;
procedure TSubstElement.register;
begin
ElementFactory.register('person',Self);
ElementFactory.register('person2',Self);
ElementFactory.register('gender',Self);
end;
function TJScriptElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:=Parser.CurAttr.Value('alt');
SkipElement(parser);
end;
procedure TJScriptElement.register;
begin
ElementFactory.register('javascript',Self);
end;
function TSystemElement.Process(Match:TMatch;Parser:TXMLParser):string;
begin
result:=Parser.CurAttr.Value('alt');;
if result<>'' then SkipElement(parser);
end;
procedure TSystemElement.register;
begin
ElementFactory.register('system',Self);
end;
function TForgetElement.Process(Match:TMatch;Parser:TXMLParser):string;
//忘记(forget)标签-处理
begin
result:=ProcessContents(Match,Parser);
if result='' then
begin
SkipElement(parser);
Memory.ClearVars;
end
else
Memory.setVar(result,' ');
end;
procedure TForgetElement.register;
//忘记(forget)标签-注册
begin
ElementFactory.register('forget',Self);
end;
begin
//创建所有的元素对象
if not assigned(ElementFactory) then ElementFactory:=TElementFactory.Create;
TBotElement.Create;
TDefaultElement.Create;
TGetElement.Create;
TxStarElement.Create;
TLearnElement.Create;
TSetElement.Create;
TSrElement.Create;
TThinkElement.Create;
TSraiElement.Create;
TRandomElement.Create;
TConditionElement.Create;
TBrElement.Create;
TCaseElement.Create;
TThatElement.Create;
TVersionElement.Create;
TIdElement.Create;
TSizeElement.Create;
TDateElement.Create;
TGossipElement.Create;
TInputElement.Create;
TsubstElement.Create;
TJscriptElement.Create;
TsystemElement.Create;
TForgetElement.Create;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -