getTags method
Implementation
List<String> getTags() {
final OpAttributes attrs = op.attributes;
// embeds
if (!op.isText()) {
return <String>[
op.isVideo()
? 'iframe'
: op.isImage()
? 'img'
: 'span', // formula
];
}
// blocks
final String positionTag = options.paragraphTag;
final List<List<String>> blocks = <List<String>>[
<String>['blockquote'],
<String>['code-block', 'pre'],
<String>['list', options.listItemTag],
<String>['header'],
<String>['align', positionTag],
<String>['direction', positionTag],
<String>['indent', positionTag],
];
for (final List<String> item in blocks) {
String firstItem = item[0];
if (isTruthy(attrs[firstItem])) {
final String? customTag = getCustomTag(firstItem);
return isTruthy(customTag)
? <String>[customTag!]
: firstItem == 'header'
? <String>['h${attrs[firstItem]}']
: <String>[arr.preferSecond(item)!];
}
}
if (op.isCustomTextBlock()) {
final String? customTag = getCustomTag('renderAsBlock');
return isTruthy(customTag) ? <String>[customTag!] : <String>[positionTag];
}
// inlines
final Map<String, String> customTagsMap = attrs.attrs.keys.fold(<String, String>{}, (Map<String, String> res, String it) {
final String? customTag = getCustomTag(it);
if (isTruthy(customTag)) {
res[it] = customTag!;
}
return res;
});
const List<List<String>> inlineTags = <List<String>>[
<String>['link', 'a'],
<String>['mentions', 'a'],
<String>['script'],
<String>['bold', 'strong'],
<String>['italic', 'em'],
<String>['strike', 's'],
<String>['underline', 'u'],
<String>['code'],
];
final List<List<String>> tl = <List<String>>[
...inlineTags.where((List<String> item) => isTruthy(attrs[item[0]])),
...customTagsMap.keys
.where((String t) => !inlineTags.any((List<String> it) => it[0] == t))
.map((String t) => <String>[t, customTagsMap[t]!]),
];
return tl.map((List<String> item) {
final String? v = customTagsMap[item[0]];
return isTruthy(v)
? v!
: item[0] == 'script'
? attrs[item[0]] == ScriptType.subscript.value
? 'sub'
: 'sup'
: arr.preferSecond(item)!;
}).toList();
}