// --------------------------- 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);
        }
Example #3
0
        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);
        }