V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mathzhaoliang
V2EX  ›  问与答

求助一个 Homeland 框架的问题

  •  
  •   mathzhaoliang · 2018-12-15 10:45:50 +08:00 · 1608 次点击
    这是一个创建于 2155 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来这个问题应该在 ruby-china 上提的,但是那里的人对新手很不友好,只有请 v2 的朋友们帮忙啦。

    我的问题是这样的,我想用 homeland 这个框架建一个论坛: https://github.com/rails-engine/homeland

    这个框架有个问题就是它的 markdown 解析是自己实现的,而我想在论坛里使用 mathjax 数学公式,这样一来会和 markdown 语法有冲突,于是我决定调用外部软件,使用与 latex 兼容的比较好的 pandoc 来将 md 转换为 html 格式。

    它的文档里说,如果你要实现自己的解释器的话,需要这样做:

    在 Homeland::Markup 命名空间下面实现一个新的自定义类,并继承 Homeland::Markup::Base,实现 render 函数,例如:

    新建文件 lib/homeland/markup/ruby_china.rb

    module Homeland
      module Markup
        class RubyChina < Base
          class << self
            def render(raw)
              # 在这里编写你的详细转换实现
              YouCustomRender.render(raw)
            end
          end
        end
      end
    end
    

    我的问题是这样的,我理解的是这个 YouCustomRender 指的就是 RubyChina 这个类,raw 应该是个 md 格式的字符串,但是这个函数没有返回值,它是怎么把转换后的字符串传出去的呢?

    第二个问题是,我不懂 ruby,我应该怎样调用 pandoc 命令来渲染 raw 这个输入呢?

    5 条回复    2019-01-15 21:46:47 +08:00
    oott123
        1
    oott123  
       2018-12-15 12:22:56 +08:00 via Android
    ruby 最后一条表达式的值就是返回值

    伸手问题在 v2 也不受欢迎
    mathzhaoliang
        2
    mathzhaoliang  
    OP
       2018-12-15 12:26:33 +08:00
    @oott123 谢谢,那么他写的 `YouCustomRender` 是笔误吗,这里应该是 `RubyChina` 吧?
    我在网上查过很多次这个框架,除了他们论坛上的几个帖子,有用的信息很少。我又不是搞 rails 框架的,很难看懂。
    flyingkid
        3
    flyingkid  
       2018-12-15 14:16:06 +08:00   ❤️ 1
    YouCustomRender 应该就是你调用的渲染器。例如你用 pandoc

    ```
    require 'pandoc-ruby'
    def render(raw)
    # 在这里编写你的详细转换实现
    PandocRuby.convert(raw, :from => :markdown, :to => :html)
    end
    ```
    msg7086
        4
    msg7086  
       2018-12-16 05:46:42 +08:00   ❤️ 2
    看到有人说 Ruby-China 对新手不友好我就笑了。说实话 v2 上的人普遍比 Ruby-China 的人更不友好。从正常讨论到互杠到问候父母家人只要几层楼的功夫。v2 上友好的人到后来都不敢多说话了。

    YouCustomRender 是笔误,应该是 YourCustomRender,就是「你自己的渲染器」,你可以在这里调用任何能返回 HTML 的程序。比如像楼上说的调用 PandocRuby.convert,又比如说如果你想直接调用可执行文件,也可以用

    html, s = Open3.capture2('pandoc', '-xxxxx', '-yyyyy', stdin_data: raw)
    html

    之类的,看你的具体需求了。要定制程序的话,还是得学 Ruby 的。
    neocanable
        5
    neocanable  
       2019-01-15 21:46:47 +08:00
    联系我,我给你实现以下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:25 · PVG 06:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.