Add multiline math syntax
Co-authored-by: syuilo <syuilotan@yahoo.co.jp>
This commit is contained in:
		
							parent
							
								
									4398651841
								
							
						
					
					
						commit
						79d2374d8e
					
				
					 6 changed files with 62 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
<template>
 | 
			
		||||
<span v-html="compiledFormula"></span>
 | 
			
		||||
<div v-if="block" v-html="compiledFormula"></div>
 | 
			
		||||
<span v-else v-html="compiledFormula"></span>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +12,10 @@ export default Vue.extend({
 | 
			
		|||
		formula: {
 | 
			
		||||
			type: String,
 | 
			
		||||
			required: true
 | 
			
		||||
		},
 | 
			
		||||
		block: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			required: true
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<template>
 | 
			
		||||
<x-formula :formula="formula"/>
 | 
			
		||||
<x-formula :formula="formula" :block="block" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,10 @@ export default Vue.extend({
 | 
			
		|||
		formula: {
 | 
			
		||||
			type: String,
 | 
			
		||||
			required: true
 | 
			
		||||
		},
 | 
			
		||||
		block: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			required: true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -228,12 +228,24 @@ export default Vue.component('misskey-flavored-markdown', {
 | 
			
		|||
					})];
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				case 'math': {
 | 
			
		||||
				case 'mathInline': {
 | 
			
		||||
					//const MkFormula = () => import('./formula.vue').then(m => m.default);
 | 
			
		||||
					return [createElement(MkFormula, {
 | 
			
		||||
						key: Math.random(),
 | 
			
		||||
						props: {
 | 
			
		||||
							formula: token.node.props.formula
 | 
			
		||||
							formula: token.node.props.formula,
 | 
			
		||||
							block: false
 | 
			
		||||
						}
 | 
			
		||||
					})];
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				case 'mathBlock': {
 | 
			
		||||
					//const MkFormula = () => import('./formula.vue').then(m => m.default);
 | 
			
		||||
					return [createElement(MkFormula, {
 | 
			
		||||
						key: Math.random(),
 | 
			
		||||
						props: {
 | 
			
		||||
							formula: token.node.props.formula,
 | 
			
		||||
							block: true
 | 
			
		||||
						}
 | 
			
		||||
					})];
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,13 @@ export default (tokens: MfmForest, mentionedRemoteUsers: INote['mentionedRemoteU
 | 
			
		|||
			return el;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		math(token) {
 | 
			
		||||
		mathInline(token) {
 | 
			
		||||
			const el = doc.createElement('code');
 | 
			
		||||
			el.textContent = token.node.props.formula;
 | 
			
		||||
			return el;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		mathBlock(token) {
 | 
			
		||||
			const el = doc.createElement('code');
 | 
			
		||||
			el.textContent = token.node.props.formula;
 | 
			
		||||
			return el;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,7 +103,8 @@ const mfm = P.createLanguage({
 | 
			
		|||
		r.blockCode,
 | 
			
		||||
		r.inlineCode,
 | 
			
		||||
		r.quote,
 | 
			
		||||
		r.math,
 | 
			
		||||
		r.mathInline,
 | 
			
		||||
		r.mathBlock,
 | 
			
		||||
		r.search,
 | 
			
		||||
		r.title,
 | 
			
		||||
		r.center,
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +122,7 @@ const mfm = P.createLanguage({
 | 
			
		|||
			r.mention,
 | 
			
		||||
			r.hashtag,
 | 
			
		||||
			r.emoji,
 | 
			
		||||
			r.math,
 | 
			
		||||
			r.mathInline,
 | 
			
		||||
			r.text
 | 
			
		||||
		).atLeast(1).tryParse(x), {})),
 | 
			
		||||
	//#endregion
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +136,7 @@ const mfm = P.createLanguage({
 | 
			
		|||
			r.mention,
 | 
			
		||||
			r.hashtag,
 | 
			
		||||
			r.emoji,
 | 
			
		||||
			r.math,
 | 
			
		||||
			r.mathInline,
 | 
			
		||||
			r.text
 | 
			
		||||
		).atLeast(1).tryParse(x), {})),
 | 
			
		||||
	//#endregion
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +181,7 @@ const mfm = P.createLanguage({
 | 
			
		|||
			r.mention,
 | 
			
		||||
			r.hashtag,
 | 
			
		||||
			r.emoji,
 | 
			
		||||
			r.math,
 | 
			
		||||
			r.mathInline,
 | 
			
		||||
			r.url,
 | 
			
		||||
			r.link,
 | 
			
		||||
			r.text
 | 
			
		||||
| 
						 | 
				
			
			@ -274,10 +275,16 @@ const mfm = P.createLanguage({
 | 
			
		|||
		}),
 | 
			
		||||
	//#endregion
 | 
			
		||||
 | 
			
		||||
	//#region Math
 | 
			
		||||
	math: r =>
 | 
			
		||||
	//#region Math (inline)
 | 
			
		||||
	mathInline: r =>
 | 
			
		||||
		P.regexp(/\\\((.+?)\\\)/, 1)
 | 
			
		||||
		.map(x => createLeaf('math', { formula: x })),
 | 
			
		||||
		.map(x => createLeaf('mathInline', { formula: x })),
 | 
			
		||||
	//#endregion
 | 
			
		||||
 | 
			
		||||
	//#region Math (block)
 | 
			
		||||
	mathBlock: r =>
 | 
			
		||||
		P.regexp(/\\\[([\s\S]+?)\\\]/, 1)
 | 
			
		||||
		.map(x => createLeaf('mathBlock', { formula: x.trim() })),
 | 
			
		||||
	//#endregion
 | 
			
		||||
 | 
			
		||||
	//#region Mention
 | 
			
		||||
| 
						 | 
				
			
			@ -311,7 +318,7 @@ const mfm = P.createLanguage({
 | 
			
		|||
			r.emoji,
 | 
			
		||||
			r.url,
 | 
			
		||||
			r.link,
 | 
			
		||||
			r.math,
 | 
			
		||||
			r.mathInline,
 | 
			
		||||
			r.text
 | 
			
		||||
		).atLeast(1).tryParse(x), {})),
 | 
			
		||||
	//#endregion
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue