예제 #1
0
        /// <summary>
        /// Process one font
        /// </summary>
        /// <param name="item"></param>
        private void _ProcessRtfBlockFontOne(Parsing.ParsedItem item)
        {   // for example: \f0\fswiss\fcharset238{\*\fname Arial;}Arial CE;
            //              \f2\fmodern\fprq1\fcharset0 Envy Code R;
            if (!item.HasItems)
            {
                return;
            }
            RtfFont rtfFont = new RtfFont();

            for (int index = 0; index < item.ItemCount; index++)
            {
                Parsing.ParsedItem          subItem  = item.Items[index];
                Parsing.IParsedItemExtended eSubItem = subItem as Parsing.IParsedItemExtended;
                if (subItem.HasItems)
                {
                    if (index == 0)
                    {                                 // Font number in table:
                        rtfFont.Key = item.TextInner; // f2
                    }
                    else
                    {
                        string rtfValue;
                        string rtfEntity = GetRtfEntityFirst(subItem, out rtfValue);     // "fswiss", "fcharset"+"238",
                        switch (rtfEntity)
                        {
                        case "fswiss":
                        case "fmodern":
                        case "fnil":
                            rtfFont.Family = rtfEntity;
                            break;

                        case "fprq":
                            break;

                        case "fcharset":
                            rtfFont.CharSet = rtfValue;
                            this._ProcessRtfBlockFontName(item, ref index, rtfFont);
                            break;

                        default:
                            this._ProcessAddRtfError("FontItem", rtfEntity);
                            break;
                        }
                    }
                }
            }

            if (rtfFont.IsValid)
            {
                if (this._Fonts.ContainsKey(rtfFont.Key))
                {
                    this._Fonts[rtfFont.Key] = rtfFont;
                }
                else
                {
                    this._Fonts.Add(rtfFont.Key, rtfFont);
                }
            }
        }
예제 #2
0
        private void _AfterSelectNode(TreeNode treeNode)
        {
            Parsing.ParsedItem item = treeNode.Tag as Parsing.ParsedItem;
            if (item == null)
            {
                return;
            }
            Parsing.IParsedItemExtended eItem = item as Parsing.IParsedItemExtended;

            int begin = eItem.BeginPointer;
            int end   = eItem.EndPointer;

            this._ParserEditor.SelectRange(begin, end - begin, true);
        }
예제 #3
0
        /// <summary>
        /// Úkolem této metody je:
        ///  - vepsat data z daného prvku <see cref="Parsing.ParsedItem"/> do doadného nodu stromu <see cref="TreeNode"/>;
        ///  - pokud daný prvek obsahuje vnořené prvky, pak je projít; pro každý prvek vytvořit nový sub-node a zařadit jej do do daného node;
        ///  - a rekurzivně zavolat tuto metodu pro vnořený prvek a sub-node.
        /// projít všechny vnořené prvky daného parsovaného prvku (item), a tyto prvky přímo vložit kolekce daného nodu.
        /// Pokud některý prvek obsahuje sub-prvky, pak rekurzivně zavolat tuto metodu, předat jí prvek, a odpovídající kolekci subnodů.
        /// </summary>
        /// <param name="item">Zdroj dat = parsovaný prvek</param>
        /// <param name="node">Cíl dat = prvek TreeNode</param>
        /// <param name="addBlank">Vkládat i Blank prvky</param>
        /// <param name="addComment">Vkládat i komentáře a další nerelevantní prvky</param>
        private static void _TreeFillOne(Parsing.ParsedItem item, TreeNode node, bool addBlank, bool addComment)
        {
            if (item == null)
            {
                return;
            }

            Parsing.IParsedItemExtended eItem = item as Parsing.IParsedItemExtended;

            node.Text        = item.Text;
            node.ToolTipText = item.ItemType.ToString() + "; " + eItem.Setting.SegmentName;
            node.Tag         = item;

            if (!item.HasItems)
            {
                return;
            }

            foreach (Parsing.ParsedItem subItem in item.Items)
            {
                Parsing.IParsedItemExtended eSubItem = subItem as Parsing.IParsedItemExtended;

                if (eSubItem.IsComment && !addComment)
                {
                    continue;
                }
                if (!eSubItem.IsRelevant && !addBlank)
                {
                    continue;
                }

                TreeNode subNode = new TreeNode();
                node.Nodes.Add(subNode);

                _TreeFillOne(subItem, subNode, addBlank, addComment);
            }
        }