|
|
@@ -3,9 +3,10 @@ package tool
|
|
|
import (
|
|
|
"database/sql"
|
|
|
"html"
|
|
|
- "regexp"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
+
|
|
|
+ "github.com/dlclark/regexp2"
|
|
|
)
|
|
|
|
|
|
type namumark struct {
|
|
|
@@ -40,7 +41,7 @@ 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) string {
|
|
|
name := "<temp_save_" + strconv.Itoa(class.temp_data_count) + ">"
|
|
|
|
|
|
class.temp_data[name] = data
|
|
|
@@ -53,40 +54,31 @@ 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)
|
|
|
+ string_data = strings.Replace(string_data, k, v, 1)
|
|
|
}
|
|
|
|
|
|
return string_data
|
|
|
}
|
|
|
|
|
|
-func (class namumark) render_text() {
|
|
|
+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)
|
|
|
+ r := regexp2.MustCompile(`'''((?:(?!''').)+)'''`, 0)
|
|
|
+ for {
|
|
|
+ if m, _ := r.FindStringMatch(string_data); m != nil {
|
|
|
+ gps := m.Groups()
|
|
|
|
|
|
+ temp_name := class.func_temp_save("<b>" + gps[1].Captures[0].String() + "</b>")
|
|
|
+ string_data = strings.Replace(string_data, m.String(), temp_name, 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)
|
|
|
+ break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- string_data = strings.Replace(string_data, "<temp>", "", 1)
|
|
|
-
|
|
|
class.render_data = string_data
|
|
|
}
|
|
|
|
|
|
-func (class namumark) render_last() {
|
|
|
+func (class *namumark) render_last() {
|
|
|
string_data := class.render_data
|
|
|
|
|
|
string_data = class.func_temp_restore(string_data)
|