Se você usa Textile no Ruby, já deve ter usado o RedCloth. A versão 4 foi totalmente reescrita como uma extensão nativa, e por isso é muito mais rápida.

Embora o Textile tenha muitas marcações, você pode querer adicionar as suas próprias. Existem dois tipos de marcações: bloco e inline e você verá como adicionar ambas.

Para adicionar novas marcações de bloco, você só precisa definir um novo método no módulo RedCloth::Formatters::HTML. Este método irá receber um Hash com algumas opções.

module RedCloth
  module Formatters
    module HTML
      def figure(options)
        <<-HTML
          <p class="figure">
            <img src="#{options[:text]}" alt="#{options[:class]}" />
            <span>#{options[:class]}</span>
          </p>
        HTML
      end
    end
  end
end

E para ver o novo formatador em ação:

RedCloth.new("figure(Some figure). images/img.png").to_html

Já as marcações inlines são um pouco mais complicadas, se você não conhece expressões regulares. Ao contrário das marcações de bloco, você precisará criar um método no módulo RedCloth que altera o texto que é passado ao método.

module RedCloth
  URL_RE = /
    <
      ((?:https?|ftp):\/\/.*?)
    >
  /xm
 
  def link(text)
    text.gsub!(LINK_RE) do |m|
      %(<a href="#{$1}">#{$1}</a>)
    end
  end
end

Agora vem a parte capsiosa: o retorno do método é ignorado, por isso, você precisa usar o método String#gsub!. Além disso, o RedCloth precisa saber que você quer utilizar este método e isso deve ser feito na chamada ao método to_html.

RedCloth.new("<http://nandovieira.com.br>").to_html(:textile, :link)

Se você adicionar muitas marcações inline personalizadas, uma solução pode ser criar um novo formatador, ou apenas um wrapper, como no exemplo abaixo.

module Textile
  FORMATTERS = [:textile, :link]
 
  def self.to_html(text)
    RedCloth.new(text).to_html(*FORMATTERS)
  end
end

De quebra, você deixou o código mais objetivo e fácil de entender.

Textile.to_html(some_textile_text)

Comentários #

#1 Adler Medrado disse:
05 Dez 10, 04:11PM

Isso me parece tão CGI. Voltei alguns anos atrás ao ver isso. Sério. Criar um módulo que gera codigo HTML? Pra que?

#2 Nando Vieira disse:
05 Dez 10, 07:45PM

Sério? Eu acho que tem o seu lugar. Assim como Markdown, HTML... tudo depende de quem vai escrever o texto.

#3 Luciano Sousa disse:
15 Dez 10, 07:08PM

mas se os comentários no ruby já possuem um padrão, para quê misturar outra linguagem dentro do arquivo rb?

abs.

#4 Nando Vieira disse:
15 Dez 10, 11:04PM

Acho que você não entendeu. Textile não tem nada a ver com Ruby.

#5 morellon disse:
16 Dez 10, 08:02PM

Galera batendo a nave...

#6 Luciano Sousa disse:
17 Dez 10, 01:17PM

pensei em outra coisa, foi mal!
abs.

Deixe um comentário





Não é aceito código HTML: adicione-o no pastie.org ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.

JavaScript Avançado

O JavaScript é a única linguagem que muitos acreditam saber sem nunca terem parado para realmente aprendê-la. Neste workshop rápido você entenderá de verdade todos os conceitos avançados do JavaScript em 4 horas puramente práticas.

Saiba mais Fechar

Conheça também o HOWTO