reflex-web icon indicating copy to clipboard operation
reflex-web copied to clipboard

Flexdown does not support Advance Latex math

Open sadsquirrel369 opened this issue 1 year ago • 1 comments

I am trying to build a blog of my own using this website as an example. When parsing more advance latex to the markdown function $\sum_{x^2+1}$ the system breaks (\sum_{x^2+1})

` Traceback (most recent call last): File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/utils.py", line 45, in evaluate_templates eval_result = str(eval(match, env, env)) File "", line 1 {x^2+1 ^ SyntaxError: '{' was never closed

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/bin/reflex", line 8, in sys.exit(cli()) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/typer/main.py", line 326, in call raise e File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/typer/main.py", line 309, in call return get_command(self)(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/click/core.py", line 1157, in call return self.main(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/typer/core.py", line 723, in main return _main( File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/typer/core.py", line 193, in _main rv = self.invoke(ctx) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/click/core.py", line 1688, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/click/core.py", line 783, in invoke return __callback(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/typer/main.py", line 692, in wrapper return callback(**use_params) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/reflex.py", line 260, in run _run(env, frontend, backend, frontend_port, backend_port, backend_host, loglevel) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/reflex.py", line 186, in _run prerequisites.get_compiled_app() File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/utils/prerequisites.py", line 288, in get_compiled_app app_module = get_app(reload=reload) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/utils/prerequisites.py", line 261, in get_app app = import(module, fromlist=(constants.CompileVars.APP,)) File "/Users/kobus/Documents/Private/Codebase/Blog/Blog/Blog.py", line 18, in app.add_page( File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/app.py", line 500, in add_page component = self._generate_component(component) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/reflex/app.py", line 422, in _generate_component return component if isinstance(component, Component) else component() File "/Users/kobus/Documents/Private/Codebase/Blog/Blog/utils/template.py", line 48, in wrapper contents(*children, **props), File "/Users/kobus/Documents/Private/Codebase/Blog/Blog/pages/blog/blog.py", line 15, in lambda doc=document: page(doc, route) File "/Users/kobus/Documents/Private/Codebase/Blog/Blog/pages/blog/page.py", line 130, in page xd.render(document, "blog.md"), File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/flexdown.py", line 205, in render f"\n{block.get_content(env)}" File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/blocks/block.py", line 110, in get_content return "\n".join(self.get_lines(env)) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/blocks/block.py", line 95, in get_lines lines = [ File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/blocks/block.py", line 96, in self._apply_transforms(line, env) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/blocks/block.py", line 79, in _apply_transforms line = transform(line, env) File "/opt/homebrew/Caskroom/miniforge/base/envs/Blog/lib/python3.10/site-packages/flexdown/utils.py", line 49, in evaluate_templates raise ValueError(f"Failed to evaluate expression '{match}'") from e ValueError: Failed to evaluate expression '{x^2+1' `

sadsquirrel369 avatar Jul 22 '24 17:07 sadsquirrel369

@sadsquirrel369 Currently flexdown looks for {expr} and fills it in with Python expressions. I need to make the escape a double brace instead to avoid this, but you can escape it by doing \{expr} - for example

Sum is  $\sum_\{x^2+1}$

That makes it compile for me, but sum still doesn't render. Maybe something missing without our katex implementation

picklelo avatar Jul 22 '24 18:07 picklelo