mirror of
https://github.com/gbdev/rgbds.git
synced 2026-10-05 19:56:18 +00:00
Add STRSTARTS and STRENDS functions (#2159)
This commit is contained in:
1 parent
03c71ced93
commit
548a11c3ef
4 files changed
+26
-1
No files matched your search
+3
-1
@@ -653,12 +653,14 @@ The following functions take varying operands, and return strings:
|
|||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
The following functions operate on string expressions, but return integers:
|
The following functions operate on string expressions, but return integers:
|
||||||
.Bl -column "STRRFIND(str, sub)"
|
.Bl -column "STRSTARTS(str, prefix)"
|
||||||
.It Sy Name Ta Sy Operation
|
.It Sy Name Ta Sy Operation
|
||||||
.It Fn STRLEN str Ta Returns the number of characters in Ar str .
|
.It Fn STRLEN str Ta Returns the number of characters in Ar str .
|
||||||
.It Fn STRCMP str1 str2 Ta Compares Ar str1 No and Ar str2 No according to ASCII ordering of their characters. Returns -1 if Ar str1 No is lower than Ar str2 Ns , 1 if Ar str1 No is greater than Ar str2 Ns , or 0 if they match.
|
.It Fn STRCMP str1 str2 Ta Compares Ar str1 No and Ar str2 No according to ASCII ordering of their characters. Returns -1 if Ar str1 No is lower than Ar str2 Ns , 1 if Ar str1 No is greater than Ar str2 Ns , or 0 if they match.
|
||||||
.It Fn STRFIND str sub Ta Returns the first index of Ar sub No in Ar str Ns , or -1 if it's not present.
|
.It Fn STRFIND str sub Ta Returns the first index of Ar sub No in Ar str Ns , or -1 if it's not present.
|
||||||
.It Fn STRRFIND str sub Ta Returns the last index of Ar sub No in Ar str Ns , or -1 if it's not present.
|
.It Fn STRRFIND str sub Ta Returns the last index of Ar sub No in Ar str Ns , or -1 if it's not present.
|
||||||
|
.It Fn STRSTARTS str prefix Ta Returns 1 if Ar str No starts with Ar prefix Ns , or 0 otherwise.
|
||||||
|
.It Fn STRENDS str suffix Ta Returns 1 if Ar str No ends with Ar suffix Ns , or 0 otherwise.
|
||||||
.It Fn BYTELEN str Ta Returns the number of bytes in Ar str . Pq Non-ASCII characters can be multiple bytes.
|
.It Fn BYTELEN str Ta Returns the number of bytes in Ar str . Pq Non-ASCII characters can be multiple bytes.
|
||||||
.It Fn STRBYTE str idx Ta Returns the byte value at Ar idx No in Ar str .
|
.It Fn STRBYTE str idx Ta Returns the byte value at Ar idx No in Ar str .
|
||||||
.It Fn INCHARMAP str Ta Returns 1 if Ar str No has an entry in the current charmap, or 0 otherwise.
|
.It Fn INCHARMAP str Ta Returns 1 if Ar str No has an entry in the current charmap, or 0 otherwise.
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ static UpperMap<int> const keywords{
|
|||||||
{"STRCAT", T_(OP_STRCAT) },
|
{"STRCAT", T_(OP_STRCAT) },
|
||||||
{"STRCHAR", T_(OP_STRCHAR) },
|
{"STRCHAR", T_(OP_STRCHAR) },
|
||||||
{"STRCMP", T_(OP_STRCMP) },
|
{"STRCMP", T_(OP_STRCMP) },
|
||||||
|
{"STRENDS", T_(OP_STRENDS) },
|
||||||
{"STRFIND", T_(OP_STRFIND) },
|
{"STRFIND", T_(OP_STRFIND) },
|
||||||
{"STRFMT", T_(OP_STRFMT) },
|
{"STRFMT", T_(OP_STRFMT) },
|
||||||
{"STRIN", T_(OP_STRIN) },
|
{"STRIN", T_(OP_STRIN) },
|
||||||
@@ -189,6 +190,7 @@ static UpperMap<int> const keywords{
|
|||||||
{"STRRIN", T_(OP_STRRIN) },
|
{"STRRIN", T_(OP_STRRIN) },
|
||||||
{"STRRPL", T_(OP_STRRPL) },
|
{"STRRPL", T_(OP_STRRPL) },
|
||||||
{"STRSLICE", T_(OP_STRSLICE) },
|
{"STRSLICE", T_(OP_STRSLICE) },
|
||||||
|
{"STRSTARTS", T_(OP_STRSTARTS) },
|
||||||
{"STRSUB", T_(OP_STRSUB) },
|
{"STRSUB", T_(OP_STRSUB) },
|
||||||
{"STRUPR", T_(OP_STRUPR) },
|
{"STRUPR", T_(OP_STRUPR) },
|
||||||
|
|
||||||
|
|||||||
@@ -296,6 +296,7 @@
|
|||||||
%token OP_STRCAT "STRCAT"
|
%token OP_STRCAT "STRCAT"
|
||||||
%token OP_STRCHAR "STRCHAR"
|
%token OP_STRCHAR "STRCHAR"
|
||||||
%token OP_STRCMP "STRCMP"
|
%token OP_STRCMP "STRCMP"
|
||||||
|
%token OP_STRENDS "STRENDS"
|
||||||
%token OP_STRFIND "STRFIND"
|
%token OP_STRFIND "STRFIND"
|
||||||
%token OP_STRFMT "STRFMT"
|
%token OP_STRFMT "STRFMT"
|
||||||
%token OP_STRIN "STRIN"
|
%token OP_STRIN "STRIN"
|
||||||
@@ -305,6 +306,7 @@
|
|||||||
%token OP_STRRIN "STRRIN"
|
%token OP_STRRIN "STRRIN"
|
||||||
%token OP_STRRPL "STRRPL"
|
%token OP_STRRPL "STRRPL"
|
||||||
%token OP_STRSLICE "STRSLICE"
|
%token OP_STRSLICE "STRSLICE"
|
||||||
|
%token OP_STRSTARTS "STRSTARTS"
|
||||||
%token OP_STRSUB "STRSUB"
|
%token OP_STRSUB "STRSUB"
|
||||||
%token OP_STRUPR "STRUPR"
|
%token OP_STRUPR "STRUPR"
|
||||||
%token OP_TAN "TAN"
|
%token OP_TAN "TAN"
|
||||||
@@ -1480,6 +1482,12 @@ relocexpr_no_str:
|
|||||||
size_t pos = $3.rfind($5);
|
size_t pos = $3.rfind($5);
|
||||||
$$.makeNumber(pos != std::string::npos ? pos : -1);
|
$$.makeNumber(pos != std::string::npos ? pos : -1);
|
||||||
}
|
}
|
||||||
|
| OP_STRSTARTS LPAREN string COMMA string RPAREN {
|
||||||
|
$$.makeNumber($3.starts_with($5));
|
||||||
|
}
|
||||||
|
| OP_STRENDS LPAREN string COMMA string RPAREN {
|
||||||
|
$$.makeNumber($3.ends_with($5));
|
||||||
|
}
|
||||||
| OP_STRIN LPAREN string COMMA string RPAREN {
|
| OP_STRIN LPAREN string COMMA string RPAREN {
|
||||||
warning(WARNING_OBSOLETE, "`STRIN` is deprecated; use 0-indexed `STRFIND` instead");
|
warning(WARNING_OBSOLETE, "`STRIN` is deprecated; use 0-indexed `STRFIND` instead");
|
||||||
size_t pos = $3.find($5);
|
size_t pos = $3.find($5);
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
assert STRSTARTS("string", "str")
|
||||||
|
assert STRENDS("string", "ing")
|
||||||
|
assert !STRSTARTS("string", "stringing")
|
||||||
|
assert !STRENDS("string", "bowstring")
|
||||||
|
assert STRSTARTS("string", "string")
|
||||||
|
assert STRENDS("string", "string")
|
||||||
|
assert !STRSTARTS("", "prefix")
|
||||||
|
assert !STRENDS("", "suffix")
|
||||||
|
assert STRSTARTS("string", "")
|
||||||
|
assert STRENDS("string", "")
|
||||||
|
assert STRSTARTS("", "")
|
||||||
|
assert STRENDS("", "")
|
||||||
Reference in new issue
Block a user