ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- PKR]22 charpos-i.rinu[U:RDoc::AnyMethod[iI" charpos:ETI"StringScanner#charpos;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"XReturns the character position of the scan pointer. In the 'reset' position, this ;TI"Rvalue is zero. In the 'terminated' position (i.e. the string is exhausted), ;TI"*this value is the size of the string.;To:RDoc::Markup::BlankLineo; ; [I"4In short, it's a 0-based index into the string.;T@o:RDoc::Markup::Verbatim; [ I",s = StringScanner.new("abcädeföghi") ;TI" s.charpos # -> 0 ;TI"'s.scan_until(/ä/) # -> "abcä" ;TI" s.pos # -> 5 ;TI"s.charpos # -> 4;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]1?RRmatched%3f-i.rinu[U:RDoc::AnyMethod[iI" matched?:ETI"StringScanner#matched?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"6Returns +true+ iff the last match was successful.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI" s.match?(/\w+/) # => 4 ;TI"#s.matched? # => true ;TI""s.match?(/\d+/) # => nil ;TI"#s.matched? # => false;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]V7-post_match-i.rinu[U:RDoc::AnyMethod[iI"post_match:ETI"StringScanner#post_match;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"\Return the post-match (in the regular expression sense) of the last scan.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI")s.scan(/\w+/) # -> "test" ;TI"&s.scan(/\s+/) # -> " " ;TI")s.pre_match # -> "test" ;TI"*s.post_match # -> "string";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]UU reset-i.rinu[U:RDoc::AnyMethod[iI" reset:ETI"StringScanner#reset;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I">Reset the scan pointer (index 0) and clear matching data.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]+IIvalues_at-i.rinu[U:RDoc::AnyMethod[iI"values_at:ETI"StringScanner#values_at;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"JReturns the subgroups in the most recent match at the given indices. ;TI"4If nothing was priorly matched, it returns nil.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI";s.scan(/(\w+) (\w+) (\d+) /) # -> "Fri Dec 12 " ;TI"Os.values_at 0, -1, 5, 2 # -> ["Fri Dec 12 ", "12", nil, "Dec"] ;TI"1s.scan(/(\w+) (\w+) (\d+) /) # -> nil ;TI"0s.values_at 0, -1, 5, 2 # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"7scanner.values_at( i1, i2, ... iN ) -> an_array ;T0[I" (*args);T@FI"StringScanner;TcRDoc::NormalClass00PKR]/__rest_size-i.rinu[U:RDoc::AnyMethod[iI"rest_size:ETI"StringScanner#rest_size;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"@s.rest_size is equivalent to s.rest.size.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR] '#' ;TI",s.scan_until /12/ # -> "Fri Dec 12" ;TI"Os.inspect # -> '#';T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@&FI"StringScanner;TcRDoc::NormalClass00PKR]1,mm clear-i.rinu[U:RDoc::AnyMethod[iI" clear:ETI"StringScanner#clear;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Equivalent to #terminate. ;TI"5This method is obsolete; use #terminate instead.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]rS exist%3f-i.rinu[U:RDoc::AnyMethod[iI" exist?:ETI"StringScanner#exist?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"LLooks _ahead_ to see if the +pattern+ exists _anywhere_ in the string, ;TI"Pwithout advancing the scan pointer. This predicates whether a #scan_until ;TI"will return a value.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI"$s.exist? /s/ # -> 3 ;TI")s.scan /test/ # -> "test" ;TI"$s.exist? /s/ # -> 2 ;TI"%s.exist? /e/ # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"exist?(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]Jwpre_match-i.rinu[U:RDoc::AnyMethod[iI"pre_match:ETI"StringScanner#pre_match;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"[Return the pre-match (in the regular expression sense) of the last scan.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI")s.scan(/\w+/) # -> "test" ;TI"&s.scan(/\s+/) # -> " " ;TI")s.pre_match # -> "test" ;TI"*s.post_match # -> "string";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]Kbnew-c.rinu[U:RDoc::AnyMethod[iI"new:ETI"StringScanner::new;TT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"ICreates a new StringScanner object to scan over the given +string+. ;TI"1+dup+ argument is obsolete and not used now.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I",StringScanner.new(string, dup = false) ;T0[I"(p1, p2 = v2);T@FI"StringScanner;TcRDoc::NormalClass00PKR]BError/cdesc-Error.rinu[U:RDoc::NormalClass[iI" Error:ETI"StringScanner::Error;TI"StandardError;To:RDoc::Markup::Document: @parts[o;;[: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0; 0; 0[[[[[I" class;T[[: public[[:protected[[: private[[I" instance;T[[; [[; [[; [[[U:RDoc::Context::Section[i0o;;[; 0; 0[@I"StringScanner;TcRDoc::NormalClassPKR]}| getch-i.rinu[U:RDoc::AnyMethod[iI" getch:ETI"StringScanner#getch;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I")Scans one character and returns it. ;TI"2This method is multibyte character sensitive.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"!s = StringScanner.new("ab") ;TI" s.getch # => "a" ;TI" s.getch # => "b" ;TI" s.getch # => nil ;TI" ;TI"$KCODE = 'EUC' ;TI"'s = StringScanner.new("\244\242") ;TI"Ls.getch # => "\244\242" # Japanese hira-kana "A" in EUC-JP ;TI"s.getch # => nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]ۥqNN rest%3f-i.rinu[U:RDoc::AnyMethod[iI" rest?:ETI"StringScanner#rest?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"DReturns true iff there is more data in the string. See #eos?. ;TI"0This method is obsolete; use #eos? instead.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"*s = StringScanner.new('test string') ;TI"%s.eos? # These two ;TI")s.rest? # are opposites.;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]`ee empty%3f-i.rinu[U:RDoc::AnyMethod[iI" empty?:ETI"StringScanner#empty?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Equivalent to #eos?. ;TI"0This method is obsolete, use #eos? instead.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]kqg?? string-i.rinu[U:RDoc::AnyMethod[iI" string:ETI"StringScanner#string;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"&Returns the string being scanned.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]#!1SS peek-i.rinu[U:RDoc::AnyMethod[iI" peek:ETI"StringScanner#peek;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"JExtracts a string corresponding to string[pos,len], without ;TI" advancing the scan pointer.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"*s = StringScanner.new('test string') ;TI"'s.peek(7) # => "test st" ;TI"&s.peek(7) # => "test st";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"peek(len) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]էpointer%3d-i.rinu[U:RDoc::AnyMethod[iI" pointer=:ETI"StringScanner#pointer=;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"/Set the byte position of the scan pointer.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"*s = StringScanner.new('test string') ;TI"!s.pos = 7 # -> 7 ;TI"%s.rest # -> "ring";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" pos=(n) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]c?search_full-i.rinu[U:RDoc::AnyMethod[iI"search_full:ETI"StringScanner#search_full;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"8Scans the string _until_ the +pattern+ is matched. ;TI"FAdvances the scan pointer if +advance_pointer_p+, otherwise not. ;TI"HReturns the matched string if +return_string_p+ is true, otherwise ;TI"+returns the number of bytes advanced. ;TI"0This method does affect the match register.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I">search_full(pattern, advance_pointer_p, return_string_p) ;T0[I"(p1, p2, p3);T@FI"StringScanner;TcRDoc::NormalClass00PKR]7 concat-i.rinu[U:RDoc::AnyMethod[iI" concat:ETI"StringScanner#concat;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"0Appends +str+ to the string being scanned. ;TI".This method does not affect scan pointer.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI"s.scan(/Fri /) ;TI"s << " +1000 GMT" ;TI"@s.string # -> "Fri Dec 12 1975 14:39 +1000 GMT" ;TI"#s.scan(/Dec/) # -> "Dec";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"concat(str);T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]㫛''check_until-i.rinu[U:RDoc::AnyMethod[iI"check_until:ETI"StringScanner#check_until;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"QThis returns the value that #scan_until would return, without advancing the ;TI";scan pointer. The match register is affected, though.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI"3s.check_until /12/ # -> "Fri Dec 12" ;TI"(s.pos # -> 0 ;TI")s.matched # -> 12 ;T: @format0o; ; [I"LMnemonic: it "checks" to see whether a #scan_until will return a value.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"check_until(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]fPbmatched_size-i.rinu[U:RDoc::AnyMethod[iI"matched_size:ETI"StringScanner#matched_size;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"QReturns the size of the most recent match (see #matched), or +nil+ if there ;TI"was no recent match.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI")s.check /\w+/ # -> "test" ;TI"$s.matched_size # -> 4 ;TI"&s.check /\d+/ # -> nil ;TI"%s.matched_size # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]+a4qq size-i.rinu[U:RDoc::AnyMethod[iI" size:ETI"StringScanner#size;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"?Returns the amount of subgroups in the most recent match. ;TI")The full match counts as a subgroup.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI";s.scan(/(\w+) (\w+) (\d+) /) # -> "Fri Dec 12 " ;TI".s.size # -> 4;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" size ;T0[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]J?+'yycdesc-StringScanner.rinu[U:RDoc::NormalClass[iI"StringScanner:ET@I" Object;To:RDoc::Markup::Document: @parts[o;;[&o:RDoc::Markup::Paragraph;[I"RStringScanner provides for lexical scanning operations on a String. Here is ;TI"an example of its usage:;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim;[I"8s = StringScanner.new('This is an example string') ;TI"%s.eos? # -> false ;TI" ;TI"&p s.scan(/\w+/) # -> "This" ;TI"#p s.scan(/\w+/) # -> nil ;TI"#p s.scan(/\s+/) # -> " " ;TI"#p s.scan(/\s+/) # -> nil ;TI"$p s.scan(/\w+/) # -> "is" ;TI"%s.eos? # -> false ;TI" ;TI"#p s.scan(/\s+/) # -> " " ;TI"$p s.scan(/\w+/) # -> "an" ;TI"#p s.scan(/\s+/) # -> " " ;TI")p s.scan(/\w+/) # -> "example" ;TI"#p s.scan(/\s+/) # -> " " ;TI"(p s.scan(/\w+/) # -> "string" ;TI"$s.eos? # -> true ;TI" ;TI"#p s.scan(/\s+/) # -> nil ;TI"#p s.scan(/\w+/) # -> nil ;T: @format0o; ;[ I"PScanning a string means remembering the position of a scan pointer, ;TI"Pwhich is just an index. The point of scanning is to move forward a bit at ;TI"Oa time, so matches are sought after the scan pointer; usually immediately ;TI"after it.;T@o; ;[I"IGiven the string "test string", here are the pertinent scan pointer ;TI"positions:;T@o; ;[I" t e s t s t r i n g ;TI"0 1 2 ... 1 ;TI" 0 ;T; 0o; ;[ I"OWhen you #scan for a pattern (a regular expression), the match must occur ;TI"Pat the character after the scan pointer. If you use #scan_until, then the ;TI"Omatch can occur anywhere after the scan pointer. In both cases, the scan ;TI"Ppointer moves just beyond the last character of the match, ready to ;TI"Nscan again from the next character onwards. This is demonstrated by the ;TI"example above.;T@S:RDoc::Markup::Heading: leveli: textI"Method Categories;T@o; ;[ I"PThere are other methods besides the plain scanners. You can look ahead in ;TI"Rthe string without actually scanning. You can access the most recent match. ;TI"NYou can modify the string being scanned, reset or terminate the scanner, ;TI"Pfind out or change the position of the scan pointer, skip ahead, and so on.;T@S; ;i;I"Advancing the Scan Pointer;T@o:RDoc::Markup::List: @type: BULLET: @items[ o:RDoc::Markup::ListItem: @label0;[o; ;[I" #getch;To;;0;[o; ;[I"#get_byte;To;;0;[o; ;[I" #scan;To;;0;[o; ;[I"#scan_until;To;;0;[o; ;[I" #skip;To;;0;[o; ;[I"#skip_until;T@S; ;i;I"Looking Ahead;T@o;;;;[ o;;0;[o; ;[I" #check;To;;0;[o; ;[I"#check_until;To;;0;[o; ;[I" #exist?;To;;0;[o; ;[I" #match?;To;;0;[o; ;[I" #peek;T@S; ;i;I"Finding Where we Are;T@o;;;;[ o;;0;[o; ;[I" #beginning_of_line? (#bol?);To;;0;[o; ;[I" #eos?;To;;0;[o; ;[I" #rest?;To;;0;[o; ;[I"#rest_size;To;;0;[o; ;[I" #pos;T@S; ;i;I"Setting Where we Are;T@o;;;;[o;;0;[o; ;[I" #reset;To;;0;[o; ;[I"#terminate;To;;0;[o; ;[I" #pos=;T@S; ;i;I"Match Data;T@o;;;;[ o;;0;[o; ;[I" #matched;To;;0;[o; ;[I"#matched?;To;;0;[o; ;[I"#matched_size;To;;0;[o;;: LABEL;[o;;[I";T;[@o;;0;[o; ;[I"#pre_match;To;;0;[o; ;[I"#post_match;T@S; ;i;I"Miscellaneous;T@o;;;;[ o;;0;[o; ;[I"<<;To;;0;[o; ;[I" #concat;To;;0;[o; ;[I" #string;To;;0;[o; ;[I" #string=;To;;0;[o; ;[I" #unscan;T@o; ;[I"1There are aliases to several of the methods.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0;0;0[[[[[I" class;T[[: public[[I"must_C_version;TI"ext/strscan/strscan.c;T[I"new;T@[:protected[[: private[[I" instance;T[[;[/[I"<<;T@[I"[];T@[I"beginning_of_line?;T@[I" charpos;T@[I" check;T@[I"check_until;T@[I" clear;T@[I" concat;T@[I" empty?;T@[I" eos?;T@[I" exist?;T@[I" get_byte;T@[I" getbyte;T@[I" getch;T@[I" inspect;T@[I" match?;T@[I" matched;T@[I" matched?;T@[I"matched_size;T@[I" peek;T@[I" peep;T@[I" pointer;T@[I" pointer=;T@[I"pos;T@[I" pos=;T@[I"post_match;T@[I"pre_match;T@[I" reset;T@[I" rest;T@[I" rest?;T@[I"rest_size;T@[I" restsize;T@[I" scan;T@[I"scan_full;T@[I"scan_until;T@[I"search_full;T@[I" skip;T@[I"skip_until;T@[I" string;T@[I" string=;T@[I"terminate;T@[I" unscan;T@[;[[;[[I"initialize_copy;T@[[U:RDoc::Context::Section[i0o;;[;0;0[@@cRDoc::TopLevelPKR]1oo getbyte-i.rinu[U:RDoc::AnyMethod[iI" getbyte:ETI"StringScanner#getbyte;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Equivalent to #get_byte. ;TI"4This method is obsolete; use #get_byte instead.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]Vscan_full-i.rinu[U:RDoc::AnyMethod[iI"scan_full:ETI"StringScanner#scan_full;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [ I"QTests whether the given +pattern+ is matched from the current scan pointer. ;TI"?Advances the scan pointer if +advance_pointer_p+ is true. ;TI">Returns the matched string if +return_string_p+ is true. ;TI"$The match register is affected.;To:RDoc::Markup::BlankLineo; ; [I"/"full" means "#scan with full parameters".;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" 0 ;TI")s.scan_until /str/ # -> "test str" ;TI" s.pos # -> 8 ;TI"3s.terminate # -> # ;TI" s.pos # -> 11;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]x/ %5b%5d-i.rinu[U:RDoc::AnyMethod[iI"[]:ETI"StringScanner#[];TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"7Return the n-th subgroup in the most recent match.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI";s.scan(/(\w+) (\w+) (\d+) /) # -> "Fri Dec 12 " ;TI";s[0] # -> "Fri Dec 12 " ;TI"3s[1] # -> "Fri" ;TI"3s[2] # -> "Dec" ;TI"2s[3] # -> "12" ;TI":s.post_match # -> "1975 14:39" ;TI"0s.pre_match # -> "" ;TI" ;TI" s.reset ;TI"Ps.scan(/(?\w+) (?\w+) (?\d+) /) # -> "Fri Dec 12 " ;TI";s[0] # -> "Fri Dec 12 " ;TI"3s[1] # -> "Fri" ;TI"3s[2] # -> "Dec" ;TI"2s[3] # -> "12" ;TI"3s[:wday] # -> "Fri" ;TI"3s[:month] # -> "Dec" ;TI"2s[:day] # -> "12" ;TI":s.post_match # -> "1975 14:39" ;TI"/s.pre_match # -> "";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" [](n) ;T0[I" (p1);T@%FI"StringScanner;TcRDoc::NormalClass00PKR]>"]] check-i.rinu[U:RDoc::AnyMethod[iI" check:ETI"StringScanner#check;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"PThis returns the value that #scan would return, without advancing the scan ;TI"6pointer. The match register is affected, though.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI",s.check /Fri/ # -> "Fri" ;TI"(s.pos # -> 0 ;TI",s.matched # -> "Fri" ;TI"*s.check /12/ # -> nil ;TI"*s.matched # -> nil ;T: @format0o; ; [I"FMnemonic: it "checks" to see whether a #scan will return a value.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"check(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]蹒 rest-i.rinu[U:RDoc::AnyMethod[iI" rest:ETI"StringScanner#rest;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"PReturns the "rest" of the string (i.e. everything after the scan pointer). ;TI"DIf there is no more data (eos? = true), it returns "".;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]n%jhhpos-i.rinu[U:RDoc::AnyMethod[iI"pos:ETI"StringScanner#pos;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"SReturns the byte position of the scan pointer. In the 'reset' position, this ;TI"Rvalue is zero. In the 'terminated' position (i.e. the string is exhausted), ;TI".this value is the bytesize of the string.;To:RDoc::Markup::BlankLineo; ; [I"=In short, it's a 0-based index into bytes of the string.;T@o:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI" s.pos # -> 0 ;TI")s.scan_until /str/ # -> "test str" ;TI" s.pos # -> 8 ;TI"3s.terminate # -> # ;TI" s.pos # -> 11;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]i[   pos%3d-i.rinu[U:RDoc::AnyMethod[iI" pos=:ETI"StringScanner#pos=;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"/Set the byte position of the scan pointer.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"*s = StringScanner.new('test string') ;TI"!s.pos = 7 # -> 7 ;TI"%s.rest # -> "ring";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" pos=(n);T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]) get_byte-i.rinu[U:RDoc::AnyMethod[iI" get_byte:ETI"StringScanner#get_byte;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"$Scans one byte and returns it. ;TI"7This method is not multibyte character sensitive. ;TI"See also: #getch.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"!s = StringScanner.new('ab') ;TI"!s.get_byte # => "a" ;TI"!s.get_byte # => "b" ;TI"!s.get_byte # => nil ;TI" ;TI"$KCODE = 'EUC' ;TI"'s = StringScanner.new("\244\242") ;TI"$s.get_byte # => "\244" ;TI"$s.get_byte # => "\242" ;TI" s.get_byte # => nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR])string%3d-i.rinu[U:RDoc::AnyMethod[iI" string=:ETI"StringScanner#string=;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"GChanges the string being scanned to +str+ and resets the scanner. ;TI"Returns +str+.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"string=(str) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR].oxx skip-i.rinu[U:RDoc::AnyMethod[iI" skip:ETI"StringScanner#skip;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"PAttempts to skip over the given +pattern+ beginning with the scan pointer. ;TI"RIf it matches, the scan pointer is advanced to the end of the match, and the ;TI"Dlength of the match is returned. Otherwise, +nil+ is returned.;To:RDoc::Markup::BlankLineo; ; [I"EIt's similar to #scan, but without returning the matched string.;T@o:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI"p s.skip(/\w+/) # -> 4 ;TI" p s.skip(/\w+/) # -> nil ;TI"p s.skip(/\s+/) # -> 1 ;TI"p s.skip(/\w+/) # -> 6 ;TI"p s.skip(/./) # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"skip(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]@Hskip_until-i.rinu[U:RDoc::AnyMethod[iI"skip_until:ETI"StringScanner#skip_until;TF: publico:RDoc::Markup::Document: @parts[ o:RDoc::Markup::Paragraph; [I"QAdvances the scan pointer until +pattern+ is matched and consumed. Returns ;TI"Bthe number of bytes advanced, or +nil+ if no match was found.;To:RDoc::Markup::BlankLineo; ; [I"NLook ahead to match +pattern+, and advance the scan pointer to the _end_ ;TI"Nof the match. Return the number of characters advanced, or +nil+ if the ;TI"match was unsuccessful.;T@o; ; [I"OIt's similar to #scan_until, but without returning the intervening string.;T@o:RDoc::Markup::Verbatim; [I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI")s.skip_until /12/ # -> 10 ;TI""s #;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"skip_until(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR],:>>fixed_anchor%3f-i.rinu[U:RDoc::AnyMethod[iI"fixed_anchor?:ETI" StringScanner#fixed_anchor?;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"5Whether +scanner+ uses fixed anchor mode or not.;To:RDoc::Markup::BlankLineo; ; [I"HIf fixed anchor mode is used, +\A+ always matches the beginning of ;TI"Ethe string. Otherwise, +\A+ always matches the current position.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I",scanner.fixed_anchor? -> true or false ;T0[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]hܡcc peep-i.rinu[U:RDoc::AnyMethod[iI" peep:ETI"StringScanner#peep;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"Equivalent to #peek. ;TI"0This method is obsolete; use #peek instead.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]ژ=beginning_of_line%3f-i.rinu[U:RDoc::AnyMethod[iI"beginning_of_line?:ETI"%StringScanner#beginning_of_line?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"IReturns +true+ iff the scan pointer is at the beginning of the line.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"+s = StringScanner.new("test\ntest\n") ;TI" s.bol? # => true ;TI"s.scan(/te/) ;TI"!s.bol? # => false ;TI"s.scan(/st\n/) ;TI" s.bol? # => true ;TI"s.terminate ;TI"s.bol? # => true;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]h[[ eos%3f-i.rinu[U:RDoc::AnyMethod[iI" eos?:ETI"StringScanner#eos?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"DReturns +true+ if the scan pointer is at the end of the string.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI""p s.eos? # => false ;TI"s.scan(/test/) ;TI""p s.eos? # => false ;TI"s.terminate ;TI" p s.eos? # => true;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]*a captures-i.rinu[U:RDoc::AnyMethod[iI" captures:ETI"StringScanner#captures;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"TReturns the subgroups in the most recent match (not including the full match). ;TI"4If nothing was priorly matched, it returns nil.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI";s.scan(/(\w+) (\w+) (\d+) /) # -> "Fri Dec 12 " ;TI"Bs.captures # -> ["Fri", "Dec", "12"] ;TI"1s.scan(/(\w+) (\w+) (\d+) /) # -> nil ;TI"0s.captures # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"captures ;T0[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]|m   scan-i.rinu[U:RDoc::AnyMethod[iI" scan:ETI"StringScanner#scan;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"PTries to match with +pattern+ at the current position. If there's a match, ;TI"Mthe scanner advances the "scan pointer" and returns the matched string. ;TI"*Otherwise, the scanner returns +nil+.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI"#p s.scan(/\w+/) # -> "test" ;TI" p s.scan(/\w+/) # -> nil ;TI" p s.scan(/\s+/) # -> " " ;TI"%p s.scan(/\w+/) # -> "string" ;TI"p s.scan(/./) # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"scan(pattern) => String ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]ƹ+ match%3f-i.rinu[U:RDoc::AnyMethod[iI" match?:ETI"StringScanner#match?;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"QTests whether the given +pattern+ is matched from the current scan pointer. ;TI"RReturns the length of the match, or +nil+. The scan pointer is not advanced.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI" p s.match?(/\w+/) # -> 4 ;TI" p s.match?(/\w+/) # -> 4 ;TI"!p s.match?(/\s+/) # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"match?(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]jtA unscan-i.rinu[U:RDoc::AnyMethod[iI" unscan:ETI"StringScanner#unscan;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"SSet the scan pointer to the previous position. Only one previous position is ;TI"=remembered, and it changes with each scanning operation.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"*s = StringScanner.new('test string') ;TI"&s.scan(/\w+/) # => "test" ;TI"s.unscan ;TI"$s.scan(/../) # => "te" ;TI"#s.scan(/\d/) # => nil ;TI"Us.unscan # ScanError: unscan failed: previous match record not exist;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]#Cw(scan_until-i.rinu[U:RDoc::AnyMethod[iI"scan_until:ETI"StringScanner#scan_until;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"RScans the string _until_ the +pattern+ is matched. Returns the substring up ;TI"Oto and including the end of the match, advancing the scan pointer to that ;TI"7location. If there is no match, +nil+ is returned.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI"/s.scan_until(/1/) # -> "Fri Dec 1" ;TI".s.pre_match # -> "Fri Dec " ;TI"&s.scan_until(/XYZ/) # -> nil;T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"scan_until(pattern) ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR])J8eeinitialize_copy-i.rinu[U:RDoc::AnyMethod[iI"initialize_copy:ETI""StringScanner#initialize_copy;TF: privateo:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"'Duplicates a StringScanner object.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"dup clone ;T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]Cterminate-i.rinu[U:RDoc::AnyMethod[iI"terminate:ETI"StringScanner#terminate;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"KSet the scan pointer to the end of the string and clear matching data.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I"terminate clear ;T0[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]t-- restsize-i.rinu[U:RDoc::AnyMethod[iI" restsize:ETI"StringScanner#restsize;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"@s.restsize is equivalent to s.rest_size. ;TI"5This method is obsolete; use #rest_size instead.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]x %3c%3c-i.rinu[U:RDoc::AnyMethod[iI"<<:ETI"StringScanner#<<;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"0Appends +str+ to the string being scanned. ;TI".This method does not affect scan pointer.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [ I"4s = StringScanner.new("Fri Dec 12 1975 14:39") ;TI"s.scan(/Fri /) ;TI"s << " +1000 GMT" ;TI"@s.string # -> "Fri Dec 12 1975 14:39 +1000 GMT" ;TI"#s.scan(/Dec/) # -> "Dec";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I" <<(str);T0[I" (p1);T@FI"StringScanner;TcRDoc::NormalClass00PKR]( matched-i.rinu[U:RDoc::AnyMethod[iI" matched:ETI"StringScanner#matched;TF: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"%Returns the last matched string.;To:RDoc::Markup::BlankLineo:RDoc::Markup::Verbatim; [I"*s = StringScanner.new('test string') ;TI" s.match?(/\w+/) # -> 4 ;TI"$s.matched # -> "test";T: @format0: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below000[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]53must_C_version-c.rinu[U:RDoc::AnyMethod[iI"must_C_version:ETI""StringScanner::must_C_version;TT: publico:RDoc::Markup::Document: @parts[o:RDoc::Markup::Paragraph; [I"7This method is defined for backward compatibility.;T: @fileI"ext/strscan/strscan.c;T:0@omit_headings_from_table_of_contents_below0I""StringScanner.must_C_version ;T0[I"();T@FI"StringScanner;TcRDoc::NormalClass00PKR]22 charpos-i.rinu[PKR]1?RRnmatched%3f-i.rinu[PKR]V7-post_match-i.rinu[PKR]UU reset-i.rinu[PKR]+IIc values_at-i.rinu[PKR]/__ rest_size-i.rinu[PKR]"]] \check-i.rinu[PKR]蹒 `rest-i.rinu[PKR]n%jhhnbpos-i.rinu[PKR]i[   fpos%3d-i.rinu[PKR]) Uhget_byte-i.rinu[PKR])kstring%3d-i.rinu[PKR].oxx rmskip-i.rinu[PKR]@H#qskip_until-i.rinu[PKR],:>>ufixed_anchor%3f-i.rinu[PKR]hܡcc wpeep-i.rinu[PKR]ژ==ybeginning_of_line%3f-i.rinu[PKR]h[[ 5|eos%3f-i.rinu[PKR]*a ~captures-i.rinu[PKR]|m   scan-i.rinu[PKR]ƹ+ wmatch%3f-i.rinu[PKR]jtA `unscan-i.rinu[PKR]#Cw(scan_until-i.rinu[PKR])J8eeinitialize_copy-i.rinu[PKR]Cterminate-i.rinu[PKR]t-- Prestsize-i.rinu[PKR]x !%3c%3c-i.rinu[PKR]( matched-i.rinu[PKR]53must_C_version-c.rinu[PK33_