|
|
| version 1.243, 2019/11/20 20:48:25 | version 1.245, 2019/12/05 21:41:08 |
|---|---|
| Line 153 static void _bool(Request& r, MethodPara | Line 153 static void _bool(Request& r, MethodPara |
| } | } |
| static void _left(Request& r, MethodParams& params) { | static void _left(Request& r, MethodParams& params) { |
| ssize_t sn=params.as_int(0, "n must be int", r); | int sn=params.as_int(0, "n must be int", r); |
| const String& string=GET_SELF(r, VString).string(); | const String& string=GET_SELF(r, VString).string(); |
| r.write(sn<0 ? string : string.mid(r.charsets.source(), 0, (size_t)sn)); | r.write(sn<0 ? string : string.mid(r.charsets.source(), 0, sn)); |
| } | } |
| static void _right(Request& r, MethodParams& params) { | static void _right(Request& r, MethodParams& params) { |
| ssize_t sn=params.as_int(0, "n must be int", r); | int sn=params.as_int(0, "n must be int", r); |
| if(sn>0){ | if(sn>0){ |
| size_t n=(size_t)sn; | size_t n=sn; |
| const String& string=GET_SELF(r, VString).string(); | const String& string=GET_SELF(r, VString).string(); |
| size_t length=string.length(r.charsets.source()); | size_t length=string.length(r.charsets.source()); |
| r.write(n<length ? string.mid(r.charsets.source(), length-n, length, length) : string); | r.write(n<length ? string.mid(r.charsets.source(), length-n, length, length) : string); |
| Line 171 static void _right(Request& r, MethodPar | Line 171 static void _right(Request& r, MethodPar |
| static void _mid(Request& r, MethodParams& params) { | static void _mid(Request& r, MethodParams& params) { |
| const String& string=GET_SELF(r, VString).string(); | const String& string=GET_SELF(r, VString).string(); |
| ssize_t sbegin=params.as_int(0, "p must be int", r); | int begin=params.as_int(0, "p must be int", r); |
| if(sbegin<0) | if(begin<0) |
| throw Exception(PARSER_RUNTIME, 0, "p(%d) must be >=0", sbegin); | throw Exception(PARSER_RUNTIME, 0, "p(%d) must be >=0", begin); |
| size_t begin=(size_t)sbegin; | |
| size_t end; | size_t end; |
| size_t length=0; | size_t length=0; |
| if(params.count()>1) { | if(params.count()>1) { |
| ssize_t sn=params.as_int(1, "n must be int", r); | int n=params.as_int(1, "n must be int", r); |
| if(sn<0) | if(n<0) |
| throw Exception(PARSER_RUNTIME, 0, "n(%d) must be >=0", sn); | throw Exception(PARSER_RUNTIME, 0, "n(%d) must be >=0", n); |
| end=begin+(size_t)sn; | end=begin+n; |
| } else { | } else { |
| length=string.length(r.charsets.source()); | length=string.length(r.charsets.source()); |
| end=length; | end=length; |
| Line 195 static void _pos(Request& r, MethodParam | Line 195 static void _pos(Request& r, MethodParam |
| Value& substr=params.as_no_junction(0, "substr must not be code"); | Value& substr=params.as_no_junction(0, "substr must not be code"); |
| const String& string=GET_SELF(r, VString).string(); | const String& string=GET_SELF(r, VString).string(); |
| ssize_t offset=0; | int offset=0; |
| if(params.count()>1){ | if(params.count()>1){ |
| offset=params.as_int(1, "n must be int", r); | offset=params.as_int(1, "n must be int", r); |
| if(offset<0) | if(offset<0) |
| throw Exception(PARSER_RUNTIME, 0, "n(%d) must be >=0", offset); | throw Exception(PARSER_RUNTIME, 0, "n(%d) must be >=0", offset); |
| } | } |
| r.write(*new VInt((int)string.pos(r.charsets.source(), substr.as_string(), (size_t)offset))); | r.write(*new VInt((int)string.pos(r.charsets.source(), substr.as_string(), offset))); |
| } | } |
| static void split_list(MethodParams& params, int paramIndex, const String& string, ArrayString& result) { | static void split_list(MethodParams& params, int paramIndex, const String& string, ArrayString& result) { |