diff --git a/Cargo.toml b/Cargo.toml
index 500cce9..56d10aa 100644
@@ -15,7 +15,7 @@ readme = "README.md"
travis-ci = { repository = "RazrFalcon/libsvgparser" }
[dependencies]
-phf = "=0.7.21"
+phf = "=0.7.21" # Also update in codegen
[dev-dependencies]
bencher = "0.1"
@@ -24,5 +24,5 @@ bencher = "0.1"
name = "parser"
harness = false
-# [lib]
-# doctest = false
+[lib]
+doctest = false
diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml
index e62512a..e6b3ac0 100644
@@ -7,3 +7,6 @@ license = "MPL-2.0"
[dependencies]
phf = "=0.7.21"
phf_codegen = "=0.7.21"
+serde = "1.0"
+serde_json = "1.0"
+serde_derive = "1.0"
diff --git a/codegen/spec/values.txt b/codegen/spec/values.txt
index 9d94cfd..8ee50ff 100644
@@ -1,3 +1,12 @@
+100
+200
+300
+400
+500
+600
+700
+800
+900
accumulate
after-edge
all
diff --git a/codegen/src/main.rs b/codegen/src/main.rs
index 8f8362e..819d33f 100644
@@ -5,25 +5,35 @@
// We don't use cargo build script, since this data will be changed rarely.
// There are no point in regenerating them each time, only if you want to save a few KiB.
+#![allow(dead_code)]
+
extern crate phf_codegen;
+extern crate serde;
+extern crate serde_json;
+
+#[macro_use]
+extern crate serde_derive;
+
use std::fs::File;
use std::io::{BufReader, BufWriter};
use std::path::Path;
use std::io::prelude::*;
fn main() {
- gen_file("spec/elements.txt", "ElementId", "ELEMENTS",
- "List of all SVG elements.",
- "../src/element_id.rs");
- gen_file("spec/attributes.txt", "AttributeId", "ATTRIBUTES",
- "List of all SVG attributes.",
- "../src/attribute_id.rs");
- gen_file("spec/values.txt", "ValueId", "VALUES",
- "List of all values for presentation attributes.",
- "../src/value_id.rs");
+ // gen_file("spec/elements.txt", "ElementId", "ELEMENTS",
+ // "List of all SVG elements.",
+ // "../src/element_id.rs");
+ // gen_file("spec/attributes.txt", "AttributeId", "ATTRIBUTES",
+ // "List of all SVG attributes.",
+ // "../src/attribute_id.rs");
+ // gen_file2("spec/values.txt", "ValueId", "VALUES",
+ // "List of all values for presentation attributes.",
+ // "../src/value_id.rs");
gen_colors();
+
+ gen_property();
}
fn gen_colors() {
@@ -31,7 +41,7 @@ fn gen_colors() {
let mut file = BufWriter::new(File::create(&path).unwrap());
let map_name = "COLORS";
- let struct_name = "Color";
+ let struct_name = "RgbColor";
write_header(&mut file);
@@ -122,6 +132,42 @@ fn gen_file(spec_path: &str, enum_name: &str, map_name: &str, doc: &str, out_pat
}}", enum_name).unwrap();
}
+fn gen_file2(spec_path: &str, enum_name: &str, map_name: &str, doc: &str, out_path: &str) {
+ let path = Path::new(out_path);
+ let mut file = BufWriter::new(File::create(&path).unwrap());
+
+ let names = gen_names(spec_path);
+
+ write_header(&mut file);
+
+ // enum
+ writeln!(&mut file, "/// {}", doc).unwrap();
+ writeln!(&mut file, "#[derive(Copy,Clone,PartialEq)]").unwrap();
+ writeln!(&mut file, "#[allow(missing_docs)]").unwrap();
+ writeln!(&mut file, "pub enum {} {{", enum_name).unwrap();
+ for name in &names {
+ writeln!(&mut file, " {},", name.for_enum).unwrap();
+ }
+ writeln!(&mut file, "}}\n").unwrap();
+
+ // hashmap
+ write!(&mut file, "static {}: ::phf::Map<&'static str, {}> = ", map_name, enum_name).unwrap();
+ let mut map = phf_codegen::Map::new();
+ for name in &names {
+ map.entry(name.orig.clone(), &format!("{}::{}", enum_name, name.for_enum));
+ }
+ map.build(&mut file).unwrap();
+ writeln!(&mut file, ";\n").unwrap();
+
+ // enum to string
+ writeln!(&mut file, "impl {} {{", enum_name).unwrap();
+ writeln!(&mut file, " /// Converts name into id.").unwrap();
+ writeln!(&mut file, " pub fn from_name(text: &str) -> Option<{}> {{", enum_name).unwrap();
+ writeln!(&mut file, " {}.get(text).cloned()", map_name).unwrap();
+ writeln!(&mut file, " }}").unwrap();
+ writeln!(&mut file, "}}").unwrap();
+}
+
struct Name {
orig: String,
for_enum: String,
@@ -175,3 +221,225 @@ fn write_header(file: &mut BufWriter<File>) {
writeln!(file, "// This file is autogenerated. Do not edit it!\n").unwrap();
}
+
+#[derive(Serialize, Deserialize)]
+struct NamedValues {
+ data: Vec<NamedValue>,
+}
+
+#[derive(Serialize, Deserialize)]
+struct NamedValue {
+ name: String,
+ values: Vec<String>,
+}
+
+fn gen_property() {
+ let json_file = File::open("spec/values.json").unwrap();
+ let mut values: NamedValues = serde_json::from_reader(json_file).unwrap();
+
+ values.data.sort_by(|a, b| a.name.cmp(&b.name));
+
+ let path = Path::new("../src/property.rs");
+ let mut file = BufWriter::new(File::create(&path).unwrap());
+
+ write_header(&mut file);
+
+
+ macro_rules! fwrite_fmt {
+ ($fmt:expr) => (writeln!(&mut file, $fmt).unwrap());
+ ($fmt:expr, $($arg:tt)*) => (writeln!(&mut file, $fmt, $($arg)*).unwrap());
+ }
+
+ // TODO: to fwrite_raw
+ macro_rules! fwrite {
+ ($text:expr) => ({
+ file.write($text.as_bytes()).unwrap();
+ file.write(&[b'\n']).unwrap();
+ });
+ }
+
+ fwrite!("use std::fmt;");
+ fwrite!("use std::str::FromStr;\n");
+ fwrite!("use value_id::ValueId;\n");
+
+ fwrite!("use { Stream, Length, RgbColor };\n");
+
+ fwrite!("#[derive(Debug,Copy,Clone,PartialEq)]");
+ fwrite!("#[allow(missing_docs)]");
+ fwrite!("pub enum Property<'a> {");
+ for value in &values.data {
+ if value.values.iter().any(|v| v == "<funciri>") {
+ fwrite_fmt!(" {}({}<'a>),", prepare_enum_name(&value.name), prepare_enum_name(&value.name));
+ } else {
+ fwrite_fmt!(" {}({}),", prepare_enum_name(&value.name), prepare_enum_name(&value.name));
+ }
+ }
+ fwrite!("}\n");
+
+// fwrite!("macro_rules! try_opt {
+// ($expr: expr) => {
+// match $expr {
+// Some(value) => return value,
+// None => {}
+// }
+// }
+// }
+// ");
+
+
+ // fwrite!("impl NamedValue {");
+ // fwrite!(" /// Converts id into name.");
+ // fwrite!(" pub fn name(&self) -> &'static str {");
+ // fwrite!(" match *self {");
+ // for value in &values.data {
+ // fwrite_fmt!(" NamedValue::{}(v) => v.name(),", value.name);
+ // }
+ // fwrite!(" }");
+ // fwrite!(" }");
+ // fwrite!("}\n");
+
+ // pub fn from_name(text: &str) -> Option<StrokeWidth> {
+ // match ValueId::from_name(text) {
+ // Some(n) => {
+ // match n {
+ // ValueId::Inherit => Some(StrokeWidth::Inherit),
+ // _ => {
+ // let mut stream = Stream::from_str(text);
+ // match stream.parse_length().ok() {
+ // Some(l) => Some(StrokeWidth::Length(l)),
+ // None => None,
+ // }
+ // }
+ // }
+ // }
+ // None => None,
+ // }
+ // }
+
+ for value in &values.data {
+ fwrite!("#[derive(Debug,Copy,Clone,PartialEq)]");
+ fwrite!("#[allow(missing_docs)]");
+
+ if value.values.contains(&"<funciri>".to_string()) {
+ fwrite_fmt!("pub enum {}<'a> {{", prepare_enum_name(&value.name));
+ } else {
+ fwrite_fmt!("pub enum {} {{", prepare_enum_name(&value.name));
+ }
+
+ for v in &value.values {
+ if v == "<length>" {
+ fwrite!(" Length(Length),");
+ } else if v == "<color>" {
+ fwrite!(" Color(RgbColor),");
+ } else if v == "<funciri>" {
+ fwrite!(" FuncIRI(&'a str),");
+ } else {
+ fwrite_fmt!(" {},", prepare_enum_name(v));
+ }
+ }
+ fwrite!("}\n");
+
+ if value.values.contains(&"<funciri>".to_string()) {
+ fwrite_fmt!("impl<'a> {}<'a> {{", prepare_enum_name(&value.name));
+ } else {
+ fwrite_fmt!("impl {} {{", prepare_enum_name(&value.name));
+ }
+
+
+ // fwrite!(" /// Converts id into name.");
+ // fwrite!(" pub fn name(&self) -> &'static str {");
+ // fwrite!(" match *self {");
+ // for v in &value.values {
+ // fwrite_fmt!(" {}::{} => \"{}\",", value.name, prepare_enum_name(v), v);
+ // }
+ // fwrite!(" }");
+ // fwrite!(" }");
+ // fwrite!("");
+ fwrite!(" /// Converts string to a property.");
+ fwrite_fmt!(" pub fn from_str(text: &str) -> Option<{}> {{", prepare_enum_name(&value.name));
+ fwrite!(" if let Some(n) = ValueId::from_name(text) {");
+ fwrite!(" match n {");
+ for v in &value.values {
+ if !v.starts_with("<") {
+ fwrite_fmt!(" ValueId::{} => return Some({}::{}),", prepare_enum_name(v),
+ prepare_enum_name(&value.name), prepare_enum_name(v));
+ }
+ }
+ fwrite!(" _ => {}");
+ fwrite!(" }");
+ fwrite!(" }");
+ fwrite!("");
+
+ if value.values.contains(&"<funciri>".to_string()) {
+ fwrite!(" match parse_func_iri(text) {");
+ fwrite_fmt!(" Some(l) => return Some({}::FuncIRI(l)),", prepare_enum_name(&value.name));
+ fwrite!(" None => {}");
+ fwrite!(" }");
+ fwrite!("");
+ }
+
+ if value.values.contains(&"<length>".to_string()) {
+ fwrite!(" match Stream::from_str(text).parse_length().ok() {");
+ fwrite_fmt!(" Some(l) => return Some({}::Length(l)),", prepare_enum_name(&value.name));
+ fwrite!(" None => {}");
+ fwrite!(" }");
+ fwrite!("");
+ } else if value.values.contains(&"<color>".to_string()) {
+ fwrite!(" match RgbColor::from_str(text).ok() {");
+ fwrite_fmt!(" Some(l) => return Some({}::Color(l)),", prepare_enum_name(&value.name));
+ fwrite!(" None => {}");
+ fwrite!(" }");
+ fwrite!("");
+ }
+
+ fwrite!(" None");
+ fwrite!(" }");
+
+ fwrite!("}\n");
+ }
+
+ fwrite!("
+macro_rules! try_opt {
+ ($expr: expr) => {
+ match $expr {
+ Some(value) => value,
+ None => return None
+ }
+ }
+}
+
+fn parse_func_iri(text: &str) -> Option<&str> {
+ let mut stream = Stream::from_str(text);
+ if !stream.at_end() && stream.is_char_eq_raw(b'u') {
+ try_opt!(stream.advance(5).ok());
+ let link = stream.slice_next_raw(try_opt!(stream.len_to(b')').ok()));
+ Some(link)
+ } else {
+ None
+ }
+}");
+
+// fwrite!(
+// r#"macro_rules! impl_debug {
+// ($name:ty) => (
+// impl fmt::Debug for $name {
+// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+// write!(f, "{}", self.name())
+// }
+// }
+
+// impl fmt::Display for $name {
+// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+// write!(f, "{}", self.name())
+// }
+// }
+// )
+// }
+
+// "#);
+
+// fwrite!("impl_debug!(NamedValue);");
+// for value in &values.data {
+// fwrite_fmt!("impl_debug!({});", value.name);
+// }
+}
diff --git a/src/attribute_value.rs b/src/attribute_value.rs
index e686329..12dd438 100644
@@ -9,26 +9,30 @@ use std::str;
use {
AttributeId,
+ RgbColor,
ElementId,
Error,
Length,
LengthList,
NumberList,
- Color,
Stream,
TextFrame,
- ValueId,
};
+use value_id::ValueId;
+use property::*;
+
/// The paint type fallback value in case when `FuncIRI` is not resolved.
#[derive(Debug,Clone,Copy,PartialEq)]
pub enum PaintFallback {
/// Can contain only `none` or `currentColor`.
- PredefValue(ValueId),
+ // PredefValue(ValueId),
+ None,
+ CurrentColor,
/// [`<color>`] type.
///
/// [`<color>`]: https://www.w3.org/TR/SVG/types.html#DataTypeColor
- Color(Color),
+ Color(RgbColor),
}
/// Representation of the SVG attribute value.
@@ -49,7 +53,7 @@ pub enum AttributeValue<'a> {
/// [`<color>`] type.
///
/// [`<color>`]: https://www.w3.org/TR/SVG/types.html#DataTypeColor
- Color(Color),
+ Color(RgbColor),
/// Reference to the ENTITY. Contains only `name` from `&name;`.
EntityRef(&'a str),
/// [`<IRI>`] type.
@@ -59,13 +63,13 @@ pub enum AttributeValue<'a> {
/// [`<FuncIRI>`] type.
///
/// [`<FuncIRI>`]: https://www.w3.org/TR/SVG/types.html#DataTypeFuncIRI
- FuncIRI(&'a str),
+ // FuncIRI(&'a str),
/// [`<FuncIRI>`] type with a fallback value.
///
/// [`<FuncIRI>`]: https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint
- FuncIRIWithFallback(&'a str, PaintFallback),
- /// ID of the predefined value.
- PredefValue(ValueId),
+ // FuncIRIWithFallback(&'a str, PaintFallback),
+ /// Propery.
+ Property(Property<'a>),
/// Unknown data.
String(&'a str),
}
@@ -91,8 +95,10 @@ impl<'a> fmt::Debug for AttributeValue<'a> {
write!(f, "Number({})", num),
AttributeValue::NumberList(list) =>
write!(f, "NumberList({})", list.data()),
- AttributeValue::PredefValue(id) =>
- write!(f, "PredefValue({})", id.name()),
+ // AttributeValue::PredefValue(id) =>
+ // write!(f, "PredefValue({})", id.name()),
+ AttributeValue::Property(_) =>
+ write!(f, "Property()"),
AttributeValue::String(text) =>
write!(f, "String({})", text),
}
@@ -145,21 +151,6 @@ impl<'a> AttributeValue<'a> {
let start_pos = stream.pos();
- macro_rules! parse_predef {
- ($($cmp:pat),+) => (
- match ValueId::from_name(stream.slice_tail()) {
- Some(v) => {
- match v {
- $(
- $cmp => Some(AttributeValue::PredefValue(v)),
- )+
- _ => None,
- }
- }
- None => None,
- }
- )
- }
macro_rules! invalid_attr {
() => ({
@@ -177,6 +168,15 @@ impl<'a> AttributeValue<'a> {
})
}
+ macro_rules! parse_propery {
+ ($name:ident) => (
+ match $name::from_str(stream.slice_tail()) {
+ Some(v) => Ok(AttributeValue::Property(Property::$name(v))),
+ None => invalid_attr!(),
+ }
+ )
+ }
+
// 'unicode' attribute can contain spaces
if aid != AId::Unicode {
stream.skip_spaces();
@@ -224,31 +224,31 @@ impl<'a> AttributeValue<'a> {
AId::StrokeDashoffset
| AId::StrokeMiterlimit
| AId::StrokeWidth => {
- parse_or!(parse_predef!(ValueId::Inherit), parse_length(stream))
- }
-
- AId::Opacity
- | AId::FillOpacity
- | AId::FloodOpacity
- | AId::StrokeOpacity
- | AId::StopOpacity => {
- fn get_opacity<'a>(mut s: Stream) -> Result<AttributeValue<'a>, Error> {
- let mut n = s.parse_number()?;
- n = f64_bound(0.0, n, 1.0);
- Ok(AttributeValue::Number(n))
- }
-
- parse_or!(parse_predef!(
- ValueId::Inherit
- ), get_opacity(stream))
- }
-
- AId::StrokeDasharray => {
- parse_or!(parse_predef!(
- ValueId::None,
- ValueId::Inherit
- ), Ok(AttributeValue::LengthList(LengthList::from_frame(frame))))
- }
+ parse_propery!(StrokeWidth)
+ }
+
+ // AId::Opacity
+ // | AId::FillOpacity
+ // | AId::FloodOpacity
+ // | AId::StrokeOpacity
+ // | AId::StopOpacity => {
+ // fn get_opacity<'a>(mut s: Stream) -> Result<AttributeValue<'a>, Error> {
+ // let mut n = s.parse_number()?;
+ // n = f64_bound(0.0, n, 1.0);
+ // Ok(AttributeValue::Number(n))
+ // }
+
+ // parse_or!(parse_predef!(
+ // ValueId::Inherit
+ // ), get_opacity(stream))
+ // }
+
+ // AId::StrokeDasharray => {
+ // parse_or!(parse_predef!(
+ // ValueId::None,
+ // ValueId::Inherit
+ // ), Ok(AttributeValue::LengthList(LengthList::from_frame(frame))))
+ // }
AId::Fill => {
// 'fill' in animate-based elements it's another 'fill'
@@ -261,50 +261,44 @@ impl<'a> AttributeValue<'a> {
| ElementId::AnimateTransform
=> Ok(AttributeValue::String(stream.slice())),
_ => {
- parse_or!(parse_predef!(
- ValueId::None,
- ValueId::CurrentColor,
- ValueId::Inherit),
- parse_or!(parse_paint_func_iri(stream), parse_rgb_color(stream)))
+ parse_propery!(Fill)
}
}
}
AId::Stroke => {
- parse_or!(parse_predef!(
- ValueId::None,
- ValueId::CurrentColor,
- ValueId::Inherit),
- parse_or!(parse_paint_func_iri(stream), parse_rgb_color(stream)))
- },
-
- AId::ClipPath
- | AId::Filter
- | AId::Marker
- | AId::MarkerEnd
- | AId::MarkerMid
- | AId::MarkerStart
- | AId::Mask => {
- parse_or!(parse_predef!(
- ValueId::None,
- ValueId::Inherit),
- parse_or_err!(parse_func_iri(stream)))
- }
+ parse_propery!(Stroke)
+ }
+
+ // AId::ClipPath
+ // | AId::Filter
+ // | AId::Marker
+ // | AId::MarkerEnd
+ // | AId::MarkerMid
+ // | AId::MarkerStart
+ // | AId::Mask => {
+ // parse_or!(parse_predef!(
+ // ValueId::None,
+ // ValueId::Inherit),
+ // parse_or_err!(parse_func_iri(stream)))
+ // }
AId::XlinkHref => { parse_iri(stream) }
AId::Color => {
- parse_or!(parse_predef!(ValueId::Inherit),
- parse_rgb_color(stream))
- }
+ parse_propery!(Color)
- AId::LightingColor
- | AId::FloodColor
- | AId::StopColor => {
- parse_or!(parse_predef!(ValueId::Inherit, ValueId::CurrentColor),
- parse_rgb_color(stream))
+ // parse_or!(parse_predef!(ValueId::Inherit),
+ // parse_rgb_color(stream))
}
+ // AId::LightingColor
+ // | AId::FloodColor
+ // | AId::StopColor => {
+ // parse_or!(parse_predef!(ValueId::Inherit, ValueId::CurrentColor),
+ // parse_rgb_color(stream))
+ // }
+
AId::StdDeviation
| AId::BaseFrequency => {
// TODO: this attributes can contain only one or two numbers
@@ -315,54 +309,19 @@ impl<'a> AttributeValue<'a> {
Ok(AttributeValue::NumberList(NumberList::from_frame(frame)))
}
- AId::AlignmentBaseline => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::Baseline,
- ValueId::BeforeEdge,
- ValueId::TextBeforeEdge,
- ValueId::Middle,
- ValueId::Central,
- ValueId::AfterEdge,
- ValueId::TextAfterEdge,
- ValueId::Ideographic,
- ValueId::Alphabetic,
- ValueId::Hanging,
- ValueId::Mathematical,
- ValueId::Inherit
- ))
- }
+ AId::AlignmentBaseline =>
+ parse_propery!(AlignmentBaseline),
AId::Display => {
- parse_or_err!(parse_predef!(
- ValueId::Inline,
- ValueId::Block,
- ValueId::ListItem,
- ValueId::RunIn,
- ValueId::Compact,
- ValueId::Marker,
- ValueId::Table,
- ValueId::InlineTable,
- ValueId::TableRowGroup,
- ValueId::TableHeaderGroup,
- ValueId::TableFooterGroup,
- ValueId::TableRow,
- ValueId::TableColumnGroup,
- ValueId::TableColumn,
- ValueId::TableCell,
- ValueId::TableCaption,
- ValueId::None,
- ValueId::Inherit
- ))
- }
-
- AId::ClipRule
- | AId::FillRule => {
- parse_or_err!(parse_predef!(
- ValueId::Nonzero,
- ValueId::Evenodd,
- ValueId::Inherit
- ))
+ parse_propery!(Display)
+ }
+
+ AId::ClipRule => {
+ parse_propery!(ClipRule)
+ }
+
+ AId::FillRule => {
+ parse_propery!(FillRule)
}
AId::ClipPathUnits
@@ -373,331 +332,157 @@ impl<'a> AttributeValue<'a> {
| AId::PatternContentUnits
| AId::PatternUnits
| AId::PrimitiveUnits => {
- parse_or_err!(parse_predef!(
- ValueId::UserSpaceOnUse,
- ValueId::ObjectBoundingBox
- ))
+ parse_propery!(Units)
}
AId::SpreadMethod => {
- parse_or_err!(parse_predef!(
- ValueId::Pad,
- ValueId::Reflect,
- ValueId::Repeat
- ))
+ parse_propery!(SpreadMethod)
}
AId::StrokeLinecap => {
- parse_or_err!(parse_predef!(
- ValueId::Butt,
- ValueId::Round,
- ValueId::Square,
- ValueId::Inherit
- ))
+ parse_propery!(LineCap)
}
AId::Visibility => {
- parse_or_err!(parse_predef!(
- ValueId::Visible,
- ValueId::Hidden,
- ValueId::Collapse,
- ValueId::Inherit
- ))
+ parse_propery!(Visibility)
}
AId::ColorInterpolation
| AId::ColorInterpolationFilters => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::SRGB,
- ValueId::LinearRGB,
- ValueId::Inherit
- ))
+ parse_propery!(ColorInterpolation)
}
- AId::ColorRendering => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::OptimizeSpeed,
- ValueId::OptimizeQuality,
- ValueId::Inherit
- ))
+ AId::ColorRendering
+ | AId::ImageRendering => {
+ parse_propery!(ColorRendering)
}
AId::DominantBaseline => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::UseScript,
- ValueId::NoChange,
- ValueId::ResetSize,
- ValueId::Ideographic,
- ValueId::Alphabetic,
- ValueId::Hanging,
- ValueId::Mathematical,
- ValueId::Central,
- ValueId::Middle,
- ValueId::TextAfterEdge,
- ValueId::TextBeforeEdge,
- ValueId::Inherit
- ))
+ parse_propery!(DominantBaseline)
}
AId::Direction => {
- parse_or_err!(parse_predef!(
- ValueId::Ltr,
- ValueId::Rtl,
- ValueId::Inherit
- ))
+ parse_propery!(Direction)
}
AId::FontStretch => {
- parse_or_err!(parse_predef!(
- ValueId::Normal,
- ValueId::Wider,
- ValueId::Narrower,
- ValueId::UltraCondensed,
- ValueId::ExtraCondensed,
- ValueId::Condensed,
- ValueId::SemiCondensed,
- ValueId::SemiExpanded,
- ValueId::Expanded,
- ValueId::ExtraExpanded,
- ValueId::UltraExpanded,
- ValueId::Inherit
- ))
+ parse_propery!(FontStretch)
}
AId::FontStyle => {
- parse_or_err!(parse_predef!(
- ValueId::Normal,
- ValueId::Italic,
- ValueId::Oblique,
- ValueId::Inherit
- ))
+ parse_propery!(FontStyle)
}
AId::FontVariant => {
- parse_or_err!(parse_predef!(
- ValueId::Normal,
- ValueId::SmallCaps,
- ValueId::Inherit
- ))
+ parse_propery!(FontVariant)
}
AId::FontWeight => {
- parse_or!(parse_predef!(
- ValueId::Normal,
- ValueId::Bold,
- ValueId::Bolder,
- ValueId::Lighter,
- ValueId::Inherit
- ), parse_number(stream))
+ parse_propery!(FontWeight)
}
AId::BaselineShift => {
- parse_or!(parse_predef!(
- ValueId::Baseline,
- ValueId::Sub,
- ValueId::Super,
- ValueId::Inherit
- ), parse_length(stream))
+ parse_propery!(BaselineShift)
}
AId::FontSize => {
- parse_or!(parse_predef!(
- ValueId::XxSmall,
- ValueId::XSmall,
- ValueId::Small,
- ValueId::Medium,
- ValueId::Large,
- ValueId::XLarge,
- ValueId::XxLarge,
- ValueId::Larger,
- ValueId::Smaller,
- ValueId::Inherit
- ), parse_length(stream))
- }
-
- AId::FontSizeAdjust => {
- parse_or!(parse_predef!(
- ValueId::None,
- ValueId::Inherit
- ), parse_number(stream))
- }
-
- AId::ImageRendering => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::OptimizeSpeed,
- ValueId::OptimizeQuality,
- ValueId::Inherit
- ))
- }
-
- AId::Kerning => {
- parse_or!(parse_predef!(
- ValueId::Auto,
- ValueId::Inherit
- ), parse_length(stream))
- }
-
- AId::WordSpacing
- | AId::LetterSpacing => {
- parse_or!(parse_predef!(
- ValueId::Normal,
- ValueId::Inherit
- ), parse_length(stream))
- }
+ parse_propery!(FontSize)
+ }
+
+ // AId::FontSizeAdjust => {
+ // parse_or!(parse_predef!(
+ // ValueId::None,
+ // ValueId::Inherit
+ // ), parse_number(stream))
+ // }
+
+ // AId::Kerning => {
+ // parse_or!(parse_predef!(
+ // ValueId::Auto,
+ // ValueId::Inherit
+ // ), parse_length(stream))
+ // }
+
+ // AId::WordSpacing
+ // | AId::LetterSpacing => {
+ // parse_or!(parse_predef!(
+ // ValueId::Normal,
+ // ValueId::Inherit
+ // ), parse_length(stream))
+ // }
AId::Overflow => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::Visible,
- ValueId::Hidden,
- ValueId::Scroll,
- ValueId::Inherit
- ))
+ parse_propery!(Overflow)
}
AId::PointerEvents => {
- parse_or_err!(parse_predef!(
- ValueId::VisiblePainted,
- ValueId::VisibleFill,
- ValueId::VisibleStroke,
- ValueId::Visible,
- ValueId::Painted,
- ValueId::Fill,
- ValueId::Stroke,
- ValueId::All,
- ValueId::None,
- ValueId::Inherit
- ))
+ parse_propery!(PointerEvents)
}
AId::ShapeRendering => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::OptimizeSpeed,
- ValueId::CrispEdges,
- ValueId::GeometricPrecision,
- ValueId::Inherit
- ))
+ parse_propery!(ShapeRendering)
}
AId::StrokeLinejoin => {
- parse_or_err!(parse_predef!(
- ValueId::Miter,
- ValueId::Round,
- ValueId::Bevel,
- ValueId::Inherit
- ))
+ parse_propery!(StrokeLinejoin)
}
AId::TextAnchor => {
- parse_or_err!(parse_predef!(
- ValueId::Start,
- ValueId::Middle,
- ValueId::End,
- ValueId::Inherit
- ))
+ parse_propery!(TextAnchor)
}
AId::TextDecoration => {
- parse_or_err!(parse_predef!(
- ValueId::None,
- ValueId::Underline,
- ValueId::Overline,
- ValueId::LineThrough,
- ValueId::Blink,
- ValueId::Inherit
- ))
+ parse_propery!(TextDecoration)
}
AId::TextRendering => {
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::OptimizeSpeed,
- ValueId::OptimizeLegibility,
- ValueId::GeometricPrecision,
- ValueId::Inherit
- ))
+ parse_propery!(TextRendering)
}
AId::UnicodeBidi => {
- parse_or_err!(parse_predef!(
- ValueId::Normal,
- ValueId::Embed,
- ValueId::BidiOverride,
- ValueId::Inherit
- ))
+ parse_propery!(UnicodeBidi)
}
AId::WritingMode => {
- parse_or_err!(parse_predef!(
- ValueId::LrTb,
- ValueId::RlTb,
- ValueId::TbRl,
- ValueId::Lr,
- ValueId::Rl,
- ValueId::Tb,
- ValueId::Inherit
- ))
+ parse_propery!(WritingMode)
}
- AId::ColorProfile => {
- parse_or!(parse_predef!(
- ValueId::Auto,
- ValueId::SRGB,
- ValueId::Inherit
- ), parse_iri(stream))
- }
+ // AId::ColorProfile => {
+ // parse_or!(parse_predef!(
+ // ValueId::Auto,
+ // ValueId::SRGB,
+ // ValueId::Inherit
+ // ), parse_iri(stream))
+ // }
- AId::GlyphOrientationVertical => {
- parse_or!(parse_predef!(
- ValueId::Auto,
- ValueId::Inherit), Ok(AttributeValue::String(stream.slice())))
- }
+ // AId::GlyphOrientationVertical => {
+ // parse_or!(parse_predef!(
+ // ValueId::Auto,
+ // ValueId::Inherit), Ok(AttributeValue::String(stream.slice())))
+ // }
AId::Cursor => {
warnln!("The 'cursor' property is not fully supported");
- parse_or_err!(parse_predef!(
- ValueId::Auto,
- ValueId::Crosshair,
- ValueId::Default,
- ValueId::Pointer,
- ValueId::Move,
- ValueId::EResize,
- ValueId::NeResize,
- ValueId::NwResize,
- ValueId::NResize,
- ValueId::SeResize,
- ValueId::SwResize,
- ValueId::SResize,
- ValueId::WResize,
- ValueId::Text,
- ValueId::Wait,
- ValueId::Help,
- ValueId::Inherit
- ))
+ parse_propery!(Cursor)
}
- AId::EnableBackground => {
- // TODO: parse 'new x y h w'
+ // AId::EnableBackground => {
+ // // TODO: parse 'new x y h w'
- parse_or!(parse_predef!(
- ValueId::Accumulate,
- ValueId::Inherit
- ), Ok(AttributeValue::String(stream.slice())))
- }
+ // parse_or!(parse_predef!(
+ // ValueId::Accumulate,
+ // ValueId::Inherit
+ // ), Ok(AttributeValue::String(stream.slice())))
+ // }
- AId::FontFamily => {
- // TODO: complete parser
+ // AId::FontFamily => {
+ // // TODO: complete parser
- parse_or!(parse_predef!(
- ValueId::Inherit
- ), Ok(AttributeValue::String(stream.slice())))
- }
+ // parse_or!(parse_predef!(
+ // ValueId::Inherit
+ // ), Ok(AttributeValue::String(stream.slice())))
+ // }
AId::ViewBox => {
Ok(AttributeValue::NumberList(NumberList::from_frame(frame)))
@@ -744,8 +529,8 @@ fn parse_paint_func_iri<'a>(mut stream: Stream<'a>) -> Option<AttributeValue<'a>
let vid = match ValueId::from_name(fallback) {
Some(v) => {
match v {
- ValueId::None
- | ValueId::CurrentColor => Some(PaintFallback::PredefValue(v)),
+ ValueId::None => Some(PaintFallback::None),
+ ValueId::CurrentColor => Some(PaintFallback::CurrentColor),
_ => None,
}
}
@@ -756,7 +541,7 @@ fn parse_paint_func_iri<'a>(mut stream: Stream<'a>) -> Option<AttributeValue<'a>
Some(AttributeValue::FuncIRIWithFallback(link, v))
} else {
let frame = stream.slice_frame_raw(stream.pos(), stream.pos() + stream.left());
- let color = try_opt!(Color::from_frame(frame).ok());
+ let color = try_opt!(RgbColor::from_frame(frame).ok());
Some(AttributeValue::FuncIRIWithFallback(link, PaintFallback::Color(color)))
}
} else {
@@ -800,8 +585,8 @@ fn parse_number<'a>(mut stream: Stream<'a>) -> Result<AttributeValue<'a>, Error>
}
fn parse_rgb_color<'a>(stream: Stream<'a>) -> Result<AttributeValue<'a>, Error> {
- let frame = stream.slice_frame_raw(stream.pos(), stream.pos() + stream.left());
- let c = Color::from_frame(frame)?;
+ let frame = stream.slice_tail_frame();
+ let c = RgbColor::from_frame(frame)?;
Ok(AttributeValue::Color(c))
}
diff --git a/src/color.rs b/src/color.rs
index 3b89be0..5ef2ba0 100644
@@ -11,7 +11,7 @@ use colors::rgb_color_from_name;
/// Representation of the [`<color>`] type.
/// [`<color>`]: https://www.w3.org/TR/SVG/types.html#DataTypeColor
#[derive(Copy,Clone,PartialEq,Debug)]
-pub struct Color {
+pub struct RgbColor {
#[allow(missing_docs)]
pub red: u8,
#[allow(missing_docs)]
@@ -20,11 +20,11 @@ pub struct Color {
pub blue: u8,
}
-impl Color {
+impl RgbColor {
/// Constructs a new `Color` from `red`, `green` and `blue` values.
#[inline]
- pub fn new(red: u8, green: u8, blue: u8) -> Color {
- Color {
+ pub fn new(red: u8, green: u8, blue: u8) -> RgbColor {
+ RgbColor {
red: red,
green: green,
blue: blue,
@@ -62,14 +62,14 @@ impl Color {
///
/// [`spec`]: http://www.w3.org/TR/SVG/types.html#DataTypeColor
/// [`details`]: https://lists.w3.org/Archives/Public/www-svg/2014Jan/0109.html
- pub fn from_frame(frame: TextFrame) -> Result<Color, Error> {
+ pub fn from_frame(frame: TextFrame) -> Result<RgbColor, Error> {
let mut s = Stream::from_frame(frame);
s.skip_spaces();
let start = s.pos();
- let mut color = Color::new(0, 0, 0);
+ let mut color = RgbColor::new(0, 0, 0);
if s.is_char_eq(b'#')? {
// get color data len until first space or stream end
@@ -144,11 +144,11 @@ impl Color {
}
}
-impl FromStr for Color {
+impl FromStr for RgbColor {
type Err = Error;
fn from_str(text: &str) -> Result<Self, Self::Err> {
- Color::from_frame(TextFrame::from_str(text))
+ RgbColor::from_frame(TextFrame::from_str(text))
}
}
diff --git a/src/colors.rs b/src/colors.rs
index 9a2bfe7..d0414b9 100644
@@ -4,9 +4,9 @@
// This file is autogenerated. Do not edit it!
-use Color;
+use RgbColor;
-static COLORS: ::phf::Map<&'static str, Color> = ::phf::Map {
+static COLORS: ::phf::Map<&'static str, RgbColor> = ::phf::Map {
key: 9603444721912725599,
disps: ::phf::Slice::Static(&[
(0, 33),
@@ -41,156 +41,156 @@ static COLORS: ::phf::Map<&'static str, Color> = ::phf::Map {
(19, 90),
]),
entries: ::phf::Slice::Static(&[
- ("darkslategray", Color{ red: 47, green: 79, blue: 79 }),
- ("moccasin", Color{ red: 255, green: 228, blue: 181 }),
- ("green", Color{ red: 0, green: 128, blue: 0 }),
- ("palegoldenrod", Color{ red: 238, green: 232, blue: 170 }),
- ("cadetblue", Color{ red: 95, green: 158, blue: 160 }),
- ("darkblue", Color{ red: 0, green: 0, blue: 139 }),
- ("fuchsia", Color{ red: 255, green: 0, blue: 255 }),
- ("yellowgreen", Color{ red: 154, green: 205, blue: 50 }),
- ("lightsalmon", Color{ red: 255, green: 160, blue: 122 }),
- ("tomato", Color{ red: 255, green: 99, blue: 71 }),
- ("beige", Color{ red: 245, green: 245, blue: 220 }),
- ("crimson", Color{ red: 220, green: 20, blue: 60 }),
- ("lightgrey", Color{ red: 211, green: 211, blue: 211 }),
- ("darkorange", Color{ red: 255, green: 140, blue: 0 }),
- ("gainsboro", Color{ red: 220, green: 220, blue: 220 }),
- ("whitesmoke", Color{ red: 245, green: 245, blue: 245 }),
- ("mintcream", Color{ red: 245, green: 255, blue: 250 }),
- ("seagreen", Color{ red: 46, green: 139, blue: 87 }),
- ("royalblue", Color{ red: 65, green: 105, blue: 225 }),
- ("aqua", Color{ red: 0, green: 255, blue: 255 }),
- ("burlywood", Color{ red: 222, green: 184, blue: 135 }),
- ("antiquewhite", Color{ red: 250, green: 235, blue: 215 }),
- ("navajowhite", Color{ red: 255, green: 222, blue: 173 }),
- ("darkred", Color{ red: 139, green: 0, blue: 0 }),
- ("darkgray", Color{ red: 169, green: 169, blue: 169 }),
- ("navy", Color{ red: 0, green: 0, blue: 128 }),
- ("black", Color{ red: 0, green: 0, blue: 0 }),
- ("khaki", Color{ red: 240, green: 230, blue: 140 }),
- ("ghostwhite", Color{ red: 248, green: 248, blue: 255 }),
- ("mediumaquamarine", Color{ red: 102, green: 205, blue: 170 }),
- ("lightgreen", Color{ red: 144, green: 238, blue: 144 }),
- ("paleturquoise", Color{ red: 175, green: 238, blue: 238 }),
- ("papayawhip", Color{ red: 255, green: 239, blue: 213 }),
- ("lightslategrey", Color{ red: 119, green: 136, blue: 153 }),
- ("linen", Color{ red: 250, green: 240, blue: 230 }),
- ("dimgrey", Color{ red: 105, green: 105, blue: 105 }),
- ("mediumspringgreen", Color{ red: 0, green: 250, blue: 154 }),
- ("slateblue", Color{ red: 106, green: 90, blue: 205 }),
- ("chocolate", Color{ red: 210, green: 105, blue: 30 }),
- ("silver", Color{ red: 192, green: 192, blue: 192 }),
- ("deepskyblue", Color{ red: 0, green: 191, blue: 255 }),
- ("chartreuse", Color{ red: 127, green: 255, blue: 0 }),
- ("mistyrose", Color{ red: 255, green: 228, blue: 225 }),
- ("darkgreen", Color{ red: 0, green: 100, blue: 0 }),
- ("mediumvioletred", Color{ red: 199, green: 21, blue: 133 }),
- ("cornsilk", Color{ red: 255, green: 248, blue: 220 }),
- ("limegreen", Color{ red: 50, green: 205, blue: 50 }),
- ("darkviolet", Color{ red: 148, green: 0, blue: 211 }),
- ("lavender", Color{ red: 230, green: 230, blue: 250 }),
- ("firebrick", Color{ red: 178, green: 34, blue: 34 }),
- ("azure", Color{ red: 240, green: 255, blue: 255 }),
- ("lightcyan", Color{ red: 224, green: 255, blue: 255 }),
- ("hotpink", Color{ red: 255, green: 105, blue: 180 }),
- ("darkgoldenrod", Color{ red: 184, green: 134, blue: 11 }),
- ("lemonchiffon", Color{ red: 255, green: 250, blue: 205 }),
- ("honeydew", Color{ red: 240, green: 255, blue: 240 }),
- ("steelblue", Color{ red: 70, green: 130, blue: 180 }),
- ("mediumseagreen", Color{ red: 60, green: 179, blue: 113 }),
- ("orange", Color{ red: 255, green: 165, blue: 0 }),
- ("gray", Color{ red: 128, green: 128, blue: 128 }),
- ("lavenderblush", Color{ red: 255, green: 240, blue: 245 }),
- ("rosybrown", Color{ red: 188, green: 143, blue: 143 }),
- ("palevioletred", Color{ red: 219, green: 112, blue: 147 }),
- ("greenyellow", Color{ red: 173, green: 255, blue: 47 }),
- ("mediumblue", Color{ red: 0, green: 0, blue: 205 }),
- ("lightgray", Color{ red: 211, green: 211, blue: 211 }),
- ("magenta", Color{ red: 255, green: 0, blue: 255 }),
- ("darkslategrey", Color{ red: 47, green: 79, blue: 79 }),
- ("indianred", Color{ red: 205, green: 92, blue: 92 }),
- ("blue", Color{ red: 0, green: 0, blue: 255 }),
- ("powderblue", Color{ red: 176, green: 224, blue: 230 }),
- ("floralwhite", Color{ red: 255, green: 250, blue: 240 }),
- ("lightseagreen", Color{ red: 32, green: 178, blue: 170 }),
- ("brown", Color{ red: 165, green: 42, blue: 42 }),
- ("lightblue", Color{ red: 173, green: 216, blue: 230 }),
- ("olive", Color{ red: 128, green: 128, blue: 0 }),
- ("deeppink", Color{ red: 255, green: 20, blue: 147 }),
- ("midnightblue", Color{ red: 25, green: 25, blue: 112 }),
- ("white", Color{ red: 255, green: 255, blue: 255 }),
- ("cornflowerblue", Color{ red: 100, green: 149, blue: 237 }),
- ("forestgreen", Color{ red: 34, green: 139, blue: 34 }),
- ("lightyellow", Color{ red: 255, green: 255, blue: 224 }),
- ("wheat", Color{ red: 245, green: 222, blue: 179 }),
- ("purple", Color{ red: 128, green: 0, blue: 128 }),
- ("mediumorchid", Color{ red: 186, green: 85, blue: 211 }),
- ("darkolivegreen", Color{ red: 85, green: 107, blue: 47 }),
- ("aquamarine", Color{ red: 127, green: 255, blue: 212 }),
- ("pink", Color{ red: 255, green: 192, blue: 203 }),
- ("lime", Color{ red: 0, green: 255, blue: 0 }),
- ("dodgerblue", Color{ red: 30, green: 144, blue: 255 }),
- ("springgreen", Color{ red: 0, green: 255, blue: 127 }),
- ("blueviolet", Color{ red: 138, green: 43, blue: 226 }),
- ("oldlace", Color{ red: 253, green: 245, blue: 230 }),
- ("red", Color{ red: 255, green: 0, blue: 0 }),
- ("sandybrown", Color{ red: 244, green: 164, blue: 96 }),
- ("grey", Color{ red: 128, green: 128, blue: 128 }),
- ("salmon", Color{ red: 250, green: 128, blue: 114 }),
- ("lawngreen", Color{ red: 124, green: 252, blue: 0 }),
- ("peachpuff", Color{ red: 255, green: 218, blue: 185 }),
- ("darkorchid", Color{ red: 153, green: 50, blue: 204 }),
- ("yellow", Color{ red: 255, green: 255, blue: 0 }),
- ("darkgrey", Color{ red: 169, green: 169, blue: 169 }),
- ("darkseagreen", Color{ red: 143, green: 188, blue: 143 }),
- ("plum", Color{ red: 221, green: 160, blue: 221 }),
- ("lightslategray", Color{ red: 119, green: 136, blue: 153 }),
- ("aliceblue", Color{ red: 240, green: 248, blue: 255 }),
- ("sienna", Color{ red: 160, green: 82, blue: 45 }),
- ("seashell", Color{ red: 255, green: 245, blue: 238 }),
- ("lightgoldenrodyellow", Color{ red: 250, green: 250, blue: 210 }),
- ("peru", Color{ red: 205, green: 133, blue: 63 }),
- ("darkmagenta", Color{ red: 139, green: 0, blue: 139 }),
- ("saddlebrown", Color{ red: 139, green: 69, blue: 19 }),
- ("orangered", Color{ red: 255, green: 69, blue: 0 }),
- ("lightskyblue", Color{ red: 135, green: 206, blue: 250 }),
- ("lightcoral", Color{ red: 240, green: 128, blue: 128 }),
- ("snow", Color{ red: 255, green: 250, blue: 250 }),
- ("mediumpurple", Color{ red: 147, green: 112, blue: 219 }),
- ("skyblue", Color{ red: 135, green: 206, blue: 235 }),
- ("goldenrod", Color{ red: 218, green: 165, blue: 32 }),
- ("indigo", Color{ red: 75, green: 0, blue: 130 }),
- ("mediumturquoise", Color{ red: 72, green: 209, blue: 204 }),
- ("darksalmon", Color{ red: 233, green: 150, blue: 122 }),
- ("olivedrab", Color{ red: 107, green: 142, blue: 35 }),
- ("blanchedalmond", Color{ red: 255, green: 235, blue: 205 }),
- ("turquoise", Color{ red: 64, green: 224, blue: 208 }),
- ("darkslateblue", Color{ red: 72, green: 61, blue: 139 }),
- ("darkturquoise", Color{ red: 0, green: 206, blue: 209 }),
- ("thistle", Color{ red: 216, green: 191, blue: 216 }),
- ("slategrey", Color{ red: 112, green: 128, blue: 144 }),
- ("maroon", Color{ red: 128, green: 0, blue: 0 }),
- ("palegreen", Color{ red: 152, green: 251, blue: 152 }),
- ("darkcyan", Color{ red: 0, green: 139, blue: 139 }),
- ("tan", Color{ red: 210, green: 180, blue: 140 }),
- ("darkkhaki", Color{ red: 189, green: 183, blue: 107 }),
- ("bisque", Color{ red: 255, green: 228, blue: 196 }),
- ("teal", Color{ red: 0, green: 128, blue: 128 }),
- ("lightpink", Color{ red: 255, green: 182, blue: 193 }),
- ("slategray", Color{ red: 112, green: 128, blue: 144 }),
- ("gold", Color{ red: 255, green: 215, blue: 0 }),
- ("coral", Color{ red: 255, green: 127, blue: 80 }),
- ("cyan", Color{ red: 0, green: 255, blue: 255 }),
- ("orchid", Color{ red: 218, green: 112, blue: 214 }),
- ("violet", Color{ red: 238, green: 130, blue: 238 }),
- ("dimgray", Color{ red: 105, green: 105, blue: 105 }),
- ("ivory", Color{ red: 255, green: 255, blue: 240 }),
- ("lightsteelblue", Color{ red: 176, green: 196, blue: 222 }),
- ("mediumslateblue", Color{ red: 123, green: 104, blue: 238 }),
+ ("darkslategray", RgbColor{ red: 47, green: 79, blue: 79 }),
+ ("moccasin", RgbColor{ red: 255, green: 228, blue: 181 }),
+ ("green", RgbColor{ red: 0, green: 128, blue: 0 }),
+ ("palegoldenrod", RgbColor{ red: 238, green: 232, blue: 170 }),
+ ("cadetblue", RgbColor{ red: 95, green: 158, blue: 160 }),
+ ("darkblue", RgbColor{ red: 0, green: 0, blue: 139 }),
+ ("fuchsia", RgbColor{ red: 255, green: 0, blue: 255 }),
+ ("yellowgreen", RgbColor{ red: 154, green: 205, blue: 50 }),
+ ("lightsalmon", RgbColor{ red: 255, green: 160, blue: 122 }),
+ ("tomato", RgbColor{ red: 255, green: 99, blue: 71 }),
+ ("beige", RgbColor{ red: 245, green: 245, blue: 220 }),
+ ("crimson", RgbColor{ red: 220, green: 20, blue: 60 }),
+ ("lightgrey", RgbColor{ red: 211, green: 211, blue: 211 }),
+ ("darkorange", RgbColor{ red: 255, green: 140, blue: 0 }),
+ ("gainsboro", RgbColor{ red: 220, green: 220, blue: 220 }),
+ ("whitesmoke", RgbColor{ red: 245, green: 245, blue: 245 }),
+ ("mintcream", RgbColor{ red: 245, green: 255, blue: 250 }),
+ ("seagreen", RgbColor{ red: 46, green: 139, blue: 87 }),
+ ("royalblue", RgbColor{ red: 65, green: 105, blue: 225 }),
+ ("aqua", RgbColor{ red: 0, green: 255, blue: 255 }),
+ ("burlywood", RgbColor{ red: 222, green: 184, blue: 135 }),
+ ("antiquewhite", RgbColor{ red: 250, green: 235, blue: 215 }),
+ ("navajowhite", RgbColor{ red: 255, green: 222, blue: 173 }),
+ ("darkred", RgbColor{ red: 139, green: 0, blue: 0 }),
+ ("darkgray", RgbColor{ red: 169, green: 169, blue: 169 }),
+ ("navy", RgbColor{ red: 0, green: 0, blue: 128 }),
+ ("black", RgbColor{ red: 0, green: 0, blue: 0 }),
+ ("khaki", RgbColor{ red: 240, green: 230, blue: 140 }),
+ ("ghostwhite", RgbColor{ red: 248, green: 248, blue: 255 }),
+ ("mediumaquamarine", RgbColor{ red: 102, green: 205, blue: 170 }),
+ ("lightgreen", RgbColor{ red: 144, green: 238, blue: 144 }),
+ ("paleturquoise", RgbColor{ red: 175, green: 238, blue: 238 }),
+ ("papayawhip", RgbColor{ red: 255, green: 239, blue: 213 }),
+ ("lightslategrey", RgbColor{ red: 119, green: 136, blue: 153 }),
+ ("linen", RgbColor{ red: 250, green: 240, blue: 230 }),
+ ("dimgrey", RgbColor{ red: 105, green: 105, blue: 105 }),
+ ("mediumspringgreen", RgbColor{ red: 0, green: 250, blue: 154 }),
+ ("slateblue", RgbColor{ red: 106, green: 90, blue: 205 }),
+ ("chocolate", RgbColor{ red: 210, green: 105, blue: 30 }),
+ ("silver", RgbColor{ red: 192, green: 192, blue: 192 }),
+ ("deepskyblue", RgbColor{ red: 0, green: 191, blue: 255 }),
+ ("chartreuse", RgbColor{ red: 127, green: 255, blue: 0 }),
+ ("mistyrose", RgbColor{ red: 255, green: 228, blue: 225 }),
+ ("darkgreen", RgbColor{ red: 0, green: 100, blue: 0 }),
+ ("mediumvioletred", RgbColor{ red: 199, green: 21, blue: 133 }),
+ ("cornsilk", RgbColor{ red: 255, green: 248, blue: 220 }),
+ ("limegreen", RgbColor{ red: 50, green: 205, blue: 50 }),
+ ("darkviolet", RgbColor{ red: 148, green: 0, blue: 211 }),
+ ("lavender", RgbColor{ red: 230, green: 230, blue: 250 }),
+ ("firebrick", RgbColor{ red: 178, green: 34, blue: 34 }),
+ ("azure", RgbColor{ red: 240, green: 255, blue: 255 }),
+ ("lightcyan", RgbColor{ red: 224, green: 255, blue: 255 }),
+ ("hotpink", RgbColor{ red: 255, green: 105, blue: 180 }),
+ ("darkgoldenrod", RgbColor{ red: 184, green: 134, blue: 11 }),
+ ("lemonchiffon", RgbColor{ red: 255, green: 250, blue: 205 }),
+ ("honeydew", RgbColor{ red: 240, green: 255, blue: 240 }),
+ ("steelblue", RgbColor{ red: 70, green: 130, blue: 180 }),
+ ("mediumseagreen", RgbColor{ red: 60, green: 179, blue: 113 }),
+ ("orange", RgbColor{ red: 255, green: 165, blue: 0 }),
+ ("gray", RgbColor{ red: 128, green: 128, blue: 128 }),
+ ("lavenderblush", RgbColor{ red: 255, green: 240, blue: 245 }),
+ ("rosybrown", RgbColor{ red: 188, green: 143, blue: 143 }),
+ ("palevioletred", RgbColor{ red: 219, green: 112, blue: 147 }),
+ ("greenyellow", RgbColor{ red: 173, green: 255, blue: 47 }),
+ ("mediumblue", RgbColor{ red: 0, green: 0, blue: 205 }),
+ ("lightgray", RgbColor{ red: 211, green: 211, blue: 211 }),
+ ("magenta", RgbColor{ red: 255, green: 0, blue: 255 }),
+ ("darkslategrey", RgbColor{ red: 47, green: 79, blue: 79 }),
+ ("indianred", RgbColor{ red: 205, green: 92, blue: 92 }),
+ ("blue", RgbColor{ red: 0, green: 0, blue: 255 }),
+ ("powderblue", RgbColor{ red: 176, green: 224, blue: 230 }),
+ ("floralwhite", RgbColor{ red: 255, green: 250, blue: 240 }),
+ ("lightseagreen", RgbColor{ red: 32, green: 178, blue: 170 }),
+ ("brown", RgbColor{ red: 165, green: 42, blue: 42 }),
+ ("lightblue", RgbColor{ red: 173, green: 216, blue: 230 }),
+ ("olive", RgbColor{ red: 128, green: 128, blue: 0 }),
+ ("deeppink", RgbColor{ red: 255, green: 20, blue: 147 }),
+ ("midnightblue", RgbColor{ red: 25, green: 25, blue: 112 }),
+ ("white", RgbColor{ red: 255, green: 255, blue: 255 }),
+ ("cornflowerblue", RgbColor{ red: 100, green: 149, blue: 237 }),
+ ("forestgreen", RgbColor{ red: 34, green: 139, blue: 34 }),
+ ("lightyellow", RgbColor{ red: 255, green: 255, blue: 224 }),
+ ("wheat", RgbColor{ red: 245, green: 222, blue: 179 }),
+ ("purple", RgbColor{ red: 128, green: 0, blue: 128 }),
+ ("mediumorchid", RgbColor{ red: 186, green: 85, blue: 211 }),
+ ("darkolivegreen", RgbColor{ red: 85, green: 107, blue: 47 }),
+ ("aquamarine", RgbColor{ red: 127, green: 255, blue: 212 }),
+ ("pink", RgbColor{ red: 255, green: 192, blue: 203 }),
+ ("lime", RgbColor{ red: 0, green: 255, blue: 0 }),
+ ("dodgerblue", RgbColor{ red: 30, green: 144, blue: 255 }),
+ ("springgreen", RgbColor{ red: 0, green: 255, blue: 127 }),
+ ("blueviolet", RgbColor{ red: 138, green: 43, blue: 226 }),
+ ("oldlace", RgbColor{ red: 253, green: 245, blue: 230 }),
+ ("red", RgbColor{ red: 255, green: 0, blue: 0 }),
+ ("sandybrown", RgbColor{ red: 244, green: 164, blue: 96 }),
+ ("grey", RgbColor{ red: 128, green: 128, blue: 128 }),
+ ("salmon", RgbColor{ red: 250, green: 128, blue: 114 }),
+ ("lawngreen", RgbColor{ red: 124, green: 252, blue: 0 }),
+ ("peachpuff", RgbColor{ red: 255, green: 218, blue: 185 }),
+ ("darkorchid", RgbColor{ red: 153, green: 50, blue: 204 }),
+ ("yellow", RgbColor{ red: 255, green: 255, blue: 0 }),
+ ("darkgrey", RgbColor{ red: 169, green: 169, blue: 169 }),
+ ("darkseagreen", RgbColor{ red: 143, green: 188, blue: 143 }),
+ ("plum", RgbColor{ red: 221, green: 160, blue: 221 }),
+ ("lightslategray", RgbColor{ red: 119, green: 136, blue: 153 }),
+ ("aliceblue", RgbColor{ red: 240, green: 248, blue: 255 }),
+ ("sienna", RgbColor{ red: 160, green: 82, blue: 45 }),
+ ("seashell", RgbColor{ red: 255, green: 245, blue: 238 }),
+ ("lightgoldenrodyellow", RgbColor{ red: 250, green: 250, blue: 210 }),
+ ("peru", RgbColor{ red: 205, green: 133, blue: 63 }),
+ ("darkmagenta", RgbColor{ red: 139, green: 0, blue: 139 }),
+ ("saddlebrown", RgbColor{ red: 139, green: 69, blue: 19 }),
+ ("orangered", RgbColor{ red: 255, green: 69, blue: 0 }),
+ ("lightskyblue", RgbColor{ red: 135, green: 206, blue: 250 }),
+ ("lightcoral", RgbColor{ red: 240, green: 128, blue: 128 }),
+ ("snow", RgbColor{ red: 255, green: 250, blue: 250 }),
+ ("mediumpurple", RgbColor{ red: 147, green: 112, blue: 219 }),
+ ("skyblue", RgbColor{ red: 135, green: 206, blue: 235 }),
+ ("goldenrod", RgbColor{ red: 218, green: 165, blue: 32 }),
+ ("indigo", RgbColor{ red: 75, green: 0, blue: 130 }),
+ ("mediumturquoise", RgbColor{ red: 72, green: 209, blue: 204 }),
+ ("darksalmon", RgbColor{ red: 233, green: 150, blue: 122 }),
+ ("olivedrab", RgbColor{ red: 107, green: 142, blue: 35 }),
+ ("blanchedalmond", RgbColor{ red: 255, green: 235, blue: 205 }),
+ ("turquoise", RgbColor{ red: 64, green: 224, blue: 208 }),
+ ("darkslateblue", RgbColor{ red: 72, green: 61, blue: 139 }),
+ ("darkturquoise", RgbColor{ red: 0, green: 206, blue: 209 }),
+ ("thistle", RgbColor{ red: 216, green: 191, blue: 216 }),
+ ("slategrey", RgbColor{ red: 112, green: 128, blue: 144 }),
+ ("maroon", RgbColor{ red: 128, green: 0, blue: 0 }),
+ ("palegreen", RgbColor{ red: 152, green: 251, blue: 152 }),
+ ("darkcyan", RgbColor{ red: 0, green: 139, blue: 139 }),
+ ("tan", RgbColor{ red: 210, green: 180, blue: 140 }),
+ ("darkkhaki", RgbColor{ red: 189, green: 183, blue: 107 }),
+ ("bisque", RgbColor{ red: 255, green: 228, blue: 196 }),
+ ("teal", RgbColor{ red: 0, green: 128, blue: 128 }),
+ ("lightpink", RgbColor{ red: 255, green: 182, blue: 193 }),
+ ("slategray", RgbColor{ red: 112, green: 128, blue: 144 }),
+ ("gold", RgbColor{ red: 255, green: 215, blue: 0 }),
+ ("coral", RgbColor{ red: 255, green: 127, blue: 80 }),
+ ("cyan", RgbColor{ red: 0, green: 255, blue: 255 }),
+ ("orchid", RgbColor{ red: 218, green: 112, blue: 214 }),
+ ("violet", RgbColor{ red: 238, green: 130, blue: 238 }),
+ ("dimgray", RgbColor{ red: 105, green: 105, blue: 105 }),
+ ("ivory", RgbColor{ red: 255, green: 255, blue: 240 }),
+ ("lightsteelblue", RgbColor{ red: 176, green: 196, blue: 222 }),
+ ("mediumslateblue", RgbColor{ red: 123, green: 104, blue: 238 }),
]),
};
-pub fn rgb_color_from_name(text: &str) -> Option<Color> {
+pub fn rgb_color_from_name(text: &str) -> Option<RgbColor> {
COLORS.get(text).cloned()
}
diff --git a/src/lib.rs b/src/lib.rs
index 05dbff3..2bd2e75 100644
@@ -54,20 +54,18 @@ but also supports [SVG types](https://www.w3.org/TR/SVG/types.html#BasicDataType
#![doc(html_root_url = "https://docs.rs/svgparser/0.4.2")]
#![forbid(unsafe_code)]
-#![warn(missing_docs)]
-#![deny(unused_import_braces)]
+// #![warn(missing_docs)]
extern crate phf;
pub use attribute_id::AttributeId;
pub use attribute_value::{AttributeValue, PaintFallback};
-pub use color::Color;
+pub use color::RgbColor;
pub use element_id::ElementId;
pub use error::{Error, ErrorPos};
pub use length::{Length, LengthUnit};
pub use stream::{TextFrame, Stream};
pub use tokenize::Tokenize;
-pub use value_id::ValueId;
pub use values_list::{NumberList, LengthList};
/// Prints warnings into stderr.
@@ -84,6 +82,7 @@ macro_rules! warnln {
});
}
+pub mod property;
pub mod path;
pub mod style;
pub mod svg;
diff --git a/src/value_id.rs b/src/value_id.rs
index f520172..46d43e1 100644
@@ -4,12 +4,19 @@
// This file is autogenerated. Do not edit it!
-use std::fmt;
-
/// List of all values for presentation attributes.
-#[derive(Copy,Clone,Eq,PartialEq,Ord,PartialOrd,Hash)]
+#[derive(Copy,Clone,PartialEq)]
#[allow(missing_docs)]
pub enum ValueId {
+ N100,
+ N200,
+ N300,
+ N400,
+ N500,
+ N600,
+ N700,
+ N800,
+ N900,
Accumulate,
AfterEdge,
All,
@@ -139,157 +146,168 @@ pub enum ValueId {
static VALUES: ::phf::Map<&'static str, ValueId> = ::phf::Map {
key: 9603444721912725599,
disps: ::phf::Slice::Static(&[
+ (2, 1),
+ (0, 14),
+ (0, 10),
(0, 59),
- (5, 99),
- (3, 104),
- (2, 26),
- (1, 33),
(0, 25),
- (0, 16),
- (5, 53),
- (0, 0),
- (13, 34),
- (0, 14),
+ (0, 43),
+ (1, 87),
+ (2, 12),
(0, 0),
- (2, 50),
- (0, 11),
- (4, 78),
- (11, 59),
- (1, 11),
- (6, 112),
- (0, 101),
+ (0, 79),
+ (1, 35),
+ (1, 32),
+ (2, 3),
+ (3, 83),
+ (0, 45),
+ (1, 0),
(0, 0),
- (3, 120),
- (0, 5),
- (15, 94),
- (0, 98),
- (14, 8),
+ (8, 52),
+ (3, 33),
+ (6, 2),
+ (1, 116),
+ (0, 85),
+ (1, 97),
+ (1, 3),
+ (0, 7),
+ (0, 61),
+ (11, 82),
]),
entries: ::phf::Slice::Static(&[
+ ("200", ValueId::N200),
+ ("bolder", ValueId::Bolder),
+ ("text-before-edge", ValueId::TextBeforeEdge),
("table-column-group", ValueId::TableColumnGroup),
- ("accumulate", ValueId::Accumulate),
- ("nonzero", ValueId::Nonzero),
- ("n-resize", ValueId::NResize),
- ("nw-resize", ValueId::NwResize),
- ("mathematical", ValueId::Mathematical),
- ("extra-expanded", ValueId::ExtraExpanded),
- ("ideographic", ValueId::Ideographic),
- ("bidi-override", ValueId::BidiOverride),
- ("optimizeSpeed", ValueId::OptimizeSpeed),
- ("s-resize", ValueId::SResize),
- ("marker", ValueId::Marker),
- ("text-after-edge", ValueId::TextAfterEdge),
- ("rtl", ValueId::Rtl),
- ("wider", ValueId::Wider),
+ ("rl", ValueId::Rl),
("scroll", ValueId::Scroll),
- ("sw-resize", ValueId::SwResize),
- ("small", ValueId::Small),
- ("visible", ValueId::Visible),
- ("central", ValueId::Central),
+ ("reset-size", ValueId::ResetSize),
+ ("800", ValueId::N800),
+ ("embed", ValueId::Embed),
("lighter", ValueId::Lighter),
- ("xx-small", ValueId::XxSmall),
- ("list-item", ValueId::ListItem),
- ("optimizeLegibility", ValueId::OptimizeLegibility),
- ("table-row-group", ValueId::TableRowGroup),
+ ("stroke", ValueId::Stroke),
("hanging", ValueId::Hanging),
- ("no-change", ValueId::NoChange),
- ("move", ValueId::Move),
- ("lr-tb", ValueId::LrTb),
- ("linearRGB", ValueId::LinearRGB),
- ("visiblePainted", ValueId::VisiblePainted),
- ("all", ValueId::All),
+ ("table", ValueId::Table),
("compact", ValueId::Compact),
- ("x-small", ValueId::XSmall),
- ("userSpaceOnUse", ValueId::UserSpaceOnUse),
- ("end", ValueId::End),
- ("small-caps", ValueId::SmallCaps),
- ("wait", ValueId::Wait),
- ("semi-condensed", ValueId::SemiCondensed),
+ ("square", ValueId::Square),
+ ("rl-tb", ValueId::RlTb),
+ ("table-row", ValueId::TableRow),
+ ("bevel", ValueId::Bevel),
+ ("700", ValueId::N700),
+ ("overline", ValueId::Overline),
("currentColor", ValueId::CurrentColor),
- ("geometricPrecision", ValueId::GeometricPrecision),
- ("blink", ValueId::Blink),
- ("ne-resize", ValueId::NeResize),
- ("round", ValueId::Round),
- ("baseline", ValueId::Baseline),
- ("painted", ValueId::Painted),
- ("help", ValueId::Help),
- ("smaller", ValueId::Smaller),
- ("reflect", ValueId::Reflect),
- ("run-in", ValueId::RunIn),
- ("fill", ValueId::Fill),
("w-resize", ValueId::WResize),
- ("inline", ValueId::Inline),
- ("xx-large", ValueId::XxLarge),
+ ("table-caption", ValueId::TableCaption),
+ ("evenodd", ValueId::Evenodd),
+ ("semi-expanded", ValueId::SemiExpanded),
("large", ValueId::Large),
- ("text-before-edge", ValueId::TextBeforeEdge),
- ("ultra-expanded", ValueId::UltraExpanded),
+ ("userSpaceOnUse", ValueId::UserSpaceOnUse),
+ ("collapse", ValueId::Collapse),
+ ("extra-condensed", ValueId::ExtraCondensed),
+ ("nw-resize", ValueId::NwResize),
+ ("hidden", ValueId::Hidden),
("objectBoundingBox", ValueId::ObjectBoundingBox),
+ ("help", ValueId::Help),
+ ("x-small", ValueId::XSmall),
+ ("crispEdges", ValueId::CrispEdges),
+ ("auto", ValueId::Auto),
+ ("painted", ValueId::Painted),
("italic", ValueId::Italic),
- ("normal", ValueId::Normal),
- ("table-caption", ValueId::TableCaption),
+ ("start", ValueId::Start),
+ ("expanded", ValueId::Expanded),
+ ("condensed", ValueId::Condensed),
+ ("tb", ValueId::Tb),
+ ("inherit", ValueId::Inherit),
+ ("use-script", ValueId::UseScript),
+ ("wait", ValueId::Wait),
+ ("alphabetic", ValueId::Alphabetic),
+ ("ideographic", ValueId::Ideographic),
+ ("crosshair", ValueId::Crosshair),
("ultra-condensed", ValueId::UltraCondensed),
- ("square", ValueId::Square),
- ("extra-condensed", ValueId::ExtraCondensed),
- ("evenodd", ValueId::Evenodd),
- ("rl", ValueId::Rl),
- ("ltr", ValueId::Ltr),
- ("auto", ValueId::Auto),
- ("oblique", ValueId::Oblique),
- ("before-edge", ValueId::BeforeEdge),
- ("hidden", ValueId::Hidden),
- ("super", ValueId::Super),
+ ("marker", ValueId::Marker),
+ ("optimizeQuality", ValueId::OptimizeQuality),
+ ("after-edge", ValueId::AfterEdge),
+ ("visibleStroke", ValueId::VisibleStroke),
+ ("extra-expanded", ValueId::ExtraExpanded),
+ ("inline", ValueId::Inline),
+ ("miter", ValueId::Miter),
+ ("accumulate", ValueId::Accumulate),
("text", ValueId::Text),
- ("collapse", ValueId::Collapse),
- ("visibleFill", ValueId::VisibleFill),
- ("table-column", ValueId::TableColumn),
- ("overline", ValueId::Overline),
- ("pointer", ValueId::Pointer),
- ("se-resize", ValueId::SeResize),
+ ("sw-resize", ValueId::SwResize),
("line-through", ValueId::LineThrough),
- ("table-header-group", ValueId::TableHeaderGroup),
- ("condensed", ValueId::Condensed),
- ("visibleStroke", ValueId::VisibleStroke),
+ ("round", ValueId::Round),
+ ("e-resize", ValueId::EResize),
+ ("xx-large", ValueId::XxLarge),
+ ("end", ValueId::End),
+ ("tb-rl", ValueId::TbRl),
+ ("super", ValueId::Super),
+ ("butt", ValueId::Butt),
+ ("ne-resize", ValueId::NeResize),
+ ("visible", ValueId::Visible),
+ ("geometricPrecision", ValueId::GeometricPrecision),
+ ("100", ValueId::N100),
+ ("400", ValueId::N400),
+ ("xx-small", ValueId::XxSmall),
+ ("central", ValueId::Central),
+ ("text-after-edge", ValueId::TextAfterEdge),
+ ("visibleFill", ValueId::VisibleFill),
+ ("bold", ValueId::Bold),
+ ("optimizeSpeed", ValueId::OptimizeSpeed),
+ ("n-resize", ValueId::NResize),
+ ("bidi-override", ValueId::BidiOverride),
+ ("run-in", ValueId::RunIn),
+ ("list-item", ValueId::ListItem),
("none", ValueId::None),
- ("semi-expanded", ValueId::SemiExpanded),
- ("sub", ValueId::Sub),
("repeat", ValueId::Repeat),
- ("table-cell", ValueId::TableCell),
- ("x-large", ValueId::XLarge),
- ("after-edge", ValueId::AfterEdge),
- ("crosshair", ValueId::Crosshair),
- ("butt", ValueId::Butt),
- ("tb", ValueId::Tb),
- ("inline-table", ValueId::InlineTable),
+ ("table-column", ValueId::TableColumn),
+ ("small-caps", ValueId::SmallCaps),
+ ("visiblePainted", ValueId::VisiblePainted),
+ ("sRGB", ValueId::SRGB),
+ ("nonzero", ValueId::Nonzero),
+ ("no-change", ValueId::NoChange),
+ ("table-row-group", ValueId::TableRowGroup),
("larger", ValueId::Larger),
+ ("oblique", ValueId::Oblique),
+ ("reflect", ValueId::Reflect),
+ ("se-resize", ValueId::SeResize),
+ ("s-resize", ValueId::SResize),
+ ("table-cell", ValueId::TableCell),
+ ("sub", ValueId::Sub),
+ ("lr", ValueId::Lr),
("block", ValueId::Block),
- ("use-script", ValueId::UseScript),
- ("pad", ValueId::Pad),
- ("tb-rl", ValueId::TbRl),
("table-footer-group", ValueId::TableFooterGroup),
- ("narrower", ValueId::Narrower),
- ("bolder", ValueId::Bolder),
- ("underline", ValueId::Underline),
- ("miter", ValueId::Miter),
- ("embed", ValueId::Embed),
- ("optimizeQuality", ValueId::OptimizeQuality),
- ("reset-size", ValueId::ResetSize),
- ("lr", ValueId::Lr),
+ ("small", ValueId::Small),
+ ("middle", ValueId::Middle),
+ ("optimizeLegibility", ValueId::OptimizeLegibility),
+ ("x-large", ValueId::XLarge),
+ ("linearRGB", ValueId::LinearRGB),
("medium", ValueId::Medium),
- ("stroke", ValueId::Stroke),
- ("e-resize", ValueId::EResize),
- ("bold", ValueId::Bold),
- ("sRGB", ValueId::SRGB),
- ("table", ValueId::Table),
+ ("underline", ValueId::Underline),
+ ("inline-table", ValueId::InlineTable),
+ ("500", ValueId::N500),
+ ("900", ValueId::N900),
+ ("move", ValueId::Move),
+ ("lr-tb", ValueId::LrTb),
+ ("smaller", ValueId::Smaller),
+ ("narrower", ValueId::Narrower),
+ ("ultra-expanded", ValueId::UltraExpanded),
+ ("all", ValueId::All),
+ ("table-header-group", ValueId::TableHeaderGroup),
+ ("before-edge", ValueId::BeforeEdge),
+ ("pointer", ValueId::Pointer),
("default", ValueId::Default),
- ("table-row", ValueId::TableRow),
- ("expanded", ValueId::Expanded),
- ("start", ValueId::Start),
- ("rl-tb", ValueId::RlTb),
- ("middle", ValueId::Middle),
- ("alphabetic", ValueId::Alphabetic),
- ("crispEdges", ValueId::CrispEdges),
- ("inherit", ValueId::Inherit),
- ("bevel", ValueId::Bevel),
+ ("normal", ValueId::Normal),
+ ("fill", ValueId::Fill),
+ ("ltr", ValueId::Ltr),
+ ("blink", ValueId::Blink),
+ ("300", ValueId::N300),
+ ("600", ValueId::N600),
+ ("mathematical", ValueId::Mathematical),
+ ("wider", ValueId::Wider),
+ ("baseline", ValueId::Baseline),
+ ("rtl", ValueId::Rtl),
+ ("pad", ValueId::Pad),
+ ("semi-condensed", ValueId::SemiCondensed),
]),
};
@@ -298,146 +316,4 @@ impl ValueId {
pub fn from_name(text: &str) -> Option<ValueId> {
VALUES.get(text).cloned()
}
-
- /// Converts id into name.
- pub fn name(&self) -> &str {
- match *self {
- ValueId::Accumulate => "accumulate",
- ValueId::AfterEdge => "after-edge",
- ValueId::All => "all",
- ValueId::Alphabetic => "alphabetic",
- ValueId::Auto => "auto",
- ValueId::Baseline => "baseline",
- ValueId::BeforeEdge => "before-edge",
- ValueId::Bevel => "bevel",
- ValueId::BidiOverride => "bidi-override",
- ValueId::Blink => "blink",
- ValueId::Block => "block",
- ValueId::Bold => "bold",
- ValueId::Bolder => "bolder",
- ValueId::Butt => "butt",
- ValueId::Central => "central",
- ValueId::Collapse => "collapse",
- ValueId::Compact => "compact",
- ValueId::Condensed => "condensed",
- ValueId::CrispEdges => "crispEdges",
- ValueId::Crosshair => "crosshair",
- ValueId::CurrentColor => "currentColor",
- ValueId::Default => "default",
- ValueId::EResize => "e-resize",
- ValueId::Embed => "embed",
- ValueId::End => "end",
- ValueId::Evenodd => "evenodd",
- ValueId::Expanded => "expanded",
- ValueId::ExtraCondensed => "extra-condensed",
- ValueId::ExtraExpanded => "extra-expanded",
- ValueId::Fill => "fill",
- ValueId::GeometricPrecision => "geometricPrecision",
- ValueId::Hanging => "hanging",
- ValueId::Help => "help",
- ValueId::Hidden => "hidden",
- ValueId::Ideographic => "ideographic",
- ValueId::Inherit => "inherit",
- ValueId::Inline => "inline",
- ValueId::InlineTable => "inline-table",
- ValueId::Italic => "italic",
- ValueId::Large => "large",
- ValueId::Larger => "larger",
- ValueId::Lighter => "lighter",
- ValueId::LineThrough => "line-through",
- ValueId::LinearRGB => "linearRGB",
- ValueId::ListItem => "list-item",
- ValueId::Lr => "lr",
- ValueId::LrTb => "lr-tb",
- ValueId::Ltr => "ltr",
- ValueId::Marker => "marker",
- ValueId::Mathematical => "mathematical",
- ValueId::Medium => "medium",
- ValueId::Middle => "middle",
- ValueId::Miter => "miter",
- ValueId::Move => "move",
- ValueId::NResize => "n-resize",
- ValueId::Narrower => "narrower",
- ValueId::NeResize => "ne-resize",
- ValueId::NoChange => "no-change",
- ValueId::None => "none",
- ValueId::Nonzero => "nonzero",
- ValueId::Normal => "normal",
- ValueId::NwResize => "nw-resize",
- ValueId::ObjectBoundingBox => "objectBoundingBox",
- ValueId::Oblique => "oblique",
- ValueId::OptimizeLegibility => "optimizeLegibility",
- ValueId::OptimizeQuality => "optimizeQuality",
- ValueId::OptimizeSpeed => "optimizeSpeed",
- ValueId::Overline => "overline",
- ValueId::Pad => "pad",
- ValueId::Painted => "painted",
- ValueId::Pointer => "pointer",
- ValueId::Reflect => "reflect",
- ValueId::Repeat => "repeat",
- ValueId::ResetSize => "reset-size",
- ValueId::Rl => "rl",
- ValueId::RlTb => "rl-tb",
- ValueId::Round => "round",
- ValueId::Rtl => "rtl",
- ValueId::RunIn => "run-in",
- ValueId::SResize => "s-resize",
- ValueId::Scroll => "scroll",
- ValueId::SeResize => "se-resize",
- ValueId::SemiCondensed => "semi-condensed",
- ValueId::SemiExpanded => "semi-expanded",
- ValueId::Small => "small",
- ValueId::SmallCaps => "small-caps",
- ValueId::Smaller => "smaller",
- ValueId::Square => "square",
- ValueId::SRGB => "sRGB",
- ValueId::Start => "start",
- ValueId::Stroke => "stroke",
- ValueId::Sub => "sub",
- ValueId::Super => "super",
- ValueId::SwResize => "sw-resize",
- ValueId::Table => "table",
- ValueId::TableCaption => "table-caption",
- ValueId::TableCell => "table-cell",
- ValueId::TableColumn => "table-column",
- ValueId::TableColumnGroup => "table-column-group",
- ValueId::TableFooterGroup => "table-footer-group",
- ValueId::TableHeaderGroup => "table-header-group",
- ValueId::TableRow => "table-row",
- ValueId::TableRowGroup => "table-row-group",
- ValueId::Tb => "tb",
- ValueId::TbRl => "tb-rl",
- ValueId::Text => "text",
- ValueId::TextAfterEdge => "text-after-edge",
- ValueId::TextBeforeEdge => "text-before-edge",
- ValueId::UltraCondensed => "ultra-condensed",
- ValueId::UltraExpanded => "ultra-expanded",
- ValueId::Underline => "underline",
- ValueId::UseScript => "use-script",
- ValueId::UserSpaceOnUse => "userSpaceOnUse",
- ValueId::Visible => "visible",
- ValueId::VisibleFill => "visibleFill",
- ValueId::VisiblePainted => "visiblePainted",
- ValueId::VisibleStroke => "visibleStroke",
- ValueId::WResize => "w-resize",
- ValueId::Wait => "wait",
- ValueId::Wider => "wider",
- ValueId::XLarge => "x-large",
- ValueId::XSmall => "x-small",
- ValueId::XxLarge => "xx-large",
- ValueId::XxSmall => "xx-small",
- }
- }
-}
-
-impl fmt::Debug for ValueId {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "{}", self.name())
- }
-}
-
-impl fmt::Display for ValueId {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "{}", self.name())
- }
}
diff --git a/tests/attribute_value.rs b/tests/attribute_value.rs
index f8cb9d6..73df9eb 100644
@@ -9,10 +9,15 @@ use svgparser::{
AttributeValue as AV,
PaintFallback,
ElementId,
- Color,
+ RgbColor,
Error,
ErrorPos,
- ValueId,
+ // ValueId,
+};
+
+use svgparser::property::{
+ Property,
+ Fill,
};
macro_rules! test {
@@ -35,33 +40,33 @@ macro_rules! test_err {
)
}
-test_err!(empty_1, AId::Fill, "", Error::UnexpectedEndOfStream(ErrorPos::new(1, 1)));
-test_err!(empty_2, AId::Fill, " ", Error::UnexpectedEndOfStream(ErrorPos::new(1, 2)));
+test_err!(empty_1, AId::Fill, "", Error::InvalidAttributeValue(ErrorPos::new(1, 1)));
+test_err!(empty_2, AId::Fill, " ", Error::InvalidAttributeValue(ErrorPos::new(1, 1)));
// unicode attribute can have spaces
test!(unicode_1, AId::Unicode, " ", AV::String(" "));
-test!(paint_1, AId::Fill, "none", AV::PredefValue(ValueId::None));
+test!(paint_1, AId::Fill, "none", AV::Property(Property::Fill(Fill::None)));
-test!(paint_2, AId::Fill, "currentColor", AV::PredefValue(ValueId::CurrentColor));
+test!(paint_2, AId::Fill, "currentColor", AV::Property(Property::Fill(Fill::CurrentColor)));
-test!(paint_3, AId::Fill, "inherit", AV::PredefValue(ValueId::Inherit));
+test!(paint_3, AId::Fill, "inherit", AV::Property(Property::Fill(Fill::Inherit)));
-test!(paint_4, AId::Fill, "red", AV::Color(Color::new(255, 0, 0)));
+test!(paint_4, AId::Fill, "red", AV::Property(Property::Fill(Fill::Color(RgbColor::new(255, 0, 0)))));
-test!(paint_5, AId::Fill, "url(#link)", AV::FuncIRI("link"));
+test!(paint_5, AId::Fill, "url(#link)", AV::Property(Property::Fill(Fill::FuncIRI("link"))));
-test!(paint_6, AId::Fill, "url(#link) red",
- AV::FuncIRIWithFallback("link", PaintFallback::Color(Color::new(255, 0, 0))));
+// test!(paint_6, AId::Fill, "url(#link) red",
+// AV::FuncIRIWithFallback("link", PaintFallback::Color(RgbColor::new(255, 0, 0))));
-// same as above, but for `stroke`
-test!(paint_7, AId::Stroke, "url(#link) red",
- AV::FuncIRIWithFallback("link", PaintFallback::Color(Color::new(255, 0, 0))));
+// // same as above, but for `stroke`
+// test!(paint_7, AId::Stroke, "url(#link) red",
+// AV::FuncIRIWithFallback("link", PaintFallback::Color(RgbColor::new(255, 0, 0))));
-test!(paint_8, AId::Fill, "url(#link) none",
- AV::FuncIRIWithFallback("link", PaintFallback::PredefValue(ValueId::None)));
+// test!(paint_8, AId::Fill, "url(#link) none",
+// AV::FuncIRIWithFallback("link", PaintFallback::None));
// color is last type that we check during parsing <paint>, so any error will be like that
-test_err!(paint_err_1, AId::Fill, "#link", Error::InvalidColor(ErrorPos::new(1, 1)));
+test_err!(paint_err_1, AId::Fill, "#link", Error::InvalidAttributeValue(ErrorPos::new(1, 1)));
test!(ref_1, AId::Class, "&ref;", AV::EntityRef("ref"));
diff --git a/tests/color.rs b/tests/color.rs
index 8d77bfb..9fcf21c 100644
@@ -6,13 +6,13 @@ extern crate svgparser;
use std::str::FromStr;
-use svgparser::{Color, Error, ErrorPos};
+use svgparser::{RgbColor, Error, ErrorPos};
macro_rules! test_parse {
($name:ident, $text:expr, $color:expr) => {
#[test]
fn $name() {
- assert_eq!(Color::from_str($text).unwrap(), $color);
+ assert_eq!(RgbColor::from_str($text).unwrap(), $color);
}
};
}
@@ -20,80 +20,80 @@ macro_rules! test_parse {
test_parse!(
rrggbb,
"#ff0000",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
rrggbb_upper,
"#FF0000",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
rgb_hex,
"#f00",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
rrggbb_spaced,
" #ff0000 ",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
rgb_numeric,
"rgb(254, 203, 231)",
- Color::new(254, 203, 231)
+ RgbColor::new(254, 203, 231)
);
test_parse!(
rgb_numeric_spaced,
" rgb( 77 , 77 , 77 ) ",
- Color::new(77, 77, 77)
+ RgbColor::new(77, 77, 77)
);
test_parse!(
rgb_percentage,
"rgb(50%, 50%, 50%)",
- Color::new(127, 127, 127)
+ RgbColor::new(127, 127, 127)
);
test_parse!(
rgb_percentage_overflow,
"rgb(140%, -10%, 130%)",
- Color::new(255, 0, 255)
+ RgbColor::new(255, 0, 255)
);
test_parse!(
rgb_percentage_float,
"rgb(33.333%,46.666%,93.333%)",
- Color::new(85, 119, 238)
+ RgbColor::new(85, 119, 238)
);
test_parse!(
name_red,
"red",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
name_red_spaced,
" red ",
- Color::new(255, 0, 0)
+ RgbColor::new(255, 0, 0)
);
test_parse!(
name_cornflowerblue,
"cornflowerblue",
- Color::new(100, 149, 237)
+ RgbColor::new(100, 149, 237)
);
macro_rules! test_error {
($name:ident, $text:expr, $err:expr) => {
#[test]
fn $name() {
- assert_eq!(Color::from_str($text).err().unwrap(), $err);
+ assert_eq!(RgbColor::from_str($text).err().unwrap(), $err);
}
};
}