⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uelements.pas

📁 用AIML语言开发的一款中文自动聊天软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      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 + -