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
|
||||
//import "log"
|
||||
//import "fmt"
|
||||
import "regexp"
|
||||
|
||||
var bbcode_bold *regexp.Regexp
|
||||
var bbcode_italic *regexp.Regexp
|
||||
var bbcode_underline *regexp.Regexp
|
||||
var bbcode_strikethrough *regexp.Regexp
|
||||
var bbcode_url *regexp.Regexp
|
||||
var bbcode_url_label *regexp.Regexp
|
||||
|
||||
|
@ -18,6 +17,7 @@ func init_bbcode() {
|
|||
bbcode_bold = regexp.MustCompile(`(?s)\[b\](.*)\[/b\]`)
|
||||
bbcode_italic = regexp.MustCompile(`(?s)\[i\](.*)\[/i\]`)
|
||||
bbcode_underline = regexp.MustCompile(`(?s)\[u\](.*)\[/u\]`)
|
||||
bbcode_strikethrough = regexp.MustCompile(`(?s)\[s\](.*)\[/s\]`)
|
||||
urlpattern := `(http|https|ftp|mailto*)(:??)\/\/([\.a-zA-Z\/]+)`
|
||||
bbcode_url = regexp.MustCompile(`\[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 = bbcode_bold.ReplaceAllString(msg,"<b>$1</b>")
|
||||
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_label.ReplaceAllString(msg,"<a href=\"$1$2//$3\" rel=\"nofollow\">$4</i>")
|
||||
return msg
|
||||
|
@ -42,29 +44,29 @@ func bbcode_parse2(data interface{}) interface{} {
|
|||
has_u := false
|
||||
has_b := false
|
||||
has_i := false
|
||||
has_s := false
|
||||
complex_bbc := false
|
||||
for i := 0; i < len(msgbytes); i++ {
|
||||
//log.Print(msgbytes[i])
|
||||
//fmt.Println(string(msgbytes[i]))
|
||||
//continue
|
||||
if msgbytes[i] == '[' {
|
||||
if msgbytes[i + 2] != ']' {
|
||||
if msgbytes[i + 1] == '/' {
|
||||
if msgbytes[i + 3] == ']' {
|
||||
if msgbytes[i + 2] == 'u' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 3] = '>'
|
||||
has_u = false
|
||||
}
|
||||
if msgbytes[i + 2] == 'b' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 3] = '>'
|
||||
has_b = false
|
||||
}
|
||||
if msgbytes[i + 2] == 'i' {
|
||||
} else if msgbytes[i + 2] == 'i' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 3] = '>'
|
||||
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
|
||||
} else {
|
||||
|
@ -74,20 +76,22 @@ func bbcode_parse2(data interface{}) interface{} {
|
|||
complex_bbc = true
|
||||
}
|
||||
} else {
|
||||
if msgbytes[i + 1] == 'u' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 2] = '>'
|
||||
has_u = true
|
||||
}
|
||||
if msgbytes[i + 1] == 'b' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 2] = '>'
|
||||
has_b = true
|
||||
}
|
||||
if msgbytes[i + 1] == 'i' {
|
||||
} else if msgbytes[i + 1] == 'i' {
|
||||
msgbytes[i] = '<'
|
||||
msgbytes[i + 2] = '>'
|
||||
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
|
||||
}
|
||||
|
@ -95,12 +99,11 @@ func bbcode_parse2(data interface{}) interface{} {
|
|||
}
|
||||
|
||||
// There's an unclosed tag in there x.x
|
||||
if has_i || has_u || has_b {
|
||||
closer := []byte("</u></i></b>")
|
||||
if has_i || has_u || has_b || has_s {
|
||||
closer := []byte("</u></i></b></s>")
|
||||
msgbytes = append(msgbytes, closer...)
|
||||
}
|
||||
msg = string(msgbytes)
|
||||
//fmt.Println(msg)
|
||||
|
||||
if complex_bbc {
|
||||
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. */
|
||||
package main
|
||||
import "io"
|
||||
import "strconv"
|
||||
import "io"
|
||||
|
||||
func init() {
|
||||
template_topics_handle = template_topics
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 284 KiB |
Loading…
Reference in New Issue