-
Notifications
You must be signed in to change notification settings - Fork 3
Termコンポーネントを書くための[[用語]]記法を導入
#898
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Deploying utcode-learn with
|
| Latest commit: |
0913a74
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://a1936672.utcode-learn.pages.dev |
| Branch Preview URL: | https://add-remark-term.utcode-learn.pages.dev |
e786566 to
8a96283
Compare
5fdced0 to
a0180af
Compare
a0180af to
996b744
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
「JavaScriptことはじめ」の節全体のみに、新しい記法を取り入れました。
| import type { Nodes, Root, RootContent } from "mdast"; | ||
| import { phrasing } from "mdast-util-phrasing"; | ||
|
|
||
| const remarkTerm: Plugin<[], Root> = () => (tree) => transform(tree); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| @@ -0,0 +1,114 @@ | |||
| import type { Plugin } from "unified"; | |||
| import type { Nodes, Root, RootContent } from "mdast"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| continue; | ||
| } | ||
|
|
||
| if (!phrasing(innerElement)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MdxJsxTextElement.childrenプロパティの型はArray<PhrasingContent>でありここで絞り込みをする必要があるため、mdast-util-phrasingパッケージのphrasing関数を使用しています。
cf. https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/readme.md#mdxjsxtextelement
cf. https://github.com/syntax-tree/mdast-util-phrasing
| } | ||
| if (segmentedText.startsWith("[[")) { | ||
| transformedChildren.push({ | ||
| type: "mdxJsxTextElement", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Termコンポーネントを表すASTのノードは、MdxJsxTextElementです。
https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/readme.md#mdxjsxtextelement
| @@ -0,0 +1,116 @@ | |||
| import type { Plugin } from "unified"; | |||
| import type { Nodes, Root, RootContent } from "mdast"; | |||
| import "mdast-util-mdx-jsx"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mdast-util-mdx-jsxによって、mdastの型に、MDX JSXに関する型が拡張されています。
https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/index.d.ts#L254-L279
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/86f44b5ee78b2ea5c25b8deb9f6f5d846042cf56/types/mdast/index.d.ts#L301-L307
Termコンポーネントを書くための[[用語]]記法を導入しました。この記法にした理由としては、Wikipediaなどでも使用されているようによく使われている直感的な記法であること、入力が極めて容易であること、将来的に記法を拡張する余地があることが挙げられます。仕様は、TSDocの通りで、
[[用語]]のように中身がテキストの場合、あるいは[[**用語**]]のように中身が単一のASTノードである場合のみ、正しくパースされます。参考