XanMarkup

Very simple tag parser

Install & Example

Add to your Gemfile

gem "xan_markup"

Create helper (call it like you want)

module MarkupHelper
  include XanMarkup::Helper

  def markup_favorite_movie
    "Matrix"
  end
end

In views use:

<%= markupize("My favorite movie is {{ favorite_movie }}") %>

Atributes

You can pass attributes to tags

{{ favorite_movie genre="sf-fi" }}

def markup_favorite_movie(hash_of_args)
  ....
end

Block

{{block}}This is my favorite movie{{/block}}

def markup_block(content: "")
  content.upcase
end

Nesting is supported only for unique tags.

You can:

{{block}} this {{normal_tag}} {{/block}}
{{block}} and {{block2}} nesting {{/block2}} {{/block}}

You can't (currently):

{{block}}{{block}}{{/block}}{{/block}}

Customization

You can write own class that will be called when tag is found. For example using instance variables not helper methods:

class MyCustomCaller
  def initialize(context)
    @context = context
  end

  def call
    ->(tag) do
        @context.instance_variable_get("@tag.name") || "missing tag: #{tag.name}"
      end
    end
  end
end

def markupize(content)
  Markupizer.new(content).markupize &MyCustomCaller.new(self).call
end

You can change also syntax (See MarkupSyntax and BlockMarkupSyntax in markupizer.rb)

def markupize(content)
  Markupizer.new(content, /\[ ?(.*?) ?\]/).markupize &MyCustomCaller.new(self).call
end

@favorite_movie = "Matrix"
markupize("My favorite movie is [favorite_movie]") #=> My favorite movie is Matrix

Copyright (c) 2009-2018 Grzegorz Derebecki, released under the MIT license