Initial check-in of 2.0b1 non-binary files.

master
a1tsal 19 years ago
parent fad893dbf6
commit f25b0d4f40
  1. 115
      Aro phonetics scheme.txt
  2. 76
      Aro phonetics test cases.txt
  3. 45
      Build procedure.txt
  4. 740
      Conversion test cases.txt
  5. 4
      Fonts note.txt
  6. 133
      THDL phonetics scheme.txt
  7. 72
      THDL phonetics test cases.txt
  8. 6
      tibwn.ini note.txt

@ -0,0 +1,115 @@
; Aro Gar phonetic rules for WylieWord.
; These rules attempt to capture the phonetic transcription scheme
; used by Ngak'chang Rinpoche. The results have not, however, yet
; been reviewed by Rinpoche, and probably differ from his intention
; in some ways.
; File format: there are two sections, for rules and exceptions.
;
; There is one rule per line. Typically a rule has two parts,
; separated by a space. The first part is a sequence of letters
; that, if it appears in a Wylie transliteration, is to be replaced
; by the second part in the phonetic transcription. The second
; part can be missing, in which case the first part is simply
; deleted from transcriptions when found.
;
; A semicolon precedes a comment. Blank lines are OK.
;
; The rules are applied in the order they appear in this file.
; Each rule is applied as many times as possible, but we never
; go back to a previous rule. (This simple rewrite-rule grammar is
; not sufficient to implement all phonetic schemes, at least not
; compactly. For example, it would be difficult to capture the
; effects of preinitial consonants on tone (as in the scheme used
; in Joe Wilson's book, for instance).) Also note that not even the
; whole of the present scheme is implemented using these rules. In
; particular, the deletion of prefix and superscript consonants,
; and of wa-zur, are done in program code, not using the rules here.
; Miscellaneous prefix transformations
g. ; delete this (representing g prefix, used before root y only)
dby y ; must come before db->w, for dbyang
dbr r ; must come before db->w, for dbral
db w ; must come before by->j
; c and ch are both transcribed ch. To get this we need a kludge
; (involving x), because the rule c -> ch would apply recursively.
ch c
c x
x ch
; Bad behavior from Y
py ch
phy ch
by j
my ny
; Retroflexes
kr tr
khr thr
gr dr
pr tr
phr thr
br dr
; Other bad behavior from R
mr m
sr s
; Uniquely random case
zl d
; Vowel transformations
;
; Note: this must be done before suffix-stripping.
; Before actually doing the transformations, we "hide" the n in ng, so that ng doesn't
; induce umlaut. This is gross; if we had a real grammar engine it wouldn't
; be necessary.
ng x
; Transformations of e: short before g, m, n; long otherwise
eg èg
em èm
en èn
e é
; Umlaut of a, o, u followed by d, n, l, s
ad èd
an èn
al èl
as è
od öd
on ön
ol öl
os ö
ud üd
un ün
ul ül
us ü
; restore ng
x ng
<?Exceptions?>
; There is one exception per line. Each exception consists of
; the transliteration (which may be several syllables separated
; by spaces), followed by a space, a colon, a space, and the
; pronunciation (which may also contain spaces). A semicolon
; precedes a comment. Blank lines are OK.
ba : wa ; mind you, ba (pronounced ba) means cow. But that's much rarer than wa.
bo : wo
ba'i : wa'i
bo'i : wo'i
bar : ?bar/war? ; bar = "middle"; could be either, so supply both and let user sort it out
bor : ?bor/wor? ; bor = "cast away"; could be either, so supply both and let user sort it out
rdo rje : dorjé
mkha' 'gro : khandro
sku mnye : kumnyé
sprul sku : tulku
mtsho rgyal : tsogyèl
rta mgrin: tamdrin
dga' ldan : ganden
dge 'dun : gendün
a mdo : amdo
srid pa : sipa
pad ma : pèma

@ -0,0 +1,76 @@
;
; These examples come from the draft (8/21/03) THDL Phonetics document
;
lha sa > lhasa
sa skya pa > sakyapa
; blo bzang > lobzang -- THDL exception not included in Aro exception dictionary
rnying ma pa > nyingmapa
rdo rje > dorjé
dge lugs pa > gélugpa
gzhis ka rtse > zhikatsé
mar me > marmé
bcu > chu
lce > ché
rin chen bzang po > rinchènzangpo
nag chu > nagchu
bka' rgyud pa > kagyüdpa
bsod nams> södnam
thub bstan > thubtèn
'jam dpal dbyangs > jampèlyang
dge legs > gélèg
kha btags > khatag
bka' shag > kashag
; sbra nag zhol > banakzhöl -- THDL exception not included in Aro exception dictionary
thabs > thab
lha sa ba > lhasawa
jo bo > jowo
dpa' bo > pawo
spyan ras gzig > chènrèzig
sbyin bdag > jindag
smyong > nyong
sgrol ma > drölma
rten 'brel > tèndrél
'bras spungs > drèpung
'phrin las > thrinlè
dbang > wang
dbral > rèl
dbyar kha > yarkha
zla ba > dawa
klad pa > lèdpa
glog > log
le'u > lé'u
pa'ang > pa'ang
ba'i > wa'i
rta mgrin > tamdrin
; Other tests, to exercise particular rules in the grammar that aren't covered in the rules above
g.yon > yön
phyag > chag
bkra shis > trashi
khros ma > thröma
sprul > trül
mri tam ga > mitamga
srid pa > sipa
pad ma > pèma
pan chen > pènchèn
ral pa can > rèlpachèn
thun > thün
dus gsum > düsum
sbed > béd
ces > ché
pa'i > pa'i
che'i > ché'i
gri'i > dri'i
po'i > po'i
le'u'i > lé'u'i
rdzogs > dzog
thug pa > thugpa
'debs > déb
sib sib > sibsib
lobs pa > lobpa
grub > drub
kla col > lachöl
; Aro-specific exceptions
mtsho rgyal > tsogyèl

@ -0,0 +1,45 @@
WylieWord Build Procedure
This explains how to make a new version of WylieWord.
The program source file is called "WylieWord developement copy.dot".
This is what you edit with the VBA editor.
When you have finished modifying it:
Do a search for, and remove, all debugging MsgBox calls.
I use "!!!" in comments to note known bugs that should be dealt with.
Search for "!!!" and make sure anything left in that state is
acceptable in the release.
Re-test everything that has changed since the last release, and
anything that might be affected by those changes.
Increment the version number in AboutWylieWord.
Do PrepareDistribution in immediate window.
This runs automated tests. Verify that the results are OK.
It also unbinds all the WylieWord keys.
This is critical to having WylieWord work correctly on
non-English keyboards.
After making the distribution, you will want to restore
the keybindings in the develoment copy by calling
WylieWordBindKeys.
Save "WylieWord developement copy.dot"
Copy it to the build folder.
Rename it Setup.doc.
The WylieWord installer is created using the program "SEAU",
available for $49 on the web. The .INP file is its configuration.
In SEAU:
Update the Files folder to be the WylieWord build folder.
Update the Archive output file location to be in that folder also.
Save the SEAU configuration (.INP file) if you have changed it.
Run the SEAU builder.
Test the resulting "WylieWord Setup.exe" file.

@ -0,0 +1,740 @@
// Test cases for Wylie -> [other representation] -> Wylie round-trip conversion.
//
// Each line in the file is a comment, blank, or one test case.
//
// A comment line starts with //.
//
// Each test case is understood as EWTS; it should convert back into itself.
// The following test cases are from DLC's DuffPaneTest.
tsha
tsa
dza
sha
nga
nag
nga /
bkra shis bde legs/
sgom pa'am
sgom pe'am
le'u'i'o
la'u'i'o/la'am/pa'ang/pe'ang
bras
dwa
gwa
gyug
g.yag
gyag
g.yas
gyas
'gas
gangs
gnags
'byung
'byungs
blags
mnags
gdams
'gams
// Random things known to be hard
// Difficult to parse deterministically
brgyud
// Featuritis
brtswand
// two-letter suffix (not to be treated as n suffix + g second-suffix)
dbang
// plus second sufix
dbangs
// A common word that is not grammatical, according to some
// sources, and that is also hard because br- looks like
// b should be the root
brlabs
// "'is" is the form of kyis used after bare vowel or a chung
re'u'is
he'is
// Bare vowels
a
i
'o
'a
// Bare polyvowels
a'o
i'u'i
'o'i
// things that at one time or another tickled bugs in WW code
gyurd
ga*ra
ha_sa
gangs
mngas
'gram
// The exceptions to the three-letter root rule
rags lags nags bags bangs gangs rangs langs nangs sangs babs rabs rams nams
// This is my old root-letter-capitalization and pronunciation test suite.
// It's should also be good for tickling conversion bugs.
grwa
bsgrubs
bzlog
brlabs
sprul
shabs
shes
ldan
mgon
rgyud
ten
rigs
chos
dbang
dbying
dbyang
spyang
phyug
byang
sbyin
myur
po'i
mri
srung
mkha'
'gro
rta'i
khwa
rdzogs
rdo
rje
zla
bar
ngan
rnga
g.yo
gyo
dpa'
'dag
klu
khyung
// These are from DLC's PackageTest
brtan
blta
blag
brag
bsabs
zungs
brtib
spyoms
sku'i
bskyangs
ag
bda'
dbang
dga'
dgra
dmar
gda'
// Sanskrit
// Tests from DLC
ai
heM hiM h-iM heM haiM hoM hauM hUM
pad+me
D+h+D+ha
gaD+h+D+ha
autapa
parItshatsawa
ke:
ka:
n+yadA
ak+Sha
Asa
AT+Ta
b+da
d+ba
d+ga
d+g+ra
d+gara
// Other Sanskrit
rak+Shasa
DAkinI
haM
pad+ma
samuts+tsaya
gang+gA
sid+d+hi
shrI
sat+t+wa
sarma
// bug ticklers
ragyad
'garma
'garama
gayaradasa
// Taken from THDL Sechen text collection
dashadigAMsarbatimirabi ni saranan+nAmashrIguh+yagar+b+hatatwaMsh+ts+yayastanataras+yaTa'ikAbiharatisma
shrI tan+t+radzamAyadzalasamudAyArtas+yadwArAt+nish+tsitasub+haShitaMguh+yapatimukhAgamanAmabiharatisma
guh+ya pa ti sa shad+h+ya laM kA ra nA ma shrA iguh+ya gar+b+ha ta twa pa in ish+tsa ya tan+t+ra s+ya pr-i t+t-i bi ha rti sma
// Bare vowels:
A I U -i -I
// leading weird vowels
aiga
-Iba
// M,H on bare vowel
aiM
eM
U^M
au^M
aH
aiH
// M and ^M in the middle of a word
gaMb+ha
hU^MhU^MhU^M
aMu^MraH
raMH
// Semivowel as subscript.
hr-I kl-iba
// Difficult because ny+d is not legal
ny+dza
raH
hai
hau
// One instance of every stack in tibwn.ini, with sequential vowels attached
k+Sha
k+ke
k+khi
k+ngo
k+tsu
k+tA
k+t+yI
k+t+rU
k+t+r+yai
k+t+wau
k+th-i
k+th+y-I
k+Na
k+ne
k+n+yi
k+pho
k+mu
k+m+yA
k+r+yI
k+w+yU
k+shai
k+sau
k+s+n-i
k+s+m-I
k+s+ya
k+s+we
kh+khi
kh+no
kh+lu
g+gA
g+g+hI
g+nyU
g+dai
g+d+hau
g+d+h+y-i
g+d+h+w-I
g+na
g+n+ye
g+pi
g+b+ho
g+b+h+yu
g+mA
g+m+yI
g+r+yU
g+hai
g+h+g+hau
g+h+ny-i
g+h+n-I
g+h+n+ya
g+h+me
g+h+li
g+h+yo
g+h+ru
g+h+wA
ng+kI
ng+k+tU
ng+k+t+yai
ng+k+yau
ng+kh-i
ng+kh+y-I
ng+ga
ng+g+re
ng+g+yi
ng+g+ho
ng+g+h+yu
ng+g+h+rA
ng+ngI
ng+tU
ng+nai
ng+mau
ng+y-i
ng+l-I
ng+sha
ng+he
ng+k+Shi
ng+k+Sh+wo
ng+k+Sh+yu
ts+tsA
ts+tshI
ts+tsh+wU
ts+tsh+rai
ts+nyau
ts+n+y-i
ts+m-I
ts+ya
ts+re
ts+li
ts+h+yo
tsh+thu
tsh+tshA
tsh+yI
tsh+rU
tsh+lai
dz+dzau
dz+dz+ny-i
dz+dz+w-I
dz+dz+ha
dz+h+dz+he
dz+nyi
dz+ny+yo
dz+nu
dz+n+wA
dz+mI
dz+yU
dz+rai
dz+wau
dz+h-i
dz+h+y-I
dz+h+ra
dz+h+le
dz+h+wi
ny+tso
ny+ts+mu
ny+ts+yA
ny+tshI
ny+dzU
ny+dz+yai
ny+dz+hau
ny+ny-i
ny+p-I
ny+pha
ny+ye
ny+ri
ny+lo
ny+shu
T+kA
T+TI
T+T+hU
T+nai
T+pau
T+m-i
T+y-I
T+wa
T+se
Th+yi
Th+ro
D+gu
D+g+yA
D+g+hI
D+g+h+rU
D+Dai
D+D+hau
D+D+h+y-i
D+n-I
D+ma
D+ye
D+ri
D+wo
D+hu
D+h+D+hA
D+h+mI
D+h+yU
D+h+rai
D+h+wau
N+T-i
N+Th-I
N+Da
N+D+ye
N+D+ri
N+D+r+yo
N+D+hu
N+NA
N+d+rI
N+mU
N+yai
N+wau
t+k-i
t+k+r-I
t+k+wa
t+k+se
t+gi
t+nyo
t+Thu
t+tA
t+t+yI
t+t+rU
t+t+wai
t+thau
t+th+y-i
t+n-I
t+n+ya
t+pe
t+p+ri
t+pho
t+mu
t+m+yA
t+yI
// t+rnU -- !!! I think that this is a bogus tibwn.ini entry, but I'm not sure
t+sai
t+s+thau
t+s+n-i
t+s+n+y-I
t+s+ma
t+s+m+ye
t+s+yi
t+s+ro
t+s+wu
t+r+yA
t+w+yI
t+k+ShU
th+yai
th+wau
d+g-i
d+g+y-I
d+g+ra
d+g+he
d+g+h+ri
d+dzo
d+du
d+d+yA
d+d+rI
d+d+wU
d+d+hai
d+d+h+nau
d+d+h+y-i
d+d+h+r-I
d+d+h+wa
d+ne
d+bi
d+b+ro
d+b+hu
d+b+h+yA
d+b+h+rI
d+mU
d+yai
d+r+yau
d+w+y-i
d+h-I
d+h+na
d+h+n+ye
d+h+mi
d+h+yo
d+h+ru
d+h+r+yA
d+h+wI
n+kU
n+k+tai
n+g+hau
n+ng-i
n+dz-I
n+dz+ya
n+De
n+ti
n+t+yo
n+t+ru
n+t+r+yA
n+t+wI
n+t+sU
n+thai
n+dau
n+d+d-i
n+d+d+r-I
n+d+ya
n+d+re
n+d+hi
n+d+h+ro
n+d+h+yu
n+nA
n+n+yI
n+pU
n+p+rai
n+phau
n+m-i
n+b+h+y-I
n+tsa
n+ye
n+ri
n+wo
n+w+yu
n+sA
n+s+yI
n+hU
n+h+rai
p+tau
p+t+y-i
p+t+r+y-I
p+da
p+ne
p+n+yi
p+po
p+mu
p+lA
p+wI
p+sU
p+s+n+yai
p+s+wau
p+s+y-i
b+g+h-I
b+dza
b+de
b+d+dzi
b+d+ho
b+d+h+wu
b+tA
b+nI
b+bU
b+b+hai
b+b+h+yau
b+m-i
b+h-I
b+h+Na
b+h+ne
b+h+mi
b+h+yo
b+h+ru
b+h+wA
m+nyI
m+NU
m+nai
m+n+yau
m+p-i
m+p+r-I
m+pha
m+be
m+b+hi
m+b+h+yo
m+mu
m+lA
m+wI
m+sU
m+hai
y+yau
y+r-i
y+w-I
y+sa
r+khe
r+g+hi
r+g+h+yo
r+ts+yu
r+tshA
r+dz+nyI
r+dz+yU
r+Tai
r+Thau
r+D-i
r+N-I
r+t+wa
r+t+te
r+t+si
r+t+s+no
r+t+s+n+yu
r+thA
r+th+yI
r+d+d+hU
r+d+d+h+yai
r+d+yau
r+d+h-i
r+d+h+m-I
r+d+h+ya
r+d+h+re
r+pi
r+b+po
r+b+bu
r+b+hA
r+m+mI
r+yU
r+wai
r+shau
r+sh+y-i
r+Sh-I
r+Sh+Na
r+Sh+N+ye
r+Sh+mi
r+Sh+yo
r+su
r+hA
r+k+ShI
l+g+wU
l+b+yai
l+mau
l+y-i
l+w-I
l+la
l+h+we
w+yi
w+ro
w+nu
w+wA
sh+tsI
sh+ts+yU
sh+tshai
sh+Nau
sh+n-i
sh+p-I
sh+b+ya
sh+me
sh+yi
sh+r+yo
sh+lu
sh+w+gA
sh+w+yI
sh+shU
Sh+kai
Sh+k+rau
Sh+T-i
Sh+T+y-I
Sh+T+ra
Sh+T+r+ye
Sh+T+wi
Sh+Tho
Sh+Th+yu
Sh+NA
Sh+N+yI
Sh+DU
Sh+thai
Sh+pau
Sh+p+r-i
Sh+m-I
Sh+ya
Sh+we
Sh+Shi
s+k+so
s+khu
s+ts+yA
s+TI
s+ThU
s+t+yai
s+t+rau
s+t+w-i
s+th-I
s+th+ya
s+n+ye
s+n+wi
s+pho
s+ph+yu
s+yA
s+r+wI
s+sU
s+s+wai
s+hau
s+w+y-i
h+ny-I
h+Na
h+te
h+ni
h+n+yo
h+pu
h+phA
h+mI
h+yU
h+lai
h+sau
h+s+w-i
h+w+y-I
k+Sh+Na
k+Sh+me
k+Sh+m+yi
k+Sh+yo
k+Sh+ru
k+Sh+lA
k+Sh+wI
a+yU
a+rai
a+r+yau
// Non-Tibetan, Non-Sanskrit words that should be convertible
fava
vafa
vI
fai
vo
fI/ fai/ fo/ fuM
// punctuation
012345678901234
!@#$%&*()_={}:;<>?
a_tsal852ja$)@#%(!Ta)0daM)%!@sa
// test special handing for @#
@# #@ @a#
// English insert
rta'i [(horse's)] mgrin
<?Reject?>
// The dbu can [m][ng][s] should be read "mngas".
mangs
// ??? legal???
pa'am'ang
// is this actually illegal?
pe'as
'angs
'ag
bskyUMbs
bskyUMbsHgro
b+g+ka
'ad
xan
tax
qan
taq
shae
aeb
.
+
.y
// Arguable if these are illegal
g.ra
r.ya
+a
a+ba
e+ya
ba+
b+
M
^M
Ma
Mam
^Ma
^Mam
r+ra
tat
sbla

@ -0,0 +1,4 @@
The TMW font files need to be included in a WylieWord distribution.
(They are referenced in the SEAU .INP file.)
They are not included in this repository because they are not really
part of the WylieWord project as such.

@ -0,0 +1,133 @@
; THDL Phonetics rules for WylieWord.
; File format: there are two sections, for rules and exceptions.
;
; There is one rule per line. Typically a rule has two parts,
; separated by a space. The first part is a sequence of letters
; that, if it appears in a Wylie transliteration, is to be replaced
; by the second part in the phonetic transcription. The second
; part can be missing, in which case the first part is simply
; deleted from transcriptions when found.
;
; A semicolon precedes a comment. Blank lines are OK.
;
; The rules are applied in the order they appear in this file.
; Each rule is applied as many times as possible, but we never
; go back to a previous rule. (This simple rewrite-rule grammar is
; not sufficient to implement all phonetic schemes, at least not
; compactly. For example, it would be difficult to capture the
; effects of preinitial consonants on tone (as in the scheme used
; in Joe Wilson's book, for instance).) Also note that not even the
; whole of the present scheme is implemented using these rules. In
; particular, the deletion of prefix and superscript consonants,
; and of wa-zur, are done in program code, not using the rules here.
; Miscellaneous prefix transformations
g. ; delete this (representing g prefix, used before root y only)
dby y ; must come before db->w, for dbyang
dbr r ; must come before db->w, for dbral
db w ; must come before by->j
; c and ch are both transcribed ch. To get this we need a kludge
; (involving x), because the rule c -> ch would apply recursively.
ch c
c x
x ch
; Bad behavior from Y
py ch
phy ch
by j
my ny
; Retroflexes
kr tr
khr thr
gr dr
pr tr
phr thr
br dr
; Other bad behavior from R
mr m
sr s
; Uniquely random case
zl d
; Umlaut of a, o, u followed by d, n, l, s
; Note: this must be done before suffix-stripping.
; Before actually doing the umlaut, we "hide" the n in ng, so that ng doesn't
; induce umlaut. This is gross; if we had a real grammar engine it wouldn't
; be necessary.
ng x
ad e
an en
al el
as e
od ö
on ön
ol öl
os ö
ud ü
un ün
ul ül
us ü
; restore ng
x ng
; Stripping of suffix d, s, and ' from i and e
; Note: this has already been done by the umlaut rules for some cases,
; which don't need to be repeated here.
id i
ed e
is i
es e
a' a
e' e
i' i
o' o
u' u
; Remove doubled vowels (e.g. pa'ang -> pang, not paang)
aa a
ee e
ii i
oo o
uu u
; Devoicing of suffix g, b
ag ak
eg ek
ig ik
og ok
ug uk
ab ap
eb ep
ib ip
ob op
ub up
<?Exceptions?>
; There is one exception per line. Each exception consists of
; the transliteration (which may be several syllables separated
; by spaces), followed by a space, a colon, a space, and the
; pronunciation (which may also contain spaces). A semicolon
; precedes a comment. Blank lines are OK.
ba : wa ; mind you, ba (pronounced ba) means cow. But that's much rarer than wa.
bo : wo
ba'i : wai
bo'i : woi
bar : ?bar/war? ; bar = "middle"; could be either, so supply both and let user sort it out
bor : ?bor/wor? ; bor = "cast away"; could be either, so supply both and let user sort it out
rdo rje : dorje
mkha' 'gro : khandro
sprul sku : tulku
rta mgrin: tamdrin
dga' ldan : ganden
dge 'dun : gendün
a mdo : amdo
blo bzang : lobzang
sbra nag zhol : banakzhöl

@ -0,0 +1,72 @@
;
; These examples come from the draft (8/21/03) THDL Phonetics document
;
lha sa > lhasa
sa skya pa > sakyapa
blo bzang > lobzang
rnying ma pa > nyingmapa
rdo rje > dorje
dge lugs pa > gelukpa
gzhis ka rtse > zhikatse
mar me > marme
bcu > chu
lce > che
rin chen bzang po > rinchenzangpo
nag chu > nakchu
bka' rgyud pa > kagyüpa
bsod nams> sönam
thub bstan > thupten
'jam dpal dbyangs > jampelyang
dge legs > gelek
kha btags > khatak
bka' shag > kashak
sbra nag zhol > banakzhöl
thabs > thap
lha sa ba > lhasawa
jo bo > jowo
dpa' bo > pawo
spyan ras gzig > chenrezik
sbyin bdag > jindak
smyong > nyong
sgrol ma > drölma
rten 'brel > tendrel
'bras spungs > drepung
'phrin las > thrinle
dbang > wang
dbral > rel
dbyar kha > yarkha
zla ba > dawa
klad pa > lepa
glog > lok
le'u > leu
pa'ang > pang
ba'i > wai
rta mgrin > tamdrin
; Other tests, to exercise particular rules in the grammar that aren't covered in the rules above
g.yon > yön
phyag > chak
bkra shis > trashi
khros ma > thröma
sprul > trül
mri tam ga > mitamga
srid pa > sipa
pad ma > pema
pan chen > penchen
ral pa can > relpachen
thun > thün
dus gsum > düsum
sbed > be
ces > che
pa'i > pai
che'i > chei
gri'i > dri
po'i > poi
le'u'i > leui
rdzogs > dzok
thug pa > thukpa
'debs > dep
sib sib > sipsip
lobs pa > loppa
grub > drup
kla col > lachöl

@ -0,0 +1,6 @@
WylieWord uses the same tibwn.ini file as Jskad.
The Jskad version is canonical, so tibwn.ini does not appear here.
You need to get it from the Jskad SF repository and include it in
WylieWord builds.
Loading…
Cancel
Save