diff options
| -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) |
