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) - Permalink
- Trackback
- Comentários (6)
- Ao som de: Rise Against – Whereabouts Unknown
Textos escritos por
Comentários #
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?
Sério? Eu acho que tem o seu lugar. Assim como Markdown, HTML... tudo depende de quem vai escrever o texto.
mas se os comentários no ruby já possuem um padrão, para quê misturar outra linguagem dentro do arquivo rb?
abs.
Acho que você não entendeu. Textile não tem nada a ver com Ruby.
Galera batendo a nave...
pensei em outra coisa, foi mal!
abs.
Deixe um comentário