utextvp <- function(label, x, y, ..., name="utextvp") {
    w <- stringWidth(label)
    viewport(x, y, width=w, height=unit(1, "lines"),
             ..., name=name) 
}

grid.utextvp <- function(label, x=.5, y=.5, ..., 
                         name="utext") {    
    pushViewport(utextvp(label, x, y, ...)) 
    grid.text(label, y=0, just="bottom", 
              name=paste0(name, ".label"))
    grid.segments(0, unit(-.2, "lines"),
                  1, unit(-.2, "lines"),
                  name=paste0(name, ".underline")) 
    upViewport() 
} 


grid.utextvp("underlined text", angle=20)


grid.edit("utext.label", label="le texte soulign\U00E9")


postscript("Figures/interactgrid-utextlabeledit%1d.eps",
  paper="special", 
  onefile=FALSE, width=2, height=1, horizontal=FALSE)
grid.rect(gp=gpar(col="grey"))
grid.utextvp("underlined text", angle=20)
grid.edit("utext.label", label="le texte soulign\U00E9")
dev.off()
pdf("Figures/interactgrid-utextlabeledit%1d.pdf",
  onefile=FALSE, width=2, height=1)
grid.rect(gp=gpar(col="grey"))
grid.utextvp("underlined text", angle=20)
grid.edit("utext.label", label="le texte soulign\U00E9")
dev.off()
png("Web/interactgrid-utextlabeledit%1d.png",
    width=137, height=69)
grid.rect(gp=gpar(col="grey"))
grid.utextvp("underlined text", angle=20)
grid.edit("utext.label", label="le texte soulign\U00E9")
dev.off()


