class AsciidoctorExtensions::KrokiProcessor
Internal processor
Constants
- TEXT_FORMATS
Public Class Methods
process(processor, parent, attrs, diagram_type, diagram_text, logger)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 138 def process(processor, parent, attrs, diagram_type, diagram_text, logger) doc = parent.document diagram_text = prepend_plantuml_config(diagram_text, diagram_type, doc, logger) # If "subs" attribute is specified, substitute accordingly. # Be careful not to specify "specialcharacters" or your diagram code won't be valid anymore! if (subs = attrs['subs']) diagram_text = parent.apply_subs(diagram_text, parent.resolve_subs(subs)) end title = attrs.delete('title') caption = attrs.delete('caption') attrs.delete('opts') role = attrs['role'] format = get_format(doc, attrs, diagram_type) attrs['role'] = get_role(format, role) attrs['format'] = format kroki_diagram = KrokiDiagram.new(diagram_type, format, diagram_text) kroki_client = KrokiClient.new(server_url(doc), http_method(doc), KrokiHttpClient, logger, max_uri_length(doc)) if TEXT_FORMATS.include?(format) text_content = kroki_client.text_content(kroki_diagram) block = processor.create_block(parent, 'literal', text_content, attrs) else attrs['alt'] = get_alt(attrs) attrs['target'] = create_image_src(doc, kroki_diagram, kroki_client) block = processor.create_image_block(parent, attrs) end block.title = title if title block.assign_caption(caption, 'figure') block end
Private Class Methods
create_image_src(doc, kroki_diagram, kroki_client)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 219 def create_image_src(doc, kroki_diagram, kroki_client) if doc.attr('kroki-fetch-diagram') && doc.safe < ::Asciidoctor::SafeMode::SECURE kroki_diagram.save(output_dir_path(doc), kroki_client) else kroki_diagram.get_diagram_uri(server_url(doc)) end end
get_alt(attrs)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 185 def get_alt(attrs) if (title = attrs['title']) title elsif (target = attrs['target']) target else 'Diagram' end end
get_format(doc, attrs, diagram_type)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 207 def get_format(doc, attrs, diagram_type) format = attrs['format'] || 'svg' # The JavaFX preview doesn't support SVG well, therefore we'll use PNG format... if doc.attr?('env-idea') && format == 'svg' # ... unless the diagram library does not support PNG as output format! # Currently, mermaid, nomnoml, svgbob, wavedrom only support SVG as output format. svg_only_diagram_types = %w[:mermaid :nomnoml :svgbob :wavedrom] format = 'png' unless svg_only_diagram_types.include?(diagram_type) end format end
get_role(format, role)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 195 def get_role(format, role) if role if format "#{role} kroki-format-#{format} kroki" else "#{role} kroki" end else 'kroki' end end
http_method(doc)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 231 def http_method(doc) doc.attr('kroki-http-method', 'adaptive').downcase end
max_uri_length(doc)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 235 def max_uri_length(doc) doc.attr('kroki-max-uri-length', '4000').to_i end
output_dir_path(doc)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 239 def output_dir_path(doc) images_dir = doc.attr('imagesdir', '') if (images_output_dir = doc.attr('imagesoutdir')) images_output_dir elsif (out_dir = doc.attr('outdir')) File.join(out_dir, images_dir) elsif (to_dir = doc.attr('to_dir')) File.join(to_dir, images_dir) else File.join(doc.base_dir, images_dir) end end
prepend_plantuml_config(diagram_text, diagram_type, doc, logger)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 170 def prepend_plantuml_config(diagram_text, diagram_type, doc, logger) if diagram_type == :plantuml && doc.safe < ::Asciidoctor::SafeMode::SECURE && doc.attr?('kroki-plantuml-include') # REMIND: this behaves different than the JS version # Once we have a preprocessor for Ruby, the value should be added in the diagram source as "!include #{plantuml_include}" plantuml_include_path = doc.normalize_system_path(doc.attr('kroki-plantuml-include')) if ::File.readable? plantuml_include_path config = File.read(plantuml_include_path) diagram_text = config + "\n" + diagram_text else logger.warn "Unable to read plantuml-include. File not found or not readable: #{plantuml_include_path}." end end diagram_text end
server_url(doc)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 227 def server_url(doc) doc.attr('kroki-server-url', 'https://kroki.io') end