parent
							
								
									e5d9381503
								
							
						
					
					
						commit
						4de62220e3
					
				|  | @ -8,6 +8,7 @@ unreleased | ||||||
| * 管理画面のモデレーションのUIを強化 | * 管理画面のモデレーションのUIを強化 | ||||||
| * 管理画面からリモートユーザーの情報を更新できるように | * 管理画面からリモートユーザーの情報を更新できるように | ||||||
| * 回転構文の追加 | * 回転構文の追加 | ||||||
|  | * 左右反転構文の追加 | ||||||
| * シンタックスハイライトの強化 | * シンタックスハイライトの強化 | ||||||
| * 引用投稿を削除したとき単なるRenoteとしてタイムラインに残る問題を修正 | * 引用投稿を削除したとき単なるRenoteとしてタイムラインに残る問題を修正 | ||||||
| * イタリック構文の判定の改善 | * イタリック構文の判定の改善 | ||||||
|  |  | ||||||
|  | @ -135,6 +135,14 @@ export default Vue.component('misskey-flavored-markdown', { | ||||||
| 					}, genEl(token.children)); | 					}, genEl(token.children)); | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  | 				case 'flip': { | ||||||
|  | 					return (createElement as any)('span', { | ||||||
|  | 						attrs: { | ||||||
|  | 							style: 'display: inline-block; transform: scaleX(-1);' | ||||||
|  | 						}, | ||||||
|  | 					}, genEl(token.children)); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
| 				case 'url': { | 				case 'url': { | ||||||
| 					return [createElement(MkUrl, { | 					return [createElement(MkUrl, { | ||||||
| 						key: Math.random(), | 						key: Math.random(), | ||||||
|  |  | ||||||
|  | @ -61,6 +61,12 @@ export default (tokens: MfmForest, mentionedRemoteUsers: INote['mentionedRemoteU | ||||||
| 			return el; | 			return el; | ||||||
| 		}, | 		}, | ||||||
| 
 | 
 | ||||||
|  | 		flip(token) { | ||||||
|  | 			const el = doc.createElement('span'); | ||||||
|  | 			appendChildren(token.children, el); | ||||||
|  | 			return el; | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
| 		blockCode(token) { | 		blockCode(token) { | ||||||
| 			const pre = doc.createElement('pre'); | 			const pre = doc.createElement('pre'); | ||||||
| 			const inner = doc.createElement('code'); | 			const inner = doc.createElement('code'); | ||||||
|  |  | ||||||
|  | @ -102,6 +102,7 @@ const mfm = P.createLanguage({ | ||||||
| 		r.hashtag, | 		r.hashtag, | ||||||
| 		r.emoji, | 		r.emoji, | ||||||
| 		r.blockCode, | 		r.blockCode, | ||||||
|  | 		r.flip, | ||||||
| 		r.inlineCode, | 		r.inlineCode, | ||||||
| 		r.quote, | 		r.quote, | ||||||
| 		r.math, | 		r.math, | ||||||
|  | @ -173,6 +174,7 @@ const mfm = P.createLanguage({ | ||||||
| 			r.hashtag, | 			r.hashtag, | ||||||
| 			r.url, | 			r.url, | ||||||
| 			r.link, | 			r.link, | ||||||
|  | 			r.flip, | ||||||
| 			r.emoji, | 			r.emoji, | ||||||
| 			r.text | 			r.text | ||||||
| 		).atLeast(1).tryParse(x), {})), | 		).atLeast(1).tryParse(x), {})), | ||||||
|  | @ -195,6 +197,7 @@ const mfm = P.createLanguage({ | ||||||
| 			r.math, | 			r.math, | ||||||
| 			r.url, | 			r.url, | ||||||
| 			r.link, | 			r.link, | ||||||
|  | 			r.flip, | ||||||
| 			r.text | 			r.text | ||||||
| 		).atLeast(1).tryParse(x), {})), | 		).atLeast(1).tryParse(x), {})), | ||||||
| 	//#endregion
 | 	//#endregion
 | ||||||
|  | @ -228,6 +231,23 @@ const mfm = P.createLanguage({ | ||||||
| 		}), | 		}), | ||||||
| 	//#endregion
 | 	//#endregion
 | ||||||
| 
 | 
 | ||||||
|  | 	//#region Flip
 | ||||||
|  | 	flip: r => | ||||||
|  | 		P.regexp(/<flip>(.+?)<\/flip>/, 1) | ||||||
|  | 		.map(x => createTree('flip', P.alt( | ||||||
|  | 			r.big, | ||||||
|  | 			r.small, | ||||||
|  | 			r.spin, | ||||||
|  | 			r.bold, | ||||||
|  | 			r.strike, | ||||||
|  | 			r.link, | ||||||
|  | 			r.italic, | ||||||
|  | 			r.motion, | ||||||
|  | 			r.emoji, | ||||||
|  | 			r.text | ||||||
|  | 		).atLeast(1).tryParse(x), {})), | ||||||
|  | 	//#endregion
 | ||||||
|  | 
 | ||||||
| 	//#region Inline code
 | 	//#region Inline code
 | ||||||
| 	inlineCode: r => | 	inlineCode: r => | ||||||
| 		P.regexp(/`([^´\n]+?)`/, 1) | 		P.regexp(/`([^´\n]+?)`/, 1) | ||||||
|  | @ -253,6 +273,7 @@ const mfm = P.createLanguage({ | ||||||
| 			r.hashtag, | 			r.hashtag, | ||||||
| 			r.url, | 			r.url, | ||||||
| 			r.link, | 			r.link, | ||||||
|  | 			r.flip, | ||||||
| 			r.emoji, | 			r.emoji, | ||||||
| 			r.text | 			r.text | ||||||
| 		).atLeast(1).tryParse(x), {})), | 		).atLeast(1).tryParse(x), {})), | ||||||
|  | @ -325,6 +346,7 @@ const mfm = P.createLanguage({ | ||||||
| 			r.emoji, | 			r.emoji, | ||||||
| 			r.url, | 			r.url, | ||||||
| 			r.link, | 			r.link, | ||||||
|  | 			r.flip, | ||||||
| 			r.math, | 			r.math, | ||||||
| 			r.text | 			r.text | ||||||
| 		).atLeast(1).tryParse(x), {})), | 		).atLeast(1).tryParse(x), {})), | ||||||
|  | @ -363,6 +385,7 @@ const mfm = P.createLanguage({ | ||||||
| 			r.hashtag, | 			r.hashtag, | ||||||
| 			r.url, | 			r.url, | ||||||
| 			r.link, | 			r.link, | ||||||
|  | 			r.flip, | ||||||
| 			r.emoji, | 			r.emoji, | ||||||
| 			r.text | 			r.text | ||||||
| 		).atLeast(1).tryParse(x), {})), | 		).atLeast(1).tryParse(x), {})), | ||||||
|  | @ -385,6 +408,7 @@ const mfm = P.createLanguage({ | ||||||
| 				r.motion, | 				r.motion, | ||||||
| 				r.url, | 				r.url, | ||||||
| 				r.link, | 				r.link, | ||||||
|  | 				r.flip, | ||||||
| 				r.mention, | 				r.mention, | ||||||
| 				r.hashtag, | 				r.hashtag, | ||||||
| 				r.emoji, | 				r.emoji, | ||||||
|  |  | ||||||
|  | @ -244,6 +244,15 @@ describe('MFM', () => { | ||||||
| 			]); | 			]); | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
|  | 		it('flip', () => { | ||||||
|  | 			const tokens = analyze('<flip>foo</flip>'); | ||||||
|  | 			assert.deepStrictEqual(tokens, [ | ||||||
|  | 				tree('flip', [ | ||||||
|  | 					text('flip') | ||||||
|  | 				], {}), | ||||||
|  | 			]); | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
| 		it('spin', () => { | 		it('spin', () => { | ||||||
| 			const tokens = analyze('<spin>:foo:</spin>'); | 			const tokens = analyze('<spin>:foo:</spin>'); | ||||||
| 			assert.deepStrictEqual(tokens, [ | 			assert.deepStrictEqual(tokens, [ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue