|
@@ -46,6 +46,7 @@ Type
|
|
FCurElement: TJSElement;
|
|
FCurElement: TJSElement;
|
|
FCurLine: integer;
|
|
FCurLine: integer;
|
|
FCurColumn: integer;
|
|
FCurColumn: integer;
|
|
|
|
+ FLineBreak: string;
|
|
FOnWriting: TTextWriterWriting;
|
|
FOnWriting: TTextWriterWriting;
|
|
protected
|
|
protected
|
|
Function DoWrite(Const S : TJSWriterString) : Integer; virtual; abstract;
|
|
Function DoWrite(Const S : TJSWriterString) : Integer; virtual; abstract;
|
|
@@ -70,6 +71,7 @@ Type
|
|
Property CurColumn: integer read FCurColumn write FCurColumn;// char index, not codepoint
|
|
Property CurColumn: integer read FCurColumn write FCurColumn;// char index, not codepoint
|
|
Property CurElement: TJSElement read FCurElement write SetCurElement;
|
|
Property CurElement: TJSElement read FCurElement write SetCurElement;
|
|
Property OnWriting: TTextWriterWriting read FOnWriting write FOnWriting;
|
|
Property OnWriting: TTextWriterWriting read FOnWriting write FOnWriting;
|
|
|
|
+ Property LineBreak: string read FLineBreak write FLineBreak;
|
|
end;
|
|
end;
|
|
|
|
|
|
{$ifdef HasFileWriter}
|
|
{$ifdef HasFileWriter}
|
|
@@ -652,6 +654,15 @@ const
|
|
p:=h;
|
|
p:=h;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ function SkipToNextLineEnd(const S: TJSString; p: integer): integer;
|
|
|
|
+ var
|
|
|
|
+ l: SizeInt;
|
|
|
|
+ begin
|
|
|
|
+ l:=length(S);
|
|
|
|
+ while (p<=l) and not (S[p] in [#10,#13]) do inc(p);
|
|
|
|
+ Result:=p;
|
|
|
|
+ end;
|
|
|
|
+
|
|
function SkipToNextLineStart(const S: TJSString; p: integer): integer;
|
|
function SkipToNextLineStart(const S: TJSString; p: integer): integer;
|
|
var
|
|
var
|
|
l: Integer;
|
|
l: Integer;
|
|
@@ -711,9 +722,11 @@ begin
|
|
GetLineIndent(JS,p); // the first line is already indented, skip
|
|
GetLineIndent(JS,p); // the first line is already indented, skip
|
|
repeat
|
|
repeat
|
|
StartP:=p;
|
|
StartP:=p;
|
|
- p:=SkipToNextLineStart(JS,StartP);
|
|
|
|
|
|
+ p:=SkipToNextLineEnd(JS,StartP);
|
|
Write(copy(JS,StartP,p-StartP));
|
|
Write(copy(JS,StartP,p-StartP));
|
|
if p>length(JS) then break;
|
|
if p>length(JS) then break;
|
|
|
|
+ Write(sLineBreak);
|
|
|
|
+ p:=SkipToNextLineStart(JS,p);
|
|
CurLineIndent:=GetLineIndent(JS,p);
|
|
CurLineIndent:=GetLineIndent(JS,p);
|
|
Write(StringOfChar(FIndentChar,FCurIndent+CurLineIndent-MinIndent));
|
|
Write(StringOfChar(FIndentChar,FCurIndent+CurLineIndent-MinIndent));
|
|
until false;
|
|
until false;
|
|
@@ -2017,6 +2030,7 @@ constructor TTextWriter.Create;
|
|
begin
|
|
begin
|
|
FCurLine:=1;
|
|
FCurLine:=1;
|
|
FCurColumn:=1;
|
|
FCurColumn:=1;
|
|
|
|
+ FLineBreak:=sLineBreak;
|
|
end;
|
|
end;
|
|
|
|
|
|
{$ifdef FPC_HAS_CPSTRING}
|
|
{$ifdef FPC_HAS_CPSTRING}
|
|
@@ -2085,7 +2099,7 @@ end;
|
|
|
|
|
|
function TTextWriter.WriteLn(const S: TJSWriterString): Integer;
|
|
function TTextWriter.WriteLn(const S: TJSWriterString): Integer;
|
|
begin
|
|
begin
|
|
- Result:=Write(S)+Write(sLineBreak);
|
|
|
|
|
|
+ Result:=Write(S)+Write(LineBreak);
|
|
end;
|
|
end;
|
|
|
|
|
|
function TTextWriter.Write(const Fmt: TJSWriterString;
|
|
function TTextWriter.Write(const Fmt: TJSWriterString;
|