From 259f6f3c292a4a62c0b52c92ae4edbc67d871eab Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Wed, 14 May 2025 18:28:29 +1000 Subject: [PATCH] Implement %d filter --- htmlcc/emitter/__init__.py | 5 +++++ htmlcc/emitter/cgit.py | 3 +++ htmlcc/parser.py | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/htmlcc/emitter/__init__.py b/htmlcc/emitter/__init__.py index 7fb1e4d..6db4364 100644 --- a/htmlcc/emitter/__init__.py +++ b/htmlcc/emitter/__init__.py @@ -45,6 +45,11 @@ class Emitter: raise NotImplementedError() + def output_variable_formatted(self, format_string: str, variable: str) -> None: + """Emit code to output a variable, according to the format string""" + + raise NotImplementedError() + def output_variable_urlencoded(self, variable: str) -> None: """Emit code to output a variable, as encoded URL component""" diff --git a/htmlcc/emitter/cgit.py b/htmlcc/emitter/cgit.py index 84cd5ab..64fbaf3 100644 --- a/htmlcc/emitter/cgit.py +++ b/htmlcc/emitter/cgit.py @@ -35,6 +35,9 @@ class CgitEmitter(Emitter): def output_variable_as_text(self, variable: str) -> None: self.emit(f'html_txt({variable});') + def output_variable_formatted(self, format_string: str, variable: str) -> None: + self.emit(f'htmlf({self.escape_cstr(format_string)}, {variable});') + def output_variable_urlencoded(self, variable: str) -> None: self.emit(f'html_url_arg({variable});') diff --git a/htmlcc/parser.py b/htmlcc/parser.py index b0b80ea..2dd9ad8 100644 --- a/htmlcc/parser.py +++ b/htmlcc/parser.py @@ -133,6 +133,10 @@ class Parser: # Output as URL component variable = variable[:-len('urlencode')].rstrip()[:-1].rstrip() self.emitter.output_variable_urlencoded(variable) + elif variable.endswith('%d') and variable[:-len('%d')].rstrip().endswith('|'): + # Output as %d + variable = variable[:-len('%d')].rstrip()[:-1].rstrip() + self.emitter.output_variable_formatted('%d', variable) else: # No filter - output as text self.emitter.output_variable_as_text(variable)