【发布时间】:2021-10-11 19:31:49
【问题描述】:
我尝试在嵌入在 R Shiny 应用程序中的 ace 编辑器中突出显示一组单词。我遵循了Want to highlight/change color of certain words in Ace Editor? 的建议,但是当我使用我的应用程序需要的aceEditor() 函数时,突出显示不起作用。但是,如果我将 aceEditor() 函数替换为 tags$body 命令(见下文),则突出显示有效。请在下面查看我的代码。我的问题:有没有办法使用 aceEditor() 函数突出显示?
这是一个示例,其中单词 Mark 应该以蓝色显示。
使用aceEditor(),失败:
library(shiny)
library(shinyAce)
htmlScript = "<script>\n define('ace/mode/custom', [], function(require, exports, module) {\n var oop = require(\"ace/lib/oop\");\n var TextMode = require(\"ace/mode/text\").Mode;"
htmlScript = paste0(htmlScript,"\n var Tokenizer = require(\"ace/tokenizer\").Tokenizer;\n var CustomHighlightRules = require(\"ace/mode/custom_highlight_rules\").CustomHighlightRules;")
htmlScript = paste0(htmlScript,"\n\n var Mode = function() {\n this.HighlightRules = CustomHighlightRules;\n};\n oop.inherits(Mode, TextMode);\n\n (function() {\n\n}).call(Mode.prototype);\n\n exports.Mode = Mode;\n});")
htmlScript = paste0(htmlScript,"\n define('ace/mode/custom_highlight_rules', [], function(require, exports, module) {\n var oop = require(\"ace/lib/oop\");\n var TextHighlightRules = require(\"ace/mode/text_highlight_rules\").TextHighlightRules;\n")
htmlScript = paste0(htmlScript,"\n var CustomHighlightRules = function() {\n\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": \"this\",\n \"keyword\": \"Mark|Ben|Bill\",\n \"constant.language\": \"true|false|null\",\n \"customTokenName\": \"problem\"\n}, \"text\", true);\n")
htmlScript = paste0(htmlScript,"\n this.$rules = {\n\"start\": [\n{\nregex: \"\\\\w+\\\\b\",\n token: keywordMapper\n},\n]\n};\n this.normalizeRules()\n};\n\n oop.inherits(CustomHighlightRules, TextHighlightRules);\n\n")
htmlScript = paste0(htmlScript,"\nexports.CustomHighlightRules = CustomHighlightRules;\n});\n\nvar editor = ace.edit(\"editor\");\n\n editor.session.setMode(\"ace/mode/custom\");\n</script>")
ui <- fluidPage(
tags$head(HTML("<script src=\"https://ajaxorg.github.io/ace-builds/src/ace.js\"></script>")),
aceEditor("editor", value="Mark", mode = "text"), #Mark should be highlighted with blue color
tags$body(HTML(htmlScript))
)
server <- function(input, output, session){}
shinyApp(ui, server)
使用tags$body 命令,有效:
ui <- fluidPage(
tags$head(HTML("<script src=\"https://ajaxorg.github.io/ace-builds/src/ace.js\"></script>")),
tags$body(HTML("<div id=\"editor\" style=\"height: 500px; width: 800px\"></div>")),
tags$body(HTML(htmlScript))
)
server <- function(input, output, session){}
shinyApp(ui, server)
请在编辑器中输入Mark这个词,它会显示为蓝色。
【问题讨论】:
标签: r shiny highlight ace-editor