https://scott.mn/2014/02/21/semantic_linewrapping/