diff --git a/src/dom/character_data.zig b/src/dom/character_data.zig index 37c3f50b..1346a2d4 100644 --- a/src/dom/character_data.zig +++ b/src/dom/character_data.zig @@ -70,6 +70,10 @@ pub const CharacterData = struct { pub fn _replaceData(self: *parser.CharacterData, offset: u32, count: u32, data: []const u8) void { return parser.characterDataReplaceData(self, offset, count, data); } + + pub fn _substringData(self: *parser.CharacterData, offset: u32, count: u32) []const u8 { + return parser.characterDataSubstringData(self, offset, count); + } }; pub const Types = generate.Tuple(.{ @@ -148,4 +152,10 @@ pub fn testExecFn( .{ .src = "cdata.data == 'OreplacedK'", .ex = "true" }, }; try checkCases(js_env, &replace_data); + + var substring_data = [_]Case{ + .{ .src = "cdata.substringData('OK'.length-1, 'replaced'.length) == 'replaced'", .ex = "true" }, + .{ .src = "cdata.substringData('OK'.length-1, 0) == ''", .ex = "true" }, + }; + try checkCases(js_env, &substring_data); } diff --git a/src/netsurf.zig b/src/netsurf.zig index f12e3d78..866346b2 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -494,6 +494,12 @@ pub fn characterDataReplaceData(cdata: *CharacterData, offset: u32, count: u32, _ = characterDataVtable(cdata).dom_characterdata_replace_data.?(cdata, offset, count, s); } +pub fn characterDataSubstringData(cdata: *CharacterData, offset: u32, count: u32) []const u8 { + var s: ?*String = undefined; + _ = characterDataVtable(cdata).dom_characterdata_substring_data.?(cdata, offset, count, &s); + return stringToData(s.?); +} + // Text pub const Text = c.dom_text;