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

📄 umatch.pas

📁 Rose2003自定义插件开发代码示例,delphi版本
💻 PAS
字号:
unit uMatch;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DIPcre;

    function Match(Pattern,S:string;DIPcre:TDIPcre):Boolean;
    function MatchSentence(S:string;var StrList:TstringList):integer;
    function MatchParams(S:string):string;
    function MatchSingleParam(S:string;var StrList:TstringList):integer;
    procedure DivideStr(S:string;divstr:string;var StrList:TstringList);

implementation
const
  //方法识别
  C_FUNCTION = ''
          + ' \ *(class\ +){0,1}\ *                          #Class Tag                  '
    + #10 + ' \ *(function)\ +                               # Function Tag              '
    + #10 + ' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *  # 过程名称 为普通变量   '
    + #10 + ' \ *(\(.*\)){0,1}\ *                                #参数                   '
    + #10 + ' \ *:\ *                                      # : Tag                       '
    + #10 + ' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *  # 返回值类型 为普通变量 '
    + #10 + ' \ *;\ *                                      # ; Tag                       '
    + #10 + ' \ *(?:(override|overload|virtual)\ *;){0,1}\ * #DriverType                 ';

   //过程识别
   C_PROCEDURE = ''
    + #10 +' \ *(class\ +){0,1}\ *                           #Class Tag                 '
    + #10 +' \ *(procedure)\ +                               # Function Tag            '
    + #10 +' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *  # 过程名称 为普通变量  '
    + #10 +' \ *(\(.*\)){0,1}\ *                                #参数                  '
    + #10 +' \ *;\ *                                      # ; Tag                      '
    + #10 +' \ *(?:(override|overload|virtual)\ *;){0,1}\ * #DriverType                ';

   //析构函数
   C_DESTRUCTOR =' \ *(destructor\ +)(Destroy)\ *;\ *(override)\ *;\ * ';

   //构造函数
   C_CONSTRUCTOR = ''
    + #10 +' \ *(constructor\ +)\ *                           #Class Tag   '
    + #10 +' \ *(Create)\ *                               # Function Tag  '
    + #10 +' \ *(\(.*\)){0,1}\ *                                #参数     '
    + #10 +' \ *;\ *                                      # ; Tag         '
    + #10 +' \ *(?:(override|overload|virtual)\ *;){0,1}\ * #DriverType   ';

   // 变量识别
   C_VAR ='((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)';

   //识别单独一个参数*
   C_SINGLE_PARAM = ''
    + #10 +' \ *(var|const|out){0,1}(?: )\ *                    # var,const,out Tag    '
    + #10 +' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数名 为普通变量    '
    + #10 +' \ *:\ *                                            # :tag                '
    + #10 +' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数类型 为普通变量  '
    + #10 +' \ *(?:=\ *                                         # = 默认参数           '
    + #10 +' \ *(?:(\d|[a-z]|[A-Z]|_|\'')*)){0,1}\ *            # 默认参数             ' //有转义字符'
    + #10 +' \ *;{0,1}\ *                                       # ; tag                ';

    //参数串识别
    C_PARAMS = ''
    + #10 +' \ *(var|const|out){0,1}(?: )\ *                     # var,const,out Tag '
    + #10 +' \ *(([a-z]|[A_Z]|_)([a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数名 为普通变量      '
    + #10 +' \ *(:)\ *                                        # :tag                '
    + #10 +' \ *(([a-z]|[A_Z]|_)([a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数类型 为普通变量    '
    + #10 +' \ *((=)\ *                                       # = 默认参数           '
    + #10 +' \ *(\d|[a-z]|[A-Z]|_|\'')*){0,1}\ *             # 默认参数              '
    + #10 +' \ *(\ *;\ *                                    # ; tag                  '
    + #10 +' \ *(var|const|out){0,1}(?: )\ *                # var,const,out Tag '
    + #10 +' \ *(([a-z]|[A_Z]|_)([a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数名 为普通变量      '
    + #10 +' \ *(:)\ *                                        # :tag                '
    + #10 +' \ *(([a-z]|[A_Z]|_)([a-z]|[A_Z]|[0-9]|_)*)\ *  # 参数类型 为普通变量    '
    + #10 +' \ *((=)\ *                                       # = 默认参数           '
    + #10 +' \ *(\d|[a-z]|[A-Z]|_|\'')*){0,1}\ *             # 默认参数              '
    + #10 +' )*                                                                      ';

    //属性识别
    C_ATTRIBUTE = ''
          +' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *             '
    + #10 +' \ *:\ *                                        # :tag        '
    + #10 +' \ *((?:[a-z]|[A_Z]|_)(?:[a-z]|[A_Z]|[0-9]|_)*)\ *             '
    + #10 +' \ *;\ *  # 参数类型 为普通变量                                ';

    C_SENTENCE_TYPE : array[0..4] of string =(C_DESTRUCTOR,C_CONSTRUCTOR,C_FUNCTION,C_PROCEDURE,C_ATTRIBUTE);
    C_SENTENCE_WORD_COUNT : array[0..4] of integer =(3,4,6,5,2);


function MatchSentence(S: string; var StrList: TstringList): integer;
var DIPcre:TDIPcre;
  Len : integer;
  I:integer;
  J:integer;
begin
  DIPcre := TDIPcre.Create(nil);
  try
    result := -1;
    s:=trim(s);
    for  I := 0 to High(C_SENTENCE_TYPE) do
    begin
      if Match(C_SENTENCE_TYPE[I],S,DIPcre) then
      Begin
        StrList.Clear;
        for J := 0 to DIPcre.SubStrCount-1 do
        begin
          StrList.Add(DIPcre.SubStr(J));
        end;
        result := I;
        for j := StrList.Count to C_SENTENCE_WORD_COUNT[I]  do
        begin
          StrList.Add('');
        end;
        result := I;
        break;
      end;
    end;
  finally
    DIPcre.free;
  end;

end;

function Match(Pattern,S: string; DIPcre:TDIPcre): Boolean;
var
  SubjectStringCopy:string;
  c : integer;
  I : integer;
begin
  result := false;
  with DIPcre do
  begin
    DIPcre.CompileOptions :=[coCaseless,coDotAll,coExtended];
    CompileMatchPattern(Pattern);
    SubjectStringCopy:= S;
    SetSubjectStr(SubjectStringCopy);
    Match(0);
    if SubStrCount > 0 then result := true;
  end;
end;
function MatchParams(S:string):string;
var DIPcre:TDIPcre;
begin
  DIPcre := TDIPcre.Create(nil);
  result := '';
  try
    s:=trim(s);
    if Match(C_PARAMS,S,DIPcre) then
    Begin
      result := DIPcre.SubStr(0);
    end;
  finally
    DIPcre.free;
  end;

end;
function MatchSingleParam(S:string;var StrList:TstringList):integer;
var
  DIPcre:TDIPcre;
  Len : integer;
  I,J:integer;
begin
  result := -1;
  DIPcre := TDIPcre.Create(nil);
  try
    s:=trim(s);
    if Match(C_SINGLE_PARAM,S,DIPcre) then
    Begin
      StrList.Clear;
      for I := 0 to DIPcre.SubStrCount-1 do
      begin
        StrList.Add(DIPcre.SubStr(I));
      end;
      for j := StrList.Count to 4  do
      begin
        StrList.Add('');
      end;
      result := 0;
    end;
  finally
    DIPcre.free;
  end;

end;
procedure DivideStr(S:string;divstr:string;var StrList:TstringList);
var
  I:Integer;
  tmpStr:string;
begin
  tmpStr := s;
  StrList.clear;
  while pos(divstr,tmpStr)>0 do
  begin
    StrList.add(copy(tmpstr,1,pos(divstr,tmpStr)-1));
    tmpStr := copy(tmpstr,pos(divstr,tmpStr)+1,length(tmpstr));
  end;
  if length(trim(s))>0 then
    StrList.add(trim(tmpStr));
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -