File: word1.cc

package info (click to toggle)
bobcat 2.08.01-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 5,668 kB
  • ctags: 953
  • sloc: cpp: 10,403; makefile: 9,042; perl: 401; sh: 195
file content (36 lines) | stat: -rw-r--r-- 1,097 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "string.ih"

    // type should have been initialized to `NORMAL' by the caller

String::Type String::word(string const &str, const_iterator *until, 
                          const_iterator from, string const &separators)
{
    const_iterator beyond = str.end();

    while (true)
    {
        ++from;                     // accept the first (and next) character

        if 
        (
            from == beyond          // at the end or at a separator
            ||                      
            separators.find(*from) != string::npos
        )
        {
            *until = from;          // indicate the word's end
            return NORMAL;          // and a normal word
        }

        if (*from == '\\')          // handle the backslash: skip the next
        {                           // char 
            if (++from == beyond)   // oops, there's no next char. 
            {
                *until = from;      // return anyway
                return ESCAPED_END; // but indicate that it's an abnormal
            }                       // word
        }
    }
}