Skip to content

Commit

Permalink
general/list rendering improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukasz Jaskiewicz committed Feb 10, 2018
1 parent d17f268 commit 3a5e7eb
Show file tree
Hide file tree
Showing 18 changed files with 948 additions and 867 deletions.
2 changes: 1 addition & 1 deletion DDDN.OdtToHtml.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2000
VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7A1FEFF2-978F-4B3F-B581-5C87B5967BCF}"
EndProject
Expand Down
Expand Up @@ -36,7 +36,7 @@ public IActionResult Open(string id)
RootElementId = "article_id", // the id attribute value of the root HTML tag
RootElementClassName = "article_class", // the class attribute value of the root HTML tag
LinkUrlPrefix = $"/{contentSubDirname}", // here you can provide a prefix for all content links to match your environment requirements
DefaultTabSize = "2rem" // the default value for tabs (not tab stops)
DefaultTabSize = "1.5em" // the default value for tabs (not tab stops)
};

// open the ODT document from the file system and call the Convert method to get the HTML/CSS
Expand Down
6 changes: 3 additions & 3 deletions src/DDDN.OdtToHtml/DDDN.OdtToHtml.csproj
Expand Up @@ -10,14 +10,14 @@
<Copyright>Copyright(C) 2017-2018 Lukasz Jaskiewicz</Copyright>
<Authors>Lukasz Jaskiewicz (lukasz@jaskiewicz.de)</Authors>
<Description>Open Document Text Format (ODT) to HTML Converter</Description>
<Version>0.25.1.211</Version>
<AssemblyVersion>0.25.1.211</AssemblyVersion>
<Version>0.25.2.91</Version>
<AssemblyVersion>0.25.2.91</AssemblyVersion>
<NeutralLanguage>en-US</NeutralLanguage>
</PropertyGroup>

<PropertyGroup>
<PackageId>DDDN.OdtToHtml</PackageId>
<PackageVersion>0.25.1.211</PackageVersion>
<PackageVersion>0.25.2.91-alpha</PackageVersion>
<PackageProjectUrl>https://github.com/DDDN/OdtToHtml</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/DDDN/OdtToHtml/blob/dev/LICENSE</PackageLicenseUrl>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
Expand Down
@@ -1,5 +1,5 @@
/*
DDDN.OdtToHtml.OdtStyleAttrCalc
DDDN.OdtToHtml.IOdtHtmlNode
Copyright(C) 2017-2018 Lukasz Jaskiewicz (lukasz@jaskiewicz.de)
- This program is free software; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation; version 2 of the License.
Expand All @@ -11,13 +11,9 @@

namespace DDDN.OdtToHtml
{
public class OdtStyleAttrCalc
public interface IOdtHtmlNode
{
public string Name { get; set; }
public string Value { get; set; }
public int Level { get; set; }
public decimal Number { get; set; }
public string Unit { get; set; }
public decimal LevelDifference { get; set; }
OdtHtmlInfo ParentNode { get; }
IOdtHtmlNode PreviousSibling { get; }
}
}
}
59 changes: 43 additions & 16 deletions src/DDDN.OdtToHtml/ODTConvert.cs
Expand Up @@ -38,8 +38,8 @@ public OdtConvertedData Convert(IOdtFile odtFile, OdtConvertSettings convertSett
Init(odtFile, convertSettings);

var htmlTreeRootTag = GetHtmlTree(Ctx);
var html = OdtInfo.RenderHtml(htmlTreeRootTag);
var css = OdtInfo.RenderCss(htmlTreeRootTag);
var html = OdtHtmlInfo.RenderHtml(htmlTreeRootTag);
var css = OdtHtmlInfo.RenderCss(htmlTreeRootTag);
var firstHeader = GetFirstHeaderHtml(htmlTreeRootTag);
var firstParagraph = GetFirstParagraphHtml(htmlTreeRootTag);
var embedContent = Ctx.EmbedContent.Where(p => !string.IsNullOrWhiteSpace(p.Link));
Expand Down Expand Up @@ -71,6 +71,14 @@ private void Init(IOdtFile odtFile, OdtConvertSettings convertSettings)
var stylesXDoc = OdtFile.GetZipArchiveEntryAsXDocument(embedContent
.FirstOrDefault(p => p.ContentFullName.Equals("styles.xml", StrCompICIC))?.Data);

var version = contentXDoc.Root.Attribute(XName.Get("version", OdtXmlNs.Office))?.Value;

if (version != null
&& String.CompareOrdinal(version, "1.2") < 0)
{
throw new OdtToHtmlException("Only ODT version 1.2 and higher supported.");
}

var documentNodes = contentXDoc.Root
.Elements(XName.Get("body", OdtXmlNs.Office))
.Elements(XName.Get("text", OdtXmlNs.Office))
Expand Down Expand Up @@ -163,49 +171,68 @@ private static (OdtPageInfo pageInfo, OdtPageInfoCalc pageInfoCalc) GetPageInfo(
return (pageInfo, pageInfoCalc);
}

private static string GetFirstHeaderHtml(OdtInfo htmlTreeRootTag)
private static string GetFirstHeaderHtml(OdtHtmlInfo htmlTreeRootTag)
{
var headerNode = htmlTreeRootTag.ChildNodes
.Find(p => p.OdtNode.Equals("h", StrCompICIC));
.OfType<OdtHtmlInfo>()
.FirstOrDefault(p => p.OdtTag.Equals("h", StrCompICIC));

if (headerNode == default(OdtInfo))
if (headerNode == default(OdtHtmlInfo))
{
return null;
}

return OdtInfo.RenderHtml(headerNode);
return OdtHtmlInfo.RenderHtml(headerNode);
}

private static string GetFirstParagraphHtml(OdtInfo htmlTreeRootTag)
private static string GetFirstParagraphHtml(OdtHtmlInfo htmlTreeRootTag)
{
var headerNode = htmlTreeRootTag.ChildNodes
.Find(p => p.OdtNode.Equals("p", StrCompICIC));
.OfType<OdtHtmlInfo>()
.FirstOrDefault(p => p.OdtTag.Equals("p", StrCompICIC));

if (headerNode == default(OdtInfo))
if (headerNode == default(OdtHtmlInfo))
{
return null;
}

return OdtInfo.RenderHtml(headerNode);
return OdtHtmlInfo.RenderHtml(headerNode);
}

private static OdtInfo GetHtmlTree(OdtContext ctx)
private static OdtHtmlInfo GetHtmlTree(OdtContext ctx)
{
var rootNode = CreateHtmlRootNode(ctx.ConvertSettings);
OdtContentHelper.DocumentBodyNodesWalker(ctx, ctx.DocumentNodes, rootNode);
OdtContentHelper.OdtTextNodeChildsWalker(ctx, ctx.DocumentNodes, rootNode);
return rootNode;
}

private static OdtInfo CreateHtmlRootNode(OdtConvertSettings convertSettings)
private static OdtHtmlInfo CreateHtmlRootNode(OdtConvertSettings convertSettings)
{
var rootNode = new OdtInfo("text", convertSettings.RootElementTagName, convertSettings.RootElementClassName, null);
if (convertSettings == null)
{
throw new ArgumentNullException(nameof(convertSettings));
}

if (string.IsNullOrWhiteSpace(convertSettings.RootElementTagName))
{
throw new OdtToHtmlException("RootElementTagName not provided.");
}

var rootElement = new XElement(convertSettings.RootElementTagName);

if (!string.IsNullOrWhiteSpace(convertSettings.RootElementClassName))
{
rootElement.Add(new XAttribute("style-name", convertSettings.RootElementClassName));
}

var rootHtmlInfo = new OdtHtmlInfo(rootElement, null);

if (!string.IsNullOrWhiteSpace(convertSettings.RootElementId))
{
OdtInfo.AddCssAttrValue(rootNode, "id", convertSettings.RootElementId);
rootHtmlInfo.HtmlAttrs.Add("id", new List<string>() { convertSettings.RootElementId });
}

return rootNode;
return rootHtmlInfo;
}
}
}

0 comments on commit 3a5e7eb

Please sign in to comment.