diff options
| author | 2022-01-02 08:38:11 +0200 | |
|---|---|---|
| committer | 2022-01-02 08:38:11 +0200 | |
| commit | d13e89cbbdda9722fc636b0666adce58501d1c9b (patch) | |
| tree | 9eeddb7ac0f286aeb710789eb2dd590418d146fa /src/Row.zig | |
| parent | Improved input (diff) | |
| download | es-d13e89cbbdda9722fc636b0666adce58501d1c9b.tar.gz es-d13e89cbbdda9722fc636b0666adce58501d1c9b.tar.xz es-d13e89cbbdda9722fc636b0666adce58501d1c9b.zip | |
Some changes in Syntax
Diffstat (limited to 'src/Row.zig')
| -rw-r--r-- | src/Row.zig | 54 |
1 files changed, 24 insertions, 30 deletions
diff --git a/src/Row.zig b/src/Row.zig index 38fb72b..a47be6a 100644 --- a/src/Row.zig +++ b/src/Row.zig | |||
| @@ -149,14 +149,12 @@ pub fn updateSyntax(self: *Row, buf: *Buffer) UpdateSyntaxError!void { | |||
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | const syntax = buf.syntax.?; | 151 | const syntax = buf.syntax.?; |
| 152 | const kw1 = syntax.keywords1; | ||
| 153 | const kw2 = syntax.keywords2; | ||
| 154 | 152 | ||
| 155 | var after_sep = true; | ||
| 156 | var in_comment = if (self.idx > 0) buf.rows.items[self.idx - 1].ends_with_open_comment else false; | 153 | var in_comment = if (self.idx > 0) buf.rows.items[self.idx - 1].ends_with_open_comment else false; |
| 157 | var curr_str_quote: ?u8 = null; | 154 | var curr_str_quote: ?u8 = null; |
| 158 | 155 | ||
| 159 | var i: usize = 0; | 156 | var i: usize = 0; |
| 157 | var last_sep: usize = 0; | ||
| 160 | main_loop: while (i < self.rdata.items.len) { | 158 | main_loop: while (i < self.rdata.items.len) { |
| 161 | const prev_hl = if (i > 0) self.hldata.items[i - 1] else .normal; | 159 | const prev_hl = if (i > 0) self.hldata.items[i - 1] else .normal; |
| 162 | 160 | ||
| @@ -165,7 +163,7 @@ pub fn updateSyntax(self: *Row, buf: *Buffer) UpdateSyntaxError!void { | |||
| 165 | if (curr_str_quote == null and !in_comment and scs.len + i <= self.rdata.items.len) { | 163 | if (curr_str_quote == null and !in_comment and scs.len + i <= self.rdata.items.len) { |
| 166 | if (std.mem.eql(u8, scs, self.rdata.items[i..(i + scs.len)])) { | 164 | if (std.mem.eql(u8, scs, self.rdata.items[i..(i + scs.len)])) { |
| 167 | std.mem.set(Highlight, self.hldata.items[i..], .comment); | 165 | std.mem.set(Highlight, self.hldata.items[i..], .comment); |
| 168 | break; | 166 | break :main_loop; |
| 169 | } | 167 | } |
| 170 | } | 168 | } |
| 171 | } | 169 | } |
| @@ -181,16 +179,16 @@ pub fn updateSyntax(self: *Row, buf: *Buffer) UpdateSyntaxError!void { | |||
| 181 | std.mem.set(Highlight, self.hldata.items[i..(i + mce.len)], .comment_ml); | 179 | std.mem.set(Highlight, self.hldata.items[i..(i + mce.len)], .comment_ml); |
| 182 | i += mce.len; | 180 | i += mce.len; |
| 183 | in_comment = false; | 181 | in_comment = false; |
| 184 | after_sep = true; | 182 | last_sep = i; |
| 185 | } else { | 183 | } else { |
| 186 | i += 1; | 184 | i += 1; |
| 187 | continue; | 185 | continue :main_loop; |
| 188 | } | 186 | } |
| 189 | } else if (mcs.len + i <= self.rdata.items.len and std.mem.eql(u8, mcs, self.rdata.items[i..(i + mcs.len)])) { | 187 | } else if (mcs.len + i <= self.rdata.items.len and std.mem.eql(u8, mcs, self.rdata.items[i..(i + mcs.len)])) { |
| 190 | std.mem.set(Highlight, self.hldata.items[i..(i + mcs.len)], .comment_ml); | 188 | std.mem.set(Highlight, self.hldata.items[i..(i + mcs.len)], .comment_ml); |
| 191 | i += mcs.len; | 189 | i += mcs.len; |
| 192 | in_comment = true; | 190 | in_comment = true; |
| 193 | continue; | 191 | continue :main_loop; |
| 194 | } | 192 | } |
| 195 | } | 193 | } |
| 196 | } | 194 | } |
| @@ -208,54 +206,50 @@ pub fn updateSyntax(self: *Row, buf: *Buffer) UpdateSyntaxError!void { | |||
| 208 | i += 1; | 206 | i += 1; |
| 209 | } else if (c == quote) { | 207 | } else if (c == quote) { |
| 210 | curr_str_quote = null; | 208 | curr_str_quote = null; |
| 211 | after_sep = true; | 209 | last_sep = i; |
| 212 | } | 210 | } |
| 213 | 211 | ||
| 214 | continue; | 212 | continue :main_loop; |
| 215 | } else { | 213 | } else { |
| 216 | // TODO: Move this to syntax struct | 214 | // TODO: Move this to syntax struct |
| 217 | if (c == '"' or c == '\'') { | 215 | if (c == '"' or c == '\'') { |
| 218 | curr_str_quote = c; | 216 | curr_str_quote = c; |
| 219 | self.hldata.items[i] = .string; | 217 | self.hldata.items[i] = .string; |
| 220 | i += 1; | 218 | i += 1; |
| 221 | continue; | 219 | continue :main_loop; |
| 222 | } | 220 | } |
| 223 | } | 221 | } |
| 224 | } | 222 | } |
| 225 | 223 | ||
| 226 | if (syntax.flags.hl_numbers) { | 224 | if (syntax.flags.hl_numbers) { |
| 227 | if ((std.ascii.isDigit(c) and (after_sep or prev_hl == .number)) or (c == '.' and prev_hl == .number)) { | 225 | if ((std.ascii.isDigit(c) and (last_sep == i or prev_hl == .number)) |
| 228 | after_sep = false; | 226 | or (c == '.' and prev_hl == .number) |
| 227 | ) { | ||
| 229 | self.hldata.items[i] = .number; | 228 | self.hldata.items[i] = .number; |
| 230 | i += 1; | 229 | i += 1; |
| 231 | continue; | 230 | continue :main_loop; |
| 232 | } | 231 | } |
| 233 | } | 232 | } |
| 234 | 233 | ||
| 235 | if (after_sep) { | 234 | if (syntax.isSeparator(c)) { |
| 236 | for (kw1) |kw| { | 235 | const id = self.rdata.items[last_sep..i]; |
| 237 | if (i + kw.len <= self.rdata.items.len and std.mem.eql(u8, kw, self.rdata.items[i..(i + kw.len)]) and (i + kw.len == self.rdata.items.len or syntax.isSeparator(self.rdata.items[i + kw.len]))) { | 236 | if (syntax.keyword_classifier(id)) |hl| { |
| 238 | std.mem.set(Highlight, self.hldata.items[i..(i + kw.len)], .keyword1); | 237 | std.mem.set(Highlight, self.hldata.items[last_sep..i], hl); |
| 239 | i += kw.len; | ||
| 240 | after_sep = false; | ||
| 241 | continue :main_loop; | ||
| 242 | } | ||
| 243 | } | 238 | } |
| 244 | 239 | ||
| 245 | for (kw2) |kw| { | 240 | last_sep = i + 1; |
| 246 | if (i + kw.len <= self.rdata.items.len and std.mem.eql(u8, kw, self.rdata.items[i..(i + kw.len)]) and (i + kw.len == self.rdata.items.len or syntax.isSeparator(self.rdata.items[i + kw.len]))) { | ||
| 247 | std.mem.set(Highlight, self.hldata.items[i..(i + kw.len)], .keyword2); | ||
| 248 | i += kw.len; | ||
| 249 | after_sep = false; | ||
| 250 | continue :main_loop; | ||
| 251 | } | ||
| 252 | } | ||
| 253 | } | 241 | } |
| 254 | 242 | ||
| 255 | after_sep = syntax.isSeparator(c); | ||
| 256 | i += 1; | 243 | i += 1; |
| 257 | } | 244 | } |
| 258 | 245 | ||
| 246 | if (!in_comment) { | ||
| 247 | const id = self.rdata.items[last_sep..self.rdata.items.len]; | ||
| 248 | if (syntax.keyword_classifier(id)) |hl| { | ||
| 249 | std.mem.set(Highlight, self.hldata.items[last_sep..self.rdata.items.len], hl); | ||
| 250 | } | ||
| 251 | } | ||
| 252 | |||
| 259 | if (in_comment != self.ends_with_open_comment) { | 253 | if (in_comment != self.ends_with_open_comment) { |
| 260 | self.ends_with_open_comment = in_comment; | 254 | self.ends_with_open_comment = in_comment; |
| 261 | if (self.idx + 1 < buf.rows.items.len) { | 255 | if (self.idx + 1 < buf.rows.items.len) { |