Просмотр исходного кода

Merge pull request #472 from 2DU/master

Master
Surplus_Up (2DU) 8 лет назад
Родитель
Сommit
7d8d1e9459
12 измененных файлов с 183 добавлено и 153 удалено
  1. 4 27
      ISSUE_TEMPLATE.md
  2. 21 0
      Readme-Ko.md
  3. BIN
      Test2.db
  4. 1 1
      Version-Ko.md
  5. 89 75
      app.py
  6. 4 1
      func.py
  7. 4 2
      language/en-US.json
  8. 5 3
      language/ko-KR.json
  9. 14 0
      license.md
  10. 2 2
      mark.py
  11. 13 16
      readme.md
  12. 26 26
      set_mark/start.py

+ 4 - 27
ISSUE_TEMPLATE.md

@@ -1,30 +1,7 @@
-## 설명
-<!-- 해당 이슈에 대한 자세한 설명을 작성해주세요.
+## Explanation (설명)
 
 
-예시: 로그아웃 직후 로그인 시 로그인이 되지 않습니다. -->
+## Desired results (원하는 결과)
 
 
-## 과정
-<!-- 해당 이슈를 발생한 당시의 행동을 최대한 자세하게 나열해주세요.
+## Current Results (현재 결과)
 
 
-예시:
-1. 로그인 버튼을 눌러 로그인을 합니다.
-2. 로그아웃 버튼을 눌러 로그아웃을 합니다.
-3. 다시 로그인 버튼을 눌러 로그인을 합니다. -->
-
-## 정상 동작 시의 결과
-<!-- 이 과정을 통해 얻어야할 결과가 무엇인가요? 
-
-예시: 로그인이 되어야 합니다. -->
-
-## 현재 결과
-<!-- 이 과정을 통해 얻은 결과를 설명해주세요.
-
-예시: 로그인이 되지 않습니다. -->
-
-## 스크린샷
-<!-- 오류가 발생한 스크린샷을 최소 한장 이상 첨부해주세요. -->
-
-## 수정 되어야 할 부분
-<!-- 만약 수정되어야 할 부분이나 해결 방법을 아신다면 기재해주세요.
-
-예시: 만약 로그아웃 페이지에서 로그인을 할 경우 대문 페이지로 이동시켜면 될 것 같습니다. -->
+## Screenshot (스크린샷)

+ 21 - 0
Readme-Ko.md

@@ -0,0 +1,21 @@
+## 개요
+나무마크 기반의 파이썬 위키 엔진. (3.5 이상)
+
+## 클론 명령어
+### 일반
+ * git clone https://github.com/2DU/openNAMU.git
+
+### 베타
+ * git clone -b master https://github.com/2DU/openNAMU.git
+
+## 설치법
+ * [참조](http://namu.ml/w/오픈나무%2F설치법)
+ 
+## set.json 설명
+ * db = 데이터베이스 이름
+
+set.json를 삭제하면 다시 새로 만들 수 있습니다.
+
+## 기타
+ * [테스트 서버](http://namu.ml/)
+ * 첫 번째 가입자에게 소유자 권한이 부여됩니다.


+ 1 - 1
version.md → Version-Ko.md

@@ -173,7 +173,7 @@
 
 
 ----
 ----
 ## 기타
 ## 기타
- * 현재 버전 : v3.0.3
+ * 현재 버전 : v3.0.4
 
 
 ----
 ----
 ## 개발 이념
 ## 개발 이념

+ 89 - 75
app.py

@@ -19,7 +19,7 @@ import sys
 from func import *
 from func import *
 
 
 # 버전 표기
 # 버전 표기
-r_ver = 'v3.0.4-Final-Beta-' + re.sub('^[0-9]{2}', '', str(int(datetime.datetime.fromtimestamp(os.path.getmtime('app.py')).strftime('%Y%m%d'))))
+r_ver = 'v3.0.4-Stable-' + re.sub('^[0-9]{2}', '', str(int(datetime.datetime.fromtimestamp(os.path.getmtime('app.py')).strftime('%Y%m%d'))))
 print('Version : ' + r_ver)
 print('Version : ' + r_ver)
 
 
 # set.json 설정 확인
 # set.json 설정 확인
@@ -309,7 +309,7 @@ def alarm():
     data += '</ul>'
     data += '</ul>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('alarm'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('alarm'), wiki_set(), custom(), other2([0, 0])],
         data = data,
         data = data,
         menu = [['user', load_lang('user')]]
         menu = [['user', load_lang('user')]]
     ))
     ))
@@ -358,7 +358,7 @@ def inter_wiki(tools = None):
             div += '<a href="/' + plus_link + '">(' + load_lang('plus') + ')</a>'
             div += '<a href="/' + plus_link + '">(' + load_lang('plus') + ')</a>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [title, wiki_set(1), custom(), other2([0, 0])],
+        imp = [title, wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -399,7 +399,7 @@ def plus_inter(tools = None):
             form_data = '<input placeholder="HTML" type="text" name="title">'
             form_data = '<input placeholder="HTML" type="text" name="title">'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [title, wiki_set(1), custom(), other2([0, 0])],
+            imp = [title, wiki_set(), custom(), other2([0, 0])],
             data = '<form method="post">' + form_data + '<hr><button type="submit">' + load_lang('plus') + '</button></form>',
             data = '<form method="post">' + form_data + '<hr><button type="submit">' + load_lang('plus') + '</button></form>',
             menu = [['other', load_lang('other')]]
             menu = [['other', load_lang('other')]]
         ))
         ))
@@ -422,7 +422,7 @@ def edit_set(num = 0):
             li_data += '<li><a href="/edit_set/' + str(x) + '">' + li + '</a></li>'
             li_data += '<li><a href="/edit_set/' + str(x) + '">' + li + '</a></li>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('setting'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('setting'), wiki_set(), custom(), other2([0, 0])],
             data = '<h2>' + load_lang('list') + '</h2><ul>' + li_data + '</ul>',
             data = '<h2>' + load_lang('list') + '</h2><ul>' + li_data + '</ul>',
             menu = [['manager', load_lang('admin')]]
             menu = [['manager', load_lang('admin')]]
         ))
         ))
@@ -492,7 +492,7 @@ def edit_set(num = 0):
                     div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
                     div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['Normal', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['Normal', wiki_set(), custom(), other2([0, 0])],
                 data = '''
                 data = '''
                         <form method="post">
                         <form method="post">
                             <span>''' + load_lang('name') + '''</span>
                             <span>''' + load_lang('name') + '''</span>
@@ -585,7 +585,7 @@ def edit_set(num = 0):
             conn.commit()
             conn.commit()
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['Set Text', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['Set Text', wiki_set(), custom(), other2([0, 0])],
                 data = '''
                 data = '''
                         <form method="post">
                         <form method="post">
                             <span>Register Text</span>
                             <span>Register Text</span>
@@ -625,7 +625,7 @@ def edit_set(num = 0):
                 data = ''
                 data = ''
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['Main HEAD', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['Main HEAD', wiki_set(), custom(), other2([0, 0])],
                 data = '''
                 data = '''
                         <form method="post">
                         <form method="post">
                             <textarea rows="25" name="content">''' + html.escape(data) + '''</textarea>
                             <textarea rows="25" name="content">''' + html.escape(data) + '''</textarea>
@@ -668,7 +668,7 @@ def edit_set(num = 0):
                 data = ''.join(lines)
                 data = ''.join(lines)
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['robots.txt', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['robots.txt', wiki_set(), custom(), other2([0, 0])],
                 data = '''
                 data = '''
                         <a href="/robots.txt">(View)</a>
                         <a href="/robots.txt">(View)</a>
                         <hr>
                         <hr>
@@ -711,7 +711,7 @@ def edit_set(num = 0):
             conn.commit()
             conn.commit()
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['Google', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['Google', wiki_set(), custom(), other2([0, 0])],
                 data = '''
                 data = '''
                         <form method="post">
                         <form method="post">
                             <span>reCAPTCHA (HTML)</span>
                             <span>reCAPTCHA (HTML)</span>
@@ -746,7 +746,7 @@ def not_close_topic():
     div += '</ul>'
     div += '</ul>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('open') + ' ' + load_lang('discussion') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('open') + ' ' + load_lang('discussion') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['manager', load_lang('admin')]]
         menu = [['manager', load_lang('admin')]]
     ))
     ))
@@ -776,7 +776,7 @@ def acl_list():
     div += '</ul>'
     div += '</ul>'
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = ['ACL ' + load_lang('document') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = ['ACL ' + load_lang('document') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -856,7 +856,7 @@ def admin_plus(name = None):
         data += '<li><input type="checkbox" ' + state +  ' name="owner" ' + exist_list[7] + '> ' + load_lang('owner') + '</li></ul>'
         data += '<li><input type="checkbox" ' + state +  ' name="owner" ' + exist_list[7] + '> ' + load_lang('owner') + '</li></ul>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('admin_group') + ' ' + load_lang('plus'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('admin_group') + ' ' + load_lang('plus'), wiki_set(), custom(), other2([0, 0])],
             data = '<form method="post">' + data + '<hr><button id="save" ' + state +  ' type="submit">' + load_lang('save') + '</button></form>',
             data = '<form method="post">' + data + '<hr><button id="save" ' + state +  ' type="submit">' + load_lang('save') + '</button></form>',
             menu = [['manager', load_lang('admin')]]
             menu = [['manager', load_lang('admin')]]
         ))        
         ))        
@@ -877,7 +877,7 @@ def admin_list():
     div += '</ul>'
     div += '</ul>'
                 
                 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('admin') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('admin') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -941,7 +941,7 @@ def user_log():
     list_data += next_fix('/user_log?num=', num, user_list)
     list_data += next_fix('/user_log?num=', num, user_list)
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('recent') + ' ' + load_lang('register'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('recent') + ' ' + load_lang('register'), wiki_set(), custom(), other2([0, 0])],
         data = list_data,
         data = list_data,
         menu = 0
         menu = 0
     ))
     ))
@@ -965,7 +965,7 @@ def admin_log():
     list_data += next_fix('/admin_log?num=', num, get_list)
     list_data += next_fix('/admin_log?num=', num, get_list)
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('recent') + ' ' + load_lang('authority'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('recent') + ' ' + load_lang('authority'), wiki_set(), custom(), other2([0, 0])],
         data = list_data,
         data = list_data,
         menu = 0
         menu = 0
     ))
     ))
@@ -985,7 +985,7 @@ def give_log():
     list_data += '</ul><hr><a href="/manager/8">(' + load_lang('create') + ')</a>'
     list_data += '</ul><hr><a href="/manager/8">(' + load_lang('create') + ')</a>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('admin_group') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('admin_group') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = list_data,
         data = list_data,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -1067,7 +1067,7 @@ def update():
                 return redirect('/re_start')
                 return redirect('/re_start')
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('update'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('update'), wiki_set(), custom(), other2([0, 0])],
         data = 'Auto Update Is Not Support. <a href="https://github.com/2DU/openNAMU">(GitHub)</a>',
         data = 'Auto Update Is Not Support. <a href="https://github.com/2DU/openNAMU">(GitHub)</a>',
         menu = [['manager/1', load_lang('admin')]]
         menu = [['manager/1', load_lang('admin')]]
     ))
     ))
@@ -1092,13 +1092,13 @@ def xref(name = None):
         
         
         div += '</li>'
         div += '</li>'
         
         
-        if re.search('^:', data[0]):
+        if re.search('^' + load_lang('template') + ':', data[0]):
             div += '<li><a id="inside" href="/xref/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + load_lang('backlink') + ')</li>'
             div += '<li><a id="inside" href="/xref/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + load_lang('backlink') + ')</li>'
       
       
     div += '</ul>' + next_fix('/xref/' + url_pas(name) + '?num=', num, data_list)
     div += '</ul>' + next_fix('/xref/' + url_pas(name) + '?num=', num, data_list)
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('backlink') + ')', 0])],
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('backlink') + ')', 0])],
         data = div,
         data = div,
         menu = [['w/' + url_pas(name), load_lang('document')]]
         menu = [['w/' + url_pas(name), load_lang('document')]]
     ))
     ))
@@ -1125,7 +1125,7 @@ def please():
     div += '</ul>' + next_fix('/please?num=', num, data_list)
     div += '</ul>' + next_fix('/please?num=', num, data_list)
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('need') + ' ' + load_lang('document'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('need') + ' ' + load_lang('document'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -1171,7 +1171,7 @@ def recent_discuss(tools = 'normal'):
         div += '</tbody></table>'
         div += '</tbody></table>'
             
             
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('recent') + ' ' + load_lang('discussion'), wiki_set(1), custom(), other2([m_sub, 0])],
+        imp = [load_lang('recent') + ' ' + load_lang('discussion'), wiki_set(), custom(), other2([m_sub, 0])],
         data = div,
         data = div,
         menu = 0
         menu = 0
     ))
     ))
@@ -1186,16 +1186,16 @@ def block_log(name = None, tool = None, tool2 = None):
     else:
     else:
         sql_num = 0
         sql_num = 0
     
     
-    div = '<table style="width: 100%; text-align: center;"><tbody><tr><td style="width: 33.3%;">' + load_lang('blocked') + '</td><td style="width: 33.3%;">' + load_lang('admin') + '</td><td style="width: 33.3%;">' + load_lang('period ') + '</td></tr>'
+    div = '<table style="width: 100%; text-align: center;"><tbody><tr><td style="width: 33.3%;">' + load_lang('blocked') + '</td><td style="width: 33.3%;">' + load_lang('admin') + '</td><td style="width: 33.3%;">' + load_lang('period') + '</td></tr>'
     
     
     data_list = ''
     data_list = ''
     
     
     if not name:
     if not name:
         if not tool2:
         if not tool2:
             div = '''
             div = '''
-                    <a href="/manager/11">(' + load_lang('blocked') + ')</a> <a href="/manager/12">(''' + load_lang('admin') + ''')</a>
+                    <a href="/manager/11">(''' + load_lang('blocked') + ''')</a> <a href="/manager/12">(''' + load_lang('admin') + ''')</a>
                     <hr>
                     <hr>
-                    <a href="/block_log/ip">(IP)</a> <a href="/block_log/user">(''' + load_lang('subscriber') + ')</a> <a href="/block_log/never_end">(' + load_lang('limitless') + ')</a> <a href="/block_log/can_end">(' + load_lang('period ') + ')</a> <a href="/block_log/end">(' + load_lang('release') + ')</a> <a href="/block_log/now">(' + load_lang('now') + ')</a> <a href="/block_log/edit_filter">(' + load_lang('edit_filter') + ''')</a>
+                    <a href="/block_log/ip">(IP)</a> <a href="/block_log/user">(''' + load_lang('subscriber') + ')</a> <a href="/block_log/never_end">(' + load_lang('limitless') + ')</a> <a href="/block_log/can_end">(' + load_lang('period') + ')</a> <a href="/block_log/end">(' + load_lang('release') + ')</a> <a href="/block_log/now">(' + load_lang('now') + ')</a> <a href="/block_log/edit_filter">(' + load_lang('edit_filter') + ''')</a>
                     <hr>
                     <hr>
                     ''' + div
                     ''' + div
             
             
@@ -1237,7 +1237,7 @@ def block_log(name = None, tool = None, tool2 = None):
 
 
                 curs.execute("select why, block, blocker, end, today from rb where blocker = ? order by today desc limit ?, '50'", [load_lang('tool') + ':' + load_lang('edit_filter'), str(sql_num)])
                 curs.execute("select why, block, blocker, end, today from rb where blocker = ? order by today desc limit ?, '50'", [load_lang('tool') + ':' + load_lang('edit_filter'), str(sql_num)])
             else:
             else:
-                sub = '(' + load_lang('period ') + ')'
+                sub = '(' + load_lang('period') + ')'
                 
                 
                 curs.execute("select why, block, blocker, end, today from rb where end like ? order by today desc limit ?, '50'", ['%\-%', str(sql_num)])
                 curs.execute("select why, block, blocker, end, today from rb where end like ? order by today desc limit ?, '50'", ['%\-%', str(sql_num)])
     else:
     else:
@@ -1285,7 +1285,7 @@ def block_log(name = None, tool = None, tool2 = None):
         div += next_fix('/' + url_pas(tool) + '/' + url_pas(name) + '?num=', num, data_list)
         div += next_fix('/' + url_pas(tool) + '/' + url_pas(name) + '?num=', num, data_list)
                 
                 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('recent') + ' ' + load_lang('ban'), wiki_set(1), custom(), other2([sub, 0])],
+        imp = [load_lang('recent') + ' ' + load_lang('ban'), wiki_set(), custom(), other2([sub, 0])],
         data = div,
         data = div,
         menu = menu
         menu = menu
     ))
     ))
@@ -1343,7 +1343,7 @@ def deep_search(name = None):
     div += next_fix('/search/' + url_pas(name) + '?num=', num, all_list)
     div += next_fix('/search/' + url_pas(name) + '?num=', num, all_list)
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('search') + ')', 0])],
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('search') + ')', 0])],
         data = div,
         data = div,
         menu = 0
         menu = 0
     ))
     ))
@@ -1387,7 +1387,7 @@ def raw_view(name = None, sub_title = None, num = None):
         p_data = '<textarea readonly rows="25">' + p_data + '</textarea>'
         p_data = '<textarea readonly rows="25">' + p_data + '</textarea>'
         
         
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [v_name, wiki_set(1), custom(), other2([sub, 0])],
+            imp = [v_name, wiki_set(), custom(), other2([sub, 0])],
             data = p_data,
             data = p_data,
             menu = menu
             menu = menu
         ))
         ))
@@ -1427,7 +1427,11 @@ def revert(name = None):
                 curs.execute("insert into data (title, data) values (?, ?)", [name, data[0][0]])
                 curs.execute("insert into data (title, data) values (?, ?)", [name, data[0][0]])
                 
                 
             history_plus(name, data[0][0], get_time(), ip_check(), flask.request.form.get('send', None) + ' (' + str(num) + load_lang('version') + ')', leng)
             history_plus(name, data[0][0], get_time(), ip_check(), flask.request.form.get('send', None) + ' (' + str(num) + load_lang('version') + ')', leng)
-            namumark(name, data[0][0], 1)
+            namumark_re(
+                name = name,
+                data = data[0][0],
+                set_num = 1
+            )
             
             
             conn.commit()
             conn.commit()
             
             
@@ -1438,7 +1442,7 @@ def revert(name = None):
             return redirect('/w/' + url_pas(name))
             return redirect('/w/' + url_pas(name))
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('revert') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('revert') + ')', 0])],
             data =  '''
             data =  '''
                     <form method="post">
                     <form method="post">
                         <span>''' + flask.request.args.get('num', '0') + load_lang('version') + '''</span>
                         <span>''' + flask.request.args.get('num', '0') + load_lang('version') + '''</span>
@@ -1482,7 +1486,7 @@ def big_delete():
         return redirect('/')
         return redirect('/')
     else:
     else:
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('bulk_delete'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('bulk_delete'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <span>
                     <span>
                         Title A
                         Title A
@@ -1520,7 +1524,7 @@ def edit_filter():
         div = '<a href="/manager/9">(' + load_lang('plus') + ')</a>'
         div = '<a href="/manager/9">(' + load_lang('plus') + ')</a>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('edit_filter') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('edit_filter') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['manager', load_lang('admin')]]
         menu = [['manager', load_lang('admin')]]
     ))
     ))
@@ -1575,7 +1579,7 @@ def set_edit_filter(name = None):
             stat = ''
             stat = ''
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('edit_filter') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('edit_filter') + ')', 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         <input ''' + stat + ''' type="checkbox" ''' + time_data + ''' name="ban">
                         <input ''' + stat + ''' type="checkbox" ''' + time_data + ''' name="ban">
@@ -1681,7 +1685,11 @@ def edit(name = None):
         curs.execute("delete from back where link = ?", [name])
         curs.execute("delete from back where link = ?", [name])
         curs.execute("delete from back where title = ? and type = 'no'", [name])
         curs.execute("delete from back where title = ? and type = 'no'", [name])
         
         
-        namumark(name, content, 1)
+        namumark_re(
+            name = name,
+            data = content,
+            set_num = 1
+        )
         
         
         conn.commit()
         conn.commit()
         
         
@@ -1725,7 +1733,7 @@ def edit(name = None):
         js_data = edit_help_button()
         js_data = edit_help_button()
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('edit') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('edit') + ')', 0])],
             data = get_name + js_data[0] + '''
             data = get_name + js_data[0] + '''
                     <form method="post" action="/edit/''' + url_pas(name) + action + '''">
                     <form method="post" action="/edit/''' + url_pas(name) + action + '''">
                         ''' + js_data[1] + '''
                         ''' + js_data[1] + '''
@@ -1756,7 +1764,10 @@ def preview(name = None):
     new_data = re.sub('^\r\n', '', new_data)
     new_data = re.sub('^\r\n', '', new_data)
     new_data = re.sub('\r\n$', '', new_data)
     new_data = re.sub('\r\n$', '', new_data)
     
     
-    end_data = namumark(name, new_data, 0)
+    end_data = namumark_re(
+        name = name,
+        data = new_data
+    )
     
     
     if flask.request.args.get('section', None):
     if flask.request.args.get('section', None):
         action = '?section=' + flask.request.args.get('section', None)
         action = '?section=' + flask.request.args.get('section', None)
@@ -1766,7 +1777,7 @@ def preview(name = None):
     js_data = edit_help_button()
     js_data = edit_help_button()
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('preview') + ')', 0])],
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('preview') + ')', 0])],
         data = js_data[0] + '''
         data = js_data[0] + '''
                 <form method="post" action="/edit/''' + url_pas(name) + action + '''">
                 <form method="post" action="/edit/''' + url_pas(name) + action + '''">
                     ''' + js_data[1] + '''
                     ''' + js_data[1] + '''
@@ -1819,7 +1830,7 @@ def delete(name = None):
             return redirect('/w/' + url_pas(name))
             return redirect('/w/' + url_pas(name))
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('delete') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('delete') + ')', 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         ''' + ip_warring() + '''
                         ''' + ip_warring() + '''
@@ -1850,7 +1861,7 @@ def move_data(name = None):
     data += '</ul>'
     data += '</ul>'
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('move') + ' ' + load_lang('history') + ')', 0])],
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('move') + ' ' + load_lang('history') + ')', 0])],
         data = data,
         data = data,
         menu = [['history/' + url_pas(name), load_lang('history')]]
         menu = [['history/' + url_pas(name), load_lang('history')]]
     ))        
     ))        
@@ -1892,7 +1903,7 @@ def move(name = None):
         return redirect('/w/' + url_pas(flask.request.form.get('title', None)))
         return redirect('/w/' + url_pas(flask.request.form.get('title', None)))
     else:            
     else:            
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('move') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('move') + ')', 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         ''' + ip_warring() + '''
                         ''' + ip_warring() + '''
@@ -1910,7 +1921,7 @@ def move(name = None):
 @app.route('/other')
 @app.route('/other')
 def other():
 def other():
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('other') + ' ' + load_lang('tool'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('other') + ' ' + load_lang('tool'), wiki_set(), custom(), other2([0, 0])],
         data = '''
         data = '''
                 <h2>''' + load_lang('record') + '''</h2>
                 <h2>''' + load_lang('record') + '''</h2>
                 <ul>
                 <ul>
@@ -1953,7 +1964,7 @@ def manager(num = 1):
     
     
     if num == 1:
     if num == 1:
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('admin') + ' ' + load_lang('tool'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('admin') + ' ' + load_lang('tool'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <h2>''' + load_lang('admin') + '''</h2>
                     <h2>''' + load_lang('admin') + '''</h2>
                     <ul>
                     <ul>
@@ -1987,7 +1998,7 @@ def manager(num = 1):
                 placeholder = title_list[(num - 2)][0]
                 placeholder = title_list[(num - 2)][0]
 
 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = ['Redirect', wiki_set(1), custom(), other2([0, 0])],
+                imp = ['Redirect', wiki_set(), custom(), other2([0, 0])],
                 data = '<form method="post"><input placeholder="' + placeholder + '" name="name" type="text"><hr><button type="submit">' + load_lang('move') + '</button></form>',
                 data = '<form method="post"><input placeholder="' + placeholder + '" name="name" type="text"><hr><button type="submit">' + load_lang('move') + '</button></form>',
                 menu = [['manager', load_lang('admin')]]
                 menu = [['manager', load_lang('admin')]]
             ))
             ))
@@ -2029,7 +2040,7 @@ def title_index():
         else:
         else:
             count_end += [0]
             count_end += [0]
 
 
-        sql_list = ['틀:', load_lang('category') + ':', load_lang('user') + ':', load_lang('file') + ':']
+        sql_list = [load_lang('template') + ':', load_lang('category') + ':', load_lang('user') + ':', load_lang('file') + ':']
         for sql in sql_list:
         for sql in sql_list:
             curs.execute("select count(title) from data where title like ?", [sql + '%'])
             curs.execute("select count(title) from data where title like ?", [sql + '%'])
             count = curs.fetchall()
             count = curs.fetchall()
@@ -2041,17 +2052,17 @@ def title_index():
         count_end += [count_end[0] - count_end[1]  - count_end[2]  - count_end[3]  - count_end[4]]
         count_end += [count_end[0] - count_end[1]  - count_end[2]  - count_end[3]  - count_end[4]]
         
         
         data += '</ul><hr><ul><li>All : ' + str(count_end[0]) + '</li></ul><hr><ul>'
         data += '</ul><hr><ul><li>All : ' + str(count_end[0]) + '</li></ul><hr><ul>'
-        data += '<li>Template : ' + str(count_end[1]) + '</li>'
-        data += '<li>Category : ' + str(count_end[2]) + '</li>'
-        data += '<li>User : ' + str(count_end[3]) + '</li>'
-        data += '<li>File : ' + str(count_end[4]) + '</li>'
+        data += '<li>' + load_lang('template') + ' : ' + str(count_end[1]) + '</li>'
+        data += '<li>' + load_lang('category') + ' : ' + str(count_end[2]) + '</li>'
+        data += '<li>' + load_lang('user') + ' : ' + str(count_end[3]) + '</li>'
+        data += '<li>' + load_lang('file') + ' : ' + str(count_end[4]) + '</li>'
         data += '<li>Other : ' + str(count_end[5]) + '</li>'
         data += '<li>Other : ' + str(count_end[5]) + '</li>'
 
 
     data += '</ul>' + next_fix('/title_index?num=' + str(num) + '&page=', page, title_list, num)
     data += '</ul>' + next_fix('/title_index?num=' + str(num) + '&page=', page, title_list, num)
     sub = ' (' + str(num) + ')'
     sub = ' (' + str(num) + ')'
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('all') + ' ' + load_lang('document'), wiki_set(1), custom(), other2([sub, 0])],
+        imp = [load_lang('all') + ' ' + load_lang('document'), wiki_set(), custom(), other2([sub, 0])],
         data = data,
         data = data,
         menu = [['other', load_lang('other')]]
         menu = [['other', load_lang('other')]]
     ))
     ))
@@ -2190,7 +2201,7 @@ def topic_admin(name = None, sub = None, num = None):
     ban = '<h2>' + load_lang('state') + '</h2><ul>' + ban
     ban = '<h2>' + load_lang('state') + '</h2><ul>' + ban
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('discussion') + ' ' + load_lang('tool'), wiki_set(1), custom(), other2([' (' + str(num) + ')', 0])],
+        imp = [load_lang('discussion') + ' ' + load_lang('tool'), wiki_set(), custom(), other2([' (' + str(num) + ')', 0])],
         data = ban,
         data = ban,
         menu = [['topic/' + url_pas(name) + '/sub/' + url_pas(sub) + '#' + str(num), load_lang('discussion')]]
         menu = [['topic/' + url_pas(name) + '/sub/' + url_pas(sub) + '#' + str(num), load_lang('discussion')]]
     ))
     ))
@@ -2291,7 +2302,7 @@ def topic(name = None, sub = None):
                                 
                                 
             all_data += '<table id="toron"><tbody><tr><td id="toron_color_red">'
             all_data += '<table id="toron"><tbody><tr><td id="toron_color_red">'
             all_data += '<a href="#' + topic_data[1] + '">#' + topic_data[1] + '</a> ' + ip_pas(topic_data[3]) + who_plus + ' <span style="float: right;">' + topic_data[2] + '</span>'
             all_data += '<a href="#' + topic_data[1] + '">#' + topic_data[1] + '</a> ' + ip_pas(topic_data[3]) + who_plus + ' <span style="float: right;">' + topic_data[2] + '</span>'
-            all_data += '</td></tr><tr><td>' + namumark('', topic_data[0], 0) + '</td></tr></tbody></table><br>'    
+            all_data += '</td></tr><tr><td>' + namumark_re(data = topic_data[0]) + '</td></tr></tbody></table><br>'    
 
 
         for topic_data in topic:
         for topic_data in topic:
             if number == 1:
             if number == 1:
@@ -2310,7 +2321,7 @@ def topic(name = None, sub = None):
             else:
             else:
                 blind_data = ''
                 blind_data = ''
 
 
-            user_write = namumark('', topic_data[0], 0)
+            user_write = namumark_re(data = topic_data[0])
             ip = ip_pas(topic_data[3])
             ip = ip_pas(topic_data[3])
             
             
             curs.execute('select acl from user where id = ?', [topic_data[3]])
             curs.execute('select acl from user where id = ?', [topic_data[3]])
@@ -2356,7 +2367,7 @@ def topic(name = None, sub = None):
             data += '<button type="submit">Send</button></form>'
             data += '<button type="submit">Send</button></form>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('discussion') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('discussion') + ')', 0])],
             data = '<h2 id="topic_top_title">' + sub + '</h2>' + all_data + data,
             data = '<h2 id="topic_top_title">' + sub + '</h2>' + all_data + data,
             menu = [['topic/' + url_pas(name), load_lang('list')]]
             menu = [['topic/' + url_pas(name), load_lang('list')]]
         ))
         ))
@@ -2419,7 +2430,7 @@ def close_topic_list(name = None, tool = None):
             plus = re.sub('^<br>', '', plus)
             plus = re.sub('^<br>', '', plus)
         
         
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + sub + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + sub + ')', 0])],
             data =  '<form method="post">' + div + plus + '</form>',
             data =  '<form method="post">' + div + plus + '</form>',
             menu = menu
             menu = menu
         ))
         ))
@@ -2481,7 +2492,7 @@ def login():
         return redirect('/user')  
         return redirect('/user')  
     else:        
     else:        
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
-            imp = [load_lang('login'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('login'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         <input placeholder="ID" name="id" type="text">
                         <input placeholder="ID" name="id" type="text">
@@ -2555,7 +2566,7 @@ def change_password():
                 div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
                 div2 += '<option value="' + skin_data + '">' + skin_data + '</option>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
-            imp = [load_lang('my_info') + ' ' + load_lang('edit'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('my_info') + ' ' + load_lang('edit'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         <span>ID : ''' + ip + '''</span>
                         <span>ID : ''' + ip + '''</span>
@@ -2634,7 +2645,7 @@ def user_check(name = None):
         return re_error('/error/2')
         return re_error('/error/2')
             
             
     return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
     return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
-        imp = [load_lang('check'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('check'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['manager', load_lang('admin')]]
         menu = [['manager', load_lang('admin')]]
     ))
     ))
@@ -2645,7 +2656,7 @@ def plus_check(name):
         return redirect('/check/' + url_pas(name) + '?plus=' + url_pas(flask.request.form.get('name2', None)))
         return redirect('/check/' + url_pas(name) + '?plus=' + url_pas(flask.request.form.get('name2', None)))
     else:
     else:
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),
-            imp = [load_lang('plus'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('plus'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         <input placeholder="' + load_lang('compare') + '" name="name2" type="text">
                         <input placeholder="' + load_lang('compare') + '" name="name2" type="text">
@@ -2706,7 +2717,7 @@ def register():
             contract = data[0][0] + '<hr>'
             contract = data[0][0] + '<hr>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
         return css_html_js_minify.html_minify(flask.render_template(skin_check(),    
-            imp = [load_lang('register'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('register'), wiki_set(), custom(), other2([0, 0])],
             data = '''
             data = '''
                     <form method="post">
                     <form method="post">
                         ''' + contract + '''
                         ''' + contract + '''
@@ -2829,7 +2840,7 @@ def user_ban(name = None):
             data += '<input placeholder="' + load_lang('why') + '" name="why" type="text"><hr>' + plus
             data += '<input placeholder="' + load_lang('why') + '" name="why" type="text"><hr>' + plus
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + now + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + now + ')', 0])],
             data = '<form method="post">' + data + '<button type="submit">' + now + '</button></form>',
             data = '<form method="post">' + data + '<button type="submit">' + now + '</button></form>',
             menu = [['manager', load_lang('admin')]]
             menu = [['manager', load_lang('admin')]]
         ))            
         ))            
@@ -2916,7 +2927,7 @@ def acl(name = None):
                 data += '<hr><input value="' + html.escape(acl_data[0][1]) + '" placeholder="' + load_lang('why') + '" name="why" type="text" ' + check_ok + '>'
                 data += '<hr><input value="' + html.escape(acl_data[0][1]) + '" placeholder="' + load_lang('why') + '" name="why" type="text" ' + check_ok + '>'
             
             
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (ACL)', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (ACL)', 0])],
             data = '<form method="post">' + data + '<hr><button type="submit">ACL ' + load_lang('edit') + '</button></form>',
             data = '<form method="post">' + data + '<hr><button type="submit">ACL ' + load_lang('edit') + '</button></form>',
             menu = [['w/' + url_pas(name), load_lang('document')], ['manager', load_lang('admin')]]
             menu = [['w/' + url_pas(name), load_lang('document')], ['manager', load_lang('admin')]]
         ))
         ))
@@ -2976,7 +2987,7 @@ def user_admin(name = None):
                     div += '<option value="' + data[0] + '">' + data[0] + '</option>'
                     div += '<option value="' + data[0] + '">' + data[0] + '</option>'
         
         
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('authority') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('authority') + ')', 0])],
             data =  '<form method="post"><select name="select">' + div + '</select><hr><button type="submit">' + load_lang('edit') + '</button></form>',
             data =  '<form method="post"><select name="select">' + div + '</select><hr><button type="submit">' + load_lang('edit') + '</button></form>',
             menu = [['manager', load_lang('admin')]]
             menu = [['manager', load_lang('admin')]]
         ))
         ))
@@ -3002,7 +3013,7 @@ def diff_data(name = None):
                 result = re.sub('\r', '', diff(diff_data))
                 result = re.sub('\r', '', diff(diff_data))
             
             
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
             return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-                imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('compare') + ')', 0])],
+                imp = [name, wiki_set(), custom(), other2([' (' + load_lang('compare') + ')', 0])],
                 data = '<pre>' + result + '</pre>',
                 data = '<pre>' + result + '</pre>',
                 menu = [['history/' + url_pas(name), load_lang('history')]]
                 menu = [['history/' + url_pas(name), load_lang('history')]]
             ))
             ))
@@ -3020,7 +3031,7 @@ def down(name = None):
     div += '</ul>'
     div += '</ul>'
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([' (' + load_lang('under') + ')', 0])],
+        imp = [name, wiki_set(), custom(), other2([' (' + load_lang('under') + ')', 0])],
         data = div,
         data = div,
         menu = [['w/' + url_pas(name), load_lang('document')]]
         menu = [['w/' + url_pas(name), load_lang('document')]]
     ))
     ))
@@ -3072,7 +3083,7 @@ def read_view(name = None):
             for data in back:    
             for data in back:    
                 if re.search('^' + load_lang('category') + ':', data[0]):
                 if re.search('^' + load_lang('category') + ':', data[0]):
                     u_div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
                     u_div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
-                elif re.search('^:', data[0]):
+                elif re.search('^' + load_lang('template') + ':', data[0]):
                     curs.execute("select data from data where title = ?", [data[0]])
                     curs.execute("select data from data where title = ?", [data[0]])
                     db_data = curs.fetchall()
                     db_data = curs.fetchall()
                     if db_data:
                     if db_data:
@@ -3137,7 +3148,10 @@ def read_view(name = None):
         else_data = re.sub('^\r\n', '', else_data)
         else_data = re.sub('^\r\n', '', else_data)
         else_data = re.sub('\r\n$', '', else_data)
         else_data = re.sub('\r\n$', '', else_data)
             
             
-    end_data = namumark(name, else_data, 0)
+    end_data = namumark_re(
+        name = name,
+        data = else_data
+    )
     
     
     if num:
     if num:
         menu = [['history/' + url_pas(name), load_lang('history')]]
         menu = [['history/' + url_pas(name), load_lang('history')]]
@@ -3172,7 +3186,7 @@ def read_view(name = None):
     div = end_data + div
     div = end_data + div
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [name, wiki_set(1), custom(), other2([sub + acl, r_date])],
+        imp = [name, wiki_set(), custom(), other2([sub + acl, r_date])],
         data = div,
         data = div,
         menu = menu
         menu = menu
     )), response_data
     )), response_data
@@ -3218,7 +3232,7 @@ def user_topic_list(name = None):
         sub = 0 
         sub = 0 
     
     
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('discussion') + ' ' + load_lang('record'), wiki_set(1), custom(), other2([sub, 0])],
+        imp = [load_lang('discussion') + ' ' + load_lang('record'), wiki_set(), custom(), other2([sub, 0])],
         data = div,
         data = div,
         menu = [['other', load_lang('other')], ['user', load_lang('user')], ['count/' + url_pas(name), load_lang('count')], ['record/' + url_pas(name), load_lang('record')]]
         menu = [['other', load_lang('other')], ['user', load_lang('user')], ['count/' + url_pas(name), load_lang('count')], ['record/' + url_pas(name), load_lang('record')]]
     ))
     ))
@@ -3407,7 +3421,7 @@ def recent_changes(name = None, tool = 'record'):
             sub = 0
             sub = 0
                 
                 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [title, wiki_set(1), custom(), other2([sub, 0])],
+            imp = [title, wiki_set(), custom(), other2([sub, 0])],
             data = div,
             data = div,
             menu = menu
             menu = menu
         ))
         ))
@@ -3480,7 +3494,7 @@ def upload():
         return redirect('/w/' + load_lang('file') + ':' + name)      
         return redirect('/w/' + load_lang('file') + ':' + name)      
     else:
     else:
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('upload'), wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('upload'), wiki_set(), custom(), other2([0, 0])],
             data =  '''
             data =  '''
                     <form method="post" enctype="multipart/form-data" accept-charset="utf8">
                     <form method="post" enctype="multipart/form-data" accept-charset="utf8">
                         <input type="file" name="f_data">
                         <input type="file" name="f_data">
@@ -3552,7 +3566,7 @@ def user_info():
         plus2 = ''
         plus2 = ''
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('user') + ' ' + load_lang('tool'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('user') + ' ' + load_lang('tool'), wiki_set(), custom(), other2([0, 0])],
         data =  '''
         data =  '''
                 <h2>''' + load_lang('state') + '''</h2>
                 <h2>''' + load_lang('state') + '''</h2>
                 <ul>
                 <ul>
@@ -3592,7 +3606,7 @@ def watch_list():
     div += '<a href="/manager/13">(' + load_lang('plus') + ')</a>'
     div += '<a href="/manager/13">(' + load_lang('plus') + ')</a>'
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('watchlist') + ' ' + load_lang('list'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('watchlist') + ' ' + load_lang('list'), wiki_set(), custom(), other2([0, 0])],
         data = div,
         data = div,
         menu = [['manager', load_lang('admin')]]
         menu = [['manager', load_lang('admin')]]
     ))
     ))
@@ -3657,7 +3671,7 @@ def custom_head_view():
         start += '<span>&lt;style&gt;CSS&lt;/style&gt;<br>&lt;script&gt;JS&lt;/script&gt;</span><hr>'
         start += '<span>&lt;style&gt;CSS&lt;/style&gt;<br>&lt;script&gt;JS&lt;/script&gt;</span><hr>'
 
 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
         return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-            imp = [load_lang('user') + ' HEAD', wiki_set(1), custom(), other2([0, 0])],
+            imp = [load_lang('user') + ' HEAD', wiki_set(), custom(), other2([0, 0])],
             data =  start + '''
             data =  start + '''
                     <form method="post">
                     <form method="post">
                         <textarea rows="25" cols="100" name="content">''' + data + '''</textarea>
                         <textarea rows="25" cols="100" name="content">''' + data + '''</textarea>
@@ -3691,7 +3705,7 @@ def count_edit(name = None):
         t_data = 0
         t_data = 0
 
 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
     return css_html_js_minify.html_minify(flask.render_template(skin_check(), 
-        imp = [load_lang('count'), wiki_set(1), custom(), other2([0, 0])],
+        imp = [load_lang('count'), wiki_set(), custom(), other2([0, 0])],
         data = '''
         data = '''
                 <ul>
                 <ul>
                     <li><a href="/record/''' + url_pas(that) + '''">''' + load_lang('edit') + '''</a> : ''' + str(data) + '''</li>
                     <li><a href="/record/''' + url_pas(that) + '''">''' + load_lang('edit') + '''</a> : ''' + str(data) + '''</li>

+ 4 - 1
func.py

@@ -85,6 +85,9 @@ def load_lang(data):
         else:
         else:
             return else_lang[data]
             return else_lang[data]
 
 
+def namumark_re(name = '', data = '', set_num = 0):
+    return namumark(name, data, set_num, load_lang('please_all'))
+
 def edit_help_button():
 def edit_help_button():
     # https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
     # https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
     '''
     '''
@@ -162,7 +165,7 @@ def next_fix(link, num, page, end = 50):
 def other2(origin):
 def other2(origin):
     return origin + ['Deleted']
     return origin + ['Deleted']
 
 
-def wiki_set(num):
+def wiki_set(num = 1):
     if num == 1:
     if num == 1:
         data_list = []
         data_list = []
 
 

+ 4 - 2
language/en-US.json

@@ -4,9 +4,11 @@
     "delete" : "Delete",
     "delete" : "Delete",
     "bulk_delete" : "Bulk Delete",
     "bulk_delete" : "Bulk Delete",
     "edit_filter" : "Edit Filtering",
     "edit_filter" : "Edit Filtering",
+    "template" : "Template",
     "move" : "Move",
     "move" : "Move",
     "hide" : "Hide",
     "hide" : "Hide",
     "list" : "List",
     "list" : "List",
+    "out" : "out",
     "revert" : "Undo",
     "revert" : "Undo",
     "version" : " Ver",
     "version" : " Ver",
     "normal_version" : "Version",
     "normal_version" : "Version",
@@ -14,7 +16,7 @@
     "document" : "Documents",
     "document" : "Documents",
     "all" : "Everything",
     "all" : "Everything",
     "ban" : "Ban",
     "ban" : "Ban",
-    "release" : "Pardon",
+    "release" : "Release",
     "save" : "Save",
     "save" : "Save",
     "other" : "Others",
     "other" : "Others",
     "tool" : "Tools",
     "tool" : "Tools",
@@ -63,7 +65,7 @@
     "month" : "Month",
     "month" : "Month",
     "day" : "Day",
     "day" : "Day",
     "normal" : "Normal",
     "normal" : "Normal",
-    "subscriber" : "User",
+    "subscriber" : "Registor",
     "admin" : "Admin",
     "admin" : "Admin",
     "next" : "Next",
     "next" : "Next",
     "previous" : "Previous",
     "previous" : "Previous",

+ 5 - 3
language/ko-KR.json

@@ -4,12 +4,12 @@
     "delete": "삭제",
     "delete": "삭제",
     "bulk_delete": "대량 삭제",
     "bulk_delete": "대량 삭제",
     "edit_filter": "편집 필터",
     "edit_filter": "편집 필터",
-    "move": " 이동",
+    "move": "이동",
     "hide": "숨김",
     "hide": "숨김",
     "list": "목록",
     "list": "목록",
     "revert": "되돌리기",
     "revert": "되돌리기",
     "version": "판",
     "version": "판",
-    "normal_version" : "버전",
+    "normal_version": "버전",
     "document": "문서",
     "document": "문서",
     "all": "모든",
     "all": "모든",
     "ban": "차단",
     "ban": "차단",
@@ -101,5 +101,7 @@
     "decument_exist_error": "내용이 원래 문서와 동일 합니다.",
     "decument_exist_error": "내용이 원래 문서와 동일 합니다.",
     "password_diffrent_error": "재 확인 비밀번호와 입력 비밀번호가 다릅니다.",
     "password_diffrent_error": "재 확인 비밀번호와 입력 비밀번호가 다릅니다.",
     "edit_filter_error": "편집 필터에 의해 검열 되었습니다.",
     "edit_filter_error": "편집 필터에 의해 검열 되었습니다.",
-    "file_name_error": "파일 이름은 알파벳, 한글, 띄어쓰기, 언더바, 빼기표만 허용 됩니다."
+    "file_name_error": "파일 이름은 알파벳, 한글, 띄어쓰기, 언더바, 빼기표만 허용 됩니다.",
+    "template": "틀",
+    "out": "외부"
 }
 }

+ 14 - 0
license.md

@@ -27,3 +27,17 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+## External File License
+ * Quotes icon [Dave Gandy](http://www.flaticon.com/free-icon/quote-left_25672) CC 3.0 BY
+ * Syntax highlighting [highlightjs](https://highlightjs.org/)
+ * Numerical expression [MathJax](https://www.mathjax.org/)
+
+## Contributors
+ * [Reference](https://github.com/2DU/openNAMU/graphs/contributors)
+
+## Helpful people
+ * [Team Croatia](https://github.com/TeamCroatia)
+ * Basix
+ * Efrit
+ * Other chat rooms

+ 2 - 2
mark.py

@@ -29,8 +29,8 @@ def plusing(name, link, backtype):
     if not curs.fetchall():
     if not curs.fetchall():
         curs.execute("insert into back (title, link, type) values (?, ?, ?)", [link, name, backtype])
         curs.execute("insert into back (title, link, type) values (?, ?, ?)", [link, name, backtype])
 
 
-def namumark(title, data, num):
-    data = start(conn, data, title)
+def namumark(title, data, num, lang):
+    data = start(conn, data, title, lang)
     if num == 1:
     if num == 1:
         i = 0
         i = 0
         while 1:
         while 1:

+ 13 - 16
readme.md

@@ -1,24 +1,21 @@
-## 개요
-오픈나무 정식 버전 입니다. 파이썬으로 돌아 갑니다. (3.5 이상)
+## Intro
+NamuMark based wiki engine returns to Python. (3.5 and above)
 
 
-## 클론 명령어
-### 일반
+## Clone command
+### Stable
  * git clone https://github.com/2DU/openNAMU.git
  * git clone https://github.com/2DU/openNAMU.git
 
 
-### 베타
+### Master
  * git clone -b master https://github.com/2DU/openNAMU.git
  * git clone -b master https://github.com/2DU/openNAMU.git
 
 
-### 업데이트
- * git pull
-
-## 설치법
- * [참조](http://namu.ml/w/오픈나무%2F설치법)
+## Install
+ * [참조](http://namu.ml/w/openNAMU/Install)
  
  
-## set.json 설명
- * db = 데이터베이스 이름
+## set.json Explanation
+ * db = Database Name
 
 
-set.json를 삭제하면 다시 새로 만들 수 있습니다.
+You can create a new set.json by deleting it.
 
 
-## 기타
- * [테스트 서버](http://namu.ml/)
- * 첫 번째 가입자에게 소유자 권한이 부여됩니다.
+## Other
+ * [Test Server (Ko)](http://namu.ml/)
+ * The first registor is granted owner privileges.

+ 26 - 26
set_mark/start.py

@@ -177,7 +177,7 @@ def link_fix(main_link):
         
         
     return [main_link, other_link]
     return [main_link, other_link]
 
 
-def start(conn, data, title):
+def start(conn, data, title, lang):
     # DB 지정
     # DB 지정
     curs = conn.cursor()
     curs = conn.cursor()
 
 
@@ -256,7 +256,7 @@ def start(conn, data, title):
                     else:
                     else:
                         break
                         break
 
 
-                include_parser = re.sub('\[\[분류:(((?!\]\]|#include).)+)\]\]', '', include_parser)
+                include_parser = re.sub('\[\[' + lang['template'] + ':(((?!\]\]|#include).)+)\]\]', '', include_parser)
                 include_parser = html.escape(include_parser)
                 include_parser = html.escape(include_parser)
 
 
                 data = re.sub('\[include\(((?:(?!\)\]).)+)\)\]', '<include>\n<a id="include_link" href="/w/' + tool.url_pas(include_link) + '">[' + include_link + ']</a>\n' + include_parser + '\n</include>', data, 1)
                 data = re.sub('\[include\(((?:(?!\)\]).)+)\)\]', '<include>\n<a id="include_link" href="/w/' + tool.url_pas(include_link) + '">[' + include_link + ']</a>\n' + include_parser + '\n</include>', data, 1)
@@ -402,7 +402,7 @@ def start(conn, data, title):
                                                             else:
                                                             else:
                                                                 folding_data = ['Test']
                                                                 folding_data = ['Test']
                                                             
                                                             
-                                                            data = re.sub('{{{#!folding ?((?:(?!\n).)*)\n?', '<div>' + str(folding_data[0]) + ' <div style="display: inline-block;"><a href="javascript:void(0);" onclick="folding(' + str(fol_num) + ');">[작동]</a></div_end><div id="folding_' + str(fol_num) + '" style="display: none;"><div id="wiki_div" style="">', data, 1)
+                                                            data = re.sub('{{{#!folding ?((?:(?!\n).)*)\n?', '<div>' + str(folding_data[0]) + ' <div style="display: inline-block;"><a href="javascript:void(0);" onclick="folding(' + str(fol_num) + ');">[Do]</a></div_end><div id="folding_' + str(fol_num) + '" style="display: none;"><div id="wiki_div" style="">', data, 1)
                                                             
                                                             
                                                             fol_num += 1
                                                             fol_num += 1
                                                         else:
                                                         else:
@@ -553,18 +553,18 @@ def start(conn, data, title):
         data = re.sub('\n#(?:redirect|넘겨주기) (?P<in>(?:(?!\n).)+)\n', '<meta http-equiv="refresh" content="0; url=/w/' + tool.url_pas(main_link) + '?froms=' + tool.url_pas(title) + other_link + '">', data, 1)
         data = re.sub('\n#(?:redirect|넘겨주기) (?P<in>(?:(?!\n).)+)\n', '<meta http-equiv="refresh" content="0; url=/w/' + tool.url_pas(main_link) + '?froms=' + tool.url_pas(title) + other_link + '">', data, 1)
 
 
     # [목차(없음)] 처리
     # [목차(없음)] 처리
-    if not re.search('\[목차\(없음\)\]\n', data):
-        if not re.search('\[목차\]', data):
-            data = re.sub('\n(?P<in>={1,6}) ?(?P<out>(?:(?!=).)+) ?={1,6}\n', '\n[목차]\n\g<in> \g<out> \g<in>\n', data, 1)
+    if not re.search('\[(?:목차|tableofcontents)\((?:없음|no)\)\]\n', data):
+        if not re.search('\[(?:목차|tableofcontents)\]', data):
+            data = re.sub('\n(?P<in>={1,6}) ?(?P<out>(?:(?!=).)+) ?={1,6}\n', '\n[(?:목차|tableofcontents)]\n\g<in> \g<out> \g<in>\n', data, 1)
     else:
     else:
-        data = re.sub('\[목차\(없음\)\]\n', '', data)
+        data = re.sub('\[(?:목차|tableofcontents)\((?:없음|no)\)\]\n', '', data)
         
         
     # 문단 문법
     # 문단 문법
     toc_full = 0
     toc_full = 0
     toc_top_stack = 6
     toc_top_stack = 6
     toc_stack = [0, 0, 0, 0, 0, 0]
     toc_stack = [0, 0, 0, 0, 0, 0]
     edit_number = 0
     edit_number = 0
-    toc_data = '<div id="toc"><span style="font-size: 18px;">목차</span>\n\n'
+    toc_data = '<div id="toc"><span style="font-size: 18px;">TOC</span>\n\n'
     while 1:
     while 1:
         toc = re.search('\n(={1,6}) ?((?:(?!\n).)+) ?\n', data)
         toc = re.search('\n(={1,6}) ?((?:(?!\n).)+) ?\n', data)
         if toc:
         if toc:
@@ -592,7 +592,7 @@ def start(conn, data, title):
 
 
             all_stack = re.sub('0.', '', all_stack)
             all_stack = re.sub('0.', '', all_stack)
             
             
-            data = re.sub('\n(={1,6}) ?((?:(?!\n).)+) ?\n', '\n<h' + toc_number + ' id="s-' + re.sub('\.$', '', all_stack) + '"><a href="#toc">' + all_stack + '</a> ' + re.sub('=*$', '', toc[1]) + ' <span style="font-size: 12px"><a href="/edit/' + tool.url_pas(title) + '?section=' + str(edit_number) + '">(편집)</a></span></h' + toc_number + '>\n', data, 1)
+            data = re.sub('\n(={1,6}) ?((?:(?!\n).)+) ?\n', '\n<h' + toc_number + ' id="s-' + re.sub('\.$', '', all_stack) + '"><a href="#toc">' + all_stack + '</a> ' + re.sub('=*$', '', toc[1]) + ' <span style="font-size: 12px"><a href="/edit/' + tool.url_pas(title) + '?section=' + str(edit_number) + '">(' + lang['edit'] + ')</a></span></h' + toc_number + '>\n', data, 1)
             
             
             toc_data += '<span style="margin-left: ' + str((toc_full - toc_top_stack) * 10) + 'px;"><a href="#s-' + re.sub('\.$', '', all_stack) + '">' + all_stack + '</a> ' + re.sub('\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]', '', re.sub('=*$', '', toc[1])) + '</span>\n'
             toc_data += '<span style="margin-left: ' + str((toc_full - toc_top_stack) * 10) + 'px;"><a href="#s-' + re.sub('\.$', '', all_stack) + '">' + all_stack + '</a> ' + re.sub('\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]', '', re.sub('=*$', '', toc[1])) + '</span>\n'
         else:
         else:
@@ -600,7 +600,7 @@ def start(conn, data, title):
 
 
     toc_data += '</div>'
     toc_data += '</div>'
     
     
-    data = re.sub('\[목차\]', toc_data, data)
+    data = re.sub('\[(?:목차|tableofcontents)\]', toc_data, data)
     
     
     while 1:
     while 1:
         hr = re.search('\n-{4,9}\n', data)
         hr = re.search('\n-{4,9}\n', data)
@@ -778,7 +778,7 @@ def start(conn, data, title):
             break
             break
 
 
     # 링크 관련 문법 구현
     # 링크 관련 문법 구현
-    category = '\n<hr><div id="cate">분류: '
+    category = '\n<hr><div id="cate">' + lang['category'] + ': '
     while 1:
     while 1:
         link = re.search('\[\[((?:(?!\[\[|\]\]).)+)\]\]', data)
         link = re.search('\[\[((?:(?!\[\[|\]\]).)+)\]\]', data)
         if link:
         if link:
@@ -794,7 +794,7 @@ def start(conn, data, title):
                 main_link = link
                 main_link = link
                 see_link = link
                 see_link = link
 
 
-            if re.search('^(파일|외부):', main_link):
+            if re.search('^(' + lang['file'] + '|' + lang['out'] + '):', main_link):
                 file_style = ''
                 file_style = ''
 
 
                 width = re.search('width=((?:(?!&).)+)', see_link)
                 width = re.search('width=((?:(?!&).)+)', see_link)
@@ -823,13 +823,13 @@ def start(conn, data, title):
                 else:
                 else:
                     file_align = ''
                     file_align = ''
 
 
-                if re.search('^외부:', main_link):
-                    file_src = re.sub('^외부:', '', main_link)
+                if re.search('^' + lang['out'] + ':', main_link):
+                    file_src = re.sub('^' + lang['out'] + ':', '', main_link)
             
             
                     file_alt = main_link
                     file_alt = main_link
                     exist = 'Yes'
                     exist = 'Yes'
                 else:
                 else:
-                    file_data = re.search('^파일:((?:(?!\.).)+)\.(.+)$', main_link)
+                    file_data = re.search('^' + lang['file'] + ':((?:(?!\.).)+)\.(.+)$', main_link)
                     if file_data:
                     if file_data:
                         file_data = file_data.groups()
                         file_data = file_data.groups()
                         file_name = file_data[0]
                         file_name = file_data[0]
@@ -841,7 +841,7 @@ def start(conn, data, title):
                         file_end = 'jpg'
                         file_end = 'jpg'
 
 
                     file_src = '/image/' + tool.sha224(file_name) + '.' + file_end
                     file_src = '/image/' + tool.sha224(file_name) + '.' + file_end
-                    file_alt = '파일:' + file_name + '.' + file_end
+                    file_alt = '' + lang['file'] + ':' + file_name + '.' + file_end
 
 
                     curs.execute("select title from data where title = ?", [file_alt])
                     curs.execute("select title from data where title = ?", [file_alt])
                     exist = curs.fetchall()
                     exist = curs.fetchall()
@@ -850,12 +850,12 @@ def start(conn, data, title):
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<span style="' + file_align + '"><img style="' + file_style + '" alt="' + file_alt + '" src="' + file_src + '"></span>', data, 1)
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<span style="' + file_align + '"><img style="' + file_style + '" alt="' + file_alt + '" src="' + file_src + '"></span>', data, 1)
                 else:
                 else:
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="not_thing" href="/w/' + tool.url_pas(file_alt) + '">' + file_alt + '</a>', data, 1)
                     data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="not_thing" href="/w/' + tool.url_pas(file_alt) + '">' + file_alt + '</a>', data, 1)
-            elif re.search('^분류:', main_link):
+            elif re.search('^' + lang['category'] + ':', main_link):
                 see_link = re.sub('#include', '', see_link)
                 see_link = re.sub('#include', '', see_link)
                 main_link = re.sub('#include', '', main_link)
                 main_link = re.sub('#include', '', main_link)
 
 
                 if re.search('#blur', main_link):
                 if re.search('#blur', main_link):
-                    see_link = '스포일러'
+                    see_link = 'Hidden'
                     link_id = 'id="inside"'
                     link_id = 'id="inside"'
                     
                     
                     main_link = re.sub('#blur', '', main_link)
                     main_link = re.sub('#blur', '', main_link)
@@ -864,7 +864,7 @@ def start(conn, data, title):
 
 
                 backlink += [[title, main_link, 'cat']]
                 backlink += [[title, main_link, 'cat']]
 
 
-                category += '<a ' + link_id + ' href="' + tool.url_pas(main_link) + '">' + re.sub('^분류:', '', see_link) + '</a> / '
+                category += '<a ' + link_id + ' href="' + tool.url_pas(main_link) + '">' + re.sub('^' + lang['category'] + ':', '', see_link) + '</a> / '
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '', data, 1)
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '', data, 1)
             elif re.search('^wiki:', main_link):
             elif re.search('^wiki:', main_link):
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="inside" href="/' + tool.url_pas(re.sub('^wiki:', '', main_link)) + '">' + see_link + '</a>', data, 1)
                 data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="inside" href="/' + tool.url_pas(re.sub('^wiki:', '', main_link)) + '">' + see_link + '</a>', data, 1)
@@ -880,7 +880,7 @@ def start(conn, data, title):
                     else:
                     else:
                         data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="inside" href="' + inter[0][0] + inter_data[1] + '">' + inter_data[0] + ':' + inter_data[1] + '</a>', data, 1)
                         data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '<a id="inside" href="' + inter[0][0] + inter_data[1] + '">' + inter_data[0] + ':' + inter_data[1] + '</a>', data, 1)
                 else:
                 else:
-                    data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '인터위키 정보 없음', data, 1)
+                    data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', 'Not exist', data, 1)
             elif re.search('^\/', main_link):
             elif re.search('^\/', main_link):
                 under_title = re.search('^(\/(?:.+))$', main_link)
                 under_title = re.search('^(\/(?:.+))$', main_link)
                 under_title = under_title.groups()[0]
                 under_title = under_title.groups()[0]
@@ -929,7 +929,7 @@ def start(conn, data, title):
     footnote_re = {}
     footnote_re = {}
     footdata_all = '\n<hr><ul id="footnote_data">'
     footdata_all = '\n<hr><ul id="footnote_data">'
     while 1:
     while 1:
-        footnote = re.search('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[각주\]))', data)
+        footnote = re.search('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[(?:각주|footnote)\]))', data)
         if footnote:
         if footnote:
             footnote_data = footnote.groups()
             footnote_data = footnote.groups()
             if footnote_data[2]:
             if footnote_data[2]:
@@ -943,7 +943,7 @@ def start(conn, data, title):
 
 
                     footdata_all += '<li><a href="#rfn-' + str(footdata[0]) + '" id="fn-' + str(footdata[0]) + '">(' + footdata[1] + ')</a> ' + footdata_in + '</li>'
                     footdata_all += '<li><a href="#rfn-' + str(footdata[0]) + '" id="fn-' + str(footdata[0]) + '">(' + footdata[1] + ')</a> ' + footdata_in + '</li>'
                 
                 
-                data = re.sub('(?:\[\*((?:(?! ).)*) ((?:(?!\]).)+)\]|(\[각주\]))', footdata_all + '</ul>', data, 1)
+                data = re.sub('(?:\[\*((?:(?! ).)*) ((?:(?!\]).)+)\]|(\[(?:각주|footnote)\]))', footdata_all + '</ul>', data, 1)
                 
                 
                 footnote_all = []
                 footnote_all = []
                 footdata_all = '\n<hr><ul id="footnote_data">'
                 footdata_all = '\n<hr><ul id="footnote_data">'
@@ -959,9 +959,9 @@ def start(conn, data, title):
 
 
                         footnote_all += [[float(footshort), footshort, 0]]
                         footnote_all += [[float(footshort), footshort, 0]]
 
 
-                        data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[각주\]))', '<sup><a href="#fn-' + footshort + '" id="rfn-' + footshort + '">(' + footshort + ')</a></sup>', data, 1)
+                        data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[(?:각주|footnote)\]))', '<sup><a href="#fn-' + footshort + '" id="rfn-' + footshort + '">(' + footshort + ')</a></sup>', data, 1)
                     else:
                     else:
-                        data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[각주\]))', '<sup><a href="#">(' + footnote_name + ')</a></sup>', data, 1)
+                        data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[(?:각주|footnote)\]))', '<sup><a href="#">(' + footnote_name + ')</a></sup>', data, 1)
                 else:
                 else:
                     footnote_number += 1
                     footnote_number += 1
 
 
@@ -977,7 +977,7 @@ def start(conn, data, title):
 
 
                     footnote_all += [[footnote_number, footnote_name, footnote]]
                     footnote_all += [[footnote_number, footnote_name, footnote]]
                     
                     
-                    data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[각주\]))', '<sup><a href="#fn-' + str(footnote_number) + '" id="rfn-' + str(footnote_number) + '">(' + footnote_name + ')</a></sup>', data, 1)
+                    data = re.sub('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[(?:각주|footnote)\]))', '<sup><a href="#fn-' + str(footnote_number) + '" id="rfn-' + str(footnote_number) + '">(' + footnote_name + ')</a></sup>', data, 1)
         else:
         else:
             break
             break
 
 
@@ -1003,7 +1003,7 @@ def start(conn, data, title):
     category += '</div>'
     category += '</div>'
     category = re.sub(' / <\/div>$', '</div>', category)
     category = re.sub(' / <\/div>$', '</div>', category)
 
 
-    if category == '\n<hr><div id="cate">분류: </div>':
+    if category == '\n<hr><div id="cate">' + lang['category'] + ': </div>':
         category = ''
         category = ''
 
 
     data += category
     data += category