|
|
@@ -122,8 +122,11 @@ class class_do_render_namumark:
|
|
|
self.render_data = re.sub(r"~~((?:(?!~~).)+)~~", do_render_text_strike, self.render_data)
|
|
|
|
|
|
def do_render_heading(self):
|
|
|
+ toc_list = []
|
|
|
+
|
|
|
heading_regex = r'\n((={1,6})(#?) ?([^\n]+))\n'
|
|
|
heading_count_all = len(re.findall(heading_regex, self.render_data)) * 3
|
|
|
+ heading_stack = [0, 0, 0, 0, 0, 0]
|
|
|
while 1:
|
|
|
if not re.search(heading_regex, self.render_data):
|
|
|
break
|
|
|
@@ -134,14 +137,16 @@ class class_do_render_namumark:
|
|
|
else:
|
|
|
heading_data = re.search(heading_regex, self.render_data)
|
|
|
heading_data = heading_data.groups()
|
|
|
-
|
|
|
+
|
|
|
heading_data_last_regex = r' ?(#?={1,6})$'
|
|
|
heading_data_last = re.search(heading_data_last_regex, heading_data[3])
|
|
|
+ heading_data_last = heading_data_last.group(1)
|
|
|
heading_data_text = re.sub(heading_data_last_regex, '', heading_data[3])
|
|
|
|
|
|
- # front != back -> restore
|
|
|
heading_data_diff = heading_data[2] + heading_data[1]
|
|
|
if heading_data_diff != heading_data_last:
|
|
|
+ # front != back -> restore
|
|
|
+
|
|
|
heading_data_all = heading_data[0]
|
|
|
|
|
|
for for_a in reversed(range(1, 7)):
|
|
|
@@ -153,19 +158,63 @@ class class_do_render_namumark:
|
|
|
|
|
|
self.render_data = re.sub(heading_regex, '\n' + heading_data_all + '\n', self.render_data, 1)
|
|
|
else:
|
|
|
-
|
|
|
+ heading_level = len(heading_data[1])
|
|
|
+ heading_level_str = str(heading_level)
|
|
|
|
|
|
- self.render_data = re.sub(heading_regex, heading_data_text, self.render_data, 1)
|
|
|
+ heading_stack[heading_level - 1] += 1
|
|
|
+ for for_a in range(heading_level, 6):
|
|
|
+ heading_stack[for_a] = 0
|
|
|
+
|
|
|
+ heading_stack_str = '.'.join([str(for_a) for for_a in heading_stack])
|
|
|
+ heading_stack_str = re.sub(r'(\.0)+$', '', heading_stack_str)
|
|
|
+
|
|
|
+ toc_list += [['', heading_data_text]]
|
|
|
+
|
|
|
+ heading_html_name = self.get_tool_temp_storage(
|
|
|
+ '<h' + heading_level_str + '>',
|
|
|
+ '</h' + heading_level_str + '>'
|
|
|
+ )
|
|
|
+ heading_data_complete = '' + \
|
|
|
+ '\n<front_br>' + \
|
|
|
+ '<' + heading_html_name + '>' + \
|
|
|
+ '<heading_stack>' + \
|
|
|
+ heading_stack_str + \
|
|
|
+ '</heading_stack>' + \
|
|
|
+ ' ' + heading_data_text + \
|
|
|
+ '</' + heading_html_name + '>' + \
|
|
|
+ '<back_br>\n' + \
|
|
|
+ ''
|
|
|
+
|
|
|
+ self.render_data = re.sub(heading_regex, heading_data_complete, self.render_data, 1)
|
|
|
|
|
|
heading_count_all -= 1
|
|
|
|
|
|
+ # heading id adjust
|
|
|
+ heading_end_count = len(re.findall(r'<heading_stack>', self.render_data))
|
|
|
+ for for_a in reversed(range(0, 6)):
|
|
|
+ heading_end_stack_regex = re.compile('<heading_stack>' + ('0\\.' * for_a))
|
|
|
+
|
|
|
+ heading_end_match_count = len(re.findall(heading_end_stack_regex, self.render_data))
|
|
|
+ if heading_end_match_count == heading_end_count:
|
|
|
+ self.render_data = re.sub(heading_end_stack_regex, '<heading_stack>', self.render_data)
|
|
|
+
|
|
|
+ break
|
|
|
+
|
|
|
+ # heading id -> inline id
|
|
|
+ heading_id_regex = r'<heading_stack>([^<>]+)<\/heading_stack>'
|
|
|
+ heading_id_data = re.findall(heading_id_regex, self.render_data)
|
|
|
+ for for_a in range(len(heading_id_data)):
|
|
|
+ self.render_data = re.sub(heading_id_regex, '<a href="#toc" id="s-' + heading_id_data[for_a] + '">' + heading_id_data[for_a] + '.</a>', self.render_data, 1)
|
|
|
+
|
|
|
+ toc_list[for_a][0] = heading_id_data[for_a]
|
|
|
+
|
|
|
+ # not heading restore
|
|
|
for for_a in range(1, 7):
|
|
|
for_a_str = str(for_a)
|
|
|
|
|
|
heading_restore_regex = re.compile('<heading_' + for_a_str + '>')
|
|
|
|
|
|
self.render_data = re.sub(heading_restore_regex, ('=' * for_a), self.render_data)
|
|
|
- print(('=' * for_a))
|
|
|
|
|
|
def do_render_last(self):
|
|
|
# remove front_br and back_br
|