Subversion Repositories navi

Compare Revisions

Regard whitespace Rev 278 → Rev 48

/GPL
File deleted
/LICENCE
File deleted
/ircbot/README.txt
File deleted
/ircbot/bot.py
File deleted
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: APACHE_LICENCE
===================================================================
--- APACHE_LICENCE (revision 278)
+++ APACHE_LICENCE (nonexistent)
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
Index: cliapp/README
===================================================================
--- cliapp/README (revision 278)
+++ cliapp/README (nonexistent)
@@ -1 +0,0 @@
-This app is only for use on the server.
Index: cliapp/tsimapiakcli.py
===================================================================
--- cliapp/tsimapiakcli.py (revision 278)
+++ cliapp/tsimapiakcli.py (nonexistent)
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-# This file is part of Tsim Apiak.
-#
-# Tsim Apiak is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public Licence as published by
-# the Free Software Foundation, either version 3 of the Licence, or
-# (at your option) any later version.
-#
-# In addition to this, you must also comply with clause 4 of the
-# Apache Licence, version 2.0, concerning attribution. Where there
-# is a contradiction between the two licences, the GPL
-# takes preference.
-#
-# Tsim Apiak 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 Tsim Apiak. If not, see .
-
-from tsimapiak import translate
-import sys
-
-for line in sys.stdin:
- try:
- line = line.decode("utf-8")
- except:
- line = line.decode("iso-8859-1")
- translated = []
- for word in translate.translatesent(line, "eng"):
- translated.append(word["translated"])
- translated = " | ".join(translated)
- print translated
-
/cliapp/tsimapiakcli.py
Property changes:
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: dev/naviparse.py
===================================================================
--- dev/naviparse.py (nonexistent)
+++ dev/naviparse.py (revision 48)
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+import re
+
+strings = [ u"oe", u"nga", u"k<0><1>am<2>e", u"t<0><1><2>ìng nari", u"s<0><1><2>i", u"t<0><1><2>ìng" ]
+
+infixes0 = [ u"awn", u"eyk", u"us", u"äp" ]
+infixes1 = [ u"ìyev", u"iyev", u"arm", u"asy", u"ilv", u"ìmv", u"imv" u"ìrm", u"irv", u"ìsy", u"aly", u"ary", u"ìly", u"ìry", u"ìlm", u"alm", u"am", u"ay", u"er", u"ìm", u"iv", u"ìy", u"ol" ]
+infixes2 = [ u"äng", u"ats", u"eiy", u"ei", u"uy" ]
+
+# Returns array with Word,Infix 0,Infix 1,Infix 2,Case,Gender,Number suffixes,Inclusive,Indefinite,Vocative (suffix),Plural,Adposition,Adject pre,Adject suff,am/ay/tu/vi/yu,adverbial,nominalise,sä,fne,lenited?
+def parsefix(original):
+ realword = u""
+ infix0 = u""
+ infix1 = u""
+ infix2 = u""
+ infix01 = u""
+ infix_1 = u""
+ infix_2 = u""
+ for eachword in strings:
+ regex = re.sub(u" ",u"[^ ]* [^ ]*",eachword)
+ regex = re.sub(u"^",u"[^ ]*",regex)
+ regex = re.sub(u"$",u"[^ ]*",regex)
+ regex = re.sub(u"<0><1>",u"[^ ]*",regex)
+ regex = re.sub(u"<2>",u"[^ ]*",regex)
+ if re.match(regex,original):
+ realword = eachword
+ break
+ if realword == u"":
+ return [u"[" + original + u"]",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+ else:
+ if re.search(u"<",realword):
+ beginning = re.sub(u"<0><1>.*",u"",realword)
+ middle = re.sub(u".*<0><1>(.*)<2>.*",ur"\1",realword)
+ end = re.sub(u".*<2>",u"",realword)
+ infix01 = re.sub(u".*?" + re.sub(u"<0><1>",u"([^ ]*)",re.sub(u"<2>",u"[^ ]*",realword)) + u".*?",ur"\1",original)
+ infix_2 = re.sub(u".*?" + re.sub(u"<2>",u"([^ ]*)",re.sub(u"<0><1>",u"[^ ]*",realword)) + u".*?",ur"\1",original)
+ for eachinfix in infixes0:
+ if infix01.startswith(eachinfix):
+ infix0 = eachinfix
+ infix_1 = infix01[len(eachinfix):]
+ break
+ else:
+ infix0 = u""
+ infix_1 = infix01
+ gotinfix1 = False
+ for eachinfix in infixes1:
+ if infix_1.startswith(eachinfix):
+ infix1 = eachinfix
+ infix_1 = infix_1[len(eachinfix):]
+ if infix_1 != u"":
+ if re.search(u"<0><1><2>",realword):
+ infix_2 = infix_1
+ else:
+ return [u"[" + original + u"]",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+ gotinfix1 = True
+ break
+ if gotinfix1 == False:
+ if re.search(u"<0><1><2>",realword):
+ if infix_1 == u"":
+ infix_2 = infix_1
+ infix1 = u""
+ elif infix_1 == u"":
+ infix1 = u""
+ else:
+ return [u"[" + original + u"]",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+ gotinfix2 = False
+ for eachinfix in infixes2:
+ if infix_2.startswith(eachinfix):
+ infix2 = infix_2
+ gotinfix2 = True
+ break
+ if gotinfix2 == False:
+ if infix_2.startswith(end):
+ suffixes = infix2[len(end) - 1:] + end
+ elif infix_2 == u"":
+ infix2 = u""
+ else:
+ return [u"[" + original + u"]",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+# print u"0" + unicode(infix0) + u" 1" + unicode(infix1) + u" 2" + unicode(infix2)
+ return [realword,infix0,infix1,infix2,u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+ else:
+ return [realword,u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u"",u""]
+
+print parsefix(u"oel")
+print parsefix(u"ngati")
+print parsefix(u"kameie")
+print parsefix(u"kìyevame")
+print parsefix(u"English")
+print parsefix(u"keykivame")
+print parsefix(u"tìsusiti")
+print parsefix(u"tayìng nari")
+print parsefix(u"tìtusìng")
Index: webapp/static/favicon.ico
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: webapp/static/favicon.ico
===================================================================
--- webapp/static/favicon.ico (revision 278)
+++ webapp/static/favicon.ico (nonexistent)
/webapp/static/favicon.ico
Property changes:
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: webapp/main.py
===================================================================
--- webapp/main.py (revision 278)
+++ webapp/main.py (revision 48)
@@ -1,37 +1,20 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
-# This file is part of Tsim Apiak.
-#
-# Tsim Apiak is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public Licence as published by
-# the Free Software Foundation, either version 3 of the Licence, or
-# (at your option) any later version.
-#
-# In addition to this, you must also comply with clause 4 of the
-# Apache Licence, version 2.0, concerning attribution. Where there
-# is a contradiction between the two licences, the GPL
-# takes preference.
-#
-# Tsim Apiak 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 Tsim Apiak. If not, see .
-
-from tsimapiak import parse, parsenum, translate
-import httplib
-import os
import tornado.httpserver
import tornado.ioloop
import tornado.web
+import tornado.autoreload
+import os
+import re
+from tsimapiak.parsenum import parse
+from tsimapiak.dbconnector import getnavilist
+
class Index(tornado.web.RequestHandler):
def get(self):
- self.render("templates/index.html")
+ self.redirect("/number")
class Number(tornado.web.RequestHandler):
def get(self):
@@ -42,69 +25,32 @@
num = self.get_argument("num").strip()
except:
self.redirect("/number")
- numout = parsenum.parse(num.replace(" ", ""))
+ numout = parse(num.replace(" ",""))
if numout == None:
- numoutt = -1
- else:
- numoutt = (numout["dec"], numout["oct"])
- self.render("templates/number.html", last=num, numout=numoutt)
+ numout = -1
+ self.render("templates/number.html", last=num, numout=numout)
class Restart(tornado.web.RequestHandler):
def get(self):
os.system("/usr/bin/restartnavi")
-class Parse(tornado.web.RequestHandler):
- def get(self):
- self.render("templates/parse.html", last="", out=None)
- def post(self):
- try:
- word = self.get_argument("word")
- except:
- self.redirect("/parse")
- out = parse.parsesent(word)
- self.render("templates/parse.html", last=word, out=out)
-
-class Translate(tornado.web.RequestHandler):
+class TestDB(tornado.web.RequestHandler):
def get(self):
- self.render("templates/translate.html", last="", out=None, lang="eng")
+ lis = getnavilist()
+ text = u"id | navi | infix | partofspeech
"
+ text += u"
".join(u" | ".join(unicode(y) for y in x) for x in lis)
+ self.write(text)
- def post(self):
- try:
- word = self.get_argument("word")
- lang = self.get_argument("lang")
- except:
- self.redirect("/translate")
- out = translate.translatesent(word, lang)
- self.render("templates/translate.html", last=word, out=out, lang=lang)
-class Errors(tornado.web.RequestHandler):
- def get_error_html(self, status_code, **kwargs):
- if status_code == 500:
- return "%(code)d: %(message)s" \
- "%(code)d: %(message)s

Either we are currently working on the server, or you uncovered a bug. Please check back later on. If you still get this error, please report this bug to us in the forum thread or on IRC." % {
- "code": status_code,
- "message": httplib.responses[status_code],
- }
- else:
- return "%(code)d: %(message)s" \
- "%(code)d: %(message)s" % {
- "code": status_code,
- "message": httplib.responses[status_code],
- }
-
-settings = {
- "static_path": os.path.join(os.path.dirname(__file__), "static")
-}
-
application = tornado.web.Application([
("/", Index),
("/number", Number),
("/restart", Restart),
- ("/parse", Parse),
- ("/translate", Translate)
-], **settings)
+ ("/testdb", TestDB)
+])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(1337)
+ tornado.autoreload.start()
tornado.ioloop.IOLoop.instance().start()
/webapp/templates/translate.html
File deleted
/webapp/templates/index.html
File deleted
/webapp/templates/parse.html
File deleted
/webapp/templates/base.html
1,28 → 1,6
<html>
<!--
# This file is part of Tsim Apiak.
#
# Tsim Apiak is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public Licence as published by
# the Free Software Foundation, either version 3 of the Licence, or
# (at your option) any later version.
#
# In addition to this, you must also comply with clause 4 of the
# Apache Licence, version 2.0, concerning attribution. Where there
# is a contradiction between the two licences, the GPL
# takes preference.
#
# Tsim Apiak 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 Tsim Apiak. If not, see <http://www.gnu.org/licenses/>.
-->
<head>
<title>Tsim Apiak - {% block title %}Title{% end %}</title>
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
<style type="text/css">
body {
background: #145179;
52,7 → 30,6
<body>
<div id="center">
<h1>Tsim Apiak</h1>
<h2>By Sh4rK and Muzer</h2>
<h2>{% block title %}Title{% end %}</h2>
{% block body %}Body{% end %}
</div>
/webapp/templates/number.html
3,28 → 3,6
{% block title %}Number translator{% end %}
 
{% block body %}
<!--
# This file is part of Tsim Apiak.
#
# Tsim Apiak is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public Licence as published by
# the Free Software Foundation, either version 3 of the Licence, or
# (at your option) any later version.
#
# In addition to this, you must also comply with clause 4 of the
# Apache Licence, version 2.0, concerning attribution. Where there
# is a contradiction between the two licences, the GPL
# takes preference.
#
# Tsim Apiak 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 Tsim Apiak. If not, see <http://www.gnu.org/licenses/>.
-->
 
<b>Na'vi number:</b><br />
<form action="/number" method="post">
<input id="num" name="num" type="text" value="{{last}}" style="width: 100%;" />
/tsimapiak/parse.py
File deleted
/tsimapiak/translate.py
File deleted
/tsimapiak/dbconnector.py
1,53 → 1,52
#!/usr/bin/python
# -*- coding: utf-8 -*-
# This file is part of Tsim Apiak.
#
# Tsim Apiak is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public Licence as published by
# the Free Software Foundation, either version 3 of the Licence, or
# (at your option) any later version.
#
# In addition to this, you must also comply with clause 4 of the
# Apache Licence, version 2.0, concerning attribution. Where there
# is a contradiction between the two licences, the GPL
# takes preference.
#
# Tsim Apiak 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 Tsim Apiak. If not, see <http://www.gnu.org/licenses/>.
 
 
import tornado.database
import re
 
def getnavilist():
ret = []
current = u""
db = tornado.database.Connection("127.0.0.1", "navi", user="navi", password="navi")
for row in db.query("""
SELECT *
SELECT *, CHAR_LENGTH(navi) AS NL
FROM `metaWords`
WHERE partOfSpeech <> 'num.' AND partOfSpeech <> 'prefix' AND partOfSpeech <> 'affix'
ORDER BY CHAR_LENGTH(navi) DESC"""):
if row["infixes"]:
ret.append({"id": row["id"], "navi": row["navi"], "infix": row["infixes"].lower(), "type": row["partOfSpeech"]})
ORDER BY NL DESC"""):
if row["partOfSpeech"] in (u"v.", u"vin.", u"vtr."):
current = unicode(row["ipa"])
current = current.replace(ur"ɛ",ur"e").replace(ur".",ur"").replace(ur"ɾ",ur"r") \
.replace(ur"ɪ",ur"ì").replace(ur"ˈ",ur"").replace(ur"'",ur"x") \
.replace(ur"ŋ",ur"ng").replace(ur"j",ur"y").replace(ur"ʔ",ur"'") \
.replace(ur"æ",ur"ä").replace(ur"ˌ",ur"").replace(ur"\t{ts}",ur"ts") \
.replace(ur"ṛ",ur"rr").replace(ur"ḷ",ur"ll").replace(ur"k̚",ur"k ") \
.replace(ur"p̚",ur"p ").replace(ur"t̚",ur"t ").replace(ur"'̚",ur"' ") \
.replace(u"\\",ur"").replace(ur"(",ur"").replace(ur")",ur"") \
.replace(ur"[",ur"").replace(ur"]",ur"").replace(ur" "," ") \
.strip()
current = re.sub(ur" or.*","",current)
current = re.sub(ur"z(.*)engk(.*)e",ur"z\1enk\2e",current)
current = re.sub(ur"t(.*)ì(m|n)\ ",ur"t\1ìng ",current)
current = current.split(ur"$cdot$")
if len(current) == 3:
current = current[0] + u"<0><1>" + current[1] + u"<2>" + current[2]
elif len(current) == 2:
current = current[0] + u"<0><1><2>" + current[1]
else:
ret.append({"id": row["id"], "navi": row["navi"], "infix": row["navi"].lower(), "type": row["partOfSpeech"]})
current = u"<0><1><2>" + current[0]
else:
current = unicode(row["navi"])
ret.append([row["id"], row["navi"], current, row["partOfSpeech"]])
db.close()
return ret
 
def translate(wid, language):
ret = None
def getnavi(word):
ret = []
db = tornado.database.Connection("127.0.0.1", "navi", user="navi", password="navi")
for row in db.query("""
SELECT *
FROM `localizedWords`
WHERE id = %s AND languageCode = %s""", wid, language):
ret = row["localized"]
break
if ret == None:
return u"ERROR: WORD NOT LOCALISED"
FROM `metaWords`
WHERE navi = ?""",word):
ret.append([row["id"],row["navi"], row["infix"], row["partOfSpeech"]])
db.close()
return ret
/tsimapiak/parsenum.py
1,173 → 1,81
#!/usr/bin/python
# -*- coding: utf-8 -*-
# This file is part of Tsim Apiak.
#
# Tsim Apiak is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public Licence as published by
# the Free Software Foundation, either version 3 of the Licence, or
# (at your option) any later version.
#
# In addition to this, you must also comply with clause 4 of the
# Apache Licence, version 2.0, concerning attribution. Where there
# is a contradiction between the two licences, the GPL
# takes preference.
#
# Tsim Apiak 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 Tsim Apiak. If not, see <http://www.gnu.org/licenses/>.
 
NUM = [u"kew",
u"'aw",
u"mune",
u"pxey",
u"tsìng",
u"mrr",
u"pukap",
u"kinä"]
 
NUMORD = [u"kew",
u"'aw",
u"mu",
u"pxey",
u"tsì",
u"mrr",
u"pu",
u"ki"]
 
REM = [u"aw",
u"mun",
u"pey",
u"sìng",
u"mrr",
u"fu",
u"hin"]
 
REMORD = [u"aw",
u"mu",
u"pey",
u"sì",
u"mrr",
u"fu",
u"hi"]
 
BASE = [u"",
u"me",
u"pxe",
u"tsì",
u"mrr",
u"pu",
u"ki"]
 
def parse(numin):
if u"mm" in numin:
return None
if (numin == u"") or ((numin[0] == u"a") and (numin[len(numin) - 1] == u"a")):
return None
prefs = []
posts = []
outoct = 0
outdec = 0
ret = {"word": {"id": 0, "navi": u"", "infix": u"", "type": u""}, "pref": [prefs], "post": [posts], "inf": [u"", u"", u""], "len": False, "dec": outdec, "oct": outoct}
if numin[0] == u"a":
prefs.append(u"a")
numin = numin[1:]
if numin[len(numin) - 1] == u"a":
posts.append(u"a")
numin = numin[:-1]
if numin[-2:] == u"ve":
posts.append(u"ve")
numin = numin[:-2]
 
#BASE numbers
for n in range(len(NUM)):
if u"ve" in posts:
if numin == NUMORD[n]:
outoct = n
outdec = n
ret["word"]["navi"] = unicode(outdec) + u"."
ret["dec"] = outdec
ret["oct"] = outoct
return ret
else:
if numin == NUM[n]:
outoct = n
outdec = n
ret["word"]["navi"] = unicode(outdec)
ret["dec"] = outdec
ret["oct"] = outoct
return ret
#other numbers
notbase = False
for n in range(len(BASE)):
if numin.startswith(BASE[n] + u"vozazam"):
outoct += (n + 1) * (10 ** 5)
outdec += (n + 1) * (8 ** 5)
if numin[len(BASE[n]) + 6:].startswith(u"mrr") or numin[len(BASE[n]) + 6:].startswith(u"me"):
numin = numin[len(BASE[n]) + 6:]
else:
numin = numin[len(BASE[n]) + 7:]
notbase = True
for n in range(len(BASE)):
if numin.startswith(BASE[n] + u"zazam"):
outoct += (n + 1) * (10 ** 4)
outdec += (n + 1) * (8 ** 4)
if numin[len(BASE[n]) + 4:].startswith(u"mrr") or numin[len(BASE[n]) + 4:].startswith(u"me"):
numin = numin[len(BASE[n]) + 4:]
else:
numin = numin[len(BASE[n]) + 5:]
notbase = True
for n in range(len(BASE)):
if numin.startswith(BASE[n] + u"vozam"):
outoct += (n + 1) * (10 ** 3)
outdec += (n + 1) * (8 ** 3)
if numin[len(BASE[n]) + 4:].startswith(u"mrr") or numin[len(BASE[n]) + 4:].startswith(u"me"):
numin = numin[len(BASE[n]) + 4:]
else:
numin = numin[len(BASE[n]) + 5:]
notbase = True
for n in range(len(BASE)):
if numin.startswith(BASE[n] + u"zam"):
outoct += (n + 1) * (10 ** 2)
outdec += (n + 1) * (8 ** 2)
if numin[len(BASE[n]) + 2:].startswith(u"mrr") or numin[len(BASE[n]) + 2:].startswith(u"me"):
numin = numin[len(BASE[n]) + 2:]
else:
numin = numin[len(BASE[n]) + 3:]
notbase = True
for n in range(len(BASE)):
if numin.startswith(BASE[n] + u"vol"):
outoct += (n + 1) * 10
outdec += (n + 1) * 8
numin = numin[len(BASE[n]) + 3:]
notbase = True
if numin.startswith(BASE[n] + u"vo"):
outoct += (n + 1) * 10
outdec += (n + 1) * 8
numin = numin[len(BASE[n]) + 2:]
notbase = True
if notbase:
for n in range(len(REM)):
if u"ve" in posts:
if numin == REMORD[n]:
outoct += n + 1
outdec += n + 1
numin = u""
else:
if numin == REM[n]:
outoct += n + 1
outdec += n + 1
numin = u""
if numin == u"":
ret["word"]["navi"] = unicode(outdec) if not u"ve" in posts else unicode(outdec) + u"."
ret["dec"] = outdec
ret["oct"] = outoct
return ret
else:
return None
 
if __name__ == "__main__":
print parse(u"mevolawve")
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import re
 
num = [u"kew",
u"'aw",
u"mune",
u"pxey",
u"tsìng",
u"mrr",
u"pukap",
u"kinä"]
 
rem = [u"aw",
u"mun",
u"pey",
u"sìng",
u"mrr",
u"fu",
u"hin"]
 
base = [u"",
u"me",
u"pxe",
u"tsì",
u"mrr",
u"pu",
u"ki"]
 
 
numre = \
u"^(?:(" + "|".join(base) + u")zazam??)?" + \
u"(?:(" + "|".join(base) + u")vozam??)?" + \
u"(?:(" + "|".join(base) + u")zam??)?" + \
u"(?:(" + "|".join(base) + u")vo(?:l(?=a|))?)?" + \
u"((?:" + "|".join(rem) + u")|" + \
u"(?:" + "|".join(num) + u"))?$"
numre = re.compile(numre)
 
def parse(numin):
if type(numin) != unicode:
return None
if numin == u"":
return None
numin = numin.replace(u"í",u"ì").replace(u"á",u"ä")
try:
mat = numre.match(numin).groups()
except:
return None
numout = 0
numoct = 0
try:
numout += rem.index(mat[4]) + 1
numoct += rem.index(mat[4]) + 1
except:
try:
numout += num.index(mat[4])
numoct += num.index(mat[4])
except: pass
try:
numout += (base.index(mat[3]) + 1) * 8
numoct += (base.index(mat[3]) + 1) * 10
except: pass
try:
numout += (base.index(mat[2]) + 1) * 8**2
numoct += (base.index(mat[2]) + 1) * 10**2
except: pass
try:
numout += (base.index(mat[1]) + 1) * 8**3
numoct += (base.index(mat[1]) + 1) * 10**3
except: pass
try:
numout += (base.index(mat[0]) + 1) * 8**4
numoct += (base.index(mat[0]) + 1) * 10**4
except: pass
return numout, numoct
 
 
if __name__ == "__main__":
print parse(u"mrrvolaw")
/tsimapiak/__init__.py
File deleted