Avoid a few allocations for mentions.

Add six new parser test cases.
Stop treating lone double forward slashes as URLs.

Fixes #52
This commit is contained in:
Azareal 2019-07-11 20:44:18 +10:00
parent 462464e47e
commit 13fa2326bd
2 changed files with 25 additions and 6 deletions

View File

@ -16,6 +16,7 @@ import (
// TODO: Somehow localise these? // TODO: Somehow localise these?
var SpaceGap = []byte(" ") var SpaceGap = []byte(" ")
var httpProtBytes = []byte("http://") var httpProtBytes = []byte("http://")
var DoubleForwardSlash = []byte("//")
var InvalidURL = []byte("<red>[Invalid URL]</red>") var InvalidURL = []byte("<red>[Invalid URL]</red>")
var InvalidTopic = []byte("<red>[Invalid Topic]</red>") var InvalidTopic = []byte("<red>[Invalid Topic]</red>")
var InvalidProfile = []byte("<red>[Invalid Profile]</red>") var InvalidProfile = []byte("<red>[Invalid Profile]</red>")
@ -531,7 +532,8 @@ func ParseMessage(msg string, sectionID int, sectionType string /*, user User*/)
sb.Write(bytesSinglequote) sb.Write(bytesSinglequote)
sb.Write(urlMention) sb.Write(urlMention)
sb.Write(bytesGreaterthan) sb.Write(bytesGreaterthan)
sb.WriteString("@" + menUser.Name) sb.WriteByte('@')
sb.WriteString(menUser.Name)
sb.Write(URLClose) sb.Write(URLClose)
lastItem = i lastItem = i
i-- i--
@ -560,11 +562,22 @@ func ParseMessage(msg string, sectionID int, sectionType string /*, user User*/)
urlLen, ok := PartialURLStringLen(msg[i:]) urlLen, ok := PartialURLStringLen(msg[i:])
if len(msg) < i+urlLen { if len(msg) < i+urlLen {
//fmt.Println("o1") //fmt.Println("o1")
sb.Write(InvalidURL) if urlLen == 2 {
sb.Write(DoubleForwardSlash)
} else {
sb.Write(InvalidURL)
}
i += len(msg) - 1 i += len(msg) - 1
lastItem = i lastItem = i
break break
} }
if urlLen == 2 {
sb.Write(DoubleForwardSlash)
i += urlLen
lastItem = i
i--
continue
}
//fmt.Println("msg[i:i+urlLen]:", "'"+msg[i:i+urlLen]+"'") //fmt.Println("msg[i:i+urlLen]:", "'"+msg[i:i+urlLen]+"'")
if !ok { if !ok {
//fmt.Printf("o2: i = %d; i+urlLen = %d\n",i,i+urlLen) //fmt.Printf("o2: i = %d; i+urlLen = %d\n",i,i+urlLen)

View File

@ -145,22 +145,23 @@ func TestParser(t *testing.T) {
msgList.Add("", "") msgList.Add("", "")
msgList.Add("haha", "haha") msgList.Add("haha", "haha")
msgList.Add("<b>t</b>", "<b>t</b>") msgList.Add("<b>t</b>", "<b>t</b>")
msgList.Add("//", "<red>[Invalid URL]</red>") msgList.Add("//", "//")
msgList.Add("http://", "<red>[Invalid URL]</red>") msgList.Add("http://", "<red>[Invalid URL]</red>")
msgList.Add("https://", "<red>[Invalid URL]</red>") msgList.Add("https://", "<red>[Invalid URL]</red>")
msgList.Add("ftp://", "<red>[Invalid URL]</red>") msgList.Add("ftp://", "<red>[Invalid URL]</red>")
msgList.Add("git://", "<red>[Invalid URL]</red>") msgList.Add("git://", "<red>[Invalid URL]</red>")
msgList.Add("ssh://", "ssh://") msgList.Add("ssh://", "ssh://")
msgList.Add("// ", "<red>[Invalid URL]</red> ") msgList.Add("// ", "// ")
msgList.Add("// //", "<red>[Invalid URL]</red> <red>[Invalid URL]</red>") msgList.Add("// //", "// //")
msgList.Add("// // //", "// // //")
msgList.Add("http:// ", "<red>[Invalid URL]</red> ") msgList.Add("http:// ", "<red>[Invalid URL]</red> ")
msgList.Add("https:// ", "<red>[Invalid URL]</red> ") msgList.Add("https:// ", "<red>[Invalid URL]</red> ")
msgList.Add("ftp:// ", "<red>[Invalid URL]</red> ") msgList.Add("ftp:// ", "<red>[Invalid URL]</red> ")
msgList.Add("git:// ", "<red>[Invalid URL]</red> ") msgList.Add("git:// ", "<red>[Invalid URL]</red> ")
msgList.Add("ssh:// ", "ssh:// ") msgList.Add("ssh:// ", "ssh:// ")
msgList.Add("// t", "<red>[Invalid URL]</red> t") msgList.Add("// t", "// t")
msgList.Add("http:// t", "<red>[Invalid URL]</red> t") msgList.Add("http:// t", "<red>[Invalid URL]</red> t")
msgList.Add("http:", "http:") msgList.Add("http:", "http:")
@ -183,6 +184,11 @@ func TestParser(t *testing.T) {
msgList.Add("haha\nhaha\nhaha", "haha<br>haha<br>haha") msgList.Add("haha\nhaha\nhaha", "haha<br>haha<br>haha")
msgList.Add("//"+url, "<a href='//"+url+"'>//"+url+"</a>") msgList.Add("//"+url, "<a href='//"+url+"'>//"+url+"</a>")
msgList.Add("//a", "<a href='//a'>//a</a>") msgList.Add("//a", "<a href='//a'>//a</a>")
msgList.Add(" //a", " <a href='//a'>//a</a>")
msgList.Add("//a ", "<a href='//a'>//a</a> ")
msgList.Add(" //a ", " <a href='//a'>//a</a> ")
msgList.Add("d //a ", "d <a href='//a'>//a</a> ")
msgList.Add("ddd ddd //a ", "ddd ddd <a href='//a'>//a</a> ")
msgList.Add("https://"+url, "<a href='https://"+url+"'>https://"+url+"</a>") msgList.Add("https://"+url, "<a href='https://"+url+"'>https://"+url+"</a>")
msgList.Add("https://t", "<a href='https://t'>https://t</a>") msgList.Add("https://t", "<a href='https://t'>https://t</a>")
msgList.Add("http://"+url, "<a href='http://"+url+"'>http://"+url+"</a>") msgList.Add("http://"+url, "<a href='http://"+url+"'>http://"+url+"</a>")