Skip to content

inject html code into Rd file

7 messages · Duncan Murdoch, Romain Francois, Yihui Xie

#
Hello,

I'm trying to inject html code into an Rd file. For example :

\name{test}
\alias{test}
\title{test}
\description{
\if{html}{
\Sexpr[stage=render,results=text,echo=FALSE]{
	"<b>hello</b>"
}
}
}

when this file is rendered, instead of having "hello" in bold, I get 
<b>hello</b>, i.e. characters < and > are replaced with html entities : 
&lt; and &gt;

Is there a way to turn this off ?

Romain
#
On 02/04/2010 6:17 AM, Romain Francois wrote:
Yes, if you wrap it in \out{}.  The example in the manual is

\if{latex}{\out{\alpha}}\ifelse{html}{\out{&alpha;}}{alpha}

Duncan Murdoch
#
Le 02/04/10 13:07, Duncan Murdoch a ?crit :
yes, I saw that in WRE, I should have been more specific.


what if instead of a trivial string like "<b>hello</b>" the text is to 
be computed by some function. For example:

print( xtable( iris), type = "html" )

Romain
#
On 02/04/2010 7:13 AM, Romain Francois wrote:
I think this should do it:

\Sexpr[stage=render,results=rd,echo=FALSE]{
paste("\\out{", "<b>hello</b>, "}", sep="")}

but this stuff hasn't been tested much, so there might be problems...

Duncan Murdoch
#
On 02/04/2010 8:06 AM, Duncan Murdoch wrote:
One problem is that the backslashes need to be escaped twice, so you'd want

  \Sexpr[stage=render,results=rd,echo=FALSE]{
  paste("\\\\out{", "<b>hello</b>, "}", sep="")}

and you'd probably want it wrapped in \if or \ifelse so that it doesn't 
show up in text or latex output:

  \Sexpr[stage=render,results=rd, 
echo=FALSE]{"\\\\if{html}{\\\\out{<b>hello</b>}}"}

Duncan Murdoch
#
Le 03/04/10 02:04, Duncan Murdoch a ?crit :
Thanks.
This gives one way to include images in a Rd file with data uri, here is 
a proof of concept (that depends on openssl to do the base 64 encoding):

img <- function(){
	tf <- tempfile()
	tf.out <- tempfile()
	png( tf, width = 500, height = 500)
	plot( 1:100, rnorm(100), pch = 21, bg = "red", cex =2 )
	dev.off()
	system( sprintf( 'openssl base64 -in "%s" -out "%s" ', tf, tf.out ) )
	sprintf( '\\out{<img src="data:image/png;base64,%s" />}',
		paste( readLines( tf.out), collapse = "\n" ) )
}

and the Rd file:

\name{test}
\alias{test}
\title{test}
\description{
\if{html}{
\Sexpr[stage=render,results=rd,echo=FALSE]{
	source( "test.R" )
	img()
}
}
}



It might be interesting to have something like results=asis or something.

Romain
#
Sounds like a good idea. The RCurl package can also do the base64
encoding (depends on libcurl), e.g.

library(RCurl)
img <- function() {
    tf <- tempfile()
    tf.out <- tempfile()
    png(tf, width = 500, height = 500)
    plot(1:100, rnorm(100), pch = 21, bg = "red", cex = 2)
    dev.off()
    img <- readBin(tf, "raw", file.info(tf)[1, "size"])
    b64 <- base64Encode(img, "character")
    sprintf("<img src=\"data:image/png;base64,%s\" />", b64)
}
writeLines(img(), "test.html")

I saw your blog post today about your base64 package. My concern is IE
(<=7) does not support data uri...

Regards,
Yihui
--
Yihui Xie <xieyihui at gmail.com>
Phone: 515-294-6609 Web: http://yihui.name
Department of Statistics, Iowa State University
3211 Snedecor Hall, Ames, IA



On Sat, Apr 3, 2010 at 3:11 AM, Romain Francois
<romain at r-enthusiasts.com> wrote: