Ver Fonte

기본 문법과 문단 추가

잉여개발기 (SPDV) há 2 anos atrás
pai
commit
178cc4c8b0

+ 1 - 1
route/tool/func.py

@@ -128,7 +128,7 @@ def get_init_set_list(need = 'all'):
             'display' : 'Markup',
             'require' : 'select',
             'default' : 'namumark',
-            'list' : ['namumark', 'markdown', 'custom', 'raw']
+            'list' : ['namumark', 'namumark_beta', 'markdown', 'custom', 'raw']
         }, 'encode' : {
             'display' : 'Encryption method',
             'require' : 'select',

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


+ 137 - 8
route_go/route/tool/namumark.go

@@ -3,6 +3,8 @@ package tool
 import (
 	"database/sql"
 	"html"
+	"log"
+	"regexp"
 	"strconv"
 	"strings"
 
@@ -18,6 +20,7 @@ type namumark struct {
 	render_data_js string
 
 	temp_data       map[string]string
+	temp_data_raw   map[string]string
 	temp_data_count int
 
 	backlink   [][]string
@@ -25,14 +28,20 @@ type namumark struct {
 }
 
 func Namumark_new(db *sql.DB, db_set map[string]string, data map[string]string) *namumark {
+	data_string := data["data"]
+	data_string = html.EscapeString(data_string)
+	data_string = strings.Replace(data_string, "\r", "", -1)
+	data_string = "\n" + data_string + "\n"
+
 	return &namumark{
 		db,
 		db_set,
 		data,
 
-		html.EscapeString(data["data"]),
+		data_string,
 		"",
 
+		map[string]string{},
 		map[string]string{},
 		0,
 
@@ -41,20 +50,27 @@ func Namumark_new(db *sql.DB, db_set map[string]string, data map[string]string)
 	}
 }
 
-func (class *namumark) func_temp_save(data string) string {
+func (class *namumark) func_temp_save(data string, data_raw string) string {
 	name := "<temp_save_" + strconv.Itoa(class.temp_data_count) + ">"
 
 	class.temp_data[name] = data
+	class.temp_data_raw[name] = data_raw
 	class.temp_data_count += 1
 
 	return name
 }
 
-func (class namumark) func_temp_restore(data string) string {
+func (class namumark) func_temp_restore(data string, to_raw bool) string {
 	string_data := data
 
-	for k, v := range class.temp_data {
-		string_data = strings.Replace(string_data, k, v, 1)
+	if to_raw {
+		for k, v := range class.temp_data_raw {
+			string_data = strings.Replace(string_data, k, v, 1)
+		}
+	} else {
+		for k, v := range class.temp_data {
+			string_data = strings.Replace(string_data, k, v, 1)
+		}
 	}
 
 	return string_data
@@ -67,29 +83,142 @@ func (class *namumark) render_text() {
 	for {
 		if m, _ := r.FindStringMatch(string_data); m != nil {
 			gps := m.Groups()
+			m_string := m.String()
 
-			temp_name := class.func_temp_save("<b>" + gps[1].Captures[0].String() + "</b>")
-			string_data = strings.Replace(string_data, m.String(), temp_name, 1)
+			temp_name := class.func_temp_save("<b>"+gps[1].Captures[0].String()+"</b>", m_string)
+			string_data = strings.Replace(string_data, m_string, temp_name, 1)
 		} else {
 			break
 		}
 	}
 
+	r = regexp2.MustCompile(`&#39;&#39;((?:(?!&#39;&#39;).)+)&#39;&#39;`, 0)
+	for {
+		if m, _ := r.FindStringMatch(string_data); m != nil {
+			gps := m.Groups()
+			m_string := m.String()
+
+			temp_name := class.func_temp_save("<i>"+gps[1].Captures[0].String()+"</i>", m_string)
+			string_data = strings.Replace(string_data, m_string, temp_name, 1)
+		} else {
+			break
+		}
+	}
+
+	r = regexp2.MustCompile(`__((?:(?!__).)+)__`, 0)
+	for {
+		if m, _ := r.FindStringMatch(string_data); m != nil {
+			gps := m.Groups()
+			m_string := m.String()
+
+			temp_name := class.func_temp_save("<u>"+gps[1].Captures[0].String()+"</u>", m_string)
+			string_data = strings.Replace(string_data, m_string, temp_name, 1)
+		} else {
+			break
+		}
+	}
+
+	r_list := []string{`\^\^\^((?:(?!\^\^\^).)+)\^\^\^`, `\^\^((?:(?!\^\^).)+)\^\^`}
+	for for_a := 0; for_a < len(r_list); for_a++ {
+		r = regexp2.MustCompile(r_list[for_a], 0)
+		for {
+			if m, _ := r.FindStringMatch(string_data); m != nil {
+				gps := m.Groups()
+				m_string := m.String()
+
+				temp_name := class.func_temp_save("<sup>"+gps[1].Captures[0].String()+"</sup>", m_string)
+				string_data = strings.Replace(string_data, m_string, temp_name, 1)
+			} else {
+				break
+			}
+		}
+	}
+
+	r_list = []string{`,,,((?:(?!,,,).)+),,,`, `,,((?:(?!,,).)+),,`}
+	for for_a := 0; for_a < len(r_list); for_a++ {
+		r = regexp2.MustCompile(r_list[for_a], 0)
+		for {
+			if m, _ := r.FindStringMatch(string_data); m != nil {
+				gps := m.Groups()
+				m_string := m.String()
+
+				temp_name := class.func_temp_save("<sub>"+gps[1].Captures[0].String()+"</sub>", m_string)
+				string_data = strings.Replace(string_data, m_string, temp_name, 1)
+			} else {
+				break
+			}
+		}
+	}
+
+	r_list = []string{`--((?:(?!--).)+)--`, `~~((?:(?!~~).)+)~~`}
+	for for_a := 0; for_a < len(r_list); for_a++ {
+		r = regexp2.MustCompile(r_list[for_a], 0)
+		for {
+			if m, _ := r.FindStringMatch(string_data); m != nil {
+				gps := m.Groups()
+				m_string := m.String()
+
+				temp_name := class.func_temp_save("<s>"+gps[1].Captures[0].String()+"</s>", m_string)
+				string_data = strings.Replace(string_data, m_string, temp_name, 1)
+			} else {
+				break
+			}
+		}
+	}
+
 	class.render_data = string_data
 }
 
 func (class *namumark) render_last() {
 	string_data := class.render_data
 
-	string_data = class.func_temp_restore(string_data)
+	string_data = class.func_temp_restore(string_data, false)
+
+	r := regexp.MustCompile(`(\n| )+$`)
+	string_data = r.ReplaceAllString(string_data, "")
+
+	r = regexp.MustCompile(`^(\n| )+`)
+	string_data = r.ReplaceAllString(string_data, "")
+
+	r = regexp.MustCompile(`\n?<front_br>`)
+	string_data = r.ReplaceAllString(string_data, "")
+
+	r = regexp.MustCompile(`<back_br>\n?`)
+	string_data = r.ReplaceAllString(string_data, "")
+
+	string_data = strings.Replace(string_data, "\n", "<br>", -1)
+
+	class.render_data = string_data
+	class.render_data_js += "opennamu_do_toc();"
+}
+
+func (class *namumark) render_heading() {
+	string_data := class.render_data
+
+	r := regexp.MustCompile(`\n(?:(={1,6})(#?) ?([^\n]+))\n`)
+	string_data = r.ReplaceAllStringFunc(string_data, func(m string) string {
+		match := r.FindStringSubmatch(m)
+
+		r = regexp.MustCompile(` ?(#?={1,6}[^=]*)$`)
+		heading_data := r.ReplaceAllString(match[3], "")
+
+		heading_len := strconv.Itoa(len(match[1]))
+		heading_render := "<h" + heading_len + ">" + heading_data + "</h" + heading_len + ">"
+
+		temp_name := class.func_temp_save(heading_render, match[0])
+		return temp_name
+	})
 
 	class.render_data = string_data
 }
 
 func (class namumark) main() map[string]interface{} {
 	class.render_text()
+	class.render_heading()
 	class.render_last()
 
+	log.Default().Println(class.render_data)
+
 	end_data := make(map[string]interface{})
 	end_data["data"] = class.render_data
 	end_data["js_data"] = class.render_data_js