Class: IsoDoc::CssBorderParser::BorderParser
- Defined in:
- lib/isodoc/css_border_parser.rb,
lib/isodoc/css_border_parser_vars.rb
Overview
BorderParser class handles the parsing of CSS border properties
Constant Summary collapse
- DEFAULT_VALUES =
Default values according to CSS specifications
{ "width" => "medium", "style" => "none", "color" => "currentColor", }.freeze
- BORDER_WIDTHS =
CSS border width values
["thin", "medium", "thick"].freeze
- BORDER_STYLES =
CSS border style values
[ "none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset" ].freeze
- COLOR_KEYWORDS =
CSS color keywords
[ "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "orange", "aliceblue", "antiquewhite", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "limegreen", "linen", "magenta", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet", "wheat", "whitesmoke", "yellowgreen", "transparent", "currentColor" ].freeze
- COLOR_MAP =
Mapping of CSS color names to RGB hex values
{ "black" => "#000000", "silver" => "#C0C0C0", "gray" => "#808080", "white" => "#FFFFFF", "maroon" => "#800000", "red" => "#FF0000", "purple" => "#800080", "fuchsia" => "#FF00FF", "green" => "#008000", "lime" => "#00FF00", "olive" => "#808000", "yellow" => "#FFFF00", "navy" => "#000080", "blue" => "#0000FF", "teal" => "#008080", "aqua" => "#00FFFF", "orange" => "#FFA500", "aliceblue" => "#F0F8FF", "antiquewhite" => "#FAEBD7", "aquamarine" => "#7FFFD4", "azure" => "#F0FFFF", "beige" => "#F5F5DC", "bisque" => "#FFE4C4", "blanchedalmond" => "#FFEBCD", "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", "gainsboro" => "#DCDCDC", "ghostwhite" => "#F8F8FF", "gold" => "#FFD700", "goldenrod" => "#DAA520", "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", "limegreen" => "#32CD32", "linen" => "#FAF0E6", "magenta" => "#FF00FF", "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", "oldlace" => "#FDF5E6", "olivedrab" => "#6B8E23", "orangered" => "#FF4500", "orchid" => "#DA70D6", "palegoldenrod" => "#EEE8AA", "palegreen" => "#98FB98", "paleturquoise" => "#AFEEEE", "palevioletred" => "#DB7093", "papayawhip" => "#FFEFD5", "peachpuff" => "#FFDAB9", "peru" => "#CD853F", "pink" => "#FFC0CB", "plum" => "#DDA0DD", "powderblue" => "#B0E0E6", "rosybrown" => "#BC8F8F", "royalblue" => "#4169E1", "saddlebrown" => "#8B4513", "salmon" => "#FA8072", "sandybrown" => "#F4A460", "seagreen" => "#2E8B57", "seashell" => "#FFF5EE", "sienna" => "#A0522D", "skyblue" => "#87CEEB", "slateblue" => "#6A5ACD", "slategray" => "#708090", "slategrey" => "#708090", "snow" => "#FFFAFA", "springgreen" => "#00FF7F", "steelblue" => "#4682B4", "tan" => "#D2B48C", "thistle" => "#D8BFD8", "tomato" => "#FF6347", "turquoise" => "#40E0D0", "violet" => "#EE82EE", "wheat" => "#F5DEB3", "whitesmoke" => "#F5F5F5", "yellowgreen" => "#9ACD32", # Special values that should not be converted "transparent" => "transparent", "currentColor" => "currentColor", }.freeze
Instance Method Summary collapse
-
#initialize ⇒ BorderParser
constructor
No initialization needed.
-
#parse(css_string) ⇒ Hash
Parse CSS and extract border properties.
-
#parse_declaration(css_declaration) ⇒ Hash
Parse a CSS declaration string.
-
#to_css_string(parsed_properties, format: :inline, selector: nil) ⇒ String
Generate a CSS string from parsed properties.
Constructor Details
#initialize ⇒ BorderParser
No initialization needed
11 |
# File 'lib/isodoc/css_border_parser.rb', line 11 def initialize; end |
Instance Method Details
#parse(css_string) ⇒ Hash
Parse CSS and extract border properties
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/isodoc/css_border_parser.rb', line 17 def parse(css_string) results = {} rule_sets = extract_rule_sets(css_string) rule_sets.each do |selector, declarations| results[selector] = {} process_border_properties(declarations, results[selector]) store_non_border_properties(declarations, results[selector]) end results end |
#parse_declaration(css_declaration) ⇒ Hash
Parse a CSS declaration string
(can contain multiple declarations)
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/isodoc/css_border_parser.rb', line 34 def parse_declaration(css_declaration) result = {} declarations = css_declaration.split(";").each_with_object({}) do |d, m| d = d.strip d.empty? and next property, value = d.split(":", 2).map(&:strip) m[property] = value end process_border_properties(declarations, result) store_non_border_properties(declarations, result) result end |
#to_css_string(parsed_properties, format: :inline, selector: nil) ⇒ String
Generate a CSS string from parsed properties
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/isodoc/css_border_parser.rb', line 53 def to_css_string(parsed_properties, format: :inline, selector: nil) css_parts = [] parsed_properties.each do |property_group, components| property_group == "other_properties" and next if property_group == "border" components.each do |property_type, value| css_parts << "border-#{property_type}: #{value};" end elsif property_group.start_with?("border-") # direction-specific border properties direction = property_group.sub("border-", "") components.each do |property_type, value| css_parts << "border-#{direction}-#{property_type}: #{value};" end end end # non-border properties parsed_properties["other_properties"]&.each do |property, value| css_parts << "#{property}: #{value};" end format_properties(format, css_parts, selector) end |