Browse Source

fcl-js: added TTextWriter.LineBreak

git-svn-id: trunk@47741 -
Mattias Gaertner 4 years ago
parent
commit
2df2986a4b
1 changed files with 16 additions and 2 deletions
  1. 16 2
      packages/fcl-js/src/jswriter.pp

+ 16 - 2
packages/fcl-js/src/jswriter.pp

@@ -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;