/// <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); } } }
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); }
/// <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); } }