All pastes #205123 Raw Edit

Untitled

public text v1 · immutable
#205123 ·published 2006-10-16 15:08 UTC
rendered paste body
procedure TPreprocessor.ReplaceTokens(var Text:PChar; Define:Boolean);
var TokenStart, DefLastCopy:PChar;
    TokenLen:Cardinal;


    procedure DefCopy;
    var Len, CopyLen:Integer;
    begin
            Len := Length(DefineText);
            CopyLen := Cardinal(Text)-Cardinal(DefLastCopy);
            Output := Output +'cpy:' + IntToStr(CopyLen);
            if CopyLen = 0 then Exit;
            SetLength(DefineText, Len+CopyLen);
            StrLCopy(PChar(Integer(PChar(DefineText))+Len), DefLastCopy, CopyLen);
            Inc(DefLastCopy, CopyLen);   
    end;


begin
  DefLastCopy := Text;
  while not (Text^ in [#0,#10,#13]) do
   begin
     TokenStart := Text;
     TokenLen := 0;
     while Text^ in ['A'..'Z', 'a'..'z', '0'..'9'] do
      begin
        Inc(TokenLen);
        Inc(Text);
      end;
     if TokenLen > 0 then
      begin
       Text := TokenStart;
       TokenStart := CheckToken(TokenLen, TokenStart);

       if TokenStart <> nil then
        begin
          if Define then
           begin
            DefCopy;
            DefineText := DefineText + TokenStart;
           end
          else
           begin
           StrCopy;
           Output := Output + TokenStart;
           end;
          FreeMem(TokenStart);
        end
        else
        Inc(Text, TokenLen);

      end;
     Inc(Text);
   end;
   Dec(Text);

   if Define then
   DefCopy
   else
   StrCopy;

   Inc(Text);
end;