On Mon, Jul 22, 2024 at 10:42 AM jian he <jian.universal...@gmail.com> wrote: > hi. this time everything should be ok!
step1. python3 split_func_sgml.py step2. git apply v6-0001-all-filelist-for-directory-doc-src-sgml-func.patch (step2, cannot use "git am"). what v7_split_func_sgml.py did: 1. The new file only has 2 occurrences of "sect1" 2. Each new sgml file has its own unique identifier, e.g. for func-logical.sgml unique string is "<sect1 id="functions-logical">" 3. sed copy, inplace delete command string will be printed out. you can check the line number in func.sgml to verify the sed command.
From d123a7c9ef6ad45e3b697aa20bcfc831f594b45d Mon Sep 17 00:00:00 2001 From: jian he <jian.universal...@gmail.com> Date: Sun, 21 Jul 2024 20:43:45 +0800 Subject: [PATCH v6 1/1] all filelist for directory doc/src/sgml/func --- doc/src/sgml/filelist.sgml | 5 ++++- doc/src/sgml/func/allfiles.sgml | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 doc/src/sgml/func/allfiles.sgml diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index a7ff5f82..d9f36933 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -17,7 +17,10 @@ <!ENTITY datatype SYSTEM "datatype.sgml"> <!ENTITY ddl SYSTEM "ddl.sgml"> <!ENTITY dml SYSTEM "dml.sgml"> -<!ENTITY func SYSTEM "func.sgml"> + +<!ENTITY % allfiles_func SYSTEM "func/allfiles.sgml"> +%allfiles_func; + <!ENTITY indices SYSTEM "indices.sgml"> <!ENTITY json SYSTEM "json.sgml"> <!ENTITY mvcc SYSTEM "mvcc.sgml"> diff --git a/doc/src/sgml/func/allfiles.sgml b/doc/src/sgml/func/allfiles.sgml new file mode 100644 index 00000000..34eec608 --- /dev/null +++ b/doc/src/sgml/func/allfiles.sgml @@ -0,0 +1,40 @@ +<!-- +doc/src/sgml/func/allfiles.sgml +PostgreSQL documentation +Complete list of usable sgml source files in this directory. +--> + +<!-- function references --> + +<!ENTITY func SYSTEM "func.sgml"> +<!ENTITY func-logical SYSTEM "func-logical.sgml"> +<!ENTITY func-comparison SYSTEM "func-comparison.sgml"> +<!ENTITY func-math SYSTEM "func-math.sgml"> +<!ENTITY func-string SYSTEM "func-string.sgml"> +<!ENTITY func-binarystring SYSTEM "func-binarystring.sgml"> +<!ENTITY func-bitstring SYSTEM "func-bitstring.sgml"> +<!ENTITY func-matching SYSTEM "func-matching.sgml"> +<!ENTITY func-formatting SYSTEM "func-formatting.sgml"> +<!ENTITY func-datetime SYSTEM "func-datetime.sgml"> +<!ENTITY func-enum SYSTEM "func-enum.sgml"> +<!ENTITY func-geometry SYSTEM "func-geometry.sgml"> +<!ENTITY func-net SYSTEM "func-net.sgml"> +<!ENTITY func-textsearch SYSTEM "func-textsearch.sgml"> +<!ENTITY func-uuid SYSTEM "func-uuid.sgml"> +<!ENTITY func-xml SYSTEM "func-xml.sgml"> +<!ENTITY func-json SYSTEM "func-json.sgml"> +<!ENTITY func-sequence SYSTEM "func-sequence.sgml"> +<!ENTITY func-conditional SYSTEM "func-conditional.sgml"> +<!ENTITY func-array SYSTEM "func-array.sgml"> +<!ENTITY func-range SYSTEM "func-range.sgml"> +<!ENTITY func-aggregate SYSTEM "func-aggregate.sgml"> +<!ENTITY func-window SYSTEM "func-window.sgml"> +<!ENTITY func-merge-support SYSTEM "func-merge-support.sgml"> +<!ENTITY func-subquery SYSTEM "func-subquery.sgml"> +<!ENTITY func-comparisons SYSTEM "func-comparisons.sgml"> +<!ENTITY func-srf SYSTEM "func-srf.sgml"> +<!ENTITY func-info SYSTEM "func-info.sgml"> +<!ENTITY func-admin SYSTEM "func-admin.sgml"> +<!ENTITY func-trigger SYSTEM "func-trigger.sgml"> +<!ENTITY func-event-triggers SYSTEM "func-event-triggers.sgml"> +<!ENTITY func-statistics SYSTEM "func-statistics.sgml"> \ No newline at end of file -- 2.34.1
import subprocess import os import re top_dir = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]) top_dir = top_dir.decode().rstrip('\n') top_src_dir = top_dir + "/doc/src/sgml" os.chdir(top_src_dir) # func_logical="func-logical.sgml" func_comparison="func-comparison.sgml" func_math="func-math.sgml" func_string="func-string.sgml" func_binarystring="func-binarystring.sgml" func_bitstring="func-bitstring.sgml" func_matching="func-matching.sgml" func_formatting="func-formatting.sgml" func_datetime="func-datetime.sgml" func_enum="func-enum.sgml" func_geometry="func-geometry.sgml" func_net="func-net.sgml" func_textsearch="func-textsearch.sgml" func_uuid="func-uuid.sgml" func_xml="func-xml.sgml" func_json="func-json.sgml" func_sequence="func-sequence.sgml" func_conditional="func-conditional.sgml" func_array="func-array.sgml" func_range="func-range.sgml" func_aggregate="func-aggregate.sgml" func_window="func-window.sgml" func_merge_support ="func-merge-support.sgml" func_subquery="func-subquery.sgml" func_comparisons="func-comparisons.sgml" func_srf="func-srf.sgml" func_info="func-info.sgml" func_admin="func-admin.sgml" func_trigger="func-trigger.sgml" func_event_triggers="func-event-triggers.sgml" func_statistics="func-statistics.sgml" # func_filenames = list() func_filenames.append(func_logical) func_filenames.append(func_comparison) func_filenames.append(func_math) func_filenames.append(func_string) func_filenames.append(func_binarystring) func_filenames.append(func_bitstring) func_filenames.append(func_matching) func_filenames.append(func_formatting) func_filenames.append(func_datetime) func_filenames.append(func_enum) func_filenames.append(func_geometry) func_filenames.append(func_net) func_filenames.append(func_textsearch) func_filenames.append(func_uuid) func_filenames.append(func_xml) func_filenames.append(func_json) func_filenames.append(func_sequence) func_filenames.append(func_conditional) func_filenames.append(func_array) func_filenames.append(func_range) func_filenames.append(func_aggregate) func_filenames.append(func_window) func_filenames.append(func_merge_support ) func_filenames.append(func_subquery) func_filenames.append(func_comparisons) func_filenames.append(func_srf) func_filenames.append(func_info) func_filenames.append(func_admin) func_filenames.append(func_trigger) func_filenames.append(func_event_triggers) func_filenames.append(func_statistics) # func_string_begin_lineno= -1 func_logical_begin_lineno=-1 func_comparison_begin_lineno=-1 func_math_begin_lineno=-1 func_string_begin_lineno=-1 func_binarystring_begin_lineno=-1 func_bitstring_begin_lineno=-1 func_matching_begin_lineno=-1 func_formatting_begin_lineno=-1 func_datetime_begin_lineno=-1 func_enum_begin_lineno=-1 func_geometry_begin_lineno=-1 func_net_begin_lineno=-1 func_textsearch_begin_lineno=-1 func_uuid_begin_lineno=-1 func_xml_begin_lineno=-1 func_json_begin_lineno=-1 func_sequence_begin_lineno=-1 func_conditional_begin_lineno=-1 func_array_begin_lineno=-1 func_range_begin_lineno=-1 func_aggregate_begin_lineno=-1 func_window_begin_lineno=-1 func_merge_support_begin_lineno=-1 func_subquery_begin_lineno=-1 func_comparisons_begin_lineno=-1 func_srf_begin_lineno=-1 func_info_begin_lineno=-1 func_admin_begin_lineno=-1 func_trigger_begin_lineno=-1 func_event_triggers_begin_lineno=-1 func_statistics_begin_lineno=-1 # func_logical_end_lineno=-1 func_comparison_end_lineno=-1 func_math_end_lineno=-1 func_string_end_lineno=-1 func_binarystring_end_lineno=-1 func_bitstring_end_lineno=-1 func_matching_end_lineno=-1 func_formatting_end_lineno=-1 func_datetime_end_lineno=-1 func_enum_end_lineno=-1 func_geometry_end_lineno=-1 func_net_end_lineno=-1 func_textsearch_end_lineno=-1 func_uuid_end_lineno=-1 func_xml_end_lineno=-1 func_json_end_lineno=-1 func_sequence_end_lineno=-1 func_conditional_end_lineno=-1 func_array_end_lineno=-1 func_range_end_lineno=-1 func_aggregate_end_lineno=-1 func_window_end_lineno=-1 func_merge_support_end_lineno=-1 func_subquery_end_lineno=-1 func_comparisons_end_lineno=-1 func_srf_end_lineno=-1 func_info_end_lineno=-1 func_admin_end_lineno=-1 func_trigger_end_lineno=-1 func_event_triggers_end_lineno=-1 #that's the last sect1 location in the original func.sgml, we need hardcode it. func_statistics_end_lineno=31446 def get_line_number(file_name: str): global func_logical_begin_lineno global func_comparison_begin_lineno global func_math_begin_lineno global func_string_begin_lineno global func_binarystring_begin_lineno global func_bitstring_begin_lineno global func_matching_begin_lineno global func_formatting_begin_lineno global func_datetime_begin_lineno global func_enum_begin_lineno global func_geometry_begin_lineno global func_net_begin_lineno global func_textsearch_begin_lineno global func_uuid_begin_lineno global func_xml_begin_lineno global func_json_begin_lineno global func_sequence_begin_lineno global func_conditional_begin_lineno global func_array_begin_lineno global func_range_begin_lineno global func_aggregate_begin_lineno global func_window_begin_lineno global func_merge_support_begin_lineno global func_subquery_begin_lineno global func_comparisons_begin_lineno global func_srf_begin_lineno global func_info_begin_lineno global func_admin_begin_lineno global func_trigger_begin_lineno global func_event_triggers_begin_lineno global func_statistics_begin_lineno global func_logical_end_lineno global func_comparison_end_lineno global func_math_end_lineno global func_string_end_lineno global func_binarystring_end_lineno global func_bitstring_end_lineno global func_matching_end_lineno global func_formatting_end_lineno global func_datetime_end_lineno global func_enum_end_lineno global func_geometry_end_lineno global func_net_end_lineno global func_textsearch_end_lineno global func_uuid_end_lineno global func_xml_end_lineno global func_json_end_lineno global func_sequence_end_lineno global func_conditional_end_lineno global func_array_end_lineno global func_range_end_lineno global func_aggregate_end_lineno global func_window_end_lineno global func_merge_support_end_lineno global func_subquery_end_lineno global func_comparisons_end_lineno global func_srf_end_lineno global func_info_end_lineno global func_admin_end_lineno global func_trigger_end_lineno global func_event_triggers_end_lineno global func_statistics_end_lineno with open(file_name, 'r+') as f: for i, line in enumerate(f, 1): if r'<sect1 id="functions-logical">' in line : func_logical_begin_lineno = i elif r'<sect1 id="functions-comparison">' in line : func_comparison_begin_lineno = i func_logical_end_lineno = i - 1 elif r'<sect1 id="functions-math">' in line : func_comparison_end_lineno = i - 1 func_math_begin_lineno = i elif r'<sect1 id="functions-string">' in line : func_math_end_lineno = i - 1 func_string_begin_lineno = i elif r'<sect1 id="functions-binarystring">' in line : func_string_end_lineno = i - 1 func_binarystring_begin_lineno = i elif r'<sect1 id="functions-bitstring">' in line : func_binarystring_end_lineno = i - 1 func_bitstring_begin_lineno = i elif r'<sect1 id="functions-matching">' in line : func_bitstring_end_lineno = i - 1 func_matching_begin_lineno = i elif r'<sect1 id="functions-formatting">' in line : func_matching_end_lineno = i - 1 func_formatting_begin_lineno = i elif r'<sect1 id="functions-datetime">' in line : func_formatting_end_lineno = i - 1 func_datetime_begin_lineno = i elif r'<sect1 id="functions-enum">' in line : func_datetime_end_lineno = i - 1 func_enum_begin_lineno = i elif r'<sect1 id="functions-geometry">' in line : func_enum_end_lineno = i - 1 func_geometry_begin_lineno = i elif r'<sect1 id="functions-net">' in line : func_geometry_end_lineno = i - 1 func_net_begin_lineno = i elif r'<sect1 id="functions-textsearch">' in line : func_net_end_lineno = i - 1 func_textsearch_begin_lineno = i elif r'<sect1 id="functions-uuid">' in line : func_textsearch_end_lineno = i - 1 func_uuid_begin_lineno = i elif r'<sect1 id="functions-xml">' in line : func_uuid_end_lineno = i - 1 func_xml_begin_lineno = i elif r'<sect1 id="functions-json">' in line : func_xml_end_lineno = i - 1 func_json_begin_lineno = i elif r'<sect1 id="functions-sequence">' in line : func_json_end_lineno = i - 1 func_sequence_begin_lineno = i elif r'<sect1 id="functions-conditional">' in line : func_sequence_end_lineno = i - 1 func_conditional_begin_lineno = i elif r'<sect1 id="functions-array">' in line : func_conditional_end_lineno = i - 1 func_array_begin_lineno = i elif r'<sect1 id="functions-range">' in line : func_array_end_lineno = i - 1 func_range_begin_lineno = i elif r'<sect1 id="functions-aggregate">' in line : func_range_end_lineno = i - 1 func_aggregate_begin_lineno = i elif r'<sect1 id="functions-window">' in line : func_aggregate_end_lineno = i - 1 func_window_begin_lineno = i elif r'<sect1 id="functions-merge-support">' in line : func_window_end_lineno = i - 1 func_merge_support_begin_lineno = i elif r'<sect1 id="functions-subquery">' in line : func_merge_support_end_lineno = i - 1 func_subquery_begin_lineno = i elif r'<sect1 id="functions-comparisons">' in line : func_subquery_end_lineno = i - 1 func_comparisons_begin_lineno = i elif r'<sect1 id="functions-srf">' in line : func_comparisons_end_lineno = i - 1 func_srf_begin_lineno = i elif r'<sect1 id="functions-info">' in line : func_srf_end_lineno = i - 1 func_info_begin_lineno = i elif r'<sect1 id="functions-admin">' in line : func_info_end_lineno = i - 1 func_admin_begin_lineno = i elif r'<sect1 id="functions-trigger">' in line : func_admin_end_lineno = i - 1 func_trigger_begin_lineno = i elif r'<sect1 id="functions-event-triggers">' in line : func_trigger_end_lineno = i - 1 func_event_triggers_begin_lineno = i elif r'<sect1 id="functions-statistics">' in line : func_event_triggers_end_lineno = i - 1 func_statistics_begin_lineno = i #line number is important property. #line number begin with "<sect1 id=", end with "</sect1>" def precheck_line_no_begin(): if ((func_logical_begin_lineno < 0) or (func_comparison_begin_lineno < 0) or (func_math_begin_lineno < 0) or (func_string_begin_lineno < 0) or (func_binarystring_begin_lineno < 0) or (func_bitstring_begin_lineno < 0) or (func_matching_begin_lineno < 0) or (func_formatting_begin_lineno < 0) or (func_datetime_begin_lineno < 0) or (func_enum_begin_lineno < 0) or (func_geometry_begin_lineno < 0) or (func_net_begin_lineno < 0) or (func_textsearch_begin_lineno < 0) or (func_uuid_begin_lineno < 0) or (func_xml_begin_lineno < 0) or (func_json_begin_lineno < 0) or (func_sequence_begin_lineno < 0) or (func_conditional_begin_lineno < 0) or (func_array_begin_lineno < 0) or (func_range_begin_lineno < 0) or (func_aggregate_begin_lineno < 0) or (func_window_begin_lineno < 0) or (func_merge_support_begin_lineno < 0) or (func_subquery_begin_lineno < 0) or (func_comparisons_begin_lineno < 0) or (func_srf_begin_lineno < 0) or (func_info_begin_lineno < 0) or (func_admin_begin_lineno < 0) or (func_trigger_begin_lineno < 0) or (func_event_triggers_begin_lineno < 0) or (func_statistics_begin_lineno < 0)): ValueError("don't have related file") print("quiting line numbers begin is invalid") quit() def precheck_line_no_end(): if ((func_logical_end_lineno < 0) or (func_comparison_end_lineno < 0) or (func_math_end_lineno < 0) or (func_string_end_lineno < 0) or (func_binarystring_end_lineno < 0) or (func_bitstring_end_lineno < 0) or (func_matching_end_lineno < 0) or (func_formatting_end_lineno < 0) or (func_datetime_end_lineno < 0) or (func_enum_end_lineno < 0) or (func_geometry_end_lineno < 0) or (func_net_end_lineno < 0) or (func_textsearch_end_lineno < 0) or (func_uuid_end_lineno < 0) or (func_xml_end_lineno < 0) or (func_json_end_lineno < 0) or (func_sequence_end_lineno < 0) or (func_conditional_end_lineno < 0) or (func_array_end_lineno < 0) or (func_range_end_lineno < 0) or (func_aggregate_end_lineno < 0) or (func_window_end_lineno < 0) or (func_merge_support_end_lineno < 0) or (func_subquery_end_lineno < 0) or (func_comparisons_end_lineno < 0) or (func_srf_end_lineno < 0) or (func_info_end_lineno < 0) or (func_admin_end_lineno < 0) or (func_trigger_end_lineno < 0) or (func_event_triggers_end_lineno < 0) or (func_statistics_end_lineno < 0)): ValueError("don't have related file") print("quiting line numbers end is invalid") quit() #--------------------------step1. create func directory and move original func.sgml to func directory. target_file="func.sgml" os.mkdir(top_src_dir+ "/func") #make func directory os.chdir(top_src_dir+ "/func") print ("Updated directory:" , os.getcwd()) subprocess.call(["git", "add", "."]) subprocess.call(["mv","../func.sgml", "func.sgml"]) for x in func_filenames: subprocess.call(["touch", x]) # get the line number info and validate it. get_line_number(target_file) precheck_line_no_begin() precheck_line_no_end() #--------------------------step2 construct sed commands and execute it sed_copy_commands = list() sed_copy_commands.append( f"sed -n '{func_logical_begin_lineno}, {func_logical_end_lineno}p' {target_file} > {func_logical}") sed_copy_commands.append( f"sed -n '{func_comparison_begin_lineno}, {func_comparison_end_lineno}p' {target_file} > {func_comparison}") sed_copy_commands.append( f"sed -n '{func_math_begin_lineno}, {func_math_end_lineno}p' {target_file} > {func_math}") sed_copy_commands.append( f"sed -n '{func_string_begin_lineno}, {func_string_end_lineno}p' {target_file} > {func_string}") sed_copy_commands.append( f"sed -n '{func_binarystring_begin_lineno}, {func_binarystring_end_lineno}p' {target_file} > {func_binarystring}") sed_copy_commands.append( f"sed -n '{func_bitstring_begin_lineno}, {func_bitstring_end_lineno}p' {target_file} > {func_bitstring}") sed_copy_commands.append( f"sed -n '{func_matching_begin_lineno}, {func_matching_end_lineno}p' {target_file} > {func_matching}") sed_copy_commands.append( f"sed -n '{func_formatting_begin_lineno}, {func_formatting_end_lineno}p' {target_file} > {func_formatting}") sed_copy_commands.append( f"sed -n '{func_datetime_begin_lineno}, {func_datetime_end_lineno}p' {target_file} > {func_datetime}") sed_copy_commands.append( f"sed -n '{func_enum_begin_lineno}, {func_enum_end_lineno}p' {target_file} > {func_enum}") sed_copy_commands.append( f"sed -n '{func_geometry_begin_lineno}, {func_geometry_end_lineno}p' {target_file} > {func_geometry}") sed_copy_commands.append( f"sed -n '{func_net_begin_lineno}, {func_net_end_lineno}p' {target_file} > {func_net}") sed_copy_commands.append( f"sed -n '{func_textsearch_begin_lineno}, {func_textsearch_end_lineno}p' {target_file} > {func_textsearch}") sed_copy_commands.append( f"sed -n '{func_uuid_begin_lineno}, {func_uuid_end_lineno}p' {target_file} > {func_uuid}") sed_copy_commands.append( f"sed -n '{func_xml_begin_lineno}, {func_xml_end_lineno}p' {target_file} > {func_xml}") sed_copy_commands.append( f"sed -n '{func_json_begin_lineno}, {func_json_end_lineno}p' {target_file} > {func_json}") sed_copy_commands.append( f"sed -n '{func_sequence_begin_lineno}, {func_sequence_end_lineno}p' {target_file} > {func_sequence}") sed_copy_commands.append( f"sed -n '{func_conditional_begin_lineno}, {func_conditional_end_lineno}p' {target_file} > {func_conditional}") sed_copy_commands.append( f'sed -n \'{func_array_begin_lineno}, {func_array_end_lineno}p\' {target_file} > {func_array}') sed_copy_commands.append( f'sed -n \'{func_range_begin_lineno}, {func_range_end_lineno}p\' {target_file} > {func_range}') sed_copy_commands.append( f'sed -n \'{func_aggregate_begin_lineno}, {func_aggregate_end_lineno}p\' {target_file} > {func_aggregate}') sed_copy_commands.append( f'sed -n \'{func_window_begin_lineno}, {func_window_end_lineno}p\' {target_file} > {func_window}') sed_copy_commands.append( f'sed -n \'{func_merge_support_begin_lineno}, {func_merge_support_end_lineno}p\' {target_file} > {func_merge_support}') sed_copy_commands.append( f'sed -n \'{func_subquery_begin_lineno}, {func_subquery_end_lineno}p\' {target_file} > {func_subquery}') sed_copy_commands.append( f'sed -n \'{func_comparisons_begin_lineno}, {func_comparisons_end_lineno}p\' {target_file} > {func_comparisons}') sed_copy_commands.append( f'sed -n \'{func_srf_begin_lineno}, {func_srf_end_lineno}p\' {target_file} > {func_srf}') sed_copy_commands.append( f'sed -n \'{func_info_begin_lineno}, {func_info_end_lineno}p\' {target_file} > {func_info}') sed_copy_commands.append( f'sed -n \'{func_admin_begin_lineno}, {func_admin_end_lineno}p\' {target_file} > {func_admin}') sed_copy_commands.append( f'sed -n \'{func_trigger_begin_lineno}, {func_trigger_end_lineno}p\' {target_file} > {func_trigger}') sed_copy_commands.append( f'sed -n \'{func_event_triggers_begin_lineno}, {func_event_triggers_end_lineno}p\' {target_file} > {func_event_triggers}') sed_copy_commands.append( f'sed -n \'{func_statistics_begin_lineno}, {func_statistics_end_lineno}p\' {target_file} > {func_statistics}') # sed -n '31362, 31269p' func.sgml > func-statistics.sgml print(f'sed command for copying func.sgml content to new sgml file') for x in sed_copy_commands: print(f'{x}') subprocess.call([x], shell=True) #--------------------------step3 validate new file only have 2 "sect1". #validate new file have 2 occurences of "sect1" def validate_new_file_sect1(file_name: str, pattern: str): matches_all = [] with open(file_name, 'r+') as f: for i, line in enumerate(f, 1): matches = re.findall(pattern, line) if (len(matches) > 0): matches_all = matches_all + matches if (len(matches_all) != 2): print(f'{file_name} should only have 2 \"{pattern}\" attribute. now quit') quit() for x in func_filenames: validate_new_file_sect1(x, "sect1") def validate_new_file_sect1id(file_name: str, pattern: str): matches_all = [] with open(file_name, 'r+') as f: for i, line in enumerate(f, 1): matches = re.findall(pattern, line) if (len(matches) > 0): matches_all = matches_all + matches if (len(matches_all) != 1): print(f'{file_name} should only have 1 \"{pattern}\" attribute. now quit') quit() #-------- validate new files "<sect1 id.*"is unique.". validate_new_file_sect1id(func_logical,r'<sect1 id="functions-logical">') validate_new_file_sect1id(func_comparison,r'<sect1 id="functions-comparison">') validate_new_file_sect1id(func_math,r'<sect1 id="functions-math">') validate_new_file_sect1id(func_string, r'<sect1 id="functions-string">') validate_new_file_sect1id(func_binarystring,r'<sect1 id="functions-binarystring">') validate_new_file_sect1id(func_bitstring,r'<sect1 id="functions-bitstring">') validate_new_file_sect1id(func_matching,r'<sect1 id="functions-matching">') validate_new_file_sect1id(func_formatting,r'<sect1 id="functions-formatting">') validate_new_file_sect1id(func_datetime,r'<sect1 id="functions-datetime">') validate_new_file_sect1id(func_enum,r'<sect1 id="functions-enum">') validate_new_file_sect1id(func_geometry,r'<sect1 id="functions-geometry">') validate_new_file_sect1id(func_net,r'<sect1 id="functions-net">') validate_new_file_sect1id(func_textsearch,r'<sect1 id="functions-textsearch">') validate_new_file_sect1id(func_uuid,r'<sect1 id="functions-uuid">') validate_new_file_sect1id(func_xml,r'<sect1 id="functions-xml">') validate_new_file_sect1id(func_json,r'<sect1 id="functions-json">') validate_new_file_sect1id(func_sequence,r'<sect1 id="functions-sequence">') validate_new_file_sect1id(func_conditional,r'<sect1 id="functions-conditional">') validate_new_file_sect1id(func_array,r'<sect1 id="functions-array">') validate_new_file_sect1id(func_range,r'<sect1 id="functions-range">') validate_new_file_sect1id(func_aggregate,r'<sect1 id="functions-aggregate">') validate_new_file_sect1id(func_window,r'<sect1 id="functions-window">') validate_new_file_sect1id(func_merge_support,r'<sect1 id="functions-merge-support">') validate_new_file_sect1id(func_subquery,r'<sect1 id="functions-subquery">') validate_new_file_sect1id(func_comparisons,r'<sect1 id="functions-comparisons">') validate_new_file_sect1id(func_srf,r'<sect1 id="functions-srf">') validate_new_file_sect1id(func_info,r'<sect1 id="functions-info">') validate_new_file_sect1id(func_admin,r'<sect1 id="functions-admin">') validate_new_file_sect1id(func_trigger,r'<sect1 id="functions-trigger">') validate_new_file_sect1id(func_event_triggers,r'<sect1 id="functions-event-triggers">') validate_new_file_sect1id(func_statistics,r'<sect1 id="functions-statistics">') sed_in_place_delete_all = \ 'sed --in-place "{0},{1}d ; {2},{3}d ; {4},{5}d ; {6},{7}d ; {8},{9}d ; \ {10},{11}d ; {12},{13}d ; {14},{15}d ; {16},{17}d ; {18},{19}d ; {20},{21}d ; \ {22},{23}d ; {24},{25}d ; {26},{27}d ; {28},{29}d ; {30},{31}d ; \ {32},{33}d ; {34},{35}d ; {36},{37}d ; {38},{39}d ; {40},{41}d ; \ {42},{43}d ; {44},{45}d ; {46},{47}d ; {48},{49}d ; {50},{51}d ; \ {52},{53}d ; {54},{55}d ; {56},{57}d ; {58},{59}d; {60},{61}d" '.format( func_logical_begin_lineno, func_logical_end_lineno, func_comparison_begin_lineno, func_comparison_end_lineno, func_math_begin_lineno, func_math_end_lineno, func_string_begin_lineno, func_string_end_lineno, func_binarystring_begin_lineno, func_binarystring_end_lineno, func_bitstring_begin_lineno, func_bitstring_end_lineno, func_matching_begin_lineno, func_matching_end_lineno, func_formatting_begin_lineno, func_formatting_end_lineno, func_datetime_begin_lineno, func_datetime_end_lineno, func_enum_begin_lineno, func_enum_end_lineno, func_geometry_begin_lineno, func_geometry_end_lineno, func_net_begin_lineno, func_net_end_lineno, func_textsearch_begin_lineno, func_textsearch_end_lineno, func_uuid_begin_lineno, func_uuid_end_lineno, func_xml_begin_lineno, func_xml_end_lineno, func_json_begin_lineno, func_json_end_lineno, func_sequence_begin_lineno, func_sequence_end_lineno, func_conditional_begin_lineno, func_conditional_end_lineno, func_array_begin_lineno, func_array_end_lineno, func_range_begin_lineno, func_range_end_lineno, func_aggregate_begin_lineno, func_aggregate_end_lineno, func_window_begin_lineno, func_window_end_lineno, func_merge_support_begin_lineno, func_merge_support_end_lineno, func_subquery_begin_lineno, func_subquery_end_lineno, func_comparisons_begin_lineno, func_comparisons_end_lineno, func_srf_begin_lineno, func_srf_end_lineno, func_info_begin_lineno, func_info_end_lineno, func_admin_begin_lineno, func_admin_end_lineno, func_trigger_begin_lineno, func_trigger_end_lineno, func_event_triggers_begin_lineno, func_event_triggers_end_lineno, func_statistics_begin_lineno, func_statistics_end_lineno ) sed_in_place_delete_all = sed_in_place_delete_all + target_file #print out sed in-place delete command print(f'sed_in_place_delete_all: {sed_in_place_delete_all}') #and run the delete command subprocess.call([sed_in_place_delete_all], shell=True) all_func_sgml_place_holder = """&func-logical; &func-comparison; &func-math; &func-string; &func-binarystring; &func-bitstring; &func-matching; &func-formatting; &func-datetime; &func-enum; &func-geometry; &func-net; &func-textsearch; &func-uuid; &func-xml; &func-json; &func-sequence; &func-conditional; &func-array; &func-range; &func-aggregate; &func-window; &func-merge-support; &func-subquery; &func-comparisons; &func-srf; &func-info; &func-admin; &func-trigger; &func-event-triggers; &func-statistics; """ # insert content before line X in file_name def write_line(file_name:str, line:int, content:str): line -= 1 # Python starts counting at 0, but people start counting at one. This accounts for that. with open(file_name, "r") as file: # Open the file in read mode lines = file.readlines() # Assign the file as a list to a variable lines[line] = lines[line] + content # concatenate the content with open(file_name, "w") as file: # Open the file in write mode file.write("".join(lines)) # Write the modified content to the file #write the all_func_sgml_place_holder string to func.sgml after line 50. write_line("func.sgml", 50, all_func_sgml_place_holder) #git related commmand. os.chdir(top_src_dir+ "/func") print ("Updated directory:" , os.getcwd()) subprocess.call(["git", "add", "./*"])