예제 #1
0
        public override void RtfText(string text)
        {
            bool isParagraphNumber = false;

            if (Stack.IsParagraphNumberMode(ParagraphNumberEnum.ListText))
            {
                isParagraphNumber = text.IndexOf(".") > 0;
                if (isParagraphNumber)
                {
                    CurrentParagraph = new Paragraph(text);
                    Doc.AddParagraph(CurrentParagraph);
                    EnclosingParagraphId = null;
                }
            }

            if (!isParagraphNumber)
            {
                if (Stack.IsParagraphNumberMode(ParagraphNumberEnum.PnText))
                {
                    text = text.Trim();

                    // This paragraph is a continuation of the preceding one.
                    if (CurrentParagraph != null)
                    {
                        if (text.CompareTo("-") == 0)
                        {
                            // Add dash separated list in the same paragraph
                            // because there is no way to uniquely identify
                            // each element
                            addTextToCurrentParagraph(text);
                        }
                        else
                        {
                            if (EnclosingParagraphId == null)
                            {
                                EnclosingParagraphId = CurrentParagraph.Id;
                            }

                            // Create the paragraph number
                            string id = EnclosingParagraphId + "." + text;
                            if (id.EndsWith(")"))
                            {
                                id = id.Substring(0, id.Length - 1);
                            }

                            CurrentParagraph = new Paragraph(id);
                            Doc.AddParagraph(CurrentParagraph);
                        }
                    }
                }
                else
                {
                    addTextToCurrentParagraph(text);
                }
            }
        }
예제 #2
0
 /// <summary>
 ///     Paragraph has been moved
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsMoved(Paragraph p)
 {
     return p.State == Paragraph.ParagraphState.Moved && p.Text.Length > 0;
 }
예제 #3
0
        public override void RtfKeyword(string key, bool hasParameter, int parameter)
        {
            // Try to recognise a paragraph number \listtext\...
            if (key.Equals("listtext"))
            {
                Stack.CurrentFrame.ParagraphNumberMode = ParagraphNumberEnum.ListText;
            }
            // Try to recognise a list number \pntext
            else if (key.Equals("pntext"))
            {
                Stack.CurrentFrame.ParagraphNumberMode = ParagraphNumberEnum.PnText;
            }

            // When an outline level is encountered, this starts a new paragraph
            else if (key.Equals("outlinelevel"))
            {
                if (CurrentParagraph != null && (CurrentParagraph.Text == null || CurrentParagraph.Text.Length == 0))
                {
                    // The current paragraph has not yet been filled, continue with it.
                }
                else
                {
                    CurrentParagraph = null;
                }
            }

            // \bkmkstart and \bkmkend seems to be related to bookmarks. Ignore the corresponding text
            if (key.Equals("bkmkstart") ||
                key.Equals("bkmkend") ||
                key.Equals("objclass") ||
                key.Equals("objdata") ||
                key.Equals("field") ||
                key.Equals("datafield") ||
                key.Equals("shpgrp") ||
                key.Equals("headerr") ||
                key.Equals("footerr") ||
                key.Equals("pntxta") ||
                key.Equals("shp") ||
                key.Equals("themedata") ||
                key.Equals("colorschememapping") ||
                key.Equals("lsdlockedexcept") ||
                key.Equals("datastore") ||
                key.Equals("pntxta") ||
                key.Equals("pntxtb") ||
                key.Equals("pict"))
            {
                Stack.CurrentFrame.IgnoreTextMode = IgnoreTextEnum.IgnoreText;
            }

            // Do the paragraph modifications
            if (key.Equals("par"))
            {
                addTextToCurrentParagraph("\n");
            }
            else if (key.Equals("line"))
            {
                addTextToCurrentParagraph("\n");
            }
            else if (key.Equals("cell"))
            {
                addTextToCurrentParagraph(",");
            }

            if (key.Equals("trowd"))
            {
                if (CurrentParagraph != null)
                {
                    CurrentParagraph = new TableRow(CurrentParagraph);
                    Doc.AddParagraph(CurrentParagraph);
                    EnclosingParagraphId = null;
                }
            }
        }
예제 #4
0
 /// <summary>
 ///     Paragraph has been deleted
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsDeleted(Paragraph p)
 {
     return p.State == Paragraph.ParagraphState.Deleted;
 }
예제 #5
0
 /// <summary>
 ///     Paragraph has been inserted
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsInserted(Paragraph p)
 {
     return p.State == Paragraph.ParagraphState.Inserted && p.Text.Length > 0;
 }
예제 #6
0
 /// <summary>
 ///     Adds a paragraph in the document
 /// </summary>
 /// <param name="paragraph"></param>
 public void AddParagraph(Paragraph paragraph)
 {
     Paragraphs.Add(paragraph.Id, paragraph);
 }
예제 #7
0
 /// <summary>
 ///     Paragraph contents has changed
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsChanged(Paragraph p)
 {
     return p.State == Paragraph.ParagraphState.Changed;
 }
예제 #8
0
 /// <summary>
 /// Adds a paragraph in the document
 /// </summary>
 /// <param name="paragraph"></param>
 public void AddParagraph(Paragraph paragraph)
 {
     Paragraphs.Add(paragraph.Id, paragraph);
 }
예제 #9
0
 /// <summary>
 /// Paragraph contents has changed
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsChanged(Paragraph p)
 {
     return(p.State == Paragraph.ParagraphState.Changed);
 }
예제 #10
0
 /// <summary>
 /// Paragraph has been deleted
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsDeleted(Paragraph p)
 {
     return(p.State == Paragraph.ParagraphState.Deleted);
 }
예제 #11
0
 /// <summary>
 /// Paragraph has been inserted
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsInserted(Paragraph p)
 {
     return(p.State == Paragraph.ParagraphState.Inserted);
 }
예제 #12
0
 /// <summary>
 /// Paragraph has been inserted
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 private bool IsInserted(Paragraph p)
 {
     return p.State == Paragraph.ParagraphState.Inserted;
 }