Class: RSyntaxTree::TikZGenerator
- Inherits:
-
Object
- Object
- RSyntaxTree::TikZGenerator
- Defined in:
- lib/rsyntaxtree/tikz_generator.rb
Constant Summary collapse
- LATEX_ESCAPE_MAP =
{ '&' => '\\&', '%' => '\\%', '$' => '\\$', '#' => '\\#', '_' => '\\_', '{' => '\\{', '}' => '\\}', '~' => '\\textasciitilde{}', '^' => '\\textasciicircum{}' }.freeze
- REGION_DEFAULT_COLOR =
Generate TikZ forest code Default region shade color (bare '%') and the forced color in monochrome (color off) mode; matches the SVG backend's gray.
"gray"- REGION_FILL_OPACITY =
Fill stays faint; the border reuses the same color at a higher opacity so the region is clearly bounded in both color and black-and-white output.
"0.2"- REGION_STROKE_OPACITY =
"0.55"- CSS_COLORS =
SVG/CSS extended color keywords -> hex. Used to resolve region shade color names that xcolor does not define (so the generated LaTeX still compiles).
{ "aliceblue" => "#f0f8ff", "antiquewhite" => "#faebd7", "aqua" => "#00ffff", "aquamarine" => "#7fffd4", "azure" => "#f0ffff", "beige" => "#f5f5dc", "bisque" => "#ffe4c4", "black" => "#000000", "blanchedalmond" => "#ffebcd", "blue" => "#0000ff", "blueviolet" => "#8a2be2", "brown" => "#a52a2a", "burlywood" => "#deb887", "cadetblue" => "#5f9ea0", "chartreuse" => "#7fff00", "chocolate" => "#d2691e", "coral" => "#ff7f50", "cornflowerblue" => "#6495ed", "cornsilk" => "#fff8dc", "crimson" => "#dc143c", "cyan" => "#00ffff", "darkblue" => "#00008b", "darkcyan" => "#008b8b", "darkgoldenrod" => "#b8860b", "darkgray" => "#a9a9a9", "darkgreen" => "#006400", "darkgrey" => "#a9a9a9", "darkkhaki" => "#bdb76b", "darkmagenta" => "#8b008b", "darkolivegreen" => "#556b2f", "darkorange" => "#ff8c00", "darkorchid" => "#9932cc", "darkred" => "#8b0000", "darksalmon" => "#e9967a", "darkseagreen" => "#8fbc8f", "darkslateblue" => "#483d8b", "darkslategray" => "#2f4f4f", "darkslategrey" => "#2f4f4f", "darkturquoise" => "#00ced1", "darkviolet" => "#9400d3", "deeppink" => "#ff1493", "deepskyblue" => "#00bfff", "dimgray" => "#696969", "dimgrey" => "#696969", "dodgerblue" => "#1e90ff", "firebrick" => "#b22222", "floralwhite" => "#fffaf0", "forestgreen" => "#228b22", "fuchsia" => "#ff00ff", "gainsboro" => "#dcdcdc", "ghostwhite" => "#f8f8ff", "gold" => "#ffd700", "goldenrod" => "#daa520", "gray" => "#808080", "green" => "#008000", "greenyellow" => "#adff2f", "grey" => "#808080", "honeydew" => "#f0fff0", "hotpink" => "#ff69b4", "indianred" => "#cd5c5c", "indigo" => "#4b0082", "ivory" => "#fffff0", "khaki" => "#f0e68c", "lavender" => "#e6e6fa", "lavenderblush" => "#fff0f5", "lawngreen" => "#7cfc00", "lemonchiffon" => "#fffacd", "lightblue" => "#add8e6", "lightcoral" => "#f08080", "lightcyan" => "#e0ffff", "lightgoldenrodyellow" => "#fafad2", "lightgray" => "#d3d3d3", "lightgreen" => "#90ee90", "lightgrey" => "#d3d3d3", "lightpink" => "#ffb6c1", "lightsalmon" => "#ffa07a", "lightseagreen" => "#20b2aa", "lightskyblue" => "#87cefa", "lightslategray" => "#778899", "lightslategrey" => "#778899", "lightsteelblue" => "#b0c4de", "lightyellow" => "#ffffe0", "lime" => "#00ff00", "limegreen" => "#32cd32", "linen" => "#faf0e6", "magenta" => "#ff00ff", "maroon" => "#800000", "mediumaquamarine" => "#66cdaa", "mediumblue" => "#0000cd", "mediumorchid" => "#ba55d3", "mediumpurple" => "#9370db", "mediumseagreen" => "#3cb371", "mediumslateblue" => "#7b68ee", "mediumspringgreen" => "#00fa9a", "mediumturquoise" => "#48d1cc", "mediumvioletred" => "#c71585", "midnightblue" => "#191970", "mintcream" => "#f5fffa", "mistyrose" => "#ffe4e1", "moccasin" => "#ffe4b5", "navajowhite" => "#ffdead", "navy" => "#000080", "oldlace" => "#fdf5e6", "olive" => "#808000", "olivedrab" => "#6b8e23", "orange" => "#ffa500", "orangered" => "#ff4500", "orchid" => "#da70d6", "palegoldenrod" => "#eee8aa", "palegreen" => "#98fb98", "paleturquoise" => "#afeeee", "palevioletred" => "#db7093", "papayawhip" => "#ffefd5", "peachpuff" => "#ffdab9", "peru" => "#cd853f", "pink" => "#ffc0cb", "plum" => "#dda0dd", "powderblue" => "#b0e0e6", "purple" => "#800080", "rebeccapurple" => "#663399", "red" => "#ff0000", "rosybrown" => "#bc8f8f", "royalblue" => "#4169e1", "saddlebrown" => "#8b4513", "salmon" => "#fa8072", "sandybrown" => "#f4a460", "seagreen" => "#2e8b57", "seashell" => "#fff5ee", "sienna" => "#a0522d", "silver" => "#c0c0c0", "skyblue" => "#87ceeb", "slateblue" => "#6a5acd", "slategray" => "#708090", "slategrey" => "#708090", "snow" => "#fffafa", "springgreen" => "#00ff7f", "steelblue" => "#4682b4", "tan" => "#d2b48c", "teal" => "#008080", "thistle" => "#d8bfd8", "tomato" => "#ff6347", "turquoise" => "#40e0d0", "violet" => "#ee82ee", "wheat" => "#f5deb3", "white" => "#ffffff", "whitesmoke" => "#f5f5f5", "yellow" => "#ffff00", "yellowgreen" => "#9acd32" }.freeze
Instance Method Summary collapse
- #generate(standalone: false, font: nil) ⇒ Object
-
#initialize(element_list, params) ⇒ TikZGenerator
constructor
A new instance of TikZGenerator.
Constructor Details
#initialize(element_list, params) ⇒ TikZGenerator
Returns a new instance of TikZGenerator.
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 51 52 |
# File 'lib/rsyntaxtree/tikz_generator.rb', line 24 def initialize(element_list, params) @element_list = element_list @params = params # forest draws a tree: a parent joined to each daughter by an edge of # its own, the root at the top. A derivation is neither — one rule # across all the daughters at once, the root last — so the code this # backend would emit is a correct tree of the same structure, which is # a different figure rather than this one with something missing. What # it drops elsewhere (colour, enclosures, decoration) leaves a figure # that still says what the tree is. These two do not. if params[:derivation] == true || params[:direction] == "btt" what = params[:derivation] == true ? "a derivation" : "a tree drawn bottom to top" raise RSTError.new(+"Error: TikZ output cannot draw #{what}", code: :invalid_option, hint: "forest joins each daughter with its own edge and puts the root " \ "at the top. Use png, svg or pdf for this figure.", retryable: false) end # Refused rather than quietly drawn straight: a shear is the whole point # of the figure that asks for it, and TikZ's own slant (xslant) leaves # the bounding box unaware of the lean, so standalone output crops. if params[:shear].to_f != 0 raise RSTError.new(+"Error: TikZ output cannot draw a sheared figure", code: :invalid_option, hint: "Use png, svg or pdf for this figure, or drop the shear option.", retryable: false) end end |
Instance Method Details
#generate(standalone: false, font: nil) ⇒ Object
121 122 123 124 125 126 127 128 129 |
# File 'lib/rsyntaxtree/tikz_generator.rb', line 121 def generate(standalone: false, font: nil) tree_code = generate_tree(1) if standalone generate_standalone(tree_code, font: font) else generate_forest_only(tree_code) end end |