Bläddra i källkod

파서 및 기능 수정

2DU 8 år sedan
förälder
incheckning
e2ad66aae2
2 ändrade filer med 117 tillägg och 85 borttagningar
  1. 80 68
      app.py
  2. 37 17
      mark.py

+ 80 - 68
app.py

@@ -145,76 +145,88 @@ def alarm():
         )
 
 @route('/edit_set', method=['POST', 'GET'])
-def edit_set():
-    if(admin_check(None, 'edit_set') == 1):
-        if(request.method == 'POST'):
-            curs.execute("update other set data = ? where name = ?", [request.forms.name, 'name'])
-            curs.execute("update other set data = ? where name = 'frontpage'", [request.forms.frontpage])
-            curs.execute("update other set data = ? where name = 'license'", [request.forms.license])
-            curs.execute("update other set data = ? where name = 'upload'", [request.forms.upload])
-            curs.execute("update other set data = ? where name = 'skin'", [request.forms.skin])
-            conn.commit()
+@route('/edit_set/<num:int>', method=['POST', 'GET'])
+def edit_set(num = 0):
+    if(num == 0):
+        return(
+            html_minify(
+                template('index', 
+                    imp = ['설정 편집', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0, 0],
+                    data = '<ul><li><a href="/edit_set/1">기본 설정</a></li></ul>',
+                    menu = [['manager', '관리자']]
+                )
+            )
+        )
+    elif(num == 1):
+        if(admin_check(None, 'edit_set') == 1):
+            if(request.method == 'POST'):
+                curs.execute("update other set data = ? where name = ?", [request.forms.name, 'name'])
+                curs.execute("update other set data = ? where name = 'frontpage'", [request.forms.frontpage])
+                curs.execute("update other set data = ? where name = 'license'", [request.forms.license])
+                curs.execute("update other set data = ? where name = 'upload'", [request.forms.upload])
+                curs.execute("update other set data = ? where name = 'skin'", [request.forms.skin])
+                conn.commit()
 
-            return(redirect('/edit_set'))
-        else:
-            i_list = ['name', 'frontpage', 'license', 'upload', 'skin']
-            n_list = ['무명위키', '위키:대문', 'CC 0', '2', '']
-            d_list = []
-            
-            x = 0
-            for i in i_list:
-                curs.execute('select data from other where name = ?', [i])
-                sql_d = curs.fetchall()
-                if(sql_d):
-                    d_list += [sql_d[0][0]]
-                else:
-                    curs.execute('insert into other (name, data) values (?, ?)', [i, n_list[x]])
-                    d_list += [n_list[x]]
+                return(redirect('/edit_set'))
+            else:
+                i_list = ['name', 'frontpage', 'license', 'upload', 'skin']
+                n_list = ['무명위키', '위키:대문', 'CC 0', '2', '']
+                d_list = []
+                
+                x = 0
+                for i in i_list:
+                    curs.execute('select data from other where name = ?', [i])
+                    sql_d = curs.fetchall()
+                    if(sql_d):
+                        d_list += [sql_d[0][0]]
+                    else:
+                        curs.execute('insert into other (name, data) values (?, ?)', [i, n_list[x]])
+                        d_list += [n_list[x]]
 
-                x += 1
-            conn.commit()
+                    x += 1
+                conn.commit()
 
-            return(
-                html_minify(
-                    template('index', 
-                        imp = ['설정 편집', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0, 0],
-                        data = '<form method="post"> \
-                                    <span>위키 이름 (기본 : 무명위키)</span> \
-                                    <br> \
-                                    <br> \
-                                    <input placeholder="위키 이름" style="width: 100%;" type="text" name="name" value="' + d_list[0] + '"> \
-                                    <br> \
-                                    <br> \
-                                    <span>시작 페이지 (기본 : 위키:대문)</span> \
-                                    <br> \
-                                    <br> \
-                                    <input placeholder="시작 페이지" style="width: 100%;" type="text" name="frontpage" value="' + d_list[1] + '"> \
-                                    <br> \
-                                    <br> \
-                                    <span>라이선스 (기본 : CC 0)</span> \
-                                    <br> \
-                                    <br> \
-                                    <input placeholder="라이선스" style="width: 100%;" type="text" name="license" value="' + d_list[2] + '"> \
-                                    <br> \
-                                    <br> \
-                                    <span>파일 올리기 최대 크기 (기본 : 2)</span> \
-                                    <br> \
-                                    <br> \
-                                    <input placeholder="파일 올리기 최대 크기" style="width: 100%;" type="text" name="upload" value="' + d_list[3] + '"> \
-                                    <br> \
-                                    <br> \
-                                    <span>스킨 (기본 : yousoro)</span> \
-                                    <br> \
-                                    <br> \
-                                    <input placeholder="스킨" style="width: 100%;" type="text" name="skin" value="' + d_list[4] + '"> \
-                                    <br> \
-                                    <br> \
-                                    <button class="btn btn-primary" type="submit">저장</button> \
-                                </form>',
-                        menu = [['manager', '관리자']]
+                return(
+                    html_minify(
+                        template('index', 
+                            imp = ['설정 편집', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0, 0],
+                            data = '<form method="post"> \
+                                        <span>위키 이름 (기본 : 무명위키)</span> \
+                                        <br> \
+                                        <br> \
+                                        <input placeholder="위키 이름" style="width: 100%;" type="text" name="name" value="' + d_list[0] + '"> \
+                                        <br> \
+                                        <br> \
+                                        <span>시작 페이지 (기본 : 위키:대문)</span> \
+                                        <br> \
+                                        <br> \
+                                        <input placeholder="시작 페이지" style="width: 100%;" type="text" name="frontpage" value="' + d_list[1] + '"> \
+                                        <br> \
+                                        <br> \
+                                        <span>라이선스 (기본 : CC 0)</span> \
+                                        <br> \
+                                        <br> \
+                                        <input placeholder="라이선스" style="width: 100%;" type="text" name="license" value="' + d_list[2] + '"> \
+                                        <br> \
+                                        <br> \
+                                        <span>파일 올리기 최대 크기 (기본 : 2)</span> \
+                                        <br> \
+                                        <br> \
+                                        <input placeholder="파일 올리기 최대 크기" style="width: 100%;" type="text" name="upload" value="' + d_list[3] + '"> \
+                                        <br> \
+                                        <br> \
+                                        <span>스킨 (기본 : yousoro)</span> \
+                                        <br> \
+                                        <br> \
+                                        <input placeholder="스킨" style="width: 100%;" type="text" name="skin" value="' + d_list[4] + '"> \
+                                        <br> \
+                                        <br> \
+                                        <button class="btn btn-primary" type="submit">저장</button> \
+                                    </form>',
+                            menu = [['manager', '관리자']]
+                        )
                     )
                 )
-            )
     else:
         return(redirect('/ban'))
 
@@ -306,14 +318,14 @@ def list_acl():
         div += '<li>' + str(i + 1) + '. <a href="/admin_plus/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + acl + ')</li>'
         
         i += 1
-    else:        
-        div += '</ul><br><a href="/manager/8">(생성)</a>'
+    
+    div += '</ul><br><a href="/manager/8">(생성)</a>'
 
     return(
         html_minify(
             template('index',    
                 imp = ['ACL 목록', wiki_set(1), wiki_set(3), login_check(), custom_css(), custom_js(), 0, 0],
-                data = re.sub('^<br>', '', div),
+                data = re.sub('^<ul></ul><br>', '', div),
                 menu = [['manager', '관리자']]
             )
         )

+ 37 - 17
mark.py

@@ -212,7 +212,41 @@ def html_pas(data):
     return(data)
     
 def mid_pas(data, fol_num, include, in_c):
+    p = re.compile('{{{((?:(?:(?:\+|-)[0-5])|(?:#|@)(?:(?:[0-9a-f-A-F]{3}){1,2}|(?:\w+))|(?:#!(?:html|wiki|noin|folding|syntax)))(?:(?!{{{|}}}).)+)}}}', re.DOTALL)
+    while(1):
+        m = p.search(data)
+        if(m):
+            d = m.groups()
+            data = p.sub('###' + d[0] + '###', data, 1)
+        else:
+            break
+
     com = re.compile("{{{((?:(?!{{{|}}}).)*)}}}", re.DOTALL)
+    while(1):
+        m = com.search(data)
+        if(m):
+            d = m.groups()
+            data = com.sub('<code>' + d[0] + '</code>', data, 1)
+        else:
+            break
+
+    com3 = re.compile('###((?:(?!###).)+)###', re.DOTALL)
+    m = com3.search(data)
+    while(1):
+        m = com3.search(data)
+        if(m):
+            d = m.groups()
+            data = com3.sub('{{{' + d[0] + '}}}', data, 1)
+        else:
+            break
+
+    com2 = re.compile("<code>((?:(?!(?:<code>|<\/code>)).)*)<\/code>", re.DOTALL)
+    da_com = com2.findall(data)
+    for com_da in da_com:
+        mid_data = com_da.replace('<', '&lt;').replace('>', '&gt;')
+        mid_data = re.sub("(?P<in>.)", "#no#\g<in>#/no#", mid_data)
+        data = com2.sub(mid_data, data, 1)
+
     while(1):
         is_it = com.search(data)
         if(is_it):
@@ -224,18 +258,15 @@ def mid_pas(data, fol_num, include, in_c):
             small_a = re.compile("^\-([1-5])\s(.*)$", re.DOTALL)
             small = small_a.search(it_d)
 
-            color_b = re.compile("^(#(?:[0-9a-f-A-F]{6}|[0-9a-f-A-F]{3}))\s(.*)$", re.DOTALL)
+            color_b = re.compile("^(#(?:[0-9a-f-A-F]{3}){1,2})\s(.*)$", re.DOTALL)
             color_2 = color_b.search(it_d)
 
             color_c = re.compile("^#(\w+)\s(.*)$", re.DOTALL)
             color_3 = color_c.search(it_d)
 
-            back_a = re.compile("^@([0-9a-f-A-F]{6})\s(.*)$", re.DOTALL)
+            back_a = re.compile("^@((?:[0-9a-f-A-F]{3}){1,2})\s(.*)$", re.DOTALL)
             back = back_a.search(it_d)
 
-            back_b = re.compile("^@([0-9a-f-A-F]{3})\s(.*)$", re.DOTALL)
-            back_2 = back_b.search(it_d)
-
             back_c = re.compile("^@(\w+)\s(.*)$", re.DOTALL)
             back_3 = back_c.search(it_d)
 
@@ -269,9 +300,6 @@ def mid_pas(data, fol_num, include, in_c):
             elif(back):
                 back_d_1 = back.groups()
                 data = com.sub('<span style="background: #' + back_d_1[0] + '">' + back_d_1[1] + '</span>', data, 1)
-            elif(back_2):
-                back_d_2 = back_2.groups()
-                data = com.sub('<span style="background: #' + back_d_2[0] + '">' + back_d_2[1] + '</span>', data, 1)
             elif(back_3):
                 back_d_3 = back_3.groups()
                 data = com.sub('<span style="background: ' + back_d_3[0] + '">' + back_d_3[1] + '</span>', data, 1)
@@ -306,18 +334,10 @@ def mid_pas(data, fol_num, include, in_c):
                 else:
                     data = com.sub(include_out.groups()[0], data, 1)
             else:
-                data = com.sub('<code>' + it_d + '</code>', data, 1)
+                data = com.sub(it_d, data, 1)
         else:
             break
             
-    com = re.compile("<code>((?:(?!(?:<code>|<\/code>)).)*)<\/code>", re.DOTALL)
-    da_com = com.findall(data)
-    for com_da in da_com:
-        mid_data = com_da.replace('<', '&lt;').replace('>', '&gt;')
-        mid_data = re.sub("(?P<in>.)", "#no#\g<in>#/no#", mid_data)
-              
-        data = com.sub(mid_data, data, 1)
-            
     return([data, fol_num])
 
 def toc_pas(data, title, num, toc_y):