From bc9a8283c66d7588f931d4b802f7ab1fa7aa3226 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 13 Nov 2017 18:05:35 +0900 Subject: なんかもうめっちゃ変えた MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/web/app/common/scripts/text-compiler.ts | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/web/app/common/scripts/text-compiler.ts (limited to 'src/web/app/common/scripts/text-compiler.ts') diff --git a/src/web/app/common/scripts/text-compiler.ts b/src/web/app/common/scripts/text-compiler.ts new file mode 100644 index 0000000000..8c65d6a068 --- /dev/null +++ b/src/web/app/common/scripts/text-compiler.ts @@ -0,0 +1,47 @@ +import * as riot from 'riot'; +import * as pictograph from 'pictograph'; +import CONFIG from './config'; + +const escape = text => + text + .replace(/>/g, '>') + .replace(/ { + if (shouldBreak == null) { + shouldBreak = true; + } + + const me = (riot as any).mixin('i').me; + + let text = tokens.map(token => { + switch (token.type) { + case 'text': + return escape(token.content) + .replace(/(\r\n|\n|\r)/g, shouldBreak ? '
' : ' '); + case 'bold': + return `${escape(token.bold)}`; + case 'url': + return ``; + case 'link': + return `${escape(token.title)}`; + case 'mention': + return `${token.content}`; + case 'hashtag': // TODO + return `${escape(token.content)}`; + case 'code': + return `
${token.html}
`; + case 'inline-code': + return `${token.html}`; + case 'emoji': + return pictograph.dic[token.emoji] || token.content; + } + }).join(''); + + // Remove needless whitespaces + text = text + .replace(/ /g, '').replace(/<\/code> /g, '') + .replace(/
/g, '
').replace(/<\/code><\/pre>
/g, '
'); + + return text; +}; -- cgit v1.2.3-freya