split the parsing and rendering functions out from Variable