@atlaskit/editor-wikimarkup-transformer
Version:
Wiki markup transformer for JIRA and Confluence
144 lines • 4.73 kB
JavaScript
import { media } from './media';
import { blockquote } from './blockquote';
import { citation } from './citation';
import { deleted } from './deleted';
import { doubleDashSymbol } from './double-dash-symbol';
import { emoji } from './emoji';
import { emphasis } from './emphasis';
import { hardbreak } from './hardbreak';
import { heading } from './heading';
import { inserted } from './inserted';
import { linkFormat } from './links/link-format';
import { linkText } from './link-text';
import { list } from './list';
import { monospace } from './monospace';
import { quadrupleDashSymbol } from './quadruple-dash-symbol';
import { ruler } from './ruler';
import { strong } from './strong';
import { subscript } from './subscript';
import { superscript } from './superscript';
import { table } from './table';
import { tripleDashSymbol } from './triple-dash-symbol';
import { panelMacro } from './panel-macro';
import { adfMacro } from './adf-macro';
import { anchorMacro } from './anchor-macro';
import { codeMacro } from './code-macro';
import { quoteMacro } from './quote-macro';
import { colorMacro } from './color-macro';
import { noformatMacro } from './noformat-macro';
import { forceLineBreak } from './force-line-break';
import { issueKey } from './issue-key';
export let TokenType = /*#__PURE__*/function (TokenType) {
TokenType["ADF_MACRO"] = "ADF_MACRO";
// {adf}
TokenType["ANCHOR_MACRO"] = "ANCHOR_MACRO";
// {anchor}
TokenType["CODE_MACRO"] = "CODE_MACRO";
// {code}
TokenType["QUOTE_MACRO"] = "QUOTE_MACRO";
// {quote}
TokenType["NOFORMAT_MACRO"] = "NOFORMAT_MACRO";
// {noformat}
TokenType["PANEL_MACRO"] = "PANEL_MACRO";
// {panel}
TokenType["COLOR_MACRO"] = "COLOR_MACRO";
// {color}
TokenType["LOREM_MACRO"] = "LOREM_MACRO";
// {loremipsum}
TokenType["QUOTE"] = "QUOTE";
TokenType["STRING"] = "STRING";
TokenType["ISSUE_KEY"] = "ISSUE_KEY";
TokenType["LINK_FORMAT"] = "LINK_FORMAT";
TokenType["LINK_TEXT"] = "LINK_TEXT";
TokenType["MEDIA"] = "MEDIA";
TokenType["HEADING"] = "HEADING";
TokenType["LIST"] = "LIST";
TokenType["TABLE"] = "TABLE";
TokenType["RULER"] = "RULER";
TokenType["HARD_BREAK"] = "HARD_BREAK";
// \\, \r, \n, \r\n
TokenType["DOUBLE_DASH_SYMBOL"] = "DOUBLE_DASH_SYMBOL";
// --
TokenType["TRIPLE_DASH_SYMBOL"] = "TRIPLE_DASH_SYMBOL";
// ---
TokenType["QUADRUPLE_DASH_SYMBOL"] = "QUADRUPLE_DASH_SYMBOL";
// ----
TokenType["STRONG"] = "STRONG";
// *strong*
TokenType["MONOSPACE"] = "MONOSPACE";
// {{text}}
TokenType["SUPERSCRIPT"] = "SUPERSCRIPT";
// ^superscript^
TokenType["SUBSCRIPT"] = "SUBSCRIPT";
// ^subscript^
TokenType["EMPHASIS"] = "EMPHASIS";
// _emphasis_
TokenType["CITATION"] = "CITATION";
// ??citation??
TokenType["DELETED"] = "DELETED";
// -deleted-
TokenType["INSERTED"] = "INSERTED";
// +deleted+
TokenType["EMOJI"] = "EMOJI";
// :)
TokenType["FORCE_LINE_BREAK"] = "FORCE_LINE_BREAK"; // \\
return TokenType;
}({});
const tokenToTokenParserMapping = {
[]: doubleDashSymbol,
[]: tripleDashSymbol,
[]: quadrupleDashSymbol,
[]: ruler,
[]: strong,
[]: monospace,
[]: superscript,
[]: subscript,
[]: emphasis,
[]: citation,
[]: deleted,
[]: inserted,
[]: hardbreak,
[]: linkFormat,
[]: linkText,
[]: heading,
[]: media,
[]: list,
[]: blockquote,
[]: table,
[]: emoji,
[]: adfMacro,
[]: anchorMacro,
[]: codeMacro,
[]: quoteMacro,
[]: noformatMacro,
[]: panelMacro,
[]: colorMacro,
[]: forceLineBreak,
[]: issueKey
};
export function parseToken(input, type, position, schema, context) {
const tokenParser = tokenToTokenParserMapping[type];
if (tokenParser) {
try {
return tokenParser({
input,
position,
schema,
context
});
} catch (err) {
if (context.tokenErrCallback && err instanceof Error) {
context.tokenErrCallback(err, type);
}
return fallback(input, position);
}
}
return fallback(input, position);
}
function fallback(input, position) {
return {
type: 'text',
text: input.substr(position, 1),
length: 1
};
}