Beispiel #1
0
 public OdfContentXmlDocument ReadMainContentXml()
 {
     using (var s = this.OpenEntryToRead(MainContentEntryPath))
     {
         var doc = new OdfContentXmlDocument(s);
         return doc;
     }
 }
Beispiel #2
0
        private static IEnumerable <XmlElement> FindAllRowElements(OdfContentXmlDocument xml)
        {
            var nodeList = xml.GetElementsByTagName(OdfDocument.TableRowElement);

            foreach (XmlElement rowEle in nodeList)
            {
                yield return(rowEle);
            }
        }
Beispiel #3
0
        private static void ProcessTableRows(OdfContentXmlDocument xml)
        {
            var rowElements = FindAllRowElements(xml).ToArray();

            foreach (XmlElement row in rowElements)
            {
                //检测一个行中的 table-cell 是否只包含唯一的 report-directive 元素
                //把其中的 cell 都去掉
                ProcessSingleTableRowElement(row);
            }
        }
Beispiel #4
0
        private static IEnumerable <XmlElement> MatchHrefPlaceholderElements(OdfContentXmlDocument xml)
        {
            var textAnchors = xml.GetElementsByTagName(OdfDocument.TextAnchorElement);

            foreach (XmlElement ta in textAnchors)
            {
                var href = ta.GetAttribute("xlink:href");
                if (href != null && href.Trim(' ', '/').StartsWith(WellknownConstants.DtlProtocolPrefix))
                {
                    yield return(ta);
                }
            }
        }
Beispiel #5
0
        private static IEnumerable <XmlElement> FindAllPlaceholderElements(OdfContentXmlDocument xml)
        {
            var textPlaceholders = xml.GetElementsByTagName(OdfDocument.TextPlaceholderElement);

            foreach (XmlElement tpe in textPlaceholders)
            {
                yield return(tpe);
            }

            foreach (XmlElement ele in MatchHrefPlaceholderElements(xml))
            {
                yield return(ele);
            }
        }
Beispiel #6
0
        private static void ProcessIdentifierTag(OdfContentXmlDocument xml, XmlNode placeholder, string value)
        {
            Debug.Assert(xml != null);
            Debug.Assert(placeholder != null);
            Debug.Assert(!string.IsNullOrEmpty(value));

            var ie = new ReferenceElement(xml, value);

            if (placeholder.Name == OdfDocument.TextPlaceholderElement)
            {
                ProcessPlaceHolderElement(placeholder, ie);
            }
            else
            {
                placeholder.ParentNode.ReplaceChild(ie, placeholder);
            }
        }
Beispiel #7
0
        private static void PreprocessElements(OdfContentXmlDocument xml)
        {
            var placeholders = FindAllPlaceholderElements(xml).ToArray();

            foreach (XmlNode placeholder in placeholders)
            {
                string value = ExtractTemplateExpression(placeholder);
                if (value.StartsWith(WellknownConstants.DtlReferenceChar))
                {
                    ProcessIdentifierTag(xml, placeholder, value.Substring(1));
                }
                else if (value.StartsWith(WellknownConstants.DtlDirectiveChar))
                {
                    var directiveNode = new DirectiveElement(xml, value.Substring(1));
                    directiveNode.ReduceTagByCount(placeholder);
                }
                else
                {
                    throw new SyntaxErrorException($"Syntax error: '{value}'");
                }
            }

            var drawFrameElements = xml.SelectNodes("//" + OdfDocument.DrawFrameElement, xml.NamespaceManager);
            var dtlDrawFrames     = new List <XmlNode>();

            foreach (XmlNode node in drawFrameElements)
            {
                var nameAttr = node.Attributes["draw:name"];
                if (nameAttr != null && !string.IsNullOrWhiteSpace(nameAttr.Value) && nameAttr.Value.Trim(' ').StartsWith(WellknownConstants.DtlReferenceChar))
                {
                    dtlDrawFrames.Add(node);
                }
            }

            foreach (var node in dtlDrawFrames)
            {
                ProcessDrawFrameElement(node, xml.NamespaceManager);
            }
        }
Beispiel #8
0
 public void WriteMainContentXml(OdfContentXmlDocument xml) =>
     this.WriteXmlEntry(this.MainContentEntryPath, xml);