# # Metrix++, Copyright 2009-2019, Metrix++ Project # Link: https://github.com/metrixplusplus/metrixplusplus # # This file is a part of Metrix++ Tool. # import logging import cgi import mpp.api import mpp.utils class Plugin(mpp.api.Plugin, mpp.api.IConfigurable, mpp.api.IRunable): def declare_configuration(self, parser): parser.add_option("-m", "--mode", default='dumphtml', choices=['dumphtml'], help="'dumphtml' - prints html code with code highlights for each given path [default: %default]") def configure(self, options): self.mode = options.__dict__['mode'] def run(self, args): loader = self.get_plugin('mpp.dbf').get_loader() if self.mode == 'dumphtml': return dumphtml(args, loader) assert(False) def dumphtml(args, loader): exit_code = 0 result = "" result += '' for path in args: path = mpp.utils.preprocess_path(path) data = loader.load_file_data(path) if data == None: mpp.utils.report_bad_path(path) exit_code += 1 continue file_name = data.get_path() fh = open(file_name, 'r') if fh == None: logging.error("can not open file '" + path + "' for reading") exit_code += 1 continue text = fh.read() fh.close() # TODO fix highlightning of markers # result += '
'
#        last_pos = 0
#        for marker in data.iterate_markers(filter_group= mpp.api.Marker.T.COMMENT |
#                                           mpp.api.Marker.T.STRING |
#                                           mpp.api.Marker.T.PREPROCESSOR):
#            result += (cgi.escape(text[last_pos:marker.begin]))
#            if marker.get_type() == mpp.api.Marker.T.STRING:
#                result += ('')
#            elif marker.get_type() == mpp.api.Marker.T.COMMENT:
#                result += ('')
#            elif marker.get_type() == mpp.api.Marker.T.PREPROCESSOR:
#                result += ('')
#            else:
#                assert False, "Uknown marker type"
#            result += (cgi.escape(text[marker.begin:marker.end]))
#            result += ('')
#            last_pos = marker.end
#        result += (cgi.escape(text[last_pos:]))
#        result += ('
')
        result += '
'
        styles = [('',
                  ''),
                  ('',
                  ''),
                  ('',
                  ''),
                  ('',
                  ''),
                  ('',
                  ''),
                  ('',
                  ''),
                  ('',
                  ''),
                  ('',
                  '')]
        
        def proc_rec(region_id, file_data, styles, indent, pos):
            result = (styles[indent % len(styles)][pos % 2])
            region = file_data.get_region(region_id)
            result += ('')
            last_pos = region.get_offset_begin() 
            for (ind, sub_id) in enumerate(file_data.get_region(region_id).iterate_subregion_ids()):
                subregion = file_data.get_region(sub_id)
                result += (cgi.escape(text[last_pos:subregion.get_offset_begin()]))
                result += proc_rec(sub_id, file_data, styles, indent + 3, ind)
                last_pos = subregion.get_offset_end()
            result += (cgi.escape(text[last_pos:region.get_offset_end()]))
            result += ('')
            return result
        result += proc_rec(1, data, styles, 0, 0)
        result += ('
') result += ('') print(result) return exit_code