From romain at r-enthusiasts.com  Sat Apr  3 10:11:35 2010
From: romain at r-enthusiasts.com (Romain Francois)
Date: Sat, 03 Apr 2010 10:11:35 +0200
Subject: [Rd] inject html code into Rd file
In-Reply-To: <4BB68610.10901@stats.uwo.ca>
References: <4BB5C439.9090505@r-enthusiasts.com>	<4BB5CFD7.9000702@stats.uwo.ca>	<4BB5D14E.2070102@r-enthusiasts.com>	<4BB5DDB4.6070908@stats.uwo.ca>
	<4BB68610.10901@stats.uwo.ca>
Message-ID: <4BB6F837.6030202@r-enthusiasts.com>

Le 03/04/10 02:04, Duncan Murdoch a ?crit :
>
> On 02/04/2010 8:06 AM, Duncan Murdoch wrote:
>> On 02/04/2010 7:13 AM, Romain Francois wrote:
>>> Le 02/04/10 13:07, Duncan Murdoch a ?crit :
>>>> On 02/04/2010 6:17 AM, Romain Francois wrote:
>>>>> 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 ?
>>>> Yes, if you wrap it in \out{}. The example in the manual is
>>>>
>>>> \if{latex}{\out{\alpha}}\ifelse{html}{\out{&alpha;}}{alpha}
>>>>
>>>> Duncan Murdoch
>>> 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" )
>>
>> 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...
>
> 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

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

-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/OIXN : raster images and RImageJ
|- http://tr.im/OcQe : Rcpp 0.7.7
`- http://tr.im/O1wO : highlight 0.1-5



[Rd] inject html code into Rd file
Romain Francois