0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitBucket Markdown Enhanced Plugin 独自のインライン記法を表に入れると例外が発生し描画ができない問題を解消しました

Posted at

概要

GitBucket用のプラグイン GitBucket Markdown Enhanced Pluginを開発しています。

GitBucket Markdown Enhanced Plugin は、GitBucket 標準のマークダウンレンダリングエンジンを置き換えるプラグインです。

目標は、Visual Studio CodeMarkdown Preview Enhanced 向けの markdown ファイルを軽易に Web で共有できる環境です。

今まで以下のインライン要素を独自で追加してきました。

ところが、数式の記法について職場向けに説明を作っている際に表に埋め込むと例外が発生して描画に失敗する事象に気づいたので対処した話です。

前回の記事

表に独自のインライン要素を入れる例外が発生し描画に失敗していた

KaTeX による数式を表に埋め込むと以下の例外が発生してページ全体の表示ができない問題に気づきました。

java.lang.StringIndexOutOfBoundsException: endIndex: 321 out of range: [0, 0]

この際、flexmark-javaGitLab Flavoured Markdown という拡張機能による記法では、同事象は発生しませんでした。

GitLab Flavoured Markdown での処理を調査してみる

GitLab Flavoured Markdown における 数式用の AST1 用ノードは、flexmark-ext-gitlab/src/main/java/com/vladsch/flexmark/ext/gitlab/GitLabInlineMath.java で定義されていました。

flexmark-ext-gitlab/src/main/java/com/vladsch/flexmark/ext/gitlab/GitLabInlineMath.java
public class GitLabInlineMath extends Node implements DelimitedNode {

src/main/scala/io/github/yasumichi/gme/InlineKaTeX.scala との違いは、com.vladsch.flexmark.util.ast.Node クラスを継承するだけではなく、com.vladsch.flexmark.util.ast.DelimitedNode インターフェースを同時に継承していることです。

同様の方法に実装を修正すれば、問題に対処できるのではないか思い、インラインパーサーの処理を確認してみることにしました。

GitLab Flavoured Markdown における 数式用のインラインパーサーは、flexmark-ext-gitlab/src/main/java/com/vladsch/flexmark/ext/gitlab/internal/GitLabInlineMathParser.javaで定義されていました。

対処を行ったコミット

調査を元に対処を行ったのが以下3つのコミットです。(数式、マーク、自動リンクの順)

数式とマークは、com.vladsch.flexmark.util.ast.DelimitedNode インターフェースを継承しました。

自動リンクは、対象部分を囲む書式がないので com.vladsch.flexmark.util.ast インターフェースを継承するようにしました。

以上で表に埋め込んでも例外が発生しないようになりました。

参考リンク

  1. AST : Abstract Syntax Tree 、日本語では抽象構文木と訳される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?