瀏覽代碼

Fixes two issues with ingesting a .docx file. First, a tab exists as a child of a tabs element, not an r element (fix in HelperFunctions.cs at line 146). Second, an rFonts element may not have a cs attribute, but instead may have an ascii, eastAsia or hAnsi attribute (fix in Formatting.cs at line 101).

Patch provided by counsellorben
master
MadBoy_cp 11 年之前
父節點
當前提交
9183ccf8d2
共有 2 個文件被更改,包括 33 次插入8 次删除
  1. 30
    6
      DocX/Formatting.cs
  2. 3
    2
      DocX/HelperFunctions.cs

+ 30
- 6
DocX/Formatting.cs 查看文件

@@ -74,12 +74,36 @@ namespace Novacode
{
switch (option.Name.LocalName)
{
case "lang": formatting.Language = new CultureInfo(option.GetAttribute(XName.Get("val", DocX.w.NamespaceName), null) ?? option.GetAttribute(XName.Get("eastAsia", DocX.w.NamespaceName), null) ?? option.GetAttribute(XName.Get("bidi", DocX.w.NamespaceName))); break;
case "spacing": formatting.Spacing = Double.Parse(option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 20.0; break;
case "position": formatting.Position = Int32.Parse(option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 2; break;
case "kern": formatting.Position = Int32.Parse(option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 2; break;
case "w": formatting.PercentageScale = Int32.Parse(option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))); break;
case "rFonts": formatting.FontFamily = new FontFamily(option.GetAttribute(XName.Get("cs", DocX.w.NamespaceName))); break;
case "lang":
formatting.Language = new CultureInfo(
option.GetAttribute(XName.Get("val", DocX.w.NamespaceName), null) ??
option.GetAttribute(XName.Get("eastAsia", DocX.w.NamespaceName), null) ??
option.GetAttribute(XName.Get("bidi", DocX.w.NamespaceName)));
break;
case "spacing":
formatting.Spacing = Double.Parse(
option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 20.0;
break;
case "position":
formatting.Position = Int32.Parse(
option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 2;
break;
case "kern":
formatting.Position = Int32.Parse(
option.GetAttribute(XName.Get("val", DocX.w.NamespaceName))) / 2;
break;
case "w":
formatting.PercentageScale = Int32.Parse(
option.GetAttribute(XName.Get("val", DocX.w.NamespaceName)));
break;
case "rFonts":
formatting.FontFamily =
new FontFamily(
option.GetAttribute(XName.Get("cs", DocX.w.NamespaceName), null) ??
option.GetAttribute(XName.Get("ascii", DocX.w.NamespaceName), null) ??
option.GetAttribute(XName.Get("hAnsi", DocX.w.NamespaceName), null) ??
option.GetAttribute(XName.Get("eastAsia", DocX.w.NamespaceName)));
break;
case "vanish": formatting.hidden = true; break;
case "b": formatting.Bold = true; break;
case "i": formatting.Italic = true; break;

+ 3
- 2
DocX/HelperFunctions.cs 查看文件

@@ -141,8 +141,9 @@ namespace Novacode
if (text == String.Empty)
return null;
// e is a w:t element, it must exist inside a w:r element, lets climb until we find it.
while (!e.Name.Equals(XName.Get("r", DocX.w.NamespaceName)))
// e is a w:t element, it must exist inside a w:r element or a w:tabs, lets climb until we find it.
while (!e.Name.Equals(XName.Get("r", DocX.w.NamespaceName)) &&
!e.Name.Equals(XName.Get("tabs", DocX.w.NamespaceName)))
e = e.Parent;
// e is a w:r element, lets find the rPr element.

Loading…
取消
儲存