hi.
move to a new thread.
Since the old thread[1], many things have interacted together.
we are going to split func.sgml to 31 inviduaul sgml files.
the new file name pattern is "func-" as the prefix.
all the func-*.sgml files stored in doc/src/sgml/func
based on the original func.sgml line number,
each file has a line beginning and line end,
which is why the python script is long.
python3 v1-0001-split_func_sgml.py
git apply v1-0001-all-filelist-for-directory-doc-src-sgml-func.patch
execute the above two commands, we should go good to go.
The following is step-by-step logic.
#--step0 get line number info, and validate it.
in func.sgml, we have 62 "sect1", these corresponding to the line
begin and line end of the new sgml file.
so in func.sgml, we locate and validate it.
later we use the SED command to do the copy, and need these line
number information.
#--step1. create doc/src/sgml/func directory, move func.sgml to there.
create each new empty invidual sgml file
#---step2 construct sed copy commands and execute it.
This will roughly copy func.sgml content from line 52 to line 31655 to
corresponding new individual sgml file, based on
line number information.
#-----step3 validates that the new file only has 2 "sect1". also
validate new files "<sect1 id.*"is unique.".
just to make sure the output works fine.
#---setp4 truncate func.sgml begins from line 52.
#---step5 append place-holder string to func.sgml
[1]
https://www.postgresql.org/message-id/flat/CA%2BTgmoZ2F%2BK0j%3D6BOJLD%3DYfpJMdJRXC7sWmtXGRjx1Rq0x8PUA%40mail.gmail.com
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"
#goto doc/src/sgml directory, exit when not exists
try:
os.chdir(top_src_dir)
except FileNotFoundError:
print(f'{top_src_dir} not does not exist. SKIPPED')
quit()
target_file="func.sgml"
#
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
#based on line number pattern in func.sgml
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 - 2
elif r'<sect1 id="functions-math">' in line :
func_comparison_end_lineno = i - 2
func_math_begin_lineno = i
elif r'<sect1 id="functions-string">' in line :
func_math_end_lineno = i - 3
func_string_begin_lineno = i
elif r'<sect1 id="functions-binarystring">' in line :
func_string_end_lineno = i - 3
func_binarystring_begin_lineno = i
elif r'<sect1 id="functions-bitstring">' in line :
func_binarystring_end_lineno = i - 3
func_bitstring_begin_lineno = i
elif r'<sect1 id="functions-matching">' in line :
func_bitstring_end_lineno = i - 3
func_matching_begin_lineno = i
elif r'<sect1 id="functions-formatting">' in line :
func_matching_end_lineno = i - 3
func_formatting_begin_lineno = i
elif r'<sect1 id="functions-datetime">' in line :
func_formatting_end_lineno = i - 3
func_datetime_begin_lineno = i
elif r'<sect1 id="functions-enum">' in line :
func_datetime_end_lineno = i - 3
func_enum_begin_lineno = i
elif r'<sect1 id="functions-geometry">' in line :
func_enum_end_lineno = i - 2
func_geometry_begin_lineno = i
elif r'<sect1 id="functions-net">' in line :
func_geometry_end_lineno = i - 3
func_net_begin_lineno = i
elif r'<sect1 id="functions-textsearch">' in line :
func_net_end_lineno = i - 3
func_textsearch_begin_lineno = i
elif r'<sect1 id="functions-uuid">' in line :
func_textsearch_end_lineno = i - 2
func_uuid_begin_lineno = i
elif r'<sect1 id="functions-xml">' in line :
func_uuid_end_lineno = i - 2
func_xml_begin_lineno = i
elif r'<sect1 id="functions-json">' in line :
func_xml_end_lineno = i - 2
func_json_begin_lineno = i
elif r'<sect1 id="functions-sequence">' in line :
func_json_end_lineno = i - 2
func_sequence_begin_lineno = i
elif r'<sect1 id="functions-conditional">' in line :
func_sequence_end_lineno = i - 3
func_conditional_begin_lineno = i
elif r'<sect1 id="functions-array">' in line :
func_conditional_end_lineno = i - 2
func_array_begin_lineno = i
elif r'<sect1 id="functions-range">' in line :
func_array_end_lineno = i - 2
func_range_begin_lineno = i
elif r'<sect1 id="functions-aggregate">' in line :
func_range_end_lineno = i - 2
func_aggregate_begin_lineno = i
elif r'<sect1 id="functions-window">' in line :
func_aggregate_end_lineno = i - 2
func_window_begin_lineno = i
elif r'<sect1 id="functions-merge-support">' in line :
func_window_end_lineno = i - 2
func_merge_support_begin_lineno = i
elif r'<sect1 id="functions-subquery">' in line :
func_merge_support_end_lineno = i - 2
func_subquery_begin_lineno = i
elif r'<sect1 id="functions-comparisons">' in line :
func_subquery_end_lineno = i - 3
func_comparisons_begin_lineno = i
elif r'<sect1 id="functions-srf">' in line :
func_comparisons_end_lineno = i - 2
func_srf_begin_lineno = i
elif r'<sect1 id="functions-info">' in line :
func_srf_end_lineno = i - 2
func_info_begin_lineno = i
elif r'<sect1 id="functions-admin">' in line :
func_info_end_lineno = i - 2
func_admin_begin_lineno = i
elif r'<sect1 id="functions-trigger">' in line :
func_admin_end_lineno = i - 2
func_trigger_begin_lineno = i
elif r'<sect1 id="functions-event-triggers">' in line :
func_trigger_end_lineno = i - 2
func_event_triggers_begin_lineno = i
elif r'<sect1 id="functions-statistics">' in line :
func_event_triggers_end_lineno = i - 2
func_statistics_begin_lineno = i
elif r'</chapter>' in line :
#check the end of doc/src/sgml/func.sgml. that's the relative position of last occurence of "</sect1>"
func_statistics_end_lineno = i -2
#line number is important property. they should strict following the order.
def validate_line_number():
if (not
(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)):
ValueError("don't have related file")
print("quiting line numbers begin is invalidXXX ")
quit()
#--step0 get line number info, and validate it.
get_line_number(target_file)
validate_line_number()
#--step1. create doc/src/sgml/func directory, move func.sgml to there. create each invidual sgml file
os.mkdir(top_src_dir+ "/func")
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])
#---step2 construct sed copy 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}')
print(f'sed command for copying func.sgml content to new sgml file\n')
# https://superuser.com/questions/852404/what-does-n-option-in-sed-do
for x in sed_copy_commands:
print(f'sed copy command=> {x}')
subprocess.call([x], shell=True)
#-----step3 validate that the new file only have 2 "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()
#------step3 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">')
#construct the place-holder string in func.sgml
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;
</chapter>
"""
#---step4 truncate func.sgml BEGIN from line contain <sect1 id="functions-logical">' (inclusive)
# that's why "func_logical_begin_lineno -1"
sed_truncate= f"sed -i {func_logical_begin_lineno -1}q {target_file}"
print(f'sed command truncate func.sgml=> {sed_truncate}')
subprocess.call(sed_truncate, shell=True)
# insert content before line X in file_name
def write_line(file_name:str, line:int, content:str):
line -= 1
with open(file_name, "r") as file:
lines = file.readlines()
lines[line] = lines[line] + content # concatenate the content
with open(file_name, "w") as file:
file.write("".join(lines)) # Write the modified content to the file
#---step5 write place-holder string to func.sgml. because of sed_truncate, begin with func_logical_begin_lineno -1
write_line(target_file, (func_logical_begin_lineno -1), all_func_sgml_place_holder)
#git related.
os.chdir(top_src_dir+ "/func")
print ("Updated directory:" , os.getcwd())
subprocess.call(["git", "add", "./*"])
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