using a map to store optional parameters
move index from an index param to a map attribute
move grammar from being a parameter to a map attribute
add :all param
calculating absolute-offset correctly