mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-08-24 17:31:06 +08:00
284 lines
5.0 KiB
Dart
284 lines
5.0 KiB
Dart
/*
|
||
* SPDX-FileCopyrightText: 2021 Vishesh Handa <me@vhanda.in>
|
||
* SPDX-FileCopyrightText: 2015 Titus Wormer <tituswormer@gmail.com>
|
||
*
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
import 'package:markdown/markdown.dart' as md;
|
||
|
||
class HtmlEntitiesSyntax extends md.InlineSyntax {
|
||
HtmlEntitiesSyntax() : super(_buildRegexp());
|
||
|
||
@override
|
||
bool onMatch(md.InlineParser parser, Match match) {
|
||
var ent = match[0]!;
|
||
assert(ent.startsWith('&') && ent.endsWith(';'));
|
||
ent = ent.substring(1, ent.length - 1);
|
||
|
||
var output = _characterEntitiesHtml4[ent] ?? match[0]!;
|
||
parser.addNode(md.Text(output));
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
String _buildRegexp() =>
|
||
_characterEntitiesHtml4.keys.map((e) => '(&$e;)').join('|');
|
||
|
||
// Taken from https://github.com/wooorm/character-entities-html4/blob/main/index.js
|
||
const _characterEntitiesHtml4 = {
|
||
'nbsp': ' ',
|
||
'iexcl': '¡',
|
||
'cent': '¢',
|
||
'pound': '£',
|
||
'curren': '¤',
|
||
'yen': '¥',
|
||
'brvbar': '¦',
|
||
'sect': '§',
|
||
'uml': '¨',
|
||
'copy': '©',
|
||
'ordf': 'ª',
|
||
'laquo': '«',
|
||
'not': '¬',
|
||
'shy': '',
|
||
'reg': '®',
|
||
'macr': '¯',
|
||
'deg': '°',
|
||
'plusmn': '±',
|
||
'sup2': '²',
|
||
'sup3': '³',
|
||
'acute': '´',
|
||
'micro': 'µ',
|
||
'para': '¶',
|
||
'middot': '·',
|
||
'cedil': '¸',
|
||
'sup1': '¹',
|
||
'ordm': 'º',
|
||
'raquo': '»',
|
||
'frac14': '¼',
|
||
'frac12': '½',
|
||
'frac34': '¾',
|
||
'iquest': '¿',
|
||
'Agrave': 'À',
|
||
'Aacute': 'Á',
|
||
'Acirc': 'Â',
|
||
'Atilde': 'Ã',
|
||
'Auml': 'Ä',
|
||
'Aring': 'Å',
|
||
'AElig': 'Æ',
|
||
'Ccedil': 'Ç',
|
||
'Egrave': 'È',
|
||
'Eacute': 'É',
|
||
'Ecirc': 'Ê',
|
||
'Euml': 'Ë',
|
||
'Igrave': 'Ì',
|
||
'Iacute': 'Í',
|
||
'Icirc': 'Î',
|
||
'Iuml': 'Ï',
|
||
'ETH': 'Ð',
|
||
'Ntilde': 'Ñ',
|
||
'Ograve': 'Ò',
|
||
'Oacute': 'Ó',
|
||
'Ocirc': 'Ô',
|
||
'Otilde': 'Õ',
|
||
'Ouml': 'Ö',
|
||
'times': '×',
|
||
'Oslash': 'Ø',
|
||
'Ugrave': 'Ù',
|
||
'Uacute': 'Ú',
|
||
'Ucirc': 'Û',
|
||
'Uuml': 'Ü',
|
||
'Yacute': 'Ý',
|
||
'THORN': 'Þ',
|
||
'szlig': 'ß',
|
||
'agrave': 'à',
|
||
'aacute': 'á',
|
||
'acirc': 'â',
|
||
'atilde': 'ã',
|
||
'auml': 'ä',
|
||
'aring': 'å',
|
||
'aelig': 'æ',
|
||
'ccedil': 'ç',
|
||
'egrave': 'è',
|
||
'eacute': 'é',
|
||
'ecirc': 'ê',
|
||
'euml': 'ë',
|
||
'igrave': 'ì',
|
||
'iacute': 'í',
|
||
'icirc': 'î',
|
||
'iuml': 'ï',
|
||
'eth': 'ð',
|
||
'ntilde': 'ñ',
|
||
'ograve': 'ò',
|
||
'oacute': 'ó',
|
||
'ocirc': 'ô',
|
||
'otilde': 'õ',
|
||
'ouml': 'ö',
|
||
'divide': '÷',
|
||
'oslash': 'ø',
|
||
'ugrave': 'ù',
|
||
'uacute': 'ú',
|
||
'ucirc': 'û',
|
||
'uuml': 'ü',
|
||
'yacute': 'ý',
|
||
'thorn': 'þ',
|
||
'yuml': 'ÿ',
|
||
'fnof': 'ƒ',
|
||
'Alpha': 'Α',
|
||
'Beta': 'Β',
|
||
'Gamma': 'Γ',
|
||
'Delta': 'Δ',
|
||
'Epsilon': 'Ε',
|
||
'Zeta': 'Ζ',
|
||
'Eta': 'Η',
|
||
'Theta': 'Θ',
|
||
'Iota': 'Ι',
|
||
'Kappa': 'Κ',
|
||
'Lambda': 'Λ',
|
||
'Mu': 'Μ',
|
||
'Nu': 'Ν',
|
||
'Xi': 'Ξ',
|
||
'Omicron': 'Ο',
|
||
'Pi': 'Π',
|
||
'Rho': 'Ρ',
|
||
'Sigma': 'Σ',
|
||
'Tau': 'Τ',
|
||
'Upsilon': 'Υ',
|
||
'Phi': 'Φ',
|
||
'Chi': 'Χ',
|
||
'Psi': 'Ψ',
|
||
'Omega': 'Ω',
|
||
'alpha': 'α',
|
||
'beta': 'β',
|
||
'gamma': 'γ',
|
||
'delta': 'δ',
|
||
'epsilon': 'ε',
|
||
'zeta': 'ζ',
|
||
'eta': 'η',
|
||
'theta': 'θ',
|
||
'iota': 'ι',
|
||
'kappa': 'κ',
|
||
'lambda': 'λ',
|
||
'mu': 'μ',
|
||
'nu': 'ν',
|
||
'xi': 'ξ',
|
||
'omicron': 'ο',
|
||
'pi': 'π',
|
||
'rho': 'ρ',
|
||
'sigmaf': 'ς',
|
||
'sigma': 'σ',
|
||
'tau': 'τ',
|
||
'upsilon': 'υ',
|
||
'phi': 'φ',
|
||
'chi': 'χ',
|
||
'psi': 'ψ',
|
||
'omega': 'ω',
|
||
'thetasym': 'ϑ',
|
||
'upsih': 'ϒ',
|
||
'piv': 'ϖ',
|
||
'bull': '•',
|
||
'hellip': '…',
|
||
'prime': '′',
|
||
'Prime': '″',
|
||
'oline': '‾',
|
||
'frasl': '⁄',
|
||
'weierp': '℘',
|
||
'image': 'ℑ',
|
||
'real': 'ℜ',
|
||
'trade': '™',
|
||
'alefsym': 'ℵ',
|
||
'larr': '←',
|
||
'uarr': '↑',
|
||
'rarr': '→',
|
||
'darr': '↓',
|
||
'harr': '↔',
|
||
'crarr': '↵',
|
||
'lArr': '⇐',
|
||
'uArr': '⇑',
|
||
'rArr': '⇒',
|
||
'dArr': '⇓',
|
||
'hArr': '⇔',
|
||
'forall': '∀',
|
||
'part': '∂',
|
||
'exist': '∃',
|
||
'empty': '∅',
|
||
'nabla': '∇',
|
||
'isin': '∈',
|
||
'notin': '∉',
|
||
'ni': '∋',
|
||
'prod': '∏',
|
||
'sum': '∑',
|
||
'minus': '−',
|
||
'lowast': '∗',
|
||
'radic': '√',
|
||
'prop': '∝',
|
||
'infin': '∞',
|
||
'ang': '∠',
|
||
'and': '∧',
|
||
'or': '∨',
|
||
'cap': '∩',
|
||
'cup': '∪',
|
||
'int': '∫',
|
||
'there4': '∴',
|
||
'sim': '∼',
|
||
'cong': '≅',
|
||
'asymp': '≈',
|
||
'ne': '≠',
|
||
'equiv': '≡',
|
||
'le': '≤',
|
||
'ge': '≥',
|
||
'sub': '⊂',
|
||
'sup': '⊃',
|
||
'nsub': '⊄',
|
||
'sube': '⊆',
|
||
'supe': '⊇',
|
||
'oplus': '⊕',
|
||
'otimes': '⊗',
|
||
'perp': '⊥',
|
||
'sdot': '⋅',
|
||
'lceil': '⌈',
|
||
'rceil': '⌉',
|
||
'lfloor': '⌊',
|
||
'rfloor': '⌋',
|
||
'lang': '〈',
|
||
'rang': '〉',
|
||
'loz': '◊',
|
||
'spades': '♠',
|
||
'clubs': '♣',
|
||
'hearts': '♥',
|
||
'diams': '♦',
|
||
'quot': '"',
|
||
'amp': '&',
|
||
'lt': '<',
|
||
'gt': '>',
|
||
'OElig': 'Œ',
|
||
'oelig': 'œ',
|
||
'Scaron': 'Š',
|
||
'scaron': 'š',
|
||
'Yuml': 'Ÿ',
|
||
'circ': 'ˆ',
|
||
'tilde': '˜',
|
||
'ensp': ' ',
|
||
'emsp': ' ',
|
||
'thinsp': ' ',
|
||
'zwnj': '',
|
||
'zwj': '',
|
||
'lrm': '',
|
||
'rlm': '',
|
||
'ndash': '–',
|
||
'mdash': '—',
|
||
'lsquo': '‘',
|
||
'rsquo': '’',
|
||
'sbquo': '‚',
|
||
'ldquo': '“',
|
||
'rdquo': '”',
|
||
'bdquo': '„',
|
||
'dagger': '†',
|
||
'Dagger': '‡',
|
||
'permil': '‰',
|
||
'lsaquo': '‹',
|
||
'rsaquo': '›',
|
||
'euro': '€'
|
||
};
|