// --------------------------- ScanNextWord ------------------------------- public static TextLinesWordCursor ScanNextWord( TextLines Lines, TextLinesWordCursor CurrentWord) { TextLinesWordCursor res = null; TextLinesCursor csr = null; TextLinesScanResults sr = null; // calc scan start position csr = ScanWord_CalcStartBx(Lines, CurrentWord); // advance past whitespace if ((csr.Position != RelativePosition.None) && (csr.Position != RelativePosition.End)) { sr = Lines.ScanNotEqual( csr, CurrentWord.TextTraits.WhitespacePatterns, ScannerEndOfLineConsider.ContinueScan); csr = sr.Pos; } // got the start of something. scan for the delimeter ( could be the current char ) if (csr.Position == RelativePosition.At) { //ScanWord_IsolateWord(InBoundedString, Bx, ref results, InCurrentWord.TextTraits); } return(res); }
// ----------------------- ScanWord_CalcStartBx --------------------------- // calc start position from which to start scan to the next word. private static TextLinesCursor ScanWord_CalcStartBx( TextLines InLines, TextLinesWordCursor InWord) { // TextLinesNode linesNode = null; TextLinesCursor bx = null; switch (InWord.Position) { case RelativePosition.Begin: bx = InLines.PosBgn(); break; case RelativePosition.Before: break; case RelativePosition.After: break; case RelativePosition.End: bx = InLines.PosEnd(); break; case RelativePosition.None: break; case RelativePosition.At: break; default: break; } return(bx); }
public static TextLinesWordCursor ScanFirstWord( TextLines InLines, TextTraits InTraits) { TextLinesWordCursor csr = new TextLinesWordCursor(); csr.Position = RelativePosition.Begin; csr.TextTraits = InTraits; TextLinesWordCursor res = ScanNextWord(InLines, csr); return(res); }
// -------------------- ScanWord_IsolatexWord --------------------------- private static TextLinesWordCursor ScanWord_IsolatexWord( TextLines InLines, TextLinesCursor InBxCsr, TextTraits InTraits) { TextLinesWordCursor tlwc = null; TextLinesCursor csr = null; TextLinesCursor endcsr = null; ScanPatternResults spr = null; csr = new TextLinesCursor(InBxCsr); char ch1 = InBxCsr.CursorChar; // look ahead to see if this word is braced. if (IsOpenQuoteChar(ch1) == false) { spr = ScanEqualAny(csr.LineData, csr.LineOx, csr.LineData.Length - 1, InTraits.NonWordPatterns); } else { spr = new ScanPatternResults(-1); } // the rule is only braced words can span multiple lines. so if the word is // not braced, it can be parsed by the more general purpose IsolatexWord method. if ((IsOpenQuoteChar(ch1) == true) || (InTraits.IsOpenBraceChar(spr.FoundChar.Value) == false)) { ScanBoundedString bs = new ScanBoundedString(csr.LineData); WordCursor wc = new WordCursor(); wc.SetTraits(InTraits); ScanWord_IsolateWord(bs, csr.LineOx, ref wc, InTraits); endcsr = new TextLinesCursor(csr.LinesNode, wc.ScanEx, AcRelativePosition.At); tlwc = new TextLinesWordCursor(wc, csr, endcsr); } else { } return(tlwc); }