ソースを参照

Merge pull request #1304 from openNAMU/dev

Dev
잉여개발기 (SPDV) 4 年 前
コミット
6bebeca039

+ 2 - 0
.gitignore

@@ -18,6 +18,8 @@ robots.txt
 custom.py
 404.html
 
+goorm.manifest
+
 views/liberty
 views/buma
 views/before_namu

+ 226 - 52
app.py

@@ -365,73 +365,239 @@ app.add_url_rule(
     view_func = inter_wiki_del
 )
 
-@app.route('/edit_top')
-def inter_wiki_edit_top():
-    return inter_wiki(load_db.db_get(), 'edit_top')
+app.add_url_rule(
+    rule = '/inter_wiki/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_inter_wiki',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
+
+app.add_url_rule(
+    rule = '/edit_top',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'edit_top'
+    }, 
+    view_func = inter_wiki
+)
+
+app.add_url_rule(
+    rule = '/edit_top/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_edit_top',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
+
+app.add_url_rule(
+    rule = '/edit_top/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_edit_top',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
+
+app.add_url_rule(
+    rule = '/image_license',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'image_license'
+    }, 
+    view_func = inter_wiki
+)
+
+app.add_url_rule(
+    rule = '/image_license/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_image_license',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
 
-@app.route('/edit_top/del/<name>')
-def inter_wiki_edit_top_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_edit_top', name)
+app.add_url_rule(
+    rule = '/image_license/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_image_license',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
 
-@app.route('/image_license')
-def inter_wiki_image_license():
-    return inter_wiki(load_db.db_get(), 'image_license')
+app.add_url_rule(
+    rule = '/edit_filter',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'edit_filter'
+    }, 
+    view_func = inter_wiki
+)
 
-@app.route('/image_license/del/<name>')
-def inter_wiki_image_license_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_image_license', name)
+app.add_url_rule(
+    rule = '/edit_filter/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_edit_filter',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
+
+# 이거 수정 필요 할 듯
+app.add_url_rule(
+    rule = '/edit_filter/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_edit_filter',
+        'name' : None
+    }, 
+    view_func = inter_wiki_add
+)
+
+app.add_url_rule(
+    rule = '/edit_filter/add/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_edit_filter',
+        'name' : 'Test'
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
+
+app.add_url_rule(
+    rule = '/email_filter',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'email_filter'
+    }, 
+    view_func = inter_wiki
+)
 
-@app.route('/edit_filter')
-def inter_wiki_edit_filter():
-    return inter_wiki(load_db.db_get(), 'edit_filter')
+app.add_url_rule(
+    rule = '/email_filter/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_email_filter',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
 
-@app.route('/edit_filter/del/<name>')
-def inter_wiki_edit_filter_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_edit_filter', name)
+app.add_url_rule(
+    rule = '/email_filter/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_email_filter',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
 
-@app.route('/email_filter')
-def inter_wiki_email_filter():
-    return inter_wiki(load_db.db_get(), 'email_filter')
+app.add_url_rule(
+    rule = '/file_filter',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'file_filter'
+    }, 
+    view_func = inter_wiki
+)
 
-@app.route('/email_filter/del/<name>')
-def inter_wiki_email_filter_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_email_filter', name)
+app.add_url_rule(
+    rule = '/file_filter/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_file_filter',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
 
-@app.route('/file_filter')
-def inter_wiki_file_filter():
-    return inter_wiki(load_db.db_get(), 'file_filter')
+app.add_url_rule(
+    rule = '/file_filter/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_file_filter',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
 
-@app.route('/file_filter/del/<name>')
-def inter_wiki_file_filter_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_file_filter', name)
+app.add_url_rule(
+    rule = '/name_filter',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'name_filter'
+    }, 
+    view_func = inter_wiki
+)
 
-@app.route('/name_filter')
-def inter_wiki_name_filter():
-    return inter_wiki(load_db.db_get(), 'name_filter')
+app.add_url_rule(
+    rule = '/name_filter/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_name_filter',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
 
-@app.route('/name_filter/del/<name>')
-def inter_wiki_name_filter_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_name_filter', name)
+app.add_url_rule(
+    rule = '/name_filter/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_name_filter',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
 
-@app.route('/extension_filter')
-def inter_wiki_extension_filter():
-    return inter_wiki(load_db.db_get(), 'extension_filter')
+app.add_url_rule(
+    rule = '/extension_filter',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'extension_filter'
+    }, 
+    view_func = inter_wiki
+)
 
-@app.route('/extension_filter/del/<name>')
-def inter_wiki_extension_filter_del(name = 'Test'):
-    return inter_wiki_del(load_db.db_get(), 'del_extension_filter', name)
+app.add_url_rule(
+    rule = '/extension_filter/del/<name>',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'del_extension_filter',
+        'name' : 'Test'
+    }, 
+    view_func = inter_wiki_del
+)
 
-@app.route('/<regex("(?:inter_wiki|edit_top|image_license|(?:edit|email|file|name|extension)_filter)"):tools>/add', methods = ['POST', 'GET'])
-@app.route('/<regex("(?:inter_wiki|edit_top|image_license|(?:edit|email|file|name|extension)_filter)"):tools>/add/<name>', methods = ['POST', 'GET'])
-def inter_wiki_plus(tools = None, name = None):
-    return inter_wiki_plus_2(load_db.db_get(), 'plus_' + tools, name)
+app.add_url_rule(
+    rule = '/extension_filter/add',
+    defaults = { 
+        'conn' : load_db.db_get(), 
+        'tool' : 'plus_extension_filter',
+        'name' : None
+    }, 
+    methods = ['GET', 'POST'],
+    view_func = inter_wiki_add
+)
 
 # Func-list
-# /list/topic/open
-@app.route('/not_close_topic')
-def list_not_close_topic():
-    return list_not_close_topic_2(load_db.db_get())
-
 # /list/document/old
 @app.route('/old_page')
 def list_old_page():
@@ -661,7 +827,15 @@ def edit_move(name = None):
 # Func-topic
 @app.route('/recent_discuss')
 def recent_discuss():
-    return recent_discuss_2(load_db.db_get())
+    return recent_discuss_2(load_db.db_get(), 'normal')
+
+@app.route('/recent_discuss/close')
+def recent_discuss_close():
+    return recent_discuss_2(load_db.db_get(), 'close')
+
+@app.route('/recent_discuss/open')
+def recent_discuss_open():
+    return recent_discuss_2(load_db.db_get(), 'open')
 
 @app.route('/thread/<int:topic_num>/b/<int:num>')
 def topic_block(topic_num = 1, num = 1):

+ 3 - 1
emergency_tool.py

@@ -199,7 +199,9 @@ if what_i_do == '1':
 
         curs.execute(db_change("select data from data where title = ?"), [name[0]])
         data = curs.fetchall()
-        render_do(name[0], data[0][0], 'backlink', '')
+        
+        get_class_render = class_do_render(conn)
+        get_class_render.do_render(name[0], data[0][0], 'backlink', '')
 elif what_i_do == '2':
     curs.execute(db_change("delete from other where name = 'recaptcha'"))
     curs.execute(db_change("delete from other where name = 'sec_re'"))

+ 2 - 1
route/api_w.py

@@ -10,7 +10,8 @@ def api_w_2(conn, name):
             data_pas = render_set(
                 doc_name = name, 
                 doc_data = data_org, 
-                data_type = 'api_view'
+                data_type = 'api_view',
+                data_in = 'preview'
             )
 
             return flask.jsonify({

+ 18 - 18
route/inter_wiki_plus.py → route/inter_wiki_add.py

@@ -1,14 +1,14 @@
 from .tool.func import *
 
-def inter_wiki_plus_2(conn, tools, name):
+def inter_wiki_add(conn, tool, name):
     curs = conn.cursor()
     
     if not name:
-        if tools == 'plus_edit_filter':
+        if tool == 'plus_edit_filter':
             return redirect('/manager/9')
 
     if flask.request.method == 'POST':
-        if tools == 'plus_inter_wiki':
+        if tool == 'plus_inter_wiki':
             if name:
                 curs.execute(db_change("delete from html_filter where html = ? and kind = 'inter_wiki'"), [name])
 
@@ -22,7 +22,7 @@ def inter_wiki_plus_2(conn, tools, name):
             ])
 
             admin_check(None, 'inter_wiki_plus')
-        elif tools == 'plus_edit_filter':
+        elif tool == 'plus_edit_filter':
             if admin_check(None, 'edit_filter edit') != 1:
                 return re_error('/error/3')
 
@@ -45,7 +45,7 @@ def inter_wiki_plus_2(conn, tools, name):
         else:
             plus_d = ''
 
-            if tools == 'plus_name_filter':
+            if tool == 'plus_name_filter':
                 try:
                     re.compile(flask.request.form.get('title', 'test'))
                 except:
@@ -54,7 +54,7 @@ def inter_wiki_plus_2(conn, tools, name):
                 admin_check(None, 'name_filter edit')
 
                 type_d = 'name'
-            elif tools == 'plus_file_filter':
+            elif tool == 'plus_file_filter':
                 try:
                     re.compile(flask.request.form.get('title', 'test'))
                 except:
@@ -63,15 +63,15 @@ def inter_wiki_plus_2(conn, tools, name):
                 admin_check(None, 'file_filter edit')
 
                 type_d = 'file'
-            elif tools == 'plus_email_filter':
+            elif tool == 'plus_email_filter':
                 admin_check(None, 'email_filter edit')
 
                 type_d = 'email'
-            elif tools == 'plus_image_license':
+            elif tool == 'plus_image_license':
                 admin_check(None, 'image_license edit')
 
                 type_d = 'image_license'
-            elif tools == 'plus_extension_filter':
+            elif tool == 'plus_extension_filter':
                 admin_check(None, 'extension_filter edit')
 
                 type_d = 'extension'
@@ -95,7 +95,7 @@ def inter_wiki_plus_2(conn, tools, name):
 
         conn.commit()
 
-        return redirect('/' + re.sub(r'^plus_', '', tools))
+        return redirect('/' + re.sub(r'^plus_', '', tool))
     else:
         get_sub = 0
         if admin_check() != 1:
@@ -103,7 +103,7 @@ def inter_wiki_plus_2(conn, tools, name):
         else:
             stat = ''
 
-        if tools == 'plus_inter_wiki':
+        if tool == 'plus_inter_wiki':
             if name:
                 curs.execute(db_change("select html, plus, plus_t from html_filter where html = ? and kind = 'inter_wiki'"), [name])
                 exist = curs.fetchall()
@@ -128,7 +128,7 @@ def inter_wiki_plus_2(conn, tools, name):
                 <hr class="main_hr">
                 <input value="''' + html.escape(value[2]) + '''" type="text" name="icon">
             '''
-        elif tools == 'plus_edit_filter':            
+        elif tool == 'plus_edit_filter':            
             curs.execute(db_change("select plus, plus_t from html_filter where html = ? and kind = 'regex_filter'"), [name])
             exist = curs.fetchall()
             if exist:
@@ -166,35 +166,35 @@ def inter_wiki_plus_2(conn, tools, name):
                 <hr class="main_hr">
                 <input ''' + stat + ''' placeholder="''' + load_lang('regex') + '''" name="content" value="''' + html.escape(textarea) + '''" type="text">
             '''
-        elif tools == 'plus_name_filter':
+        elif tool == 'plus_name_filter':
             title = load_lang('id_filter_add')
             form_data = '' + \
                 load_lang('regex') + \
                 '<hr class="main_hr">' + \
                 '<input value="' + html.escape(name if name else '') + '" type="text" name="title">' + \
             ''
-        elif tools == 'plus_file_filter':
+        elif tool == 'plus_file_filter':
             title = load_lang('file_filter_add')
             form_data = '' + \
                 load_lang('regex') + \
                 '<hr class="main_hr">' + \
                 '<input value="' + html.escape(name if name else '') + '" type="text" name="title">' + \
             ''
-        elif tools == 'plus_email_filter':
+        elif tool == 'plus_email_filter':
             title = load_lang('email_filter_add')
             form_data = '' + \
                 load_lang('email') + \
                 '<hr class="main_hr">' + \
                 '<input value="' + html.escape(name if name else '') + '" type="text" name="title">' + \
             ''
-        elif tools == 'plus_image_license':
+        elif tool == 'plus_image_license':
             title = load_lang('image_license_add')
             form_data = '' + \
                 load_lang('license') + \
                 '<hr class="main_hr">' + \
                 '<input value="' + html.escape(name if name else '') + '" type="text" name="title">' + \
             ''
-        elif tools == 'plus_extension_filter':
+        elif tool == 'plus_extension_filter':
             title = load_lang('extension_filter_add')
             form_data = '' + \
                 load_lang('extension') + \
@@ -232,5 +232,5 @@ def inter_wiki_plus_2(conn, tools, name):
                         <button ''' + stat + ''' type="submit">''' + load_lang('add') + '''</button>
                     </form>
                     ''',
-            menu = [[re.sub('^plus_', '', tools), load_lang('return')]]
+            menu = [[re.sub('^plus_', '', tool), load_lang('return')]]
         ))

+ 0 - 19
route/list_not_close_topic.py

@@ -1,19 +0,0 @@
-from .tool.func import *
-
-def list_not_close_topic_2(conn):
-    curs = conn.cursor()
-
-    div = '<ul class="inside_ul">'
-
-    curs.execute(db_change('select title, sub, date, code from rd where stop != "O" order by date desc'))
-    n_list = curs.fetchall()
-    for data in n_list:
-        div += '<li>' + data[2] + ' | <a href="/thread/' + data[3] + '">' + html.escape(data[1]) + '</a> (' + html.escape(data[0]) + ')</li>'
-
-    div += '</ul>'
-
-    return easy_minify(flask.render_template(skin_check(),
-        imp = [load_lang('open_discussion_list'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
-        data = div,
-        menu = [['manager', load_lang('return')]]
-    ))

+ 0 - 1
route/main_other.py

@@ -21,7 +21,6 @@ def main_other_2(conn):
                 <h3>2.2. ''' + load_lang('discussion') + '''</h3>
                 <ul class="inside_ul">
                     <li><a href="/recent_discuss">''' + load_lang('recent_discussion') + '''</a></li>
-                    <li><a href="/not_close_topic">''' + load_lang('open_discussion_list') + '''</a></li>
                 </ul>
                 <h3>2.3. ''' + load_lang('document') + '''</h3>
                 <ul class="inside_ul">

+ 14 - 7
route/recent_discuss.py

@@ -1,18 +1,23 @@
 from .tool.func import *
 
-def recent_discuss_2(conn):
+def recent_discuss_2(conn, tool):
     curs = conn.cursor()
 
     div = ''
 
-    if flask.request.args.get('what', 'normal') == 'normal':
-        div += '<a href="/recent_discuss?what=close">(' + load_lang('close_discussion') + ')</a>'
+    if tool == 'normal':
+        div += '<a href="/recent_discuss/close">(' + load_lang('close_discussion') + ')</a> '
+        div += '<a href="/recent_discuss/open">(' + load_lang('open_discussion_list') + ')</a>'
 
         m_sub = 0
-    else:
-        div += '<a href="/recent_discuss">(' + load_lang('open_discussion') + ')</a>'
+    elif tool == 'close':
+        div += '<a href="/recent_discuss">(' + load_lang('normal') + ')</a>'
 
         m_sub = ' (' + load_lang('closed') + ')'
+    else:
+        div += '<a href="/recent_discuss">(' + load_lang('normal') + ')</a>'
+        
+        m_sub = ' (' + load_lang('open_discussion_list') + ')'
 
     div +=  '''
             <hr class="main_hr">
@@ -24,10 +29,12 @@ def recent_discuss_2(conn):
                     </tr>
             '''
 
-    if m_sub == 0:
+    if tool == 'normal':
         curs.execute(db_change("select title, sub, date, code from rd where not stop = 'O' order by date desc limit 50"))
-    else:
+    elif tool == 'close':
         curs.execute(db_change("select title, sub, date, code from rd where stop = 'O' order by date desc limit 50"))
+    else:
+        curs.execute(db_change('select title, sub, date, code from rd where stop != "O" order by date asc limit 50'))
 
     for data in curs.fetchall():
         div += '' + \

+ 2 - 3
route/tool/func.py

@@ -95,8 +95,6 @@ def load_conn(data):
     global conn
 
     conn = data
-
-    load_conn2(data)
     
 # Func-init
 class get_db_connect:
@@ -894,7 +892,8 @@ def render_set(doc_name = '', doc_data = '', data_type = 'view', data_in = '', d
             return doc_data
         else:
             if doc_data != 0:
-                return render_do(doc_name, doc_data, data_type, data_in)
+                get_class_render = class_do_render(conn)
+                return get_class_render.do_render(doc_name, doc_data, data_type, data_in)
             else:
                 return 'HTTP Request 404'
 

+ 175 - 176
route/tool/func_mark.py

@@ -2,184 +2,183 @@ from .func_tool import *
 
 # 커스텀 마크 언젠간 다시 추가 예정
 
-conn = ''
+class class_do_render:
+    def __init__(self, conn):
+        self.conn = conn
+    
+    def do_backlink_generate(self, data_markup, doc_data, doc_name):
+        conn = self.conn
+        curs = self.conn.cursor()
 
-def load_conn2(data):
-    global conn
+        if data_markup == 'namumark':
+            # Link
+            link_re = re.compile(r'\[\[(?!https?:\/\/|inter:|외부:|out:|#)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
 
-    conn = data
-    
-def backlink_generate(data_markup, doc_data, doc_name):
-    curs = conn.cursor()
-    
-    if data_markup == 'namumark':
-        # Link
-        link_re = re.compile(r'\[\[(?!https?:\/\/|inter:|외부:|out:|#)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
-        
-        data_link = link_re.findall(doc_data)
-        data_link = list(set(data_link))
-        
-        data_link_end = {}
-        data_link_end['cat'] = []
-        data_link_end['file'] = []
-        data_link_end['link'] = []
-        
-        data_link_end_all = []
-        
-        for i in data_link:
-            data_link_in = i
-            if  data_link_in.startswith('분류:') or \
-                data_link_in.startswith('category:'):
-                data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
-            elif data_link_in.startswith('파일:') or \
-                data_link_in.startswith('file:'):
-                data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                data_link_end['file'] += [re.sub(r'^파일:', 'file:', data_link_in)]
-            else:
-                data_link_in = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_link_in)
-                
-                if data_link_in[0] == ':':
-                    data_link_in = re.sub(r'^:분류:', 'category:', data_link_in)
-                    data_link_in = re.sub(r'^:category:', 'category:', data_link_in)
-                    
-                    data_link_in = re.sub(r'^:file:', 'file:', data_link_in)
-                    data_link_in = re.sub(r'^:파일:', 'file:', data_link_in)
-                elif data_link_in[0] == '/':
-                    data_link_in = doc_name + data_link_in
-                elif len(data_link_in) >= 3 and data_link_in[0:3] == '../':
-                    data_link_in = data_link_in[3:len(data_link_in)]
-                    data_link_in = '' + \
-                        re.sub('\/[^/]+$', '', doc_name) + \
-                        (('/' + data_link_in) if data_link_in != '' else '') + \
-                    ''
-
-                data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
-                data_link_end['link'] += [data_link_in]
-                
-        if data_link_end != {}:
-            data_link_end['cat'] = list(set(data_link_end['cat']))
-            data_link_end['file'] = list(set(data_link_end['file']))
-            data_link_end['link'] = list(set(data_link_end['link']))
-
-            data_link_end_all += [[doc_name, i, 'cat'] for i in data_link_end['cat']]
-            data_link_end_all += [[doc_name, i, 'file'] for i in data_link_end['file']]
-            data_link_end_all += [[doc_name, i, ''] for i in data_link_end['link']]
-            
-            data_link_no = []
-            for i in data_link_end['link']:
-                curs.execute(db_change("select title from data where title = ?"), [i])
-                if not curs.fetchall():
-                    data_link_no += [[doc_name, i, 'no']]
-                    
-            data_link_end_all += data_link_no
-            
-        # Include
-        include_re = re.compile(r'\[include\(((?:(?!\)\]).)+)\)\]', re.I)
-        
-        data_include = include_re.findall(doc_data)
-        data_include = list(set(data_include))
-        
-        for i in data_include:
-            data_include_in = i
-            data_include_in = re.sub(r'([^\\]),.*$', r'\1', data_include_in)
-            
-            data_link_end_all += [[doc_name, data_include_in, 'include']]
-        
-        # Redirect
-        redirect_re = re.compile(r'^#(?:redirect|넘겨주기) ([^\n]+)', re.I)
-        
-        data_redirect = redirect_re.search(doc_data)
-        if data_redirect:
-            data_redirect = data_redirect.group(1)
-            
-            data_redirect = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_redirect)
-            
-            data_link_end_all += [[doc_name, data_redirect, 'redirect']]
-    else:
-        # markup == null
-        data_link_end_all = []
-            
-    return data_link_end_all
-
-def render_do(doc_name, doc_data, data_type, data_in):
-    curs = conn.cursor()
-    
-    data_in = None if data_in == '' else data_in
-    
-    curs.execute(db_change('select data from other where name = "markup"'))
-    rep_data = curs.fetchall()
-    rep_data = rep_data[0][0] if rep_data else 'namumark'
-    
-    curs.execute(db_change('select html, plus, plus_t from html_filter where kind = "inter_wiki"'))
-    inter_wiki_data = curs.fetchall()
-    wiki_set_data = {
-        "inter_wiki" : {}
-    }
-    for i in inter_wiki_data:
-        wiki_set_data['inter_wiki'][i[0]] = {
-            "logo" : i[2],
-            "link" : i[1]
+            data_link = link_re.findall(doc_data)
+            data_link = list(set(data_link))
+
+            data_link_end = {}
+            data_link_end['cat'] = []
+            data_link_end['file'] = []
+            data_link_end['link'] = []
+
+            data_link_end_all = []
+
+            for i in data_link:
+                data_link_in = i
+                if  data_link_in.startswith('분류:') or \
+                    data_link_in.startswith('category:'):
+                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
+                    data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
+                elif data_link_in.startswith('파일:') or \
+                    data_link_in.startswith('file:'):
+                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
+                    data_link_end['file'] += [re.sub(r'^파일:', 'file:', data_link_in)]
+                else:
+                    data_link_in = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_link_in)
+
+                    if data_link_in[0] == ':':
+                        data_link_in = re.sub(r'^:분류:', 'category:', data_link_in)
+                        data_link_in = re.sub(r'^:category:', 'category:', data_link_in)
+
+                        data_link_in = re.sub(r'^:file:', 'file:', data_link_in)
+                        data_link_in = re.sub(r'^:파일:', 'file:', data_link_in)
+                    elif data_link_in[0] == '/':
+                        data_link_in = doc_name + data_link_in
+                    elif len(data_link_in) >= 3 and data_link_in[0:3] == '../':
+                        data_link_in = data_link_in[3:len(data_link_in)]
+                        data_link_in = '' + \
+                            re.sub('\/[^/]+$', '', doc_name) + \
+                            (('/' + data_link_in) if data_link_in != '' else '') + \
+                        ''
+
+                    data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
+                    data_link_end['link'] += [data_link_in]
+
+            if data_link_end != {}:
+                data_link_end['cat'] = list(set(data_link_end['cat']))
+                data_link_end['file'] = list(set(data_link_end['file']))
+                data_link_end['link'] = list(set(data_link_end['link']))
+
+                data_link_end_all += [[doc_name, i, 'cat'] for i in data_link_end['cat']]
+                data_link_end_all += [[doc_name, i, 'file'] for i in data_link_end['file']]
+                data_link_end_all += [[doc_name, i, ''] for i in data_link_end['link']]
+
+                data_link_no = []
+                for i in data_link_end['link']:
+                    curs.execute(db_change("select title from data where title = ?"), [i])
+                    if not curs.fetchall():
+                        data_link_no += [[doc_name, i, 'no']]
+
+                data_link_end_all += data_link_no
+
+            # Include
+            include_re = re.compile(r'\[include\(((?:(?!\)\]).)+)\)\]', re.I)
+
+            data_include = include_re.findall(doc_data)
+            data_include = list(set(data_include))
+
+            for i in data_include:
+                data_include_in = i
+                data_include_in = re.sub(r'([^\\]),.*$', r'\1', data_include_in)
+
+                data_link_end_all += [[doc_name, data_include_in, 'include']]
+
+            # Redirect
+            redirect_re = re.compile(r'^#(?:redirect|넘겨주기) ([^\n]+)', re.I)
+
+            data_redirect = redirect_re.search(doc_data)
+            if data_redirect:
+                data_redirect = data_redirect.group(1)
+
+                data_redirect = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_redirect)
+
+                data_link_end_all += [[doc_name, data_redirect, 'redirect']]
+        else:
+            # markup == null
+            data_link_end_all = []
+
+        return data_link_end_all
+
+    def do_render(self, doc_name, doc_data, data_type, data_in):
+        conn = self.conn
+        curs = self.conn.cursor()
+
+        data_in = None if data_in == '' else data_in
+
+        curs.execute(db_change('select data from other where name = "markup"'))
+        rep_data = curs.fetchall()
+        rep_data = rep_data[0][0] if rep_data else 'namumark'
+
+        curs.execute(db_change('select html, plus, plus_t from html_filter where kind = "inter_wiki"'))
+        inter_wiki_data = curs.fetchall()
+        wiki_set_data = {
+            "inter_wiki" : {}
         }
-        
-    wiki_set_data = json.dumps(wiki_set_data, ensure_ascii = False)
-    
-    if data_type != 'backlink':
-        if rep_data == 'namumark':
-            data_in = (data_in + '_') if data_in else ''
-            data_end = [
-                '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
-                '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
-                '<div class="render_content" id="' + data_in + 'render_content"></div>', 
-                '''
-                    do_onmark_render(
-                        test_mode = "normal", 
-                        name_id = "''' + data_in + '''render_content",
-                        name_include = "''' + data_in + '''",
-                        name_doc = "''' + doc_name.replace('"', '\\"') + '''"
-                    );
-                ''',
-                []
-            ]
-        elif rep_data == 'markdown':
-            data_in = (data_in + '_') if data_in else ''
-            data_end = [
-                '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
-                '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
-                '<div class="render_content" id="' + data_in + 'render_content"></div>', 
-                '''
-                    do_onmark_render(
-                        test_mode = "normal", 
-                        name_id = "''' + data_in + '''render_content",
-                        name_include = "''' + data_in + '''",
-                        name_doc = "''' + doc_name.replace('"', '\\"') + '''"
-                    );
-                ''',
-                []
-            ]
+        for i in inter_wiki_data:
+            wiki_set_data['inter_wiki'][i[0]] = {
+                "logo" : i[2],
+                "link" : i[1]
+            }
+
+        wiki_set_data = json.dumps(wiki_set_data, ensure_ascii = False)
+
+        if data_type != 'backlink':
+            if rep_data == 'namumark':
+                data_in = (data_in + '_') if data_in else ''
+                data_end = [
+                    '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
+                    '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
+                    '<div class="render_content" id="' + data_in + 'render_content"></div>', 
+                    '''
+                        do_onmark_render(
+                            test_mode = "normal", 
+                            name_id = "''' + data_in + '''render_content",
+                            name_include = "''' + data_in + '''",
+                            name_doc = "''' + doc_name.replace('"', '\\"') + '''"
+                        );
+                    ''',
+                    []
+                ]
+            elif rep_data == 'markdown':
+                data_in = (data_in + '_') if data_in else ''
+                data_end = [
+                    '<pre style="display: none;" id="' + data_in + 'render_content_set">' + html.escape(wiki_set_data) + '</pre>' + \
+                    '<pre style="display: none;" id="' + data_in + 'render_content_load">' + html.escape(doc_data) + '</pre>' + \
+                    '<div class="render_content" id="' + data_in + 'render_content"></div>', 
+                    '''
+                        do_onmark_render(
+                            test_mode = "normal", 
+                            name_id = "''' + data_in + '''render_content",
+                            name_include = "''' + data_in + '''",
+                            name_doc = "''' + doc_name.replace('"', '\\"') + '''"
+                        );
+                    ''',
+                    []
+                ]
+            else:
+                data_end = [
+                    doc_data, 
+                    '', 
+                    []
+                ]
+
+            if data_type == 'api_view':
+                return [
+                    data_end[0], 
+                    data_end[1]
+                ]
+            else:
+                return data_end[0] + '<script>' + data_end[1] + '</script>'
         else:
-            data_end = [
+            backlink = self.do_backlink_generate(
+                rep_data, 
                 doc_data, 
-                '', 
-                []
-            ]
-
-        if data_type == 'api_view':
-            return [
-                data_end[0], 
-                data_end[1]
-            ]
-        else:
-            return data_end[0] + '<script>' + data_end[1] + '</script>'
-    else:
-        backlink = backlink_generate(
-            rep_data, 
-            doc_data, 
-            doc_name
-        )
-        
-        if backlink != []:
-            curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)
-            curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
-
-        conn.commit()
+                doc_name
+            )
+
+            if backlink != []:
+                curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)
+                curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
+
+            conn.commit()

+ 1 - 1
version.json

@@ -1,6 +1,6 @@
 {
     "beta" : {
-        "r_ver" : "v3.5.0-beta (stable1) (beta12) (dev17)",
+        "r_ver" : "v3.5.0-beta (stable1) (beta12) (dev18)",
         "c_ver" : "3500101",
         "s_ver" : "3500110"
     }

+ 4 - 1
views/main_css/js/render_onmark.js

@@ -1250,6 +1250,7 @@ function do_onmark_redirect_render(data, data_js, name_doc) {
         var link_sub = link_data_var[1];
         
         if(
+            name_include == '' &&
             window.location.search === '' &&
             !window.location.pathname.match(/\/doc_from\//)
         ) {
@@ -1273,6 +1274,8 @@ function do_onmark_remark_render(data) {
 }
 
 // Main
+// var 쓰인 부분 전부 let으로 변경하기 (호이스팅 혼용 방지)
+// 중첩 함수 구조로 개편하기
 function do_onmark_render(
     test_mode = 'test', 
     name_id = '', 
@@ -1299,7 +1302,7 @@ function do_onmark_render(
     var data_backlink = [];
     var data_nowiki = {};
 
-    var data_var = do_onmark_redirect_render(data, data_js, name_doc);
+    var data_var = do_onmark_redirect_render(data, data_js, name_doc, name_include);
     data = data_var[0];
     data_js = data_var[1];
     var passing = data_var[2];