Module: RailroadDiagrams
- Defined in:
- lib/railroad_diagrams.rb,
lib/railroad_diagrams/end.rb,
lib/railroad_diagrams/skip.rb,
lib/railroad_diagrams/block.rb,
lib/railroad_diagrams/group.rb,
lib/railroad_diagrams/rails.rb,
lib/railroad_diagrams/stack.rb,
lib/railroad_diagrams/start.rb,
lib/railroad_diagrams/style.rb,
lib/railroad_diagrams/theme.rb,
lib/railroad_diagrams/choice.rb,
lib/railroad_diagrams/errors.rb,
lib/railroad_diagrams/except.rb,
lib/railroad_diagrams/repeat.rb,
lib/railroad_diagrams/builder.rb,
lib/railroad_diagrams/command.rb,
lib/railroad_diagrams/comment.rb,
lib/railroad_diagrams/diagram.rb,
lib/railroad_diagrams/options.rb,
lib/railroad_diagrams/special.rb,
lib/railroad_diagrams/version.rb,
lib/railroad_diagrams/document.rb,
lib/railroad_diagrams/optional.rb,
lib/railroad_diagrams/sequence.rb,
lib/railroad_diagrams/terminal.rb,
lib/railroad_diagrams/char_class.rb,
lib/railroad_diagrams/one_or_more.rb,
lib/railroad_diagrams/diagram_item.rb,
lib/railroad_diagrams/non_terminal.rb,
lib/railroad_diagrams/zero_or_more.rb,
lib/railroad_diagrams/expanded_node.rb,
lib/railroad_diagrams/separated_list.rb,
lib/railroad_diagrams/transform/lint.rb,
lib/railroad_diagrams/complex_diagram.rb,
lib/railroad_diagrams/multiple_choice.rb,
lib/railroad_diagrams/horizontal_choice.rb,
lib/railroad_diagrams/optional_sequence.rb,
lib/railroad_diagrams/importers/w3c_ebnf.rb,
lib/railroad_diagrams/transform/auto_wrap.rb,
lib/railroad_diagrams/alternating_sequence.rb,
lib/railroad_diagrams/transform/simplifier.rb,
lib/railroad_diagrams/importers/yaml_grammar.rb,
sig/generated/railroad_diagrams.rbs,
sig/generated/railroad_diagrams/end.rbs,
sig/generated/railroad_diagrams/skip.rbs,
sig/generated/railroad_diagrams/block.rbs,
sig/generated/railroad_diagrams/group.rbs,
sig/generated/railroad_diagrams/stack.rbs,
sig/generated/railroad_diagrams/start.rbs,
sig/generated/railroad_diagrams/style.rbs,
sig/generated/railroad_diagrams/theme.rbs,
sig/generated/railroad_diagrams/choice.rbs,
sig/generated/railroad_diagrams/errors.rbs,
sig/generated/railroad_diagrams/except.rbs,
sig/generated/railroad_diagrams/repeat.rbs,
sig/generated/railroad_diagrams/command.rbs,
sig/generated/railroad_diagrams/comment.rbs,
sig/generated/railroad_diagrams/diagram.rbs,
sig/generated/railroad_diagrams/options.rbs,
sig/generated/railroad_diagrams/special.rbs,
sig/generated/railroad_diagrams/version.rbs,
sig/generated/railroad_diagrams/optional.rbs,
sig/generated/railroad_diagrams/sequence.rbs,
sig/generated/railroad_diagrams/terminal.rbs,
sig/generated/railroad_diagrams/char_class.rbs,
sig/generated/railroad_diagrams/one_or_more.rbs,
sig/generated/railroad_diagrams/diagram_item.rbs,
sig/generated/railroad_diagrams/non_terminal.rbs,
sig/generated/railroad_diagrams/zero_or_more.rbs,
sig/generated/railroad_diagrams/expanded_node.rbs,
sig/generated/railroad_diagrams/separated_list.rbs,
sig/generated/railroad_diagrams/complex_diagram.rbs,
sig/generated/railroad_diagrams/multiple_choice.rbs,
sig/generated/railroad_diagrams/horizontal_choice.rbs,
sig/generated/railroad_diagrams/optional_sequence.rbs,
sig/generated/railroad_diagrams/alternating_sequence.rbs
Overview
Build and render railroad diagrams for grammar rules.
Defined Under Namespace
Modules: DSL, Error, ExpandedNode, Importers, Rails, ResetChildrenOnFormat, Transform Classes: AlternatingSequence, Block, Builder, CharClass, Choice, Command, Comment, ComplexDiagram, Diagram, DiagramItem, Document, End, Except, Group, HorizontalChoice, InvalidArgument, MultipleChoice, NonTerminal, OneOrMore, Optional, OptionalSequence, Options, ParseError, RenderError, Repeat, SeparatedList, Sequence, Skip, Special, Stack, Start, Style, Terminal, Theme, ZeroOrMore
Constant Summary collapse
- VS =
minimum vertical separation between things. For a 3px stroke, must be at least 4
8- AR =
radius of arcs
10- DIAGRAM_CLASS =
class to put on the root
'railroad-diagram'- STROKE_ODD_PIXEL_LENGTH =
is the stroke width an odd (1px, 3px, etc) pixel length?
true- INTERNAL_ALIGNMENT =
how to align items when they have extra space. left/right/center
'center'- CHAR_WIDTH =
width of each monospace character. play until you find the right value for your font
8.5- COMMENT_CHAR_WIDTH =
comments are in smaller text by default
7- DEFAULT_OPTIONS =
Options.new( vertical_separation: VS, arc_radius: AR, diagram_class: DIAGRAM_CLASS, stroke_odd_pixel_length: STROKE_ODD_PIXEL_LENGTH, internal_alignment: INTERNAL_ALIGNMENT.to_sym, char_width: CHAR_WIDTH, comment_char_width: COMMENT_CHAR_WIDTH, ambiguous_width: 1, measurer: nil, text_charset: :unicode, escape_html: false, precision: nil, optimize_paths: false, href_mode: :xlink, link_policy: :safe, link_policy_violation: :warn, link_target: nil, link_rel: nil, id_prefix: nil, debug: false, locale: :en, theme: :default, inline_styles: false, max_width: nil, show_start: true, show_end: true, coerce: nil ).freeze
- VERSION =
: String
'1.1.0'
Class Method Summary collapse
-
.build(coerce: nil, &block) ⇒ Object
Evaluate a DSL block and return its root node.
-
.configure ⇒ Object
Update the default rendering settings for future diagrams.
-
.default_options ⇒ Object
Return the current default rendering settings.
-
.diagram(**options, &block) ⇒ Object
Evaluate a DSL block and wrap it in a complete diagram.
- .escape_attr(val) ⇒ String
- .escape_html(val) ⇒ String
-
.format_number(val) ⇒ String
指数表記を使わず、Integer はそのまま、Float は小数6桁で丸めて末尾の0を除く.
Class Method Details
.build(coerce: nil, &block) ⇒ Object
Evaluate a DSL block and return its root node.
204 205 206 207 208 209 210 |
# File 'lib/railroad_diagrams/builder.rb', line 204 def self.build(coerce: nil, &block) raise InvalidArgument, 'a block is required' unless block builder = Builder.new(coerce: coerce) value = block.arity.zero? ? builder.instance_eval(&block) : block.call(builder) Coercion.call(value, builder.coercion) end |
.configure ⇒ Object
Update the default rendering settings for future diagrams.
49 50 51 52 53 |
# File 'lib/railroad_diagrams/options.rb', line 49 def configure values = .to_h yield values @default_options = DEFAULT_OPTIONS.merge(**values) end |
.default_options ⇒ Object
Return the current default rendering settings.
42 43 44 |
# File 'lib/railroad_diagrams/options.rb', line 42 def @default_options || DEFAULT_OPTIONS end |
.diagram(**options, &block) ⇒ Object
Evaluate a DSL block and wrap it in a complete diagram.
215 216 217 218 |
# File 'lib/railroad_diagrams/builder.rb', line 215 def self.diagram(**, &block) coerce = .delete(:coerce) Diagram.new(build(coerce: coerce, &block), **) end |
.escape_attr(val) ⇒ String
33 34 35 36 37 |
# File 'lib/railroad_diagrams.rb', line 33 def self.escape_attr(val) return val.gsub('&', '&').gsub('<', '<').gsub('>', '>').gsub("'", ''').gsub('"', '"') if val.is_a?(String) format_number(val) end |
.escape_html(val) ⇒ String
43 44 45 |
# File 'lib/railroad_diagrams.rb', line 43 def self.escape_html(val) escape_attr(val) end |
.format_number(val) ⇒ String
指数表記を使わず、Integer はそのまま、Float は小数6桁で丸めて末尾の0を除く
52 53 54 55 56 57 58 59 |
# File 'lib/railroad_diagrams.rb', line 52 def self.format_number(val) return val.to_s if val.is_a?(Integer) || !val.finite? rounded = val.round(6) return rounded.to_i.to_s if rounded == rounded.to_i Kernel.format('%.6f', rounded).sub(/0+\z/, '') end |