3 # -*- encoding: utf-8 -*-
5 import sys
, string
, codecs
, xml
, re
, Ft
;
6 from Ft
.Xml
.XPath
import Evaluate
;
8 sys
.stdout
= codecs
.getwriter('utf-8')(sys
.stdout
);
9 sys
.stderr
= codecs
.getwriter('utf-8')(sys
.stderr
);
12 # This class implements the HTML interface for the
13 # forms. If you want to change how they look, make
19 def display(self
, post_data
): #{
21 if post_data
['committing'] == 'yes': #{
22 left_entrada
= self
.show_entrada(post_data
, 'left');
23 bidix_entrada
= self
.show_entrada(post_data
, 'bidix');
24 right_entrada
= self
.show_entrada(post_data
, 'right');
27 print left_entrada
.replace('<', '<').replace('>', '>');
29 print bidix_entrada
.replace('<', '<').replace('>', '>');
31 print right_entrada
.replace('<', '<').replace('>', '>');
34 selected_pair
= post_data
['selected_pair'];
35 pairs
= post_data
['pairs'];
36 post_data
['left_dictionary'].append(left_entrada
);
37 post_data
['bidix_dictionary'].append(bidix_entrada
);
38 post_data
['right_dictionary'].append(right_entrada
);
40 print '<a href="http://xixona.dlsi.ua.es:8080/">again!</a>';
45 #print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
48 print ' <title>Apertium dictionary management</title>';
49 print ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ';
50 print ' <link rel="stylesheet" type="text/css" href="/static/styles/default.css"/>';
51 print ' <script src="/static/js/boxover.js"></script> ';
54 print '<form action="add" method="POST" name="dixform">';
55 ######################################################################################################
57 ######################################################################################################
58 print '<div class="header">';
59 print ' <div class="leftm">';
60 print ' <a href="http://xixona.dlsi.ua.es:8080/">Home</a>';
62 print ' <div class="middlem"> <!-- Header -->';
63 print ' Language pair: <select name="selected_pair" onChange="dixform.submit();">';
64 for pair
in post_data
['pairs'].keys(): #{
65 if pair
== post_data
['selected_pair']: #{
66 print ' <option value="' + pair
+ '" selected>' + pair
+ '</option>';
68 print ' <option value="' + pair
+ '">' + pair
+ '</option>';
72 print ' Part-of-speech: <select name="selected_tag" onChange="dixform.submit();">';
73 for tag
in post_data
['tags'].keys(): #{
74 if tag
== post_data
['selected_tag']: #{
75 print ' <option value="' + tag
+ '" selected>' + tag
+ '</option>';
77 print ' <option value="' + tag
+ '">' + tag
+ '</option>';
82 print ' <div class="rightm">';
83 print ' ca · en · es';
86 ######################################################################################################
88 ######################################################################################################
89 print '<div class="container800">';
90 print ' <div class="row">';
91 print ' <div class="leftm"> <!-- Left -->';
92 print ' <div class="container">';
93 print ' <div class="row">';
94 print ' <div class="left">';
95 print ' Lemma:<sup><span class="tooltip" title="header=[Lemma] body=[Type in the lemma, or citation form of the word you wish to add.]">?</span></sup>';
97 print ' <div class="left">';
98 print ' <input type="text" name="left_lemma" value="' + post_data
['left_lemma'] + '">';
101 print ' <div class="row">';
102 print ' <div class="left">';
103 print ' Paradigm:<sup><span class="tooltip" title="header=[Paradigm] body=[Paradigms define how a word inflects, select the one that fits the lemma you added.]">?</span></sup>';
105 print ' <div class="left">';
106 print ' <select name="left_paradigm">';
107 for left_p
in post_data
['left_paradigms']: #{
108 if post_data
['left_display_mode'] == 'list' and left_p
not in post_data
['left_glosses']: #{
111 if left_p
== post_data
['left_paradigm']: #{
112 if left_p
in post_data
['left_glosses']: #{
113 print ' <option value="' + left_p
+ '" selected>' + post_data
['left_glosses'][left_p
] + '</option>';
115 print ' <option value="' + left_p
+ '" selected>' + left_p
+ '</option>';
117 if left_p
in post_data
['left_glosses']: #{
118 print ' <option value="' + left_p
+ '">' + post_data
['left_glosses'][left_p
] + '</option>';
120 print ' <option value="' + left_p
+ '">' + left_p
+ '</option>';
127 print ' <div class="row">';
128 print ' <div class="left">';
129 print ' Comment:<sup><span class="tooltip" title="header=[Comment] body=[Optional comment or gloss.]">?</span></sup>';
131 print ' <div class="left">';
132 print ' <input type="text" name="left_comment" value="' + post_data
['left_comment'] + '">';
136 print ' <div class="inflection">';
138 self
.show_preview(post_data
, 'left');
143 #################################################################################################
144 print ' <!-- Bidix side -->';
145 print ' <div class="middlem">';
146 print ' <div class="row">';
147 print ' <div class="cell">';
148 if post_data
['restriction'] != 'LR' and post_data
['restriction'] != 'RL': #{
149 print ' <input type="radio" name="restriction" value="none" checked/>←→';
151 print ' <input type="radio" name="restriction" value="none" />←→';
155 print ' <div class="row">';
156 print ' <div class="cell">';
157 if post_data
['restriction'] == 'LR': #{
158 print ' <input type="radio" name="restriction" value="LR" checked/>→→';
160 print ' <input type="radio" name="restriction" value="LR" />→→';
164 print ' <div class="row">';
165 print ' <div class="cell">';
166 if post_data
['restriction'] == 'RL': #{
167 print ' <input type="radio" name="restriction" value="RL" checked/>←←';
169 print ' <input type="radio" name="restriction" value="RL" />←←';
173 print ' <div class="row">';
174 print ' <input type="reset" name="clear_box" value="Clear" />';
175 print ' <input type="submit" name="preview_box" value="Preview" />';
176 print ' <input type="submit" name="commit_box" value="Commit" />';
180 ############################################################################################
181 print ' <div class="leftm"> <!-- Right -->';
182 print ' <div id="left" class="container">';
183 print ' <div class="row">';
184 print ' <div class="left">';
185 print ' Lemma:<sup><span class="tooltip" title="header=[Lemma] body=[Type in the lemma, or citation form of the word you wish to add.]">?</span></sup>';
187 print ' <div class="left">';
188 print ' <input type="text" name="right_lemma" value="' + post_data
['right_lemma'] + '">';
191 print ' <div class="row">';
192 print ' <div class="left">';
193 print ' Paradigm:<sup><span class="tooltip" title="header=[Paradigm] body=[Paradigms define how a word inflects, select the one that fits the lemma you added.]">?</span></sup>';
195 print ' <div class="left">';
196 print ' <select name="right_paradigm">';
197 for right_p
in post_data
['right_paradigms']: #{
198 if post_data
['right_display_mode'] == 'list' and right_p
not in post_data
['right_glosses']: #{
201 if right_p
== post_data
['right_paradigm']: #{
202 if right_p
in post_data
['right_glosses']: #{
203 print ' <option value="' + right_p
+ '" selected>' + post_data
['right_glosses'][right_p
] + '</option>';
205 print ' <option value="' + right_p
+ '" selected>' + right_p
+ '</option>';
207 if right_p
in post_data
['right_glosses']: #{
208 print ' <option value="' + right_p
+ '">' + post_data
['right_glosses'][right_p
] + '</option>';
210 print ' <option value="' + right_p
+ '">' + right_p
+ '</option>';
217 print ' <div class="row">';
218 print ' <div class="left">';
219 print ' Comment:<sup><span class="tooltip" title="header=[Comment] body=[Optional comment or gloss.]">?</span></sup>';
221 print ' <div class="left">';
222 print ' <input type="text" name="right_comment" value="' + post_data
['right_comment'] + '">';
226 print ' <div class="inflection">';
227 self
.show_preview(post_data
, 'right');
233 ###############################################################################################
234 # Footer to show entradas
235 ###############################################################################################
236 print '<div class="row">';
237 print ' <div class="leftm">';
239 left_entrada
= self
.show_entrada(post_data
, 'left');
241 print left_entrada
.replace('<', '<').replace('>', '>');
244 print ' <div class="middlem">';
246 bidix_entrada
= self
.show_entrada(post_data
, 'bidix');
248 print bidix_entrada
.replace('<', '<').replace('>', '>');
251 print ' <div class="rightm">';
253 right_entrada
= self
.show_entrada(post_data
, 'right');
255 print right_entrada
.replace('<', '<').replace('>', '>');
267 def show_preview(self
, post_data
, _side
): #
268 print >> sys
.stderr
, 'right paradigm: ' , post_data
['right_paradigm'];
269 p
= _side
+ '_paradigm';
270 if post_data
['previewing'] == 'on': #{
271 paradigm
= post_data
[_side
+ '_dictionary'].get_paradigm(post_data
[p
], post_data
['selected_tag']);
272 if type(paradigm
) == type(None): #{
275 if type(paradigm
.get_stems()) != type(None): #{
276 for s
in post_data
[_side
+ '_paradigms'][paradigm
.name
].get_stems(): #{
277 shows
= post_data
[_side
+ '_dictionary'].get_tag_by_tag(post_data
['selected_tag']).get_list();
279 if len(shows
) > 0: #{
280 for show
in post_data
[_side
+ '_dictionary'].get_tag_by_tag(post_data
['selected_tag']).get_list(): #{
282 print self
.incondicional(post_data
[_side
+ '_lemma'], paradigm
.name
) + s
[0] + '<br />';
283 print '<span class="symbol_list">' + s
[1] + '</span>';
289 print self
.incondicional(post_data
[_side
+ '_lemma'], post_data
[_side
+ '_paradigm']) + s
[0] + '<br />';
290 print '<span class="symbol_list">' + s
[1] + '</span>';
300 def show_entrada(self
, post_data
, _side
): #{
301 if post_data
['previewing'] == 'on': #{
302 if _side
== 'bidix': #{
303 dictionary
= post_data
[_side
+ '_dictionary'];
304 _lemma1
= post_data
['left_lemma'];
305 _lemma2
= post_data
['right_lemma'];
307 if _lemma1
== '' or _lemma2
== '': #{
311 if type(dictionary
) != None: #{
312 _tag
= post_data
['selected_tag'];
314 _restriction
= post_data
['restriction'];
316 _paradigm1
= post_data
['left_dictionary'].get_paradigm(post_data
['left_paradigm'], _tag
);
317 _paradigm2
= post_data
['right_dictionary'].get_paradigm(post_data
['right_paradigm'], _tag
);
319 entrada
= dictionary
.generate_bidix_entrada(_lemma1
, _lemma2
, _paradigm1
, _paradigm2
, _tag
, _restriction
, _comment
, _author
);
325 if _side
== 'right' or _side
== 'left' and post_data
[_side
+ '_paradigm']: #{
326 dictionary
= post_data
[_side
+ '_dictionary'];
327 paradigm
= post_data
[_side
+ '_dictionary'].get_paradigm(post_data
[_side
+ '_paradigm'], post_data
['selected_tag']);
329 if type(paradigm
) != type(None): #{
330 _lemma
= post_data
[_side
+ '_lemma'];
331 _restriction
= post_data
['restriction'];
332 _paradigm
= paradigm
.name
;
333 _comment
= post_data
[_side
+ '_comment'];
336 if _restriction
== 'LR' and _side
== 'right': #{
337 entrada
= dictionary
.generate_monodix_entrada(_lemma
, _paradigm
, 'RL', _comment
, _author
);
338 elif _restriction
== 'RL' and _side
== 'right': #{
339 entrada
= dictionary
.generate_monodix_entrada(_lemma
, _paradigm
, 'LR', _comment
, _author
);
341 entrada
= dictionary
.generate_monodix_entrada(_lemma
, _paradigm
, _restriction
, _comment
, _author
);
351 def incondicional(self
, _lemma
, _paradigm
): #{
352 if _paradigm
.count('/') < 1: #{
356 paradigm
= _paradigm
.decode('utf-8');
357 bar_pos
= paradigm
.find('/');
358 und_pos
= paradigm
.find('_');
359 chr_str
= (und_pos
- bar_pos
) - 1;
360 l
= _lemma
.decode('utf-8');
361 r
= l
[0:(len(l
) - chr_str
)];
363 return r
.encode('utf-8');