aboutsummaryrefslogtreecommitdiffstats
path: root/components/style
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2017-04-24 10:49:13 +0200
committerSimon Sapin <simon.sapin@exyr.org>2017-04-26 13:03:21 +0900
commit82c04113d09cf728542df2620c4397f55028df40 (patch)
tree6b93f3ef4214f234917040b08cd83bb0ff10ebe3 /components/style
parente7a2a98d8a1dd77232c15435e913194174ed18a3 (diff)
downloadservo-82c04113d09cf728542df2620c4397f55028df40.tar.gz
servo-82c04113d09cf728542df2620c4397f55028df40.zip
Make predefined counter style names ASCII-lowercase.
Diffstat (limited to 'components/style')
-rw-r--r--components/style/counter_style/mod.rs23
-rw-r--r--components/style/counter_style/predefined.rs60
-rwxr-xr-xcomponents/style/counter_style/update_predefined.py35
3 files changed, 117 insertions, 1 deletions
diff --git a/components/style/counter_style/mod.rs b/components/style/counter_style/mod.rs
index 772707cbfa8..f27aecc8549 100644
--- a/components/style/counter_style/mod.rs
+++ b/components/style/counter_style/mod.rs
@@ -22,7 +22,28 @@ use values::CustomIdent;
/// Parse the prelude of an @counter-style rule
pub fn parse_counter_style_name(input: &mut Parser) -> Result<CustomIdent, ()> {
- CustomIdent::from_ident(input.expect_ident()?, &["decimal", "none"])
+ macro_rules! predefined {
+ ($($name: expr,)+) => {
+ {
+ ascii_case_insensitive_phf_map! {
+ // FIXME: use static atoms https://github.com/rust-lang/rust/issues/33156
+ predefined -> &'static str = {
+ $(
+ $name => $name,
+ )+
+ }
+ }
+
+ let ident = input.expect_ident()?;
+ if let Some(&lower_cased) = predefined(&ident) {
+ Ok(CustomIdent(Atom::from(lower_cased)))
+ } else {
+ CustomIdent::from_ident(ident, &["decimal", "none"])
+ }
+ }
+ }
+ }
+ include!("predefined.rs")
}
/// Parse the body (inside `{}`) of an @counter-style rule
diff --git a/components/style/counter_style/predefined.rs b/components/style/counter_style/predefined.rs
new file mode 100644
index 00000000000..dee17e90377
--- /dev/null
+++ b/components/style/counter_style/predefined.rs
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+predefined! {
+ "decimal-leading-zero",
+ "arabic-indic",
+ "armenian",
+ "upper-armenian",
+ "lower-armenian",
+ "bengali",
+ "cambodian",
+ "khmer",
+ "cjk-decimal",
+ "devanagari",
+ "georgian",
+ "gujarati",
+ "gurmukhi",
+ "hebrew",
+ "kannada",
+ "lao",
+ "malayalam",
+ "mongolian",
+ "myanmar",
+ "oriya",
+ "persian",
+ "lower-roman",
+ "upper-roman",
+ "tamil",
+ "telugu",
+ "thai",
+ "tibetan",
+ "lower-alpha",
+ "lower-latin",
+ "upper-alpha",
+ "upper-latin",
+ "cjk-earthly-branch",
+ "cjk-heavenly-stem",
+ "lower-greek",
+ "hiragana",
+ "hiragana-iroha",
+ "katakana",
+ "katakana-iroha",
+ "disc",
+ "circle",
+ "square",
+ "disclosure-open",
+ "disclosure-closed",
+ "japanese-informal",
+ "japanese-formal",
+ "korean-hangul-formal",
+ "korean-hanja-informal",
+ "korean-hanja-formal",
+ "simp-chinese-informal",
+ "simp-chinese-formal",
+ "trad-chinese-informal",
+ "trad-chinese-formal",
+ "cjk-ideographic",
+ "ethiopic-numeric",
+}
diff --git a/components/style/counter_style/update_predefined.py b/components/style/counter_style/update_predefined.py
new file mode 100755
index 00000000000..9e64545b593
--- /dev/null
+++ b/components/style/counter_style/update_predefined.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import os.path
+import re
+import urllib
+
+
+def main(filename):
+ names = [
+ re.search('>([^>]+)(</dfn>|<a class="self-link")', line).group(1)
+ for line in urllib.urlopen("https://drafts.csswg.org/css-counter-styles/")
+ if 'data-dfn-for="<counter-style-name>"' in line
+ or 'data-dfn-for="<counter-style>"' in line
+ ]
+ with open(filename, "wb") as f:
+ f.write("""\
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+predefined! {
+""")
+ for name in names:
+ # FIXME https://github.com/w3c/csswg-drafts/issues/1285
+ if name == 'decimal':
+ continue
+ f.write(' "%s",\n' % name)
+ f.write('}\n')
+
+if __name__ == "__main__":
+ main(os.path.join(os.path.dirname(__file__), "predefined.rs"))