sassIndexToStringIndex method
Converts sassIndex
into a Dart-style index into text.
Sass indexes are one-based, while Dart indexes are zero-based. Sass indexes may also be negative in order to index from the end of the string.
In addition, Sass indices refer to Unicode code points while Dart string
indices refer to UTF-16 code units. For example, the character U+1F60A,
Smiling Face With Smiling Eyes, is a single Unicode code point but is
represented in UTF-16 as two code units (0xD83D
and 0xDE0A
). So in
Dart, "a😊b".codeUnitAt(1)
returns 0xD83D
, whereas in Sass
str-slice("a😊b", 1, 1)
returns "😊"
.
This function converts Sass's code point indexes to Dart's code unit
indexes. This means it's O(n) in the length of text. See also
sassIndexToRuneIndex, which is O(1) and returns an index into the
string's code points (accessible via text.runes
).
Throws a SassScriptException
if sassIndex
isn't a number, if that
number isn't an integer, or if that integer isn't a valid index for this
string. If sassIndex
came from a function argument, name
is the
argument name (without the $
). It's used for error reporting.
Implementation
int sassIndexToStringIndex(Value sassIndex, [String? name]) =>
codepointIndexToCodeUnitIndex(
text, sassIndexToRuneIndex(sassIndex, name));