replaced Word.punctuation() with a revised Word.text() function that uses partition to separate the word from non-letter characters that come before or after it.  The three pieces are separated so that the word can be wrapped in the span.word and then stitched back together in the view