diff --git a/utils/fpdoc/dw_html.pp b/utils/fpdoc/dw_html.pp
index c1bc30a9bb..3d2ed0ba38 100644
--- a/utils/fpdoc/dw_html.pp
+++ b/utils/fpdoc/dw_html.pp
@@ -1193,103 +1193,83 @@ end;
function THTMLWriter.AppendPasSHFragment(Parent: TDOMNode;
const AText: String; AShFlags: Byte): Byte;
+
+
var
- CurParent: TDOMNode;
Line, Last, p: PChar;
IsInSpecial: Boolean;
+ lastwasasm : boolean;
El: TDOMElement;
+
+ Procedure MaybeOutput;
+
+ Var
+ CurParent: TDomNode;
+
+ begin
+ If (Last<>Nil) then
+ begin
+ If (el<>Nil) then
+ CurParent:=El
+ else
+ CurParent:=Parent;
+ AppendText(CurParent,Last);
+ El:=Nil;
+ Last:=Nil;
+ end;
+ end;
+
+ Function NewEl(Const ElType,Attr,AttrVal : String) : TDomElement;
+
+ begin
+ Result:=CreateEl(Parent,ElType);
+ Result[Attr]:=AttrVal;
+ end;
+
+ Function NewSpan(Const AttrVal : String) : TDomElement;
+
+ begin
+ Result:=CreateEl(Parent,'span');
+ Result['class']:=AttrVal;
+ end;
+
begin
GetMem(Line, Length(AText) * 3 + 4);
+ Try
DoPascalHighlighting(AShFlags, PChar(AText), Line);
Result := AShFlags;
-
- CurParent := Parent;
IsInSpecial := False;
- Last := Line;
+ Last := Nil;
p := Line;
+ el:=nil;
while p[0] <> #0 do
begin
if p[0] = LF_ESCAPE then
- begin
+ begin
p[0] := #0;
- AppendText(CurParent, Last);
-
- if IsInSpecial then
- CurParent := Parent;
+ MaybeOutput;
case Ord(p[1]) of
- shDefault:
- IsInSpecial := False;
- shInvalid:
- begin
- El := CreateEl(CurParent, 'font');
- El['color'] := 'red';
- CurParent := El;
- IsInSpecial := True;
- end;
- shSymbol:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'sym';
- CurParent := El;
- IsInSpecial := True;
- end;
- shKeyword:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'kw';
- CurParent := El;
- IsInSpecial := True;
- end;
- shComment:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'cmt';
- CurParent := El;
- IsInSpecial := True;
- end;
- shDirective:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'dir';
- CurParent := El;
- IsInSpecial := True;
- end;
- shNumbers:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'num';
- CurParent := El;
- IsInSpecial := True;
- end;
- shCharacters:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'chr';
- CurParent := El;
- IsInSpecial := True;
- end;
- shStrings:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'str';
- CurParent := El;
- IsInSpecial := True;
- end;
- shAssembler:
- begin
- El := CreateEl(CurParent, 'span');
- El['class'] := 'asm';
- CurParent := El;
- IsInSpecial := True;
- end;
+ shDefault: El:=Nil;
+ shInvalid: El:=newel('font','color','red');
+ shSymbol : El:=newspan('sym');
+ shKeyword: El:=newspan('kw');
+ shComment: El:=newspan('cmt');
+ shDirective: El:=newspan('dir');
+ shNumbers: El:=newspan('num');
+ shCharacters: El:=newspan('chr');
+ shStrings: El:=newspan('str');
+ shAssembler: El:=newspan('asm');
end;
- Last := p + 2;
- end;
+ Inc(P);
+ end
+ else If (Last=Nil) then
+ Last:=P;
Inc(p);
end;
- if Last <> p then
- AppendText(CurParent, Last);
- FreeMem(Line);
+ MaybeOutput;
+ Finally
+ FreeMem(Line);
+ end;
end;
Procedure THTMLWriter.AppendShortDescr(AContext: TPasElement; Parent: TDOMNode; DocNode : TDocNode);