잉여개발기 (SPDV) 3 年之前
父節點
當前提交
5288ac7e6d
共有 3 個文件被更改,包括 56 次插入7 次删除
  1. 1 1
      route/main_view.py
  2. 54 5
      route/tool/func_render_namumark.py
  3. 1 1
      version.json

+ 1 - 1
route/main_view.py

@@ -15,7 +15,7 @@ def main_view(name = ''):
                 mime_type = 'text/plain'
             else:
                 mime_type = mime_type[len(mime_type) - 1].lower()
-                image_type = ['jpeg', 'jpg', 'gif', 'png', 'webp']
+                image_type = ['jpeg', 'jpg', 'gif', 'png', 'webp', 'ico']
                 if mime_type in image_type:
                     mime_type = 'image/' + mime_type
                 elif mime_type == 'js':

+ 54 - 5
route/tool/func_render_namumark.py

@@ -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

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.4.5 (stable2) (beta3) (dev47)",
+        "r_ver" : "v3.4.5 (stable2) (beta3) (dev48)",
         "c_ver" : "3500113",
         "s_ver" : "3500110"
     }