diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2017-04-24 10:49:13 +0200 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2017-04-26 13:03:21 +0900 |
commit | 82c04113d09cf728542df2620c4397f55028df40 (patch) | |
tree | 6b93f3ef4214f234917040b08cd83bb0ff10ebe3 /components/style | |
parent | e7a2a98d8a1dd77232c15435e913194174ed18a3 (diff) | |
download | servo-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.rs | 23 | ||||
-rw-r--r-- | components/style/counter_style/predefined.rs | 60 | ||||
-rwxr-xr-x | components/style/counter_style/update_predefined.py | 35 |
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")) |