update: add load
This commit is contained in:
parent
510dec9113
commit
bbab647430
3 changed files with 88 additions and 11 deletions
|
|
@ -18,6 +18,11 @@ pub const NodeType = enum {
|
||||||
url,
|
url,
|
||||||
cycle,
|
cycle,
|
||||||
firstof,
|
firstof,
|
||||||
|
load,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const LoadNode = struct {
|
||||||
|
libraries: []const []const u8,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const AutoescapeNode = struct {
|
pub const AutoescapeNode = struct {
|
||||||
|
|
@ -141,6 +146,7 @@ pub const Node = struct {
|
||||||
url: ?UrlNode = null,
|
url: ?UrlNode = null,
|
||||||
cycle: ?CycleNode = null,
|
cycle: ?CycleNode = null,
|
||||||
firstof: ?FirstOfNode = null,
|
firstof: ?FirstOfNode = null,
|
||||||
|
load: ?LoadNode = null,
|
||||||
|
|
||||||
pub fn deinit(self: Node, allocator: std.mem.Allocator) void {
|
pub fn deinit(self: Node, allocator: std.mem.Allocator) void {
|
||||||
switch (self.type) {
|
switch (self.type) {
|
||||||
|
|
@ -225,6 +231,10 @@ pub const Node = struct {
|
||||||
for (fo.values) |v| allocator.free(v);
|
for (fo.values) |v| allocator.free(v);
|
||||||
allocator.free(fo.values);
|
allocator.free(fo.values);
|
||||||
},
|
},
|
||||||
|
.load => if (self.load) |l| {
|
||||||
|
for (l.libraries) |lib| allocator.free(lib);
|
||||||
|
allocator.free(l.libraries);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -1396,7 +1406,6 @@ pub const Parser = struct {
|
||||||
|
|
||||||
const value = std.mem.trim(u8, args[start..i], " \t\r\n\"'");
|
const value = std.mem.trim(u8, args[start..i], " \t\r\n\"'");
|
||||||
try values.append(allocator, try allocator.dupe(u8, value));
|
try values.append(allocator, try allocator.dupe(u8, value));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
allocator.free(node.tag.?.name);
|
allocator.free(node.tag.?.name);
|
||||||
|
|
@ -1414,6 +1423,40 @@ pub const Parser = struct {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (std.mem.eql(u8, tag_name, "load")) {
|
||||||
|
const args = node.tag.?.args;
|
||||||
|
|
||||||
|
var libraries = std.ArrayList([]const u8){};
|
||||||
|
defer libraries.deinit(allocator);
|
||||||
|
|
||||||
|
var i: usize = 0;
|
||||||
|
while (i < args.len) {
|
||||||
|
while (i < args.len and std.ascii.isWhitespace(args[i])) : (i += 1) {}
|
||||||
|
|
||||||
|
if (i >= args.len) break;
|
||||||
|
|
||||||
|
const start = i;
|
||||||
|
while (i < args.len and !std.ascii.isWhitespace(args[i])) : (i += 1) {}
|
||||||
|
|
||||||
|
const lib_name = args[start..i];
|
||||||
|
try libraries.append(allocator, try allocator.dupe(u8, lib_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
allocator.free(node.tag.?.name);
|
||||||
|
allocator.free(node.tag.?.args);
|
||||||
|
|
||||||
|
std.debug.print("3.0 - na real sou um load\n", .{});
|
||||||
|
std.debug.print("===================================\n", .{});
|
||||||
|
|
||||||
|
try list.append(allocator, Node{
|
||||||
|
.type = .load,
|
||||||
|
.load = .{
|
||||||
|
.libraries = try libraries.toOwnedSlice(allocator),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Para tags normais
|
// Para tags normais
|
||||||
std.debug.print("===================================\n", .{});
|
std.debug.print("===================================\n", .{});
|
||||||
try list.append(allocator, node);
|
try list.append(allocator, node);
|
||||||
|
|
|
||||||
|
|
@ -609,3 +609,37 @@ test "parse firstof com fallback" {
|
||||||
try testing.expectEqualStrings("var2", fo.values[1]);
|
try testing.expectEqualStrings("var2", fo.values[1]);
|
||||||
try testing.expectEqualStrings("Nenhum valor", fo.values[2]);
|
try testing.expectEqualStrings("Nenhum valor", fo.values[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "parse load simples" {
|
||||||
|
const allocator = testing.allocator;
|
||||||
|
const template = "{% load i18n humanize %}";
|
||||||
|
const nodes = try parser.parse(allocator, template);
|
||||||
|
defer {
|
||||||
|
for (nodes) |node| node.deinit(allocator);
|
||||||
|
allocator.free(nodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
try testing.expectEqual(@as(usize, 1), nodes.len);
|
||||||
|
try testing.expect(nodes[0].type == .load);
|
||||||
|
const l = nodes[0].load.?;
|
||||||
|
try testing.expectEqual(@as(usize, 2), l.libraries.len);
|
||||||
|
try testing.expectEqualStrings("i18n", l.libraries[0]);
|
||||||
|
try testing.expectEqualStrings("humanize", l.libraries[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "parse load com múltiplas" {
|
||||||
|
const allocator = testing.allocator;
|
||||||
|
const template = "{% load admin_urls static %}";
|
||||||
|
const nodes = try parser.parse(allocator, template);
|
||||||
|
defer {
|
||||||
|
for (nodes) |node| node.deinit(allocator);
|
||||||
|
allocator.free(nodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
try testing.expectEqual(@as(usize, 1), nodes.len);
|
||||||
|
try testing.expect(nodes[0].type == .load);
|
||||||
|
const l = nodes[0].load.?;
|
||||||
|
try testing.expectEqual(@as(usize, 2), l.libraries.len);
|
||||||
|
try testing.expectEqualStrings("admin_urls", l.libraries[0]);
|
||||||
|
try testing.expectEqualStrings("static", l.libraries[1]);
|
||||||
|
}
|
||||||
|
|
|
||||||
20
todo.md
20
todo.md
|
|
@ -1,19 +1,19 @@
|
||||||
# Tags
|
# Tags
|
||||||
|
|
||||||
- [ ] autoescape
|
- [x] autoescape
|
||||||
- [x] block
|
- [x] block
|
||||||
- [x] comment
|
- [x] comment
|
||||||
- [ ] csrf_token
|
- [ ] csrf_token
|
||||||
- [ ] cycle
|
- [x] cycle
|
||||||
- [ ] debug
|
- [ ] debug
|
||||||
- [x] extends
|
- [x] extends
|
||||||
- [x] filter
|
- [x] filter
|
||||||
- [ ] firstof
|
- [x] firstof
|
||||||
- [x] for
|
- [x] for
|
||||||
- [x] if
|
- [x] if
|
||||||
- [x] ifchanged
|
- [x] ifchanged
|
||||||
- [x] include
|
- [x] include
|
||||||
- [ ] load
|
- [x] load
|
||||||
- [ ] lorem
|
- [ ] lorem
|
||||||
- [x] now
|
- [x] now
|
||||||
- [ ] partial
|
- [ ] partial
|
||||||
|
|
@ -21,10 +21,10 @@
|
||||||
- [ ] querystring
|
- [ ] querystring
|
||||||
- [ ] regroup
|
- [ ] regroup
|
||||||
- [ ] resetcycle
|
- [ ] resetcycle
|
||||||
- [ ] spaceless
|
- [x] spaceless
|
||||||
- [ ] templatetag
|
- [ ] templatetag
|
||||||
- [ ] url
|
- [x] url
|
||||||
- [ ] verbatim
|
- [x] verbatim
|
||||||
- [ ] widthratio
|
- [ ] widthratio
|
||||||
- [x] with
|
- [x] with
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ ___
|
||||||
- [x] spaceless — remove espaços em branco
|
- [x] spaceless — remove espaços em branco
|
||||||
- [x] verbatim — como raw
|
- [x] verbatim — como raw
|
||||||
- [x] url — reverse de URLs (quando tiver routing)
|
- [x] url — reverse de URLs (quando tiver routing)
|
||||||
- [ ] cycle — alternar valores em loop
|
- [x] cycle — alternar valores em loop
|
||||||
- [ ] firstof — fallback de variáveis
|
- [x] firstof — fallback de variáveis
|
||||||
- [ ] load — para custom tags/filters (futuro)
|
- [x] load — para custom tags/filters (futuro)
|
||||||
- [ ] csrf_token — quando tiver web
|
- [ ] csrf_token — quando tiver web
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue