summaryrefslogtreecommitdiff
path: root/src/mfm
diff options
context:
space:
mode:
authorOni-Men <sensyaheis@gmail.com>2020-03-06 22:51:50 +0900
committerGitHub <noreply@github.com>2020-03-06 22:51:50 +0900
commita471e4b7831ed71975301579365ae32472c9005a (patch)
tree1001a771b6ed9dd6f0979144edb28e146a8d0121 /src/mfm
parentチャートInsert時にロックをかけるように (#6100) (diff)
downloadmisskey-a471e4b7831ed71975301579365ae32472c9005a.tar.gz
misskey-a471e4b7831ed71975301579365ae32472c9005a.tar.bz2
misskey-a471e4b7831ed71975301579365ae32472c9005a.zip
MFMをテキストに戻す (#6131)
* Disable Nyaize in quote * mfmを文字列に戻す、nyaizeにmfmを使用 * Revert "Disable Nyaize in quote" This reverts commit 1b238905a5535267d32d7e1aec8afd8bb07b0619. * refactor * use return type as string
Diffstat (limited to 'src/mfm')
-rw-r--r--src/mfm/toString.ts112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/mfm/toString.ts b/src/mfm/toString.ts
new file mode 100644
index 0000000000..5b53105b32
--- /dev/null
+++ b/src/mfm/toString.ts
@@ -0,0 +1,112 @@
+import { MfmForest, MfmTree } from './prelude';
+import { nyaize } from '../misc/nyaize';
+
+export type RestoreOptions = {
+ doNyaize?: boolean;
+};
+
+export function toString(tokens: MfmForest | null, opts?: RestoreOptions): string {
+
+ if (tokens === null) return '';
+
+ function appendChildren(children: MfmForest, opts?: RestoreOptions): string {
+ return children.map(t => handlers[t.node.type](t, opts)).join('');
+ }
+
+ const handlers: { [key: string]: (token: MfmTree, opts?: RestoreOptions) => string } = {
+ bold(token, opts) {
+ return `**${appendChildren(token.children, opts)}**`;
+ },
+
+ big(token, opts) {
+ return `***${appendChildren(token.children, opts)}***`;
+ },
+
+ small(token, opts) {
+ return `<small>${appendChildren(token.children, opts)}</small>`;
+ },
+
+ strike(token, opts) {
+ return `~~${appendChildren(token.children, opts)}~~`;
+ },
+
+ italic(token, opts) {
+ return `<i>${appendChildren(token.children, opts)}</i>`;
+ },
+
+ motion(token, opts) {
+ return `<motion>${appendChildren(token.children, opts)}</motion>`;
+ },
+
+ spin(token, opts) {
+ return `<spin>${appendChildren(token.children, opts)}</spin>`;
+ },
+
+ jump(token, opts) {
+ return `<jump>${appendChildren(token.children, opts)}</jump>`;
+ },
+
+ flip(token, opts) {
+ return `<flip>${appendChildren(token.children, opts)}</flip>`;
+ },
+
+ blockCode(token) {
+ return `\`\`\`${token.node.props.lang || ''}\n${token.node.props.code}\n\`\`\`\n`;
+ },
+
+ center(token, opts) {
+ return `<center>${appendChildren(token.children, opts)}</center>`;
+ },
+
+ emoji(token) {
+ return (token.node.props.emoji ? token.node.props.emoji : `:${token.node.props.name}:`);
+ },
+
+ hashtag(token) {
+ return `#${token.node.props.hashtag}`;
+ },
+
+ inlineCode(token) {
+ return `\`${token.node.props.code}\``;
+ },
+
+ mathInline(token) {
+ return `\\(${token.node.props.formula}\\)`;
+ },
+
+ mathBlock(token) {
+ return `\\[${token.node.props.formula}\\]`;
+ },
+
+ link(token, opts) {
+ return `[${appendChildren(token.children, opts)}](${token.node.props.url})`;
+ },
+
+ mention(token) {
+ return token.node.props.canonical;
+ },
+
+ quote(token) {
+ return `${appendChildren(token.children, {doNyaize: false}).replace(/^/gm,'>').trim()}\n`;
+ },
+
+ title(token, opts) {
+ return `[${appendChildren(token.children, opts)}]\n`;
+ },
+
+ text(token, opts) {
+ return (opts && opts.doNyaize) ? nyaize(token.node.props.text) : token.node.props.text;
+ },
+
+ url(token) {
+ return `<${token.node.props.url}>`;
+ },
+
+ search(token, opts) {
+ const query = token.node.props.query;
+ return `${(opts && opts.doNyaize ? nyaize(query) : query)} [search]\n`;
+ }
+ };
+
+ return appendChildren(tokens, { doNyaize: (opts && opts.doNyaize) || false }).trim();
+}