summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-09-27 01:31:24 -0400
committerJohn Turner <jturner.usa@gmail.com>2025-09-27 01:31:24 -0400
commit318551a0aae7bf490bac7369d8358753e906df46 (patch)
tree5bfebc31b7beb07e1e79fd82035392a929df26f8
parent87f0f69ec1daa118bb459c0729ba3905abc28523 (diff)
downloadpypaste-318551a0aae7bf490bac7369d8358753e906df46.tar.gz
support passing mime type to help guess the lexer
-rw-r--r--pypaste/server/__init__.py32
1 files changed, 22 insertions, 10 deletions
diff --git a/pypaste/server/__init__.py b/pypaste/server/__init__.py
index 1c40f71..6b8291b 100644
--- a/pypaste/server/__init__.py
+++ b/pypaste/server/__init__.py
@@ -21,7 +21,7 @@ from dataclasses import dataclass
from typing import Optional
from pypaste import log_error, log_warning, log_info
from pygments import highlight
-from pygments.lexers import guess_lexer, get_lexer_by_name
+from pygments.lexers import guess_lexer, get_lexer_by_name, get_lexer_for_mimetype
from pygments.formatters import HtmlFormatter
from pygments.styles import get_style_by_name
from abc import abstractmethod
@@ -32,15 +32,21 @@ from functools import lru_cache
@lru_cache(16)
def pygmentize(
- content: str, syntax: Optional[str], style: str, line_numbers: str | bool
+ content: str,
+ syntax: Optional[str],
+ mime: Optional[str],
+ style: str,
+ line_numbers: str | bool,
) -> str:
- if syntax is not None:
- try:
- lexer = get_lexer_by_name(syntax)
- except Exception:
- log_warning(f"failed to find lexer for {syntax}")
- lexer = guess_lexer(content)
- else:
+ try:
+ match [syntax, mime]:
+ case [str(syntax), _]:
+ lexer = get_lexer_by_name(syntax)
+ case [_, str(mime)]:
+ lexer = get_lexer_for_mimetype(mime)
+ case _:
+ lexer = guess_lexer(content)
+ except Exception:
lexer = guess_lexer(content)
try:
@@ -190,7 +196,13 @@ class App:
else:
def render():
- return pygmentize(paste.text, syntax, style, self.config.line_numbers)
+ return pygmentize(
+ paste.text,
+ syntax,
+ request.query.get("mime"),
+ style,
+ self.config.line_numbers,
+ )
highlighted = await asyncio.to_thread(render)