Gaiden Filters/Extensionsæ´»ç¨ã®ã¹ã¹ã¡
ã¯ããã«
ä¹ ãã¶ãã®ããã°è¨äºã§ãã ãã®è¨äºã¯ãG* Advent Calendarã®13æ¥ç®ã¨ãã¦æ¸ãã¦ãã¾ãã æ¨æ¥ã¯ãããããã«ããGroovyã®ASTå¤æäºæ ã§ãææ¥ããããããã®äºå®ã§ãã
Gaidenã¨ã¯ï¼
æ°å¹´åã«Gaidenã¨ããããã¥ã¡ã³ã使ãã¼ã«ã²ã£ããã¨ãªãªã¼ã¹ãã¦ãå¼ç¤¾ã®ç¤¾å ã§ã¯ããããæ´»ç¨ãã¦ããããã¾ãã
ç¹å¾´ã¯ãâã¨ããæãã§ãã
- Markdownã§ã½ã¼ã¹ãå·çãã
- Sphinxã©ã¤ã¯ãªè¤æ°ãã¼ã¸ã®HTMLããã¥ã¡ã³ããçæã§ãã
- Gaidenã©ããã¼ã¨ããä»çµã¿ã§èªåã¤ã³ã¹ãã¼ã«ã§ããã®ã§ãJavaããããã°ããã«ãã«ãã§ãã
- Gaiden Extensionã¨ããä»çµã¿ã§ãèªç±ã«ã·ã³ã¿ãã¯ã¹ãæ¡å¼µã§ãã *1
Gaidenèªä½ã®ãã¼ã ãã¼ã¸ãGaidenã§çæãã¦ãã¾ãã ã¡ãªã¿ã«ãæä½ã®GroovyServã®ãã¼ã ãã¼ã¸ãåããGaiden製ã§ãã
Markdownã®è¨è¿°åã£ã¦ä½ããã§ããï¼
確ãã«GFM(Github Flavored Markdown)ã§ãããç¸å½ã·ã³ãã«ãªã®ã§ãããããã®åéã®ããã¥ã¡ã³ããå·çããã«ã¯Markdownã®è¨è¿°åã ã¨ä¸è¶³ã¬ãããããã¾ããã ãã®ç¹ãAsciidocã¯ããªãæ©è½ããªãããªã®ã§ãæ¨ä»ã人æ°ãé«ã¾ã£ã¦ãã¦ããæããããã¾ãã
ããããå人çã«ã¯Markdownã®ãã¬ã¼ã³ããã¹ããã¬ã³ããªãªã·ã³ãã«ãã好ããªã®ã§ããªãã¨ãMarkdownã§æ¸ãããããã§ãã
ããã§ãGaiden Filtersã®åºçªã§ãã
Gaiden Filters
ç°¡åã«ããã¨ãç°¡åãªGroovyã³ã¼ããæ¸ãã ãã§ãèªç±ã«ã·ã³ã¿ãã¯ã¹ãå¢ããããæ¡å¼µããããæ¾é¡ã§ããä»çµã¿ã§ãã
以ä¸ã®3ã¤ã®ã¿ã¤ãã³ã°ã§èªç±ã«ä»å ¥ãã¦ãèªç±ã«ããã¹ããç½®æã§ãã¾ãã
before
: Markdownã½ã¼ã¹ã®ããã¹ãafter
: Markdownã½ã¼ã¹ãã夿ãããHTMLæçã®ããã¹ãafterTemplate
: ãã³ãã¬ã¼ãã使ã£ã¦ã¬ã³ããªã³ã°ãããæçµçãªHTMLã®ããã¹ã
ãµã³ãã«: ãã¼ã¸ã§ã³ãè¨å®ãã¡ã¤ã«ã«å¤ã ããã¦ããã«ãæã«ç½®æãã
config.groovy
ã«ã以ä¸ã®ããã«è¨è¿°ããã ãã§ãã
before
ã«ä»£å
¥ããã¯ãã¼ã¸ã£ã®æ»ãå¤ã®ããã¹ããæ¬¡ã®ãã§ã¼ãº(ãã®å ´åã¯Markdowã®ã¬ã³ããªã³ã°)ã«æ¸¡ããã¾ãã
// in config.groovy ... version = "1.0.0" // Filters filters = { expandVersion { before = { text -> text.replaceAll(/(?m)<VERSION>/, version) } } }
ãã¨ã¯ãMarkdownã§ä»¥ä¸ã®ããã«VERSION
ã¨ããæåã使ã£ã¦ããã¥ã¡ã³ããæ¸ãã¾ãã
ãã®ããã¥ã¡ã³ãã®ãã¼ã¸ã§ã³ã¯VERSIONã§ãã
ããã§gaiden build
ãå®è¡ããã¨ãçæãããHTMLããã¥ã¡ã³ãã§ã¯
ãã®ããã¥ã¡ã³ãã®ãã¼ã¸ã§ã³ã¯1.0.0ã§ãã
ã¨ããã¼ã¸ã§ã³çªå·ãå±éããã¾ãã ã¨ã¦ãããããããã§ããã
Gaiden Extensions
Gaiden Filtersãç¸å½ä¾¿å©ãªã®ã§ãããã¥ã¡ã³ãããã¸ã§ã¯ããã¨ã«è²ã ãã£ã«ã¿å®è£ ã追å ãã¾ãã£ã¦ããã¨ãæ±ç¨æ§ã®é«ããã£ã«ã¿ãã§ããããã¦ãä»ã®ããã¥ã¡ã³ãããã¸ã§ã¯ãã§ãåããã£ã«ã¿ãå©ç¨ããããªã£ã¦ãã¾ãã
config.groovy
ã®ãã£ã«ã¿å®è£
ãã³ãããã¦ãããã®ã§ãããããã§ä¸æ©é²ãã§ãåå©ç¨å¯è½ãªã¢ã¸ã¥ã¼ã«ã§ããGaiden Extensionså½¢å¼ã«ãã¦ã¿ã¾ãããã
ã¨è¨ã£ã¦ã大ãããã®ã§ã¯ãªãã¦ãconfig.groovy
ã¨å¿
è¦ãªãªã½ã¼ã¹ãç¹å®ã®ãã£ã¬ã¯ããªã«æ¾ãè¾¼ãã ã ãã®æ§é ã§ãã
å ã»ã©ã®ãµã³ãã«ã®ããã«ä»ã®ãªã½ã¼ã¹ãä¸è¦ãªããæ¬¡ã®ããã«ã¨ã¦ãã·ã³ãã«ãªæ§é ã«ãªãã¾ãã
extensions/ âââ expandVersion âââ config.groovy
// in extensions/expandVersion/config.groovy filters = { expandVersion { before = { text -> text.replaceAll(/(?m)<VERSION>/, version) } } }
å ã»ã©ã®ãµã³ãã«ããã ã¨ã以ä¸ã®3æé ã§ç§»è¡ã§ãã¾ãã
extensions/expandVersion
ãã£ã¬ã¯ããªãçæããã- ç´ä¸ã®
config.groovy
ãextensions/expandVersion
é ä¸ã«ã³ãã¼ããã extensions/expandVersion/config.groovy
ãç·¨éãã¦ãå¿ è¦ãªfilters
以å¤ã®ã½ã¼ã¹ããã¹ã¦åé¤ããã
Gaidenã¯exntensions
ãã£ã¬ã¯ããªé
ä¸ã®åãã£ã¬ã¯ããªã®ä¸ã®config.groovy
ãé çªã«è©ä¾¡ãã¦ãããã®ã§ãå
ã»ã©ã¨å
¨ãåãããã«åä½ãã¾ãã
Gaiden Exntensionsã§Admonitionãå®ç¾ãã¦ã¿ã
ãã¦ãåå©ç¨æ§ã®é«ããªã¬ãªã¬ã·ã³ã¿ãã¯ã¹ã®ä½ãæ¹ãããã£ãã¨ããã§ãAsciidocã®ç´ æµæ©è½ã®ã²ã¨ã¤ã§ãã Admonition (ã¢ãã¢ãã·ã§ã³)ãGaiden Extensionsã§å®ç¾ãã¦ã¿ã¾ãããã
ããããã¤ãã§ãã
Markdownã®è¯ãã¨ããã¯ãã¬ã¼ã³ããã¹ãã¨ãã¦ã¿ã¦ãããããè¯ãæãã«èªãããã¨ããç¹ãªã®ã§ãããã¯è²ãã¾ããã ã¤ã¾ãããã¬ã¼ã³ããã¹ãã§ãè¯ãæãã«èªãããããªç¹æ®ãªã·ã³ã¿ãã¯ã¹ã決ãã¦ããããGaiden Filtersã®ä»çµã¿ã§Admonition表ç¾ã«ç½®æãããããªGaiden Extensionsãä½ãå¿ è¦ãããã¾ãã
ããã§ã¯ã以ä¸ã®ãããªã·ã³ã¿ãã¯ã¹ãå°å ¥ãã¦ã¿ã¾ãã
> **NOTE**: This is title! > > This is an admonition with title.
ãããã§ããããã å人çã«ã¯ãããªã«éããªãããæ®éã®Markdownã¨ãã¦ã¬ã³ããªã³ã°ãããçµæã¨ãã¦ãå²ã¨è¯ãæããªã®ã§ã¯ãªããã¨æãã¾ãããæçµçã«ã¯å人ã®ä¸»è¦³ã«ãä»»ããã¾ãã
ãã¨ã¯ãããããã«ãããã¨ä¸ã®ç»åã®ãããªã¬ã³ããªã³ã°çµæãå¾ãããããã«ç½®æãã¸ãã¯ãæ¸ãã°OKã§ãã
ã§ãã§ãããã£ãGaiden Extensionsãããã¡ãã®Gaiden Extension: Admonitionã«ãªãã¾ãã
filterã®å®è£ ã¯ãããªæãã§ãã
filters = { admonition { before = { text -> def converter = { all, type, title, lines -> def header = title ? """<div class="admonition-caption">$title</div>""" : "" return """<div class="admonition admonition-${type.toLowerCase()}"> | <div class="admonition-icon"> | <i class="fa"></i> | </div> | <div class="admonition-content" markdown="1"> | $header | ${lines.replaceAll(/(?m)^\s*>\s*?/, '')} | </div> |</div>""".stripMargin() } text. replaceAll(/(?ms)^> \*\*(NOTE|TIP|WARNING|IMPORTANT)\*\*(?::(.*?))?$(.*?)(?:^$|> ----)/, converter). // block replaceAll(/(?ms)^\*\*(NOTE|TIP|WARNING|IMPORTANT)\*\*:()(.*?)$/, converter) // inline } } }
ãªããCSSãã¡ã¤ã«ãassetsã¨ãã¦è¿½å ãã¦ããã¾ãã
extensions/admonition âââ assets â  âââ css â  âââ admonition.css âââ config.groovy
NOTE
ã ãã§ã¯ãªãã
ãªã©è¤æ°ç¨®é¡ã«å¯¾å¿ãã¦ãããä¸è¡ã§ã·ã³ãã«ã«æ¸ããããã¿ã¤ãã«ãã¤ãããããªã©ãããããªãããªæãã§ãã 詳ããã¯READMEãèªãã§ããã ããã°ãä½¿ãæ¹ããµãã¼ãããã·ã³ã¿ãã¯ã¹ãªã©ãããããã¨æãã¾ãã
å人çã«ã¯ãããã大å¤ä¾¿å©ã«è²ã ãªããã¥ã¡ã³ãããã¸ã§ã¯ãã§ä½¿ãã¾ãã£ã¦ã¾ãã
ãããã«
ãªã¬ãªã¬ã·ã³ã¿ãã¯ã¹ãå¢ãããããå¦ç¿ã³ã¹ããã¡ã³ããã³ã¹ã³ã¹ãã大å¤ãªã®ã§ã¯ãã¨ããæ¸å¿µãããã§ããããããã¼ãã¼èãããªãèãããªãã ã§ã¯ãªããã¾ãç¯åº¦ãæã£ã¦æ´»ç¨ããã°è¯ãããããªãã§ããããã
ã¨ããããã§ãå··ã§ã¯é常ã«ã¬ã¢ãªGaidenæ´»ç¨ãã¯ããã¯ããéããã¾ããã
åèãªã³ã¯
*1:ãªããç¾å¨ã®ãã¼ã¸ã§ã³ã§ã¯Windowsã®Gaidenã©ããã¼ã«ããã¤ã³ã¹ãã¼ã«æã«ãã¡ã¤ã«ãã¼ããã·ã§ã³é¢é£ã®ã¨ã©ã¼ãçºçãã¦ãã¾ãã¾ãããã¤ã³ã¹ãã¼ã«èªä½ã¯æåãã¦ãã¯ããªã®ã§ã¨ã©ã¼ã«ãããã«ããä¸åº¦Gaidenã³ãã³ããå®è¡ããã¨åãããããªããã¨æãã¾ãããã¶ãã