vivliostyle / vfm

⬇️ Open and extendable Markdown syntax and toolchain.
https://vivliostyle.github.io/vfm/#/vfm
Other
69 stars 12 forks source link

The --style command-line option is ignored #107

Closed MurakamiShinyu closed 3 years ago

MurakamiShinyu commented 3 years ago

Issue Details

1.0.0-alpha.23 で --style コマンドラインオプションが無視されるようになりました。

$ vfm --version
1.0.0-alpha.23
$ echo Hello | vfm --style style.css
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
    <p>Hello</p>
  </body>
</html>

前のバージョン 1.0.0-alpha.22 では正常でした:

$ vfm --version
1.0.0-alpha.22
$ echo Hello | vfm --style style.css
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <p>Hello</p>
  </body>
</html>

Expected Behavior

<link rel="stylesheet" href="style.css"> が出力されること。

Actual Behavior

<link rel="stylesheet" href="style.css"> が出力されない。

akabekobeko commented 3 years ago

原因判明。

index.tscheckMetadatametadata からコピーしている。しかし link 処理について result ではなく元の metadata を対象としているため変更が反映されていない。Frontmatter 側に一つでも link が定義されているならその Array 参照もコピーされるため処理の関係上、問題なく動作している。テスト コード metadata.test.tsStyles from options はこの状態になっていたためこの問題に気づけなかった。

修正時には Frontmatter のみの link は他方で検証されているため、本 Issue のように「オプションの style 指定のみ」としてテスト名は Styles from options (String)Styles from options (String[]) に分けるのがよいだろう。

akabekobeko commented 3 years ago

106 対応と共に本件を修正して alpha.24 をリリース予定。

akabekobeko commented 3 years ago

checkMetadata は冪等性を考慮して metadataresult へコピーしてから処理している。しかし metadata はネストされた ArrayObject を持つため厳密な Deep Copy をしないと冪等性は保証されない。

metadata そのものは #106 で外部プログラムが取得可能となったのと checkMetadataVFM から呼ばれ、かつ options を加味して

となりデータ損失があるわけでもないため冪等性にこだわるよりも本件のような事故を防ぐためにも metadata を直に更新するよう設計変更する。

akabekobeko commented 3 years ago

109 にて対応して v1.0.0-alpha.24 をリリースしたので close します。