class Italian::Ruby::Traduttore

Constants

STAMPA_DETTAGLI_TRADUZIONE

Bandierina per stampare o meno i dettagli della traduzione, mentre questa viene eseguita.

Public Class Methods

esegui(percorso_archivio_tradotto) click to toggle source

Punto d'ingresso del traduttore. Questo metodo esegue del codice Ruby presente in un archivio. Il codice può essere stato precedentemente tradotto dal metodo `traduci` del traduttore ItalianRuby.

# File lib/italian/ruby/traduttore.rb, line 28
def self.esegui(percorso_archivio_tradotto)
  load percorso_archivio_tradotto
rescue SyntaxError => errore
  Italian::Ruby::Errori.recupera errore, percorso_archivio_tradotto
rescue StandardError => errore
  Italian::Ruby::Errori.recupera errore, percorso_archivio_tradotto
end
traduci(archivio = nil, sorgente = nil, &blocco) click to toggle source

Punto d'ingresso del traduttore. Questo metodo accetta un archivio come argomento principale, oppure un blocco di codice.

# File lib/italian/ruby/traduttore.rb, line 39
def self.traduci(archivio = nil, sorgente = nil, &blocco)
  return traduci_archivio   archivio  if archivio != nil
  return traduci_sorgente   sorgente  if sorgente != nil
  return traduci_blocco     &blocco   if block_given?
end

Private Class Methods

traduci_archivio(archivio) click to toggle source

Traduce un archivio sorgente da ItalianRuby a Ruby. Salva la versione tradotta dell'archivio originale nel percorso delle traduzioni.

# File lib/italian/ruby/traduttore.rb, line 51
def self.traduci_archivio(archivio)
  puts "Traduzione archivio: #{archivio}"             if STAMPA_DETTAGLI_TRADUZIONE

  linee_sorgente = File.readlines archivio
  linee_tradotte = linee_sorgente.map.with_index do |linea, numero_linea|
    linea_da_tradurre = Italian::Ruby::Traduttore::Linea.new linea, numero_linea, archivio
    linea_tradotta = linea_da_tradurre.traduci

    puts "\t[#{numero_linea}] <- #{linea}"            if STAMPA_DETTAGLI_TRADUZIONE
    puts "\t[#{numero_linea}] -> #{linea_tradotta}"   if STAMPA_DETTAGLI_TRADUZIONE

    linea_tradotta.chomp
  end

  puts "Traduzione terminata."                        if STAMPA_DETTAGLI_TRADUZIONE
  puts                                                if STAMPA_DETTAGLI_TRADUZIONE

  linee_tradotte              = linee_tradotte.join("\n").freeze
  archivio_tradotto           = Italian::Ruby.percorso_archivio_tradotto archivio
  cartella_archivio_tradotto  = File.dirname archivio_tradotto
  FileUtils.mkdir_p cartella_archivio_tradotto unless Dir.exist? cartella_archivio_tradotto

  File.write archivio_tradotto, linee_tradotte
  archivio_tradotto
rescue SyntaxError => errore
  Italian::Ruby::Errori.recupera errore, archivio
end
traduci_blocco(&blocco) click to toggle source

Traduce un blocco di codice da ItalianRuby a Ruby.

# File lib/italian/ruby/traduttore.rb, line 104
def self.traduci_blocco(&blocco)
  blocco.call
rescue SyntaxError => errore
  Italian::Ruby::Errori.recupera errore
rescue StandardError => errore
  Italian::Ruby::Errori.recupera errore
end
traduci_sorgente(sorgente) click to toggle source

Traduce un pezzo di sorgente da ItalianRuby a Ruby.

# File lib/italian/ruby/traduttore.rb, line 81
def self.traduci_sorgente(sorgente)
  puts "Traduzione sorgente."                         if STAMPA_DETTAGLI_TRADUZIONE

  linee_sorgente  = sorgente.split "\n"
  linee_tradotte  = linee_sorgente.map.with_index do |linea, numero_linea|
    linea_da_tradurre = Italian::Ruby::Traduttore::Linea.new linea, numero_linea, nil
    linea_tradotta = linea_da_tradurre.traduci

    puts "\t[#{numero_linea}] <- #{linea}"            if STAMPA_DETTAGLI_TRADUZIONE
    puts "\t[#{numero_linea}] -> #{linea_tradotta}"   if STAMPA_DETTAGLI_TRADUZIONE

    linea_tradotta.chomp
  end

  puts "Traduzione terminata."                        if STAMPA_DETTAGLI_TRADUZIONE
  puts                                                if STAMPA_DETTAGLI_TRADUZIONE

  sorgente_tradotto = linee_tradotte.join("\n").freeze
  sorgente_tradotto
end