better babycode parsing, add horizontal rule
This commit is contained in:
		@@ -8,22 +8,22 @@ function babycode.to_html(s, escape_html)
 | 
			
		||||
  -- extract code blocks first and store them as placeholders
 | 
			
		||||
  -- don't want to process bbcode embedded into a code block
 | 
			
		||||
  local code_blocks = {}
 | 
			
		||||
  local code_count = 0
 | 
			
		||||
  s = escape_html(s)
 | 
			
		||||
  local text = s:gsub("%[code%](.-)%[/code%]", function(code)
 | 
			
		||||
    code_count = code_count + 1
 | 
			
		||||
    -- strip leading and trailing newlines, preserve others
 | 
			
		||||
    code_blocks[code_count] = code:gsub("^%s*(.-)%s*$", "%1")
 | 
			
		||||
    return "\1CODE:"..code_count.."\1"
 | 
			
		||||
    local m, _ = code:gsub("^%s*(.-)%s*$", "%1")
 | 
			
		||||
    table.insert(code_blocks, m)
 | 
			
		||||
    return "\1CODE:"..#code_blocks.."\1"
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  -- replace `[url=https://example.com]Example[/url] tags
 | 
			
		||||
  text = text:gsub("%[url=([^%]]+)%](.-)%[/url%]", function(url, label)
 | 
			
		||||
    return '<a href="'..escape_html(url)..'">'..escape_html(label)..'</a>'
 | 
			
		||||
    return '<a href="'..url..'">'..label..'</a>'
 | 
			
		||||
  end)
 | 
			
		||||
  
 | 
			
		||||
  -- replace `[url]https://example.com[/url] tags
 | 
			
		||||
  text = text:gsub("%[url%]([^%]]+)%[/url%]", function(url)
 | 
			
		||||
    return '<a href="'..escape_html(url)..'">'..escape_html(url)..'</a>'
 | 
			
		||||
    return '<a href="'..url..'">'..url..'</a>'
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  -- bold, italics, strikethrough
 | 
			
		||||
@@ -34,13 +34,16 @@ function babycode.to_html(s, escape_html)
 | 
			
		||||
  -- replace loose links
 | 
			
		||||
  text = text:gsub("(https?://[%w-_%.%?%.:/%+=&~%@#%%]+[%w-/])", function(url)
 | 
			
		||||
    if not text:find('<a[^>]*>'..url..'</a>') then
 | 
			
		||||
      return '<a href="'..escape_html(url)..'">'..escape_html(url)..'</a>'
 | 
			
		||||
      return '<a href="'..url..'">'..url..'</a>'
 | 
			
		||||
    end
 | 
			
		||||
    return url
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  -- rule
 | 
			
		||||
  text = text:gsub("\n+%-%-%-", "<hr>")
 | 
			
		||||
  
 | 
			
		||||
  -- normalize newlines, replace them with <br>
 | 
			
		||||
  text = text:gsub("\r?\n\r?\n+", "<br>"):gsub("\r?\n", "<br>")
 | 
			
		||||
  text = text:gsub("\r?\n\r?\n+", "<br>")--:gsub("\r?\n", "<br>")
 | 
			
		||||
 | 
			
		||||
  -- replace code block placeholders back with their original contents
 | 
			
		||||
  text = text:gsub("\1CODE:(%d+)\1", function(n)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user