#!/usr/bin/env ruby Header = %Q(\ ).split("\n") Footer = %Q(\ ).split("\n") Source = '/home/kik/documents/cours/brut/' Destination = '/home/kik/documents/cours/html/' def parser_ligne(ligne) balise = (ligne[/^ *TITRE/] ? "h#{$'[0,1]}" : (ligne[/EM/] ? "em" : "p")) ligne.gsub!(/TITRE./, "") ligne.gsub!(/EM./, "") ligne.gsub!(/<>/, "»") return (ligne[/^ *\n$/] ? "" : ligne.gsub(/^/, "<#{balise}>").gsub(/\n$/, "\n") ) end def parser_fichier(flux) texte_html = [] while (ligne = flux.gets) texte_html << parser_ligne(ligne) end texte_html = Header + texte_html + Footer chemin_fichier = flux.path dossier_cours = Destination + '/' + flux.path.split('/').reverse[1] + '/' %x(mkdir -p #{dossier_cours}) unless File.exist?(dossier_cours) fichier_html = File.new(dossier_cours + File.basename(flux.path) + ".html", "w") texte_html.each { |ligne| fichier_html.puts(ligne) } fichier_html.close end Dir.new(Source).each { |dossier| unless dossier == '.' or dossier == '..' matiere = Source + '/' + dossier fichiers = Dir.new(matiere).entries.delete_if { |f| f[/\./] }.delete_if { |f| f[/\.html$/] } fichiers.each { |f| flux = File.new( matiere + '/' + f ) parser_fichier(flux) flux.close } end } puts "terminé."