From d371a1c8178e40a93d2c7e35812d6f8956f26de4 Mon Sep 17 00:00:00 2001 From: Maxim Belkin Date: Mon, 15 Feb 2021 14:36:29 -0600 Subject: [PATCH] Fix Kramdown parser crash ... by using GFM (GitHub-flavored Markdown) parser (`kramdown-parser-gfm`) instead of the default one (`kramdown`). The default one fails to produce an AST (Abstract Syntax Tree) when there is no blank line before the line with the opening code fence. Related: - gettalong/kramdown#530 - Python-Markdown/markdown#807 Fixes: carpentries/styles#543 --- .github/workflows/template.yml | 2 +- .github/workflows/website.yml | 2 +- bin/markdown_ast.rb | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/template.yml b/.github/workflows/template.yml index 84015e4d..c1e52b1b 100644 --- a/.github/workflows/template.yml +++ b/.github/workflows/template.yml @@ -44,7 +44,7 @@ jobs: - name: Install GitHub Pages, Bundler, and kramdown gems run: | - gem install github-pages bundler kramdown + gem install github-pages bundler kramdown kramdown-parser-gfm - name: Install Python modules run: | diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index cb67828c..df79f6c5 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -28,7 +28,7 @@ jobs: - name: Install GitHub Pages, Bundler, and kramdown gems run: | - gem install github-pages bundler kramdown + gem install github-pages bundler kramdown kramdown-parser-gfm - name: Install Python modules run: | diff --git a/bin/markdown_ast.rb b/bin/markdown_ast.rb index 4fdb6843..0433c72f 100755 --- a/bin/markdown_ast.rb +++ b/bin/markdown_ast.rb @@ -1,12 +1,13 @@ #!/usr/bin/env ruby -# frozen_string_literal: true +# frozen-string-literal: true # Use Kramdown parser to produce AST for Markdown document. -require 'kramdown' -require 'json' +require "kramdown" +require "kramdown-parser-gfm" +require "json" -markdown = $stdin.read -doc = Kramdown::Document.new(markdown) +markdown = STDIN.read() +doc = Kramdown::Document.new(markdown, input: 'GFM', hard_wrap: false) tree = doc.to_hash_a_s_t puts JSON.pretty_generate(tree)