|
|
| version 1.76, 2001/04/10 11:24:00 | version 1.81, 2001/05/04 10:42:46 |
|---|---|
| Line 336 const Origin& String::origin() const { | Line 336 const Origin& String::origin() const { |
| // determining origin by last appended piece | // determining origin by last appended piece |
| // because first one frequently constant. | // because first one frequently constant. |
| // ex: ^load[/file] "document_root" + "/file" | // ex: ^load[/file] "document_root" + "/file" |
| return append_here[-1].item.origin; | // when last peice is constant, |
| // ex: parser_root_auto_path{dynamic} / auto.p{const} | |
| // using first piece | |
| Origin& last_origin=append_here[-1].item.origin; | |
| return last_origin.file ? last_origin : head.rows[0].item.origin; | |
| } | } |
| #endif | #endif |
| Line 456 void String::split(Array& result, | Line 460 void String::split(Array& result, |
| } | } |
| } | } |
| /// @test really @b test: s x m [tested: i & g ] | |
| static void regex_options(char *options, int *result){ | static void regex_options(char *options, int *result){ |
| struct Regex_option { | struct Regex_option { |
| char key; | char key; |
| Line 464 static void regex_options(char *options, | Line 467 static void regex_options(char *options, |
| int *result; | int *result; |
| } regex_option[]={ | } regex_option[]={ |
| {'i', 0, PCRE_CASELESS, result}, // a=A | {'i', 0, PCRE_CASELESS, result}, // a=A |
| {'s', 0, PCRE_DOTALL, result}, // \n\n$ | {'s', 0, PCRE_DOTALL, result}, // \n\n$ [default] |
| {'x', 0, PCRE_EXTENDED, result}, // whitespace in regex ignored | {'x', 0, PCRE_EXTENDED, result}, // whitespace in regex ignored |
| {'m', PCRE_DOTALL, PCRE_MULTILINE, result}, // ^aaa\n$^bbb\n$ | {'m', PCRE_DOTALL, PCRE_MULTILINE, result}, // ^aaa\n$^bbb\n$ |
| {'g', 0, true, result+1}, // many rows | {'g', 0, true, result+1}, // many rows |
| Line 487 static void regex_options(char *options, | Line 490 static void regex_options(char *options, |
| returns true if fills table. | returns true if fills table. |
| table format is defined and fixed[can be used by others]: | table format is defined and fixed[can be used by others]: |
| @verbatim | @verbatim |
| pre-match/match/post-match/1/2/3/... | prematch/match/postmatch/1/2/3/... |
| @endverbatim | @endverbatim |
| */ | */ |
| bool String::match(const String *aorigin, | bool String::match(const unsigned char *pcre_tables, |
| const String *aorigin, | |
| const String& regexp, | const String& regexp, |
| const String *options, | const String *options, |
| Table **table, | Table **table, |
| Line 563 bool String::match(const String *aorigin | Line 567 bool String::match(const String *aorigin |
| } | } |
| Array& row=*NEW Array(pool()); | Array& row=*NEW Array(pool()); |
| row+=&mid(0, ovector[0]); // .pre-match column value | row+=&mid(0, ovector[0]); // .prematch column value |
| row+=&mid(ovector[0], ovector[1]); // .match | row+=&mid(ovector[0], ovector[1]); // .match |
| row+=&mid(ovector[1], size()); // .post-match | row+=&mid(ovector[1], size()); // .postmatch |
| for(int i=1; i<exec_substrings; i++) { | for(int i=1; i<exec_substrings; i++) { |
| // -1:-1 case handled peacefully by mid() itself | // -1:-1 case handled peacefully by mid() itself |