def change_notification(self, change_code, notifying_object, parameter): if change_code == 'building_started': self.document.change_build_state('building_in_progress') if change_code == 'reset_timer': self.document.build_widget.view.reset_timer() self.document.build_widget.view.label.set_text('0:00') if change_code == 'building_stopped': self.document.show_build_state('') self.document.change_build_state('idle') if change_code == 'building_finished': result_blob = parameter if result_blob['build'] != None or result_blob[ 'forward_sync'] != None: if result_blob['build'] != None: try: self.document.preview.set_pdf_filename( result_blob['build']['pdf_filename']) except KeyError: pass if result_blob['forward_sync'] != None: self.document.preview.set_synctex_rectangles( result_blob['forward_sync']) self.document.show_build_state('') if result_blob['build'] != None: build_blob = result_blob['build'] if build_blob['error'] == 'interpreter_missing': self.document.show_build_state('') self.document.change_build_state('idle') if DialogLocator.get_dialog('interpreter_missing').run( build_blob['error_arg']): DialogLocator.get_dialog('preferences').run() return if build_blob['error'] == 'interpreter_not_working': self.document.show_build_state('') self.document.change_build_state('idle') if DialogLocator.get_dialog('building_failed').run( build_blob['error_arg']): DialogLocator.get_dialog('preferences').run() return self.document.set_build_log_items( build_blob['log_messages']) self.document.build_time = time.time( ) - self.document.last_build_start_time error_count = self.document.get_error_count() if error_count > 0: error_color_rgba = ServiceLocator.get_error_color() error_color = '#' + format( int(error_color_rgba.red * 255), '02x') + format( int(error_color_rgba.green * 255), '02x') + format( int(error_color_rgba.blue * 255), '02x') str_errors = ngettext( '<span color="{color}">Failed</span> ({amount} error)!', '<span color="{color}">Failed</span> ({amount} errors)!', error_count) message = str_errors.format(color=error_color, amount=str(error_count)) self.document.show_build_state(message) else: self.document.show_build_state(_('Success!')) self.document.set_has_synctex_file( build_blob['has_synctex_file']) self.document.has_been_built = True elif result_blob['backward_sync'] != None: self.document.set_synctex_position( result_blob['backward_sync']) self.document.change_build_state('idle') if result_blob['build'] != None: self.document.invalidate_build_log()
def change_notification(self, change_code, notifying_object, parameter): if change_code == 'build_state_change' and parameter == 'ready_for_building': document = self.document mode = document.get_build_mode() filename = self.document.get_filename()[:] if mode in ['forward_sync', 'build_and_forward_sync']: insert = document.source_buffer.get_iter_at_mark(document.source_buffer.get_insert()) synctex_arguments = dict() synctex_arguments['line'] = insert.get_line() + 1 synctex_arguments['line_offset'] = insert.get_line_offset() + 1 if mode in ['build', 'build_and_forward_sync']: interpreter = self.settings.get_value('preferences', 'latex_interpreter') use_latexmk = self.settings.get_value('preferences', 'use_latexmk') build_option_system_commands = self.settings.get_value('preferences', 'build_option_system_commands') additional_arguments = '' lualatex_prefix = ' -' if interpreter == 'lualatex' else ' ' if build_option_system_commands == 'disable': additional_arguments += lualatex_prefix + '-no-shell-escape' elif build_option_system_commands == 'restricted': additional_arguments += lualatex_prefix + '-shell-restricted' elif build_option_system_commands == 'enable': additional_arguments += lualatex_prefix + '-shell-escape' buffer = document.get_buffer() if buffer != None: text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), True) else: text = '' do_cleanup = self.settings.get_value('preferences', 'cleanup_build_files') if mode == 'build': query = build_system.QueryBuild(text, filename, interpreter, use_latexmk, additional_arguments, do_cleanup) elif mode == 'forward_sync': if document.build_pathname != None: query = build_system.QueryForwardSync(filename, document.build_pathname, synctex_arguments) elif mode == 'backward_sync': if document.backward_sync_data != None: query = build_system.QueryBackwardSync(filename, document.build_pathname, document.backward_sync_data) else: query = build_system.QueryBuildAndForwardSync(text, filename, interpreter, use_latexmk, additional_arguments, do_cleanup, synctex_arguments) self.build_system.add_query(query) if change_code == 'build_state_change' and parameter == 'building_to_stop': self.build_system.stop_building() if change_code == 'building_started': self.document.change_build_state('building_in_progress') if change_code == 'reset_timer': self.document.build_widget.view.reset_timer() self.document.build_widget.view.label.set_text('0:00') if change_code == 'building_stopped': self.document.show_build_state('') self.document.change_build_state('idle') if change_code == 'building_finished': result_blob = parameter if result_blob['build'] != None or result_blob['forward_sync'] != None: if result_blob['build'] != None: try: self.document.preview.set_pdf_filename(result_blob['build']['pdf_filename']) except KeyError: pass if result_blob['forward_sync'] != None: self.document.preview.set_synctex_rectangles(result_blob['forward_sync']) self.document.show_build_state('') if result_blob['build'] != None: build_blob = result_blob['build'] build_log_items = list() if build_blob['error'] == 'interpreter_missing': self.document.show_build_state('') self.document.change_build_state('idle') if DialogLocator.get_dialog('interpreter_missing').run(build_blob['error_arg']): DialogLocator.get_dialog('preferences').run() return if build_blob['error'] == 'interpreter_not_working': self.document.show_build_state('') self.document.change_build_state('idle') if DialogLocator.get_dialog('building_failed').run(build_blob['error_arg']): DialogLocator.get_dialog('preferences').run() return try: build_log_blob = build_blob['log_messages'] except KeyError: pass else: for item in build_log_blob: build_log_items.append(item) self.document.build_log_items = build_log_items self.document.build_time = time.time() - self.document.last_build_start_time error_count = 0 for item in self.document.build_log_items: if item[0] == 'Error': error_count += 1 if error_count > 0: error_color_rgba = ServiceLocator.get_error_color() error_color = '#' + format(int(error_color_rgba.red * 255), '02x') + format(int(error_color_rgba.green * 255), '02x') + format(int(error_color_rgba.blue * 255), '02x') str_errors = ngettext('<span color="{color}">Failed</span> ({amount} error)!', '<span color="{color}">Failed</span> ({amount} errors)!', error_count) message = str_errors.format(color=error_color, amount=str(error_count)) self.document.show_build_state(message) else: self.document.show_build_state(_('Success!')) self.document.set_build_pathname(build_blob['build_pathname']) self.document.has_been_built = True elif result_blob['backward_sync'] != None: self.document.set_synctex_position(result_blob['backward_sync']) self.document.change_build_state('idle')