diff --git a/src/builtin/string.rs b/src/builtin/string.rs index 9035354..539b037 100644 --- a/src/builtin/string.rs +++ b/src/builtin/string.rs @@ -35,7 +35,7 @@ pub(crate) fn register(f: &mut HashMap) { Box::new(|args, _| { max_args!(args, 1); match arg!(args, 0, "string") { - Value::Ident(i, _) => Ok(Value::Dimension(Number::from(i.len()), Unit::None)), + Value::Ident(i, _) => Ok(Value::Dimension(Number::from(i.chars().count()), Unit::None)), v => Err(format!("$string: {} is not a string.", v).into()), } }), diff --git a/tests/strings.rs b/tests/strings.rs index f43bc3a..2883d46 100644 --- a/tests/strings.rs +++ b/tests/strings.rs @@ -103,6 +103,16 @@ test!( "a {\n color: str-length(\"foo bar\");\n}\n", "a {\n color: 7;\n}\n" ); +test!( + str_len_double_wide, + "a {\n color: str-length(\"👭\");\n}\n", + "@charset \"UTF-8\";\na {\n color: 1;\n}\n" +); +test!( + str_len_combining, + "a {\n color: str-length(\"c\\0308\");\n}\n", + "a {\n color: 2;\n}\n" +); test!( str_index_char, "a {\n color: str-index(abcd, a);\n}\n",