def __init__(self, filename, path_description=None): filename = Utils.decode_filename(filename) self.path_description = path_description or filename self.filename = filename self.set_file_type_from_name(filename) self._cmp_name = filename self._lines = {}
def save_annotation(self, source_filename, target_filename): with Utils.open_source_file(source_filename) as f: code = f.read() generated_code = self.code.get(source_filename, {}) c_file = Utils.decode_filename(os.path.basename(target_filename)) html_filename = os.path.splitext(target_filename)[0] + ".html" with codecs.open(html_filename, "w", encoding="UTF-8") as out_buffer: out_buffer.write(self._save_annotation(code, generated_code, c_file))
def __init__(self, filename): filename = Utils.decode_filename(filename) self.filename = filename self.set_file_type_from_name(filename) self._cmp_name = filename
def save_annotation(self, source_filename, target_filename): self.mark_pos(None) f = Utils.open_source_file(source_filename) lines = f.readlines() for k in range(len(lines)): line = lines[k] for c, cc, html in special_chars: line = line.replace(c, cc) lines[k] = line f.close() all = [] if False: for pos, item in self.annotations: if pos[0].filename == source_filename: start = item.start() size, end = item.end() if size: all.append((pos, start)) all.append(((source_filename, pos[1], pos[2]+size), end)) else: all.append((pos, start+end)) all.sort() all.reverse() for pos, item in all: _, line_no, col = pos line_no -= 1 col += 1 line = lines[line_no] lines[line_no] = line[:col] + item + line[col:] html_filename = os.path.splitext(target_filename)[0] + ".html" f = codecs.open(html_filename, "w", encoding="UTF-8") f.write(u'<html>\n') f.write(u""" <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body { font-family: courier; font-size: 12; } .code { font-size: 9; color: #444444; display: none; margin-left: 20px; } .py_c_api { color: red; } .py_macro_api { color: #FF7000; } .pyx_c_api { color: #FF3000; } .pyx_macro_api { color: #FF7000; } .refnanny { color: #FFA000; } .error_goto { color: #FFA000; } .tag { } .coerce { color: #008000; border: 1px dotted #008000 } .py_attr { color: #FF0000; font-weight: bold; } .c_attr { color: #0000FF; } .py_call { color: #FF0000; font-weight: bold; } .c_call { color: #0000FF; } .line { margin: 0em } </style> <script> function toggleDiv(id) { theDiv = document.getElementById(id); if (theDiv.style.display == 'none') theDiv.style.display = 'block'; else theDiv.style.display = 'none'; } </script> </head> """) f.write(u'<body>\n') f.write(u'<p>Generated by Cython %s on %s\n' % (Version.version, time.asctime())) c_file = Utils.decode_filename(os.path.basename(target_filename)) f.write(u'<p>Raw output: <a href="%s">%s</a>\n' % (c_file, c_file)) k = 0 py_c_api = re.compile(u'(Py[A-Z][a-z]+_[A-Z][a-z][A-Za-z_]+)\(') py_marco_api = re.compile(u'(Py[A-Z][a-z]+_[A-Z][A-Z_]+)\(') pyx_c_api = re.compile(u'(__Pyx_[A-Z][a-z_][A-Za-z_]+)\(') pyx_macro_api = re.compile(u'(__Pyx_[A-Z][A-Z_]+)\(') error_goto = re.compile(ur'((; *if .*)? \{__pyx_filename = .*goto __pyx_L\w+;\})') refnanny = re.compile(u'(__Pyx_X?(GOT|GIVE)REF|__Pyx_RefNanny[A-Za-z]+)') code_source_file = self.code[source_filename] for line in lines: k += 1 try: code = code_source_file[k] except KeyError: code = '' code = code.replace('<', '<code><</code>') code, py_c_api_calls = py_c_api.subn(ur"<span class='py_c_api'>\1</span>(", code) code, pyx_c_api_calls = pyx_c_api.subn(ur"<span class='pyx_c_api'>\1</span>(", code) code, py_macro_api_calls = py_marco_api.subn(ur"<span class='py_macro_api'>\1</span>(", code) code, pyx_macro_api_calls = pyx_macro_api.subn(ur"<span class='pyx_macro_api'>\1</span>(", code) code, refnanny_calls = refnanny.subn(ur"<span class='refnanny'>\1</span>", code) code, error_goto_calls = error_goto.subn(ur"<span class='error_goto'>\1</span>", code) code = code.replace(u"<span class='error_goto'>;", u";<span class='error_goto'>") score = 5*py_c_api_calls + 2*pyx_c_api_calls + py_macro_api_calls + pyx_macro_api_calls - refnanny_calls color = u"FFFF%02x" % int(255/(1+score/10.0)) f.write(u"<pre class='line' style='background-color: #%s' onclick='toggleDiv(\"line%s\")'>" % (color, k)) f.write(u" %d: " % k) for c, cc, html in special_chars: line = line.replace(cc, html) f.write(line.rstrip()) f.write(u'</pre>\n') code = re.sub(line_pos_comment, '', code) # inline annotations are redundant f.write(u"<pre id='line%s' class='code' style='background-color: #%s'>%s</pre>" % (k, color, code)) f.write(u'</body></html>\n') f.close()
def get_error_description(self): path = self.filename cwd = Utils.decode_filename(os.getcwd() + os.path.sep) if path.startswith(cwd): return path[len(cwd):] return path
def save_annotation(self, source_filename, target_filename): self.mark_pos(None) f = Utils.open_source_file(source_filename) lines = f.readlines() for k in range(len(lines)): line = lines[k] for c, cc, html in special_chars: line = line.replace(c, cc) lines[k] = line f.close() all = [] if False: for pos, item in self.annotations: if pos[0].filename == source_filename: start = item.start() size, end = item.end() if size: all.append((pos, start)) all.append( ((source_filename, pos[1], pos[2] + size), end)) else: all.append((pos, start + end)) all.sort() all.reverse() for pos, item in all: _, line_no, col = pos line_no -= 1 col += 1 line = lines[line_no] lines[line_no] = line[:col] + item + line[col:] html_filename = os.path.splitext(target_filename)[0] + ".html" f = codecs.open(html_filename, "w", encoding="UTF-8") f.write(u'<!-- Generated by Cython %s -->\n' % Version.watermark) f.write(u'<html>\n') f.write(u""" <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body { font-family: courier; font-size: 12; } .code { font-size: 9; color: #444444; display: none; margin-left: 20px; } .py_c_api { color: red; } .py_macro_api { color: #FF7000; } .pyx_c_api { color: #FF3000; } .pyx_macro_api { color: #FF7000; } .refnanny { color: #FFA000; } .error_goto { color: #FFA000; } .tag { } .coerce { color: #008000; border: 1px dotted #008000 } .py_attr { color: #FF0000; font-weight: bold; } .c_attr { color: #0000FF; } .py_call { color: #FF0000; font-weight: bold; } .c_call { color: #0000FF; } .line { margin: 0em } </style> <script> function toggleDiv(id) { theDiv = document.getElementById(id); if (theDiv.style.display == 'none') theDiv.style.display = 'block'; else theDiv.style.display = 'none'; } </script> </head> """) f.write(u'<body>\n') f.write(u'<p>Generated by Cython %s\n' % Version.watermark) c_file = Utils.decode_filename(os.path.basename(target_filename)) f.write(u'<p>Raw output: <a href="%s">%s</a>\n' % (c_file, c_file)) k = 0 py_c_api = re.compile(u'(Py[A-Z][a-z]+_[A-Z][a-z][A-Za-z_]+)\(') py_marco_api = re.compile(u'(Py[A-Z][a-z]+_[A-Z][A-Z_]+)\(') pyx_c_api = re.compile(u'(__Pyx_[A-Z][a-z_][A-Za-z_]+)\(') pyx_macro_api = re.compile(u'(__Pyx_[A-Z][A-Z_]+)\(') error_goto = re.compile( ur'((; *if .*)? \{__pyx_filename = .*goto __pyx_L\w+;\})') refnanny = re.compile( u'(__Pyx_X?(GOT|GIVE)REF|__Pyx_RefNanny[A-Za-z]+)') code_source_file = self.code[source_filename] for line in lines: k += 1 try: code = code_source_file[k] except KeyError: code = '' code = code.replace('<', '<code><</code>') code, py_c_api_calls = py_c_api.subn( ur"<span class='py_c_api'>\1</span>(", code) code, pyx_c_api_calls = pyx_c_api.subn( ur"<span class='pyx_c_api'>\1</span>(", code) code, py_macro_api_calls = py_marco_api.subn( ur"<span class='py_macro_api'>\1</span>(", code) code, pyx_macro_api_calls = pyx_macro_api.subn( ur"<span class='pyx_macro_api'>\1</span>(", code) code, refnanny_calls = refnanny.subn( ur"<span class='refnanny'>\1</span>", code) code, error_goto_calls = error_goto.subn( ur"<span class='error_goto'>\1</span>", code) code = code.replace(u"<span class='error_goto'>;", u";<span class='error_goto'>") score = 5 * py_c_api_calls + 2 * pyx_c_api_calls + py_macro_api_calls + pyx_macro_api_calls - refnanny_calls color = u"FFFF%02x" % int(255 / (1 + score / 10.0)) f.write( u"<pre class='line' style='background-color: #%s' onclick='toggleDiv(\"line%s\")'>" % (color, k)) f.write(u" %d: " % k) for c, cc, html in special_chars: line = line.replace(cc, html) f.write(line.rstrip()) f.write(u'</pre>\n') code = re.sub(line_pos_comment, '', code) # inline annotations are redundant f.write( u"<pre id='line%s' class='code' style='background-color: #%s'>%s</pre>" % (k, color, code)) f.write(u'</body></html>\n') f.close()
def save_annotation(self, source_filename, target_filename): self.mark_pos(None) f = Utils.open_source_file(source_filename) lines = f.readlines() for k, line in enumerate(lines): for c, cc, html in special_chars: line = line.replace(c, cc) lines[k] = line f.close() all = [] if False: for pos, item in self.annotations: if pos[0].filename == source_filename: start = item.start() size, end = item.end() if size: all.append((pos, start)) all.append(((source_filename, pos[1], pos[2]+size), end)) else: all.append((pos, start+end)) all.sort(reverse=True) for pos, item in all: _, line_no, col = pos line_no -= 1 col += 1 line = lines[line_no] lines[line_no] = line[:col] + item + line[col:] html_filename = os.path.splitext(target_filename)[0] + ".html" f = codecs.open(html_filename, "w", encoding="UTF-8") f.write('<!DOCTYPE html>\n') f.write('<!-- Generated by Cython %s -->\n' % Version.watermark) f.write('<html>\n') f.write(""" <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body { font-family: courier; font-size: 12; } .code { font-size: 9; color: #444444; display: none; margin-left: 20px; } .py_c_api { color: red; } .py_macro_api { color: #FF7000; } .pyx_c_api { color: #FF3000; } .pyx_macro_api { color: #FF7000; } .refnanny { color: #FFA000; } .error_goto { color: #FFA000; } .tag { } .coerce { color: #008000; border: 1px dotted #008000 } .py_attr { color: #FF0000; font-weight: bold; } .c_attr { color: #0000FF; } .py_call { color: #FF0000; font-weight: bold; } .c_call { color: #0000FF; } .line { margin: 0em } </style> <script> function toggleDiv(id) { theDiv = document.getElementById(id); if (theDiv.style.display != 'block') theDiv.style.display = 'block'; else theDiv.style.display = 'none'; } </script> </head> """) f.write('<body>\n') f.write('<p>Generated by Cython %s\n' % Version.watermark) c_file = Utils.decode_filename(os.path.basename(target_filename)) f.write('<p>Raw output: <a href="%s">%s</a>\n' % (c_file, c_file)) zero_calls = dict((name, 0) for name in 'refnanny py_macro_api py_c_api pyx_macro_api pyx_c_api error_goto'.split()) def annotate(match): group_name = match.lastgroup calls[group_name] += 1 return r"<span class='%s'>%s</span>" % ( group_name, match.group(group_name)) pos_comment_marker = '/* \N{HORIZONTAL ELLIPSIS} */\n' k = 0 code_source_file = self.code.get(source_filename, {}) for line in lines: k += 1 try: code = code_source_file[k] except KeyError: code = '' else: code = _replace_pos_comment(pos_comment_marker, code) if code.startswith(pos_comment_marker): code = code[len(pos_comment_marker):] code = html_escape(code) calls = zero_calls.copy() code = _parse_code(annotate, code) score = (5 * calls['py_c_api'] + 2 * calls['pyx_c_api'] + calls['py_macro_api'] + calls['pyx_macro_api']) color = "FFFF%02x" % int(255/(1+score/10.0)) f.write("<pre class='line' style='background-color: #%s' onclick='toggleDiv(\"line%s\")'>" % (color, k)) f.write(" %d: " % k) for c, cc, html in special_chars: line = line.replace(cc, html) f.write(line.rstrip()) f.write('</pre>\n') f.write("<pre id='line%s' class='code' style='background-color: #%s'>%s</pre>" % (k, color, code)) f.write('</body></html>\n') f.close()
def save_annotation(self, source_filename, target_filename): self.mark_pos(None) f = Utils.open_source_file(source_filename) lines = f.readlines() for k, line in enumerate(lines): for c, cc, html in special_chars: line = line.replace(c, cc) lines[k] = line f.close() all = [] if False: for pos, item in self.annotations: if pos[0].filename == source_filename: start = item.start() size, end = item.end() if size: all.append((pos, start)) all.append( ((source_filename, pos[1], pos[2] + size), end)) else: all.append((pos, start + end)) all.sort(reverse=True) for pos, item in all: _, line_no, col = pos line_no -= 1 col += 1 line = lines[line_no] lines[line_no] = line[:col] + item + line[col:] html_filename = os.path.splitext(target_filename)[0] + ".html" f = codecs.open(html_filename, "w", encoding="UTF-8") f.write(u'<!DOCTYPE html>\n') f.write(u'<!-- Generated by Cython %s -->\n' % Version.watermark) f.write(u'<html>\n') f.write(u""" <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body { font-family: courier; font-size: 12; } .code { font-size: 9; color: #444444; display: none; margin-left: 20px; } .py_c_api { color: red; } .py_macro_api { color: #FF7000; } .pyx_c_api { color: #FF3000; } .pyx_macro_api { color: #FF7000; } .refnanny { color: #FFA000; } .error_goto { color: #FFA000; } .tag { } .coerce { color: #008000; border: 1px dotted #008000 } .py_attr { color: #FF0000; font-weight: bold; } .c_attr { color: #0000FF; } .py_call { color: #FF0000; font-weight: bold; } .c_call { color: #0000FF; } .line { margin: 0em } </style> <script> function toggleDiv(id) { theDiv = document.getElementById(id); if (theDiv.style.display != 'block') theDiv.style.display = 'block'; else theDiv.style.display = 'none'; } </script> </head> """) f.write(u'<body>\n') f.write(u'<p>Generated by Cython %s\n' % Version.watermark) c_file = Utils.decode_filename(os.path.basename(target_filename)) f.write(u'<p>Raw output: <a href="%s">%s</a>\n' % (c_file, c_file)) zero_calls = dict( (name, 0) for name in 'refnanny py_macro_api py_c_api pyx_macro_api pyx_c_api error_goto' .split()) def annotate(match): group_name = match.lastgroup calls[group_name] += 1 return ur"<span class='%s'>%s</span>" % (group_name, match.group(group_name)) pos_comment_marker = u'/* \N{HORIZONTAL ELLIPSIS} */\n' k = 0 code_source_file = self.code.get(source_filename, {}) for line in lines: k += 1 try: code = code_source_file[k] except KeyError: code = '' else: code = _replace_pos_comment(pos_comment_marker, code) if code.startswith(pos_comment_marker): code = code[len(pos_comment_marker):] code = html_escape(code) calls = zero_calls.copy() code = _parse_code(annotate, code) score = (5 * calls['py_c_api'] + 2 * calls['pyx_c_api'] + calls['py_macro_api'] + calls['pyx_macro_api']) color = u"FFFF%02x" % int(255 / (1 + score / 10.0)) f.write( u"<pre class='line' style='background-color: #%s' onclick='toggleDiv(\"line%s\")'>" % (color, k)) f.write(u" %d: " % k) for c, cc, html in special_chars: line = line.replace(cc, html) f.write(line.rstrip()) f.write(u'</pre>\n') f.write( u"<pre id='line%s' class='code' style='background-color: #%s'>%s</pre>" % (k, color, code)) f.write(u'</body></html>\n') f.close()