aboutsummaryrefslogtreecommitdiff
path: root/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'build.rs')
-rw-r--r--build.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/build.rs b/build.rs
new file mode 100644
index 0000000..8d4404c
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,61 @@
+// Copyright 2014-2017 The html5ever Project Developers. See the
+// COPYRIGHT file at the top-level directory of this distribution.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+extern crate phf_codegen;
+
+use std::collections::HashMap;
+use std::env;
+use std::fs::File;
+use std::io::Write;
+use std::path::Path;
+
+mod entities;
+
+fn main() {
+ named_entities_to_phf(&Path::new(&env::var("OUT_DIR").unwrap()).join("named_entities.rs"));
+}
+
+fn named_entities_to_phf(to: &Path) {
+ let mut entities: HashMap<&str, (u32, u32)> = entities::NAMED_ENTITIES
+ .iter()
+ .map(|(name, cp1, cp2)| {
+ assert!(name.starts_with('&'));
+ (&name[1..], (*cp1, *cp2))
+ })
+ .collect();
+
+ // Add every missing prefix of those keys, mapping to NULL characters.
+ for key in entities.keys().cloned().collect::<Vec<_>>() {
+ for n in 1..key.len() {
+ entities.entry(&key[..n]).or_insert((0, 0));
+ }
+ }
+ entities.insert("", (0, 0));
+
+ let mut phf_map = phf_codegen::Map::new();
+ for (key, value) in entities {
+ phf_map.entry(key, &format!("{:?}", value));
+ }
+
+ let mut file = File::create(to).unwrap();
+ writeln!(
+ &mut file,
+ r#"
+/// A map of entity names to their codepoints. The second codepoint will
+/// be 0 if the entity contains a single codepoint. Entities have their preceeding '&' removed.
+"#
+ )
+ .unwrap();
+ writeln!(
+ &mut file,
+ "pub static NAMED_ENTITIES: Map<&'static str, (u32, u32)> = {};",
+ phf_map.build(),
+ )
+ .unwrap();
+}