public static ChangeDisplayType ( |
||
box | ||
newdisplay | CssDisplay | |
return | void |
//TODO: review here, fixed position can be reference sibling? #if DEBUG ///// <summary> ///// ToString override. ///// </summary> ///// <returns></returns> //public override string ToString() //{ // var tag = HtmlElement != null ? string.Format("<{0}>", HtmlElement.Name) : "anon"; // if (IsBlock) // { // return string.Format("{0}{1} Block {2}, Children:{3}", ParentBox == null ? "Root: " : string.Empty, tag, FontSize, Boxes.Count); // } // else if (this.CssDisplay == CssDisplay.None) // { // return string.Format("{0}{1} None", ParentBox == null ? "Root: " : string.Empty, tag); // } // else // { // if (this.MayHasSomeTextContent) // { // return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag, // this.CssDisplay.ToCssStringValue(), this.dbugCopyTextContent()); // } // else // { // return string.Format("{0}{1} {2}: {3}", ParentBox == null ? "Root: " : string.Empty, tag, // this.CssDisplay.ToCssStringValue(), ""); // } // } //} #endif //----------------------------------------------------------------- public static CssBox AddNewAnonInline(CssBox parent) { BoxSpec spec = CssBox.UnsafeGetBoxSpec(parent); CssBox newBox = new CssBox(spec.GetAnonVersion(), parent._rootgfx); parent.AppendChild(newBox); CssBox.ChangeDisplayType(newBox, Css.CssDisplay.Inline); return(newBox); }
internal CssBox CreateBox(CssBox parentBox, HtmlElement childElement, bool fullmode) { //----------------------------------------- //1. create new box //----------------------------------------- //some box has predefined behaviour CssBox newBox = null; switch (childElement.WellknownElementName) { case WellKnownDomNodeName.br: //special treatment for br newBox = new CssBox(childElement.Spec, parentBox.RootGfx); newBox.SetController(childElement); CssBox.SetAsBrBox(newBox); CssBox.ChangeDisplayType(newBox, CssDisplay.Block); parentBox.AppendChild(newBox); childElement.SetPrincipalBox(newBox); return(newBox); case WellKnownDomNodeName.img: //auto append newBox to parentBox newBox = CreateImageBox(parentBox, childElement); childElement.SetPrincipalBox(newBox); return(newBox); case WellKnownDomNodeName.hr: newBox = new CssBoxHr(childElement.Spec, parentBox.RootGfx); newBox.SetController(childElement); parentBox.AppendChild(newBox); childElement.SetPrincipalBox(newBox); return(newBox); //----------------------------------------------------- //TODO: simplify this ... //table-display elements, fix display type case WellKnownDomNodeName.td: case WellKnownDomNodeName.th: newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, true); break; case WellKnownDomNodeName.col: newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumn); break; case WellKnownDomNodeName.colgroup: newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, true, CssDisplay.TableColumnGroup); break; case WellKnownDomNodeName.tr: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRow); break; case WellKnownDomNodeName.tbody: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableRowGroup); break; case WellKnownDomNodeName.table: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.Table); break; case WellKnownDomNodeName.caption: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableCaption); break; case WellKnownDomNodeName.thead: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableHeaderGroup); break; case WellKnownDomNodeName.tfoot: newBox = TableBoxCreator.CreateOtherPredefinedTableElement(parentBox, childElement, CssDisplay.TableFooterGroup); break; //--------------------------------------------------- case WellKnownDomNodeName.canvas: case WellKnownDomNodeName.input: newBox = this.CreateCustomCssBox(parentBox, childElement, childElement.Spec); if (newBox != null) { childElement.SetPrincipalBox(newBox); return(newBox); } goto default; //else goto default *** //--------------------------------------------------- case WellKnownDomNodeName.svg: { //1. create svg container node newBox = _svgCreator.CreateSvgBox(parentBox, childElement, childElement.Spec); childElement.SetPrincipalBox(newBox); return(newBox); } case WellKnownDomNodeName.NotAssign: case WellKnownDomNodeName.Unknown: { //custom tag //check if this is tag is registered as custom element //----------------------------------------------- if (childElement.HasCustomPrincipalBoxGenerator) { var childbox = childElement.GetPrincipalBox(parentBox, this); parentBox.AppendChild(childbox); return(childbox); } //----------------------------------------------- LayoutFarm.Composers.CreateCssBoxDelegate foundBoxGen; if (((HtmlDocument)childElement.OwnerDocument).TryGetCustomBoxGenerator(childElement.Name, out foundBoxGen)) { //create custom box newBox = foundBoxGen(childElement, parentBox, childElement.Spec, this); } if (newBox == null) { goto default; } else { childElement.SetPrincipalBox(newBox); return(newBox); } } default: { BoxSpec childSpec = childElement.Spec; switch (childSpec.CssDisplay) { //not fixed display type case CssDisplay.TableCell: newBox = TableBoxCreator.CreateTableCell(parentBox, childElement, false); break; case CssDisplay.TableColumn: newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumn); break; case CssDisplay.TableColumnGroup: newBox = TableBoxCreator.CreateTableColumnOrColumnGroup(parentBox, childElement, false, CssDisplay.TableColumnGroup); break; case CssDisplay.ListItem: newBox = ListItemBoxCreator.CreateListItemBox(parentBox, childElement); break; default: newBox = new CssBox(childSpec, parentBox.RootGfx); newBox.SetController(childElement); parentBox.AppendChild(newBox); break; } } break; } childElement.SetPrincipalBox(newBox); UpdateChildBoxes(childElement, fullmode); return(newBox); }
public static CssBox CreateListItemBox(CssBox parent, HtmlElement childElement) { var spec = childElement.Spec; var newBox = new CssBoxListItem(spec, parent.RootGfx); newBox.SetController(childElement); parent.AppendChild(newBox); if (spec.ListStyleType != CssListStyleType.None) { //create sub item collection var itemBulletBox = new CssBox(spec.GetAnonVersion(), parent.RootGfx); newBox.BulletBox = itemBulletBox; CssBox.UnsafeSetParent(itemBulletBox, newBox); CssBox.ChangeDisplayType(itemBulletBox, CssDisplay.Inline); //--------------------------------------------------------------- //set content of bullet char[] text_content = null; switch (spec.ListStyleType) { case CssListStyleType.Disc: { text_content = discItem; } break; case CssListStyleType.Circle: { text_content = circleItem; } break; case CssListStyleType.Square: { text_content = squareItem; } break; case CssListStyleType.Decimal: { text_content = (GetIndexForList(newBox, childElement).ToString(CultureInfo.InvariantCulture) + ".").ToCharArray(); } break; case CssListStyleType.DecimalLeadingZero: { text_content = (GetIndexForList(newBox, childElement).ToString("00", CultureInfo.InvariantCulture) + ".").ToCharArray(); } break; default: { text_content = (BulletNumberFormatter.ConvertToAlphaNumber(GetIndexForList(newBox, childElement), spec.ListStyleType) + ".").ToCharArray(); } break; } //--------------------------------------------------------------- CssBox.UnsafeSetTextBuffer(itemBulletBox, text_content); List <CssRun> runlist = new List <CssRun>(); bool hasSomeCharacter; splitter.ParseWordContent(text_content, spec, itemBulletBox.IsBlock, runlist, out hasSomeCharacter); RunListHelper.AddRunList(itemBulletBox, spec, runlist, text_content, false); } return(newBox); }