AsciiDocで条件で表示したい内容を変える方法


やりたいこと

  • ある条件に基づき、情報の出し分けをしたい

やったこと

  • 出し分けできるようにするには、パッと思いつくこととしてIF文みたいなものが使えないか?になる。
    • そこで、検索キーワードして"Asciidoc IF"で調べたところ
      • Conditionalsのサイトがヒットした
      • ほかのサイトを見たが、コードを表現するための書き方の中にある各言語のIF文だった
    • 上記のことから、Conditionalsのサイトを読んでみた
  • ifdef であればやりたいことができそうだったので、トライしてみた
    • ifdefの後に任意の属性を定義して、endif::[]で記載した間にコンテンツを記載するということだったので、書いてみた。
      • 表に行を追加して、条件を満たした場合に、人口の情報に関する表示ができるようにする
:imagesdir: ./images

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL[]
^|人口 | 5,224,614人 (8位)
endif::[]
|===
  • 上記で書いた場合、表はこのような感じ表現となり、人口に関する情報の表示はできなかった。
         

  • 属性を定義したが、この属性はどこからくるのかを考えると、定義されていないことに気づき、2行目に:MAPDETAIL: と定義してみた。

:imagesdir: ./images

:MAPDETAIL:

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL[]
^|人口 | 5,224,614人 (8位)
endif::[]
|===
  • 上記のように:MAPDETAIL: を記載したところ、人口の情報を表示することが以下のようにできました。
         

追加で試したこと1

  • ifdef は複数の属性を指定することができることがわかった、パターンが異なる場合に指定することでコントロールできることがわかった
    • 書き方としては、以下のような形で記載すれば、切り替えて使うことができました
:imagesdir: ./images

:MAPDETAIL1:
:MAPDETAIL2:

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifdef::MAPDETAIL1,MAPDETAIL2[]
^|人口 | 5,224,614人 (8位)
endif::[]
|===

追加で試したこと2

  • ifeval を使うことで、属性の持つ値を演算子を使って評価して、表示をコントロールすることができることも分かった。
    • 記載の仕方も、ifdef とあまり書き方は変わらなかった。
    • 扱う値が文字列か数値かで表現が変わるので注意が必要だった
数値を条件にした場合
:imagesdir: ./images
:MAPVAL: 4

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifeval::[{MAPVAL} >3 ]
^|人口 | 5,224,614人 (8位)
endif::[]
|===

   

文字列を条件にした場合
:imagesdir: ./images
:MAPVAL: "ON"

= 北海道・東北地方

北海道・東北地方は、北海道、青森県、秋田県、岩手県、山形県、宮城県、福島県の1道6県を指します。
気象予報などでは、北日本の区分に位置し、日本を東西に分けると東日本に位置する。 +
各県の形と県庁所在地を纏めておく。

== 北海道
[cols="1,2a", width=70%]
|===
^|県庁所在地 ^|札幌市 
^.^|地図 ^|image::hokkaido.png["北海道", 50%]
ifeval::["{MAPVAL}" == "ON" ]
^|人口 | 5,224,614人 (8位)
endif::[]
|===

   

まとめ

  • AsciiDoc に書くべき情報の全てを記載しておき、条件をうまく使って、標準版、拡張版、縮小版などのコントロールを上位のAsciiDocファイルから属性を渡せば、目的別にAsciiDocファイルを作り出して出力することができることがわかった

参考情報