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

Reply via email to