# -*- coding: utf-8 -*- # -*- mode: python -*- # # elf_diff # # Copyright (C) 2019 Noseglasses (shinynoseglasses@gmail.com) # # This program is free software: you can redistribute it and/or modify it under it under # the terms of the GNU General Public License as published by the Free Software # Foundation, version 3. # # This program is distributed in the hope that it will be useful, but WITHOUT but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with along with # this program. If not, see <http://www.gnu.org/licenses/>. # from elf_diff.error_handling import unrecoverableError def escapeString(string): return string.replace("<", "<").replace(">", ">") def generateSymbolTableEntry(symbol_name): return "<a name=\"table_%s\"><a href=\"#details_%s\">%s</a></a>" % \ (symbol_name, symbol_name, symbol_name) def generateSymbolTableEntryLight(symbol_name): return "<a href=\"#details_%s\">%s</a>" % \ (symbol_name, symbol_name) def generateSymbolDetailsTitle(symbol_name): return "<a name=\"details_%s\"><a href=\"#table_%s\">%s</a></a>" % \ (symbol_name, symbol_name, tagSymbolName(symbol_name)) def generateSimilarSymbolTableEntry(similar_pair_id): return "<a name=\"similar_table_%s\"><a href=\"#similar_details_%s\">%s</a></a>" % \ (similar_pair_id, similar_pair_id, similar_pair_id) def generateSimilarSymbolDetailsTitle(similar_pair_id): return "<a name=\"similar_details_%s\"><a href=\"#similar_table_%s\">%s</a></a>" % \ (similar_pair_id, similar_pair_id, similar_pair_id) def tagSymbolName(symbol_name): return "<span class=\"symbol_name\">%s</span>" % (symbol_name) def formatNumber(number): return "<span class=\"number\">%s</span>" % (number) def highlightNumber(number): if number > 0: css_class = "deterioration" elif number < 0: css_class = "improvement" else: css_class = "unchanged" return "<span class=\"%s number\">%+d</span>" % (css_class, number) def preHighlightSourceCode(src): return "__ED_SOURCE_START__%s__ED_SOURCE_END__" % (src) def postHighlightSourceCode(src): return src.replace("__ED_SOURCE_START__", "<span class=\"source\">") \ .replace("__ED_SOURCE_END__", "</span>") def postHighlightSourceCodeRemoveTags(src): return src.replace("__ED_SOURCE_START__", "") \ .replace("__ED_SOURCE_END__", "") def formatNumberDelta(old_size, new_size): difference = new_size - old_size return highlightNumber(new_size - old_size) def configureTemplate(settings, template_filename, keywords): import jinja2, os, inspect from jinja2 import Environment, FileSystemLoader, StrictUndefined template_path = settings.repo_path + "/html" env = Environment(loader=FileSystemLoader(template_path), \ undefined = StrictUndefined) #addGlobalJinjaFunction(GetComponentLink) try: creator = env.get_template(template_filename) except jinja2.exceptions.TemplateError as e: unrecoverableError("Failed creating jinja creator\n" + str(e)) try: replacedContent = creator.render(keywords) except (jinja2.exceptions.TemplateError) as e: unrecoverableError("Failed rendering jinja template \'" + \ template_filename + "\'\n" + str(e)) return replacedContent#.encode('utf8') def configureTemplateWrite(settings, template_filename, out_file, keywords): html_code = configureTemplate(settings, template_filename, keywords) out_file.write(html_code)