diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-09-27 01:31:24 -0400 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-09-27 01:31:24 -0400 |
| commit | 318551a0aae7bf490bac7369d8358753e906df46 (patch) | |
| tree | 5bfebc31b7beb07e1e79fd82035392a929df26f8 | |
| parent | 87f0f69ec1daa118bb459c0729ba3905abc28523 (diff) | |
| download | pypaste-318551a0aae7bf490bac7369d8358753e906df46.tar.gz | |
support passing mime type to help guess the lexer
| -rw-r--r-- | pypaste/server/__init__.py | 32 |
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) |
