blob: 329fe4a2a32b581f854a2d835702db166e9cf6b7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
;;;; This file is part of Ellinika project.
;;;; Copyright (C) 2011 Sergey Poznyakoff
;;;;
;;;; Ellinika is free software; you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; the Free Software Foundation; either version 3 of the License, or
;;;; (at your option) any later version.
;;;;
;;;; Ellinika is distributed in the hope that it will be useful,
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;;; GNU General Public License for more details.
;;;;
;;;; You should have received a copy of the GNU General Public License
;;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
(use-modules ((srfi srfi-1)))
(define-public (elstr-trim word n)
(let ((word (if (string? word)
(string->elstr word)
word)))
(cond
((> n 0)
(elstr-slice word n (- (elstr-length word) n)))
((< n 0)
(elstr-slice word 0 (+ (elstr-length word) n)))
(else
word))))
(define-public (elstr-trim! word n)
(let ((word (if (string? word)
(string->elstr word)
word)))
(cond
((> n 0)
(elstr-slice! word n (- (elstr-length word) n)))
((< n 0)
(elstr-slice! word 0 (+ (elstr-length word) n))))))
(define-public (phoneme:code ph)
(list-ref ph 0))
(define-public (phoneme:start ph)
(list-ref ph 1))
(define-public (phoneme:count ph)
(list-ref ph 2))
(define-public (phoneme:flags ph)
(list-ref ph 3))
(define-public (phoneme:accented? ph)
(logand (phoneme:flags ph) elmorph:accent-mask))
(define-public (phoneme:vowel? ph)
(= (logand (phoneme:flags ph) elmorph:vowel)))
(define-public (phoneme:consonant? ph)
(= (logand (phoneme:flags ph) elmorph:consonant)))
(define-public (phoneme:diphthong? ph)
(= (logand (phoneme:flags ph) elmorph:diphthong)))
(define soundslike-transcription-list
'((1 . "a")
(2 . "e")
(3 . "i")
(4 . "o")
(5 . "u")
(6 . "b")
(7 . "g")
(8 . "d")
(9 . "z")
(10 . "t")
(11 . "k")
(12 . "l")
(13 . "m")
(14 . "n")
(15 . "x")
(16 . "p")
(17 . "r")
(18 . "s")
(19 . "t")
(20 . "f")
(21 . "h")
(22 . "P")
(23 . "b")
(24 . "d")
(25 . "g")
(26 . "sm")
(27 . "ts")
(28 . "tz")
(29 . "ngz")
(30 . "au")
(31 . "eu")))
(define-public (elstr->soundslike word)
(let ((phon-map (elstr->phonetic-map word)))
(apply string-append
(filter-map
(lambda (elt)
(assoc-ref soundslike-transcription-list (phoneme:code elt)))
phon-map))))
|