Browse Source

Merge pull request #2502 from openNAMU/dont_use

버그 수정 및 문법 추가
잉여개발기 1 year ago
parent
commit
5cb0462de2
5 changed files with 72 additions and 42 deletions
  1. 2 33
      route/go_api_w_render.py
  2. 3 3
      route/tool/func.py
  3. 3 2
      route/tool/func_render.py
  4. 63 3
      route/tool/func_render_namumark.py
  5. 1 1
      version.json

+ 2 - 33
route/go_api_w_render.py

@@ -1,31 +1,5 @@
 from .tool.func import *
 
-class api_w_render_include:
-    def __init__(self, data_option):
-        self.include_change_list = data_option
-
-    def __call__(self, match):
-        match_org = match.group(0)
-        match = match.groups()
-
-        if len(match) < 3:
-            match = list(match) + ['']
-
-        if match[2] == '\\':
-            return match_org
-        else:
-            slash_add = ''
-            if match[0]:
-                if len(match[0]) % 2 == 1:
-                    slash_add = '\\' * (len(match[0]) - 1)
-                else:
-                    slash_add = match[0]
-
-            if match[1] in self.include_change_list:
-                return slash_add + self.include_change_list[match[1]]
-            else:
-                return slash_add + match[2]
-
 async def api_w_render(name = '', tool = '', request_method = '', request_data = {}):
     with get_db_connect() as conn:
         curs = conn.cursor()
@@ -65,12 +39,6 @@ async def api_w_render(name = '', tool = '', request_method = '', request_data =
             if markup in ('', 'namumark', 'namumark_beta') and data_option != '':
                 data_option = orjson.loads(data_option)
 
-                data_option_func = api_w_render_include(data_option)
-
-                # parameter replace
-                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9_]+)=((?:\\@|[^@\n])+)@', data_option_func, data_org)
-                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9_]+)@', data_option_func, data_org)
-
                 # remove end br
                 data_org = re.sub('^\n+', '', data_org)
 
@@ -78,7 +46,8 @@ async def api_w_render(name = '', tool = '', request_method = '', request_data =
                 data_pas = render_set(conn, 
                     doc_name = name, 
                     doc_data = data_org, 
-                    data_type = data_type
+                    data_type = data_type,
+                    parameter = data_option
                 )
 
                 return {

+ 3 - 3
route/tool/func.py

@@ -164,7 +164,7 @@ async def python_to_golang(func_name, other_set = {}):
                 async with session.post('http://localhost:' + db_data + '/', data = json.dumps(other_set)) as res:
                     data = await res.json()
 
-                    if data["response"] == "error":
+                    if "response" in data and data["response"] == "error":
                         raise
                     else:
                         return data
@@ -1508,7 +1508,7 @@ def load_skin(conn, data = '', set_n = 0, default = 0):
         return skin_return_data
 
 # Func-markup
-def render_set(conn, doc_name = '', doc_data = '', data_type = 'view', markup = ''):
+def render_set(conn, doc_name = '', doc_data = '', data_type = 'view', markup = '', parameter = {}):
     curs = conn.cursor()
 
     # data_type in ['view', 'from', 'thread', 'api_view', 'api_thread', 'api_include', 'backlink']
@@ -1542,7 +1542,7 @@ def render_set(conn, doc_name = '', doc_data = '', data_type = 'view', markup =
     if db_data and db_data[0][0] != '':
         render_lang_data['category'] = db_data[0][0]
 
-    get_class_render = class_do_render(conn, render_lang_data, markup).do_render(doc_name, doc_data, data_type)
+    get_class_render = class_do_render(conn, render_lang_data, markup, parameter).do_render(doc_name, doc_data, data_type)
     if data_type == 'backlink':
         return ''
 

+ 3 - 2
route/tool/func_render.py

@@ -5,7 +5,7 @@ from .func_render_namumark import class_do_render_namumark
 # 커스텀 마크 언젠간 다시 추가 예정
 
 class class_do_render:
-    def __init__(self, conn, lang_data = {}, markup = ''):
+    def __init__(self, conn, lang_data = {}, markup = '', parameter = {}):
         self.conn = conn
 
         if lang_data == '{}':
@@ -16,6 +16,7 @@ class class_do_render:
 
         self.lang_data = lang_data
         self.markup = markup
+        self.parameter = parameter
 
     def generate_random_string(self, length = 32):
         characters = string.ascii_letters + string.digits
@@ -53,7 +54,7 @@ class class_do_render:
             rep_data = db_data[0][0] if db_data else 'namumark'
 
         if rep_data == 'namumark' or rep_data == 'namumark_beta':
-            data_end = class_do_render_namumark(self.conn, doc_name, doc_data, doc_set, self.lang_data)()
+            data_end = class_do_render_namumark(self.conn, doc_name, doc_data, doc_set, self.lang_data, parameter = self.parameter)()
         elif rep_data == 'raw':
             data_end = [html.escape(doc_data).replace('\n', '<br>'), '', {}]
         else:

+ 63 - 3
route/tool/func_render_namumark.py

@@ -3,7 +3,7 @@ from .func_tool import *
 from typing import Any
 
 class class_do_render_namumark:
-    def __init__(self, conn, doc_name, doc_data, doc_set, lang_data, do_type = 'exter'):
+    def __init__(self, conn, doc_name, doc_data, doc_set, lang_data, do_type = 'exter', parameter = {}):
         self.conn = conn
         self.curs = self.conn.cursor()
 
@@ -12,6 +12,7 @@ class class_do_render_namumark:
         self.doc_set = doc_set
 
         self.do_type = do_type
+        self.parameter = parameter
 
         self.lang_data = lang_data
         try:
@@ -1338,7 +1339,10 @@ class class_do_render_namumark:
                     else:
                         slash_add = match[0]
 
-                return slash_add + match[2]
+                if match[1] in self.parameter:
+                    return slash_add + self.parameter[match[1]]
+                else:
+                    return slash_add + match[2]
 
         self.render_data = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9_]+)=((?:\\@|[^@\n])+)@', do_render_include_default_sub, self.render_data)
         self.render_data = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9_]+)@', do_render_include_default_sub, self.render_data)
@@ -1882,7 +1886,58 @@ class class_do_render_namumark:
                 if middle_name:
                     middle_name = middle_name.group(1)
                     middle_name = middle_name.lower()
-                    if middle_name == '#!wiki':
+                    
+                    if middle_name == "#!if":
+                        if middle_slash:
+                            middle_data_org = re.sub(r'<(\/?(?:slash)_(?:[0-9]+)(?:[^<>]+))>', '<temp_' + middle_slash + '>', middle_data_org)
+                            self.render_data = re.sub(middle_regex, lambda x : middle_data_org, self.render_data, 1)
+                            continue
+
+                        if_data = re.sub(r'^#!if *', '', middle_data)
+
+                        var_name = ""
+                        if_state = ""
+                        parameter = ""
+                        
+                        if_regex = r"([^ ]+)(?: *)(!=|==)(?: *)([^\n]+)"
+                        if_data_get = re.search(if_regex, if_data)
+                        if if_data_get:
+                            if_data_get_data = if_data_get.groups()
+
+                            var_name = if_data_get_data[0]
+                            if_state = if_data_get_data[1]
+                            parameter = if_data_get_data[2]
+
+                            if_data = re.sub(if_regex, '', if_data)
+
+                        var_data = None
+                        if var_name in self.parameter:
+                            var_data = self.parameter[var_name]
+
+                        result_data = False
+
+                        if if_state == "==":
+                            if parameter == "null" and var_data == None:
+                                result_data = True
+                            else:
+                                parameter = re.sub(r'(^&quot;|&quot;$)', '', parameter)
+                                if parameter == var_data:
+                                    result_data = True
+                        else:
+                            if parameter == "null" and var_data != None:
+                                result_data = True
+                            else:
+                                parameter = re.sub(r'(^&quot;|&quot;$)', '', parameter)
+                                if parameter != var_data:
+                                    result_data = True
+
+                        if result_data:
+                            middle_data_pass = if_data
+                        else:
+                            middle_data_pass = ""
+                        
+                        data_name = self.get_tool_data_storage('', '', middle_data_org)
+                    elif middle_name == '#!wiki':
                         if middle_slash:
                             middle_data_org = re.sub(r'<(\/?(?:slash)_(?:[0-9]+)(?:[^<>]+))>', '<temp_' + middle_slash + '>', middle_data_org)
                             self.render_data = re.sub(middle_regex, lambda x : middle_data_org, self.render_data, 1)
@@ -1943,6 +1998,11 @@ class class_do_render_namumark:
                         data_name = self.get_tool_data_storage('<div style="' + wiki_data_style_data + '">', '</div>', middle_data_org)
                         wiki_count += 1
                     elif middle_name == '#!html':
+                        if middle_slash:
+                            middle_data_org = re.sub(r'<(\/?(?:slash)_(?:[0-9]+)(?:[^<>]+))>', '<temp_' + middle_slash + '>', middle_data_org)
+                            self.render_data = re.sub(middle_regex, lambda x : middle_data_org, self.render_data, 1)
+                            continue
+
                         html_data = re.sub(r'^#!html( |\n)', '', middle_data)
                         if middle_slash:
                             html_data += '\\'

+ 1 - 1
version.json

@@ -1,5 +1,5 @@
 {
-    "r_ver" : "v3.6.0-v2",
+    "r_ver" : "v3.6.0-v3",
     "c_ver" : "20241202",
     "s_ver" : "20240426",
     "bin_link" : "https://github.com/openNAMU/GopenNAMU/releases/download/v2025-03-17-v2/"