diff options
| author | Vosjedev <vosje@vosjedev.net> | 2025-11-09 09:07:01 +0100 |
|---|---|---|
| committer | Vosjedev <vosje@vosjedev.net> | 2025-11-09 09:07:01 +0100 |
| commit | 4ef1b675284980e4e9de8d3fbcc34e5a74dd6466 (patch) | |
| tree | 18068d545a2dbf2ce780e857bc75376855927ec2 | |
| parent | 4ba83d1a51ffab43909028b389fc65d8045d1955 (diff) | |
| download | acit-4ef1b675284980e4e9de8d3fbcc34e5a74dd6466.tar.gz acit-4ef1b675284980e4e9de8d3fbcc34e5a74dd6466.tar.bz2 acit-4ef1b675284980e4e9de8d3fbcc34e5a74dd6466.tar.xz | |
Highlight patch emails
| -rw-r--r-- | src/acit/html.py | 89 | ||||
| -rw-r--r-- | src/acit/pagegenerator.py | 2 | ||||
| -rw-r--r-- | src/acit/util.py | 17 |
3 files changed, 105 insertions, 3 deletions
diff --git a/src/acit/html.py b/src/acit/html.py index dd06c77..898a447 100644 --- a/src/acit/html.py +++ b/src/acit/html.py @@ -341,4 +341,93 @@ h1, h2 { } +.highlight { + /* python3 -c "from pygments.formattters import HtmlFormatter; print(HtmlFormatter(style="monokai").get_style_defs())" */ + pre { line-height: 125%; } + td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } + span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } + td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } + span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } + .hll { background-color: #49483e } + .c { color: #959077 } /* Comment */ + .err { color: #ED007E; background-color: #1E0010 } /* Error */ + .esc { color: #F8F8F2 } /* Escape */ + .g { color: #F8F8F2 } /* Generic */ + .k { color: #66D9EF } /* Keyword */ + .l { color: #AE81FF } /* Literal */ + .n { color: #F8F8F2 } /* Name */ + .o { color: #FF4689 } /* Operator */ + .x { color: #F8F8F2 } /* Other */ + .p { color: #F8F8F2 } /* Punctuation */ + .ch { color: #959077 } /* Comment.Hashbang */ + .cm { color: #959077 } /* Comment.Multiline */ + .cp { color: #959077 } /* Comment.Preproc */ + .cpf { color: #959077 } /* Comment.PreprocFile */ + .c1 { color: #959077 } /* Comment.Single */ + .cs { color: #959077 } /* Comment.Special */ + .gd { color: #FF4689 } /* Generic.Deleted */ + .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */ + .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ + .gr { color: #F8F8F2 } /* Generic.Error */ + .gh { color: #F8F8F2 } /* Generic.Heading */ + .gi { color: #A6E22E } /* Generic.Inserted */ + .go { color: #66D9EF } /* Generic.Output */ + .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */ + .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */ + .gu { color: #959077 } /* Generic.Subheading */ + .gt { color: #F8F8F2 } /* Generic.Traceback */ + .kc { color: #66D9EF } /* Keyword.Constant */ + .kd { color: #66D9EF } /* Keyword.Declaration */ + .kn { color: #FF4689 } /* Keyword.Namespace */ + .kp { color: #66D9EF } /* Keyword.Pseudo */ + .kr { color: #66D9EF } /* Keyword.Reserved */ + .kt { color: #66D9EF } /* Keyword.Type */ + .ld { color: #E6DB74 } /* Literal.Date */ + .m { color: #AE81FF } /* Literal.Number */ + .s { color: #E6DB74 } /* Literal.String */ + .na { color: #A6E22E } /* Name.Attribute */ + .nb { color: #F8F8F2 } /* Name.Builtin */ + .nc { color: #A6E22E } /* Name.Class */ + .no { color: #66D9EF } /* Name.Constant */ + .nd { color: #A6E22E } /* Name.Decorator */ + .ni { color: #F8F8F2 } /* Name.Entity */ + .ne { color: #A6E22E } /* Name.Exception */ + .nf { color: #A6E22E } /* Name.Function */ + .nl { color: #F8F8F2 } /* Name.Label */ + .nn { color: #F8F8F2 } /* Name.Namespace */ + .nx { color: #A6E22E } /* Name.Other */ + .py { color: #F8F8F2 } /* Name.Property */ + .nt { color: #FF4689 } /* Name.Tag */ + .nv { color: #F8F8F2 } /* Name.Variable */ + .ow { color: #FF4689 } /* Operator.Word */ + .pm { color: #F8F8F2 } /* Punctuation.Marker */ + .w { color: #F8F8F2 } /* Text.Whitespace */ + .mb { color: #AE81FF } /* Literal.Number.Bin */ + .mf { color: #AE81FF } /* Literal.Number.Float */ + .mh { color: #AE81FF } /* Literal.Number.Hex */ + .mi { color: #AE81FF } /* Literal.Number.Integer */ + .mo { color: #AE81FF } /* Literal.Number.Oct */ + .sa { color: #E6DB74 } /* Literal.String.Affix */ + .sb { color: #E6DB74 } /* Literal.String.Backtick */ + .sc { color: #E6DB74 } /* Literal.String.Char */ + .dl { color: #E6DB74 } /* Literal.String.Delimiter */ + .sd { color: #E6DB74 } /* Literal.String.Doc */ + .s2 { color: #E6DB74 } /* Literal.String.Double */ + .se { color: #AE81FF } /* Literal.String.Escape */ + .sh { color: #E6DB74 } /* Literal.String.Heredoc */ + .si { color: #E6DB74 } /* Literal.String.Interpol */ + .sx { color: #E6DB74 } /* Literal.String.Other */ + .sr { color: #E6DB74 } /* Literal.String.Regex */ + .s1 { color: #E6DB74 } /* Literal.String.Single */ + .ss { color: #E6DB74 } /* Literal.String.Symbol */ + .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */ + .fm { color: #A6E22E } /* Name.Function.Magic */ + .vc { color: #F8F8F2 } /* Name.Variable.Class */ + .vg { color: #F8F8F2 } /* Name.Variable.Global */ + .vi { color: #F8F8F2 } /* Name.Variable.Instance */ + .vm { color: #F8F8F2 } /* Name.Variable.Magic */ + .il { color: #AE81FF } /* Literal.Number.Integer.Long */ +} + + """ diff --git a/src/acit/pagegenerator.py b/src/acit/pagegenerator.py index 939d00b..678e84c 100644 --- a/src/acit/pagegenerator.py +++ b/src/acit/pagegenerator.py @@ -109,7 +109,7 @@ class Generator(plugins.SimplePlugin): date=msg.date_str, from_=msg.from_) currentpage+='with Subject: <i>%s</i></div>'%msg.subject - currentpage+=email2html(msg.text) + currentpage+=email2html(msg.text, ispatch=msg.subject.startswith("[PATCH")) # end block emailsonpage+=1 diff --git a/src/acit/util.py b/src/acit/util.py index 343fbc1..65c0816 100644 --- a/src/acit/util.py +++ b/src/acit/util.py @@ -17,11 +17,24 @@ def lookahead(iterable): # https://stackoverflow.com/a/1630350 # Report the last value. yield last, True -def email2html(mailtext:str,extraclasses=""): +def email2html(mailtext:str,extraclasses="",ispatch=False): #print(mailtext) from html import escape + if ispatch: + from pygments import highlight + from pygments.lexers import DiffLexer + from pygments.formatters import HtmlFormatter + extraclasses+=" highlight" + res='<article class="email %s"><p>'%extraclasses - mail=escape(mailtext).replace("\n\n","</p><p>").replace("\n","<br>") + mail=escape(mailtext) + + if ispatch: + mail=highlight(mail,lexer=DiffLexer(),formatter=HtmlFormatter(style="monokai")) + else: + mail=mail.replace("\n\n","</p><p>").replace("\n","<br>") + + res+=mail res+="</p></article>" return res |
