Class: Italian::Ruby::Traduttore

Inherits:
Object
  • Object
show all
Defined in:
lib/italian/ruby/traduttore.rb,
lib/italian/ruby/traduttore/linea.rb,
lib/italian/ruby/traduttore/pezzo.rb,
lib/italian/ruby/traduttore/stringa.rb

Defined Under Namespace

Classes: Linea, Pezzo, Stringa

Constant Summary collapse

STAMPA_DETTAGLI_TRADUZIONE =

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

false

Class Method Summary collapse

Class Method Details

.esegui(percorso_archivio_tradotto) ⇒ Object

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.



28
29
30
31
32
33
34
# 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) ⇒ Object

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



39
40
41
42
43
# 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

.traduci_archivio(archivio) ⇒ Object

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



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 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) ⇒ Object

Traduce un blocco di codice da ItalianRuby a Ruby.



104
105
106
107
108
109
110
# 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) ⇒ Object

Traduce un pezzo di sorgente da ItalianRuby a Ruby.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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