A Neovim plugin enabling you to solve LeetCode problems.
feat(parser): improved highlighting
3 files changed, +21 -30
+8-27lua/leetcode/parser/html.lua
| @@ -166,7 +166,7 @@ function Html:handle_link(text, tag_data) | ||
| 166 | 166 | end |
| 167 | 167 | |
| 168 | 168 | local line = NuiLine() |
| 169 | - line:append(text, "leetcode_list") | |
| 169 | + line:append(text, "leetcode_ref") | |
| 170 | 170 | line:append("->(", "leetcode_normal") |
| 171 | 171 | line:append(link, "leetcode_link") |
| 172 | 172 | line:append(")", "leetcode_normal") |
| @@ -174,26 +174,6 @@ function Html:handle_link(text, tag_data) | ||
| 174 | 174 | return line |
| 175 | 175 | end |
| 176 | 176 | |
| 177 | -function Html:handle_img(tag_data) | |
| 178 | - local tag = tag_data.tag | |
| 179 | - if tag ~= "img" then return end | |
| 180 | - local line = NuiLine() | |
| 181 | - | |
| 182 | - local src, alt | |
| 183 | - for _, attr in ipairs(tag_data.attrs) do | |
| 184 | - if attr.name == "src" then src = attr.value end | |
| 185 | - if attr.name == "alt" then alt = attr.value end | |
| 186 | - end | |
| 187 | - if not src then return end | |
| 188 | - alt = alt or "" | |
| 189 | - | |
| 190 | - line:append(string.format("[%s](", alt ~= "" and alt or "img"), "leetcode_indent") | |
| 191 | - line:append(src, "leetcode_link") | |
| 192 | - line:append(")", "leetcode_indent") | |
| 193 | - | |
| 194 | - self.text:append(line) | |
| 195 | -end | |
| 196 | - | |
| 197 | 177 | ---@private |
| 198 | 178 | --- |
| 199 | 179 | ---@param node TSNode |
| @@ -256,6 +236,9 @@ function Html:normalize() | ||
| 256 | 236 | :gsub("\t*<(/?li)>", "<%1>") |
| 257 | 237 | :gsub("\t*<(/?ul)>", "<%1>") |
| 258 | 238 | :gsub("\t*<(/?ol)>", "<%1>") |
| 239 | + :gsub("<strong>(Input:?%s*)</strong>", "<input>%1</input>") | |
| 240 | + :gsub("<strong>(Output:?%s*)</strong>", "<output>%1</output>") | |
| 241 | + :gsub("<strong>(Explanation:?%s*)</strong>", "<explanation>%1</explanation>") | |
| 259 | 242 | -- :gsub( |
| 260 | 243 | -- "\t*<(li[^>]*)>(.-)\t*</(li)>", |
| 261 | 244 | -- "<%1>%2</%3>\n" |
| @@ -263,11 +246,11 @@ function Html:normalize() | ||
| 263 | 246 | -- :gsub("\t*<(ul[^>]*)>(.-)\t*</(ul)>", "<%1>%2</%3>\n") |
| 264 | 247 | -- :gsub("\t*<(ol[^>]*)>(.-)\t*</(ol)>", "<%1>%2</%3>\n") |
| 265 | 248 | :gsub( |
| 266 | - "<p><strong[^>]*>(Example%s*%d*:)%s*</strong></p>\n*", | |
| 249 | + "<p><strong[^>]*>(Example%s*%d*:?)%s*</strong></p>\n*", | |
| 267 | 250 | "\n\n<example> %1</example>\n\n" |
| 268 | 251 | ) |
| 269 | 252 | :gsub( |
| 270 | - "<p><strong[^>]*>(Constraints:)%s*</strong></p>\n*", | |
| 253 | + "<p><strong[^>]*>(Constraints:?)%s*</strong></p>\n*", | |
| 271 | 254 | "\n\n<constraints> %1</constraints>\n\n" |
| 272 | 255 | ) |
| 273 | 256 | :gsub("<(img[^>]*)/>\n*", "<%1>img</img>") |
| @@ -277,10 +260,8 @@ function Html:normalize() | ||
| 277 | 260 | :gsub("\t", "&lctab;") |
| 278 | 261 | :gsub("%s", " ") |
| 279 | 262 | :gsub("<[^>]*>", function(match) return match:gsub(" ", " ") end) |
| 280 | - :gsub("<a[^>]*>(.-)</a>", function(match) | |
| 281 | - match = match:gsub("&#?%w+;", utils.entity) | |
| 282 | - return match:gsub(" ", " ") | |
| 283 | - end) .. "&lcend;" | |
| 263 | + :gsub("<a[^>]*>(.-)</a>", function(match) return match:gsub("&#?%w+;", utils.entity) end) | |
| 264 | + .. "&lcend;" | |
| 284 | 265 | end |
| 285 | 266 | |
| 286 | 267 | -- Trim excessive lines |
+9-2lua/leetcode/parser/utils.lua
| @@ -37,17 +37,24 @@ local entities = { | ||
| 37 | 37 | ["&lccode;"] = "`", |
| 38 | 38 | } |
| 39 | 39 | |
| 40 | +local xd = "header" | |
| 41 | + | |
| 40 | 42 | local highlights = { |
| 41 | 43 | strong = "bold", |
| 42 | 44 | b = "bold", |
| 43 | 45 | em = "italic", |
| 44 | 46 | i = "italic", |
| 45 | 47 | code = "code", |
| 46 | - example = "example", | |
| 47 | - constraints = "constraints", | |
| 48 | 48 | a = "link", |
| 49 | 49 | u = "underline", |
| 50 | 50 | |
| 51 | + example = "example", | |
| 52 | + constraints = "constraints", | |
| 53 | + | |
| 54 | + input = xd, | |
| 55 | + output = xd, | |
| 56 | + explanation = xd, | |
| 57 | + | |
| 51 | 58 | -- pre = "", |
| 52 | 59 | -- span = "", |
| 53 | 60 | -- p = "", |
+4-1lua/leetcode/theme/default.lua
| @@ -33,8 +33,8 @@ M.get = function() | ||
| 33 | 33 | hint = { fg = hl("DiagnosticHint").fg }, |
| 34 | 34 | error = { fg = hl("DiagnosticError").fg }, |
| 35 | 35 | |
| 36 | + normal = { fg = hl("Conceal").fg }, | |
| 36 | 37 | alt = { fg = hl("Comment").fg }, |
| 37 | - normal = { fg = hl("Delimiter").fg }, | |
| 38 | 38 | italic = { fg = hl("Normal").fg, italic = true }, |
| 39 | 39 | bold = { fg = hl("Normal").fg, bold = true }, |
| 40 | 40 | underline = { underline = true }, |
| @@ -42,9 +42,12 @@ M.get = function() | ||
| 42 | 42 | code = { fg = hl("Type").fg, bg = hl("Normal").bg }, |
| 43 | 43 | example = { fg = hl("DiagnosticHint").fg }, |
| 44 | 44 | constraints = { fg = hl("DiagnosticInfo").fg }, |
| 45 | + header = { fg = hl("SpecialChar").fg, bold = true }, | |
| 46 | + | |
| 45 | 47 | indent = { fg = hl("Comment").fg }, |
| 46 | 48 | link = { fg = hl("Function").fg, underline = true }, |
| 47 | 49 | list = { fg = hl("SpecialChar").fg }, |
| 50 | + ref = { fg = hl("Tag").fg }, | |
| 48 | 51 | } |
| 49 | 52 | end |
| 50 | 53 |