rewriting the highlighter to allow more complex/combined ranges