mirror of
https://github.com/zulip/zulip.git
synced 2025-10-26 09:34:02 +00:00
markdown: Organize preprocessor priorities in one place.
All of our custom Markdown extensions have priorities that govern the order in which the preprocessors will be run. It is more convenient to have these all in one file so that you can easily discern the order at first glance. Thanks to Alya Abbott for reporting the bug that led to this refactoring!
This commit is contained in:
@@ -8,6 +8,7 @@ from django.utils.html import escape as escape_html
|
||||
from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
from zerver.openapi.openapi import (
|
||||
check_deprecated_consistency,
|
||||
get_openapi_parameters,
|
||||
@@ -30,7 +31,9 @@ class MarkdownArgumentsTableGenerator(Extension):
|
||||
|
||||
def extendMarkdown(self, md: markdown.Markdown) -> None:
|
||||
md.preprocessors.register(
|
||||
APIArgumentsTablePreprocessor(md, self.getConfigs()), "generate_api_arguments", 505
|
||||
APIArgumentsTablePreprocessor(md, self.getConfigs()),
|
||||
"generate_api_arguments",
|
||||
PREPROCESSOR_PRIORITES["generate_api_arguments"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import markdown
|
||||
from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
from zerver.openapi.openapi import check_deprecated_consistency, get_openapi_return_values
|
||||
|
||||
from .api_arguments_table_generator import generate_data_type
|
||||
@@ -20,7 +21,9 @@ class MarkdownReturnValuesTableGenerator(Extension):
|
||||
|
||||
def extendMarkdown(self, md: markdown.Markdown) -> None:
|
||||
md.preprocessors.register(
|
||||
APIReturnValuesTablePreprocessor(md, self.getConfigs()), "generate_return_values", 510
|
||||
APIReturnValuesTablePreprocessor(md, self.getConfigs()),
|
||||
"generate_return_values",
|
||||
PREPROCESSOR_PRIORITES["generate_return_values"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ from pygments.lexers import find_lexer_class_by_name
|
||||
from pygments.util import ClassNotFound
|
||||
|
||||
from zerver.lib.exceptions import MarkdownRenderingException
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
from zerver.lib.tex import render_tex
|
||||
|
||||
# Global vars
|
||||
@@ -162,7 +163,9 @@ class FencedCodeExtension(Extension):
|
||||
processor = FencedBlockPreprocessor(
|
||||
md, run_content_validators=self.config["run_content_validators"][0]
|
||||
)
|
||||
md.preprocessors.register(processor, "fenced_code_block", 25)
|
||||
md.preprocessors.register(
|
||||
processor, "fenced_code_block", PREPROCESSOR_PRIORITES["fenced_code_block"]
|
||||
)
|
||||
|
||||
|
||||
class ZulipBaseHandler:
|
||||
|
||||
@@ -6,6 +6,7 @@ from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.emoji import EMOTICON_CONVERSIONS, name_to_codepoint
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
REGEXP = re.compile(r"\{emoticon_translations\}")
|
||||
|
||||
@@ -40,7 +41,11 @@ class EmoticonTranslationsHelpExtension(Extension):
|
||||
def extendMarkdown(self, md: Markdown) -> None:
|
||||
"""Add SettingHelpExtension to the Markdown instance."""
|
||||
md.registerExtension(self)
|
||||
md.preprocessors.register(EmoticonTranslation(), "emoticon_translations", -505)
|
||||
md.preprocessors.register(
|
||||
EmoticonTranslation(),
|
||||
"emoticon_translations",
|
||||
PREPROCESSOR_PRIORITES["emoticon_translations"],
|
||||
)
|
||||
|
||||
|
||||
class EmoticonTranslation(Preprocessor):
|
||||
|
||||
@@ -5,6 +5,8 @@ from markdown import Markdown
|
||||
from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
# There is a lot of duplicated code between this file and
|
||||
# help_settings_links.py. So if you're making a change here consider making
|
||||
# it there as well.
|
||||
@@ -73,7 +75,9 @@ class RelativeLinksHelpExtension(Extension):
|
||||
def extendMarkdown(self, md: Markdown) -> None:
|
||||
"""Add RelativeLinksHelpExtension to the Markdown instance."""
|
||||
md.registerExtension(self)
|
||||
md.preprocessors.register(RelativeLinks(), "help_relative_links", 520)
|
||||
md.preprocessors.register(
|
||||
RelativeLinks(), "help_relative_links", PREPROCESSOR_PRIORITES["help_relative_links"]
|
||||
)
|
||||
|
||||
|
||||
relative_help_links: Optional[bool] = None
|
||||
|
||||
@@ -5,6 +5,8 @@ from markdown import Markdown
|
||||
from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
# There is a lot of duplicated code between this file and
|
||||
# help_relative_links.py. So if you're making a change here consider making
|
||||
# it there as well.
|
||||
@@ -104,7 +106,7 @@ class SettingHelpExtension(Extension):
|
||||
def extendMarkdown(self, md: Markdown) -> None:
|
||||
"""Add SettingHelpExtension to the Markdown instance."""
|
||||
md.registerExtension(self)
|
||||
md.preprocessors.register(Setting(), "setting", 515)
|
||||
md.preprocessors.register(Setting(), "setting", PREPROCESSOR_PRIORITES["setting"])
|
||||
|
||||
|
||||
relative_settings_links: Optional[bool] = None
|
||||
|
||||
@@ -6,6 +6,7 @@ import markdown
|
||||
from markdown_include.include import IncludePreprocessor, MarkdownInclude
|
||||
|
||||
from zerver.lib.exceptions import InvalidMarkdownIncludeStatement
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
INC_SYNTAX = re.compile(r"\{!\s*(.+?)\s*!\}")
|
||||
|
||||
@@ -15,7 +16,7 @@ class MarkdownIncludeCustom(MarkdownInclude):
|
||||
md.preprocessors.register(
|
||||
IncludeCustomPreprocessor(md, self.getConfigs()),
|
||||
"include_wrapper",
|
||||
500,
|
||||
PREPROCESSOR_PRIORITES["include"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import markdown
|
||||
from markdown.extensions import Extension
|
||||
|
||||
from zerver.lib.markdown import ResultWithFamily, walk_tree_with_family
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
|
||||
class NestedCodeBlocksRenderer(Extension):
|
||||
@@ -12,7 +13,7 @@ class NestedCodeBlocksRenderer(Extension):
|
||||
md.treeprocessors.register(
|
||||
NestedCodeBlocksRendererTreeProcessor(md, self.getConfigs()),
|
||||
"nested_code_blocks",
|
||||
-500,
|
||||
PREPROCESSOR_PRIORITES["nested_code_blocks"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
19
zerver/lib/markdown/preprocessor_priorities.py
Normal file
19
zerver/lib/markdown/preprocessor_priorities.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Note that in the Markdown preprocessor registry, the highest
|
||||
# numeric value is considered the highest priority, so the dict
|
||||
# below is ordered from highest-to-lowest priority.
|
||||
PREPROCESSOR_PRIORITES = {
|
||||
"generate_parameter_description": 535,
|
||||
"generate_response_description": 531,
|
||||
"generate_api_title": 531,
|
||||
"generate_api_description": 530,
|
||||
"generate_code_example": 525,
|
||||
"help_relative_links": 520,
|
||||
"setting": 515,
|
||||
"generate_return_values": 510,
|
||||
"generate_api_arguments": 505,
|
||||
"include": 500,
|
||||
"fenced_code_block": 25,
|
||||
"tabbed_sections": -500,
|
||||
"nested_code_blocks": -500,
|
||||
"emoticon_translations": -505,
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import markdown
|
||||
from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
|
||||
START_TABBED_SECTION_REGEX = re.compile(r"^\{start_tabs\}$")
|
||||
END_TABBED_SECTION_REGEX = re.compile(r"^\{end_tabs\}$")
|
||||
TAB_CONTENT_REGEX = re.compile(r"^\{tab\|\s*(.+?)\s*\}$")
|
||||
@@ -76,7 +78,9 @@ TAB_DISPLAY_NAMES = {
|
||||
class TabbedSectionsGenerator(Extension):
|
||||
def extendMarkdown(self, md: markdown.Markdown) -> None:
|
||||
md.preprocessors.register(
|
||||
TabbedSectionsPreprocessor(md, self.getConfigs()), "tabbed_sections", -500
|
||||
TabbedSectionsPreprocessor(md, self.getConfigs()),
|
||||
"tabbed_sections",
|
||||
PREPROCESSOR_PRIORITES["tabbed_sections"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ from markdown.extensions import Extension
|
||||
from markdown.preprocessors import Preprocessor
|
||||
|
||||
import zerver.openapi.python_examples
|
||||
from zerver.lib.markdown.preprocessor_priorities import PREPROCESSOR_PRIORITES
|
||||
from zerver.openapi.openapi import (
|
||||
check_additional_imports,
|
||||
check_requires_administrator,
|
||||
@@ -415,23 +416,29 @@ class APIMarkdownExtension(Extension):
|
||||
|
||||
def extendMarkdown(self, md: markdown.Markdown) -> None:
|
||||
md.preprocessors.register(
|
||||
APICodeExamplesPreprocessor(md, self.getConfigs()), "generate_code_example", 525
|
||||
APICodeExamplesPreprocessor(md, self.getConfigs()),
|
||||
"generate_code_example",
|
||||
PREPROCESSOR_PRIORITES["generate_code_example"],
|
||||
)
|
||||
md.preprocessors.register(
|
||||
APIDescriptionPreprocessor(md, self.getConfigs()), "generate_api_description", 530
|
||||
APIDescriptionPreprocessor(md, self.getConfigs()),
|
||||
"generate_api_description",
|
||||
PREPROCESSOR_PRIORITES["generate_api_description"],
|
||||
)
|
||||
md.preprocessors.register(
|
||||
APITitlePreprocessor(md, self.getConfigs()), "generate_api_title", 531
|
||||
APITitlePreprocessor(md, self.getConfigs()),
|
||||
"generate_api_title",
|
||||
PREPROCESSOR_PRIORITES["generate_api_title"],
|
||||
)
|
||||
md.preprocessors.register(
|
||||
ResponseDescriptionPreprocessor(md, self.getConfigs()),
|
||||
"generate_response_description",
|
||||
531,
|
||||
PREPROCESSOR_PRIORITES["generate_response_description"],
|
||||
)
|
||||
md.preprocessors.register(
|
||||
ParameterDescriptionPreprocessor(md, self.getConfigs()),
|
||||
"generate_parameter_description",
|
||||
535,
|
||||
PREPROCESSOR_PRIORITES["generate_parameter_description"],
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user