mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 20:13:46 +00:00 
			
		
		
		
	Fixes #2665. Regenerated by tabbott with `lint --fix` after a rebase and change in parameters. Note from tabbott: In a few cases, this converts technical debt in the form of unsorted imports into different technical debt in the form of our largest files having very long, ugly import sequences at the start. I expect this change will increase pressure for us to split those files, which isn't a bad thing. Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import logging
 | |
| import os
 | |
| import subprocess
 | |
| from typing import Optional
 | |
| 
 | |
| from django.conf import settings
 | |
| 
 | |
| from zerver.lib.storage import static_path
 | |
| 
 | |
| 
 | |
| def render_tex(tex: str, is_inline: bool=True) -> Optional[str]:
 | |
|     r"""Render a TeX string into HTML using KaTeX
 | |
| 
 | |
|     Returns the HTML string, or None if there was some error in the TeX syntax
 | |
| 
 | |
|     Keyword arguments:
 | |
|     tex -- Text string with the TeX to render
 | |
|            Don't include delimiters ('$$', '\[ \]', etc.)
 | |
|     is_inline -- Boolean setting that indicates whether the render should be
 | |
|                  inline (i.e. for embedding it in text) or not. The latter
 | |
|                  will show the content centered, and in the "expanded" form
 | |
|                  (default True)
 | |
|     """
 | |
| 
 | |
|     katex_path = (
 | |
|         static_path("webpack-bundles/katex-cli.js")
 | |
|         if settings.PRODUCTION
 | |
|         else os.path.join(settings.DEPLOY_ROOT, "node_modules/katex/cli.js")
 | |
|     )
 | |
|     if not os.path.isfile(katex_path):
 | |
|         logging.error("Cannot find KaTeX for latex rendering!")
 | |
|         return None
 | |
|     command = ['node', katex_path]
 | |
|     if not is_inline:
 | |
|         command.extend(['--display-mode'])
 | |
|     katex = subprocess.Popen(command,
 | |
|                              stdin=subprocess.PIPE,
 | |
|                              stdout=subprocess.PIPE,
 | |
|                              stderr=subprocess.PIPE)
 | |
|     stdout = katex.communicate(input=tex.encode())[0]
 | |
|     if katex.returncode == 0:
 | |
|         # stdout contains a newline at the end
 | |
|         assert stdout is not None
 | |
|         return stdout.decode('utf-8').strip()
 | |
|     else:
 | |
|         return None
 |