#!/usr/bin/ruby # Par oxman, pour tout contact -> tulklut@bouh.org def tulklutSentence (sentenceO) ponctuations = Regexp::escape(",.;!?{}[])(") sentence = "" sentenceO.each do |w| w = w.dup wordR = w.gsub(/[#{ponctuations}]/, '') wordR = wordR.reverse # si la taille du mot vaut 0 celui ci n'étais constitué # que de signes de ponctuations if wordR.length > 0 # si on avais une majuscule en début de mot # on la remet bien en début de mot if wordR.slice(-1,1).upcase == wordR.slice(-1,1) && wordR.slice(-1,1) != "\347" wordR[-1] = wordR.slice(-1,1).downcase wordR[0] = wordR.slice(0,1).upcase end dif = w.length - wordR.length listElement = Hash.new w.scan(/[#{ponctuations}]/) do |element| rangOfElement = w.rindex(element) rangOfElement = w.rindex(element, listElement[element]) if (listElement[element] != nil) # ajoute l'offset du dernier element X pour pouvoir # rechercher l'élément suivant X en cas de duplicata listElement[element] = rangOfElement # si un signe de ponctuation étais tout devant un mot alors : if rangOfElement == 0 wordR[0] = element+wordR[0,1] else wordR[rangOfElement-dif] = wordR[rangOfElement-dif,1]+element end # la différence de taille entre les deux mots diminue, # on ajuste cette var et donc "l'offset" dif -= 1 end else wordR = w end sentence += wordR + " " end return sentence end if (ARGV.length > 0) puts tulklutSentence(ARGV) else STDIN.each_line do |line| puts tulklutSentence(line.strip!.split(" ")) end end