#!/usr/bin/env python
#
#  DocBeauty (c) 2003, 2004 David Turner <david@freetype.org>
#
# This program is used to beautify the documentation comments used
# in the FreeType 2 public headers.
#

from sources   import *
from content   import *
from utils     import *

import utils

import sys, os, time, string, getopt

content_processor = ContentProcessor()


def beautify_block( block ):
    if block.content:
        content_processor.reset()

        markups = content_processor.process_content( block.content )
        text    = []
        first   = 1

        for markup in markups:
            text.extend( markup.beautify( first ) )
            first = 0
        
        # now beautify the documentation "borders" themselves
        lines = [ " /*************************************************************************" ]
        for l in text:
            lines.append( "  *" + l )
        lines.append( "  */" )
        
        block.lines = lines
        

def usage():
    print "\nDocBeauty 0.1 Usage information\n"
    print "  docbeauty [options] file1 [ file2 ... ]\n"
    print "using the following options:\n"
    print "  -h : print this page"
    print "  -b : backup original files with the 'orig' extension"
    print ""
    print "  --backup : same as -b"
    

def main( argv ):
    """main program loop"""

    global output_dir

    try:
        opts, args = getopt.getopt( sys.argv[1:],
                                    "hb",
                                    [ "help", "backup" ] )

    except getopt.GetoptError:
        usage()
        sys.exit( 2 )

    if args == []:
        usage()
        sys.exit( 1 )

    # process options
    #
    output_dir = None
    do_backup  = None

    for opt in opts:
        if opt[0] in ( "-h", "--help" ):
            usage()
            sys.exit( 0 )

        if opt[0] in ( "-b", "--backup" ):
            do_backup = 1

    # create context and processor
    source_processor  = SourceProcessor()

    # retrieve the list of files to process
    file_list = make_file_list( args )
    for filename in file_list:
        source_processor.parse_file( filename )
        for block in source_processor.blocks:
            beautify_block( block )
        new_name = filename + ".new"
        ok       = None
        try:
            file = open( new_name, "wt" )
            for block in source_processor.blocks:
                for line in block.lines:
                    file.write( line )
                    file.write( "\n" )
            file.close()
        except:
            ok = 0

# if called from the command line
#
if __name__ == '__main__':
    main( sys.argv )


# eof
