parse method
Parses tree
for build ops and text styles.
Implementation
void parse(BuildTree tree) {
final attrs = tree.element.attributes;
final localName = tree.element.localName;
switch (localName) {
case kTagA:
if (attrs.containsKey(kAttributeAHref)) {
tree
..inherit<BuildContext?>(TagA.defaultColor)
..register(_tagA ??= TagA(this).buildOp);
}
final name = attrs[kAttributeAName];
if (name != null) {
tree.register(Anchor(this, name).buildOp);
}
break;
case 'abbr':
case kTagAcronym:
tree.register(
const BuildOp.v2(
debugLabel: kTagAcronym,
defaultStyles: _tagAcronym,
priority: Early.tagAcronym,
),
);
break;
case kTagAddress:
tree.register(
const BuildOp.v2(
debugLabel: kTagAddress,
defaultStyles: _tagAddress,
priority: Early.tagAddress,
),
);
break;
case 'article':
case 'aside':
case 'dl':
case 'figcaption':
case 'footer':
case 'header':
case 'main':
case 'nav':
case 'section':
case kTagDiv:
tree.register(
const BuildOp.v2(
debugLabel: kTagDiv,
defaultStyles: _cssDisplayBlock,
priority: Early.tagDiv,
),
);
break;
case 'blockquote':
case kTagFigure:
tree.register(
const BuildOp.v2(
debugLabel: kTagFigure,
defaultStyles: _tagFigure,
priority: Early.tagFigure,
),
);
break;
case 'b':
case 'strong':
tree.inherit(text_ops.fontWeight, FontWeight.bold);
break;
case 'big':
tree.inherit(text_ops.fontSizeTerm, kCssFontSizeLarger);
break;
case 'small':
tree.inherit(text_ops.fontSizeTerm, kCssFontSizeSmaller);
break;
case kTagBr:
tree.register(tagBr);
break;
case kTagCenter:
tree.register(
const BuildOp.v2(
debugLabel: kTagCenter,
defaultStyles: _tagCenter,
priority: Early.tagCenter,
),
);
break;
case 'cite':
case 'dfn':
case 'em':
case 'i':
case 'var':
tree.inherit(text_ops.fontStyle, FontStyle.italic);
break;
case kTagCode:
case kTagKbd:
case kTagSamp:
case kTagTt:
tree.inherit(
text_ops.fontFamily,
const [kTagCodeFont1, kTagCodeFont2],
);
break;
case kTagPre:
tree.register(_tagPre ??= TagPre(this).buildOp);
break;
case kTagDetails:
tree.register(_tagDetails ??= TagDetails(this).buildOp);
break;
case kTagDd:
tree.register(
const BuildOp.v2(
debugLabel: kTagDd,
defaultStyles: _tagDd,
priority: Early.tagDd,
),
);
break;
case kTagDt:
tree.register(
const BuildOp.v2(
debugLabel: kTagDt,
defaultStyles: _tagDt,
priority: Early.tagDt,
),
);
break;
case 'del':
case 's':
case kTagStrike:
tree.register(
const BuildOp.v2(
debugLabel: kTagStrike,
defaultStyles: _cssTextDecorationLineThrough,
priority: Early.tagStrike,
),
);
break;
case kTagFont:
tree.register(tagFont);
break;
case kTagH1:
tree.register(
const BuildOp.v2(
debugLabel: kTagH1,
defaultStyles: _tagH1,
priority: Early.tagH1,
),
);
break;
case kTagH2:
tree.register(
const BuildOp.v2(
debugLabel: kTagH2,
defaultStyles: _tagH2,
priority: Early.tagH2,
),
);
break;
case kTagH3:
tree.register(
const BuildOp.v2(
debugLabel: kTagH3,
defaultStyles: _tagH3,
priority: Early.tagH3,
),
);
break;
case kTagH4:
tree.register(
const BuildOp.v2(
debugLabel: kTagH4,
defaultStyles: _tagH4,
priority: Early.tagH4,
),
);
break;
case kTagH5:
tree.register(
const BuildOp.v2(
debugLabel: kTagH5,
defaultStyles: _tagH5,
priority: Early.tagH5,
),
);
break;
case kTagH6:
tree.register(
const BuildOp.v2(
debugLabel: kTagH6,
defaultStyles: _tagH6,
priority: Early.tagH6,
),
);
break;
case kTagHr:
tree.register(
const BuildOp.v2(
debugLabel: kTagHr,
defaultStyles: _tagHrDefaultStyles,
onRenderBlock: _tagHrOnRenderBlock,
priority: Priority.tagHr,
),
);
break;
case kTagImg:
tree.register(_tagImg ??= TagImg(this).buildOp);
break;
case kTagOrderedList:
case kTagUnorderedList:
tree.register(_tagLi ??= TagLi(this).buildOp);
break;
case kTagMark:
tree.register(
const BuildOp.v2(
debugLabel: kTagMark,
defaultStyles: _tagMark,
priority: Early.tagMark,
),
);
break;
case kTagP:
tree.register(
const BuildOp.v2(
debugLabel: kTagP,
defaultStyles: _tagP,
priority: Early.tagP,
),
);
break;
case kTagQ:
tree.register(tagQ);
break;
case kTagRuby:
tree.register(tagRuby);
break;
case 'style':
case kTagScript:
tree.register(
const BuildOp.v2(
debugLabel: kTagScript,
defaultStyles: _cssDisplayNone,
priority: Early.tagScript,
),
);
break;
case kTagSub:
tree.register(
const BuildOp.v2(
debugLabel: kTagSub,
defaultStyles: _tagSub,
priority: Early.tagSub,
),
);
break;
case kTagSup:
tree.register(
const BuildOp.v2(
debugLabel: kTagSup,
defaultStyles: _tagSup,
priority: Early.tagSup,
),
);
break;
case kTagTable:
final tagTable = _tagTable ??= TagTable(this);
tree
..register(
const BuildOp.v2(
debugLabel: kTagTable,
defaultStyles: _cssDisplayTable,
priority: Early.tagTableDisplayTable,
),
)
..register(tagTable.borderOp)
..register(tagTable.cellPaddingOp);
break;
case kTagTableCell:
tree.register(
const BuildOp.v2(
debugLabel: kTagTableCell,
defaultStyles: _cssVerticalAlignMiddle,
priority: Early.tagTableCellValignDefault,
),
);
break;
case kTagTableHeaderCell:
tree.register(
const BuildOp.v2(
debugLabel: kTagTableHeaderCell,
defaultStyles: _tagTableHeaderCell,
priority: Early.tagTableHeaderCellDefaultStyles,
),
);
break;
case kTagTableCaption:
tree.register(
const BuildOp.v2(
debugLabel: kTagTableCaption,
defaultStyles: _cssTextAlignCenter,
priority: Early.tagTableCaptionTextAlignCenter,
),
);
break;
case 'u':
case kTagIns:
tree.register(
const BuildOp.v2(
debugLabel: kTagIns,
defaultStyles: _cssTextDecorationUnderline,
priority: Early.tagIns,
),
);
break;
}
for (final attribute in attrs.entries) {
switch (attribute.key) {
case kAttributeAlign:
tree.register(
const BuildOp.v2(
debugLabel: kAttributeAlign,
defaultStyles: _cssTextAlignFromAttribute,
priority: Early.attributeAlign,
),
);
break;
case kAttributeDir:
tree.register(
const BuildOp.v2(
debugLabel: kAttributeDir,
defaultStyles: _cssDirectionFromAttribute,
priority: Early.attributeDir,
),
);
break;
case kAttributeId:
tree.register(Anchor(this, attribute.value).buildOp);
break;
}
}
}