Index: class.doc ================================================================== --- class.doc +++ class.doc @@ -2868,20 +2868,22 @@ followed by any more consecutive line breaks without anything else in between, skips those ones too. \d Follow by some text and then : and \ or just \ to skip to and find the data in the string that has the same text. If it contains a question mark then any single character is matched. Between : and \ - you can have usual other matching commands such as [ and ]. + you can have usual other matching commands such as [ and ]. It can + also be ; instead of : optionally. + Follow by one more character, skip past any number of them. - Skip past any number of digits. _ Skip past any number of spaces and line breaks. < Rewind back to the beginning. > Skip to the end. # Successful match; the result is a number within the slice, converted from a string (parsed as decimal) to a number. $ Successful match; the result is the matched slice. % Successful match; the result is the length of the matched slice. + Z Trace (if both -t and -v switches are used). A "delimited string" in this block is delimited by any printable character on both sides (except a character with code less than 32). (The above list of pattern codes maybe it isn't explained very well; Index: function.c ================================================================== --- function.c +++ function.c @@ -1296,13 +1296,14 @@ case 30: // "\d" re: pp=pt=ll_find(pt,30); if(!pt) goto notfound; for(i=0;ps[i];i++) { - if(ps[i]==':' || ps[i]=='\\') break; - if(ps[i]!=pt[i] && ps[i]!='?') { - pt+=i; + if(ps[i]==':' || ps[i]==';' || ps[i]=='\\') break; + if(ps[i]!=pt[i+1] && ps[i]!='?') { + if(!pt[i]) goto notfound; + pt+=i?:1; goto re; } } ps+=i+1; pt+=i+2; @@ -1352,10 +1353,13 @@ case '%': if(!so || !eo || so>eo) break; stack[sp++]=NVALUE(eo-so); stack[sp++]=NVALUE(1); return sp; + case 'Z': + if(main_options['t'] && main_options['v']) printf("'' (str=%p title=%p sp=%d ps=%p pt=%p so=%p eo=%p pp=%p q=%p)\n",str,title,sp,ps,pt,so,eo,pp,q); + break; default: bad: if(main_options['v']) fprintf(stderr,"Invalid character (0x%02X) in string in LevelTable definition\n",ps[-1]); return 64; } }