using System; using System.Collections.Generic; using System.Text; namespace FastReport.RichTextParser { /// /// This class represents a RTF column description. /// /// class RTF_Column { private Column column; private RTF_BorderLine_Parser border_parser = new RichTextParser.RTF_BorderLine_Parser(); enum CurrentSide { None, Top, Left, Bottom, Right } private CurrentSide side = CurrentSide.None; public Column Column { get { return column; } } internal bool Parse(RTF_Parser parser, RTF_Header header) { bool parsed = false; if (side != CurrentSide.None) parsed = border_parser.Parse(parser, header); if (parsed == false) { switch (side) { case CurrentSide.Top: column.border_top = border_parser.line; break; case CurrentSide.Left: column.border_left = border_parser.line; break; case CurrentSide.Bottom: column.border_bottom = border_parser.line; break; case CurrentSide.Right: column.border_right = border_parser.line; break; } side = CurrentSide.None; parsed = true; switch (parser.Control) { case "clcbpat": { int cidx = (int)parser.Number; if (cidx > 0) --cidx; column.back_color = header.Document.color_list[cidx]; } break; case "clvertalt": column.valign = Column.VertAlign.Top; parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Top; break; case "clvertalc": column.valign = Column.VertAlign.Center; parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Center; break; case "clvertalb": column.valign = Column.VertAlign.Bottom; parser.current_paragraph_format.Valign = ParagraphFormat.VerticalAlign.Bottom; break; case "cltxlrtb": // Ignore default text in a cell flows break; case "clbrdrt": side = CurrentSide.Top; border_parser.Clear(); break; case "clbrdrl": side = CurrentSide.Left; border_parser.Clear(); break; case "clbrdrb": side = CurrentSide.Bottom; border_parser.Clear(); break; case "clbrdrr": side = CurrentSide.Right; border_parser.Clear(); break; case "clvmgf": column.verticallY_merged = true; break; case "clmgf": column.horizontally_merged = true; break; default: parsed = false; break; } } return parsed; } internal void SetWidth(uint w) { column.Width = w; } internal RTF_Column() { column = new Column(); column.back_color = System.Drawing.Color.Transparent; } } internal class RTF_Row : RTF_CommonRichElement { private RTF_SequenceParser sequence; private TableRow parsing_row; public TableRow Row { get { return parsing_row; } } internal override RichObject RichObject { get { RichObject rich = new RichObject(); rich.type = RichObject.Type.Table; rich.table = sequence.CurrentTable; rich.size = sequence.CurrentTable.size; return rich; } } internal override bool Parse(RTF_Parser parser, RTF_Header header) { bool parsed = true; { switch (parser.Control) { case "trrh": parsing_row.height = (int)parser.Number; break; case "trgaph": parsing_row.trgaph = (uint)parser.Number; break; case "trpaddl": parsing_row.default_pad_left = (int)parser.Number; break; case "trpaddr": parsing_row.default_pad_right = (int)parser.Number; break; default: parsed = false; break; } } return parsed; } internal void AddCell(RichObjectSequence curr_par) { parsing_row.cells.Add(curr_par); } /// /// Create RTF row /// /// /// internal RTF_Row(RTF_SequenceParser parent_sequence) { sequence = parent_sequence; parsing_row.cells = new List(); } } }