Class: Sourcerer::MarkDownGrade::CustomPre

Inherits:
ReverseMarkdown::Converters::Pre
  • Object
show all
Defined in:
lib/sourcerer/mark_down_grade.rb

Overview

Enhanced Pre converter to handle additional code block language patterns

Constant Summary collapse

MAP =
{
  'rb' => 'ruby',
  'yml' => 'yaml',
  'js' => 'javascript',
  'ts' => 'typescript',
  'sh' => 'bash',
  'zsh' => 'bash',
  'bash' => 'bash',
  'json' => 'json',
  'yaml' => 'yaml',
  'md' => 'markdown'
}.freeze

Instance Method Summary collapse

Instance Method Details

#language(node) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/sourcerer/mark_down_grade.rb', line 67

def language node
  # Parent handles highlight-*, brush:, etc.
  lang = super
  return normalize(lang) if lang

  candidates = []

  # 1) Inspect this <pre> and its <code> child
  code_child = node.at_css('code')
  [node, code_child].compact.each do |ele|
    collect_lang_hints(ele, candidates)
  end

  # 2) Inspect ancestors up to two levels (e.g., listingblock containers)
  node.ancestors.take(3).each do |anc|
    collect_lang_hints(anc, candidates)
  end

  candidates.compact!
  candidates.map! { |c| normalize(c) }
  candidates.find { |c| c } # first normalized non-nil
end