fpvectorial-odt: Advances text document support

git-svn-id: trunk@42368 -
This commit is contained in:
sekelsenmat 2013-08-08 10:18:35 +00:00
parent 6d2ad4be5c
commit 7c47abc6d7
3 changed files with 247 additions and 105 deletions

View File

@ -24,7 +24,7 @@ begin
// A4 -> 210mm x 297mm
Vec.Width := 210;
Vec.Height := 297;
Vec.AddStandardTextDocumentStyles();
Vec.AddStandardODTTextDocumentStyles();
// First page sequence
Page := Vec.AddTextPageSequence();

View File

@ -136,14 +136,23 @@ type
);
TvSetPenBrushAndFontElements = set of TvSetPenBrushAndFontElement;
TvStyleKind = (vskTextBody, vskHeading);
{ TvStyle }
TvStyle = class
Name: string;
Parent: TvStyle; // Can be nil
Kind: TvStyleKind;
//
Pen: TvPen;
Brush: TvBrush;
Font: TvFont;
SetElements: TvSetPenBrushAndFontElements;
//
MarginTop, MarginBottom, MarginLeft, MarginRight: Double; // in mm
//
function GetKind: TvStyleKind; // takes care of parenting
end;
{ Coordinates and polyline segments }
@ -788,7 +797,7 @@ type
public
Width, Height: Double;
AutoExpand: TvRichTextAutoExpand;
Style: string;
Style: TvStyle;
constructor Create; override;
destructor Destroy; override;
function AddText: TvText;
@ -843,9 +852,10 @@ type
function AddTextPageSequence(): TvTextPageSequence;
{ Style methods }
function AddStyle(): TvStyle;
procedure AddStandardTextDocumentStyles;
procedure AddStandardODTTextDocumentStyles;
function GetStyleCount: Integer;
function GetStyle(AIndex: Integer): TvStyle;
function FindStyleIndex(AStyle: TvStyle): Integer;
{ Data removing methods }
procedure Clear; virtual;
{ Debug methods }
@ -1107,6 +1117,14 @@ begin
Result.Z := 0;
end;
{ TvStyle }
function TvStyle.GetKind: TvStyleKind;
begin
if Parent = nil then Result := Kind
else Result := Parent.GetKind();
end;
{ T2DEllipticalArcSegment }
function T2DEllipticalArcSegment.AlignedEllipseCenterEquationT1(
@ -5103,36 +5121,87 @@ begin
FStyles.Add(Result);
end;
procedure TvVectorialDocument.AddStandardTextDocumentStyles;
procedure TvVectorialDocument.AddStandardODTTextDocumentStyles;
var
lCurStyle: TvStyle;
lTextBody, lBaseHeading, lCurStyle: TvStyle;
begin
lCurStyle := AddStyle();
lCurStyle.Name := 'Text Body';
lCurStyle.Font.Size := 12;
lCurStyle.Font.Name := 'Times New Roman';
lCurStyle.SetElements := [spbfFontSize, spbfFontName];
lCurStyle.MarginTop := 0;
lCurStyle.MarginBottom := 2.12;
//<style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
// <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" />
//</style:style>
lTextBody := AddStyle();
lTextBody.Name := 'Text Body';
lTextBody.Kind := vskTextBody;
lTextBody.Font.Size := 12;
lTextBody.Font.Name := 'Times New Roman';
lTextBody.SetElements := [spbfFontSize, spbfFontName];
lTextBody.MarginTop := 0;
lTextBody.MarginBottom := 2.12;
// Headings
// <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
// <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always" />
// <style:text-properties style:font-name="Arial" fo:font-size="14pt" style:font-name-asian="Microsoft YaHei" style:font-size-asian="14pt" style:font-name-complex="Mangal" style:font-size-complex="14pt" />
// </style:style>
lBaseHeading := AddStyle();
lBaseHeading.Name := 'Text Body';
lBaseHeading.Kind := vskHeading;
lBaseHeading.Font.Size := 14;
lBaseHeading.Font.Name := 'Arial';
lBaseHeading.SetElements := [spbfFontSize, spbfFontName];
lBaseHeading.MarginTop := 4.23;
lBaseHeading.MarginBottom := 2.12;
//<style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="1" style:class="text">
// <style:text-properties fo:font-size="115%" fo:font-weight="bold" style:font-size-asian="115%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold" />
//</style:style>
lCurStyle := AddStyle();
lCurStyle.Name := 'Heading 1';
lCurStyle.Font.Size := 16;
lCurStyle.Font.Name := 'Arial';
lCurStyle.Parent := lBaseHeading;
lCurStyle.Font.Size := Round(1.15 * lBaseHeading.Font.Size);
lCurStyle.Font.Bold := True;
lCurStyle.SetElements := [spbfFontSize, spbfFontName, spbfFontBold, spbfFontItalic];
lCurStyle.MarginTop := 4.23;
lCurStyle.MarginBottom := 2.12;
lCurStyle.SetElements := [spbfFontSize, spbfFontBold];
//<style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="2" style:class="text">
// <style:text-properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="14pt" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-style-complex="italic" style:font-weight-complex="bold" />
//</style:style>
lCurStyle := AddStyle();
lCurStyle.Name := 'Heading 2';
lCurStyle.Parent := lBaseHeading;
lCurStyle.Font.Size := 14;
lCurStyle.Font.Name := 'Arial';
lCurStyle.Font.Bold := True;
lCurStyle.Font.Italic := True;
lCurStyle.SetElements := [spbfFontSize, spbfFontName, spbfFontBold, spbfFontItalic];
lCurStyle.MarginTop := 4.23;
lCurStyle.MarginBottom := 2.12;
lCurStyle.SetElements := [spbfFontSize, spbfFontBold, spbfFontItalic];
//<style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="3" style:class="text">
// <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold" />
//</style:style>
lCurStyle := AddStyle();
lCurStyle.Name := 'Heading 3';
lCurStyle.Parent := lBaseHeading;
lCurStyle.Font.Size := 14;
lCurStyle.Font.Bold := True;
lCurStyle.SetElements := [spbfFontSize, spbfFontName, spbfFontBold];
{
<style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
<style:text-properties style:font-size-asian="12pt" style:font-name-complex="Mangal1" />
</style:style>
<style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
<style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0" />
<style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Mangal1" style:font-size-complex="12pt" style:font-style-complex="italic" />
</style:style>
<style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
<style:paragraph-properties text:number-lines="false" text:line-number="0" />
<style:text-properties style:font-size-asian="12pt" style:font-name-complex="Mangal1" />
</style:style>
<style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
<style:text-properties fo:color="#000080" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none" />
</style:style>
<style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
<style:text-properties style:font-name="OpenSymbol" style:font-name-asian="OpenSymbol" style:font-name-complex="OpenSymbol" />
</style:style>
}
end;
function TvVectorialDocument.GetStyleCount: Integer;
@ -5145,6 +5214,15 @@ begin
Result := TvStyle(FStyles.Items[AIndex]);
end;
function TvVectorialDocument.FindStyleIndex(AStyle: TvStyle): Integer;
var
i: Integer;
begin
Result := -1;
for i := 0 to GetStyleCount()-1 do
if GetStyle(i) = AStyle then Exit(i);
end;
{@@
Clears all data in the document
}

View File

@ -63,7 +63,7 @@ type
FMeta, FSettings, FStyles, FContent, FMimetype: string;
FMetaInfManifest: string;
// helper routines
function StyleNameToODTStyleName(AData: TvVectorialDocument; AStyleIndex: Integer; AToContentAutoStyle: Boolean): string;
function StyleNameToODTStyleName(AData: TvVectorialDocument; AStyleIndex: Integer; AToContentAutoStyle: Boolean = False): string;
function FloatToODTText(AFloat: Double): string;
// Routines to write those files
procedure WriteMimetype;
@ -73,6 +73,8 @@ type
procedure WriteStyles(AData: TvVectorialDocument);
procedure WriteDocument(AData: TvVectorialDocument);
procedure WritePage(ACurPage: TvTextPageSequence);
//
procedure WriteParagraph(AEntity: TvRichText; ACurPage: TvTextPageSequence);
// Routines to write parts of those files
function WriteStylesXMLAsString: string;
//
@ -336,7 +338,7 @@ procedure TvODTVectorialWriter.WriteStyles(AData: TvVectorialDocument);
var
i: Integer;
CurStyle: TvStyle;
lTextPropsStr, lParagraphPropsStr, lCurStyleTmpStr: string;
lTextPropsStr, lParagraphPropsStr, lCurStyleTmpStr, CurStyleParent: string;
begin
FStyles :=
XML_HEADER + LineEnding +
@ -439,6 +441,9 @@ begin
lParagraphPropsStr := '';
CurStyle := AData.GetStyle(i);
if CurStyle.Parent = nil then CurStyleParent := 'Standard'
else CurStyleParent := StyleNameToODTStyleName(AData, AData.FindStyleIndex(CurStyle.Parent), False);
if spbfFontSize in CurStyle.SetElements then
begin
lTextPropsStr := lTextPropsStr + ' fo:font-size="'+IntToStr(CurStyle.Font.Size)+'pt" ';
@ -465,7 +470,7 @@ begin
end;
lCurStyleTmpStr := // tmp string to help see the text in the debugger
' <style:style style:name="'+StyleNameToODTStyleName(AData, i, False)+'" style:display-name="'+ CurStyle.Name +'" style:family="paragraph" style:parent-style-name="Standard" style:class="text">' + LineEnding +
' <style:style style:name="'+StyleNameToODTStyleName(AData, i, False)+'" style:display-name="'+ CurStyle.Name +'" style:family="paragraph" style:parent-style-name="'+CurStyleParent+'" style:class="text">' + LineEnding +
' <style:paragraph-properties fo:margin-top="'+FloatToODTText(CurStyle.MarginTop)+'mm" fo:margin-bottom="'+FloatToODTText(CurStyle.MarginTop)+'mm" style:contextual-spacing="false" />' + LineEnding +
' <style:text-properties '+lTextPropsStr+' />' + LineEnding +
' </style:style>' + LineEnding;
@ -499,82 +504,98 @@ begin
<style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
<style:text-properties fo:color="#000080" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none" />
</style:style>
<style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
<style:text-properties style:font-name="OpenSymbol" style:font-name-asian="OpenSymbol" style:font-name-complex="OpenSymbol" />
</style:style>
}
end;
{
<style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
<style:text-properties style:font-name="OpenSymbol" style:font-name-asian="OpenSymbol" style:font-name-complex="OpenSymbol" />
</style:style>
<text:outline-style style:name="Outline">
<text:outline-level-style text:level="1" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.762cm" fo:text-indent="-0.762cm" fo:margin-left="0.762cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="2" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.016cm" fo:text-indent="-1.016cm" fo:margin-left="1.016cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="3" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-1.27cm" fo:margin-left="1.27cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="4" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.524cm" fo:text-indent="-1.524cm" fo:margin-left="1.524cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="5" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.778cm" fo:text-indent="-1.778cm" fo:margin-left="1.778cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="6" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.032cm" fo:text-indent="-2.032cm" fo:margin-left="2.032cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="7" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.286cm" fo:text-indent="-2.286cm" fo:margin-left="2.286cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="8" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.54cm" fo:text-indent="-2.54cm" fo:margin-left="2.54cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="9" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.794cm" fo:text-indent="-2.794cm" fo:margin-left="2.794cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="10" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.048cm" fo:text-indent="-3.048cm" fo:margin-left="3.048cm" />
</style:list-level-properties>
</text:outline-level-style>
</text:outline-style>
<text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document" />
<text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0" />
<text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5" />
</office:styles>
<office:automatic-styles>
<style:page-layout style:name="Mpm1">
<style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
<style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000" />
</style:page-layout-properties>
<style:header-style />
<style:footer-style />
</style:page-layout>
</office:automatic-styles>
<office:master-styles>
<style:master-page style:name="Standard" style:page-layout-name="Mpm1" />
</office:master-styles>
}
<text:outline-style style:name="Outline">
<text:outline-level-style text:level="1" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="0.762cm" fo:text-indent="-0.762cm" fo:margin-left="0.762cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="2" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.016cm" fo:text-indent="-1.016cm" fo:margin-left="1.016cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="3" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-1.27cm" fo:margin-left="1.27cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="4" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.524cm" fo:text-indent="-1.524cm" fo:margin-left="1.524cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="5" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.778cm" fo:text-indent="-1.778cm" fo:margin-left="1.778cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="6" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.032cm" fo:text-indent="-2.032cm" fo:margin-left="2.032cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="7" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.286cm" fo:text-indent="-2.286cm" fo:margin-left="2.286cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="8" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.54cm" fo:text-indent="-2.54cm" fo:margin-left="2.54cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="9" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.794cm" fo:text-indent="-2.794cm" fo:margin-left="2.794cm" />
</style:list-level-properties>
</text:outline-level-style>
<text:outline-level-style text:level="10" style:num-format="">
<style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
<style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.048cm" fo:text-indent="-3.048cm" fo:margin-left="3.048cm" />
</style:list-level-properties>
</text:outline-level-style>
</text:outline-style>
}
FStyles := FStyles +
' <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document" />' + LineEnding;
FStyles := FStyles +
' <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0" />' + LineEnding;
FStyles := FStyles +
' <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5" />' + LineEnding;
FStyles := FStyles +
'</office:styles>' + LineEnding;
FStyles := FStyles +
'<office:automatic-styles>' + LineEnding;
FStyles := FStyles +
' <style:page-layout style:name="Mpm1">' + LineEnding;
FStyles := FStyles +
' <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">' + LineEnding;
FStyles := FStyles +
' <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000" />' + LineEnding;
FStyles := FStyles +
' </style:page-layout-properties>' + LineEnding;
FStyles := FStyles +
' <style:header-style />' + LineEnding;
FStyles := FStyles +
' <style:footer-style />' + LineEnding;
FStyles := FStyles +
' </style:page-layout>' + LineEnding;
FStyles := FStyles +
'</office:automatic-styles>' + LineEnding;
FStyles := FStyles +
'<office:master-styles>' + LineEnding;
FStyles := FStyles +
' <style:master-page style:name="Standard" style:page-layout-name="Mpm1" />' + LineEnding;
FStyles := FStyles +
'</office:master-styles>' + LineEnding;
FStyles := FStyles +
'</office:document-styles>';
end;
@ -731,17 +752,60 @@ begin
end;
procedure TvODTVectorialWriter.WritePage(ACurPage: TvTextPageSequence);
var
i: Integer;
lCurEntity: TvEntity;
begin
FContent := FContent +
' <text:sequence-decls>' + LineEnding;
FContent := FContent +
' <text:sequence-decl text:display-outline-level="0" text:name="Illustration" />' + LineEnding;
FContent := FContent +
' <text:sequence-decl text:display-outline-level="0" text:name="Table" />' + LineEnding;
FContent := FContent +
' <text:sequence-decl text:display-outline-level="0" text:name="Text" />' + LineEnding;
FContent := FContent +
' <text:sequence-decl text:display-outline-level="0" text:name="Drawing" />' + LineEnding;
FContent := FContent +
' </text:sequence-decls>' + LineEnding;
for i := 0 to ACurPage.GetEntitiesCount()-1 do
begin
lCurEntity := ACurPage.GetEntity(i);
if not (lCurEntity is TvRichText) then Continue;
WriteParagraph(TvRichText(lCurEntity), ACurPage);
end;
end;
procedure TvODTVectorialWriter.WriteParagraph(AEntity: TvRichText;
ACurPage: TvTextPageSequence);
var
EntityKindName, AEntityStyleName: string;
begin
if AEntity.Style = nil then
begin
EntityKindName := 'p';
AEntityStyleName := 'Standard';
end
else
begin
case AEntity.Style.GetKind() of
vskHeading: EntityKindName := 'h';
else // vskTextBody;
EntityKindName := 'p';
end;
AEntityStyleName := AEntity.Style.Name;
end;
FContent := FContent +
' <text:'+EntityKindName+' text:style-name="'+AEntityStyleName+'" >' +
' ' +
'</text:'+EntityKindName+'>' + LineEnding;
{
<text:sequence-decls>
<text:sequence-decl text:display-outline-level="0" text:name="Illustration" />
<text:sequence-decl text:display-outline-level="0" text:name="Table" />
<text:sequence-decl text:display-outline-level="0" text:name="Text" />
<text:sequence-decl text:display-outline-level="0" text:name="Drawing" />
</text:sequence-decls>
}
{
<text:h text:style-name="P2" text:outline-level="1">Lazarus</text:h>
<text:h text:style-name="P2" text:outline-level="1">Laza<text:span text:style-name="T1">ru</text:span>s</text:h>
<text:p text:style-name="P5">Lazarus is a free and open source development tool for the Free Pascal compiler, which is also free and open source.</text:p>
<text:h text:style-name="P1" text:outline-level="2">Overview</text:h>
<text:p text:style-name="P3">Lazarus is a free cross-platform visual integrated development environment (IDE) for rapid application development (RAD) using the Free Pascal compiler supported dialects of Object Pascal. Developers use Lazarus to create native code console and graphical user interface (GUI) applications for the desktop along with mobile devices, web applications, web services, and visual components and function libraries (.so, .dll, etc) for use by other programs for any platform the Free Pascal compiler supports( Mac, Unix, Linux, Windows, etc).</text:p>