diff --git a/data/presentations_3_3_3.txt b/data/presentations_3_3_3.txt
new file mode 100644
index 0000000..6d24cf9
--- /dev/null
+++ b/data/presentations_3_3_3.txt
@@ -0,0 +1,117 @@
+// 14 14 14 0 1 2 6
+G_14_14_14_0 := Group;
+G_14_14_14_1 := Group;
+G_14_14_14_2 := Group;
+G_14_14_14_6 := Group;
+// 14 14 16 0 1 4 5
+G_14_14_16_0 := Group;
+G_14_14_16_1 := Group;
+G_14_14_16_4 := Group;
+G_14_14_16_5 := Group;
+// 14 14 18 0 4
+G_14_14_18_0 := Group;
+G_14_14_18_4 := Group;
+// 14 14 24 0 1 4 5
+G_14_14_24_0 := Group;
+G_14_14_24_1 := Group;
+G_14_14_24_4 := Group;
+G_14_14_24_5 := Group;
+// 14 14 26 0 1 3 4 5 7
+G_14_14_26_0 := Group;
+G_14_14_26_1 := Group;
+G_14_14_26_3 := Group;
+G_14_14_26_4 := Group;
+G_14_14_26_5 := Group;
+G_14_14_26_7 := Group;
+// 14 16 16 0 1
+G_14_16_16_0 := Group;
+G_14_16_16_1 := Group;
+// 14 16 18 0
+G_14_16_18_0 := Group;
+// 14 16 24 0 1
+G_14_16_24_0 := Group;
+G_14_16_24_1 := Group;
+// 14 16 26 0 1 3 7
+G_14_16_26_0 := Group;
+G_14_16_26_1 := Group;
+G_14_16_26_3 := Group;
+G_14_16_26_7 := Group;
+// 14 18 18 0
+G_14_18_18_0 := Group;
+// 14 18 24 0
+G_14_18_24_0 := Group;
+// 14 18 26 0 3
+G_14_18_26_0 := Group;
+G_14_18_26_3 := Group;
+// 14 24 24 0 1
+G_14_24_24_0 := Group;
+G_14_24_24_1 := Group;
+// 14 24 26 0 1 3 7
+G_14_24_26_0 := Group;
+G_14_24_26_1 := Group;
+G_14_24_26_3 := Group;
+G_14_24_26_7 := Group;
+// 14 26 26 0 1 3 4 5 15
+G_14_26_26_0 := Group;
+G_14_26_26_1 := Group;
+G_14_26_26_3 := Group;
+G_14_26_26_4 := Group;
+G_14_26_26_5 := Group;
+G_14_26_26_15 := Group;
+// 16 16 16 0 1
+G_16_16_16_0 := Group;
+G_16_16_16_1 := Group;
+// 16 16 18 0
+G_16_16_18_0 := Group;
+// 16 16 24 0 1
+G_16_16_24_0 := Group;
+G_16_16_24_1 := Group;
+// 16 16 26 0 1
+G_16_16_26_0 := Group;
+G_16_16_26_1 := Group;
+// 16 18 18 0
+G_16_18_18_0 := Group;
+// 16 18 24 0
+G_16_18_24_0 := Group;
+// 16 18 26 0
+G_16_18_26_0 := Group;
+// 16 24 24 0 1
+G_16_24_24_0 := Group;
+G_16_24_24_1 := Group;
+// 16 24 26 0 1
+G_16_24_26_0 := Group;
+G_16_24_26_1 := Group;
+// 16 26 26 0 1 3 5
+G_16_26_26_0 := Group;
+G_16_26_26_1 := Group;
+G_16_26_26_3 := Group;
+G_16_26_26_5 := Group;
+// 18 18 18 0
+G_18_18_18_0 := Group;
+// 18 18 24 0
+G_18_18_24_0 := Group;
+// 18 18 26 0
+G_18_18_26_0 := Group;
+// 18 24 24 0
+G_18_24_24_0 := Group;
+// 18 24 26 0
+G_18_24_26_0 := Group;
+// 18 26 26 0 1
+G_18_26_26_0 := Group;
+G_18_26_26_1 := Group;
+// 24 24 24 0 1
+G_24_24_24_0 := Group;
+G_24_24_24_1 := Group;
+// 24 24 26 0 1
+G_24_24_26_0 := Group;
+G_24_24_26_1 := Group;
+// 24 26 26 0 1 3 5
+G_24_26_26_0 := Group;
+G_24_26_26_1 := Group;
+G_24_26_26_3 := Group;
+G_24_26_26_5 := Group;
+// 26 26 26 0 1 5 21
+G_26_26_26_0 := Group;
+G_26_26_26_1 := Group;
+G_26_26_26_5 := Group;
+G_26_26_26_21 := Group;
diff --git a/src/groupparse.jl b/src/groupparse.jl
index 1790678..4f39a46 100644
--- a/src/groupparse.jl
+++ b/src/groupparse.jl
@@ -29,20 +29,19 @@ function parse_grouppresentations(filename::AbstractString)
groups = Dict{String, FPGroup}()
names_idcs = findall(x->startswith(x, "//"), groups_strs)
- push!(names_idcs, names_idcs[end]+1)
+ push!(names_idcs, length(groups_strs)+1)
for (first_idx, next_idx) in zip(names_idcs, Iterators.rest(names_idcs, 2))
- m = match(r"//\s?((\d{2}\s){2}\d\d).*", groups_strs[first_idx])
-
- name = replace(m.captures[1], " "=>"_")
+ m = match(r"//\s?((\d{2}\s?){3}).*", groups_strs[first_idx])
+ name = replace(strip(m.captures[1]), " "=>"_")
for idx in first_idx+1:next_idx-1
- m = match(r"(.*)\s:=\sGroup<(.*)\|(.*)>", groups_strs[idx])
+ m = match(r"G((_\d\d){3})?_(\d+)\s:=\sGroup<(.*)\|(.*)>", groups_strs[idx])
if isnothing(m)
- @warn "Can't parse presentation at line $idx:\n $(str[idx])"
+ @warn "Can't parse presentation at line $idx:\n $(groups_strs[idx])"
else
- group_name = "$(name)_$(m.captures[1])"
- G = parse_magma_grouppresentation(m.captures[2], m.captures[3])
+ group_name = "$(name)_$(m.captures[3])"
+ G = parse_magma_grouppresentation(m.captures[4], m.captures[5])
groups[group_name] = G
end
end