|
|
@@ -39,7 +39,7 @@ class opennamu_render_markdown {
|
|
|
do_func_parser_to_text(data, parser_type = 'parser') {
|
|
|
let parser_data_temp = this.parser_data_temp;
|
|
|
let parser_match;
|
|
|
- if(parser_type === 'nowiki') {
|
|
|
+ if(parser_type === 'nowiki' || parser_type === 'nowikiLink' || parser_type === 'nowikiEnd') {
|
|
|
parser_match = /<(\/?nowiki[0-9]+Span)>/;
|
|
|
} else {
|
|
|
parser_match = /<(\/?render[0-9]+Span)>/;
|
|
|
@@ -47,7 +47,16 @@ class opennamu_render_markdown {
|
|
|
|
|
|
while(data.match(parser_match)) {
|
|
|
data = data.replace(parser_match, function(match, x1) {
|
|
|
- return parser_data_temp[x1];
|
|
|
+ if(parser_type === 'nowikiEnd') {
|
|
|
+ return parser_data_temp[x1 + 'End'];
|
|
|
+ } else if(parser_type === 'nowikiLink') {
|
|
|
+ let nowiki_data = parser_data_temp[x1];
|
|
|
+ nowiki_data = nowiki_data.replace(/\\(.)/g, '$1');
|
|
|
+
|
|
|
+ return nowiki_data;
|
|
|
+ } else {
|
|
|
+ return parser_data_temp[x1];
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -55,9 +64,11 @@ class opennamu_render_markdown {
|
|
|
}
|
|
|
|
|
|
do_func_xss_encode(data) {
|
|
|
+ data = data.replace(/'/g, ''');
|
|
|
data = data.replace(/"/g, '"');
|
|
|
data = data.replace(/</g, '<');
|
|
|
data = data.replace(/</g, '>');
|
|
|
+ data = data.replace(/&/g, '&');
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
@@ -66,7 +77,8 @@ class opennamu_render_markdown {
|
|
|
data = data.replace(/'/g, '\'');
|
|
|
data = data.replace(/"/g, '"');
|
|
|
data = data.replace(/</g, '<');
|
|
|
- data = data.replace(/>/g, '<');
|
|
|
+ data = data.replace(/>/g, '>');
|
|
|
+ data = data.replace(/&/g, '&');
|
|
|
|
|
|
return data;
|
|
|
}
|
|
|
@@ -76,7 +88,7 @@ class opennamu_render_markdown {
|
|
|
let parser_count = this.parser_count['parser'];
|
|
|
let parser_data_temp = this.parser_data_temp;
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/~~((?:(?!~~).)+)~~/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/~~((?:(?!~~|\n).)+)~~/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -86,7 +98,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/\*\*((?:(?!\*\*).)+)\*\*/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/\*\*((?:(?!\*\*|\n).)+)\*\*/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -96,7 +108,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/__((?:(?!__).)+)__/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/__((?:(?!__|\n).)+)__/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -106,7 +118,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/\*([^*]+)\*/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/\*([^*\n]+)\*/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -116,7 +128,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/_([^_]+)_/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/_([^_\n]+)_/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -126,7 +138,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/<ins>((?:(?!<ins>|<\/ins>).)+)<\/ins>/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/<ins>((?:(?!<ins>|<\/ins>|\n).)+)<\/ins>/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -136,7 +148,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/<sub>((?:(?!<sub>|<\/sub>).)+)<\/sub>/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/<sub>((?:(?!<sub>|<\/sub>|\n).)+)<\/sub>/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -146,7 +158,7 @@ class opennamu_render_markdown {
|
|
|
return '<render' + parser_count_str + 'Span>' + x1 + '</render' + parser_count_str + 'Span>';
|
|
|
});
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/<sup>((?:(?!<sup>|<\/sup>).)+)<\/sup>/g, function(match, x1) {
|
|
|
+ this.doc_data = this.doc_data.replace(/<sup>((?:(?!<sup>|<\/sup>|\n).)+)<\/sup>/g, function(match, x1) {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
@@ -168,7 +180,7 @@ class opennamu_render_markdown {
|
|
|
|
|
|
let heading_n = 0;
|
|
|
let heading_list = [0, 0, 0, 0, 0, 0];
|
|
|
- let heading_regex = /\n(#{1,6})([^\n]+)\n/;
|
|
|
+ let heading_regex = /\n(#{1,6})([^#][^\n]*)\n/;
|
|
|
while(this.doc_data.match(heading_regex)) {
|
|
|
this.doc_data = this.doc_data.replace(heading_regex, function(match, x1, x2) {
|
|
|
let heading_level = x1.length - 1;
|
|
|
@@ -221,7 +233,7 @@ class opennamu_render_markdown {
|
|
|
let parser_count = this.parser_count['parser'];
|
|
|
let parser_data_temp = this.parser_data_temp;
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/!\[([^\[\]]*)\]\(([^\(\)]*)\)/g, function(match, x1, x2) {
|
|
|
+ this.doc_data = this.doc_data.replace(/!\[([^\[\]\n]*)\]\(([^\(\)\n]*)\)/g, function(match, x1, x2) {
|
|
|
if(x1 === '' && x2 === '') {
|
|
|
return '<imageBlink>';
|
|
|
} else {
|
|
|
@@ -266,7 +278,7 @@ class opennamu_render_markdown {
|
|
|
let parser_count = this.parser_count['parser'];
|
|
|
let parser_data_temp = this.parser_data_temp;
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/\[([^\[\]]*)\]\(([^\(\)]*)\)/g, function(match, x1, x2) {
|
|
|
+ this.doc_data = this.doc_data.replace(/\[([^\[\]\n]*)\]\(([^\(\)\n]*)\)/g, function(match, x1, x2) {
|
|
|
if(x1 === '' && x2 === '') {
|
|
|
return '<linkBlink>';
|
|
|
} else {
|
|
|
@@ -274,7 +286,9 @@ class opennamu_render_markdown {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
|
|
|
- let link_main = render_main.do_func_xss_encode(x2);;
|
|
|
+ let link_main = render_main.do_func_parser_to_text(x2, 'nowikiLink');
|
|
|
+ link_main = render_main.do_func_xss_encode(link_main);
|
|
|
+
|
|
|
let link_sub;
|
|
|
if(x1 === '') {
|
|
|
link_sub = x2;
|
|
|
@@ -304,7 +318,10 @@ class opennamu_render_markdown {
|
|
|
link_sub = x1;
|
|
|
}
|
|
|
|
|
|
- link_title = render_main.do_func_xss_encode(link_main);
|
|
|
+ link_main = render_main.do_func_parser_to_text(link_main, 'nowikiLink');
|
|
|
+ link_main = render_main.do_func_xss_encode(link_main);
|
|
|
+
|
|
|
+ link_title = link_main;
|
|
|
|
|
|
link_main = render_main.do_func_xss_decode(link_main);
|
|
|
link_main = opennamu_do_url_encode(link_main);
|
|
|
@@ -422,7 +439,7 @@ class opennamu_render_markdown {
|
|
|
let parser_data_temp = this.parser_data_temp;
|
|
|
let parser_data_temp_other = this.parser_data_temp_other;
|
|
|
|
|
|
- this.doc_data = this.doc_data.replace(/\[([^\[\(<>]+)\(((?:(?!\(|\)\]|<|>).)*)\)\]/g, function(match, x1, x2) {
|
|
|
+ this.doc_data = this.doc_data.replace(/\[([^\[\(<>\n]+)\(((?:(?!\(|\)\]|<|>|\n).)*)\)\]/g, function(match, x1, x2) {
|
|
|
if(x1 === 'anchor') {
|
|
|
parser_count += 1;
|
|
|
let parser_count_str = String(parser_count);
|
|
|
@@ -477,6 +494,103 @@ class opennamu_render_markdown {
|
|
|
this.parser_data_temp_other = parser_data_temp_other;
|
|
|
}
|
|
|
|
|
|
+ do_part_nowiki() {
|
|
|
+ let render_main = this;
|
|
|
+
|
|
|
+ let parser_count = this.parser_count['parser'];
|
|
|
+ let parser_data_temp = this.parser_data_temp;
|
|
|
+
|
|
|
+ this.doc_data = this.doc_data.replace(/\\('|"|<|>|&|.)/g, function(match, x1) {
|
|
|
+ let nowiki_data = x1;
|
|
|
+
|
|
|
+ parser_count += 1;
|
|
|
+ let parser_count_str = String(parser_count);
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
|
|
|
+
|
|
|
+ return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
|
|
|
+ });
|
|
|
+
|
|
|
+ this.doc_data = this.doc_data.replace(/```((?:(?:(?!```).)|\n)+)```/g, function(match, x1) {
|
|
|
+ let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
|
|
|
+
|
|
|
+ parser_count += 1;
|
|
|
+ let parser_count_str = String(parser_count);
|
|
|
+
|
|
|
+ if(nowiki_data.match(/\n/)) {
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<pre>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</pre>';
|
|
|
+ } else {
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
|
|
|
+ }
|
|
|
+
|
|
|
+ return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
|
|
|
+ });
|
|
|
+
|
|
|
+ this.doc_data = this.doc_data.replace(/`([^`\n]+)`/g, function(match, x1) {
|
|
|
+ let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
|
|
|
+
|
|
|
+ parser_count += 1;
|
|
|
+ let parser_count_str = String(parser_count);
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
|
|
|
+
|
|
|
+ return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
|
|
|
+ });
|
|
|
+
|
|
|
+ this.doc_data = this.doc_data.replace(
|
|
|
+ /<pre>(?:\n| )*<code>((?:(?:(?!<pre>(?:\n| )*<code>|<\/code>(?:\n| )*<\/pre>).)|\n)+)<\/code>(?:\n| )*<\/pre>/g,
|
|
|
+ function(match, x1) {
|
|
|
+ let nowiki_data = render_main.do_func_parser_to_text(x1, 'nowiki');
|
|
|
+
|
|
|
+ parser_count += 1;
|
|
|
+ let parser_count_str = String(parser_count);
|
|
|
+
|
|
|
+ if(nowiki_data.match(/\n/)) {
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<pre>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</pre>';
|
|
|
+ } else {
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'Span'] = match;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'Span'] = '';
|
|
|
+
|
|
|
+ parser_data_temp['nowiki' + parser_count_str + 'SpanEnd'] = '<code>' + nowiki_data;
|
|
|
+ parser_data_temp['/nowiki' + parser_count_str + 'SpanEnd'] = '</code>';
|
|
|
+ }
|
|
|
+
|
|
|
+ return '<nowiki' + parser_count_str + 'Span>' + '</nowiki' + parser_count_str + 'Span>';
|
|
|
+ });
|
|
|
+
|
|
|
+ this.parser_count['parser'] = parser_count;
|
|
|
+ this.parser_data_temp = parser_data_temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ do_part_horizon() {
|
|
|
+ let horizone_regex = /\n((?:\*|\* |_|_ ){3,})\n/;
|
|
|
+ while(this.doc_data.match(horizone_regex)) {
|
|
|
+ this.doc_data = this.doc_data.replace(horizone_regex, function(match, x1, x2) {
|
|
|
+ return '\n<brEnd><hr><brStart>\n';
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
do_part_final() {
|
|
|
this.doc_data = this.doc_data.replace(/<brStart>\n?/g, '');
|
|
|
this.doc_data = this.doc_data.replace(/\n?<brEnd>/g, '');
|
|
|
@@ -500,7 +614,9 @@ class opennamu_render_markdown {
|
|
|
|
|
|
// Main Part
|
|
|
do_main() {
|
|
|
+ this.do_part_nowiki();
|
|
|
this.do_part_heading();
|
|
|
+ this.do_part_horizon();
|
|
|
this.do_part_footnote();
|
|
|
this.do_part_macro();
|
|
|
this.do_part_image();
|
|
|
@@ -509,6 +625,7 @@ class opennamu_render_markdown {
|
|
|
this.do_part_final();
|
|
|
|
|
|
this.doc_data = this.do_func_parser_to_text(this.doc_data);
|
|
|
+ this.doc_data = this.do_func_parser_to_text(this.doc_data, 'nowikiEnd');
|
|
|
|
|
|
document.getElementById(this.render_part_id_add + this.render_part_id_after).innerHTML = this.doc_data;
|
|
|
|