亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? delfor.pas

?? delphi代碼格式化,最新漢化版
?? PAS
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
unit DelFor;
uses SysUtils, OObjects;
interface
type
  TWordType = (wtLineFeed, wtSpaces, wtHalfComment, wtHalfStarComment,
    wtFullComment, wtString, wtErrorString, wtOperator, wtWord, wtNumber,
    wtNothing);
const
  ftNothing = 0;
  ftSpaceBefore = 1;
  ftSpaceAfter = 2;
  ftSpaceBoth = 3;
type
  TReservedType = (rtNothing, rtReserved, rtOper, rtDirective, rtIf, rtDo,
    rtWhile, rtVar, rtProcedure, rtAsm, rtTry, rtExcept, rtEnd, rtBegin, rtIfBegin,
    rtCase, rtOf, rtLineFeed, rtColon, rtSemiColon, rtThen, rtClass, rtProgram,
    rtRepeat, rtUntil, rtRecord, rtPrivate, rtElse, rtInterface, rtImplementation);
  TReservedFormat = (rfLowerCase, rfUpperCase, rfFirstUp, rfUnchanged);
  TReservedRec = record
    ReservedType: TReservedType;
    words: PChar;
  end;
const
  ngroups = 25;
type
  TReservedArray = array[0..ngroups - 1] of TReservedRec;
const
  ReservedArray: TReservedArray = (
    (ReservedType: rtOper; words:
    ',or,shl,xor,is,in,and,div,mod,shr,as,not,to,downto'),
    (ReservedType: rtOf; words: ',of'),
    (ReservedType: rtDirective; words: ',inline,exports,dispinterface'),
    (ReservedType: rtReserved; words: ',set,label,raise,array,file,nil,string,property,out,threadvar,goto,packed,inherited'),
    (ReservedType: rtProgram; words: ',library,uses,initialization,finalization,program,unit'),
    (ReservedType: rtInterface; words: ',interface'),
    (ReservedType: rtImplementation; words: ',implementation'),
    (ReservedType: rtVar; words: ',stringresource,const,var,type'),
    (ReservedType: rtAsm; words: ',asm'),
    (ReservedType: rtPrivate; words: ',private,protected,public,published'),
    (ReservedType: rtExcept; words: ',finally,except'),
    (ReservedType: rtClass; words: ',object,class'),
    (ReservedType: rtThen; words: ',then'),
    (ReservedType: rtBegin; words: ',begin'),
    (ReservedType: rtWhile; words: ',while,with,on,for'),
    (ReservedType: rtCase; words: ',case'),
    (ReservedType: rtProcedure; words: ',function,procedure,constructor,destructor'),
    (ReservedType: rtTry; words: ',try'),
    (ReservedType: rtIf; words: ',if'),
    (ReservedType: rtUntil; words: ',until'),
    (ReservedType: rtDo; words: ',do'),
    (ReservedType: rtRecord; words: ',record'),
    (ReservedType: rtRepeat; words: ',repeat'),
    (ReservedType: rtElse; words: ',else'),
    (ReservedType: rtEnd; words: ',end'));

type

  PPascalWord = ^TPascalWord;
  TPascalWord = object(TObject)
    constructor Create;
    function Expression: PChar; virtual;
    function WordType: TWordType; virtual;
    function space(Before: Boolean): Boolean; virtual;
    function ReservedType: TReservedType; virtual;
    procedure SetSpace(Before, State: Boolean); virtual;
    procedure SetReservedType(aReservedType: TReservedType); virtual;
    function GetEString(Dest: PChar): PChar; virtual;
  end;

  PLineFeed = ^TLineFeed;
  TLineFeed = object(TPascalWord)
    nSpaces: Integer;
    oldnSpaces: Integer;
    constructor Create(aOldnSpaces: Integer);
    procedure SetIndent(n: Integer);
    procedure IncIndent(n: Integer);
    function ReservedType: TReservedType; virtual;
    function GetEString(Dest: PChar): PChar; virtual;
  end;

  PExpression = ^TExpression;
  TExpression = object(TPascalWord)
    FExpression: PChar;
    FWordType: TWordType;
    FFormatType: byte;
    FReservedType: TReservedType;
    constructor Create(aType: TWordType; aExpression: PChar);
    procedure SetExpression(aExpression: PChar);
    procedure SetSpace(Before, State: Boolean); virtual;
    procedure SetReservedType(aReservedType: TReservedType); virtual;
    function space(Before: Boolean): Boolean; virtual;
    function GetEString(Dest: PChar): PChar; virtual;
    function Expression: PChar; virtual;
    function WordType: TWordType; virtual;
    function ReservedType: TReservedType; virtual;
    destructor done; virtual;
  end;

  TPascalParser = object(TObject)
    fileText: TCollection;
    parsedText: TCollection;
    spaceOperators: Boolean;
    spaceColons: Boolean;
    reservedFormat: TReservedFormat;
    changeIndent: Boolean;
    indentBegin: Boolean;
    SpacePerIndent: Integer;
    nIndent: Integer;
    constructor Create;
    procedure LoadFile(AFileName: PChar);
    procedure Parse;
    procedure CalcIndent;
    function ReadHalfComment(Dest, source: PChar; prevType: TWordType): TWordType;
    procedure CheckReserved(PascalWord: PPascalWord);
    function ReadWord(Dest, source: PChar): TWordType;
    function GetString(Dest: PChar; var I: Integer): PChar;
    procedure WriteToFile(AFileName: PChar);
    destructor Destroy;
  end;

var
  Formatter: TPascalParser;
  InFile, outFile: string;
  Dest: array[0..250] of Char;

implementation

constructor TPascalParser.Create;
begin
  spaceOperators := True;
  spaceColons := True;
  reservedFormat := rfLowerCase;
  changeIndent := True;
  indentBegin := False;
  SpacePerIndent := 2;
  fileText {:=TCollection.Create)}.init(500, 500);
end;

procedure TPascalParser.LoadFile(AFileName: PChar);
var
  InFile: Text;
  buff: array[0..400] of Char;
  aWord: array[0..400] of Char;
  WordType: TWordType;
  PrevLine: PLineFeed;
begin
  assign(InFile, AFileName);
  reset(InFile);
  WordType := wtNothing;
  while not eof(InFile) do
  begin
    readln(InFile, buff);
    while buff[0] <> #0 do
    begin
      case WordType of
        wtHalfComment, wtHalfStarComment:
          WordType := ReadHalfComment(aWord, buff, WordType);
      else WordType := ReadWord(aWord, buff);
      end;
      if not (WordType = wtSpaces) then
        fileText.Insert(New(PExpression, Create(WordType, aWord)))
      else if PrevLine^.nSpaces = -1 then
      begin
        PrevLine^.nSpaces := StrLen(aWord);
        PrevLine^.oldnSpaces := StrLen(aWord);
      end;
    end;
    PrevLine := New(PLineFeed, Create(-1));
    fileText.Insert(PrevLine);
  end;
  Close(InFile);
end;

function TPascalParser.ReadWord(Dest, source: PChar): TWordType;
const
  operators = '+-*/=<>[].,():;{}@^';
  allOper = operators + ' {}''';
var
  Result: TWordType;
  P: PChar;
begin
  P := source;
  if P^ = ' ' then
  begin
    Result := wtSpaces;
    while (P^ = ' ') and (P^ <> #0) do inc(P);
    dec(P);
  end
  else if P^ = '{' then
  begin
    Result := wtHalfComment;
    while (P^ <> '}') and (P^ <> #0) do inc(P);
    if (P^ = '}') then Result := wtFullComment;
  end
  else if strLComp(P, '(*', 2) = 0 then
  begin
    Result := wtHalfStarComment;
    while (strLComp(P, '*)', 2) <> 0) and (P^ <> #0) do inc(P);
    if strLComp(P, '*)', 2) = 0 then Result := wtFullComment;
  end
  else if strLComp(P, '//', 2) = 0 then
  begin
    Result := wtFullComment;
    P := StrEnd(P);
  end
  else if P^ = '''' then
  begin
    Result := wtString;
    inc(P);
    while (P^ <> '''') and (P^ <> #0) do inc(P);
    if (P^ = #0) then Result := wtErrorString;
  end
  else if StrScan(operators, P^) <> nil then
  begin
    Result := wtOperator;
    if strLComp(P, '<=', 2) = 0 then inc(P);
    if strLComp(P, '>=', 2) = 0 then inc(P);
    if strLComp(P, '<>', 2) = 0 then inc(P);
    if strLComp(P, ':=', 2) = 0 then inc(P);
    if strLComp(P, '..', 2) = 0 then inc(P);
    if strLComp(P, '(.', 2) = 0 then inc(P);
    if strLComp(P, '.)', 2) = 0 then inc(P);
  end
  else if P^ in ['0'..'9', '$', '#'] then
  begin
    Result := wtNumber;
    while (P^ in ['0'..'9', '.', '$', '#']) and not (strLComp(P, '..', 2) = 0) do
      inc(P);
    if upCase(P^) = 'E' then
      if (P + 1)^ in ['0'..'9', '-'] then
      begin
        inc(P, 2);
        while (P^ in ['0'..'9']) do inc(P);
      end;
    dec(P);
  end
  else
  begin
    Result := wtWord;
    while (StrScan(allOper, P^) = nil) and (P^ <> #0) do
      inc(P);
    dec(P);
  end;
  strLCopy(Dest, source, P - source + 1);
  if (P^ = #0) then
    source^ := #0
  else
  begin
    if ((P + 1)^ = ' ') then inc(P);
    StrCopy(source, P + 1);
  end;
  ReadWord := Result;
end;

function TPascalParser.ReadHalfComment(Dest, source: PChar; prevType: TWordType): TWordType;
var
  P: PChar;
begin
  P := source;
  ReadHalfComment := prevType;
  if prevType = wtHalfComment then
  begin
    while (P^ <> '}') and (P^ <> #0) do inc(P);
    if (P^ = '}') then
    begin
      ReadHalfComment := wtFullComment;
      inc(P);
    end;
  end
  else
  begin
    while (strLComp(P, '*)', 2) <> 0) and (P^ <> #0) do inc(P);
    if strLComp(P, '*)', 2) = 0 then
    begin
      ReadHalfComment := wtFullComment;
      inc(P);
    end;
  end;
  strLCopy(Dest, source, P - source + 1);
  if P^ = #0 then
    source^ := #0
  else
  begin
    if ((P + 1)^ = ' ') then inc(P);
    StrCopy(source, P);
  end;
end;

procedure TPascalParser.CheckReserved(PascalWord: PPascalWord);
var
  P, P1, p2: PChar;
  l, I: Integer;
  buf: array[0..80] of Char;
begin
  PascalWord^.SetReservedType(rtNothing);
  P := strLower(StrCopy(buf, PascalWord^.Expression));
  l := StrLen(P);
  if P <> nil then
    for I := 0 to ngroups - 1 do
      with ReservedArray[I] do
      begin
        P1 := strPos(words, P);
        if P1 <> nil then
        begin
          p2 := P1 + l;
          if (p2^ in [#0, ',']) and ((P1 - 1)^ = ',') then
          begin
            PascalWord^.SetReservedType(ReservedType);
            Exit;
          end;
        end;
      end;
end;

procedure TPascalParser.Parse;
var
  P: PChar;
  PascalWord, next, prev: PPascalWord;
  I: Integer;
begin
  prev := nil;
  with fileText do
    for I := 0 to Count - 1 do
    begin
      PascalWord := PPascalWord(at(I));
      P := PascalWord^.Expression;
      PascalWord^.SetSpace(True, False);
      PascalWord^.SetSpace(False, False);
      if PascalWord^.WordType = wtWord then CheckReserved(PascalWord);
      if StrComp(P, ':') = 0 then PascalWord^.SetReservedType(rtColon);
      if StrComp(P, ';') = 0 then PascalWord^.SetReservedType(rtSemiColon);
      if spaceOperators and (PascalWord^.ReservedType in [rtOper, rtThen, rtOf]) then
      begin
        PascalWord^.SetSpace(True, True);
        PascalWord^.SetSpace(False, True);
      end;
      if (PascalWord^.ReservedType <> rtNothing) then
      begin
        case reservedFormat of
          rfUpperCase: strUpper(P);
          rfLowerCase: strLower(P);
          rfFirstUp:
            begin
              strLower(P);
              P^ := upCase(Char(P^));
            end;
        end;
      end;
      if PascalWord^.ReservedType in [rtDo] then
        PascalWord^.SetSpace(True, True);
      if PascalWord^.ReservedType in [rtIf, rtWhile] then
        PascalWord^.SetSpace(False, True);
  {append space after : , ;}
      if spaceColons and
        ((StrComp(P, ':') = 0) or (StrComp(P, ';') = 0) or
        (StrComp(P, ',') = 0)) then
        PascalWord^.SetSpace(False, True);

  {both sides spaces with = := < > - * + /}
      if spaceOperators and ((StrComp(P, '=') = 0) or (StrComp(P, ':=') = 0) or
        (StrComp(P, '-') = 0) or (StrComp(P, '+') = 0) or (StrComp(P, '/') = 0)
        or (StrComp(P, '*') = 0) or (P^ = '<') or (P^ = '>')) then
      begin
        PascalWord^.SetSpace(False, True);
        PascalWord^.SetSpace(True, True);
      end;

  {delimiter between 2 words (necesary)}
      if (prev <> nil) then
      begin
        if PascalWord^.space(True) and
          prev^.space(False) then prev^.SetSpace(False, False);
        if (prev^.WordType in [wtWord, wtNumber]) and
          (PascalWord^.WordType in [wtWord, wtNumber]) and not
          PascalWord^.space(True) and not prev^.space(False) then
          PascalWord^.SetSpace(True, True);
      end;
      prev := PascalWord;
    end;
  CalcIndent;
end;

procedure TPascalParser.CalcIndent;
type
  TRec = record
    RT: TReservedType;
    nInd: Integer;
  end;
var
  P: PChar;
  PrevLineFeed: PLineFeed;
  I: Integer;
  stack: array[0..100] of TRec;
  stackptr: Integer;
  rtype: TReservedType;
  PasWord: PPascalWord;
  wrapped, WrapIndent: Boolean;
  procIndent: Integer;
  interfacePart: Boolean;
  procedure Push(R: TReservedType; n, ninc: Integer);
  begin
    inc(stackptr);
    with stack[stackptr] do
    begin
      RT := R;
      nInd := n;
      nIndent := n + ninc;
    end;
  end;
  function GetStackTop: TReservedType;
  begin
    if stackptr >= 0 then
      GetStackTop := stack[stackptr].RT
    else
      GetStackTop := rtNothing;
  end;
  function Pop: TReservedType;
  begin
    if stackptr >= 0 then
    begin
      nIndent := stack[stackptr].nInd;
      Pop := stack[stackptr].RT;
      dec(stackptr);
    end
  end;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一二三区不卡| 精品少妇一区二区三区日产乱码| 亚洲国产乱码最新视频 | 日韩精品免费专区| 久久综合久久久久88| 色88888久久久久久影院野外| 美腿丝袜亚洲综合| 一区二区中文字幕在线| 日韩欧美二区三区| 91论坛在线播放| 国产一区二区在线免费观看| 亚洲精品高清在线| 欧美经典一区二区三区| 宅男噜噜噜66一区二区66| www.日本不卡| 国产一区激情在线| 日本美女一区二区三区视频| 亚洲女与黑人做爰| 国产肉丝袜一区二区| 91麻豆精品国产91久久久| 99精品视频一区二区| 国内精品视频666| 午夜精品久久久久| 日韩毛片高清在线播放| 久久久久久久久一| 欧美一区二区视频在线观看| 91精品福利视频| 成人免费av资源| 国产精品一区二区不卡| 久99久精品视频免费观看| 亚洲午夜在线观看视频在线| 亚洲人一二三区| 国产精品丝袜91| 国产日韩欧美精品一区| 精品国产一区二区三区久久久蜜月 | 国产午夜精品一区二区| 日韩一区二区三区免费观看| 欧美日韩国产另类不卡| 欧美日韩中文字幕一区二区| 日本乱人伦aⅴ精品| 色综合婷婷久久| 99精品桃花视频在线观看| 成人午夜电影网站| 高清在线观看日韩| 国产99久久久国产精品潘金网站| 国产乱码精品一品二品| 国产乱人伦精品一区二区在线观看 | 91香蕉视频污| 91麻豆精品在线观看| 99精品久久久久久| 色综合久久中文综合久久牛| 91麻豆精品秘密| 欧美亚洲国产一区在线观看网站| 一本一本久久a久久精品综合麻豆| 成人av先锋影音| 99re这里只有精品视频首页| 91免费版在线| 色老汉一区二区三区| 欧美综合一区二区三区| 欧美嫩在线观看| 在线91免费看| 日韩精品一区二区三区在线观看| 欧美电影免费提供在线观看| 久久精品综合网| 日韩黄色小视频| 人人精品人人爱| 国产一区二区剧情av在线| 福利电影一区二区| 91影视在线播放| 欧美中文字幕一二三区视频| 在线成人av影院| 精品国产一区二区三区四区四| 国产欧美一区二区三区在线老狼| 一区免费观看视频| 亚洲成a天堂v人片| 麻豆精品国产91久久久久久| 国产一区二区三区最好精华液| 国产伦精品一区二区三区免费迷| 成人av第一页| 欧美色窝79yyyycom| 日韩一区二区免费电影| 国产欧美日本一区视频| 夜夜夜精品看看| 麻豆精品久久精品色综合| a级精品国产片在线观看| 欧美最新大片在线看| 精品国产一二三区| 亚洲欧美另类在线| 六月婷婷色综合| 91蜜桃传媒精品久久久一区二区| 欧美人成免费网站| 欧美国产一区视频在线观看| 亚洲国产成人av网| 国产酒店精品激情| 欧美四级电影在线观看| 国产亚洲成年网址在线观看| 亚洲午夜激情网站| 国产成人综合在线| 欧美高清精品3d| 中文字幕一区av| 精品一区二区在线视频| 日本久久一区二区| 久久久精品人体av艺术| 午夜精品福利一区二区蜜股av| 国产电影一区二区三区| 欧美一区二区三区影视| 亚洲免费观看视频| 国产精品996| 日韩一区二区三免费高清| 亚洲精品欧美综合四区| 国产成人亚洲精品青草天美| 4438亚洲最大| 亚洲精品久久久久久国产精华液| 国产一区二区三区免费播放 | 欧美最猛性xxxxx直播| 国产免费观看久久| 久久综合综合久久综合| 欧美日韩国产美| 一区二区三区精品视频| 国产很黄免费观看久久| 欧美一级精品在线| 亚洲成人激情自拍| 91理论电影在线观看| 国产日产亚洲精品系列| 精品一区二区三区欧美| 91麻豆精品国产自产在线观看一区 | 欧美日韩大陆在线| 最新日韩av在线| 国产乱码精品一区二区三区忘忧草 | 蜜桃久久精品一区二区| 欧美区一区二区三区| 一区二区三区精品视频在线| 99精品久久久久久| 亚洲欧洲成人自拍| 成人一区在线看| 久久精品免视看| 国产一区二区三区最好精华液| 欧美mv日韩mv亚洲| 麻豆精品视频在线| 精品国产网站在线观看| 精一区二区三区| 久久香蕉国产线看观看99| 精品一区二区三区免费毛片爱| 欧美电影免费观看高清完整版在| 日产欧产美韩系列久久99| 欧美精品日日鲁夜夜添| 午夜成人免费视频| 亚洲精品一卡二卡| 欧美亚洲国产怡红院影院| 亚洲不卡在线观看| 欧美一区中文字幕| 美女网站一区二区| 亚洲精品一区二区三区福利| 精品一二三四在线| 精品噜噜噜噜久久久久久久久试看| 美女在线视频一区| 精品国产乱码久久久久久图片| 激情综合一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 国产·精品毛片| 18欧美乱大交hd1984| 91色.com| 婷婷夜色潮精品综合在线| 欧美三级视频在线观看| 日本aⅴ亚洲精品中文乱码| 精品美女一区二区三区| 国产高清亚洲一区| 亚洲色大成网站www久久九九| 色丁香久综合在线久综合在线观看| 一区二区三区免费观看| 日韩一区二区三区在线视频| 国产成人精品影院| 亚洲欧美另类小说| 欧美一区二区精品在线| 久草这里只有精品视频| 国产精品久久一级| 欧美写真视频网站| 国内精品久久久久影院薰衣草| 中文字幕免费在线观看视频一区| 日本精品裸体写真集在线观看 | 久久成人综合网| 中文字幕免费在线观看视频一区| 色88888久久久久久影院按摩 | 精品国偷自产国产一区| 成人久久久精品乱码一区二区三区| 一区二区三区四区不卡视频| 日韩欧美一二区| 成人高清伦理免费影院在线观看| 亚洲国产人成综合网站| 久久亚洲欧美国产精品乐播| 色av一区二区| 国产美女在线观看一区| 亚洲最大成人网4388xx| 日韩精品在线网站| 91美女视频网站| 国产毛片精品国产一区二区三区| 尤物av一区二区| 久久久国产一区二区三区四区小说| 91久久精品国产91性色tv| 国产精品 欧美精品|