You've already forked lazarus-ccr
FPSpreadsheet: Fix detection issues with incorrect html tags
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7952 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -624,6 +624,7 @@ type
|
|||||||
FPointSeparatorSettings: TFormatSettings;
|
FPointSeparatorSettings: TFormatSettings;
|
||||||
FPreserveSpaces: Boolean;
|
FPreserveSpaces: Boolean;
|
||||||
FPrefix: String;
|
FPrefix: String;
|
||||||
|
FHandled: Boolean;
|
||||||
function AddFont(AFont: TsFont): Integer;
|
function AddFont(AFont: TsFont): Integer;
|
||||||
procedure AddRichTextParam(AFont: TsFont; AHyperlinkIndex: Integer = -1);
|
procedure AddRichTextParam(AFont: TsFont; AHyperlinkIndex: Integer = -1);
|
||||||
procedure ProcessFontRestore;
|
procedure ProcessFontRestore;
|
||||||
@ -714,6 +715,7 @@ begin
|
|||||||
FRichTextParams[n].FontIndex := fntIndex;
|
FRichTextParams[n].FontIndex := fntIndex;
|
||||||
FRichTextParams[n].HyperlinkIndex := AHyperlinkIndex;
|
FRichTextParams[n].HyperlinkIndex := AHyperlinkIndex;
|
||||||
end;
|
end;
|
||||||
|
FHandled := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsHTMLAnalyzer.ProcessFontRestore;
|
procedure TsHTMLAnalyzer.ProcessFontRestore;
|
||||||
@ -831,6 +833,7 @@ end;
|
|||||||
|
|
||||||
procedure TsHTMLAnalyzer.TagFoundHandler(NoCaseTag, ActualTag: String);
|
procedure TsHTMLAnalyzer.TagFoundHandler(NoCaseTag, ActualTag: String);
|
||||||
begin
|
begin
|
||||||
|
FHandled := false;
|
||||||
case NoCaseTag[2] of
|
case NoCaseTag[2] of
|
||||||
'B': case NoCaseTag of
|
'B': case NoCaseTag of
|
||||||
'<B>' : begin
|
'<B>' : begin
|
||||||
@ -860,7 +863,7 @@ begin
|
|||||||
FFontStack.Push(AddFont(FCurrFont));
|
FFontStack.Push(AddFont(FCurrFont));
|
||||||
FAttrList.Parse(ActualTag);
|
FAttrList.Parse(ActualTag);
|
||||||
ReadFont(FCurrFont);
|
ReadFont(FCurrFont);
|
||||||
AddRichTextparam(FCurrFont);
|
AddRichTextParam(FCurrFont);
|
||||||
end;
|
end;
|
||||||
'I': case NoCaseTag of
|
'I': case NoCaseTag of
|
||||||
'<I>' : begin
|
'<I>' : begin
|
||||||
@ -912,9 +915,9 @@ begin
|
|||||||
(NoCaseTag = '</SUB>') or (NoCaseTag = '</SUP>') then ProcessFontRestore;
|
(NoCaseTag = '</SUB>') or (NoCaseTag = '</SUP>') then ProcessFontRestore;
|
||||||
'U': if (NoCaseTag = '</U>') then ProcessFontRestore;
|
'U': if (NoCaseTag = '</U>') then ProcessFontRestore;
|
||||||
end;
|
end;
|
||||||
else
|
|
||||||
FPlainText := FPlainText + ActualTag;
|
|
||||||
end;
|
end;
|
||||||
|
if not FHandled then
|
||||||
|
FPlainText := FPlainText + ActualTag;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TsHTMLAnalyzer.TextFoundHandler(AText: String);
|
procedure TsHTMLAnalyzer.TextFoundHandler(AText: String);
|
||||||
@ -947,6 +950,8 @@ end;
|
|||||||
procedure HTMLToRichText(AWorkbook: TsBasicWorkbook; AFont: TsFont;
|
procedure HTMLToRichText(AWorkbook: TsBasicWorkbook; AFont: TsFont;
|
||||||
const AHTMLText: String; out APlainText: String;
|
const AHTMLText: String; out APlainText: String;
|
||||||
out ARichTextParams: TsRichTextParams; APrefix: String = '');
|
out ARichTextParams: TsRichTextParams; APrefix: String = '');
|
||||||
|
const
|
||||||
|
TERMINATION = '<end>';
|
||||||
var
|
var
|
||||||
analyzer: TsHTMLAnalyzer;
|
analyzer: TsHTMLAnalyzer;
|
||||||
j: Integer;
|
j: Integer;
|
||||||
@ -954,12 +959,14 @@ var
|
|||||||
nrtp: Integer;
|
nrtp: Integer;
|
||||||
begin
|
begin
|
||||||
ARichTextParams := nil;
|
ARichTextParams := nil;
|
||||||
analyzer := TsHTMLAnalyzer.Create(AWorkbook as TsWorkbook, AFont, AHTMLText + '<end>');
|
analyzer := TsHTMLAnalyzer.Create(AWorkbook as TsWorkbook, AFont, AHTMLText + TERMINATION);
|
||||||
try
|
try
|
||||||
analyzer.PreserveSpaces := true;
|
analyzer.PreserveSpaces := true;
|
||||||
analyzer.Prefix := APrefix;
|
analyzer.Prefix := APrefix;
|
||||||
analyzer.Exec;
|
analyzer.Exec;
|
||||||
APlainText := analyzer.PlainText;
|
APlainText := analyzer.PlainText;
|
||||||
|
if pos(TERMINATION, APlainText) = Length(APlainText) - Length(TERMINATION) + 1 then
|
||||||
|
Setlength(APlainText, Length(APlainText) - Length(TERMINATION));
|
||||||
|
|
||||||
// HTML text has an error --> take the input text literally
|
// HTML text has an error --> take the input text literally
|
||||||
if (AHtmlText <> '') and (APlainText = '') then
|
if (AHtmlText <> '') and (APlainText = '') then
|
||||||
|
Reference in New Issue
Block a user