italian-ruby 0.8.7 → 0.8.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +50 -9
- data/lib/italian/ruby/core_ext/date.rb +7 -1
- data/lib/italian/ruby/core_ext/file.rb +1 -0
- data/lib/italian/ruby/core_ext/integer.rb +1 -0
- data/lib/italian/ruby/core_ext/kernel.rb +2 -0
- data/lib/italian/ruby/core_ext/main.rb +2 -1
- data/lib/italian/ruby/core_ext/string.rb +5 -0
- data/lib/italian/ruby/core_ext/time.rb +7 -1
- data/lib/italian/ruby/version.rb +1 -1
- data/vim/ftdetect/ir.vim +1 -0
- data/vim/syntax/ir.vim +44 -0
- data/vim/vimrc +42 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa49125e7eef8e61c26ebd5b3eb981272a80b19614e7d7f8b4b735f4631cd222
|
4
|
+
data.tar.gz: 44eff11aa4a52d78c429512669f20abdb797962c1fdcc0db1f8255540ba8e2ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6a6731ae3c3fabab3915431cc3fc1786625b2d4a1582ca8a8d668624314e8c59b295437bba6ff286a173eb4304f4240579135c1a3fb650b1cc5476b274e0f07
|
7
|
+
data.tar.gz: 3207db71d259980c597fcc42ff12240e87c18da1e242e39361d5ee9c9dc287f03b4f06ba553476c756fbc296087cb64f44d30a8a80c86fd18c083ee7d0d8cf6c
|
data/README.md
CHANGED
@@ -38,11 +38,11 @@ A questo punto ci sono due strade. Prima strada, usare l'eseguibile `italian-rub
|
|
38
38
|
```ruby
|
39
39
|
# persona.ir
|
40
40
|
classe Persona
|
41
|
-
|
41
|
+
definisci inizializzatore(nome)
|
42
42
|
@nome = nome
|
43
43
|
fine
|
44
44
|
|
45
|
-
|
45
|
+
definisci come_ti_chiami?
|
46
46
|
stampa "Ciao, mi chiamo #{@nome}."
|
47
47
|
fine
|
48
48
|
fine
|
@@ -63,7 +63,7 @@ Oppure si può richiedere all'interno di codice sorgente Ruby standard, in modo
|
|
63
63
|
```ruby
|
64
64
|
# libreria_interessantissima.rb
|
65
65
|
modulo LibreriaInteressantissima
|
66
|
-
|
66
|
+
definisci se_stesso.metodo_interessantissimo
|
67
67
|
stampa "Che roba!"
|
68
68
|
fine
|
69
69
|
fine
|
@@ -93,15 +93,56 @@ GemmaImpossibile.esiste?
|
|
93
93
|
>
|
94
94
|
> \- un tizio saggio, qualche anno fa.
|
95
95
|
|
96
|
-
Volete sapere la verità su Italian Ruby? Ecco come funziona.
|
97
|
-
In mezzo a queste due, ci infiliamo la nostra gemma, che, patchando il ruby parser, legge codice in italiano e lo converte in espressioni sexp. Il trucco sta nel file `lib/italian/ruby/ruby_parser_patches.rb` dove vengono definite nuove keywords al posto di quelle originali (es. `classe` al posti di `class`).
|
96
|
+
Volete sapere la verità su Italian Ruby? Ecco come funziona.
|
98
97
|
|
99
|
-
|
98
|
+
Inizialmente, avevo preso ispirazione da questa gemma che si chiama [Bato](https://github.com/jjuliano/bato). L'idea, praticamente, è la stessa di Italian Ruby solo che in filippino. Bato vuole dire "Roccia" in filippino. Bato funziona usando la gemma [RubyParser](https://github.com/seattlerb/ruby_parser) che parsa codice Ruby e lo converte in espressioni sexp, e la gemma [Ruby2Ruby](https://github.com/seattlerb/ruby2ruby) che converte espressioni sexp in codice Ruby. In mezzo a queste due, si inserisce Bato, che, patchando il ruby parser, legge codice in filippino e lo converte in espressioni sexp.
|
99
|
+
|
100
|
+
Ora, Italian Ruby ha un suo parser vero e proprio. È molto semplice, per ora, e si basta sulla lettura contestuale di ogni riga del sorgente, ma senza dividere le parole e senza cercare di ricostruire l'intero albero sintattico astratto. In questo modo si hanno vari vantaggi:
|
101
|
+
- Non si dipende più dalle gemme `ruby_parser` e `ruby_2_ruby`. Il che significa che ogni nuova funzionalità del linguaggio è automaticamente e direttamente disponibile anche in Italian Ruby, senza aspettare che vengano aggiornate queste due gemme (es. il pattern-matching di Ruby 2.7).
|
102
|
+
- I tempi di caricamento iniziali della gemma sono ridotti di molto.
|
103
|
+
- La velocità di processazione e traduzione del sorgente è aumentata di molto.
|
104
|
+
- È mantenuta l'esatta corrispondenza fra i numeri di riga fra sorgente originale e sorgente tradotto.
|
105
|
+
|
106
|
+
Un'altra differenza fra Bato e Italian Ruby è che Bato ha solo un binario che permette di eseguire codice filippino. Italian Ruby, invece, permette di inglobare codice italiano all'interno di progetti Ruby già esistenti. Avete un gigantesco codebase con megabyte di codice, ma volete riscrivere un solo piccolo pezzettino in italiano? Con Italian Ruby si può. Ad esempio, prendiamo questo sorgente Italian Ruby:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
classe Libro
|
110
|
+
|
111
|
+
accessore :titolo
|
112
|
+
|
113
|
+
definisci inizializzatore(titolo)
|
114
|
+
@titolo = titolo
|
115
|
+
fine
|
116
|
+
|
117
|
+
fine
|
118
|
+
```
|
119
|
+
|
120
|
+
e questo codice Ruby:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
require "italian/ruby"
|
124
|
+
richiedi_relativo "libro"
|
125
|
+
|
126
|
+
class Library
|
127
|
+
|
128
|
+
attr_accessor :books
|
129
|
+
|
130
|
+
def initialize
|
131
|
+
@books = []
|
132
|
+
end
|
133
|
+
|
134
|
+
def add(title)
|
135
|
+
@books << Libro.new(title)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
```
|
139
|
+
|
140
|
+
Questo codice risulta perfettamente valido e funzionante.
|
100
141
|
|
101
142
|
Per concludere, ci sono degli avvertimenti.
|
102
|
-
1.
|
103
|
-
2.
|
143
|
+
1. Il namespace verrà sporcato. Ho fatto del mio meglio per essere più chirurgico possibile, ma se fate `require "italian/ruby"` sappiate che verranno su un sacco di classi e di alias nuovi (es. `Oggetto.nuovo` ecc.).
|
144
|
+
2. Il `richiedi` e `richiedi_relativo` funzionano traducendo un file sorgente in italiano nella cartella `.italian-ruby`, che viene creata in automatico nella home dell'utente. Viene ricreato l'intero percorso del file, in modo tale da preservarne l'unicità e il riferimento con il sorgente iniziale. Unaa volta tradotto, il file viene caricato in memoria con il `require` di Ruby. Non so se questo possa creare problemi. Immagino di no. Ma vi ho avvertito!
|
104
145
|
|
105
146
|
## Contribuire
|
106
147
|
|
107
|
-
Bug e issue qui -> https://github.com/
|
148
|
+
Bug e issue qui -> https://github.com/Pluvie/italian-ruby.
|
@@ -33,9 +33,15 @@ class Date
|
|
33
33
|
end
|
34
34
|
alias :due_anni_precedenti :due_anni_fa
|
35
35
|
|
36
|
-
alias :
|
36
|
+
alias :original_equality :==
|
37
37
|
def ==(other)
|
38
38
|
return (self == other.to_date) if other.is_a? Time
|
39
|
+
original_equality other
|
40
|
+
end
|
41
|
+
|
42
|
+
alias :original_compare :<=>
|
43
|
+
def <=>(other)
|
44
|
+
return (self <=> other.to_date) if other.is_a? Time
|
39
45
|
original_compare other
|
40
46
|
end
|
41
47
|
end
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# Alias di metodi del namespace principale.
|
5
5
|
|
6
6
|
alias :stampa :puts
|
7
|
+
alias :scrivi :print
|
7
8
|
alias :cicla :loop
|
8
9
|
alias :definisci_metodo_singolo :define_singleton_method
|
9
10
|
alias :blocco_dato? :block_given?
|
@@ -26,4 +27,4 @@ def alza(*args)
|
|
26
27
|
end
|
27
28
|
def fallisci(*args)
|
28
29
|
fail *args
|
29
|
-
end
|
30
|
+
end
|
@@ -8,6 +8,7 @@ class String
|
|
8
8
|
alias :prima_maiuscola :capitalize
|
9
9
|
alias :in_simbolo :to_sym
|
10
10
|
alias :in_stringa :to_s
|
11
|
+
alias :in_numero :to_i
|
11
12
|
alias :dividi :split
|
12
13
|
alias :maiuscola :upcase
|
13
14
|
alias :maiuscolo :upcase
|
@@ -25,6 +26,10 @@ class String
|
|
25
26
|
alias :spoglia :strip
|
26
27
|
alias :conteggio :count
|
27
28
|
alias :conteggia :count
|
29
|
+
alias :codifica :encoding
|
30
|
+
alias :codifica_in :encode
|
31
|
+
alias :codifica_valida? :valid_encoding?
|
32
|
+
alias :forza_codifica_a :force_encoding
|
28
33
|
|
29
34
|
def esiste?
|
30
35
|
!nil? and self != ""
|
@@ -22,9 +22,15 @@ class Time
|
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
25
|
-
alias :
|
25
|
+
alias :original_equality :==
|
26
26
|
def ==(other)
|
27
27
|
return (self.to_date == other) if other.is_a? Date
|
28
|
+
original_equality other
|
29
|
+
end
|
30
|
+
|
31
|
+
alias :original_compare :<=>
|
32
|
+
def <=>(other)
|
33
|
+
return (self.to_date <=> other) if other.is_a? Date
|
28
34
|
original_compare other
|
29
35
|
end
|
30
36
|
end
|
data/lib/italian/ruby/version.rb
CHANGED
data/vim/ftdetect/ir.vim
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
au BufRead,BufNewFile *.ir set filetype=ir
|
data/vim/syntax/ir.vim
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
" Vim syntax file
|
2
|
+
" Language: Italian Ruby
|
3
|
+
" Maintainer: Francesco Ballardin
|
4
|
+
" Latest Revision: 01 July 2020
|
5
|
+
|
6
|
+
if exists("b:current_syntax")
|
7
|
+
finish
|
8
|
+
endif
|
9
|
+
|
10
|
+
syn match italianRubyKeyword /\v(\s)*(classe|modulo|esegui|fine)(\s|$)/
|
11
|
+
syn match italianRubyKeyword /\v(\s)*(se|allora|altrimenti|altrimenti_se|considera|quando|finché)(\s|$)/
|
12
|
+
syn match italianRubyKeyword /\v(\s)*(prossimo|prossima|esci|ritorna|rilascia|blocco_dato\?)(\s|$)/
|
13
|
+
syn match italianRubyKeyword /\v(\s)*(inizia|recupera|assicura|riprova)(\s|$)/
|
14
|
+
|
15
|
+
syn match italianRubySymbol /\v(\s)*([a-zè_][a-zA-Z0-9àèéìòù_"]+:)/
|
16
|
+
syn match italianRubySymbol /\v(\s)*("[a-zA-Z0-9àèéìòù_]+":)/
|
17
|
+
syn match italianRubySymbol /\v(\s)*(:[a-zè_"][a-zA-Z0-9àèéìòù_"]+)/
|
18
|
+
|
19
|
+
syn match italianRubyInstanceVar /\v[\s^]*\@[a-zè_][a-zA-Z0-9àèéìòù_"]*/
|
20
|
+
syn match italianRubyConstant /\v[A-Z][a-zA-Z0-9àèéìòù_]+/
|
21
|
+
syn match italianRubyComment /\v#.*$/
|
22
|
+
|
23
|
+
syn match italianRubyInterpolationStart /\v#\{/ containedin=italianRubyInterpolation
|
24
|
+
syn match italianRubyInterpolationStop /\v\}/ containedin=italianRubyInterpolation
|
25
|
+
syn region italianRubyInterpolation start=/\v#\{/ end=/\v\}/ contains=TOP,italianRubyComment contained keepend
|
26
|
+
syn region italianRubyString start=/"/ end=/"/ skip=/\\"/ contains=italianRubyInterpolation
|
27
|
+
|
28
|
+
syn match italianRubySpecial /\v(\s)*(includi|estendi|preponi)(\s|$)/
|
29
|
+
syn match italianRubySpecial /\v(\s)*(pubblici|protetti|privati)(\s|$)/
|
30
|
+
syn match italianRubySpecial /\v(\s)*(richiedi|richiedi_relativo|richiedi_tutti)(\s|$)/
|
31
|
+
syn match italianRubySpecial /\v(\s)*(cicla|alza)(\s|$)/
|
32
|
+
syn match italianRubySpecial /\v\.(nuovo|nuova)/hs=s+1
|
33
|
+
syn match italianRubySpecial /\v(se_stesso|se_stessa)/
|
34
|
+
syn match italianRubySpecial /\v(\*){1,2}[a-zA-Z_]/he=e-1
|
35
|
+
syn match italianRubySpecialBoolean /\v(\s)*(si|no)(\s|$)/
|
36
|
+
syn match italianRubySpecialBoolean /\v(\s)*(si|no)(\W)/he=e-1
|
37
|
+
|
38
|
+
syn region italianRubyDefinition start=/definisci/ end=/[$\n]/ contains=italianRubyDefinitionKeyword,italianRubyMethodName,italianRubySplatOperator,italianRubySymbol,italianRubySpecialBoolean
|
39
|
+
syn match italianRubyDefinitionKeyword /\vdefinisci/ contained
|
40
|
+
syn match italianRubyMethodName /\v([a-z0-9_]+)\(/he=e-1 contained
|
41
|
+
syn match italianRubyMethodName /\v([a-z0-9_]+)$/ contained
|
42
|
+
syn match italianRubySplatOperator /\v(\*{1,2}[a-zA-Z0-9_])/he=e-1
|
43
|
+
|
44
|
+
let b:current_syntax = "ir"
|
data/vim/vimrc
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
""
|
2
|
+
" Imposta dimensione tabulazione
|
3
|
+
set tabstop=2
|
4
|
+
set shiftwidth=2
|
5
|
+
set expandtab
|
6
|
+
set nu
|
7
|
+
|
8
|
+
""
|
9
|
+
" Comando per aprire nuovo tab
|
10
|
+
command! -complete=file -nargs=1 T tabedit <args>
|
11
|
+
|
12
|
+
""
|
13
|
+
" Muoversi fra tab con H (sinistra) e L (destra)
|
14
|
+
nnoremap H gT
|
15
|
+
nnoremap L gt
|
16
|
+
|
17
|
+
""
|
18
|
+
" Aggiunge automaticamente indentazione su nuova riga
|
19
|
+
set autoindent
|
20
|
+
|
21
|
+
""
|
22
|
+
" Mostra opzioni sopra la linea di comando
|
23
|
+
set wildmenu
|
24
|
+
|
25
|
+
""
|
26
|
+
" Evidenziazione sintassi ItalianRuby
|
27
|
+
syntax on
|
28
|
+
|
29
|
+
highlight italianRubyKeyword ctermfg=171
|
30
|
+
highlight italianRubyDefinitionKeyword ctermfg=171
|
31
|
+
highlight italianRubySpecial ctermfg=33
|
32
|
+
highlight italianRubySpecialBoolean ctermfg=33
|
33
|
+
highlight italianRubyMethod ctermfg=220
|
34
|
+
highlight italianRubyMethodName ctermfg=220
|
35
|
+
highlight italianRubySymbol ctermfg=33
|
36
|
+
highlight italianRubySplatOperator ctermfg=117
|
37
|
+
highlight italianRubyInstanceVar ctermfg=117
|
38
|
+
highlight italianRubyInterpolationStart ctermfg=117
|
39
|
+
highlight italianRubyInterpolationStop ctermfg=117
|
40
|
+
highlight italianRubyConstant ctermfg=43
|
41
|
+
highlight italianRubyComment ctermfg=28
|
42
|
+
highlight italianRubyString ctermfg=208
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: italian-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesco Ballardin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,6 +106,9 @@ files:
|
|
106
106
|
- lib/italian/ruby/traduttore.rb
|
107
107
|
- lib/italian/ruby/utils/debug.rb
|
108
108
|
- lib/italian/ruby/version.rb
|
109
|
+
- vim/ftdetect/ir.vim
|
110
|
+
- vim/syntax/ir.vim
|
111
|
+
- vim/vimrc
|
109
112
|
- vscode/italianruby.tmGrammar.json
|
110
113
|
homepage: https://github.com/Pluvie/italian-ruby
|
111
114
|
licenses:
|