[librsvg: 48/48] Merge branch 'xml-processing'



commit d06e52ad9e2c13d76648ccc806df70ae94a670dc
Merge: 9dfa5755 ea63ebfc
Author: Federico Mena Quintero <federico gnome org>
Date:   Sat Nov 17 04:10:54 2018 -0600

    Merge branch 'xml-processing'
    
    The dodgy stack of XML handlers we had in C is gone now; it's replaced
    with a much simpler scheme in Rust code.
    
    Pending things:
    
    - Actually call libxml2 from Rust
    
    - Handle XML entities in Rust
    
    - Handle XML processing instructions in Rust
    
    - Move the rsvg_handle_acquire_() machinery to Rust; this is basically
      rsvg-io.c and the allow_load() stuff.

 Cargo.lock                                       | 350 +++++++------
 Makefile.am                                      |   4 +-
 librsvg/rsvg-load.c                              | 610 +++++------------------
 librsvg/rsvg-load.h                              |   3 +
 librsvg/rsvg-private.h                           |  39 --
 rsvg_internals/Cargo.toml                        |   1 +
 rsvg_internals/src/css.rs                        |   6 +-
 rsvg_internals/src/defs.rs                       |  85 +++-
 rsvg_internals/src/filters/image.rs              |   8 +-
 rsvg_internals/src/handle.rs                     |  13 +-
 rsvg_internals/src/lib.rs                        |  29 +-
 rsvg_internals/src/load.rs                       |  84 +---
 rsvg_internals/src/node.rs                       | 166 +-----
 rsvg_internals/src/style.rs                      |  72 +++
 rsvg_internals/src/text.rs                       |  48 +-
 rsvg_internals/src/tree.rs                       |   8 -
 rsvg_internals/src/xml.rs                        | 463 +++++++++++++++++
 tests/Makefile.am                                |   1 +
 tests/dimensions.c                               |  13 +-
 tests/fixtures/loading/include-fallback.svg      |  10 +
 tests/fixtures/loading/include-text.svg          |   6 +
 tests/fixtures/loading/text.txt                  |   1 +
 tests/fixtures/reftests/include-fallback-ref.png | Bin 0 -> 1093 bytes
 tests/fixtures/reftests/include-fallback.svg     |  10 +
 tests/fixtures/reftests/include-text-ref.png     | Bin 0 -> 940 bytes
 tests/fixtures/reftests/include-text.svg         |   6 +
 tests/fixtures/reftests/text.txt                 |   1 +
 27 files changed, 1053 insertions(+), 984 deletions(-)
---
diff --cc Cargo.lock
index 635e4e7b,aa40a180..508e0ed4
--- a/Cargo.lock
+++ b/Cargo.lock
@@@ -1,9 -1,9 +1,9 @@@
  [[package]]
  name = "aho-corasick"
- version = "0.6.8"
 -version = "0.6.4"
++version = "0.6.9"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -12,9 -12,8 +12,9 @@@ version = "0.7.2
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "approx 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "num-complex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "num-complex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -38,7 -37,7 +38,7 @@@ name = "arrayvec
  version = "0.4.7"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-- "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -56,11 -55,11 +56,11 @@@ name = "backtrace
  version = "0.3.9"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
 - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
 + "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
-  "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
   "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
 - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -84,7 -83,7 +84,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "byteorder"
- version = "1.2.6"
 -version = "1.2.3"
++version = "1.2.7"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
@@@ -126,7 -125,7 +126,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "cfg-if"
- version = "0.1.5"
 -version = "0.1.4"
++version = "0.1.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
@@@ -163,33 -162,32 +163,33 @@@ dependencies = 
  
  [[package]]
  name = "criterion"
 -version = "0.2.4"
 +version = "0.2.5"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
 + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
   "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "criterion-plot 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "criterion-stats 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "csv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 + "criterion-plot 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "criterion-stats 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "csv 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
   "handlebars 0.32.4 (registry+https://github.com/rust-lang/crates.io-index)",
   "itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
 - "itertools-num 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
 - "simplelog 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
 + "itertools-num 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)",
-  "simplelog 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
++ "simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "criterion-plot"
 -version = "0.2.4"
 +version = "0.2.5"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
   "cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
   "itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
@@@ -221,11 -219,11 +221,11 @@@ version = "0.3.1
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
-  "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
   "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
-- "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
   "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
@@@ -234,36 -232,36 +234,36 @@@ name = "crossbeam-utils
  version = "0.2.2"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "cssparser"
--version = "0.24.0"
++version = "0.24.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-- "cssparser-macros 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cssparser-macros 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
   "dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
 - "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)",
 - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 + "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 + "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
   "procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "syn 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "cssparser-macros"
--version = "0.3.4"
++version = "0.3.5"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)",
 - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
   "procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "syn 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -272,7 -270,7 +272,7 @@@ version = "1.0.2
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "csv-core 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -280,7 -278,7 +280,7 @@@ name = "csv-core
  version = "0.1.4"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -306,24 -304,80 +306,81 @@@ name = "either
  version = "1.5.0"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
+ [[package]]
+ name = "encoding"
+ version = "0.2.33"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+  "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding-index-japanese"
+ version = "1.20141219.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding-index-korean"
+ version = "1.20141219.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding-index-simpchinese"
+ version = "1.20141219.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding-index-singlebyte"
+ version = "1.20141219.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding-index-tradchinese"
+ version = "1.20141219.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ dependencies = [
+  "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+ 
+ [[package]]
+ name = "encoding_index_tests"
+ version = "0.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index";
+ 
  [[package]]
  name = "failure"
- version = "0.1.2"
 -version = "0.1.1"
++version = "0.1.3"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
-  "failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
 - "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "failure_derive"
- version = "0.1.2"
 -version = "0.1.1"
++version = "0.1.3"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
-  "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
 - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
 - "synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -383,42 -410,16 +440,42 @@@ dependencies = 
   "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
 +[[package]]
 +name = "gio"
 +version = "0.4.1"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
 + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 + "gio-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
 +[[package]]
 +name = "gio-sys"
 +version = "0.6.0"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
 + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 + "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 + "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
  [[package]]
  name = "glib"
  version = "0.5.0"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
 + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
   "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -447,14 -448,14 +504,14 @@@ name = "handlebars
  version = "0.32.4"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
   "pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "pest_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
 + "pest_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
   "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)",
 - "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -494,16 -481,8 +551,13 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "lazy_static"
 -version = "1.0.1"
 +version = "0.2.11"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +
 +[[package]]
 +name = "lazy_static"
- version = "1.1.0"
++version = "1.2.0"
  source = "registry+https://github.com/rust-lang/crates.io-index";
- dependencies = [
-  "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- ]
  
  [[package]]
  name = "libc"
@@@ -528,10 -491,10 +582,10 @@@ dependencies = 
  
  [[package]]
  name = "log"
- version = "0.4.5"
 -version = "0.4.3"
++version = "0.4.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -541,7 -504,7 +595,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "matrixmultiply"
--version = "0.1.14"
++version = "0.1.15"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@@ -549,12 -512,10 +603,12 @@@
  
  [[package]]
  name = "memchr"
- version = "2.1.0"
 -version = "2.0.1"
++version = "2.1.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -564,30 -525,30 +618,30 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "nalgebra"
- version = "0.16.4"
 -version = "0.16.0"
++version = "0.16.10"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "alga 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
   "approx 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "generic-array 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
-- "matrixmultiply 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
-- "num-complex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
 + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
   "typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "nodrop"
--version = "0.1.12"
++version = "0.1.13"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
  name = "num-complex"
--version = "0.2.0"
++version = "0.2.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -730,7 -699,7 +784,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "proc-macro2"
- version = "0.4.19"
 -version = "0.4.6"
++version = "0.4.24"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@@ -753,10 -722,10 +807,10 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "quote"
- version = "0.6.8"
 -version = "0.6.3"
++version = "0.6.10"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
 - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -801,7 -762,7 +855,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "rayon"
--version = "1.0.2"
++version = "1.0.3"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@@ -815,14 -776,14 +869,14 @@@ version = "1.4.1
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
   "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "redox_syscall"
--version = "0.1.40"
++version = "0.1.42"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
@@@ -830,47 -791,27 +884,47 @@@ name = "redox_termios
  version = "0.1.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-- "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
 +[[package]]
 +name = "regex"
 +version = "0.2.11"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
-  "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 + "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "regex"
- version = "1.0.5"
 -version = "1.0.1"
++version = "1.0.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
-  "regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
 - "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
 - "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "regex-syntax"
 -version = "0.6.1"
 +version = "0.5.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-- "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
 +[[package]]
 +name = "regex-syntax"
- version = "0.6.2"
++version = "0.6.3"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
-  "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -879,29 -820,27 +933,30 @@@ version = "0.0.1
  dependencies = [
   "cairo-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
   "cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "criterion 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "cssparser 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "criterion 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
-  "cssparser 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cssparser 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
   "downcast-rs 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+  "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
   "float-cmp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "gdk-pixbuf 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "glib 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "glib-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
 - "nalgebra 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
 + "locale_config 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "nalgebra 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nalgebra 0.16.10 (registry+https://github.com/rust-lang/crates.io-index)",
 + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
   "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
   "pango 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "pango-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "pangocairo 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
   "pangocairo-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)",
 - "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)",
 - "rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 - "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 + "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
 + "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
-  "rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
-  "regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -909,19 -848,6 +964,19 @@@ name = "rustc-demangle
  version = "0.1.9"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
 +[[package]]
 +name = "ryu"
- version = "0.2.6"
++version = "0.2.7"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +
 +[[package]]
 +name = "same-file"
- version = "1.0.3"
++version = "1.0.4"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
 + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
  [[package]]
  name = "scopeguard"
  version = "0.3.3"
@@@ -929,36 -855,36 +984,36 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "serde"
- version = "1.0.79"
 -version = "1.0.70"
++version = "1.0.80"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
  name = "serde_derive"
- version = "1.0.79"
 -version = "1.0.70"
++version = "1.0.80"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "syn 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)",
 - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "syn 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "serde_json"
- version = "1.0.31"
 -version = "1.0.24"
++version = "1.0.33"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
 - "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)",
 + "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
-  "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
  name = "simplelog"
--version = "0.5.2"
++version = "0.5.3"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "chrono 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
 - "log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
 + "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
-  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
   "term 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
@@@ -969,7 -895,7 +1024,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "smallvec"
- version = "0.6.5"
 -version = "0.6.3"
++version = "0.6.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@@ -997,21 -923,11 +1052,21 @@@ dependencies = 
  
  [[package]]
  name = "syn"
 -version = "0.14.4"
 +version = "0.14.9"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
 - "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
 + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
 +[[package]]
 +name = "syn"
- version = "0.15.7"
++version = "0.15.21"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
   "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
@@@ -1025,13 -941,11 +1080,13 @@@ dependencies = 
  
  [[package]]
  name = "synstructure"
- version = "0.9.0"
 -version = "0.6.1"
++version = "0.10.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)",
-  "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)",
-  "syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)",
 - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
 - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
 + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -1039,8 -953,8 +1094,8 @@@ name = "term
  version = "0.5.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
 - "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
 - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
 + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -1048,8 -962,8 +1103,8 @@@ name = "termion
  version = "1.5.1"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
 - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
-  "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
   "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
@@@ -1068,10 -982,11 +1123,10 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "thread_local"
 -version = "0.3.5"
 +version = "0.3.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
-  "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 - "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 - "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -1079,9 -994,9 +1134,9 @@@ name = "time
  version = "0.1.40"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
 - "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
 - "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 - "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
 + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
-  "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
 + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
  ]
  
  [[package]]
@@@ -1091,7 -1006,7 +1146,7 @@@ source = "registry+https://github.com/r
  
  [[package]]
  name = "ucd-util"
--version = "0.1.1"
++version = "0.1.3"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
@@@ -1119,7 -1034,7 +1174,7 @@@ dependencies = 
  
  [[package]]
  name = "utf8-ranges"
- version = "1.0.1"
 -version = "1.0.0"
++version = "1.0.2"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [[package]]
@@@ -1137,24 -1047,9 +1192,24 @@@ name = "void
  version = "1.0.2"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
 +[[package]]
 +name = "walkdir"
- version = "2.2.5"
++version = "2.2.7"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +dependencies = [
-  "same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 +]
 +
  [[package]]
  name = "winapi"
 -version = "0.3.5"
 +version = "0.2.8"
 +source = "registry+https://github.com/rust-lang/crates.io-index";
 +
 +[[package]]
 +name = "winapi"
 +version = "0.3.6"
  source = "registry+https://github.com/rust-lang/crates.io-index";
  dependencies = [
   "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@@ -1185,42 -1067,49 +1240,49 @@@ version = "0.4.0
  source = "registry+https://github.com/rust-lang/crates.io-index";
  
  [metadata]
- "checksum aho-corasick 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"68f56c7353e5a9547cbd76ed90f7bb5ffc3ba09d4ea9bd1d8c06c8b1142eeb5a"
 -"checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4"
 -"checksum alga 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d3d5dbb7fa6898343fd31e14e8abf2563b6c61a81c1a2e15a678a2f351a249ed"
++"checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = 
"1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e"
 +"checksum alga 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"24bb00eeca59f2986c747b8c2f271d52310ce446be27428fc34705138b155778"
  "checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
  "checksum approx 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"f71f10b5c4946a64aad7b8cf65e3406cd3da22fc448595991d22423cf6db67b4"
  "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef"
 -"checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1"
 +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
  "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = 
"89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
 -"checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = 
"bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e"
 +"checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0"
  "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
 -"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789"
 -"checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9"
 -"checksum c_vec 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"fa8f19d0a87ec08bc2925d8aa809bdd3b38d3f2c32f7b247f2cd4c56aa005ac5"
 +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
- "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781"
++"checksum byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d"
 +"checksum c_vec 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6c32b15e95ce816aaf991a41420854e6ba772a2679a9296d906eab1114f1b4e9"
  "checksum cairo-rs 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a110f269c2fd382df5fe8bd46dfa5f1b83608aa717fecb6e7a28c08c202f0e13"
  "checksum cairo-sys-rs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0395175ecba60accac076a02c31d143b9dcd9d5eb5316d7163a3273803b765c7"
  "checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
 -"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275"
 -"checksum cfg-if 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"efe5c877e17a9c717a0bf3613b2709f723202c4e4675cc8f12926ded29bcb17e"
 -"checksum chrono 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6962c635d530328acc53ac6a955e83093fedc91c5809dfac1fa60fa470830a37"
 +"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = 
"f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
- "checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"
++"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
 +"checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
  "checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
  "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
 -"checksum criterion 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b027da737a814e7ffcfdbaf1c0509fbaea4c6df5f2e116c820ecf515ad39ac9b"
 -"checksum criterion-plot 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7894b77aa2820337ddf3a6655c24116fb7e53dbdc9735d43a4dec7da5d2c4716"
 -"checksum criterion-stats 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"61ee46663c1c4c770b215f6c412fb1e822cfb5122dbc98347dc5789613c69d2b"
 +"checksum criterion 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c47d2b548c5647e1a436dc0cb78d4ebf51b6bf7ab101ed76662828bdd4d3a24a"
 +"checksum criterion-plot 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6e649d6aacdbbdb94ec659561a309a71336fc5655ed408f3afd28df2fc0c4f4f"
 +"checksum criterion-stats 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ff43cac80562f91ead0b617c1be74edf350adfaa195809d355de98dfc8f9237d"
  "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3"
  "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150"
  "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
--"checksum cssparser 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"495beddc39b1987b8e9f029354eccbd5ef88eb5f1cd24badb764dce338acf2e0"
--"checksum cssparser-macros 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"72b64d0d64184a082f38028396875c08c8ee083481f6f16e6e0cf52c338bd785"
 -"checksum csv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"71903184af9960c555e7f3b32ff17390d20ecaaf17d4f18c4a0993f2df8a49e3"
++"checksum cssparser 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b200a7193703a615c8d2751fed1ede39b9c4b3905e09d1ec7064a24688c190fc"
++"checksum cssparser-macros 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b16e382d9b983fdb9ac6a36b37fdeb84ce3ea81f749febfee3463cfa7f24275e"
 +"checksum csv 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6d54f6b0fd69128a2894b1a3e57af5849a0963c1cc77b165d30b896e40296452"
  "checksum csv-core 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4dd8e6d86f7ba48b4276ef1317edc8cc36167546d8972feb4a2b5fec0b374105"
  "checksum downcast-rs 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"18df8ce4470c189d18aa926022da57544f31e154631eb4cfe796aea97051fe6c"
 -"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
 +"checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd"
  "checksum dtoa-short 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"59020b8513b76630c49d918c33db9f4c91638e7d3404a28084083b87e33f76f2"
  "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
- "checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9"
- "checksum failure_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"946d0e98a50d9831f5d589038d2ca7f8f455b1c21028c0db0e84116a12696426"
+ "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
+ "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
+ "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
+ "checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" 
= "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7"
+ "checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a"
+ "checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" 
= "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18"
+ "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569"
 -"checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82"
 -"checksum failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b"
++"checksum failure 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6dd377bcc1b1b7ce911967e3ec24fa19c3224394ec05b54aa7b083d498341ac7"
++"checksum failure_derive 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"64c2d913fe8ed3b6c6518eedf4538255b989945c14c2a7d5cbff62a5e2120596"
  "checksum float-cmp 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"134a8fa843d80a51a5b77d36d42bc2def9edcb0262c914861d08129fd1926600"
  "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
  "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
@@@ -1234,25 -1119,21 +1296,25 @@@
  "checksum gobject-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"70409d6405db8b1591602fcd0cbe8af52cd9976dd39194442b4c149ba343f86d"
  "checksum handlebars 0.32.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d89ec99d1594f285d4590fc32bac5f75cdab383f1123d504d27862c644a807dd"
  "checksum itertools 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"f58856976b776fedd95533137617a02fb25719f40e7d9b01c7043cd65474f450"
 -"checksum itertools-num 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4d78fa608383e6e608ba36f962ac991d5d6878d7203eb93b4711b14fa6717813"
 -"checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682"
 -"checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739"
 -"checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1"
 -"checksum log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"61bd98ae7f7b754bc53dca7d44b604f733c6bba044ea6f41bc8d89272d8161d2"
 -"checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"
 -"checksum matrixmultiply 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = 
"cac1a66eab356036af85ea093101a14223dc6e3f4c02a59b7d572e5b93270bf7"
 -"checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d"
 +"checksum itertools-num 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"83ca7b70b838f2e34bc6c2f367a1ed1cfe34fb82464adecadd31cdcc7da882fc"
 +"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
 +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 +"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
 +"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = 
"76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
- "checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7"
++"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1"
 +"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = 
"76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d"
 +"checksum libm 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"03c0bb6d5ce1b5cc6fd0578ec1cbc18c9d88b5b591a5c7c1d6c6175e266a0819"
 +"checksum locale_config 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"14fbee0e39bc2dd6a2427c4fdea66e9826cc1fd09b0a0b7550359f5f6efe1dab"
- "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f"
++"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6"
 +"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
- "checksum matrixmultiply 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = 
"cac1a66eab356036af85ea093101a14223dc6e3f4c02a59b7d572e5b93270bf7"
- "checksum memchr 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4b3629fe9fdbff6daa6c33b90f7c08355c1aca05a3d01fa8063b822fcf185f3b"
++"checksum matrixmultiply 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = 
"dcad67dcec2d58ff56f6292582377e6921afdf3bfbd533e26fb8900ae575e002"
++"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16"
  "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
- "checksum nalgebra 0.16.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"919c4aac1a371e2b3650b56da3dce4c80662c03bf8d762695646215df964fc46"
 -"checksum nalgebra 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4534bc88a178e411e634e1e44e7f2ad6e9bf062ea539f40e579bd49ef2fad056"
--"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
--"checksum num-complex 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"68de83578789e0fbda3fa923035be83cf8bfd3b30ccfdecd5aa89bf8601f408e"
++"checksum nalgebra 0.16.10 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0f925f48e18bbd78e76aea47ad2091e919574099552831c2c4802aac65a8f9e7"
++"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
++"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8"
  "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = 
"e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
 -"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = 
"92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
 -"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe"
 +"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
  "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
  "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
  "checksum pango 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"45374801e224373c3c0393cd48073c81093494c8735721e81d1dbaa4096b2767"
@@@ -1260,67 -1141,56 +1322,67 @@@
  "checksum pangocairo 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"db4130d0e0567b177178c9568466277ff167cb43a245b2881e203509ea5fbd84"
  "checksum pangocairo-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"decc9523cd5bbba49a67ed8d2ef7dfca957f4760bf420a1ea4a82634da26381c"
  "checksum pest 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0fce5d8b5cc33983fc74f78ad552b5522ab41442c4ca91606e4236eb4b5ceefc"
 -"checksum pest_derive 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ab94faafeb93f4c5e3ce81ca0e5a779529a602ad5d09ae6d21996bfb8b6a52bf"
 -"checksum phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7d37a244c75a9748e049225155f56dbcb98fe71b192fd25fd23cb914b5ad62f2"
 -"checksum phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = 
"4e4048fe7dd7a06b8127ecd6d3803149126e9b33c7558879846da3a63f734f2b"
 -"checksum phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = 
"05a079dd052e7b674d21cb31cbb6c05efd56a2cd2827db7692e2f1a507ebd998"
 -"checksum phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c2261d544c2bb6aa3b10022b0be371b9c7c64f762ef28c6f5d4f1ef6d97b5930"
 -"checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = 
"110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f"
 -"checksum proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"effdb53b25cdad54f8f48843d67398f7ef2e14f12c1b4cb4effc549a6462a4d6"
 +"checksum pest_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ca3294f437119209b084c797604295f40227cffa35c57220b1e99a6ff3bf8ee4"
 +"checksum phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = 
"cec29da322b242f4c3098852c77a0ca261c9c01b806cae85a5572a1eb94db9a6"
 +"checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad"
 +"checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = 
"03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b"
 +"checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93"
 +"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = 
"676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
- "checksum proc-macro2 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ffe022fb8c8bd254524b0b3305906c1921fa37a84a644e29079a9e62200c3901"
++"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = 
"77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
  "checksum procedural-masquerade 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9a1574a51c3fd37b26d2c0032b649d08a7d51d4cca9c41bbc5bf7118fa4509d0"
  "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
  "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
- "checksum quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"dd636425967c33af890042c483632d33fa7a18f19ad1d7ea72e8998c6ef8dea5"
 -"checksum quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035"
 -"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5"
 -"checksum rand 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"12397506224b2f93e6664ffc4f664b29be8208e5157d3d90b44f09b5fae470ea"
 -"checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2"
++"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = 
"53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
 +"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd"
 +"checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
 +"checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372"
 +"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"
  "checksum rawpointer 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ebac11a9d2e11f2af219b8b8d833b76b1ea0e054aa0e8d8e9e4cbde353bdf019"
--"checksum rayon 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"df7a791f788cb4c516f0e091301a29c2b71ef680db5e644a7d68835c8ae6dbfa"
++"checksum rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"373814f27745b2686b350dd261bfd24576a6fb0e2c5919b3a2b6005f820b0473"
  "checksum rayon-core 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"b055d1e92aba6877574d8fe604a63c8b5df60f60e5982bf7ccbb1338ea527356"
--"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
++"checksum redox_syscall 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = 
"cf8fb82a4d1c9b28f1c26c574a5b541f5ffb4315f6c9a791fa47b6a04438fe93"
  "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
 -"checksum regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"13c93d55961981ba9226a213b385216f83ab43bd6ac53ab16b2eeb47e337cf4e"
 -"checksum regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"05b06a75f5217880fc5e905952a42750bf44787e56a6c6d6852ed0992f5e1d54"
 +"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
- "checksum regex 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2069749032ea3ec200ca51e4a31df41759190a88edca0d2d86ee8bedf7073341"
++"checksum regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ee84f70c8c08744ea9641a731c7fadb475bf2ecc52d7f627feb833e0b3990467"
 +"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
- "checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d"
++"checksum regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"fbc557aac2b708fe84121caf261346cc2eed71978024337e42eb46b8a252ac6e"
  "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = 
"bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
- "checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7"
- "checksum same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"10f7794e2fda7f594866840e95f5c5962e886e228e68b6505885811a94dd728c"
++"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7"
++"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267"
  "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
- "checksum serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = 
"84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9"
- "checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = 
"31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe"
- "checksum serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)" = 
"bb47a3d5c84320222f66d7db21157c4a7407755de41798f9b4c1c40593397b1a"
 -"checksum serde 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0c3adf19c07af6d186d91dae8927b83b0553d07ca56cbf7f2f32560455c91920"
 -"checksum serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3525a779832b08693031b8ecfb0de81cd71cfd3812088fafe9a7496789572124"
 -"checksum serde_json 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c3c6908c7b925cd6c590358a4034de93dbddb20c45e1d021931459fd419bf0e2"
--"checksum simplelog 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9cc12b39fdf4c9a07f88bffac2d628f0118ed5ac077a4b0feece61fadf1429e5"
 -"checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537"
 -"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"
 -"checksum stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa"
++"checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = 
"15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef"
++"checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = 
"225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c"
++"checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811"
++"checksum simplelog 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2e95345f185d5adeb8ec93459d2dc99654e294cc6ccf5b75414d8ea262de9a13"
 +"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
- "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d"
++"checksum smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"622df2d454c29a4d89b30dc3b27b42d7d90d6b9e587dbf8f67652eb7514da484"
 +"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
  "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
  "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 -"checksum syn 0.14.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2beff8ebc3658f07512a413866875adddd20f4fd47b2a4e6c9da65cd281baaea"
 +"checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = 
"261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741"
- "checksum syn 0.15.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"455a6ec9b368f8c479b0ae5494d13b22dc00990d2f00d68c9dc6a2dc4f17f210"
++"checksum syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)" = 
"816b7af21405b011a23554ea2dc3f6576dc86ca557047c34098c1d741f10f823"
  "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
- "checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7"
 -"checksum synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"3a761d12e6d8dcb4dcf952a7a89b475e3a9d69e4a69307e01a470977642914bd"
++"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015"
  "checksum term 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"5e6b677dd1e8214ea1ef4297f85dbcbed8e8cdddb561040cc998ca2551c37561"
  "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
  "checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
  "checksum thread-scoped 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"bcbb6aa301e5d3b0b5ef639c9a9c7e2f1c944f177b460c04dc24c69b1fa2bd99"
 -"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963"
 +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
  "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = 
"d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b"
  "checksum typenum 1.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"612d636f949607bdf9b123b4a6f6d966dedf3ff669f7f045890d3a4a73948169"
--"checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d"
++"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = 
"535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86"
  "checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
  "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = 
"8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
  "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
  "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
- "checksum utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"fd70f467df6810094968e2fce0ee1bd0e87157aceb026a8c083bcf5e25b9efe4"
 -"checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"
++"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737"
  "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
 +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
  "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = 
"6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
- "checksum walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"af464bc7be7b785c7ac72e266a6b67c4c9070155606f51655a650a6686204e35"
 -"checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = 
"773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd"
++"checksum walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = 
"9d9d7ed3431229a144296213105a390676cc49c9b6a72bd19f3176c98e129fa1"
 +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = 
"167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
 +"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = 
"92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
 +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
  "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 +"checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = 
"afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab"
  "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = 
"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --cc rsvg_internals/src/filters/image.rs
index 0a1ab35c,37e01288..c0cbdf7b
--- a/rsvg_internals/src/filters/image.rs
+++ b/rsvg_internals/src/filters/image.rs
@@@ -5,9 -5,15 +5,10 @@@ use cairo::{self, ImageSurface, MatrixT
  
  use aspect_ratio::AspectRatio;
  use attributes::Attribute;
+ use defs::Reference;
  use drawing_ctx::DrawingCtx;
  use error::RenderingError;
 -use handle::RsvgHandle;
 +use handle::{self, RsvgHandle};
  use node::{CascadedValues, NodeResult, NodeTrait, RsvgNode};
  use parsers::parse;
  use property_bag::PropertyBag;
diff --cc rsvg_internals/src/handle.rs
index e3506ae2,a081734d..194cfd75
--- a/rsvg_internals/src/handle.rs
+++ b/rsvg_internals/src/handle.rs
@@@ -39,13 -34,16 +39,18 @@@ extern "C" 
          error: *mut *mut glib_sys::GError,
      ) -> *mut u8;
  
 +    fn rsvg_handle_keep_image_data(handle: *const RsvgHandle) -> glib_sys::gboolean;
++
+     fn rsvg_load_handle_xml_xinclude(
+         handle: *mut RsvgHandle,
+         url: *const libc::c_char,
+     ) -> glib_sys::gboolean;
  }
  
- pub fn get_defs<'a>(handle: *const RsvgHandle) -> &'a Defs {
+ pub fn get_defs<'a>(handle: *const RsvgHandle) -> &'a mut Defs {
      unsafe {
          let d = rsvg_handle_get_defs(handle);
-         &*(d as *const Defs)
+         &mut *(d as *mut Defs)
      }
  }
  
@@@ -109,78 -100,6 +114,82 @@@ pub fn acquire_data(handle: *mut RsvgHa
      }
  }
  
 +fn keep_image_data(handle: *const RsvgHandle) -> bool {
 +    unsafe { from_glib(rsvg_handle_keep_image_data(handle)) }
 +}
 +
 +pub fn image_surface_new_from_href(
 +    handle: *mut RsvgHandle,
 +    href: &str,
 +) -> Result<ImageSurface, LoadingError> {
 +    let data = acquire_data(handle, href)?;
 +
 +    if data.data.len() == 0 {
 +        return Err(LoadingError::EmptyData);
 +    }
 +
 +    let loader = if let Some(ref content_type) = data.content_type {
 +        PixbufLoader::new_with_mime_type(content_type)?
 +    } else {
 +        PixbufLoader::new()
 +    };
 +
 +    loader.write(&data.data)?;
 +    loader.close()?;
 +
 +    let pixbuf = loader.get_pixbuf().ok_or(LoadingError::Unknown)?;
 +
 +    let surface = SharedImageSurface::from_pixbuf(&pixbuf)?.into_image_surface()?;
 +
 +    if keep_image_data(handle) {
 +        let mime_type = data.content_type.or_else(|| {
 +            // Try to get the content type from the loader
 +
 +            loader.get_format().and_then(|format| {
 +                let content_types = format.get_mime_types();
 +
 +                if content_types.len() != 0 {
 +                    Some(content_types[0].clone())
 +                } else {
 +                    None
 +                }
 +            })
 +        });
 +
 +        if let Some(mime_type) = mime_type {
 +            extern "C" {
 +                fn cairo_surface_set_mime_data(
 +                    surface: *mut cairo_sys::cairo_surface_t,
 +                    mime_type: *const libc::c_char,
 +                    data: *mut libc::c_char,
 +                    length: libc::c_ulong,
 +                    destroy: cairo_sys::cairo_destroy_func_t,
 +                    closure: *mut libc::c_void,
 +                ) -> Status;
 +            }
 +
 +            let data_ptr = ToGlibContainerFromSlice::to_glib_full_from_slice(&data.data);
 +
 +            unsafe {
 +                let status = cairo_surface_set_mime_data(
 +                    surface.to_glib_none().0,
 +                    mime_type.to_glib_none().0,
 +                    data_ptr as *mut _,
 +                    data.data.len() as libc::c_ulong,
 +                    Some(glib_sys::g_free),
 +                    data_ptr as *mut _,
 +                );
 +
 +                if status != Status::Success {
 +                    return Err(LoadingError::Cairo(status));
 +                }
 +            }
 +        }
 +    }
 +
 +    Ok(surface)
 +}
++
+ pub fn load_xml_xinclude(handle: *mut RsvgHandle, url: &str) -> bool {
+     unsafe { from_glib(rsvg_load_handle_xml_xinclude(handle, url.to_glib_none().0)) }
+ }
diff --cc rsvg_internals/src/lib.rs
index 3bd41a1c,ec6d4132..520d7e68
--- a/rsvg_internals/src/lib.rs
+++ b/rsvg_internals/src/lib.rs
@@@ -5,8 -5,9 +5,10 @@@
  extern crate cairo;
  extern crate cairo_sys;
  extern crate cssparser;
+ extern crate downcast_rs;
+ extern crate encoding;
  extern crate float_cmp;
 +extern crate gdk_pixbuf;
  extern crate glib;
  extern crate glib_sys;
  extern crate itertools;
@@@ -26,11 -25,14 +28,9 @@@ extern crate regex
  #[macro_use]
  extern crate lazy_static;
  
- extern crate downcast_rs;
- 
  pub use color::{rsvg_css_parse_color, ColorKind, ColorSpec};
  
 -pub use css::{
 -    rsvg_css_parse_into_handle,
 -    rsvg_css_styles_define,
 -    rsvg_css_styles_free,
 -    rsvg_css_styles_new,
 -};
 +pub use css::{rsvg_css_parse_into_handle, rsvg_css_styles_free, rsvg_css_styles_new};
  
  pub use defs::{rsvg_defs_free, rsvg_defs_lookup, rsvg_defs_new};
  
diff --cc rsvg_internals/src/node.rs
index 36e3df03,4337ef92..8642002f
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@@ -1,7 -1,6 +1,8 @@@
  use cairo::{Matrix, MatrixTrait};
  use downcast_rs::*;
+ use glib;
 +use glib::translate::*;
 +use glib_sys;
  use std::cell::{Cell, Ref, RefCell};
  use std::ptr;
  use std::rc::{Rc, Weak};
diff --cc rsvg_internals/src/text.rs
index 2f0ff799,c664781a..cd33a7df
--- a/rsvg_internals/src/text.rs
+++ b/rsvg_internals/src/text.rs
@@@ -10,10 -7,10 +7,10 @@@ use error::RenderingError
  use font_props::FontWeightSpec;
  use handle::RsvgHandle;
  use length::*;
- use node::{boxed_node_new, CascadedValues, NodeResult, NodeTrait, NodeType, RsvgNode};
+ use node::{CascadedValues, NodeResult, NodeTrait, NodeType, RsvgNode};
  use parsers::parse;
  use property_bag::PropertyBag;
 -use space::xml_space_normalize;
 +use space::{xml_space_normalize, NormalizeDefault, XmlSpaceNormalize};
  use state::{
      ComputedValues,
      Direction,
@@@ -55,45 -50,18 +52,49 @@@ pub struct NodeChars 
  }
  
  impl NodeChars {
-     fn new() -> NodeChars {
+     pub fn new() -> NodeChars {
          NodeChars {
              string: RefCell::new(String::new()),
 +            space_normalized: RefCell::new(None),
          }
      }
  
-     fn append(&self, s: &str) {
+     pub fn get_string(&self) -> String {
+         self.string.borrow().clone()
+     }
+ 
+     pub fn append(&self, s: &str) {
          self.string.borrow_mut().push_str(s);
 +        *self.space_normalized.borrow_mut() = None;
 +    }
 +
 +    fn ensure_normalized_string(&self, node: &RsvgNode, values: &ComputedValues) {
 +        let mut normalized = self.space_normalized.borrow_mut();
 +
 +        if (*normalized).is_none() {
 +            let mode = match values.xml_space {
 +                XmlSpace::Default => XmlSpaceNormalize::Default(NormalizeDefault {
 +                    has_element_before: node.has_previous_sibling(),
 +                    has_element_after: node.has_next_sibling(),
 +                }),
 +
 +                XmlSpace::Preserve => XmlSpaceNormalize::Preserve,
 +            };
 +
 +            *normalized = Some(xml_space_normalize(mode, &self.string.borrow()));
 +        }
 +    }
 +
 +    fn create_layout(
 +        &self,
 +        node: &RsvgNode,
 +        values: &ComputedValues,
 +        draw_ctx: &DrawingCtx<'_>,
 +    ) -> pango::Layout {
 +        self.ensure_normalized_string(node, values);
 +        let norm = self.space_normalized.borrow();
 +        let s = norm.as_ref().unwrap();
 +        create_pango_layout(draw_ctx, values, &s)
      }
  
      fn measure(


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]