#!/usr/bin/env python
"""
Idify and fixup names of given files by moving them to the new names.
"""

__version__ = "Revision: 1.5 "
__author__ = "Martin Blais <blais@furius.ca>"


import re, os, strxtra


def safe_splitext(fn):
    """ A version of splitext that does not consider long extensions with
    special characters as extensions."""
    base, ext = os.path.splitext(fn)
    if re.match('\.[a-z0-9_]+', ext, re.I):
        return base, ext
    else:
        return fn, None


def main():
    import optparse
    parser = optparse.OptionParser(__doc__.strip(), version=__version__)

    parser.add_option('-n', '--dry-run', action='store_true',
                      help="don't actually move files, "
                      "just print what you would do instead")

    parser.add_option('-D', '--keep-spaced-dashes', action='store_true',
                      help="Keep spaced dashes.")

    parser.add_option('-e', '--extension', action='store_true',
                      help="Idify the file extension too.")

    opts, args = parser.parse_args()

    for fn in args:
        ext = None
        if opts.extension:
            rfn = fn
        else:
            rfn, ext = safe_splitext(fn)

        sfn = strxtra.idify(rfn, 1, ['-'])

        if ext is not None:
            sfn += ext

        if not opts.keep_spaced_dashes:
            sfn = sfn.replace('_-_', '-')

        if opts.dry_run:
            print fn, '->', sfn
        else:
            os.rename(fn, sfn)

if __name__ == '__main__':
    main()
