import re

##############################################################################
def identifier(name):
    """Convert name to a valid Python function identifier by replacing
    any unexpected character with '_'. See
    http://docs.python.org/reference/lexical_analysis.html#identifiers
    
    identifier ::=  (letter|"_") (letter | digit | "_")*
    letter     ::=  lowercase | uppercase
    lowercase  ::=  "a"..."z"
    uppercase  ::=  "A"..."Z"
    digit      ::=  "0"..."9"

    >>> print identifier('12345')
    _12345
    >>> print identifier('abcde')
    abcde
    >>> print identifier('+5V')
    _5V
    >>> print identifier('+3.3V')
    _3_3V
    """
    regex = r"\W+"
    identifier = re.sub(regex, '_', name)
    prog = re.compile("^[A-Za-z_]")
    if prog.match(identifier) is None:
        identifier = '_%s' % identifier
    return identifier

##############################################################################
if __name__ == '__main__':
    documentation = """
    Usage: %s [-unittest [-v]]
    
    -unittest: Runs the unit tests with doctest (be verbose with '-v')
    """


    import sys
    mode = 'usage'
    if len(sys.argv) > 1:
        if sys.argv[1] == '-unittest':
            mode = 'unittest'
    if mode == 'unittest':
        import doctest
        doctest.testmod()
        sys.exit(0)
    else:
        print documentation % sys.argv[0]
        sys.exit(0)

##############################################################################
# End of File
##############################################################################
