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:
Azareal 2017-01-05 14:59:15 +00:00
parent e90d96961f
commit 5ef65be135
5 changed files with 26 additions and 23 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 128 KiB

BIN
images/tempra-conflux.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

View File

@ -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>")

View File

@ -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