From 3522a9d62c12e644f9fab4d1fb5200bf1a139797 Mon Sep 17 00:00:00 2001 From: "Philippe Le Van (@plv)" Date: Mon, 20 Nov 2023 07:51:12 +0100 Subject: [PATCH] counter management (#28) * counter management * better scan for if statements * html statement velocity * doc and scan speedup * speedup for and better scanning * disclamer for heading automatic numbering --- README.md | 112 ++++++++++++ lotemplate/Statement/CounterStatement.py | 162 ++++++++++++++++++ lotemplate/Statement/ForStatement.py | 79 +++++---- lotemplate/Statement/HtmlStatement.py | 67 ++++---- lotemplate/Statement/IfStatement.py | 13 ++ lotemplate/classes.py | 4 + .../files/content/counter.expected.txt | 65 +++++++ .../unittest/files/content/counter.json | 19 ++ lotemplate/unittest/files/content/counter.odt | Bin 0 -> 24458 bytes .../files/templates/for_missing_endfor.odt | Bin 0 -> 16711 bytes .../files/templates/if_too_many_endif.odt | Bin 0 -> 25608 bytes lotemplate/unittest/test_content.py | 4 + lotemplate/unittest/test_template_scan.py | 17 ++ 13 files changed, 472 insertions(+), 70 deletions(-) create mode 100644 lotemplate/Statement/CounterStatement.py create mode 100644 lotemplate/unittest/files/content/counter.expected.txt create mode 100644 lotemplate/unittest/files/content/counter.json create mode 100644 lotemplate/unittest/files/content/counter.odt create mode 100644 lotemplate/unittest/files/templates/for_missing_endfor.odt create mode 100644 lotemplate/unittest/files/templates/if_too_many_endif.odt diff --git a/README.md b/README.md index 496d84a..323c77b 100644 --- a/README.md +++ b/README.md @@ -538,6 +538,111 @@ and the odt template : [endhtml] ``` +### counter statement + +You can use counter statement in order to display values that will be incremented step by step in your document. It +can be used for example to have a heading automatic numbering. + +**WARNING** : generally you don't have to use this counter feature. You can use the automatic numbering of Word or Libre Office + +In your odt, you can use : + +``` +chapter [counter chapter] : introduction + +chapter [counter chapter] : context + +[counter paragraph] : geopolitical context + +[counter paragraph] : geographical context + +[counter paragraph] : economical context + +chapter [counter chapter] : analysis +[counter.reset paragraph] +[counter paragraph] : geopolitical analysis + +[counter paragraph] : geographical analysis + +[counter paragraph] : economical analysis +``` + +It will be transformed in : + +``` +chapter 1 : introduction + +chapter 2 : context + +1 : geopolitical context + +2 : geographical context + +3 : economical context + +chapter 3 : analysis + +1 : geopolitical analysis + +2 : geographical analysis + +3 : economical analysis +``` + +The possible syntaxe are : + +* `[counter counter_name]` : increment the counter "counter_name" and display it +* `[counter.reset counter_name]` : reset the counter "counter_name" to 0 +* `[counter.last counter_name]` : display the last value of the counter "counter_name" without incrementing it +* `[counter.format counter_name format_name]` : change the format of the counter + * `[counter.format counter_name number]` : the counter is displayed as a number (default) + * `[counter.format counter_name letter_lowercase]` : the counter is displayed as a letter (a, b, c, ...) + * `[counter.format counter_name letter_uppercase]` : the counter is displayed as a letter (A, B, C, ...) + +You can display hierarchical counters by just using `counter.last`: + + +``` +chapter [counter chapter] : introduction + +chapter [counter chapter] : context + +[counter.last chapter].[counter paragraph] : geopolitical context + +[counter.last chapter].[counter paragraph] : geographical context + +[counter.last chapter].[counter paragraph] : economical context + +chapter [counter chapter] : analysis +[counter.reset paragraph] +[counter.last chapter].[counter paragraph] : geopolitical analysis + +[counter.last chapter].[counter paragraph] : geographical analysis + +[counter.last chapter].[counter paragraph] : economical analysis +``` + +The result will be + +``` +chapter 1 : introduction + +chapter 2 : context + +2.1 : geopolitical context + +2.2 : geographical context + +2.3 : economical context + +chapter 3 : analysis + +3.1 : geopolitical analysis + +3.2 : geographical analysis + +3.3 : economical analysis +``` ## Supported formats @@ -611,6 +716,13 @@ For trying to fix these problems, you can try: ## Versions : +- v1.4.0, 2023-11-17 : counters + - add a counter system inside templates + - add better scan for if statement. Raises an error if there is too many endif in the template. + - speedup html statement replacement and scanning + - speedup for statement replacement and scanning + - tests of for scanning + - internal : add scan testing inside content unit tests - v1.3.0, 2023-11-16 : - major refactoring. No evolution for the user. - new unit tests on tables and images diff --git a/lotemplate/Statement/CounterStatement.py b/lotemplate/Statement/CounterStatement.py new file mode 100644 index 0000000..3d97ece --- /dev/null +++ b/lotemplate/Statement/CounterStatement.py @@ -0,0 +1,162 @@ +import re +from com.sun.star.lang import XComponent + +class CounterStatement: + counter_regex = r""" + \[\s* + (?: + (?: + (counter) + (?:\s+(\w+)) + ) + | + (?: + (counter\.reset|counter\.last) + (?:\s+(\w+)) + ) + | + (?: + (counter\.format) + (?:\s+(\w+)) + (?:\s+(number|letter_uppercase|letter_lowercase)) + ) + ) + \s*\] + """ + counter_regex = re.sub(r'#.*', '', counter_regex).replace("\n", "").replace("\t", "").replace(" ", "") + + def __init__(self, counter_string: str): + self.counter_string = counter_string + match = re.search(self.counter_regex, counter_string, re.IGNORECASE) + + if match.group(1) is not None: + self.command_name = match.group(1) + self.counter_name = match.group(2) + elif match.group(3) is not None: + self.command_name = match.group(3) + self.counter_name = match.group(4) + elif match.group(5) is not None: + self.command_name = match.group(5) + self.counter_name = match.group(6) + self.counter_format = match.group(7) + +class CounterManager: + """ + Class representing an html statement in a template libreoffice + """ + + def __init__(self, html: str, component: XComponent): + self.counter_list = {} + + def scan_counter(doc: XComponent) -> None: + """ + scan for counter statement. No return. We just verify that there is + and endif for each if statement + """ + def compute_counter(x_found): + """ + Compute the counter statement. + """ + counter_text = x_found.getText() + counter_cursor = counter_text.createTextCursorByRange(x_found) + cursor_statement = CounterStatement(counter_cursor.String) + + def find_counter_to_compute(doc, search, x_found): + """ + Find the if statement to compute. + """ + if x_found is None: + return None + + compute_counter(x_found) + + # searching for the next counter statement. + x_found_after = doc.findNext(x_found.End, search) + if x_found_after is not None: + find_counter_to_compute(doc, search, x_found_after) + + # main of if_replace + search = doc.createSearchDescriptor() + search.SearchString = CounterStatement.counter_regex + search.SearchRegularExpression = True + search.SearchCaseSensitive = False + x_found = doc.findFirst(search) + find_counter_to_compute(doc, search, x_found) + + def counter_replace(doc: XComponent) -> None: + """ + scan for counter statement. No return. We just verify that there is + and endif for each if statement + """ + def compute_counter(x_found): + """ + Compute the counter statement. + """ + def number_formated(format: str, value: int) -> str: + if format=='number': + return str(value) + elif format=='letter_uppercase': + # after Z we go to A + value -= 1 + value = value % 26 + return chr(value + 65) + elif format=='letter_lowercase': + # after z we go to a + value -= 1 + value = value % 26 + return chr(value + 97) + return str(value) + + counter_text = x_found.getText() + counter_cursor = counter_text.createTextCursorByRange(x_found) + cursor_statement = CounterStatement(counter_cursor.String) + if cursor_statement.command_name == 'counter': + if cursor_statement.counter_name not in counter_list: + counter_list[cursor_statement.counter_name] = { + "value": 0, + "format": "number" + } + counter_list[cursor_statement.counter_name]["value"] = counter_list[cursor_statement.counter_name]["value"] + 1 + counter_cursor.String = number_formated(counter_list[cursor_statement.counter_name]["format"], counter_list[cursor_statement.counter_name]["value"]) + elif cursor_statement.command_name == 'counter.format': + if cursor_statement.counter_name not in counter_list: + counter_list[cursor_statement.counter_name] = { + "value": 0, + "format": cursor_statement.counter_format + } + else: + counter_list[cursor_statement.counter_name]["format"] = cursor_statement.counter_format + counter_cursor.String = "" + elif cursor_statement.command_name == 'counter.reset': + counter_list[cursor_statement.counter_name]["value"] = 0 + counter_cursor.String = "" + elif cursor_statement.command_name == 'counter.last': + counter_cursor.String = number_formated(counter_list[cursor_statement.counter_name]["format"], counter_list[cursor_statement.counter_name]["value"]) + + def find_counter_to_compute(doc, search, x_found): + """ + Find the if statement to compute. + """ + if x_found is None: + return None + + text = x_found.getText() + cursor = text.createTextCursorByRange(x_found) + str = cursor.String + + + compute_counter(x_found) + + # searching for the next counter statement. + x_found_after = doc.findNext(x_found.End, search) + if x_found_after is not None: + find_counter_to_compute(doc, search, x_found_after) + + # main of counter_replace + counter_list = {} + search = doc.createSearchDescriptor() + search.SearchString = CounterStatement.counter_regex + search.SearchRegularExpression = True + search.SearchCaseSensitive = False + x_found = doc.findFirst(search) + find_counter_to_compute(doc, search, x_found) diff --git a/lotemplate/Statement/ForStatement.py b/lotemplate/Statement/ForStatement.py index 879529f..a316406 100644 --- a/lotemplate/Statement/ForStatement.py +++ b/lotemplate/Statement/ForStatement.py @@ -57,26 +57,24 @@ def scan_for(doc: XComponent) -> dict: - vars sent are lists """ - def scan_single_for(local_x_found) -> str: + def scan_single_for(doc: XComponent, local_x_found) -> str: """ scan for a single for statement """ for_statement = ForStatement(local_x_found.getString()) position_in_text = len(for_statement.for_string) - text = local_x_found.getText() - cursor = text.createTextCursorByRange(local_x_found) - while True: - if not cursor.goRight(1, True): - raise errors.TemplateError( - 'no_endfor_found', - f"The statement {for_statement.for_string} has no endfor", - dict_of(for_statement.for_string) - ) - position_in_text = position_in_text + 1 - selected_string = cursor.String - match = re.search(ForStatement.end_regex, selected_string, re.IGNORECASE) - if match is not None: - break + + endfor_search = doc.createSearchDescriptor() + endfor_search.SearchString = ForStatement.end_regex + endfor_search.SearchRegularExpression = True + endfor_search.SearchCaseSensitive = False + x_found_endfor = doc.findNext(local_x_found.End, endfor_search) + if x_found_endfor is None: + raise errors.TemplateError( + 'no_endfor_found', + f"The statement {for_statement.for_string} has no endfor", + dict_of(for_statement.for_string) + ) return for_statement.variable_name search = doc.createSearchDescriptor() @@ -87,7 +85,7 @@ def scan_single_for(local_x_found) -> str: for_vars = {} while x_found is not None: - variable_name = scan_single_for(x_found) + variable_name = scan_single_for(doc, x_found) for_vars[variable_name] = {'type': 'array', 'value': []} x_found = doc.findNext(x_found.End, search) return for_vars @@ -218,32 +216,37 @@ def manage_if_inside_for(content, local_variables, foritem_var, forindex): for_statement = ForStatement(local_x_found.getString()) foritem_vars = local_variables[for_statement.variable_name]['value'] - # remove the for statement from the odt - text = local_x_found.getText() - cursor = text.createTextCursorByRange(local_x_found) - cursor.String = '' - # select content between for and endfor (including endfor) - while True: - if not cursor.goRight(1, True): - raise errors.TemplateError( - 'no_endfor_found', - f"The statement {for_statement.for_string} has no endif", - dict_of(for_statement.for_string) - ) - selected_string = cursor.String - match = re.search(ForStatement.end_regex, selected_string, re.IGNORECASE) - if match is not None: - break + endfor_search = doc.createSearchDescriptor() + endfor_search.SearchString = ForStatement.end_regex + endfor_search.SearchRegularExpression = True + endfor_search.SearchCaseSensitive = False + x_found_endfor = doc.findNext(local_x_found.End, endfor_search) + if x_found_endfor is None: + raise errors.TemplateError( + 'no_endfor_found', + f"The statement {for_statement.for_string} has no endfor", + dict_of(for_statement.for_string) + ) + + for_text = local_x_found.getText() + endfor_text = x_found_endfor.getText() + for_cursor = for_text.createTextCursorByRange(local_x_found) + endfor_cursor = endfor_text.createTextCursorByRange(x_found_endfor) + content_cursor = for_text.createTextCursorByRange(local_x_found.End) + content_cursor.gotoRange(x_found_endfor.Start, True) + + # remove the for statement from the odt + for_cursor.String = '' # get the content between the for and the endfor - cursor.goLeft(len(match.group(0)), True) - template = cursor.String + template = content_cursor.String + # remove the content from the file - cursor.String = '' + content_cursor.String = '' + # remove the endfor at the end - cursor.goRight(len(match.group(0)), True) - cursor.String = '' + endfor_cursor.String = '' # loop on values of the variable counter = 0 @@ -265,7 +268,7 @@ def manage_if_inside_for(content, local_variables, foritem_var, forindex): ) # paste the content - text.insertString(cursor, content, False) + for_text.insertString(for_cursor, content, False) # counter increment counter += 1 diff --git a/lotemplate/Statement/HtmlStatement.py b/lotemplate/Statement/HtmlStatement.py index 61f0979..f278226 100644 --- a/lotemplate/Statement/HtmlStatement.py +++ b/lotemplate/Statement/HtmlStatement.py @@ -25,21 +25,18 @@ def scan_single_html(local_x_found) -> None: scan for a single for statement """ html_statement = HtmlStatement(local_x_found.getString()) - position_in_text = len(html_statement.html_string) - text = local_x_found.getText() - cursor = text.createTextCursorByRange(local_x_found) - while True: - if not cursor.goRight(1, True): - raise errors.TemplateError( - 'no_endhtml_found', - f"The statement {html_statement.html_string} has no endhtml", - dict_of(html_statement.html_string) - ) - position_in_text = position_in_text + 1 - selected_string = cursor.String - match = re.search(HtmlStatement.end_regex, selected_string, re.IGNORECASE) - if match is not None: - break + endhtml_search = doc.createSearchDescriptor() + endhtml_search.SearchString = HtmlStatement.end_regex + endhtml_search.SearchRegularExpression = True + endhtml_search.SearchCaseSensitive = False + x_found_endhtml = doc.findNext(local_x_found.End, endhtml_search) + if x_found_endhtml is None: + cursor = local_x_found.getText().createTextCursorByRange(local_x_found) + raise errors.TemplateError( + 'no_endhtml_found', + f"The statement [html] has no endhtml", + dict_of(cursor.String) + ) search = doc.createSearchDescriptor() search.SearchString = HtmlStatement.start_regex @@ -59,24 +56,30 @@ def html_replace(template, doc: XComponent) -> None: def compute_html(doc, local_x_found): html_statement = HtmlStatement(local_x_found.getString()) - text = local_x_found.getText() - cursor = text.createTextCursorByRange(local_x_found) - while True: - if not cursor.goRight(1, True): - raise errors.TemplateError( - 'no_endhtml_found', - f"The statement [html] has no endhtml", - dict_of(html_statement.html_string) - ) + endhtml_search = doc.createSearchDescriptor() + endhtml_search.SearchString = HtmlStatement.end_regex + endhtml_search.SearchRegularExpression = True + endhtml_search.SearchCaseSensitive = False + x_found_endhtml = doc.findNext(local_x_found.End, endhtml_search) + if x_found_endhtml is None: + cursor = local_x_found.getText().createTextCursorByRange(local_x_found) + raise errors.TemplateError( + 'no_endhtml_found', + f"The statement [html] has no endhtml", + dict_of(cursor.String) + ) - selected_string = cursor.String - match = re.search(HtmlStatement.end_regex, selected_string, re.IGNORECASE) - if match is not None: - break - cursor.String = '' - html_string = re.sub(HtmlStatement.end_regex, '', selected_string, flags=re.IGNORECASE) - html_string = re.sub(HtmlStatement.start_regex, '', html_string, flags=re.IGNORECASE) - template.pasteHtml(html_string, cursor) + html_text = local_x_found.getText() + endhtml_text = x_found_endhtml.getText() + html_cursor = html_text.createTextCursorByRange(local_x_found) + endhtml_cursor = endhtml_text.createTextCursorByRange(x_found_endhtml) + content_cursor = html_text.createTextCursorByRange(local_x_found.End) + content_cursor.gotoRange(x_found_endhtml.Start, True) + html_string = content_cursor.String + html_cursor.String = '' + endhtml_cursor.String = '' + content_cursor.String = '' + template.pasteHtml(html_string, content_cursor) # main of for_replace search = doc.createSearchDescriptor() diff --git a/lotemplate/Statement/IfStatement.py b/lotemplate/Statement/IfStatement.py index 983f9a5..426f58b 100644 --- a/lotemplate/Statement/IfStatement.py +++ b/lotemplate/Statement/IfStatement.py @@ -160,6 +160,19 @@ def find_if_to_compute(doc, search, x_found): search.SearchCaseSensitive = False x_found = doc.findFirst(search) find_if_to_compute(doc, search, x_found) + + # check if there is still a endif at the end and rase an error if it is the case + globalCursor = doc.getText().createTextCursor() + globalCursor.gotoEnd(True) + str = globalCursor.String + match = re.search(IfStatement.end_regex, str, re.IGNORECASE) + if match is not None: + raise errors.TemplateError( + 'too_many_endif_found', + f"The document has too many endif", + {} + ) + doc.dispose() diff --git a/lotemplate/classes.py b/lotemplate/classes.py index a49d590..040ecf9 100644 --- a/lotemplate/classes.py +++ b/lotemplate/classes.py @@ -33,6 +33,7 @@ from lotemplate.Statement.TextStatement import TextStatement from lotemplate.Statement.TableStatement import TableStatement from lotemplate.Statement.ImageStatement import ImageStatement +from lotemplate.Statement.CounterStatement import CounterManager class Connexion: @@ -199,6 +200,7 @@ def scan(self, **kwargs) -> dict[str: dict[str, Union[str, list[str]]]]: images = ImageStatement.scan_image(self.doc) fors = ForStatement.scan_for(self.doc) HtmlStatement.scan_html(self.doc) + CounterManager.scan_counter(self.doc) variables_list = list(texts.keys()) + list(tables.keys()) + list(images.keys()) + list(fors.keys()) duplicates = [variable for variable in variables_list if variables_list.count(variable) > 1] @@ -305,6 +307,8 @@ def fill(self, variables: dict[str, dict[str, Union[str, list[str]]]]) -> None: TableStatement.tables_fill(self.new, variables, '$', '&') + CounterManager.counter_replace(self.new) + def export(self, name: str, should_replace=False) -> Union[str, None]: """ Exports the newly generated document, if any. diff --git a/lotemplate/unittest/files/content/counter.expected.txt b/lotemplate/unittest/files/content/counter.expected.txt new file mode 100644 index 0000000..c60848e --- /dev/null +++ b/lotemplate/unittest/files/content/counter.expected.txt @@ -0,0 +1,65 @@ + +Basic counter + + + +chapter 1 : Introduction + +Text of the introduction + +chapter 2 : Context + +A ) political context + +lorem ipsum + +B ) geographical context + +lorem ipsum 2 + +chapter 3 : Solutions + + + + +A ) Title 1 + +Content no 1 + +B ) Title 2 + +Content no 2 + +C ) Title 3 + +Content no 3 + + +chapter 4 : Conclusion + +Lorem ipsum + + +Hierarchical counter + + + +chapter 1 : Context + +1.a ) political context + +lorem ipsum + +1.b ) geographical context + +lorem ipsum 2 + +chapter 2 : Context + +2.a ) political context + +lorem ipsum + +2.b ) geographical context + +lorem ipsum 2 diff --git a/lotemplate/unittest/files/content/counter.json b/lotemplate/unittest/files/content/counter.json new file mode 100644 index 0000000..f49ce08 --- /dev/null +++ b/lotemplate/unittest/files/content/counter.json @@ -0,0 +1,19 @@ +{ + "solutions": { + "type": "array", + "value": [ + { + "title": "Title 1", + "paragraph": "Content no 1" + }, + { + "title": "Title 2", + "paragraph": "Content no 2" + }, + { + "title": "Title 3", + "paragraph": "Content no 3" + } + ] + } +} \ No newline at end of file diff --git a/lotemplate/unittest/files/content/counter.odt b/lotemplate/unittest/files/content/counter.odt new file mode 100644 index 0000000000000000000000000000000000000000..3ca2f05866b68ff1ecccdae60bbef063bc8b4f35 GIT binary patch literal 24458 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

+KY93+<_d3^L-s275vp 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 literal 0 HcmV?d00001 diff --git a/lotemplate/unittest/files/templates/for_missing_endfor.odt b/lotemplate/unittest/files/templates/for_missing_endfor.odt new file mode 100644 index 0000000000000000000000000000000000000000..72595165710a0c032b5e1dda8821e340e8773cfc GIT binary patch literal 16711 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'VI8TXRb>{R(q<6A-Hw<9UCQ-a8G-o($RM z&jTSROrt(Ye#x77QYj;tUMw@gdm>iE^0T3HmMb1lNqGe;>z1Rmq>g_cdeU=Y77z9Y z7Z2-y+`nMI{J@8OywuS|t4+vB91@}_5I_0k)MtvaFK-;)No%|uHzo_R5bef(O#?2U zd}aY64>uE3DWcoq#ObkfKHceI7F>vCwli*%83dJMsVLfDbBD+@a9Tb#7^V$kz|^`;P{)7sN0K(kbXx1-FrwFx zaxZw8^$|n!T+j-0M5>Y4yW-Pe0}oJ_aH7ei`TDbRz?nXl2>{JrN$po#=9d?4F+#s+ z2W)oN9d_i)YIlD!-#4L|q)|a$N#J7%ZgSf0Jc=KxBQW|#{iEG2eq>whe18Qg3_N!` zP8H&dWE7HpmzoLnu_){NUjLkgT%91IlTBdEmq%h&dqcOA7~pc>Ne>yHjPf5I`Tv#M z{x_%o|IN4mFQwl{@$Uiv|Dp7I4B^jFf`3%{k3hq(HvL}R?@0fl^si{d?=$=V)c5}< zrQhQk|7!7n3x51d>Gu}@|2;qkyqB-<$Y4ex(4@TT-h#3qqJmNa<$O9m|D1r2`lcl* zsK84tDkVhwFM8x#CVpA0q*)K$N1qoagAw|f{O z56}>Q{=HrKMj-z3OaB`MwMOajab4gh?P~CVTLV zZoM8={9T^>lt6H?FIiE-`1>#AQaJcS9Y8y#HK$OJv*VC@cp7AuT02nF#7fz?k_v)G zmk&mba!TxFl5lpspClh8=^HY`{TUJiJ>fHB>++Nxijx`v=D46tLh-Zig-Ms|DQ>Vt z+&Hs$@i`M*yw7eDn9p$ei=YK}}YrlYhhx8}X^FQPKwO`b4 z^YHI2`hx`h&nSOwjsD-D{FxN}&p5wm(SHcwZ*cyDB>m4|f9=}h-+=u=n*L{$zfKuE z=zk8-UrE&egY-KO_|FXCUyPkUMC1+WU%SQ|srvUt{JZ6!DW$&{#D7TOTh_=MssA@V z@xNRBnLG50Zu*Brf&Ybk`tOE+&QbnrL)YGL{!BFbcgsJg$Nb80`9sQ)|D4hMyWKw} z&-`I$`Ib)ePpLG&qx?Qhf8ITQ?Z|(K7RNvA&obiRZ|o`%5X84X!?#Uml=Iiq{{gPS BuaN)% literal 0 HcmV?d00001 diff --git a/lotemplate/unittest/files/templates/if_too_many_endif.odt b/lotemplate/unittest/files/templates/if_too_many_endif.odt new file mode 100644 index 0000000000000000000000000000000000000000..f441504ce69953e2cdac813f15d8e8dda8eca13a GIT binary patch literal 25608 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