author | Alberto Bertogli
<albertito@blitiri.com.ar> 2020-05-24 14:52:11 UTC |
committer | Alberto Bertogli
<albertito@blitiri.com.ar> 2020-05-24 15:05:18 UTC |
parent | 20b99ee568fd15ca2897f995e9775861ef293544 |
git.py | +9 | -22 |
views/blob.html | +5 | -5 |
views/tree.html | +2 | -2 |
diff --git a/git.py b/git.py index 846c1a6..6cec1cd 100644 --- a/git.py +++ b/git.py @@ -125,28 +125,15 @@ class SimpleNamespace(object): class smstr: - """A "smart" string, containing many representations for ease of use. - - This is a string class that contains: - .raw -> raw string, authoritative source. - .unicode -> unicode representation, may not be perfect if .raw is not - proper utf8 but should be good enough to show. - .url -> escaped for safe embedding in URLs, can be not quite - readable. - .html -> an HTML-embeddable representation. - """ + """A "smart" string, containing many representations for ease of use.""" - def __init__(self, raw: str): - if not isinstance(raw, (str, bytes)): - raise TypeError( - "The raw string must be instance of 'str', not %s" % type(raw) - ) - self.raw = raw - if isinstance(raw, bytes): - self.unicode: str = raw.decode("utf8", errors="backslashreplace") - else: - self.unicode = raw - self.url = urllib.request.pathname2url(raw) + raw: str # string, probably utf8-encoded, good enough to show. + url: str # escaped for safe embedding in URLs (not human-readable). + html: str # HTML-embeddable representation. + + def __init__(self, s: str): + self.raw = s + self.url = urllib.request.pathname2url(s) self.html = self._to_html() def __cmp__(self, other): @@ -173,7 +160,7 @@ class smstr: def _to_html(self): """Returns an html representation of the unicode string.""" html = "" - for c in escape(self.unicode): + for c in escape(self.raw): if c in "\t\r\n\r\f\a\b\v\0": esc_c = c.encode("unicode-escape").decode("utf8") html += '<span class="ctrlchr">%s</span>' % esc_c diff --git a/views/blob.html b/views/blob.html index 58c40a7..f1c6ad0 100644 --- a/views/blob.html +++ b/views/blob.html @@ -10,7 +10,7 @@ % relroot = reltree + '../' * (len(branch.split('/')) - 1) <title>git » {{repo.name}} » - {{branch}} » {{dirname.unicode}}{{fname.unicode}}</title> + {{branch}} » {{dirname.raw}}{{fname.raw}}</title> <link rel="stylesheet" type="text/css" href="{{relroot}}../../../../../static/git-arr.css"/> <link rel="stylesheet" type="text/css" @@ -33,7 +33,7 @@ % if not c.raw: % continue % end - <a href="{{base.url}}{{c.url}}/">{{c.unicode}}</a> / + <a href="{{base.url}}{{c.url}}/">{{c.raw}}</a> / % base += c + '/' % end <a href="">{{!fname.html}}</a> @@ -45,7 +45,7 @@ <td>empty — 0 bytes</td> </tr> </table> -% elif can_embed_image(repo, fname.unicode): +% elif can_embed_image(repo, fname.raw): {{!embed_image_blob(fname.raw, blob.raw_content)}} % elif is_binary(blob.raw_content): <table class="nice blob-binary"> @@ -72,12 +72,12 @@ </tr> % end </table> -% elif can_markdown(repo, fname.unicode): +% elif can_markdown(repo, fname.raw): <div class="markdown"> {{!markdown_blob(blob.utf8_content)}} </div> % elif can_colorize(blob.utf8_content): -{{!colorize_blob(fname.unicode, blob.utf8_content)}} +{{!colorize_blob(fname.raw, blob.utf8_content)}} % else: <pre class="blob-body"> {{blob.utf8_content}} diff --git a/views/tree.html b/views/tree.html index 3f3829c..179672d 100644 --- a/views/tree.html +++ b/views/tree.html @@ -10,7 +10,7 @@ % relroot = reltree + '../' * (len(branch.split('/')) - 1) <title>git » {{repo.name}} » - {{branch}} » {{dirname.unicode if dirname.unicode else '/'}}</title> + {{branch}} » {{dirname.raw if dirname.raw else '/'}}</title> <link rel="stylesheet" type="text/css" href="{{relroot}}../../../../../static/git-arr.css"/> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> @@ -31,7 +31,7 @@ % if not c.raw: % continue % end - <a href="{{base.url}}{{c.url}}/">{{c.unicode}}</a> / + <a href="{{base.url}}{{c.url}}/">{{c.raw}}</a> / % base += c + '/' % end </h3>