def __init__(self, name, code_writer): # initialise new variables first self.header_content = None #self.source_content = None self.content = None self.event_table_decl = {} self.event_table_def = {} self.header_extension = code_writer.header_extension self.source_extension = code_writer.source_extension # call inherited constructor BaseSourceFileContent.__init__(self, name, code_writer)
def build_untouched_content(self): BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_triple_quote = False triple_quote_str = None tmp_in = self._load_file(self.name) out_lines = [] for line in tmp_in: quote_index = -1 if not inside_triple_quote: triple_dquote_index = line.find('"""') triple_squote_index = line.find("'''") if triple_squote_index == -1: quote_index = triple_dquote_index tmp_quote_str = '"""' elif triple_dquote_index == -1: quote_index = triple_squote_index tmp_quote_str = "'''" else: quote_index, tmp_quote_str = min( (triple_squote_index, "'''"), (triple_dquote_index, '"""')) if not inside_triple_quote and quote_index != -1: inside_triple_quote = True triple_quote_str = tmp_quote_str if inside_triple_quote: end_index = line.rfind(triple_quote_str) if quote_index < end_index and end_index != -1: inside_triple_quote = False result = self.rec_class_decl.match(line) if not inside_triple_quote and result: if not self.class_name: # this is the first class declared in the file: insert the new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes[ self. class_name] = 1 # add the found class to the list of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if not inside_triple_quote and result: # replace the lines inside a wxGlade block with a tag that will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % (self.nonce, which_block)) else: out_lines.append( '<%swxGlade replace %s %s>' % (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if not inside_triple_quote and result: which_handler = result.group('handler') which_class = self.format_classname( result.group('class')) self.event_handlers.setdefault(which_class, {})[which_handler] = 1 if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) if self.is_import_line(line): # add a tag to allow extra modules out_lines.append('<%swxGlade extra_modules>\n' % self.nonce) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not contain any class, so we must add the # new_classes tag at the end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # set the ``persistent'' content of the file self.content = out_lines
def build_untouched_content(self): BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_triple_quote = False triple_quote_str = None tmp_in = self._load_file(self.name) out_lines = [] check_old_methods = [ ] # list of indices with __set_properties or __do_layout for line in tmp_in: if line.endswith( "\r\n"): # normalize line ending for files on Windows line = "%s\n" % line[:-2] quote_index = -1 if not inside_triple_quote: triple_dquote_index = line.find('"""') triple_squote_index = line.find("'''") if triple_squote_index == -1: quote_index = triple_dquote_index tmp_quote_str = '"""' elif triple_dquote_index == -1: quote_index = triple_squote_index tmp_quote_str = "'''" else: quote_index, tmp_quote_str = min( (triple_squote_index, "'''"), (triple_dquote_index, '"""')) if not inside_triple_quote and quote_index != -1: inside_triple_quote = True triple_quote_str = tmp_quote_str if inside_triple_quote: end_index = line.rfind(triple_quote_str) if quote_index < end_index and end_index != -1: inside_triple_quote = False result = self.rec_class_decl.match(line) if not inside_triple_quote and not inside_block and result: if not self.class_name: # this is the first class declared in the file: insert the new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes.add( self.class_name ) # add the found class to the list of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if not inside_triple_quote and result: # replace the lines inside a wxGlade block with a tag that will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % (self.nonce, which_block)) else: if which_block in ("__do_layout", "__set_properties"): # probably to be removed check_old_methods.append(len(out_lines)) out_lines.append( '<%swxGlade replace %s %s>' % (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if not inside_triple_quote and result: which_handler = result.group('handler') which_class = self.format_classname( result.group('class')) self.event_handlers.setdefault( which_class, set()).add(which_handler) if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not contain any class, # so we must add the new_classes tag at the end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # when moving from 0.9 to 1.0: remove empty methods "__do_layout" and "__set_properties" while check_old_methods: i = check_old_methods.pop(-1) if len(out_lines) == i + 1 or not out_lines[i + 1].strip( ) or out_lines[i + 1].lstrip().startswith("def"): self._remove_method(out_lines, i - 1, i) # set the ``persistent'' content of the file self.content = out_lines #"".join(out_lines)
def build_untouched_content(self): """\ Builds a string with the contents of the file that must be left as is, and replaces the wxGlade blocks with tags that in turn will be replaced by the new wxGlade blocks WARNING: NOT YET COMPLETE -- crazyinsomniac alb - almost done :) WARNING: There is *NO* support for here documents: if you put wxGlade blocks inside a here document, you're likely going into troubles... """ BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_pod = False tmp_in = self._load_file(self.name) out_lines = [] check_old_methods = [ ] # list of indices with set_properties or do_layout for line in tmp_in: result = self.rec_pod.match(line) if result: inside_pod = True if inside_pod: out_lines.append(line) if line.startswith('=cut'): inside_pod = False continue result = self.rec_class_decl.match(line) if result: if not self.class_name: # this is the first class declared in the file: insert the new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes.add( self.class_name ) # add the found class to the list of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if result: # replace the lines inside a wxGlade block with a tag that will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % (self.nonce, which_block)) else: if which_block in ("__do_layout", "__set_properties"): # probably to be removed check_old_methods.append(len(out_lines)) out_lines.append( '<%swxGlade replace %s %s>' % (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if result: which_handler = result.group('handler') which_class = self.format_classname( result.group('class')) self.event_handlers.setdefault( which_class, set()).add(which_handler) if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not contain any class, so we must add the # new_classes tag at the end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # when moving from 0.9 to 1.0: remove empty methods "do_layout" and "set_properties" while check_old_methods: i = check_old_methods.pop(-1) if out_lines[i + 1].strip( ) == '}': # just end of block -> remove incl. trailing empty lines self._remove_method(out_lines, i - 2, i + 1) # set the ``persistent'' content of the file self.content = out_lines
def build_untouched_content(self): """\ Builds a string with the contents of the file that must be left as is, and replaces the wxGlade blocks with tags that in turn will be replaced by the new wxGlade blocks WARNING: NOT YET COMPLETE -- crazyinsomniac alb - almost done :) WARNING: There is *NO* support for here documents: if you put wxGlade blocks inside a here document, you're likely going into troubles... """ BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_pod = False tmp_in = self._load_file(self.name) out_lines = [] for line in tmp_in: result = self.rec_pod.match(line) if result: inside_pod = True if inside_pod: out_lines.append(line) if line.startswith('=cut'): inside_pod = False continue result = self.rec_class_decl.match(line) if result: ## print ">> class %r" % result.group(1) if not self.class_name: # this is the first class declared in the file: insert the # new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes[self.class_name] = 1 # add the found class to the list # of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if result: ## print ">> block %r %r %r" % ( ## result.group('spaces'), result.group('classname'), result.group('block')) # replace the lines inside a wxGlade block with a tag that # will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % \ (self.nonce, which_block)) else: out_lines.append('<%swxGlade replace %s %s>' % \ (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if result: which_handler = result.group('handler') which_class = self.format_classname(result.group('class')) self.event_handlers.setdefault( which_class, {})[which_handler] = 1 if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) if self.is_import_line(line): # add a tag to allow extra modules out_lines.append('<%swxGlade extra_modules>\n' % self.nonce) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): ## print 'end block' inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not # contain any class, so we must add the new_classes tag at the # end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # set the ``persistent'' content of the file self.content = "".join(out_lines)
def build_untouched_content(self): """\ Builds a string with the contents of the file that must be left as is, and replaces the wxGlade blocks with tags that in turn will be replaced by the new wxGlade blocks WARNING: NOT YET COMPLETE -- crazyinsomniac alb - almost done :) WARNING: There is *NO* support for here documents: if you put wxGlade blocks inside a here document, you're likely going into troubles... """ BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_pod = False tmp_in = self._load_file(self.name) out_lines = [] for line in tmp_in: result = self.rec_pod.match(line) if result: inside_pod = True if inside_pod: out_lines.append(line) if line.startswith('=cut'): inside_pod = False continue result = self.rec_class_decl.match(line) if result: if not self.class_name: # this is the first class declared in the file: insert the # new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes[ self.class_name] = 1 # add the found class to the list # of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if result: # replace the lines inside a wxGlade block with a tag that will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % (self.nonce, which_block)) else: out_lines.append( '<%swxGlade replace %s %s>' % (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if result: which_handler = result.group('handler') which_class = self.format_classname( result.group('class')) self.event_handlers.setdefault(which_class, {})[which_handler] = 1 if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) if self.is_import_line(line): # add a tag to allow extra modules out_lines.append('<%swxGlade extra_modules>\n' % self.nonce) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): ## self._logger.debug('end block') inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not contain any class, so we must add the # new_classes tag at the end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # set the ``persistent'' content of the file self.content = out_lines
def build_untouched_content(self): BaseSourceFileContent.build_untouched_content(self) inside_block = False inside_triple_quote = False triple_quote_str = None tmp_in = self._load_file(self.name) out_lines = [] for line in tmp_in: quote_index = -1 if not inside_triple_quote: triple_dquote_index = line.find('"""') triple_squote_index = line.find("'''") if triple_squote_index == -1: quote_index = triple_dquote_index tmp_quote_str = '"""' elif triple_dquote_index == -1: quote_index = triple_squote_index tmp_quote_str = "'''" else: quote_index, tmp_quote_str = min( (triple_squote_index, "'''"), (triple_dquote_index, '"""')) if not inside_triple_quote and quote_index != -1: inside_triple_quote = True triple_quote_str = tmp_quote_str if inside_triple_quote: end_index = line.rfind(triple_quote_str) if quote_index < end_index and end_index != -1: inside_triple_quote = False result = self.rec_class_decl.match(line) if not inside_triple_quote and result: ## print ">> class %r" % result.group(1) if not self.class_name: # this is the first class declared in the file: insert the # new ones before this out_lines.append('<%swxGlade insert new_classes>' % self.nonce) self.new_classes_inserted = True self.class_name = result.group(1) self.class_name = self.format_classname(self.class_name) self.classes[self.class_name] = 1 # add the found class to the list # of classes of this module out_lines.append(line) elif not inside_block: result = self.rec_block_start.match(line) if not inside_triple_quote and result: ## print ">> block %r %r %r" % ( ## result.group('spaces'), result.group('classname'), result.group('block')) # replace the lines inside a wxGlade block with a tag that # will be used later by add_class spaces = result.group('spaces') which_class = result.group('classname') which_block = result.group('block') if not which_class: which_class = self.class_name else: which_class = self.format_classname(which_class) self.spaces[which_class] = spaces inside_block = True if not self.class_name: out_lines.append('<%swxGlade replace %s>' % \ (self.nonce, which_block)) else: out_lines.append('<%swxGlade replace %s %s>' % \ (self.nonce, which_class, which_block)) else: result = self.rec_event_handler.match(line) if not inside_triple_quote and result: which_handler = result.group('handler') which_class = self.format_classname(result.group('class')) self.event_handlers.setdefault( which_class, {})[which_handler] = 1 if self.class_name and self.is_end_of_class(line): # add extra event handlers here... out_lines.append('<%swxGlade event_handlers %s>' % (self.nonce, self.class_name)) out_lines.append(line) if self.is_import_line(line): # add a tag to allow extra modules out_lines.append('<%swxGlade extra_modules>\n' % self.nonce) else: # ignore all the lines inside a wxGlade block if self.rec_block_end.match(line): ## print 'end block' inside_block = False if not self.new_classes_inserted: # if we are here, the previous ``version'' of the file did not # contain any class, so we must add the new_classes tag at the # end of the file out_lines.append('<%swxGlade insert new_classes>' % self.nonce) # set the ``persistent'' content of the file self.content = "".join(out_lines)
def build_untouched_content(self): BaseSourceFileContent.build_untouched_content(self) self._build_untouched(self.name + "." + self.header_extension, True) BaseSourceFileContent.build_untouched_content(self) self._build_untouched(self.name + "." + self.source_extension, False)