From 98e93bc4e552f4557b273c30632c973b291a9271 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 31 Aug 2025 15:50:22 +0300 Subject: fix --- lib/html.source.sh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'lib/html.source.sh') diff --git a/lib/html.source.sh b/lib/html.source.sh index f6ee8e6..1d5b34c 100644 --- a/lib/html.source.sh +++ b/lib/html.source.sh @@ -130,7 +130,10 @@ html::source_highlight () { local -r bare_text="$1"; shift local -r language="$1"; shift - if [[ -z "$language" || -z "$SOURCE_HIGHLIGHT" ]]; then + # Trim whitespace from language (handles cases like "``` ") + local -r lang_trimmed="$($SED -E 's/^ +| +$//g' <<< "$language")" + + if [[ -z "$lang_trimmed" || -z "$SOURCE_HIGHLIGHT" ]]; then echo '
'
         html::encode "$bare_text"
         echo '
' @@ -140,14 +143,18 @@ html::source_highlight () { style_css="--style-css-file=$SOURCE_HIGHLIGHT_CSS" fi - if [[ "$language" == "AUTO" ]]; then + if [[ "$lang_trimmed" == "AUTO" ]]; then log WARN "GNU Source Highlight auto detection not yet supported!" echo '
'
             html::encode "$bare_text"
             echo '
' else - $SOURCE_HIGHLIGHT --src-lang="$language" "$style_css" <<< "$bare_text" | - $SED 's|||; s|||;' + # Build command safely to avoid empty args and word splitting + local -a cmd=("$SOURCE_HIGHLIGHT" "--src-lang=$lang_trimmed") + if [ -n "$SOURCE_HIGHLIGHT_CSS" ]; then + cmd+=("--style-css-file=$SOURCE_HIGHLIGHT_CSS") + fi + "${cmd[@]}" <<< "$bare_text" | $SED 's|||; s|||;' fi fi } @@ -217,7 +224,8 @@ $line" echo "
  • $(html::list::encode "${line/\* /}")
  • " | html::process_inline ;; '```'*) - language=$(cut -d'`' -f4 <<< "$line") + # Extract language after the opening backticks and trim spaces + language=$($SED -E 's/^```\s*//; s/\s+$//' <<< "$line") is_bare=yes ;; '# '*) @@ -338,6 +346,15 @@ this assert::equals "$(html::fromgmi <<< "$input_block")" "$output_block" + # Trailing space after fence should not trigger source-highlight + input_block='``` +code +```' + output_block='
    +code
    +
    ' + assert::equals "$(html::fromgmi <<< "$input_block")" "$output_block" + if [ -n "$SOURCE_HIGHLIGHT" ]; then input_block='```bash if [ -z $foo ]; then -- cgit v1.2.3