aboutsummaryrefslogtreecommitdiff
path: root/src/ellinika/elmorph-public.scm
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))))

Return to:

Send suggestions and report system problems to the System administrator.