/// <summary> /// Devuelve la tabla de hojas de estilo del documento RTF. /// </summary> /// <returns>Tabla de hojas de estilo del documento RTF.</returns> public RtfStyleSheetTable GetStyleSheetTable() { RtfStyleSheetTable sstable = new RtfStyleSheetTable(); RtfTreeNode sst = MainGroup.SelectSingleGroup("stylesheet"); RtfNodeCollection styles = sst.ChildNodes; for (int i = 1; i < styles.Count; i++) { RtfTreeNode style = styles[i]; RtfStyleSheet rtfss = ParseStyleSheet(style); sstable.AddStyleSheet(rtfss.Index, rtfss); } return(sstable); }
/// <summary> /// Parsea el nodo con la tabla de estilos del documento. /// </summary> /// <param name="ssnode">Nodo con la tabla de estilos.</param> /// <returns>Tabla de estilos del documento.</returns> private RtfStyleSheet ParseStyleSheet(RtfTreeNode ssnode) { RtfStyleSheet rss = new RtfStyleSheet(); foreach (RtfTreeNode node in ssnode.ChildNodes) { if (node.NodeKey == "cs") { rss.Type = RtfStyleSheetType.Character; rss.Index = node.Parameter; } else if (node.NodeKey == "s") { rss.Type = RtfStyleSheetType.Paragraph; rss.Index = node.Parameter; } else if (node.NodeKey == "ds") { rss.Type = RtfStyleSheetType.Section; rss.Index = node.Parameter; } else if (node.NodeKey == "ts") { rss.Type = RtfStyleSheetType.Table; rss.Index = node.Parameter; } else if (node.NodeKey == "additive") { rss.Additive = true; } else if (node.NodeKey == "sbasedon") { rss.BasedOn = node.Parameter; } else if (node.NodeKey == "snext") { rss.Next = node.Parameter; } else if (node.NodeKey == "sautoupd") { rss.AutoUpdate = true; } else if (node.NodeKey == "shidden") { rss.Hidden = true; } else if (node.NodeKey == "slink") { rss.Link = node.Parameter; } else if (node.NodeKey == "slocked") { rss.Locked = true; } else if (node.NodeKey == "spersonal") { rss.Personal = true; } else if (node.NodeKey == "scompose") { rss.Compose = true; } else if (node.NodeKey == "sreply") { rss.Reply = true; } else if (node.NodeKey == "styrsid") { rss.Styrsid = node.Parameter; } else if (node.NodeKey == "ssemihidden") { rss.SemiHidden = true; } else if (node.NodeType == RtfNodeType.Group && (node.ChildNodes[0].NodeKey == "*" && node.ChildNodes[1].NodeKey == "keycode")) { rss.KeyCode = new RtfNodeCollection(); for (int i = 2; i < node.ChildNodes.Count; i++) { rss.KeyCode.Add(node.ChildNodes[i].CloneNode()); } } else if (node.NodeType == RtfNodeType.Text) { rss.Name = node.NodeKey.Substring(0,node.NodeKey.Length-1); } else { if(node.NodeKey != "*") rss.Formatting.Add(node); } } return rss; }
/// <summary> /// Elimina de la tabla de estilos el estilo pasado como parámetro. /// </summary> /// <param name="ss"></param> public void RemoveStyleSheet(RtfStyleSheet ss) { stylesheets.Remove(ss.Index); }
/// <summary> /// Añade un nuevo estilo a la tabla de estilos. El estilo se añadirá con el índice de estilo pasado como parámetro. /// </summary> /// <param name="index">Indice del estilo a añadir a la tabla.</param> /// <param name="ss">Nuevo estilo a añadir a la tabla.</param> public void AddStyleSheet(int index, RtfStyleSheet ss) { ss.Index = index; stylesheets.Add(index, ss); }
/// <summary> /// Añade un nuevo estilo a la tabla de estilos. El estilo se añadirá con un nuevo índice no existente en la tabla. /// </summary> /// <param name="ss">Nuevo estilo a añadir a la tabla.</param> public void AddStyleSheet(RtfStyleSheet ss) { ss.Index = newStyleSheetIndex(); stylesheets.Add(ss.Index, ss); }
/// <summary> /// Parsea el nodo con la tabla de estilos del documento. /// </summary> /// <param name="ssnode">Nodo con la tabla de estilos.</param> /// <returns>Tabla de estilos del documento.</returns> private RtfStyleSheet ParseStyleSheet(RtfTreeNode ssnode) { RtfStyleSheet rss = new RtfStyleSheet(); foreach (RtfTreeNode node in ssnode.ChildNodes) { if (node.NodeKey == "cs") { rss.Type = RtfStyleSheetType.Character; rss.Index = node.Parameter; } else if (node.NodeKey == "s") { rss.Type = RtfStyleSheetType.Paragraph; rss.Index = node.Parameter; } else if (node.NodeKey == "ds") { rss.Type = RtfStyleSheetType.Section; rss.Index = node.Parameter; } else if (node.NodeKey == "ts") { rss.Type = RtfStyleSheetType.Table; rss.Index = node.Parameter; } else if (node.NodeKey == "additive") { rss.Additive = true; } else if (node.NodeKey == "sbasedon") { rss.BasedOn = node.Parameter; } else if (node.NodeKey == "snext") { rss.Next = node.Parameter; } else if (node.NodeKey == "sautoupd") { rss.AutoUpdate = true; } else if (node.NodeKey == "shidden") { rss.Hidden = true; } else if (node.NodeKey == "slink") { rss.Link = node.Parameter; } else if (node.NodeKey == "slocked") { rss.Locked = true; } else if (node.NodeKey == "spersonal") { rss.Personal = true; } else if (node.NodeKey == "scompose") { rss.Compose = true; } else if (node.NodeKey == "sreply") { rss.Reply = true; } else if (node.NodeKey == "styrsid") { rss.Styrsid = node.Parameter; } else if (node.NodeKey == "ssemihidden") { rss.SemiHidden = true; } else if (node.NodeType == RtfNodeType.Group && (node.ChildNodes[0].NodeKey == "*" && node.ChildNodes[1].NodeKey == "keycode")) { rss.KeyCode = new RtfNodeCollection(); for (int i = 2; i < node.ChildNodes.Count; i++) { rss.KeyCode.Add(node.ChildNodes[i].CloneNode()); } } else if (node.NodeType == RtfNodeType.Text) { rss.Name = node.NodeKey.Substring(0, node.NodeKey.Length - 1); } else { if (node.NodeKey != "*") { rss.Formatting.Add(node); } } } return(rss); }