class BuildTrimmer:

    def __init__(self, unused_classes, source_build_file):
        self.unused_classes = unused_classes
        self.source_build_file = source_build_file
        with open(source_build_file, 'r') as f:
            lines = f.readlines()
            self.ext_block_finder = ExtBlockFinder(lines)

    def trim(self):
        forbidden_lines = set()
        for (index, class_name) in enumerate(self.unused_classes):
            print '[%i/%i] Trimming off: %s' % (index + 1,
                    len(self.unused_classes), class_name)
            (start, end) = self.ext_block_finder.find(class_name)

            if start < 1:
                print 'class not found:', class_name
                continue

            forbidden_lines.update(range(start, end + 1))

        out_name = self.source_build_file + '.out.js'
        print 'Saving file: %s' % out_name
        with open(self.source_build_file + '.cut.js', 'w') as out_cut:
            with open(self.source_build_file + '.out.js', 'w') as out:
                with open(self.source_build_file, 'r') as input:
                    for (index, line) in enumerate(input.readlines()):
                        if index not in forbidden_lines:
                            out.write(line)
                        else:
                            out_cut.write(line)
 def __init__(self, unused_classes, source_build_file):
     self.unused_classes = unused_classes
     self.source_build_file = source_build_file
     with open(source_build_file, 'r') as f:
         lines = f.readlines()
         self.ext_block_finder = ExtBlockFinder(lines)