You've already forked lazarus-ccr
chelper: initial check in
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1270 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
108
components/chelper/codewriter.pas
Normal file
108
components/chelper/codewriter.pas
Normal file
@ -0,0 +1,108 @@
|
||||
unit codewriter;
|
||||
|
||||
{$mode delphi}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils;
|
||||
|
||||
type
|
||||
|
||||
{ TCodeWriter }
|
||||
|
||||
TCodeWriter = class(TObject)
|
||||
private
|
||||
fnewline:Boolean;
|
||||
fText : AnsiString;
|
||||
fIdent : AnsiString;
|
||||
fIdDelta : AnsiString;
|
||||
newline : Boolean;
|
||||
|
||||
fCurLine : AnsiString;
|
||||
fSection : AnsiString;
|
||||
|
||||
fMaxLen : Integer;
|
||||
fCheckLineLen : Boolean;
|
||||
public
|
||||
constructor Create;
|
||||
procedure IncIdent;
|
||||
procedure DecIdent;
|
||||
procedure W(const s: AnsiString='');
|
||||
procedure Wln(const s: AnsiString='');
|
||||
procedure StartNewLine;
|
||||
property Section: AnsiString read fSection write fSection;
|
||||
property Text: AnsiString read fText write fText;
|
||||
property LineStarts: Boolean read fnewline;
|
||||
|
||||
property MaxLineLen: Integer read fMaxLen write fMaxLen;
|
||||
property CheckLineLen: Boolean read fCheckLineLen write fCheckLineLen;
|
||||
end;
|
||||
|
||||
procedure SetPasSection(wr: TCodeWriter; const SectionName: AnsiString; DoIdent: Boolean=true);
|
||||
|
||||
implementation
|
||||
|
||||
procedure SetPasSection(wr: TCodeWriter; const SectionName: AnsiString; DoIdent: Boolean);
|
||||
begin
|
||||
if wr.Section=SectionName then Exit;
|
||||
|
||||
if (wr.Section<>'') and DoIdent then wr.DecIdent;
|
||||
if SectionName<>'' then wr.Wln(SectionName);
|
||||
wr.Section:=SectionName;
|
||||
if (wr.Section<>'') and DoIdent then wr.IncIdent;
|
||||
end;
|
||||
|
||||
{ TCodeWriter }
|
||||
|
||||
constructor TCodeWriter.Create;
|
||||
begin
|
||||
fIdDelta:=' ';
|
||||
newline:=True;
|
||||
fMaxLen:=80;
|
||||
end;
|
||||
|
||||
procedure TCodeWriter.IncIdent;
|
||||
begin
|
||||
fIdent:=fIdent+fIdDelta;
|
||||
end;
|
||||
|
||||
procedure TCodeWriter.DecIdent;
|
||||
begin
|
||||
fIdent:=Copy(fIdent, 1, length(fIdent)-length(fIdDelta));
|
||||
end;
|
||||
|
||||
procedure TCodeWriter.W(const s:String);
|
||||
var
|
||||
AutoBreak: Boolean;
|
||||
begin
|
||||
//todo: check eoln symbols in s
|
||||
if s ='' then Exit;
|
||||
|
||||
AutoBreak:=CheckLineLen and (fCurLine<>'') and ( length(fCurLine+fIdent)+length(s) > fMaxLen);
|
||||
if AutoBreak then begin
|
||||
fText:=fText+LineEnding;
|
||||
fCurLine:='';
|
||||
fText:=fText+fIdent+fIdDelta;
|
||||
end;
|
||||
|
||||
if newline then fText:=fText+fIdent;
|
||||
fText:=fText+s;
|
||||
fCurLine:=fCurLine+s;
|
||||
newline:=False;
|
||||
end;
|
||||
|
||||
procedure TCodeWriter.Wln(const s:String);
|
||||
begin
|
||||
W(s+LineEnding);
|
||||
newline:=True;
|
||||
fCurLine:='';
|
||||
end;
|
||||
|
||||
procedure TCodeWriter.StartNewLine;
|
||||
begin
|
||||
if not newline then Wln;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Reference in New Issue
Block a user