Made the BBCode plugin even faster.
Added the strikethrough BBCode. Redid the Round 4 Benchmark. The regular expression parser now works properly. The underline Regex was missing, thus it was finishing faster than it should have.
This commit is contained in:
parent
e90d96961f
commit
5ef65be135
Binary file not shown.
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 128 KiB |
Binary file not shown.
After Width: | Height: | Size: 284 KiB |
|
@ -1,11 +1,10 @@
|
||||||
package main
|
package main
|
||||||
//import "log"
|
|
||||||
//import "fmt"
|
|
||||||
import "regexp"
|
import "regexp"
|
||||||
|
|
||||||
var bbcode_bold *regexp.Regexp
|
var bbcode_bold *regexp.Regexp
|
||||||
var bbcode_italic *regexp.Regexp
|
var bbcode_italic *regexp.Regexp
|
||||||
var bbcode_underline *regexp.Regexp
|
var bbcode_underline *regexp.Regexp
|
||||||
|
var bbcode_strikethrough *regexp.Regexp
|
||||||
var bbcode_url *regexp.Regexp
|
var bbcode_url *regexp.Regexp
|
||||||
var bbcode_url_label *regexp.Regexp
|
var bbcode_url_label *regexp.Regexp
|
||||||
|
|
||||||
|
@ -18,6 +17,7 @@ func init_bbcode() {
|
||||||
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
|
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
|
||||||
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
|
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
|
||||||
bbcode_underline = regexp.MustCompile(`(?s)\[u\](.*)\[/u\]`)
|
bbcode_underline = regexp.MustCompile(`(?s)\[u\](.*)\[/u\]`)
|
||||||
|
bbcode_strikethrough = regexp.MustCompile(`(?s)\[s\](.*)\[/s\]`)
|
||||||
urlpattern := `(http|https|ftp|mailto*)(:??)\/\/([\.a-zA-Z\/]+)`
|
urlpattern := `(http|https|ftp|mailto*)(:??)\/\/([\.a-zA-Z\/]+)`
|
||||||
bbcode_url = regexp.MustCompile(`\[url\]` + urlpattern + `\[/url\]`)
|
bbcode_url = regexp.MustCompile(`\[url\]` + urlpattern + `\[/url\]`)
|
||||||
bbcode_url_label = regexp.MustCompile(`(?s)\[url=` + urlpattern + `\](.*)\[/url\]`)
|
bbcode_url_label = regexp.MustCompile(`(?s)\[url=` + urlpattern + `\](.*)\[/url\]`)
|
||||||
|
@ -31,6 +31,8 @@ func bbcode_parse(data interface{}) interface{} {
|
||||||
msg := data.(string)
|
msg := data.(string)
|
||||||
msg = bbcode_bold.ReplaceAllString(msg,"<b>$1</b>")
|
msg = bbcode_bold.ReplaceAllString(msg,"<b>$1</b>")
|
||||||
msg = bbcode_italic.ReplaceAllString(msg,"<i>$1</i>")
|
msg = bbcode_italic.ReplaceAllString(msg,"<i>$1</i>")
|
||||||
|
msg = bbcode_underline.ReplaceAllString(msg,"<u>$1</u>")
|
||||||
|
msg = bbcode_strikethrough.ReplaceAllString(msg,"<s>$1</s>")
|
||||||
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
|
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
|
||||||
msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
|
msg = bbcode_url_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
|
||||||
return msg
|
return msg
|
||||||
|
@ -42,29 +44,29 @@ func bbcode_parse2(data interface{}) interface{} {
|
||||||
has_u := false
|
has_u := false
|
||||||
has_b := false
|
has_b := false
|
||||||
has_i := false
|
has_i := false
|
||||||
|
has_s := false
|
||||||
complex_bbc := false
|
complex_bbc := false
|
||||||
for i := 0; i < len(msgbytes); i++ {
|
for i := 0; i < len(msgbytes); i++ {
|
||||||
//log.Print(msgbytes[i])
|
|
||||||
//fmt.Println(string(msgbytes[i]))
|
|
||||||
//continue
|
|
||||||
if msgbytes[i] == '[' {
|
if msgbytes[i] == '[' {
|
||||||
if msgbytes[i + 2] != ']' {
|
if msgbytes[i + 2] != ']' {
|
||||||
if msgbytes[i + 1] == '/' {
|
if msgbytes[i + 1] == '/' {
|
||||||
if msgbytes[i + 3] == ']' {
|
if msgbytes[i + 3] == ']' {
|
||||||
if msgbytes[i + 2] == 'u' {
|
|
||||||
msgbytes[i] = '<'
|
|
||||||
msgbytes[i + 3] = '>'
|
|
||||||
has_u = false
|
|
||||||
}
|
|
||||||
if msgbytes[i + 2] == 'b' {
|
if msgbytes[i + 2] == 'b' {
|
||||||
msgbytes[i] = '<'
|
msgbytes[i] = '<'
|
||||||
msgbytes[i + 3] = '>'
|
msgbytes[i + 3] = '>'
|
||||||
has_b = false
|
has_b = false
|
||||||
}
|
} else if msgbytes[i + 2] == 'i' {
|
||||||
if msgbytes[i + 2] == 'i' {
|
|
||||||
msgbytes[i] = '<'
|
msgbytes[i] = '<'
|
||||||
msgbytes[i + 3] = '>'
|
msgbytes[i + 3] = '>'
|
||||||
has_i = false
|
has_i = false
|
||||||
|
} else if msgbytes[i + 2] == 'u' {
|
||||||
|
msgbytes[i] = '<'
|
||||||
|
msgbytes[i + 3] = '>'
|
||||||
|
has_u = false
|
||||||
|
} else if msgbytes[i + 2] == 's' {
|
||||||
|
msgbytes[i] = '<'
|
||||||
|
msgbytes[i + 3] = '>'
|
||||||
|
has_s = false
|
||||||
}
|
}
|
||||||
i += 3
|
i += 3
|
||||||
} else {
|
} else {
|
||||||
|
@ -74,20 +76,22 @@ func bbcode_parse2(data interface{}) interface{} {
|
||||||
complex_bbc = true
|
complex_bbc = true
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if msgbytes[i + 1] == 'u' {
|
|
||||||
msgbytes[i] = '<'
|
|
||||||
msgbytes[i + 2] = '>'
|
|
||||||
has_u = true
|
|
||||||
}
|
|
||||||
if msgbytes[i + 1] == 'b' {
|
if msgbytes[i + 1] == 'b' {
|
||||||
msgbytes[i] = '<'
|
msgbytes[i] = '<'
|
||||||
msgbytes[i + 2] = '>'
|
msgbytes[i + 2] = '>'
|
||||||
has_b = true
|
has_b = true
|
||||||
}
|
} else if msgbytes[i + 1] == 'i' {
|
||||||
if msgbytes[i + 1] == 'i' {
|
|
||||||
msgbytes[i] = '<'
|
msgbytes[i] = '<'
|
||||||
msgbytes[i + 2] = '>'
|
msgbytes[i + 2] = '>'
|
||||||
has_i = true
|
has_i = true
|
||||||
|
} else if msgbytes[i + 1] == 'u' {
|
||||||
|
msgbytes[i] = '<'
|
||||||
|
msgbytes[i + 2] = '>'
|
||||||
|
has_u = true
|
||||||
|
} else if msgbytes[i + 1] == 's' {
|
||||||
|
msgbytes[i] = '<'
|
||||||
|
msgbytes[i + 2] = '>'
|
||||||
|
has_s = true
|
||||||
}
|
}
|
||||||
i += 2
|
i += 2
|
||||||
}
|
}
|
||||||
|
@ -95,12 +99,11 @@ func bbcode_parse2(data interface{}) interface{} {
|
||||||
}
|
}
|
||||||
|
|
||||||
// There's an unclosed tag in there x.x
|
// There's an unclosed tag in there x.x
|
||||||
if has_i || has_u || has_b {
|
if has_i || has_u || has_b || has_s {
|
||||||
closer := []byte("</u></i></b>")
|
closer := []byte("</u></i></b></s>")
|
||||||
msgbytes = append(msgbytes, closer...)
|
msgbytes = append(msgbytes, closer...)
|
||||||
}
|
}
|
||||||
msg = string(msgbytes)
|
msg = string(msgbytes)
|
||||||
//fmt.Println(msg)
|
|
||||||
|
|
||||||
if complex_bbc {
|
if complex_bbc {
|
||||||
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
|
msg = bbcode_url.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$1$2//$3</i>")
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
|
/* This file was automatically generated by the software. Please don't edit it as your changes may be overwritten at any moment. */
|
||||||
package main
|
package main
|
||||||
import "io"
|
|
||||||
import "strconv"
|
import "strconv"
|
||||||
|
import "io"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
template_topics_handle = template_topics
|
template_topics_handle = template_topics
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 284 KiB |
Loading…
Reference in New Issue