123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639 |
- // Copyright (c) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
- using System;
- using System.IO;
- using System.Linq;
- using System.Xml;
- using System.Xml.Linq;
- using System.Xml.XPath;
- using DocumentFormat.OpenXml.Packaging;
- namespace OpenXmlPowerTools
- {
- public partial class WmlDocument : OpenXmlPowerToolsDocument
- {
- public WmlDocument AddToc(string xPath, string switches, string title, int? rightTabPos)
- {
- return (WmlDocument)ReferenceAdder.AddToc(this, xPath, switches, title, rightTabPos);
- }
- public WmlDocument AddTof(string xPath, string switches, int? rightTabPos)
- {
- return (WmlDocument)ReferenceAdder.AddTof(this, xPath, switches, rightTabPos);
- }
- public WmlDocument AddToa(string xPath, string switches, int? rightTabPos)
- {
- return (WmlDocument)ReferenceAdder.AddToa(this, xPath, switches, rightTabPos);
- }
- }
- public class ReferenceAdder
- {
- public static WmlDocument AddToc(WmlDocument document, string xPath, string switches, string title, int? rightTabPos)
- {
- using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(document))
- {
- using (WordprocessingDocument doc = streamDoc.GetWordprocessingDocument())
- {
- AddToc(doc, xPath, switches, title, rightTabPos);
- }
- return streamDoc.GetModifiedWmlDocument();
- }
- }
- public static void AddToc(WordprocessingDocument doc, string xPath, string switches, string title, int? rightTabPos)
- {
- UpdateFontTablePart(doc);
- UpdateStylesPartForToc(doc);
- UpdateStylesWithEffectsPartForToc(doc);
- if (title == null)
- title = "Contents";
- if (rightTabPos == null)
- rightTabPos = 9350;
- // {0} tocTitle (default = "Contents")
- // {1} rightTabPosition (default = 9350)
- // {2} switches
- String xmlString =
- @"<w:sdt xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:sdtPr>
- <w:docPartObj>
- <w:docPartGallery w:val='Table of Contents'/>
- <w:docPartUnique/>
- </w:docPartObj>
- </w:sdtPr>
- <w:sdtEndPr>
- <w:rPr>
- <w:rFonts w:asciiTheme='minorHAnsi' w:cstheme='minorBidi' w:eastAsiaTheme='minorHAnsi' w:hAnsiTheme='minorHAnsi'/>
- <w:color w:val='auto'/>
- <w:sz w:val='22'/>
- <w:szCs w:val='22'/>
- <w:lang w:eastAsia='en-US'/>
- </w:rPr>
- </w:sdtEndPr>
- <w:sdtContent>
- <w:p>
- <w:pPr>
- <w:pStyle w:val='TOCHeading'/>
- </w:pPr>
- <w:r>
- <w:t>{0}</w:t>
- </w:r>
- </w:p>
- <w:p>
- <w:pPr>
- <w:pStyle w:val='TOC1'/>
- <w:tabs>
- <w:tab w:val='right' w:leader='dot' w:pos='{1}'/>
- </w:tabs>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
- </w:pPr>
- <w:r>
- <w:fldChar w:fldCharType='begin' w:dirty='true'/>
- </w:r>
- <w:r>
- <w:instrText xml:space='preserve'> {2} </w:instrText>
- </w:r>
- <w:r>
- <w:fldChar w:fldCharType='separate'/>
- </w:r>
- </w:p>
- <w:p>
- <w:r>
- <w:rPr>
- <w:b/>
- <w:bCs/>
- <w:noProof/>
- </w:rPr>
- <w:fldChar w:fldCharType='end'/>
- </w:r>
- </w:p>
- </w:sdtContent>
- </w:sdt>";
- XmlReader sdtReader = XmlReader.Create(new StringReader(String.Format(xmlString, title, rightTabPos, switches)));
- XElement sdt = XElement.Load(sdtReader);
- XmlNamespaceManager namespaceManager;
- XDocument mainXDoc = doc.MainDocumentPart.GetXDocument(out namespaceManager);
- namespaceManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
- XElement addBefore = mainXDoc.XPathSelectElement(xPath, namespaceManager);
- if (addBefore == null)
- throw new OpenXmlPowerToolsException("XPath expression did not select an element");
- addBefore.AddBeforeSelf(sdt);
- doc.MainDocumentPart.PutXDocument();
- XDocument settingsXDoc = doc.MainDocumentPart.DocumentSettingsPart.GetXDocument();
- XElement updateFields = settingsXDoc.Descendants(W.updateFields).FirstOrDefault();
- if (updateFields != null)
- updateFields.Attribute(W.val).Value = "true";
- else
- {
- updateFields = new XElement(W.updateFields,
- new XAttribute(W.val, "true"));
- settingsXDoc.Root.Add(updateFields);
- }
- doc.MainDocumentPart.DocumentSettingsPart.PutXDocument();
- }
- public static WmlDocument AddTof(WmlDocument document, string xPath, string switches, int? rightTabPos)
- {
- using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(document))
- {
- using (WordprocessingDocument doc = streamDoc.GetWordprocessingDocument())
- {
- AddTof(doc, xPath, switches, rightTabPos);
- }
- return streamDoc.GetModifiedWmlDocument();
- }
- }
- public static void AddTof(WordprocessingDocument doc, string xPath, string switches, int? rightTabPos)
- {
- UpdateFontTablePart(doc);
- UpdateStylesPartForTof(doc);
- UpdateStylesWithEffectsPartForTof(doc);
- if (rightTabPos == null)
- rightTabPos = 9350;
- // {0} rightTabPosition (default = 9350)
- // {1} switches
- string xmlString =
- @"<w:p xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:pPr>
- <w:pStyle w:val='TableofFigures'/>
- <w:tabs>
- <w:tab w:val='right' w:leader='dot' w:pos='{0}'/>
- </w:tabs>
- <w:rPr>
- <w:noProof/>
- </w:rPr>
- </w:pPr>
- <w:r>
- <w:fldChar w:fldCharType='begin' dirty='true'/>
- </w:r>
- <w:r>
- <w:instrText xml:space='preserve'> {1} </w:instrText>
- </w:r>
- <w:r>
- <w:fldChar w:fldCharType='separate'/>
- </w:r>
- <w:r>
- <w:fldChar w:fldCharType='end'/>
- </w:r>
- </w:p>";
- XDocument mainXDoc = doc.MainDocumentPart.GetXDocument();
- XmlReader paragraphReader = XmlReader.Create(new StringReader(String.Format(xmlString, rightTabPos, switches)));
- XElement paragraph = XElement.Load(paragraphReader);
- XmlNameTable nameTable = paragraphReader.NameTable;
- XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
- namespaceManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
- XElement addBefore = mainXDoc.XPathSelectElement(xPath, namespaceManager);
- if (addBefore == null)
- throw new OpenXmlPowerToolsException("XPath expression did not select an element");
- addBefore.AddBeforeSelf(paragraph);
- doc.MainDocumentPart.PutXDocument();
- XDocument settingsXDoc = doc.MainDocumentPart.DocumentSettingsPart.GetXDocument();
- XElement updateFields = settingsXDoc.Descendants(W.updateFields).FirstOrDefault();
- if (updateFields != null)
- updateFields.Attribute(W.val).Value = "true";
- else
- {
- updateFields = new XElement(W.updateFields,
- new XAttribute(W.val, "true"));
- settingsXDoc.Root.Add(updateFields);
- }
- doc.MainDocumentPart.DocumentSettingsPart.PutXDocument();
- }
- public static WmlDocument AddToa(WmlDocument document, string xPath, string switches, int? rightTabPos)
- {
- using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(document))
- {
- using (WordprocessingDocument doc = streamDoc.GetWordprocessingDocument())
- {
- AddToa(doc, xPath, switches, rightTabPos);
- }
- return streamDoc.GetModifiedWmlDocument();
- }
- }
- public static void AddToa(WordprocessingDocument doc, string xPath, string switches, int? rightTabPos)
- {
- UpdateFontTablePart(doc);
- UpdateStylesPartForToa(doc);
- UpdateStylesWithEffectsPartForToa(doc);
- if (rightTabPos == null)
- rightTabPos = 9350;
- // {0} rightTabPosition (default = 9350)
- // {1} switches
- string xmlString =
- @"<w:p xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:pPr>
- <w:pStyle w:val='TOAHeading'/>
- <w:tabs>
- <w:tab w:val='right'
- w:leader='dot'
- w:pos='{0}'/>
- </w:tabs>
- <w:rPr>
- <w:rFonts w:asciiTheme='minorHAnsi'
- w:eastAsiaTheme='minorEastAsia'
- w:hAnsiTheme='minorHAnsi'
- w:cstheme='minorBidi'/>
- <w:b w:val='0'/>
- <w:bCs w:val='0'/>
- <w:noProof/>
- <w:sz w:val='22'/>
- <w:szCs w:val='22'/>
- </w:rPr>
- </w:pPr>
- <w:r>
- <w:fldChar w:fldCharType='begin'/>
- </w:r>
- <w:r>
- <w:instrText xml:space='preserve'> {1} </w:instrText>
- </w:r>
- <w:r>
- <w:fldChar w:fldCharType='separate'/>
- </w:r>
- <w:r>
- <w:fldChar w:fldCharType='end'/>
- </w:r>
- </w:p>";
- XDocument mainXDoc = doc.MainDocumentPart.GetXDocument();
- XmlReader paragraphReader = XmlReader.Create(new StringReader(String.Format(xmlString, rightTabPos, switches)));
- XElement paragraph = XElement.Load(paragraphReader);
- XmlNameTable nameTable = paragraphReader.NameTable;
- XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);
- namespaceManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
- XElement addBefore = mainXDoc.XPathSelectElement(xPath, namespaceManager);
- if (addBefore == null)
- throw new OpenXmlPowerToolsException("XPath expression did not select an element");
- addBefore.AddBeforeSelf(paragraph);
- doc.MainDocumentPart.PutXDocument();
- XDocument settingsXDoc = doc.MainDocumentPart.DocumentSettingsPart.GetXDocument();
- XElement updateFields = settingsXDoc.Descendants(W.updateFields).FirstOrDefault();
- if (updateFields != null)
- updateFields.Attribute(W.val).Value = "true";
- else
- {
- updateFields = new XElement(W.updateFields,
- new XAttribute(W.val, "true"));
- settingsXDoc.Root.Add(updateFields);
- }
- doc.MainDocumentPart.DocumentSettingsPart.PutXDocument();
- }
- private static void AddElementIfMissing(XDocument partXDoc, XElement existing, string newElement)
- {
- if (existing != null)
- return;
- XElement newXElement = XElement.Parse(newElement);
- newXElement.Attributes().Where(a => a.IsNamespaceDeclaration).Remove();
- partXDoc.Root.Add(newXElement);
- }
- private static void UpdateFontTablePart(WordprocessingDocument doc)
- {
- FontTablePart fontTablePart = doc.MainDocumentPart.FontTablePart;
- if (fontTablePart == null)
- throw new Exception("Todo need to insert font table part");
- XDocument fontTableXDoc = fontTablePart.GetXDocument();
- AddElementIfMissing(fontTableXDoc,
- fontTableXDoc
- .Root
- .Elements(W.font)
- .Where(e => (string)e.Attribute(W.name) == "Tahoma")
- .FirstOrDefault(),
- @"<w:font w:name='Tahoma' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:panose1 w:val='020B0604030504040204'/>
- <w:charset w:val='00'/>
- <w:family w:val='swiss'/>
- <w:pitch w:val='variable'/>
- <w:sig w:usb0='E1002EFF' w:usb1='C000605B' w:usb2='00000029' w:usb3='00000000' w:csb0='000101FF' w:csb1='00000000'/>
- </w:font>");
- fontTablePart.PutXDocument();
- }
- private static void UpdatePartForToc(OpenXmlPart part)
- {
- XDocument xDoc = part.GetXDocument();
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOCHeading")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TOCHeading' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='TOC Heading'/>
- <w:basedOn w:val='Heading1'/>
- <w:next w:val='Normal'/>
- <w:uiPriority w:val='39'/>
- <w:semiHidden/>
- <w:unhideWhenUsed/>
- <w:qFormat/>
- <w:pPr>
- <w:outlineLvl w:val='9'/>
- </w:pPr>
- <w:rPr>
- <w:lang w:eastAsia='ja-JP'/>
- </w:rPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOC1")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TOC1' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='toc 1'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:autoRedefine/>
- <w:uiPriority w:val='39'/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='100'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOC2")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TOC2' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='toc 2'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:autoRedefine/>
- <w:uiPriority w:val='39'/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='100'/>
- <w:ind w:left='220'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOC3")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TOC3' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='toc 3'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:autoRedefine/>
- <w:uiPriority w:val='39'/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='100'/>
- <w:ind w:left='440'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOC4")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TOC4' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='toc 4'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:autoRedefine/>
- <w:uiPriority w:val='39'/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='100'/>
- <w:ind w:left='660'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "character" && (string)e.Attribute(W.styleId) == "Hyperlink")
- .FirstOrDefault(),
- @"<w:style w:type='character' w:styleId='Hyperlink' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='Hyperlink'/>
- <w:basedOn w:val='DefaultParagraphFont'/>
- <w:uiPriority w:val='99'/>
- <w:unhideWhenUsed/>
- <w:rPr>
- <w:color w:val='0000FF' w:themeColor='hyperlink'/>
- <w:u w:val='single'/>
- </w:rPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "BalloonText")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='BalloonText' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='Balloon Text'/>
- <w:basedOn w:val='Normal'/>
- <w:link w:val='BalloonTextChar'/>
- <w:uiPriority w:val='99'/>
- <w:semiHidden/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='0' w:line='240' w:lineRule='auto'/>
- </w:pPr>
- <w:rPr>
- <w:rFonts w:ascii='Tahoma' w:hAnsi='Tahoma' w:cs='Tahoma'/>
- <w:sz w:val='16'/>
- <w:szCs w:val='16'/>
- </w:rPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "character" &&
- (bool?)e.Attribute(W.customStyle) == true && (string)e.Attribute(W.styleId) == "BalloonTextChar")
- .FirstOrDefault(),
- @"<w:style w:type='character' w:customStyle='1' w:styleId='BalloonTextChar' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='Balloon Text Char'/>
- <w:basedOn w:val='DefaultParagraphFont'/>
- <w:link w:val='BalloonText'/>
- <w:uiPriority w:val='99'/>
- <w:semiHidden/>
- <w:rPr>
- <w:rFonts w:ascii='Tahoma' w:hAnsi='Tahoma' w:cs='Tahoma'/>
- <w:sz w:val='16'/>
- <w:szCs w:val='16'/>
- </w:rPr>
- </w:style>");
- part.PutXDocument();
- }
- private static void UpdateStylesPartForToc(WordprocessingDocument doc)
- {
- StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart;
- if (stylesPart == null)
- return;
- UpdatePartForToc(stylesPart);
- }
- private static void UpdateStylesWithEffectsPartForToc(WordprocessingDocument doc)
- {
- StylesWithEffectsPart stylesWithEffectsPart = doc.MainDocumentPart.StylesWithEffectsPart;
- if (stylesWithEffectsPart == null)
- return;
- UpdatePartForToc(stylesWithEffectsPart);
- }
- private static void UpdatePartForTof(OpenXmlPart part)
- {
- XDocument xDoc = part.GetXDocument();
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TableofFigures")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph' w:styleId='TableofFigures' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='table of figures'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:uiPriority w:val='99'/>
- <w:unhideWhenUsed/>
- <w:pPr>
- <w:spacing w:after='0'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "character" && (string)e.Attribute(W.styleId) == "Hyperlink")
- .FirstOrDefault(),
- @"<w:style w:type='character' w:styleId='Hyperlink' xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='Hyperlink'/>
- <w:basedOn w:val='DefaultParagraphFont'/>
- <w:uiPriority w:val='99'/>
- <w:unhideWhenUsed/>
- <w:rPr>
- <w:color w:val='0000FF' w:themeColor='hyperlink'/>
- <w:u w:val='single'/>
- </w:rPr>
- </w:style>");
- part.PutXDocument();
- }
- private static void UpdateStylesPartForTof(WordprocessingDocument doc)
- {
- StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart;
- if (stylesPart == null)
- return;
- UpdatePartForTof(stylesPart);
- }
- private static void UpdateStylesWithEffectsPartForTof(WordprocessingDocument doc)
- {
- StylesWithEffectsPart stylesWithEffectsPart = doc.MainDocumentPart.StylesWithEffectsPart;
- if (stylesWithEffectsPart == null)
- return;
- UpdatePartForTof(stylesWithEffectsPart);
- }
- private static void UpdatePartForToa(OpenXmlPart part)
- {
- XDocument xDoc = part.GetXDocument();
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TableofAuthorities")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph'
- w:styleId='TableofAuthorities'
- xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='table of authorities'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:uiPriority w:val='99'/>
- <w:semiHidden/>
- <w:unhideWhenUsed/>
- <w:rsid w:val='0090569D'/>
- <w:pPr>
- <w:spacing w:after='0'/>
- <w:ind w:left='220'
- w:hanging='220'/>
- </w:pPr>
- </w:style>");
- AddElementIfMissing(
- xDoc,
- xDoc.Root.Elements(W.style)
- .Where(e => (string)e.Attribute(W.type) == "paragraph" && (string)e.Attribute(W.styleId) == "TOAHeading")
- .FirstOrDefault(),
- @"<w:style w:type='paragraph'
- w:styleId='TOAHeading'
- xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main'>
- <w:name w:val='toa heading'/>
- <w:basedOn w:val='Normal'/>
- <w:next w:val='Normal'/>
- <w:uiPriority w:val='99'/>
- <w:semiHidden/>
- <w:unhideWhenUsed/>
- <w:rsid w:val='0090569D'/>
- <w:pPr>
- <w:spacing w:before='120'/>
- </w:pPr>
- <w:rPr>
- <w:rFonts w:asciiTheme='majorHAnsi'
- w:eastAsiaTheme='majorEastAsia'
- w:hAnsiTheme='majorHAnsi'
- w:cstheme='majorBidi'/>
- <w:b/>
- <w:bCs/>
- <w:sz w:val='24'/>
- <w:szCs w:val='24'/>
- </w:rPr>
- </w:style>");
- part.PutXDocument();
- }
- private static void UpdateStylesPartForToa(WordprocessingDocument doc)
- {
- StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart;
- if (stylesPart == null)
- return;
- UpdatePartForToa(stylesPart);
- }
- private static void UpdateStylesWithEffectsPartForToa(WordprocessingDocument doc)
- {
- StylesWithEffectsPart stylesWithEffectsPart = doc.MainDocumentPart.StylesWithEffectsPart;
- if (stylesWithEffectsPart == null)
- return;
- UpdatePartForToa(stylesWithEffectsPart);
- }
- }
- }
|