/// <summary>
        /// Converts a paragraphes style to css.
        /// </summary>
        /// <param name="s">
        /// The style.
        /// </param>
        /// <returns>
        /// A css string.
        /// </returns>
        private static string ParagraphStyleToCss(ParagraphStyle s)
        {
            var css = new StringBuilder();

            if (s.FontFamily != null)
            {
                css.Append(string.Format("font-family:{0};", s.FontFamily));
            }

            css.Append(string.Format("font-size:{0}pt;", s.FontSize));
            if (s.Bold)
            {
                css.Append(string.Format("font-weight:bold;"));
            }

            return(css.ToString());
        }
        /// <summary>
        /// Converts a paragraphes style to css.
        /// </summary>
        /// <param name="s">
        /// The style.
        /// </param>
        /// <returns>
        /// A css string.
        /// </returns>
        private static string ParagraphStyleToCss(ParagraphStyle s)
        {
            var css = new StringBuilder();
            if (s.FontFamily != null)
            {
                css.Append(string.Format("font-family:{0};", s.FontFamily));
            }

            css.Append(string.Format("font-size:{0}pt;", s.FontSize));
            if (s.Bold)
            {
                css.Append(string.Format("font-weight:bold;"));
            }

            return css.ToString();
        }
        /// <summary>
        /// The create style.
        /// </summary>
        /// <param name="ps">
        /// The ps.
        /// </param>
        /// <param name="styleID">
        /// The style id.
        /// </param>
        /// <param name="styleName">
        /// The style name.
        /// </param>
        /// <param name="basedOnStyleID">
        /// The based on style id.
        /// </param>
        /// <param name="nextStyleID">
        /// The next style id.
        /// </param>
        /// <param name="isDefault">
        /// The is default.
        /// </param>
        /// <param name="isCustomStyle">
        /// The is custom style.
        /// </param>
        /// <returns>
        /// </returns>
        private static Style CreateStyle(
            ParagraphStyle ps,
            string styleID,
            string styleName,
            string basedOnStyleID,
            string nextStyleID,
            bool isDefault = false,
            bool isCustomStyle = true)
        {
            // todo: add font to FontTable?
            var rPr = new StyleRunProperties();

            // http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.color.aspx
            var color = new Color { Val = ps.TextColor.ToString().Trim('#').Substring(2) };
            rPr.Append(color);

            // http://msdn.microsoft.com/en-us/library/cc850848.aspx
            rPr.Append(new RunFonts { Ascii = ps.FontFamily, HighAnsi = ps.FontFamily });
            rPr.Append(new FontSize { Val = new StringValue((ps.FontSize * 2).ToString(CultureInfo.InvariantCulture)) });
            rPr.Append(
                new FontSizeComplexScript
                    {
                       Val = new StringValue((ps.FontSize * 2).ToString(CultureInfo.InvariantCulture))
                    });

            if (ps.Bold)
            {
                rPr.Append(new Bold());
            }

            if (ps.Italic)
            {
                rPr.Append(new Italic());
            }

            var pPr = new StyleParagraphProperties();
            var spacingBetweenLines2 = new SpacingBetweenLines
                {
                    After = string.Format(CultureInfo.InvariantCulture, "{0}", ps.SpacingAfter * 20),
                    Before = string.Format(CultureInfo.InvariantCulture, "{0}", ps.SpacingBefore * 20),
                    Line = string.Format(CultureInfo.InvariantCulture, "{0}", ps.LineSpacing * 240),
                    LineRule = LineSpacingRuleValues.Auto
                };
            var indentation = new Indentation
                {
                    Left = string.Format(CultureInfo.InvariantCulture, "{0}", ps.LeftIndentation * 20),
                    Right = string.Format(CultureInfo.InvariantCulture, "{0}", ps.RightIndentation * 20)
                };
            var contextualSpacing1 = new ContextualSpacing();

            pPr.Append(spacingBetweenLines2);
            pPr.Append(contextualSpacing1);
            pPr.Append(indentation);

            // StyleRunProperties styleRunProperties7 = new StyleRunProperties();
            // RunFonts runFonts8 = new RunFonts() { Ascii = "Verdana", HighAnsi = "Verdana" };
            // Color color7 = new Color() { Val = "000000" };

            // styleRunProperties7.Append(runFonts8);
            // styleRunProperties7.Append(color7);

            // http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.style.aspx
            var style = new Style
                {
                    Default = new OnOffValue(isDefault),
                    CustomStyle = new OnOffValue(isCustomStyle),
                    StyleId = styleID,
                    Type = StyleValues.Paragraph
                };

            style.Append(new Name { Val = styleName });
            if (basedOnStyleID != null)
            {
                style.Append(new BasedOn { Val = basedOnStyleID });
            }

            var rsid = new Rsid();

            // style.Append(rsid);
            var primaryStyle = new PrimaryStyle();
            style.Append(primaryStyle);
            if (nextStyleID != null)
            {
                style.Append(new NextParagraphStyle { Val = nextStyleID });
            }

            style.Append(rPr);
            style.Append(pPr);
            return style;
        }
        /// <summary>
        /// Creates a paragraph.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <param name="style">The style.</param>
        /// <returns>A paragraph.</returns>
        private System.Windows.Documents.Paragraph CreateParagraph(string text, ParagraphStyle style)
        {
            var run = new Run { Text = text };
            if (style != null)
            {
                SetStyle(run, style);
            }

            return new System.Windows.Documents.Paragraph(run);
        }
        /// <summary>
        /// The set style.
        /// </summary>
        /// <param name="run">
        /// The run.
        /// </param>
        /// <param name="s">
        /// The s.
        /// </param>
        private static void SetStyle(TextElement run, ParagraphStyle s)
        {
            run.FontFamily = new FontFamily(s.FontFamily);
            run.FontSize = s.FontSize;
            run.FontWeight = s.Bold ? FontWeights.Bold : FontWeights.Normal;
            FontStyle fontStyle = FontStyles.Normal;
            if (s.Italic)
            {
                fontStyle = FontStyles.Italic;
            }

            run.FontStyle = fontStyle;
        }
 /// <summary>
 /// Sets a paragraph style.
 /// </summary>
 /// <param name="style">The style.</param>
 /// <param name="ps">The ps.</param>
 private static void SetStyle(Style style, ParagraphStyle ps)
 {
     style.Font.Name = ps.FontFamily;
     style.Font.Size = Unit.FromPoint(ps.FontSize);
     style.Font.Bold = ps.Bold;
     style.Font.Italic = ps.Italic;
     style.Font.Color = ToMigraDocColor(ps.TextColor);
     style.ParagraphFormat.PageBreakBefore = ps.PageBreakBefore;
     style.ParagraphFormat.LeftIndent = Unit.FromPoint(ps.LeftIndentation);
     style.ParagraphFormat.RightIndent = Unit.FromPoint(ps.RightIndentation);
     style.ParagraphFormat.LineSpacing = Unit.FromPoint(ps.LineSpacing);
     style.ParagraphFormat.SpaceBefore = Unit.FromPoint(ps.SpacingBefore);
     style.ParagraphFormat.SpaceAfter = Unit.FromPoint(ps.SpacingAfter);
 }