잉여개발기 (SPDV) 3 роки тому
батько
коміт
a0a48796d8

+ 12 - 0
app.py

@@ -575,6 +575,16 @@ app.route('/vote/list/close', defaults = { 'list_type' : 'close' })(vote_list)
 app.route('/vote/list/close/<int:num>', defaults = { 'list_type' : 'close' })(vote_list)
 app.route('/vote/add', methods = ['POST', 'GET'])(vote_add)
 
+# Func-bbs
+# app.route('/bbs/main')
+# app.route('/bbs/main/set')
+# app.route('/bbs/make')
+# app.route('/bbs/w/<int:bbs_num>')
+# app.route('/bbs/set/<int:bbs_num>')
+# app.route('/bbs/edit/<int:bbs_num>')
+# app.route('/bbs/w/<int:bbs_num>/<int:post_num>')
+# app.route('/bbs/edit/<int:bbs_num>/<int:post_num>')
+
 # Func-api
 app.route('/api/w/<everything:name>/doc_tool/<tool>/doc_rev/<int(signed = True):rev>')(api_w)
 app.route('/api/w/<everything:name>/doc_tool/<tool>', methods = ['POST', 'GET'])(api_w)
@@ -640,6 +650,8 @@ app.route('/setting/external', methods = ['POST', 'GET'])(main_func_setting_exte
 app.route('/setting/acl', methods = ['POST', 'GET'])(main_func_setting_acl)
 app.route('/setting/sitemap', methods = ['POST', 'GET'])(main_func_setting_sitemap)
 
+app.route('/easter_egg')(main_func_easter_egg)
+
 # views -> view
 app.route('/view/<everything:name>')(main_view)
 app.route('/views/<everything:name>')(main_view)

+ 1 - 0
lang/en-US.json

@@ -279,6 +279,7 @@
                 "edit_set" : "Edit-related settings",
                 "communication_set" : "Communication-related settings",
     
+                "namumark_fully_compatible_mode" : "namumark fully compatible mode",
                 "wiki_name" : "Wikis name",
                 "wiki_logo" : "Wikis logo",
                 "main_page" : "Main page",

+ 1 - 1
route/edit_revert.py

@@ -71,7 +71,7 @@ def edit_revert(name, num):
             return redirect('/w/' + url_pas(name))
         else:
             if data:
-                preview = '<pre>' + data[0][0] + '</pre>'
+                preview = '<pre>' + html.escape(data[0][0]) + '</pre>'
             else:
                 preview = ''
             

+ 9 - 0
route/main_func_easter_egg.py

@@ -0,0 +1,9 @@
+from .tool.func import *
+
+def main_func_easter_egg():
+    with get_db_connect() as conn:
+        return easy_minify(flask.render_template(skin_check(),
+            imp = ['Easter Egg', wiki_set(), wiki_custom(), wiki_css([0, 0])],
+            data = '<iframe width="640" height="360" src="https://www.youtube.com/embed/iQPbgD_CTd4" frameborder="0" allowfullscreen></iframe>',
+            menu = [['manager', load_lang('return')]]
+        ))

+ 8 - 2
route/main_func_setting_main.py

@@ -34,7 +34,8 @@ def main_func_setting_main(db_set):
             30 : ['password_min_length', ''],
             31 : ['wiki_access_password_need', ''],
             32 : ['wiki_access_password', ''],
-            33 : ['history_recording_off', '']
+            33 : ['history_recording_off', ''],
+            34 : ['namumark_compatible', '']
         }
 
         if flask.request.method == 'POST':
@@ -81,7 +82,7 @@ def main_func_setting_main(db_set):
                 else:
                     tls_select += '<option value="' + tls_select_one + '">' + tls_select_one + '</option>'
 
-            check_box_div = ['', '', '', '', '', '', '', '', '', '']
+            check_box_div = ['', '', '', '', '', '', '', '', '', '', '']
             for i in range(0, len(check_box_div)):
                 if i == 0:
                     acl_num = 7
@@ -101,6 +102,8 @@ def main_func_setting_main(db_set):
                     acl_num = 31
                 elif i == 9:
                     acl_num = 33
+                elif i == 10:
+                    acl_num = 34
 
                 if d_list[acl_num]:
                     check_box_div[i] = 'checked="checked"'
@@ -181,6 +184,9 @@ def main_func_setting_main(db_set):
                         <hr class="main_hr">
                         <select name="skin">''' + load_skin(d_list[5] if d_list[5] != '' else 'ringo') + '''</select>
 
+                        <hr class="main_hr">
+                        <input type="checkbox" name="namumark_compatible" ''' + check_box_div[10] + '''> ''' + load_lang('namumark_fully_compatible_mode') + '''
+
                         <h2>3. ''' + load_lang('login_set') + '''</h2>
                         <input type="checkbox" name="reg" ''' + check_box_div[0] + '''> ''' + load_lang('no_register') + '''
                         <hr class="main_hr">

+ 15 - 1
route/tool/func.py

@@ -1268,7 +1268,7 @@ def load_skin(data = '', set_n = 0, default = 0):
 
 # Func-markup
 def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', doc_acl = ''):
-    # without_DB
+    curs = conn.cursor()
 
     # data_type in ['view', 'raw', 'api_view', 'backlink']
     doc_acl = acl_check(doc_name, 'render') if doc_acl == '' else doc_acl
@@ -1310,6 +1310,20 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', d
 
                     for_a += 1
 
+            curs.execute(db_change("select data from other where name = 'namumark_compatible'"))
+            db_data = curs.fetchall()
+            if db_data and db_data[0][0] != '':
+                get_class_render[0] = '''
+                    <style>
+                        .render_content, .opennamu_render_complete {
+                            font-size: 14.4px !important;
+                        }
+                        .render_content td, .opennamu_render_complete td {
+                            padding: 5px 10px !important;
+                        }
+                    </style>
+                ''' + get_class_render[0]
+
             if data_type == 'api_view':
                 return [
                     get_class_render[0], 

+ 128 - 16
route/tool/func_render_namumark.py

@@ -113,13 +113,18 @@ class class_do_render_namumark:
                         else:
                             data_revert = ''
                     else:
-                        data_revert = '\\' + self.data_temp_storage[match[0]]
+                        if self.data_temp_storage[match[0]] == '\\':
+                            data_revert = '\\\\\\\\'
+                        else:
+                            data_revert = '\\' + self.data_temp_storage[match[0]]
 
                 data = re.sub(storage_regex, data_revert, data, 1)
-                data = re.sub(storage_regex, '', data)
 
             storage_count -= 1
 
+        data = re.sub(r'<front_br>', '', data)
+        data = re.sub(r'<back_br>', '', data)
+
         return data
 
     def get_tool_footnote_make(self):
@@ -873,7 +878,7 @@ class class_do_render_namumark:
                 match = match.groups()
 
                 macro_split_regex = r'(?:^|,) *([^,]+)'
-                macro_split_sub_regex = r'(^[^=]+) *= *([^=]+)'
+                macro_split_sub_regex = r'(^[^=]+) *= *([^=]*)'
 
                 include_name = ''
 
@@ -1029,11 +1034,13 @@ class class_do_render_namumark:
             self.render_data = '<' + data_name + '></' + data_name + '>'
 
     def do_render_table(self):
+        self.render_data = re.sub(r'\n +\|\|', '\n||', self.render_data)
+
         # get_tool_dark_mode_split
         # get_tool_px_add_check
         # get_tool_css_safe
         def do_render_table_parameter(cell_count, parameter, data, option = {}):
-            table_parameter_all = { "div" : "", "table" : "", "tr" : "", "td" : "", "col" : "", "colspan" : "", "rowspan" : "" }
+            table_parameter_all = { "div" : "", "table" : "", "tr" : "", "td" : "", "col" : "", "colspan" : "", "rowspan" : "", "data" : "" }
             
             table_align_auto = 1
             table_colspan_auto = 1
@@ -1106,18 +1113,26 @@ class class_do_render_namumark:
             
             if table_align_auto == 1:
                 if re.search(r'^ ', data):
+                    data = re.sub(r'^ ', '', data)
                     if re.search(r' $', data):
                         table_parameter_all['td'] += 'text-align: center;'
+
+                        data = re.sub(r' $', '', data)
                     else:
                         table_parameter_all['td'] += 'text-align: right;'
+                else:
+                    if re.search(r' $', data):
+                        data = re.sub(r' $', '', data)
 
             if table_colspan_auto == 1:
                 table_parameter_all['colspan'] = str(len(cell_count) // 2)
 
+            table_parameter_all['data'] = data
+
             return table_parameter_all
 
         table_regex = r'\n *((?:(?:(?:(?:\|\|)+)(?:(?:(?:(?:(?:(?!\|\|).)+)\n*)+)|(?:(?:(?!\|\|).)*)))+(?:(?:\|\|+)\n))+)'
-        table_sub_regex = r'(\n?)((?:\|\|)+)((?:&lt;(?:(?:(?!&lt;|&gt;).)+)&gt;)*)((?:(?:(?:(?:(?!\|\|).)+)\n*)+)|(?:(?:(?!\|\|).)*))'
+        table_sub_regex = r'(\n?)((?:\|\|)+)((?:&lt;(?:(?:(?!&lt;|&gt;).)+)&gt;)*)((?:\n*(?:(?:(?:(?!\|\|).)+)\n*)+)|(?:(?:(?!\|\|).)*))'
         table_count_all = len(re.findall(table_regex, self.render_data)) * 2
         while 1:
             table_data = re.search(table_regex, self.render_data)
@@ -1130,6 +1145,7 @@ class class_do_render_namumark:
             else:
                 table_data_org = table_data.group(0)
                 table_data = table_data.group(1)
+                print(table_data)
 
                 table_parameter = { "div" : "", "table" : "", "col" : {} }
                 table_data_end = ''
@@ -1139,7 +1155,7 @@ class class_do_render_namumark:
                     if table_sub[0] != '' and table_tr_change == 1:
                         table_col_num = 0
                         table_data_end += '</tr><tr style="' + table_sub_parameter['tr'] + '">'
-                    
+
                     table_sub_parameter = do_render_table_parameter(table_sub[1], table_sub[2], table_sub[3])
                     if not table_col_num in table_parameter['col']:
                         table_parameter['col'][table_col_num] = ''
@@ -1153,7 +1169,7 @@ class class_do_render_namumark:
                     else:
                         table_tr_change = 0
                     
-                        table_data_end += '<td colspan="' + table_sub_parameter['colspan'] + '" rowspan="' + table_sub_parameter['rowspan'] + '" style="' + table_sub_parameter['td'] + table_parameter['col'][table_col_num] + '">' + table_sub[3] + '</td>'
+                        table_data_end += '<td colspan="' + table_sub_parameter['colspan'] + '" rowspan="' + table_sub_parameter['rowspan'] + '" style="' + table_sub_parameter['td'] + table_parameter['col'][table_col_num] + '">' + table_sub_parameter['data'] + '</td>'
                     
                     table_col_num += 1
 
@@ -1166,7 +1182,7 @@ class class_do_render_namumark:
             table_count_all -= 1
     
     def do_render_middle(self):
-        middle_regex = r'{{{([^{](?:(?!{{{|}}}).|\n)*)}}}'
+        middle_regex = r'{{{([^{](?:(?!{{{|}}}).|\n)*)?(?:}|<(\/?(?:slash)_(?:[0-9]+))>)}}'
         wiki_count = 0
         middle_count_all = len(re.findall(middle_regex, self.render_data)) * 10
         while 1:
@@ -1175,14 +1191,29 @@ class class_do_render_namumark:
                 break
             elif not middle_data:
                 break
-            else:                
+            else:
                 middle_data_org = middle_data.group(0)
-                middle_data = middle_data.group(1)                
+                middle_slash = middle_data.group(2)
+                if middle_slash:
+                    if self.data_temp_storage[middle_slash] != '}':
+                        middle_data_org = re.sub(r'<(\/?(?:slash)_(?:[0-9]+))>', '<temp_' + middle_slash + '>', middle_data_org)
+                        self.render_data = re.sub(middle_regex, middle_data_org, self.render_data, 1)
+                        continue
+
+                middle_data = middle_data.group(1)
+                if not middle_data:
+                    middle_data = ''
+
                 middle_name = re.search(r'^([^ \n]+)', middle_data)
                 middle_data_pass = ''
                 if middle_name:
                     middle_name = middle_name.group(1)
                     if 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, middle_data_org, self.render_data, 1)
+                            continue
+
                         wiki_regex = r'^#!wiki(?:(?: style=(&quot;(?:(?:(?!&quot;).)*)&quot;|&#x27;(?:(?:(?!&#x27;).)*)&#x27;))| [^\n]*)?\n'
                         wiki_data_style = re.search(wiki_regex, middle_data)
                         wiki_data = re.sub(wiki_regex, '', middle_data)
@@ -1199,12 +1230,39 @@ class class_do_render_namumark:
 
                         wiki_data = self.get_tool_data_revert(wiki_data)
                         wiki_data = html.unescape(wiki_data)
+                        wiki_data = re.sub('\n$', '', wiki_data)
 
                         self.data_include += [[self.doc_include + 'opennamu_wiki_' + str(wiki_count), self.doc_name, wiki_data, wiki_data_style]]
 
                         data_name = self.get_tool_data_storage('<div id="' + self.doc_include + 'opennamu_wiki_' + str(wiki_count) + '"></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, middle_data_org, self.render_data, 1)
+                            continue
+
+                        data_name = self.get_tool_data_storage('', '', middle_data_org)
+                    elif middle_name == '#!folding':
+                        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, middle_data_org, self.render_data, 1)
+                            continue
+
+                        data_name = self.get_tool_data_storage('', '', middle_data_org)
+                    elif middle_name == '#!syntax':
+                        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, middle_data_org, self.render_data, 1)
+                            continue
+
+                        data_name = self.get_tool_data_storage('', '', middle_data_org)
                     elif middle_name in ('+5', '+4', '+3', '+2', '+1'):
+                        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, middle_data_org, self.render_data, 1)
+                            continue
+
                         wiki_data = re.sub(r'^\+[1-5] ', '', middle_data)
                         if middle_name == '+5':
                             wiki_size = '200'
@@ -1219,17 +1277,75 @@ class class_do_render_namumark:
 
                         middle_data_pass = wiki_data
                         data_name = self.get_tool_data_storage('<span style="font-size:' + wiki_size + '%">', '</span>', middle_data_org)
+                    elif middle_name in ('-5', '-4', '-3', '-2', '-1'):
+                        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, middle_data_org, self.render_data, 1)
+                            continue
+
+                        wiki_data = re.sub(r'^\-[1-5] ', '', middle_data)
+                        if middle_name == '-5':
+                            wiki_size = '50'
+                        elif middle_name == '-4':
+                            wiki_size = '60'
+                        elif middle_name == '-3':
+                            wiki_size = '70'
+                        elif middle_name == '-2':
+                            wiki_size = '80'
+                        else:
+                            wiki_size = '90'
+
+                        middle_data_pass = wiki_data
+                        data_name = self.get_tool_data_storage('<span style="font-size:' + wiki_size + '%">', '</span>', middle_data_org)
+                    elif re.search(r'^#(?:((?:[0-9a-f-A-F]{3}){1,2})|(\w+))', middle_name):
+                        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, middle_data_org, self.render_data, 1)
+                            continue
+
+                        wiki_color = re.search(r'^#(?:((?:[0-9a-f-A-F]{3}){1,2})|(\w+))(?:,#(?:((?:[0-9a-f-A-F]{3}){1,2})|(\w+)))?', middle_name)
+                        if wiki_color:
+                            wiki_color = wiki_color.groups()
+                            if wiki_color[0]:
+                                wiki_color = '#' + wiki_color[0]
+                            else:
+                                wiki_color = wiki_color[1]
+
+                            if wiki_color[2]:
+                                wiki_color += ',#' + wiki_color[0]
+                            elif wiki_color[3]:
+                                wiki_color = ',' + wiki_color[1]
+                        else:
+                            wiki_color = 'red'
+
+                        wiki_color = self.get_tool_css_safe(wiki_color)
+                        wiki_color = self.get_tool_dark_mode_split(wiki_color)
+
+                        wiki_data = re.sub(r'^#(?:((?:[0-9a-f-A-F]{3}){1,2})|(\w+))(?:,#(?:((?:[0-9a-f-A-F]{3}){1,2})|(\w+)))? ?', '', middle_data)
+
+                        middle_data_pass = wiki_data
+                        data_name = self.get_tool_data_storage('<span style="color:' + wiki_color + '">', '</span>', middle_data_org)
                     else:
+                        if middle_slash:
+                            middle_data += '\\'
+
                         data_revert = self.get_tool_data_revert(middle_data)
 
                         data_name = self.get_tool_data_storage(data_revert, '', middle_data_org)
                 else:
-                    data_name = self.get_tool_data_storage('', '', middle_data_org)
-                
+                    if middle_slash:
+                        middle_data += '\\'
+
+                    data_revert = self.get_tool_data_revert(middle_data)
+
+                    data_name = self.get_tool_data_storage(data_revert, '', middle_data_org)
+
                 self.render_data = re.sub(middle_regex, '<' + data_name + '>' + middle_data_pass + '</' + data_name + '>', self.render_data, 1)
 
             middle_count_all -= 1
 
+        self.render_data = re.sub(r'<temp_(?P<in>(?:slash)_(?:[0-9]+))>', '<\g<in>>', self.render_data)
+
     def do_render_last(self):
         # add category
         if self.doc_include == '':
@@ -1262,8 +1378,6 @@ class class_do_render_namumark:
         self.render_data = '<div class="opennamu_render_complete">' + self.render_data + '</div>'
 
     def __call__(self):
-        print([self.render_data])
-
         self.do_render_include_default()
         self.do_render_slash()
         self.do_render_redirect()
@@ -1279,8 +1393,6 @@ class class_do_render_namumark:
         self.do_render_heading()
         self.do_render_last()
 
-        print([self.render_data])
-
         # print(self.data_temp_storage)
         # print(self.render_data)
 

+ 1 - 1
views/main_css/css/main.css

@@ -221,7 +221,7 @@ hr {
     
     line-break: anywhere;
 
-    display: inline-block;
+    display: inline;
 }
 
 blockquote {