Module: Sevgi::Standard

Extended by:
Standard
Included in:
Standard
Defined in:
lib/sevgi/standard.rb,
lib/sevgi/standard/data.rb,
lib/sevgi/standard/model.rb,
lib/sevgi/standard/conform.rb,
lib/sevgi/standard/version.rb,
lib/sevgi/standard/internal.rb,
lib/sevgi/standard/data/color.rb,
lib/sevgi/standard/data/element.rb,
lib/sevgi/standard/data/attribute.rb,
lib/sevgi/standard/data/specification.rb

Overview

SVG standard data and validation helpers.

Constant Summary collapse

VERSION =

Current version of the Sevgi standard gem.

"0.93.1"
Color =

Recognized SVG color keyword names mapped to hexadecimal RGB values.

{
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",
grey: "#808080",
green: "#008000",
greenyellow: "#ADFF2F",
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",
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"
    }
.tap do |color|
  def color.valid?(name) = name.respond_to?(:to_sym) && key?(name.to_sym)

  color.each { |name, hex| color.define_singleton_method(name) { hex } }
end
.freeze

Instance Method Summary collapse

Instance Method Details

#attribute?(name) ⇒ Boolean

Reports whether an attribute name is recognized by the SVG standard data.

Parameters:

  • name (Object)

    attribute name

Returns:

  • (Boolean)


27
# File 'lib/sevgi/standard.rb', line 27

def attribute?(name) = name.respond_to?(:to_sym) && Attribute.all.include?(name.to_sym)

#attributes(*groups) ⇒ Set<Symbol>

Returns SVG attributes, optionally restricted to one or more attribute groups.

Parameters:

  • groups (Array<Symbol>)

    attribute group names

Returns:

  • (Set<Symbol>)

    attribute names



22
# File 'lib/sevgi/standard.rb', line 22

def attributes(...) = Attribute.set(...)

#conform(element, attributes: nil, cdata: nil, elements: nil) ⇒ Boolean

Validates an SVG element usage against the standard data.

Parameters:

  • element (Symbol)

    SVG element name

  • attributes (Array<Symbol>, nil) (defaults to: nil)

    attribute names used by the element

  • cdata (String, nil) (defaults to: nil)

    character data content

  • elements (Array<Symbol>, nil) (defaults to: nil)

    child element names

Returns:

  • (Boolean)

    true when the usage conforms

Raises:

  • (Sevgi::ValidationError)

    when the usage violates the standard data

  • (Sevgi::PanicError)

    when the standard data refers to an invalid model



38
# File 'lib/sevgi/standard.rb', line 38

def conform(...) = Conform.(...)

#element?(name) ⇒ Boolean

Reports whether an element name is recognized by the SVG standard data.

Parameters:

  • name (Object)

    element name

Returns:

  • (Boolean)


49
# File 'lib/sevgi/standard.rb', line 49

def element?(name) = name.respond_to?(:to_sym) && Element.all.include?(name.to_sym)

#elements(*groups) ⇒ Set<Symbol>

Returns SVG elements, optionally restricted to one or more element groups.

Parameters:

  • groups (Array<Symbol>)

    element group names

Returns:

  • (Set<Symbol>)

    element names



44
# File 'lib/sevgi/standard.rb', line 44

def elements(...) = Element.set(...)

#model?(name, *models) ⇒ Boolean

Checks whether an element uses one of the requested content models.

Parameters:

  • name (Symbol)

    SVG element name

  • models (Array<Symbol>)

    model names to match

Returns:

  • (Boolean)


56
# File 'lib/sevgi/standard.rb', line 56

def model?(...) = Specification.model?(...)

#specification(name) ⇒ Hash? Also known as: []

Returns the expanded standard contract for an SVG element.

Parameters:

  • name (Object)

    SVG element name

Returns:

  • (Hash, nil)

    expanded specification data, or nil when name is invalid or unknown



61
# File 'lib/sevgi/standard.rb', line 61

def specification(name) = name.respond_to?(:to_sym) ? Specification[name.to_sym] : nil