2du пре 5 година
родитељ
комит
623327c38e
1 измењених фајлова са 104 додато и 12 уклоњено
  1. 104 12
      views/main_css/js/render_onmark.js

+ 104 - 12
views/main_css/js/render_onmark.js

@@ -1,6 +1,5 @@
 // 인터위키
-// middle 재설계
-// 테이블 재설계
+// footnote 오류 확인
 // Tool
 function do_url_change(data) {
     return encodeURIComponent(data);
@@ -484,6 +483,7 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
     var html_n = 0;
     var syntax_n = 0;
     var nowiki_n = 0;
+    var folding_n = 0;
     
     while(1) {
         if(!data.match(middle_re)) {
@@ -505,8 +505,9 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
                 /^(?:(?:(#|@)([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_data_x_1[middle_data_x_1.length - 1] === '\\') {
+                    return middle_data_before + '{{{' + middle_data_x_1 + '<mid_e>';
+                } else if(middle_type[1]) {
                     if(middle_type[1] === '@') {
                         return middle_data_before + '<span style="background: #' + middle_type[2] + '">' + middle_data_all + '</span>';
                     } else {
@@ -537,21 +538,42 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
 
                         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/);
+                        var middle_wiki_re = /^(?:[^ ]+)(?: style=['"]([^\n'"]*)['"])?\n?/;
+                        var middle_wiki = middle_data_x_1.match(middle_wiki_re);
                         middle_wiki = middle_wiki ? middle_wiki[1] : '';
                         middle_wiki = middle_wiki.replace(/display/, '');
 
-                        middle_data_all = middle_data_x_1.replace(/^(?:[^ ]+) style=['"]([^\n'"]+)['"]\n/, '');
+                        middle_data_all = middle_data_x_1.replace(middle_wiki_re, '');
                         
                         return middle_data_before + '' +
-                            '<wiki_s style="' + middle_wiki + '">' + middle_data_all + '<wiki_e>'
+                            '<wiki_s style="' + middle_wiki + '"><end_point>\n' + middle_data_all + '<wiki_e>'
                         '';
                     } else if(middle_type_sub === 'folding') {
-                        // 만들어야함
+                        folding_n += 1;
                         
-                        return middle_data_before + '';
+                        var middle_folding_re = /^(?:[^ ]+)( ([^\n'"]*))?\n?/;
+                        var middle_folding = middle_data_x_1.match(middle_folding_re);
+                        middle_folding = middle_folding ? middle_folding[1] : 'open';
+
+                        middle_data_all = middle_data_x_1.replace(middle_folding_re, '');
+
+                        data_js += do_data_try_insert('get_' + name_include + 'folding_' + String(folding_n), do_js_safe_change(middle_folding));
+                        return '' +
+                            '<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_s style="">' +
+                                    '<end_point>\n' +
+                                    middle_data_all +
+                                '<wiki_e>' +
+                            '</div>' +
+                        ''
                     } else if(middle_type_sub === 'syntax') {
                         syntax_n += 1;
 
@@ -591,6 +613,7 @@ function do_onmark_middle_render(data, data_js, name_include, data_nowiki, name_
     
     data = data.replace(/<mid_s>/g, '{{{');
     data = data.replace(/<mid_e>/g, '}}}');
+    console.log(data);
     
     if(syntax_n > 0) {
         data_js += 'hljs.initHighlightingOnLoad();\n';
@@ -803,8 +826,77 @@ function do_onmark_table_render_sub(data, data_col) {
     return data_option_all;
 }
 
+function do_onmark_table_render_main(data) {
+    var table_re = /\n((?:(?:\|\|\n|(?:\|\|)+(?!\n)(?:(?:(?!\|\|).)+))+)\|\|)\n/gs;
+    data = data.replace(table_re, function(x, x_1) {
+        var table_cel_re = /((?:\|\|)+)((?:(?!\|\|).)+)/gs;
+        var table_data = '';
+        var table_data_org = x_1;
+        
+        var table_col = 0;
+        var table_col_data = {};
+        table_data_org = table_data_org.replace(table_cel_re, function(x, x_1, x_2) {
+            if(!table_col_data[table_col]) {
+                table_col_data[table_col] = '';
+            }
+
+            var table_data_option = do_onmark_table_render_sub(x_2, table_col_data[table_col]);
+            table_col_data[table_col] = table_data_option['col'];
+            if(table_data_option['colspan'] === '') {
+                table_data_option['colspan'] = String(x_1.length / 2);
+            }
+            
+            if(table_data === '') {
+                table_data += '' + 
+                    '<div style="' + table_data_option['div'] + '">' +
+                        '<table style="' + table_data_option['table'] + '">' +
+                '';
+            }
+            
+            if(x_2 === '\n') {
+                table_data += '</tr>';
+                table_col = 0;
+            } else {
+                if(table_col === 0) {
+                    table_data += '' + 
+                        '<tr style="' + table_data_option['tr'] + '">' +
+                    ''
+                }
+                
+                table_data += '' +
+                    '<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;
+            }
+            
+            return '';
+        });
+        
+        table_data += '</tr></table></div>';
+        
+        return '\n' + table_data + '\n';
+    });
+    
+    return data;
+}
+
 function do_onmark_table_render(data) {
-    // 만들어야함
+    var wiki_re = /<wiki_s ([^>]+)>((?:(?!<wiki_s |<wiki_e>).)+)<wiki_e>/s;
+    while(1) {
+        if(!data.match(wiki_re)) {
+            break;
+        }
+        
+        data = data.replace(wiki_re, function(x, x_1, x_2) {
+            return '<div ' + x_1 + '>' + do_onmark_table_render_main(x_2) + '</div>';
+        });
+    }
+    
+    data = do_onmark_table_render_main(data);
     
     return data;
 }