class Italian::Ruby::Traduttore::Stringa

Attributes

posizione_finale[RW]
posizione_iniziale[RW]

Public Class Methods

new(contenuto, posizione_iniziale) click to toggle source
# File lib/italian/ruby/traduttore/stringa.rb, line 18
def initialize(contenuto, posizione_iniziale)
  @contenuto          = contenuto
  @posizione_iniziale = posizione_iniziale

  determina_tipo
end

Public Instance Methods

ricerca_chiusura() click to toggle source

Ricerca la posizione del carattere di chiusura della stringa.

# File lib/italian/ruby/traduttore/stringa.rb, line 27
def ricerca_chiusura
  case @tipo
  when :doppio_apice
    @posizione_finale = @contenuto.index /"/,   @posizione_iniziale + 1
  when :singolo_apice
    @posizione_finale = @contenuto.index /'/,   @posizione_iniziale + 1
  when :percentuale_graffa
    @posizione_finale = @contenuto.index /\}/,  posizione_ultima_interpolazione
  end

  raise Italian::Ruby::Errori::StringaNonTerminata,
    "la stringa iniziata alla posizione #{@posizione_iniziale} non è terminata" if
    @posizione_finale.nil?
end

Private Instance Methods

determina_tipo() click to toggle source

Determina il tipo della stringa.

# File lib/italian/ruby/traduttore/stringa.rb, line 46
def determina_tipo
  carattere_stringa = @contenuto[@posizione_iniziale]

  case carattere_stringa
  when "\"" then @tipo = :doppio_apice
  when "'"  then @tipo = :singolo_apice
  when "%"  then @tipo = :percentuale_graffa
  end
end
posizione_ultima_interpolazione() click to toggle source

Determina la posizione dell'ultima interpolazione, se presente.

# File lib/italian/ruby/traduttore/stringa.rb, line 58
def posizione_ultima_interpolazione
  posizione_finale = @posizione_iniziale + 2

  inizio_prossima_interpolazione    = @contenuto.index /#\{/, posizione_finale
  while inizio_prossima_interpolazione != nil
    fine_prossima_interpolazione    = @contenuto.index /\}/,  inizio_prossima_interpolazione
    raise "l'interpolazione iniziata alla posizione #{inizio_prossima_interpolazione} non è terminata" if
      fine_prossima_interpolazione.nil?
    posizione_finale                = fine_prossima_interpolazione + 1
    inizio_prossima_interpolazione  = @contenuto.index /#\{/, fine_prossima_interpolazione
  end

  posizione_finale
end