Class: Asciidoctor::SyntaxHighlighter::PygmentsAdapter
- Extended by:
- Styles
- Defined in:
- lib/asciidoctor/syntax_highlighter/pygments.rb
Defined Under Namespace
Constant Summary
Constants included from DefaultFactory
Instance Attribute Summary
Attributes included from Asciidoctor::SyntaxHighlighter
Instance Method Summary collapse
- #docinfo(location, doc, opts) ⇒ Object
- #docinfo?(location) ⇒ Boolean
- #format(node, lang, opts) ⇒ Object
- #highlight(node, source, lang, opts) ⇒ Object
- #highlight? ⇒ Boolean
-
#initialize(*args) ⇒ PygmentsAdapter
constructor
A new instance of PygmentsAdapter.
- #write_stylesheet(doc, to_dir) ⇒ Object
- #write_stylesheet?(doc) ⇒ Boolean
Methods included from Styles
read_stylesheet, stylesheet_basename
Methods included from DefaultFactory
Methods included from Factory
Constructor Details
#initialize(*args) ⇒ PygmentsAdapter
Returns a new instance of PygmentsAdapter.
6 7 8 9 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 6 def initialize *args super @requires_stylesheet = @style = nil end |
Instance Method Details
#docinfo(location, doc, opts) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 64 def docinfo location, doc, opts if opts[:linkcss] %(<link rel="stylesheet" href="#{doc.normalize_web_path (stylesheet_basename @style), (doc.attr 'stylesdir', ''), false}"#{opts[:self_closing_tag_slash]}>) else %(<style> #{read_stylesheet @style} </style>) end end |
#docinfo?(location) ⇒ Boolean
60 61 62 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 60 def docinfo? location @requires_stylesheet && location == :head end |
#format(node, lang, opts) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 52 def format node, lang, opts if opts[:css_mode] != :class && (@style = (style = opts[:style]) && (style_available? style) || DEFAULT_STYLE) && (pre_style_attr_val = base_style @style) opts[:transform] = proc {|pre| pre['style'] = pre_style_attr_val } end super end |
#highlight(node, source, lang, opts) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 15 def highlight node, source, lang, opts lexer = (::Pygments::Lexer.find_by_alias lang) || (::Pygments::Lexer.find_by_mimetype 'text/plain') @requires_stylesheet = true unless (noclasses = opts[:css_mode] != :class) highlight_opts = { classprefix: TOKEN_CLASS_PREFIX, cssclass: WRAPPER_CLASS, nobackground: true, noclasses: noclasses, startinline: lexer.name == 'PHP' && !(node.option? 'mixed'), stripnl: false, style: (@style ||= (style = opts[:style]) && (style_available? style) || DEFAULT_STYLE), } if (highlight_lines = opts[:highlight_lines]) highlight_opts[:hl_lines] = highlight_lines.join ' ' end if (linenos = opts[:number_lines]) && (highlight_opts[:linenostart] = opts[:start_line_number]) && (highlight_opts[:linenos] = linenos) == :table if (highlighted = lexer.highlight source, options: highlight_opts) highlighted = highlighted.sub StyledLinenoColumnStartTagsRx, LinenoColumnStartTagsCs if noclasses highlighted = highlighted.sub WrapperTagRx, PreTagCs opts[:callouts] ? [highlighted, (idx = highlighted.index CodeCellStartTagCs) ? idx + CodeCellStartTagCs.length : nil] : highlighted else node.sub_source source, false # handles nil response from ::Pygments::Lexer#highlight end elsif (highlighted = lexer.highlight source, options: highlight_opts) if linenos if noclasses highlighted = highlighted.gsub StyledLinenoSpanTagRx, LinenoSpanTagCs elsif highlighted.include? LegacyLinenoSpanStartTagCs highlighted = highlighted.gsub LegacyLinenoSpanTagRx, LinenoSpanTagCs end end highlighted.sub WrapperTagRx, '\1' else node.sub_source source, false # handles nil response from ::Pygments::Lexer#highlight end end |
#highlight? ⇒ Boolean
11 12 13 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 11 def highlight? library_available? end |
#write_stylesheet(doc, to_dir) ⇒ Object
78 79 80 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 78 def write_stylesheet doc, to_dir ::File.write (::File.join to_dir, (stylesheet_basename @style)), (read_stylesheet @style), mode: FILE_WRITE_MODE end |
#write_stylesheet?(doc) ⇒ Boolean
74 75 76 |
# File 'lib/asciidoctor/syntax_highlighter/pygments.rb', line 74 def write_stylesheet? doc @requires_stylesheet end |