The input syntax is in place in ufl, and the basic representation types are also mostly in place. What's left in ufl is implementing is_cellwise_constant where necessary and writing the Grad(f) to JacobianInverse(f.domain())*LocalGrad(f) transformation algorutm. Here's the issue
https://bitbucket.org/fenics-project/ufl/issue/30/defining-domains-with-high-order

Martin