2du 5 lat temu
rodzic
commit
879deb2d21
2 zmienionych plików z 126 dodań i 220 usunięć
  1. 2 1
      route/tool/func_mark.py
  2. 124 219
      views/main_css/js/render_onmark.js

+ 2 - 1
route/tool/func_mark.py

@@ -109,7 +109,8 @@ def render_do(doc_name, doc_data, data_type, data_in):
         ]
 
     if data_type == 'backlink':
-        backlink = backlink_generate(rep_data, html.escape(doc_data), doc_name)
+        # backlink = backlink_generate(rep_data, html.escape(doc_data), doc_name)
+        backlink = []
         if backlink == []:
             curs.execute(db_change("insert into back (title, link, type) values ('test', ?, 'nothing')"), [doc_name])
         else:

+ 124 - 219
views/main_css/js/render_onmark.js

@@ -1,4 +1,6 @@
 // 인터위키
+// middle 재설계
+// 테이블 재설계
 // Tool
 function do_url_change(data) {
     return encodeURIComponent(data);
@@ -477,147 +479,118 @@ function do_onmark_macro_render(data) {
 }
 
 function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_doc) {
-    var middle_stack = [];
-    var middle_re = /(?:{{{([^{} ]*)|(}}}))/;
-    
-    var syntax_on = 0;
+    var middle_re = /{{{((?:(?!{{{|}}}).)+)}}}/s;
     
     var html_n = 0;
-    var folding_n = 0;
     var syntax_n = 0;
+    var nowiki_n = 0;
     
     while(1) {
-        var middle_data = data.match(middle_re);
-        if(!middle_data) {
+        if(!data.match(middle_re)) {
             break;
         }
         
-        if(middle_data[2]) {
-            if(middle_stack.length === 0) {
-                data = data.replace(middle_re, '<middle_end>');   
-            } else {
-                data = data.replace(middle_re, middle_stack[middle_stack.length - 1]);    
-                middle_stack.pop();
+        data = data.replace(middle_re, function(x, x_1) {
+            var middle_data_before = x_1.match(/^({+)/);
+            middle_data_before = middle_data_before ? middle_data_before[1] : '';
+            var middle_data_x_1 = x_1.replace(/^({+)/, '');
+            
+            var middle_data = middle_data_x_1.match(/^([^ ]+) /);
+            middle_data = middle_data ? middle_data[1] : '';
+            if(middle_data) {
+                var middle_data_all = middle_data_x_1.replace(/^([^ ]+) /, '');    
             }
-        } else {
-            if(middle_stack.includes('</code>')) {
-                data = data.replace(middle_re, '<middle_start>' + middle_data[1]);
-                middle_stack.push('<middle_end>');
-            } else {
-                if(middle_data[1].match(/^(?:(#(?:[0-9a-f-A-F]{3}){1,2})|#([a-zA-Z]+))/)) {
-                    var color = middle_data[1].match(/^(?:(#(?:[0-9a-f-A-F]{3}){1,2})|#([a-zA-Z]+))/);
-                    color = color[1] ? color[1] : color[2];
 
-                    data = data.replace(middle_re, '<span style="color: ' + color + ';">');
-                    middle_stack.push('</span>');
-                } else if(middle_data[1].match(/^(\+|-)([1-5])/)) {
-                    var font = middle_data[1].match(/^(\+|-)([1-5])/);
-                    if(font[1] === '+') {
-                        var font_size = String(100 + (20 * Number(font[2]))) + '%';
+            var middle_type = middle_data.match(
+                /^(?:(?:(#|@)([0-9a-f-A-F]{3}){1,2})|(#|@)([a-zA-Z]+))|(\+|-)([1-5])|#!(html|wiki|syntax|folding|html)$/i
+            );
+            if(middle_type) {
+                if(middle_data_x_1[middle_data_x_1.length - 1] === '\\') { } 
+                else if(middle_type[1]) {
+                    if(middle_type[1] === '@') {
+                        return middle_data_before + '<span style="background: #' + middle_type[2] + '">' + middle_data_all + '</span>';
                     } else {
-                        var font_size = String(100 - (10 * Number(font[2]))) + '%';
+                        return middle_data_before + '<span style="color: #' + middle_type[2] + '">' + middle_data_all + '</span>';
+                    }
+                } else if(middle_type[3]) {
+                    if(middle_type[3] === '@') {
+                        return middle_data_before + '<span style="background: ' + middle_type[4] + '">' + middle_data_all + '</span>';
+                    } else {
+                        return middle_data_before + '<span style="color: ' + middle_type[4] + '">' + middle_data_all + '</span>';
+                    }
+                } else if(middle_type[5]) {
+                    if(middle_type[5] === '+') {
+                        return middle_data_before + '<span style="font-size: ' + String(100 + (Number(middle_type[6]) * 20)) + '%">' + middle_data_all + '</span>';
+                    } else {
+                        return middle_data_before + '<span style="font-size: ' + String(100 - (Number(middle_type[6]) * 10)) + '%">' + middle_data_all + '</span>';
+                    }
+                } else if(middle_type[7]) {
+                    var middle_type_sub = middle_type[7].toLowerCase();
+                    if(middle_type_sub === 'html') {
+                        html_n += 1;
+
+                        data_nowiki[name_include + 'nowiki_html_' + String(html_n)] = middle_data_all;
+                        data_js += do_data_try_insert(
+                            name_include + 'nowiki_html_' + String(html_n),
+                            do_js_safe_change(middle_data_all)
+                        );
+
+                        return middle_data_before + '<span id="' + name_include + 'nowiki_html_' + String(html_n) + '"></span>';
+                    } else if(middle_type_sub === 'wiki') {
+                        // 테이블이랑 연계해야함
+                        
+                        var middle_wiki = middle_data_x_1.match(/^(?:[^ ]+) style=['"]([^\n'"]+)['"]\n/);
+                        middle_wiki = middle_wiki ? middle_wiki[1] : '';
+                        middle_wiki = middle_wiki.replace(/display/, '');
+
+                        middle_data_all = middle_data_x_1.replace(/^(?:[^ ]+) style=['"]([^\n'"]+)['"]\n/, '');
+                        
+                        return middle_data_before + '' +
+                            '<wiki_s style="' + middle_wiki + '">' + middle_data_all + '<wiki_e>'
+                        '';
+                    } else if(middle_type_sub === 'folding') {
+                        // 만들어야함
+                        
+                        return middle_data_before + '';
+                    } else if(middle_type_sub === 'syntax') {
+                        syntax_n += 1;
+
+                        var middle_syntax = middle_data_x_1.match(/^(?:[^ ]+) ([^\n]+)\n/);
+                        middle_syntax = middle_syntax ? middle_syntax[1] : 'python';
+
+                        middle_data_all = middle_data_x_1.replace(/^(?:[^ ]+) ([^\n]+)\n/, '');
+
+                        data_nowiki[name_include + 'nowiki_syntax_' + String(syntax_n)] = middle_data_all;
+                        data_js += do_data_try_insert(
+                            name_include + 'nowiki_syntax_' + String(syntax_n),
+                            do_js_safe_change(middle_data_all)
+                        );
+
+                        return middle_data_before +
+                            '<pre id="syntax">' +
+                                '<code  id="' + name_include + 'nowiki_syntax_' + String(syntax_n) + '" ' +
+                                        'class="' + middle_syntax + '"></code>' +
+                            '</pre>' +
+                        ''
                     }
-
-                    data = data.replace(middle_re, '<span style="font-size: ' + font_size + ';">');
-                    middle_stack.push('</span>');
-                } else if(middle_data[1] === '#!wiki') {
-                    var wiki_re = /{{{#!wiki(?: style=["']([^"']*)["']\n)?/;
-
-                    var wiki = data.match(wiki_re);
-                    var wiki_style = wiki[1] ? wiki[1] : '';
-
-                    data = data.replace(wiki_re, '<wiki_start style="' + wiki_style + '">');  
-                    middle_stack.push('<wiki_end>');
-                } else if(middle_data[1] === '#!html') {
-                    html_n += 1;
-
-                    data = data.replace(middle_re, '<span id="' + name_include + 'render_contect_' + String(html_n) + '">');
-                    middle_stack.push('</span>');
-                } else if(middle_data[1] === '#!syntax') {
-                    syntax_n += 1;
-                    
-                    var syntax_re = /{{{#!syntax(?: ([^\n]+)\n)?/;
-                    
-                    var syntax = data.match(syntax_re);
-                    var syntax_name = syntax[1] ? syntax[1] : 'python';
-                    
-                    data = data.replace(syntax_re, 
-                        '<pre id="syntax"><code id="get_' + name_include + 'syntax_' + String(syntax_n) + '" class="' + syntax_name + '"><nowiki_start>'
-                    );
-                    middle_stack.push('<nowiki_end></code></pre>');
-                } else if(middle_data[1] === '#!folding') {
-                    folding_n += 1;
-                    
-                    var folding_re = /{{{#!folding(?: ([^\n]+)\n)?/;
-                    
-                    var folding = data.match(folding_re);
-                    var folding_name = folding[1] ? folding[1] : 'open';
-                    
-                    data_js += do_data_try_insert('get_' + name_include + 'folding_' + String(folding_n), do_js_safe_change(folding_name));
-                    data = data.replace(folding_re, '' +
-                        '<div style="display: inline-block;">' +
-                            '<b>' + 
-                                '<a href="javascript:do_open_folding(\'' + name_include + 'folding_' + String(folding_n) + '\');" ' + 
-                                    'id="get_' + name_include + 'folding_' + String(folding_n) + '">' + 
-                                '</a>' + 
-                            '</b>' + 
-                        '</div>' +
-                        '<div id="' + name_include + 'folding_' + String(folding_n) + '" style="display: none;">' +
-                            '\n' +
-                            '<wiki_start style="">' +
-                    '');
-                    middle_stack.push('<wiki_end></div>');
-                } else {
-                    data = data.replace(middle_re, '<nowiki_start>' + middle_data[1]);
-                    middle_stack.push('<nowiki_end>');
                 }
             }
-        }
-    }
-    
-    while(middle_stack.length !== 0) {
-        data += middle_stack[middle_stack.length - 1];
-        middle_stack.pop();
+            
+            // 최대한 노력해봐야함
+            nowiki_n += 1;
+            
+            data_nowiki[name_include + 'nowiki_' + String(nowiki_n)] = middle_data_x_1;
+            data_js = do_data_try_insert(
+                name_include + 'nowiki_' + String(nowiki_n),
+                do_js_safe_change(middle_data_x_1)
+            ) + data_js;
+            
+            return middle_data_before + '<span id="' + name_include + 'nowiki_' + String(nowiki_n) + '"></span>';
+        });
     }
     
-    data = data.replace(/\n<wiki_end>/g, '<wiki_end>');
-    
-    data = data.replace(/<middle_start>/g, '{{{');
-    data = data.replace(/<middle_end>/g, '}}}');
-    
-    
-    var code_re = /<nowiki_start>((?:(?!<nowiki_start>|<nowiki_end>).)+)<nowiki_end>/s;
-    var code_n = 0;
-    while(1) {
-        code_n += 1;
-        
-        var code_data = data.match(code_re);
-        if(!code_data) {
-            break;
-        }
-        
-        data_nowiki[name_include + 'nowiki_mid_' + String(code_n)] = code_data[1];
-        data_js += do_data_try_insert(name_include + 'nowiki_mid_' + String(code_n), do_js_safe_change(code_data[1]));
-        data = data.replace(code_re, '<span id="' + name_include + 'nowiki_mid_' + String(code_n) + '"></span>');
-    }
-    
-    var wiki_re = /<wiki_start ([^>]+)>((?:(?!<wiki_start (?:[^>]+)>|<wiki_end>).)+)<wiki_end>/s;
-    var wiki_n = 0;
-    while(1) {
-        wiki_n += 1;
-        
-        var wiki_data = data.match(wiki_re);
-        if(!wiki_data) {
-            break;
-        }
-        
-        var wiki_data_style = wiki_data[1];
-        wiki_data = do_nowiki_change(wiki_data[2]);
-        wiki_data = do_onmark_render('manual', '', name_include + 'wiki_' + String(wiki_n) + '_', name_doc, wiki_data);
-        
-        data_js += wiki_data[1];
-        data = data.replace(wiki_re, '<div ' + wiki_data_style + '>' + wiki_data[0] + '</div>');
-    }
+    data = data.replace(/<mid_s>/g, '{{{');
+    data = data.replace(/<mid_e>/g, '}}}');
     
     if(syntax_n > 0) {
         data_js += 'hljs.initHighlightingOnLoad();\n';
@@ -628,8 +601,8 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
 
 function do_onmark_last_render(data) {
     // middle_render 마지막 처리
-    data = data.replace(/<wiki_start /g, '<div ');
-    data = data.replace(/<wiki_end>/g, '</div>');
+    data = data.replace(/<wiki_s /g, '<div ');
+    data = data.replace(/<wiki_e>/g, '</div>');
     
     // heading_render 마지막 처리
     data = data.replace(/\n?<start_point>/g, '');
@@ -688,7 +661,7 @@ function do_onmark_include_render(data, data_js, name_include, data_nowiki) {
     return [data, data_js];
 }
 
-function do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki) {
+function do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki) {   
     var num_nowiki = 0;
     data = data.replace(/\\(.)/g, function(x, x_1) {
         num_nowiki += 1;
@@ -831,80 +804,7 @@ function do_onmark_table_render_sub(data, data_col) {
 }
 
 function do_onmark_table_render(data) {
-    var table_before_re = /\|\|((?:(?:(?:(?!\|\|).)+)\n)(?:(?:(?:(?!\|\|).)+)\n*)*)\|\|/;
-    while(1) {
-        if(data.match(table_before_re)) {
-            data = data.replace(table_before_re, function(x, x_1) {
-                return '||' + x_1.replace(/\n/g, '<t_br>') + '||';
-            })
-        } else {
-            break;
-        }
-    }
-    
-    var table_re = /\n((?:(?:(?:\|\|)+)(?:(?:(?:(?!\|\|).)+)|\n))+)\|\|\n/g;
-    var table_in_re = /(?:((?:\|\|)+)((?:(?:(?!\|\|).)+)|\n))/;
-    data = data.replace(table_re, function(x, x_1) {
-        var table_data_real = '';
-        var table_data_var = x_1;
-        var table_new_line = 0;
-        var table_col = 0;
-        var table_data_col = {};
-        while(1) {
-            var table_data_in = table_data_var.match(table_in_re);
-            if(!table_data_in) {
-                break;
-            }
-            
-            if(!table_data_col[table_col]) {
-                table_data_col[table_col] = '';
-            }
-
-            var table_data_option = do_onmark_table_render_sub(
-                table_data_in[2],
-                table_data_col[table_col]
-            );
-            table_data_col[table_col] = table_data_option['col'];
-            if(table_data_option['colspan'] === "") {
-                table_data_option['colspan'] = String(table_data_in[1].length / 2);
-            }
-            
-            if(table_data_real === '') {
-                table_data_real += '' + 
-                    '<div style="' + table_data_option['div'] + '">' +
-                        '<table style="' + table_data_option['table'] + '">' +
-                            '<tr style="' + table_data_option['tr'] + '">' +
-                '';
-            }
-
-            if(table_data_in[2] === '\n') {
-                table_data_real += '</tr>';
-                table_new_line = 1;
-                table_col = 0;
-            } else {
-                if(table_new_line === 1) {
-                    table_data_real += '<tr style="' + table_data_option['tr'] + '">';
-                    table_new_line = 0;
-                }
-                
-                table_data_real += '' +
-                    '<td     colspan="' + table_data_option['colspan'] + '" ' +
-                            'rowspan="' + table_data_option['rowspan'] + '" ' +
-                            'style="' + table_data_option['col'] + table_data_option['td'] + '">' + 
-                        table_data_option['data'] + 
-                    '</td>' +
-                '';
-                table_col += 1;
-            }
-
-            table_data_var = table_data_var.replace(table_in_re, '');
-        }
-        table_data_real += '</tr></table></div>';
-        
-        return '\n' + table_data_real + '\n';
-    });
-    
-    data = data.replace(/<t_br>/g, '\n');
+    // 만들어야함
     
     return data;
 }
@@ -951,7 +851,7 @@ function do_onmark_quote_render(data) {
 }
 
 function do_onmark_hr_render(data) {
-    var hr_re = /\n-{4,}\n/;
+    var hr_re = /\n-{4,9}\n/;
     while(1) {
         if(!data.match(hr_re)) {
             break;
@@ -964,7 +864,7 @@ function do_onmark_hr_render(data) {
 }
 
 function do_onmark_redirect_render(data, data_js, name_doc) {
-    var redirect_re = /#(?:redirect|넘겨주기) ([^\n]+)/;
+    var redirect_re = /^\n#(?:redirect|넘겨주기) ([^\n]+)/;
     var data_redirect = data.match(redirect_re);
     if(data_redirect) {
         var link_data_var = do_link_change(data_redirect[1], {}, 1);
@@ -996,10 +896,7 @@ function do_onmark_render(test_mode = 'test', name_id = '', name_include = '', n
         var data = '\n' + doc_data.replace(/\r/g, '') + '\n';
     } else {
     	var data = '\n' + (
-`||||<tablebgcolor=red><bgcolor=red> test ||
-|| A || B ||
-||<bgcolor=red> test ||<bgcolor=red> test || asdf
-asdf || asdf`
+``
         ).replace(/\r/g, '') + '\n';
     }
     var data_js = '';
@@ -1015,39 +912,47 @@ asdf || asdf`
         var data_var = do_onmark_math_render(data, data_js, name_include);
         data = data_var[0];
         data_js = data_var[1];
-        console.log('math')
-
-        data_var = do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki);
-        data = data_var[0];
-        data_js = data_var[1];
-        data_nowiki = data_var[2];
-        console.log('nowiki')
+        console.log('math');
 
         data_var = do_onmark_include_render(data, data_js, name_include, data_nowiki);
         data = data_var[0];
         data_js = data_var[1];
-        console.log('include')
+        console.log('include');
 
         data_var = do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_doc);
         data = data_var[0];
         data_js = data_var[1];
         data_nowiki = data_var[2];
-        console.log('middle')
+        console.log('middle');
+        
+        data_var = do_onmark_nowiki_before_render(data, data_js, name_include, data_nowiki);
+        data = data_var[0];
+        data_js = data_var[1];
+        data_nowiki = data_var[2];
+        console.log('nowiki');
 
         data = do_onmark_text_render(data);
+        console.log('text');
         data = do_onmark_heading_render(data, name_doc, name_include);
+        console.log('heading');
         data = do_onmark_table_render(data);
-        console.log('table')
+        console.log('table');
 
         data_var = do_onmark_link_render(data, data_js, name_doc, name_include, data_nowiki);
         data = data_var[0];
         data_js = data_var[1];
+        console.log('link');
 
         data = do_onmark_macro_render(data);
+        console.log('macro');
         data = do_onmark_quote_render(data);
+        console.log('quote');
         data = do_onmark_list_render(data);
+        console.log('list');
         data = do_onmark_hr_render(data);
+        console.log('hr');
         data = do_onmark_footnote_render(data, name_include);
+        console.log('footnote');
         data = do_onmark_last_render(data, name_include);
         console.log('all')
     }
@@ -1056,7 +961,7 @@ asdf || asdf`
         'get_link_state("' + name_include + '");\n' + 
         'get_file_state("' + name_include + '");\n' + 
     ''
-    data_js = 'render_html("' + name_include + 'render_contect");\n' + data_js
+    data_js += 'render_html("' + name_include + 'nowiki_html");\n'
     
     if(test_mode === 'normal') {
         document.getElementById(name_id).innerHTML = data + '<script>' + data_js + '</script>';