首页 文章

闪亮的html输出对象,带有html代码,便于复制和粘贴

提问于
浏览
0

我想创建一个Shiny R应用程序,它可以使用用户输入无格式的Stata代码,添加html标签,并返回整个代码块,以便轻松复制并粘贴到html发布场所,如博客或网页 .

我已经有了可以处理格式A Stata HTML syntax highlighter in R的R代码 . 大多数Shiny实现似乎都很容易 . 我遇到的主要挑战是创建一个html文本框或其他对象,可以轻松地从Shiny的server.R中获取一个被动元素并将其返回给用户而不格式化html标签 .

例:

Stata代码通过文本框输入

clear
set obs 4000
gen id = _n
gen eta1 = rnormal()
gen eta2 = rnormal()

XX Shiny提交按钮XX

在另一个文本框中返回

<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000
<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>
<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>()
<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>()

总的来说,我认为这对于一个可能非常简单的答案来说通常是一个很长的问题谢谢你的考虑 .

1 回答

  • 2

    renderText() 不解析HTML标记 . 例如 . 如果你这样做:

    output$code <- renderText({
    
      paste0(
        '<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000',
        '<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>',
        '<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>',
        '<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>'  
      )
    
    })
    

    这是你的 ui.R

    library(shiny)
    
    shinyUI(pageWithSidebar(
    
      headerPanel("Code"),
    
      sidebarPanel(
    
      ),
    
      mainPanel(
        verbatimTextOutput("code")
      )
    
    ))
    

    内容仅仅是文本 .


    但是,因为你没有确定如何渲染你的输出 . 如果您在显示原始文本而不是解析HTML时遇到问题,您可以随时将 < 替换为 &lt;>&gt; ,如下所示:

    html <- '<span>text</span>'
    x <- gsub('<', '&lt;', html)
    gsub('>', '&gt;', x)
    

    这将生成: &lt;span&gt;text&lt;/span&gt; 并且不应在浏览器中显示为已解析的HTML .

相关问题