"""Common locale-specific character types

Following productions are all based on string module,
with the default locale specified.  The first production
is a single character of the class and the second a
repeating character version:

    digit, digits
    uppercasechar, uppercase
    lowercasechar, lowercase
    letter, letters
    whitespacechar, whitespace
    punctuationchar, punctuation
    octdigit, octdigits
    hexdigit, hexdigits
    printablechar, printable

For Python versions with the constants in the string module:
    ascii_letter, ascii_letters
    ascii_lowercasechar, ascii_lowercase
    ascii_uppercasechar, ascii_uppercase


Following are locale-specific values, both are
single-character values:

    locale_decimal_point -- locale-specific decimal seperator
    locale_thousands_seperator -- locale-specific "thousands" seperator
    
Others:

    EOF -- Matches iff parsing has reached the end of the buffer

There are no interpreters provided (the types are considered
too common to provide meaningful interpreters).
"""
from simpleparse import objectgenerator, common
import string, locale
locale.setlocale(locale.LC_ALL, "" )

c = {}

# string-module items...

for source,single,repeat in [
    ("digits","digit","digits"),
    ("ascii_uppercase", "uppercasechar", "uppercase"),
    ("ascii_lowercase", "lowercasechar", "lowercase"),
    ("ascii_letters", "letter", "letters" ),
    ("ascii_letters", "ascii_letter", "ascii_letters" ), # alias
    ("ascii_lowercase", "ascii_lowercasechar", "ascii_lowercase"),
    ("ascii_uppercase", "ascii_uppercasechar", "ascii_uppercase"),
    ("whitespace", "whitespacechar", "whitespace"),
    ("punctuation", "punctuationchar", "punctuation"),
    ("octdigits", "octdigit", "octdigits"),
    ("hexdigits", "hexdigit", "hexdigits"),
    ("printable", "printablechar", "printable"),
]:
    try:
        value = getattr( string, source )
        c[ single ] = objectgenerator.Range( value = value )
        c[ repeat ] = objectgenerator.Range( value = value, repeating =1 )
    except AttributeError:
        pass

# locale-module items
_lc = locale.localeconv()
c[ "locale_decimal_point" ] = objectgenerator.Literal( value = _lc["decimal_point"] )
c[ "locale_thousands_seperator" ] = objectgenerator.Literal( value = _lc["thousands_sep"] )

del _lc

# common, but not really well defined sets
# this is the set of characters which are interpreted
# specially by Python's string-escaping when they
# follow a \\ char.

from simpleparse.stt import TextTools
c[ "EOF" ] = objectgenerator.Prebuilt( value = (
    (None, TextTools.EOF, TextTools.Here),
) )

common.share( c )
