Complete rewrite, support for punctuation objects