class Italian::Ruby::Traduttore::Linea

Public Class Methods

new(contenuto, indice, nome_archivio) click to toggle source
# File lib/italian/ruby/traduttore/linea.rb, line 26
def initialize(contenuto, indice, nome_archivio)
  @contenuto      = contenuto
  @indice         = indice
  @nome_archivio  = nome_archivio

  trova_posizione_primo_commento
  trova_posizioni_stringhe
end

Public Instance Methods

traduci() click to toggle source

Traduce la linea in codice Ruby.

# File lib/italian/ruby/traduttore/linea.rb, line 37
def traduci
  @pezzi_da_tradurre = []

  if @posizione_primo_commento != nil
    if @stringhe.none? or @posizione_primo_commento < @stringhe[0].posizione_iniziale
      dividi_usando_posizione_commento
    else
      dividi_usando_posizioni_stringhe
    end
  else
    if @stringhe.none?
      dividi_in_pezzo_unico
    else
      dividi_usando_posizioni_stringhe
    end
  end

  @pezzi_da_tradurre.map(&:traduci).join
end

Private Instance Methods

dividi_in_pezzo_unico() click to toggle source

Divide la linea in un pezzo unico, che contiene se stessa.

# File lib/italian/ruby/traduttore/linea.rb, line 98
def dividi_in_pezzo_unico
  @pezzi_da_tradurre = [ Italian::Ruby::Traduttore::Pezzo.new(@contenuto) ]
end
dividi_usando_posizione_commento() click to toggle source

Divide la linea in pezzi, usando la posizione del commento.

# File lib/italian/ruby/traduttore/linea.rb, line 104
def dividi_usando_posizione_commento
  if @posizione_primo_commento == 0
    @pezzi_da_tradurre = [ Italian::Ruby::Traduttore::Pezzo.new(@contenuto) ]
    return
  end

  @pezzi_da_tradurre = [
    Italian::Ruby::Traduttore::Pezzo.new(@contenuto[0..@posizione_primo_commento - 1]),
    Italian::Ruby::Traduttore::Pezzo.new(@contenuto[@posizione_primo_commento..])
  ]
end
dividi_usando_posizioni_stringhe() click to toggle source

Divide la linea in pezzi, usando le posizioni delle stringhe trovate.

# File lib/italian/ruby/traduttore/linea.rb, line 118
def dividi_usando_posizioni_stringhe
  @pezzi_da_tradurre  = []
  cursore_contenuto   = 0

  @stringhe.each do |stringa|
    unless stringa.posizione_iniziale == cursore_contenuto
      pezzo_non_stringa = @contenuto[cursore_contenuto..stringa.posizione_iniziale - 1]
      @pezzi_da_tradurre << Italian::Ruby::Traduttore::Pezzo.new(pezzo_non_stringa)
    end

    pezzo_stringa = @contenuto[stringa.posizione_iniziale..stringa.posizione_finale]
    @pezzi_da_tradurre << Italian::Ruby::Traduttore::Pezzo.new(pezzo_stringa)
    cursore_contenuto = stringa.posizione_finale + 1
  end

  if cursore_contenuto < @contenuto.length - 1
    pezzo_non_stringa = @contenuto[cursore_contenuto..]
    @pezzi_da_tradurre << Italian::Ruby::Traduttore::Pezzo.new(pezzo_non_stringa)
  end

  @pezzi_da_tradurre
end
trova_posizione_primo_commento() click to toggle source

Trova la posizione del primo commento all'interno della linea.

# File lib/italian/ruby/traduttore/linea.rb, line 61
def trova_posizione_primo_commento
  @posizione_primo_commento = @contenuto.index "#"
end
trova_posizioni_stringhe() click to toggle source

Trova le strighe all'interno della linea. Le stringhe possono iniziare con il doppio apice (“), il singolo apice ('), o il percentuale-graffa (%{).

# File lib/italian/ruby/traduttore/linea.rb, line 68
def trova_posizioni_stringhe
  @stringhe = []

  stringa_trovata = trova_prossima_stringa_partendo_da 0

  while stringa_trovata != nil
    @stringhe << stringa_trovata

    inizio_nuova_ricerca = stringa_trovata.posizione_finale + 1
    stringa_trovata = trova_prossima_stringa_partendo_da inizio_nuova_ricerca
  end
end
trova_prossima_stringa_partendo_da(posizione_partenza) click to toggle source

Trova la prossima stringa sul contenuto, partendo dalla posizione indicata.

# File lib/italian/ruby/traduttore/linea.rb, line 83
def trova_prossima_stringa_partendo_da(posizione_partenza)
  tipo_stringa_corrente     = nil
  posizione_inizio_stringa  = @contenuto.index /['"]|%\{/, posizione_partenza
  return nil if posizione_inizio_stringa.nil?
  return nil if @posizione_primo_commento != nil && @posizione_primo_commento < posizione_inizio_stringa

  stringa_da_chiudere = Italian::Ruby::Traduttore::Stringa.new @contenuto, posizione_inizio_stringa
  stringa_da_chiudere.ricerca_chiusura
  stringa_da_chiudere
rescue Italian::Ruby::Errori::StringaNonTerminata => errore
  Italian::Ruby::Errori.recupera errore, @nome_archivio, @indice + 1
end