Explorar o código

borrowing markdown renderer structure

잉여개발기 (SPDV) %!s(int64=3) %!d(string=hai) anos
pai
achega
6c7826f58a
Modificáronse 1 ficheiros con 103 adicións e 15 borrados
  1. 103 15
      route/tool/func_render_namumark.py

+ 103 - 15
route/tool/func_render_namumark.py

@@ -14,71 +14,157 @@ class class_do_render_namumark:
         self.doc_name = doc_name
         self.doc_include = doc_include
         
-        self.data_nowiki = {}
+        self.data_temp_storage = {}
+        self.data_temp_storage_count = 0
         self.data_backlink = []
         
         self.data_toc = ''
         self.data_footnote = ''
         self.data_category = ''
 
+        self.render_data = self.doc_data
+        self.render_data = html.escape(self.render_data)
+        self.render_data = '<back_br>\n' + self.render_data + '\n<front_br>'
+        self.render_data_js = ''
+
+    def get_tool_temp_storage(self, data_A = '', data_B = ''):
+        self.data_temp_storage_count += 1
+        data_name = 'opennamu_render_' + str(self.data_temp_storage_count)
+
+        self.data_temp_storage[data_name] = data_A
+        self.data_temp_storage['/' + data_name] = data_B
+
+        return data_name
+
+    def get_tool_data_restore(self, data):
+        storage_count = self.data_temp_storage_count * 2
+        storage_regex = r'<(\/?opennamu_render_(?:[0-9]+))>'
+
+        while 1:
+            if storage_count < 0:
+                print('Error : render count overflow')
+
+                break
+            else:
+                if re.search(storage_regex, data):
+                    data = re.sub(
+                        storage_regex, 
+                        lambda match : self.data_temp_storage[match.group(1)], 
+                        data,
+                        1
+                    )
+                else:
+                    break
+
+            storage_count -= 1
+
+        return data
+
     def do_render_text(self):
+        # <b> function
+        def do_render_text_bold(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<b>', '</b>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
+
         # <b>
         self.render_data = re.sub(
             r"&#x27;&#x27;&#x27;((?:(?!&#x27;&#x27;&#x27;).)+)&#x27;&#x27;&#x27;",
-            '<b>\g<1></b>',
+            do_render_text_bold,
             self.render_data
         )
+
+        # <i> function
+        def do_render_text_italic(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<i>', '</i>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
+
         # <i>
         self.render_data = re.sub(
             r"&#x27;&#x27;((?:(?!&#x27;&#x27;).)+)&#x27;&#x27;",
-            '<i>\g<1></i>',
+            do_render_text_italic,
             self.render_data
         )
+
+        # <u> function
+        def do_render_text_under(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<u>', '</u>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
+
         # <u>
         self.render_data = re.sub(
             r"__((?:(?!__).)+)__",
-            '<u>\g<1></u>',
+            do_render_text_under,
             self.render_data
         )
         
+        # <sup> function
+        def do_render_text_sup(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<sup>', '</sup>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
+
         # <sup>
         self.render_data = re.sub(
             r"\^\^\^((?:(?!\^\^\^).)+)\^\^\^",
-            '<sup>\g<1></sup>',
+            do_render_text_sup,
             self.render_data
         )
         # <sup> 2
         self.render_data = re.sub(
             r"\^\^((?:(?!\^\^).)+)\^\^",
-            '<sup>\g<1></sup>',
+            do_render_text_sup,
             self.render_data
         )
+
+        # <sub> function
+        def do_render_text_sub(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<sub>', '</sub>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
         
         # <sub>
         self.render_data = re.sub(
             r",,,((?:(?!,,,).)+),,,",
-            '<sub>\g<1></sub>',
+            do_render_text_sub,
             self.render_data
         )
         # <sub> 2
         self.render_data = re.sub(
             r",,((?:(?!,,).)+),,",
-            '<sub>\g<1></sub>',
+            do_render_text_sub,
             self.render_data
         )
+
+        # <sub> function
+        def do_render_text_strike(match):
+            data = match.group(1)
+            data_name = self.get_tool_temp_storage('<s>', '</s>')
+            
+            return '<' + data_name + '>' + data + '</' + data_name + '>'
         
         # <s>
         self.render_data = re.sub(
             r"--((?:(?!--).)+)--",
-            '<s>\g<1></s>',
+            do_render_text_strike,
             self.render_data
         )
         # <s> 2
         self.render_data = re.sub(
             r"~~((?:(?!~~).)+)~~",
-            '<s>\g<1></s>',
+            do_render_text_strike,
             self.render_data
         )
+    
+    def do_render_heading(self):
+        pass
 
     def do_render_last(self):
         # remove front_br and back_br
@@ -101,13 +187,15 @@ class class_do_render_namumark:
         )
 
     def __call__(self):
-        self.render_data = html.escape(self.doc_data)
-        
-        self.render_data_js = ''
-
         self.do_render_text()
+        self.do_render_heading()
         self.do_render_last()
-        
+
+        print(self.data_temp_storage)
+        self.render_data = self.get_tool_data_restore(self.render_data)
+        print('----')
+        print(self.render_data)
+
         return [
             self.render_data, # HTML
             self.render_data_js, # JS