如何在语法突出显示的降价代码中标记搜索短语?
How to mark search phrase in syntax highlighted markdown code?
在我的 rails 博客应用程序中,我可以创作 post 正文降价(我使用 redcarpet 进行降价解析,使用 CodeRay 进行语法高亮显示)。
我有一个搜索页面,其中 returns post 包含搜索查询字符串。
我使用 rails helper 来突出查询:
@post.body = highlight(@post.body, @query_phrase, highlighter: '<span class=\'highlighted\'></span>'))
然后我使用 css 将突出显示 class 的背景设置为黄色。
post 正文按照在文本区域中输入的方式存储(作为 markdown,未转换),并且在呈现只读视图(如 posts#show 和搜索结果)时处理 markdown。
问题是当我搜索单词 'ruby' 时,输入的 markdown 使用带语言名称的围栏代码块进行语法高亮,搜索结果变得混乱。
这是正文降价:
ruby
```ruby
puts "Hello, world"
```
这是搜索结果截图:
这是可以理解的,因为在围栏代码块被 span 和 class 包裹后匹配 'ruby' 用于突出显示,但降价现在看到
```<span class='highlighted'>ruby</span>
并按原样输出跨度。
代码中也会出现类似的问题,代码中的匹配项也会被包装并与搜索结果中的跨度一起输出。
如何避免这种情况,并让搜索突出显示输出降价中的实际短语,最好不必保留降价的 html 输出?
应该先转成HTML,再转成highlight
。
在我的 rails 博客应用程序中,我可以创作 post 正文降价(我使用 redcarpet 进行降价解析,使用 CodeRay 进行语法高亮显示)。
我有一个搜索页面,其中 returns post 包含搜索查询字符串。
我使用 rails helper 来突出查询:
@post.body = highlight(@post.body, @query_phrase, highlighter: '<span class=\'highlighted\'></span>'))
然后我使用 css 将突出显示 class 的背景设置为黄色。
post 正文按照在文本区域中输入的方式存储(作为 markdown,未转换),并且在呈现只读视图(如 posts#show 和搜索结果)时处理 markdown。
问题是当我搜索单词 'ruby' 时,输入的 markdown 使用带语言名称的围栏代码块进行语法高亮,搜索结果变得混乱。
这是正文降价:
ruby
```ruby
puts "Hello, world"
```
这是搜索结果截图:
这是可以理解的,因为在围栏代码块被 span 和 class 包裹后匹配 'ruby' 用于突出显示,但降价现在看到
```<span class='highlighted'>ruby</span>
并按原样输出跨度。
代码中也会出现类似的问题,代码中的匹配项也会被包装并与搜索结果中的跨度一起输出。
如何避免这种情况,并让搜索突出显示输出降价中的实际短语,最好不必保留降价的 html 输出?
应该先转成HTML,再转成highlight
。