let auto_numbering_of_string (s: string) : int -> int -> string =
match s with
|"a1i" ->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> lower_case_latin_letter n
|1 -> string_of_int (n+1)
|2 -> lower_case_roman_numeral n
|3 -> upper_case_latin_letter n
|_ -> upper_case_roman_numeral n
in auto_numbering
|"ai1" ->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> lower_case_latin_letter n
|1 -> lower_case_roman_numeral n
|2 -> string_of_int (n+1)
|3 -> upper_case_latin_letter n
|_ -> upper_case_roman_numeral n
in auto_numbering
|"1ai" ->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> string_of_int (n+1)
|1 -> lower_case_latin_letter n
|2 -> lower_case_roman_numeral n
|3 -> upper_case_latin_letter n
|_ -> upper_case_roman_numeral n
in auto_numbering
|"1ia"->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> string_of_int (n+1)
|1 -> lower_case_roman_numeral n
|2 -> lower_case_latin_letter n
|3 -> upper_case_roman_numeral n
|_ -> upper_case_latin_letter n
in auto_numbering
|"ia1" ->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> lower_case_roman_numeral n
|1 -> lower_case_latin_letter n
|2 -> string_of_int (n+1)
|3 -> upper_case_roman_numeral n
|_ -> upper_case_latin_letter n
in auto_numbering
|"i1a" ->
let auto_numbering (lvl : int) (n:int) =
match lvl mod 5 with
|0 -> lower_case_roman_numeral n
|1 -> string_of_int (n+1)
|2 -> lower_case_latin_letter n
|3 -> upper_case_roman_numeral n
|_ -> upper_case_latin_letter n
in auto_numbering
|_ -> raise (Invalid_argument s)