Module Scanner is intended to be used for parsing texts. It consists from set of functions, which uses internally only one operation: scan. Every function scan returnes struct Matcher, which keeps information about results of scanning: status of scanning, error message, matched position, index of match (in case of matching against sets of sequences or sets of characters).
- position - position in input
- repeatno - how many times repeat scanning; for uint.max functions scan for more than zero matches
- All below functions works also with instances of Storages.
Following template functions are available:
- Matcher scan(input, CharClass?, position, repeatno) //CharClass -> basically checks if input from 'position' begins with one of characters defined in CharClass?
- Matcher scan(input, SequenceSet?, position, repeatno) //SequenceSet -> same as CharClass?, but for sequences
- Matcher scan(input, RegExp?, position, repeatno)
- Matcher scan(input, array, position, repeatno)
- Matcher scan(input, element_of_array, position, repeatno)
For below functions condition can be any of types for scan + Matcher;
- uint skip(ref T input, S condition, uint repeatno=1) // returns number of skipped characters
- StorageType?!(T) munch(T, S)(ref T input, S condition, uint repeatno=1) // consumes characters/sequences/etc. returning them from function
Additional high level functions:
- Matcher scanEscapeSequence - scans for escape sequence
- Matcher scanString - scans for string
- Matcher scanRegion - scans for region; region is delimited by matching characters e.g. [5,5,4]
- Matcher scanNumber - scans for number; needs some more work
- Matcher scanDate - scans for number; needs some more work
Scanner uses internally among others CharClass? by Jascha Wetzel from Tango ported to Phobos. Module needs some additional work to make it feature complete.