Skip to content

Commit d4af92c

Browse files
committed
Simplify the implementation of ascii_case_insensitive_phf_map
1 parent 610cc22 commit d4af92c

File tree

5 files changed

+23
-76
lines changed

5 files changed

+23
-76
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "cssparser"
3-
version = "0.27.0"
3+
version = "0.27.1"
44
authors = [ "Simon Sapin <simon.sapin@exyr.org>" ]
55

66
description = "Rust implementation of CSS Syntax Level 3"
@@ -20,7 +20,7 @@ difference = "2.0"
2020
encoding_rs = "0.8"
2121

2222
[dependencies]
23-
cssparser-macros = {path = "./macros", version = "0.5"}
23+
cssparser-macros = {path = "./macros", version = "0.6"}
2424
dtoa-short = "0.3"
2525
itoa = "0.4"
2626
matches = "0.1"

macros/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "cssparser-macros"
3-
version = "0.5.0"
3+
version = "0.6.0"
44
authors = ["Simon Sapin <simon.sapin@exyr.org>"]
55
description = "Procedural macros for cssparser"
66
documentation = "https://docs.rs/cssparser-macros/"

macros/lib.rs

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ extern crate proc_macro;
66

77
use proc_macro::TokenStream;
88

9-
/// Implementation detail of the `match_ignore_ascii_case!` macro
10-
#[allow(non_snake_case)]
119
#[proc_macro]
12-
pub fn cssparser_internal__match_ignore_ascii_case__support(input: TokenStream) -> TokenStream {
10+
pub fn _cssparser_internal_max_len(input: TokenStream) -> TokenStream {
1311
struct Input {
1412
max_length: usize,
1513
}
@@ -39,58 +37,3 @@ pub fn cssparser_internal__match_ignore_ascii_case__support(input: TokenStream)
3937
)
4038
.into()
4139
}
42-
43-
/// Implementation detail of the `ascii_case_insensitive_phf_map!` macro
44-
#[allow(non_snake_case)]
45-
#[proc_macro]
46-
pub fn cssparser_internal__ascii_case_insensitive_phf_map__support(
47-
input: TokenStream,
48-
) -> TokenStream {
49-
struct Input {
50-
value_type: syn::Type,
51-
max_key_length: usize,
52-
keys: Vec<syn::LitStr>,
53-
values: Vec<syn::Expr>,
54-
}
55-
56-
impl syn::parse::Parse for Input {
57-
fn parse(input: syn::parse::ParseStream) -> syn::parse::Result<Self> {
58-
let value_type = input.parse()?;
59-
let mut max_key_length = 0;
60-
let mut keys = Vec::new();
61-
let mut values = Vec::new();
62-
while !input.is_empty() {
63-
let key: syn::LitStr = input.parse()?;
64-
let key_value = key.value();
65-
max_key_length = max_key_length.max(key_value.len());
66-
keys.push(syn::LitStr::new(
67-
&key_value.to_ascii_lowercase(),
68-
key.span(),
69-
));
70-
values.push(input.parse()?);
71-
}
72-
Ok(Input {
73-
value_type,
74-
max_key_length,
75-
keys,
76-
values,
77-
})
78-
}
79-
}
80-
81-
let Input {
82-
value_type,
83-
max_key_length,
84-
keys,
85-
values,
86-
} = syn::parse_macro_input!(input);
87-
quote::quote!(
88-
pub(super) const MAX_LENGTH: usize = #max_key_length;
89-
pub(super) static MAP: Map<&'static str, #value_type> = phf_map! {
90-
#(
91-
#keys => #values,
92-
)*
93-
};
94-
)
95-
.into()
96-
}

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ pub use crate::color::{
7373
pub use crate::cow_rc_str::CowRcStr;
7474
pub use crate::from_bytes::{stylesheet_encoding, EncodingSupport};
7575
#[doc(hidden)]
76-
pub use crate::macros::_internal__to_lowercase;
76+
pub use crate::macros::_cssparser_internal_to_lowercase;
7777
pub use crate::nth::parse_nth;
7878
pub use crate::parser::{BasicParseError, BasicParseErrorKind, ParseError, ParseErrorKind};
7979
pub use crate::parser::{Delimiter, Delimiters, Parser, ParserInput, ParserState};
@@ -87,7 +87,7 @@ pub use crate::tokenizer::{SourceLocation, SourcePosition, Token};
8787
pub use crate::unicode_range::UnicodeRange;
8888
pub use cssparser_macros::*;
8989
#[doc(hidden)]
90-
pub use phf as _internal__phf;
90+
pub use phf as _cssparser_internal_phf;
9191

9292
#[macro_use]
9393
mod macros;

src/macros.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ macro_rules! match_ignore_ascii_case {
4848
// rather than expression/statement context,
4949
// even though the macro only expands to items.
5050
mod cssparser_internal {
51-
$crate::cssparser_internal__match_ignore_ascii_case__support! {
51+
$crate::_cssparser_internal_max_len! {
5252
$( $( $pattern )+ )+
5353
}
5454
}
55-
cssparser_internal__to_lowercase!($input, cssparser_internal::MAX_LENGTH => lowercase);
55+
_cssparser_internal_to_lowercase!($input, cssparser_internal::MAX_LENGTH => lowercase);
5656
// "A" is a short string that we know is different for every string pattern,
5757
// since we’ve verified that none of them include ASCII upper case letters.
5858
match lowercase.unwrap_or("A") {
@@ -98,15 +98,19 @@ macro_rules! ascii_case_insensitive_phf_map {
9898
pub fn $name(input: &str) -> Option<&'static $ValueType> {
9999
// This dummy module works around a feature gate,
100100
// see comment on the similar module in `match_ignore_ascii_case!` above.
101-
mod cssparser_internal {
102-
use $crate::_internal__phf::{Map, phf_map};
103-
#[allow(unused)] use super::*;
104-
$crate::cssparser_internal__ascii_case_insensitive_phf_map__support! {
105-
$ValueType $( $key $value )+
101+
mod _cssparser_internal {
102+
$crate::_cssparser_internal_max_len! {
103+
$( $key )+
106104
}
107105
}
108-
cssparser_internal__to_lowercase!(input, cssparser_internal::MAX_LENGTH => lowercase);
109-
lowercase.and_then(|s| cssparser_internal::MAP.get(s))
106+
use $crate::_cssparser_internal_phf as phf;
107+
static MAP: phf::Map<&'static str, $ValueType> = phf::phf_map! {
108+
$(
109+
$key => $value,
110+
)*
111+
};
112+
_cssparser_internal_to_lowercase!(input, _cssparser_internal::MAX_LENGTH => lowercase);
113+
lowercase.and_then(|s| MAP.get(s))
110114
}
111115
}
112116
}
@@ -116,19 +120,19 @@ macro_rules! ascii_case_insensitive_phf_map {
116120
/// **This macro is not part of the public API. It can change or be removed between any versions.**
117121
///
118122
/// Define a local variable named `$output`
119-
/// and assign it the result of calling `_internal__to_lowercase`
123+
/// and assign it the result of calling `_cssparser_internal_to_lowercase`
120124
/// with a stack-allocated buffer of length `$BUFFER_SIZE`.
121125
#[macro_export]
122126
#[doc(hidden)]
123-
macro_rules! cssparser_internal__to_lowercase {
127+
macro_rules! _cssparser_internal_to_lowercase {
124128
($input: expr, $BUFFER_SIZE: expr => $output: ident) => {
125129
#[allow(unsafe_code)]
126130
let mut buffer = unsafe {
127131
::std::mem::MaybeUninit::<[::std::mem::MaybeUninit<u8>; $BUFFER_SIZE]>::uninit()
128132
.assume_init()
129133
};
130134
let input: &str = $input;
131-
let $output = $crate::_internal__to_lowercase(&mut buffer, input);
135+
let $output = $crate::_cssparser_internal_to_lowercase(&mut buffer, input);
132136
};
133137
}
134138

@@ -140,7 +144,7 @@ macro_rules! cssparser_internal__to_lowercase {
140144
/// Otherwise, return `input` ASCII-lowercased, using `buffer` as temporary space if necessary.
141145
#[doc(hidden)]
142146
#[allow(non_snake_case)]
143-
pub fn _internal__to_lowercase<'a>(
147+
pub fn _cssparser_internal_to_lowercase<'a>(
144148
buffer: &'a mut [MaybeUninit<u8>],
145149
input: &'a str,
146150
) -> Option<&'a str> {

0 commit comments

Comments
 (0)