Hi Liste,
ich bin gerade auf der Suche nach einer einfachen, erweiterbaren
Markup-Sprache: Konkret möchte ich gerne sowas machen:
[pubmed:18344731] oder [ref:Axon]
die dann je nach Typ in entsprechende vollständige Links aufgelöst
werden, also z.b.
J Clin
Psychopharmacol. 2008 Apr;28(2):203-9.
Nun hatte ich mir dazu RedCloth und BlueCloth angeschaut, aber die
sind nicht gerade toll dokumentiert: Man kann findet dazu ein paar
Blogeinträge, wie man das Markdown bzw. Textile aufhacken kann (z.B.
fürs Syntaxhighlighting), aber so richtig toll&sauber sieht das alles
auf den ersten Blick nicht aus: Hat jemand mit den beiden *Cloth schon
Erfahrung, wie man die erweitert und was da das Beste ist? Gibt’s noch
andere Alternativen?!
Danke&GrüßeStefan
Stefan,
Es gibt nicht so viele wikis die auf Ruby programmiert sind, und so
gibt es keine Markup Gems wie Cite fur Wikipedia. Cite ist in PHP
programmiert. Vielleicht koennen Sie ein Cite gem fur Ruby machen.
Cite: Extension:Cite - MediaWiki
Alternativ:
Ein helper:
def parse_pubmed(text)
text =~ /[pubmed:(\d+)/
vielleicht das Artikel Titel mit Net::HTTP nehmen
return “<a href="PubMed”
#{titel}>#{andere_data}"
end
Hallo Derek,
versuch mal so was:
(z.B. nach config/initializers/redcloth.rb legen und dann eine Instanz
von
RedClothCustom instantiieren.)
class RedClothCustom < RedCloth
RULES = [:refs_textile, :block_textile_table, :block_textile_lists,
:block_textile_prefix, :inline_textile_image,
:inline_textile_link,
:inline_textile_code, :inline_textile_span,
:glyphs_textile,
# + custom rules:
:inline_textile_pubmed]
def inline_textile_pubmed( text )
# search for pubmed:id
text.gsub!(/pubmed:(\d+)/) do |m|
id = $1
pubmed = Pubmed.find(id)
if nil != pubmed
rip_offtags( <<-EOF)
#{pubmed.name}
EOF
else
“!!! PUBMED not found: #{id} !!!”
end
end
def to_html
super(*RULES)
end
end
Damit kann man auch sonst noch sehr coole Sachen machen, z.B. custom
Tags
für das Einbetten von Flash- oder Quicktime Videos oder die Methode
überschreiben, die die … ausgibt und bei externen
links
als Target “_blank” hinzufügen.
Falls Du noch Fragen hast, sag Bescheid!
Schöne Grüße,
Björn
hallo stefan,
du kannst das ganze auch mit einem after_filter machen, dann musst du
Red/BlueCloth nicht anfassen.
dein filter wird nach dem template-parser ausgeführt und fügt dann die
links in das (fast) fertige html ein.
klingt vielleicht ein bischen dreckiger als die erweiterung der
template-engine, funktioniert aber 
beispiel:
class MyController < ApplicationController
after_filter :generate_links_from_custom_tags
# evtl. in config-datei umziehen
TAG_MAPPING = {
:pubmed => {
:href => 'http://www.ncbi.nlm.nih.gov/pubmed/%d',
:title => Proc.new { |article_id | "(this will be the
title for #{article_id}, once it is resolved)" },
:link_text => Proc.new { |article_id| “(this will be the
link_text for #{article_id}, once it is resolved)” }
},
:ref => {
:href => ‘…’,
:title => Proc.new { ‘’ },
:link_text => Proc.new { ‘’ }
}
}
private
def generate_links_from_custom_tags
# ? in regex is for non-greedy :-)
response.body.gsub!(/\[(.+?):(.+?)\]/) do |match|
tag, value = $1.to_sym, $2
href = TAG_MAPPING[tag][:href] % value
title = TAG_MAPPING[tag][:title].call(value)
link_text = TAG_MAPPING[tag][:link_text].call(value)
'<a href="%s" title="%s">%s</a>' % [href, title, link_text]
end
end
end
viele
grüße,phillip
Am 13.04.2008 um 15:39 schrieb Derek Kastner:
Vielen Dank an alle für die Tips! Mittlerweile hab ich auch einen
Artikel gefunden, wie man RedCloth erweitert
(http://nubyonrails.com/articles/about-this-blog-custom-textile
) - aber ich werde wohl doch bei dieser “handgemachten” Erweiterung
bleiben: Das scheint mir irgendwie das sicherste zu sein, dann kann
man auch leichter die darunter liegende Engine auswechseln.
Viele
GrüßeStefan
Am 13.04.2008 um 18:08 schrieb Phillip O.: