فهرست منبع

다시 돌아온 나무마크 베타

https://github.com/openNAMU/openNAMU/issues/2076
잉여개발기 2 سال پیش
والد
کامیت
dc1167c865

+ 9 - 9
route/go_api_w_render.py

@@ -59,19 +59,19 @@ def api_w_render(db_set, name = '', tool = ''):
             else:
                 data_type = 'api_thread'
 
-            if markup in ('', 'namumark', 'namumark_beta'):
-                if data_option != '':
-                    data_option = json.loads(data_option)
+            if markup in ('', 'namumark', 'namumark_beta') and data_option != '':
+                data_option = json.loads(data_option)
 
-                    data_option_func = api_w_render_include(data_option)
+                data_option_func = api_w_render_include(data_option)
 
-                    # parameter replace
-                    data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)=((?:\\@|[^@\n])+)@', data_option_func, data_org)
-                    data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', data_option_func, data_org)
+                # parameter replace
+                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)=((?:\\@|[^@\n])+)@', data_option_func, data_org)
+                data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', data_option_func, data_org)
 
-                    # remove end br
-                    data_org = re.sub('^\n+', '', data_org)
+                # remove end br
+                data_org = re.sub('^\n+', '', data_org)
 
+            if markup in ('', 'namumark'):
                 data_pas = render_set(conn, 
                     doc_name = name, 
                     doc_data = data_org, 

BIN
route_go/bin/main.amd64.bin


BIN
route_go/bin/main.amd64.exe


BIN
route_go/bin/main.arm64.bin


BIN
route_go/bin/main.arm64.exe


+ 102 - 5
route_go/route/tool/namumark.go

@@ -1,11 +1,108 @@
 package tool
 
-func Namumark() map[string]interface{} {
+import (
+	"database/sql"
+	"html"
+	"regexp"
+	"strconv"
+	"strings"
+)
+
+type namumark struct {
+	db     *sql.DB
+	db_set map[string]string
+	data   map[string]string
+
+	render_data    string
+	render_data_js string
+
+	temp_data       map[string]string
+	temp_data_count int
+
+	backlink   [][]string
+	link_count int
+}
+
+func Namumark_new(db *sql.DB, db_set map[string]string, data map[string]string) *namumark {
+	return &namumark{
+		db,
+		db_set,
+		data,
+
+		html.EscapeString(data["data"]),
+		"",
+
+		map[string]string{},
+		0,
+
+		[][]string{},
+		0,
+	}
+}
+
+func (class namumark) func_temp_save(data string) string {
+	name := "<temp_save_" + strconv.Itoa(class.temp_data_count) + ">"
+
+	class.temp_data[name] = data
+	class.temp_data_count += 1
+
+	return name
+}
+
+func (class namumark) func_temp_restore(data string) string {
+	string_data := data
+
+	for k, v := range class.temp_data {
+		string_data = strings.Replace(string_data, "<"+k+">", v, 1)
+	}
+
+	return string_data
+}
+
+func (class namumark) render_text() {
+	string_data := class.render_data
+
+	temp_name := ""
+	stack_idx := false
+
+	r := regexp.MustCompile(`'''`)
+	for idx := r.FindStringIndex(string_data); len(idx) != 0; idx = r.FindStringIndex(string_data) {
+		if !stack_idx {
+			temp_name = class.func_temp_save("<b>")
+			stack_idx = true
+			string_data = strings.Replace(string_data, "'''", "<temp>", 1)
+
+		} else {
+			string_data = strings.Replace(string_data, "<temp>", temp_name, 1)
+
+			temp_name = class.func_temp_save("</b>")
+			stack_idx = false
+			string_data = strings.Replace(string_data, "'''", temp_name, 1)
+		}
+	}
+
+	string_data = strings.Replace(string_data, "<temp>", "", 1)
+
+	class.render_data = string_data
+}
+
+func (class namumark) render_last() {
+	string_data := class.render_data
+
+	string_data = class.func_temp_restore(string_data)
+
+	class.render_data = string_data
+}
+
+func (class namumark) main() map[string]interface{} {
+	class.render_text()
+	class.render_last()
+
 	end_data := make(map[string]interface{})
-	end_data["data"] = ""
-	end_data["js_data"] = ""
-	end_data["backlink"] = [][]string{}
-	end_data["link_count"] = 0
+	end_data["data"] = class.render_data
+	end_data["js_data"] = class.render_data_js
+	end_data["backlink"] = class.backlink
+	end_data["link_count"] = class.link_count
 
 	return end_data
 }

+ 4 - 1
route_go/route/tool/render.go

@@ -66,6 +66,8 @@ func Get_render_direct(db *sql.DB, db_set map[string]string, doc_name string, da
 		render_type = "view"
 	}
 
+	log.Fatal(data)
+
 	doc_data_set := map[string]string{
 		"doc_name":    doc_name,
 		"data":        data,
@@ -77,7 +79,8 @@ func Get_render_direct(db *sql.DB, db_set map[string]string, doc_name string, da
 
 	render_data := make(map[string]interface{})
 	if markup == "namumark" {
-		render_data = Namumark()
+		render_data_class := Namumark_new(db, db_set, doc_data_set)
+		render_data = render_data_class.main()
 	} else if markup == "markdown" {
 		render_data = Markdown(db, db_set, doc_data_set)
 	} else {

+ 0 - 1
views/main_css/js/route/render.js

@@ -89,7 +89,6 @@ function opennamu_heading_folding(data, element = '') {
     }
     
     if(element !== '') {
-        console.log(element.innerHTML);
         if(element.innerHTML !== '⊖') {
             element.innerHTML = '⊖';
         } else {

+ 1 - 1
views/main_css/js/route/view.js

@@ -43,8 +43,8 @@ function opennamu_view_w_raw_preview() {
     if(document.getElementById('opennamu_edit_textarea')) {
         data = document.getElementById('opennamu_edit_textarea').value;
     }
-    console.log(data);
 
+    console.log(name);
     opennamu_do_render('opennamu_preview_area', data, name);
 }
 

+ 0 - 2
views/main_css/js/route/w_watch_list.js

@@ -20,8 +20,6 @@ function opennamu_w_watch_list(page = 1) {
             do_type = 'watch_list'
         }
 
-        console.log();
-
         let split_url = url.split('/');
         let doc_name = split_url.slice(3, undefined);