Class: Nexmo::Markdown::CodeFilter
- Inherits:
-
Banzai::Filter
- Object
- Banzai::Filter
- Nexmo::Markdown::CodeFilter
- Defined in:
- lib/nexmo_markdown_renderer/filters/code_filter.rb
Instance Method Summary collapse
Methods included from Nexmo::Markdown::Concerns::PrismCodeSnippet
#code_language_to_prism, #code_snippet_body, #prism_css_classes
Instance Method Details
#call(input) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/nexmo_markdown_renderer/filters/code_filter.rb', line 6 def call(input) input.gsub(/(?!.*snippet)```code(.+?)```/m) do |_s| config = YAML.safe_load($1) if config['config'] configs = YAML.load_file("#{Nexmo::Markdown::Config.docs_base_path}/config/code_examples.yml") config = config['config'].split('.').inject(configs) { |h, k| h[k] } end code = File.read("#{Nexmo::Markdown::Config.docs_base_path}/#{config['source']}") language = File.extname("#{Nexmo::Markdown::Config.docs_base_path}/#{config['source']}")[1..-1] lexer = language_to_lexer(language) total_lines = code.lines.count # Minus one since lines are not zero-indexed from_line = (config['from_line'] || 1) - 1 to_line = (config['to_line'] || total_lines) - 1 code = code.lines[from_line..to_line].join code.unindent! if config['unindent'] highlighted_source = highlight(code, lexer) code_snippet_body(lexer, highlighted_source) end end |