def do_indent(self, start): to_the_left = self.Text[:start + 1] lines = to_the_left.splitlines() initial_indent = ' ' for line in lines: # we do this incase the user is using one or two space # indent instead of four if line.startswith(' '): initial_indent = get_indent(line) break # there *must* be something here because an empty textbox # would already have been caught by empty_or_comment_only last_line = lines[-1] new_indent = current_indent = get_indent(last_line) if last_line.rstrip().endswith(':'): new_indent = current_indent + initial_indent elif is_terminator(last_line): new_indent = ' ' * (len(current_indent) - len(initial_indent)) new_start = self.SelectionStart new_pos = new_start + len(new_indent) self.Text = self.Text[:new_start] + '\n' + new_indent + self.Text[ new_start:] self.SelectionStart = new_pos + 1
def edit_gameinfo(self, add_line=False) -> None: """Modify all gameinfo.txt files to add or remove our line. Add_line determines if we are adding or removing it. """ for folder in self.dlc_priority(): info_path = os.path.join(self.root, folder, 'gameinfo.txt') if os.path.isfile(info_path): with open(info_path, encoding='utf8') as file: data = list(file) for line_num, line in reversed(list(enumerate(data))): clean_line = srctools.clean_line(line) if add_line: if clean_line == GAMEINFO_LINE: break # Already added! elif '|gameinfo_path|' in clean_line: LOGGER.debug( "Adding gameinfo hook to {}", info_path, ) # Match the line's indentation data.insert( line_num + 1, utils.get_indent(line) + GAMEINFO_LINE + '\n', ) break else: if clean_line == GAMEINFO_LINE: LOGGER.debug("Removing gameinfo hook from {}", info_path) data.pop(line_num) break else: if add_line: LOGGER.warning( 'Failed editing "{}" to add our special folder!', info_path, ) continue with srctools.AtomicWriter(info_path) as file: for line in data: file.write(line) if not add_line: # Restore the original files! for name, file, ext in FILES_TO_BACKUP: item_path = self.abs_path(file + ext) backup_path = self.abs_path(file + '_original' + ext) old_version = self.abs_path(file + '_styles' + ext) if os.path.isfile(old_version): LOGGER.info('Restoring Stylechanger version of "{}"!', name) shutil.copy(old_version, item_path) elif os.path.isfile(backup_path): LOGGER.info('Restoring original "{}"!', name) shutil.move(backup_path, item_path) self.clear_cache()
def edit_gameinfo(self, add_line=False): """Modify all gameinfo.txt files to add or remove our line. Add_line determines if we are adding or removing it. """ for folder in self.dlc_priority(): info_path = os.path.join(self.root, folder, 'gameinfo.txt') if os.path.isfile(info_path): with open(info_path) as file: data = list(file) for line_num, line in reversed(list(enumerate(data))): clean_line = utils.clean_line(line) if add_line: if clean_line == GAMEINFO_LINE: break # Already added! elif '|gameinfo_path|' in clean_line: LOGGER.debug( "Adding gameinfo hook to {}", info_path, ) # Match the line's indentation data.insert( line_num+1, utils.get_indent(line) + GAMEINFO_LINE + '\n', ) break else: if clean_line == GAMEINFO_LINE: LOGGER.debug( "Removing gameinfo hook from {}", info_path ) data.pop(line_num) break else: if add_line: LOGGER.warning( 'Failed editing "{}" to add our special folder!', info_path, ) continue with open(info_path, 'w') as file: for line in data: file.write(line) if not add_line: # Restore the original files! for name, file, ext in FILES_TO_BACKUP: item_path = self.abs_path(file + ext) backup_path = self.abs_path(file + '_original' + ext) old_version = self.abs_path(file + '_styles' + ext) if os.path.isfile(old_version): LOGGER.info('Restoring Stylechanger version of "{}"!', name) shutil.copy(old_version, item_path) elif os.path.isfile(backup_path): LOGGER.info('Restoring original "{}"!', name) shutil.move(backup_path, item_path) self.clear_cache()
def do_indent(self, start): to_the_left = self.Text[:start + 1] lines = to_the_left.splitlines() initial_indent = ' ' for line in lines: # we do this incase the user is using one or two space # indent instead of four if line.startswith(' '): initial_indent = get_indent(line) break # there *must* be something here because an empty textbox # would already have been caught by empty_or_comment_only last_line = lines[-1] new_indent = current_indent = get_indent(last_line) if last_line.rstrip().endswith(':'): new_indent = current_indent + initial_indent elif is_terminator(last_line): new_indent = ' ' * (len(current_indent) - len(initial_indent)) new_start = self.SelectionStart new_pos = new_start + len(new_indent) self.Text = self.Text[:new_start] + '\n' + new_indent + self.Text[new_start:] self.SelectionStart = new_pos + 1
def pre(self): """ In the formatter, this method sets up the object that will be used in a formatted way,. Also translates configs into consumable values """ method_format = copy.deepcopy(self.config) method_format['indent'] = get_indent( method_format['indent']) if method_format['indent'] else ' ' method_format['indent_content'] = get_indent( method_format['indent']) if get_indent( method_format['indent_content']) else '' method_format['break_after_open'] = '\n' if method_format[ 'break_after_open'] else '' method_format['break_after_docstring'] = '\n' if method_format[ 'break_after_docstring'] else '' method_format['break_before_close'] = '\n' if method_format[ 'break_before_close'] else '' argument_format = copy.deepcopy(self.config.get('arguments')) argument_format['inline'] = '' if argument_format['inline'] else '\n' self.method_format = method_format self.argument_format = argument_format
def edit_gameinfo(self, add_line=False): """Modify all gameinfo.txt files to add or remove our line. Add_line determines if we are adding or removing it. """ if self.is_modded() == add_line: # It's already in the correct state! return for folder in self.dlc_priority(): info_path = os.path.join(self.root, folder, 'gameinfo.txt') if os.path.isfile(info_path): with open(info_path) as file: data = list(file) for line_num, line in reversed(list(enumerate(data))): clean_line = utils.clean_line(line) if add_line: if clean_line == GAMEINFO_LINE: break # Already added! elif '|gameinfo_path|' in clean_line: print("Adding gameinfo hook to " + info_path) # Match the line's indentation data.insert( line_num+1, utils.get_indent(line) + GAMEINFO_LINE + '\n', ) break else: if clean_line == GAMEINFO_LINE: print("Removing gameinfo hook from " + info_path) data.pop(line_num) break else: if add_line: print( 'Failed editing "' + info_path + '" to add our special folder!' ) continue with open(info_path, 'w') as file: for line in data: file.write(line) if add_line: with open(self.abs_path('BEE2_EDIT_FLAG'), 'w') as file: file.write('') else: os.remove(self.abs_path('BEE2_EDIT_FLAG')) # Restore the original files! for name, file, ext in FILES_TO_BACKUP: item_path = self.abs_path(file + ext) backup_path = self.abs_path(file + '_original' + ext) old_version = self.abs_path(file + '_styles' + ext) if os.path.isfile(old_version): print("Restoring Stylechanger version of " + name + "!") shutil.copy(old_version, item_path) elif os.path.isfile(backup_path): print("Restoring original " + name + "!") shutil.move(backup_path, item_path) self.clear_cache()