commit
bfc107e7e1
5 changed files with 206 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
THIS_DIR=$(dirname $(readlink -f $0)) |
||||
|
|
||||
|
. $THIS_DIR/venv/bin/activate |
||||
|
|
||||
|
PYTHONPATH="$THIS_DIR/payyans" |
||||
|
PYTHONPATH+=":$THIS_DIR/normalizer" |
||||
|
export PYTHONPATH |
||||
|
|
||||
|
bindAddress=${BIND_ADDRESS:-'127.0.0.1:8444'} |
||||
|
gunicorn server:api -b $bindAddress "$@" |
@ -0,0 +1,54 @@ |
|||||
|
import falcon |
||||
|
import json |
||||
|
import os |
||||
|
from libindic.payyans import Payyans |
||||
|
instance = Payyans() |
||||
|
|
||||
|
all_fonts = [ |
||||
|
'ambili', |
||||
|
'charaka', |
||||
|
'haritha', |
||||
|
'indulekha', |
||||
|
'karthika', |
||||
|
'manorama', |
||||
|
'matweb', |
||||
|
'nandini', |
||||
|
'panchari', |
||||
|
'revathi', |
||||
|
'template', |
||||
|
'uma', |
||||
|
] |
||||
|
|
||||
|
def convert(txt, font): |
||||
|
# txt = txt.replace("ൺ", "ണ്") \ |
||||
|
# .replace("ൻ", "ന്") \ |
||||
|
# .replace("ർ", "ര്") \ |
||||
|
# .replace("ൽ", "ല്") \ |
||||
|
# .replace("ൾ", "ള്") \ |
||||
|
# .replace("ോ", "ോ") \ |
||||
|
# .replace("ൊ", "ൊ") |
||||
|
|
||||
|
return instance.Unicode2ASCII(txt, font) |
||||
|
|
||||
|
class QResource: |
||||
|
def on_post(self, req, resp): |
||||
|
body = req.get_media() |
||||
|
text = body.get( 'text' ) |
||||
|
font_name = body.get( 'font' ) |
||||
|
if( font_name not in all_fonts ): |
||||
|
raise falcon.HTTPBadRequest('Invalid font') |
||||
|
resp.set_header('content-type', 'application/json; charset=UTF-8') |
||||
|
data = { } |
||||
|
data['ascii'] = convert(text, font_name ) |
||||
|
resp.body = json.dumps( data, default=str ) |
||||
|
|
||||
|
|
||||
|
class RedirectingResource: |
||||
|
def on_get(self, req, resp): |
||||
|
raise falcon.HTTPMovedPermanently('/index.html') |
||||
|
|
||||
|
api = falcon.API() |
||||
|
api.add_route('/', RedirectingResource()) |
||||
|
api.add_static_route('/', os.path.dirname(os.path.realpath(__file__)) + '/static' ) |
||||
|
api.add_route('/api/a2u', QResource()) |
||||
|
|
@ -0,0 +1,78 @@ |
|||||
|
const { createApp } = Vue; |
||||
|
|
||||
|
const fontsMap = { |
||||
|
ambili: "FML-TTambili", |
||||
|
charaka: "FML-TTRevathi", |
||||
|
haritha: "haritha", |
||||
|
indulekha: "FML-TTindulekha", |
||||
|
karthika: "FML-TTkarthika", |
||||
|
manorama: "manorama", |
||||
|
matweb: "matweb", |
||||
|
nandini: "FML-TTnandini", |
||||
|
panchari: "panchari", |
||||
|
revathi: "FML-TTrevathi", |
||||
|
uma: "FML-TTkaumudi", |
||||
|
}; |
||||
|
|
||||
|
createApp({ |
||||
|
data() { |
||||
|
return { |
||||
|
form: { |
||||
|
text: `ചെണ്ടമേളം
|
||||
|
കുഞ്ചൻ നമ്പ്യാർ |
||||
|
മഞ്ഞൾ പ്രസാദം |
||||
|
തിങ്കളാഴ്ച |
||||
|
`,
|
||||
|
font: "karthika", |
||||
|
}, |
||||
|
allFonts: Object.keys(fontsMap), |
||||
|
asciiTxt: "", |
||||
|
asciiFont: "", |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
async onSubmit() { |
||||
|
const res = await fetch("/api/a2u", { |
||||
|
method: "post", |
||||
|
body: JSON.stringify(this.form), |
||||
|
headers: { |
||||
|
"Content-type": "application/json", |
||||
|
}, |
||||
|
}); |
||||
|
const data = await res.json(); |
||||
|
this.asciiTxt = data.ascii; |
||||
|
this.asciiFont = fontsMap[this.form.font]; |
||||
|
}, |
||||
|
correctOldChillu(e) { |
||||
|
return (e = e |
||||
|
.replace("ൺ", "ണ്") |
||||
|
.replace("ൻ", "ന്") |
||||
|
.replace("ർ", "ര്") |
||||
|
.replace("ൽ", "ല്") |
||||
|
.replace("ൾ", "ള്") |
||||
|
.replace("ോ", "ോ") |
||||
|
.replace("ൊ", "ൊ")); |
||||
|
}, |
||||
|
correctNewChillu(e) { |
||||
|
return (e = e |
||||
|
.replaceAll("ണ്", "ൺ") |
||||
|
.replaceAll("ന്", "ൻ") |
||||
|
.replaceAll("ര്", "ർ") |
||||
|
.replaceAll("ല്", "ൽ") |
||||
|
.replaceAll("ള്", "ൾ") |
||||
|
.replaceAll("ോ", "ോ") |
||||
|
.replaceAll("ൊ", "ൊ") |
||||
|
.replaceAll("൦", "0") |
||||
|
.replaceAll("൧", "1") |
||||
|
.replaceAll("൨", "2") |
||||
|
.replaceAll("൩", "3") |
||||
|
.replaceAll("൪", "4") |
||||
|
.replaceAll("൫", "5") |
||||
|
.replaceAll("൬", "6") |
||||
|
.replaceAll("൭", "7") |
||||
|
.replaceAll("൮", "8") |
||||
|
.replaceAll("൯", "9")); |
||||
|
}, |
||||
|
}, |
||||
|
}).mount("#app"); |
@ -0,0 +1,29 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8" /> |
||||
|
<meta name="viewport" content="width=device-width" /> |
||||
|
<title>Ascii to unicode converter</title> |
||||
|
<link rel="stylesheet" href="https://unpkg.com/mvp.css@1.12/mvp.css" /> |
||||
|
<style type="text/css" media="screen"> |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<main id="app"> |
||||
|
<hr /> |
||||
|
|
||||
|
<form accept-charset="utf-8" v-on:submit.prevent="onSubmit"> |
||||
|
<select v-model="form.font"> |
||||
|
<option v-for="font in allFonts" :value="font">{{font}}</option> |
||||
|
</select> |
||||
|
<textarea v-model="form.text" rows="4"> |
||||
|
</textarea> |
||||
|
<button type="submit">Submit</button> |
||||
|
<textarea rows="8" :style="{'font-family': asciiFont}" v-model="asciiTxt" ></textarea> |
||||
|
</form> |
||||
|
</main> |
||||
|
|
||||
|
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script> |
||||
|
<script src="./app.js" charset="utf-8"></script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,33 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
|
||||
|
from libindic.payyans import Payyans |
||||
|
instance = Payyans() |
||||
|
|
||||
|
from libindic.normalizer import Normalizer |
||||
|
normalizer = Normalizer() |
||||
|
|
||||
|
test_words = [ |
||||
|
'തിങ്കളാഴ്ച ', |
||||
|
# 'ചെണ്ടമേളം ', |
||||
|
# ' കുഞ്ചൻ നമ്പ്യാർ ', |
||||
|
] |
||||
|
|
||||
|
|
||||
|
|
||||
|
def test_normalizer(): |
||||
|
for txt in test_words: |
||||
|
out = normalizer.normalize(txt) |
||||
|
print(list(txt), list(out)) |
||||
|
|
||||
|
def test_u2a(): |
||||
|
for txt in test_words: |
||||
|
out = instance.Unicode2ASCII(txt, 'karthika') |
||||
|
print(list(txt), list(out)) |
||||
|
|
||||
|
|
||||
|
def main(): |
||||
|
test_normalizer() |
||||
|
test_u2a() |
||||
|
|
||||
|
|
||||
|
main() |
Loading…
Reference in new issue