のように解析YAML Front Matter
しなければならないので、ソースコードを調べたところ、これが見つかりましたが、あまり意味がありません(ルビーはあまり知りません)。java
jekyll
私の質問は、YAML Front Matter
Java で解析するにはどうすればよいですか?
クラスパスにsnakeyamlがあり、pegdownを使用YAML Front Matter
するマークダウンファイルから解析します
void parse(Reader r) throws IOException {
BufferedReader br = new BufferedReader(r);
// detect YAML front matter
String line = br.readLine();
while (line.isEmpty()) line = br.readLine();
if (!line.matches("[-]{3,}")) { // use at least three dashes
throw new IllegalArgumentException("No YAML Front Matter");
}
final String delimiter = line;
// scan YAML front matter
StringBuilder sb = new StringBuilder();
line = br.readLine();
while (!line.equals(delimiter)) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
// parse data
parseYamlFrontMatter(sb.toString());
parseMarkdownOrWhatever(br);
}
取得するにReader
は、おそらくFileReader
またはが必要InputStreamReader
です。
フロントの問題だけに興味がある場合は、SnakeYaml の loadAll メソッドを使用できます。
Object yamlFrontMatter(Yaml yaml, InputStream in) {
return yaml.loadAll().iterator().next();
}
SnakeYaml は、最初の yaml 構造 (前付け) のみを読み取り、末尾の yaml 以外のテキストを無視します。
残念ながら、SnakeYaml には残りのテキストを出力する洗練された方法がないため、前付と本文の両方を同時に解析したい場合、このアプローチには利点がありません :-(
わかりました、あなたのコメントはあなたの質問が何であるかを明確にしたので:
yaml フロント マターは、3 つのダッシュ ( ---
) で囲まれた行の内側にあるすべてです。YAML フロント マターは常にファイルの先頭にあります。
したがって、ファイルを解析して、ファイルの先頭から YAML Front Matter を抽出するだけです。オートマトンまたは正規表現で解析できます。それは本当にあなた次第です。構造は常に同じです。
--- ここにいくつかの YAML --- Markdown / テキスタイル / ファイルの HTML 内容