summaryrefslogtreecommitdiff
path: root/lulua/report.py
diff options
context:
space:
mode:
Diffstat (limited to 'lulua/report.py')
-rw-r--r--lulua/report.py51
1 files changed, 34 insertions, 17 deletions
diff --git a/lulua/report.py b/lulua/report.py
index b25201d..0e5ec00 100644
--- a/lulua/report.py
+++ b/lulua/report.py
@@ -18,7 +18,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-import sys, argparse, logging, pickle, math
+import sys, argparse, logging, pickle, math, unicodedata
from gettext import GNUTranslations, NullTranslations
from decimal import Decimal
from fractions import Fraction
@@ -60,21 +60,6 @@ def arabnum (s):
m = {'0': '٠', '1': '١', '2': '٢', '3': '٣', '4': '٤', '5': '٥', '6': '٦', '7': '٧', '8': '٨', '9': '٩', ',': '٬', '.': '٫'}
return ''.join (map (lambda x: m.get (x, x), s))
-def clamp (v, lower, upper):
- return max (min (v, upper), lower)
-
-def blend (v, a, b):
- v = clamp (v, 0, 1)
- return (b-a)*v+a
-
-def blendn (v, *l):
- assert 0 <= v <= 1
- n = len (l)
- step = 1/(n-1)
- i = min (int (math.floor (v/step)), n-2)
- stretchedv = (v-i*step)/step
- return [blend (stretchedv, x, y) for x, y in zip (l[i], l[i+1])]
-
def render ():
parser = argparse.ArgumentParser(description='Create lulua report.')
parser.add_argument('-c', '--corpus', nargs='+', metavar='FILE', help='Corpus metadata files')
@@ -88,9 +73,41 @@ def render ():
env.filters['approx'] = approx
env.filters['numspace'] = numspace
env.filters['arabnum'] = arabnum
- env.filters['blendn'] = blendn
env.filters['fraction'] = fraction
+ # Map global variables to Arabic letter romanizations, so we can use
+ # them easily in text.
+ # Taken from Abu-Chacra’s Arabic – An Essential Grammar. It’s
+ # too difficult for now to write a general-purpose romanization
+ # function, because it would need a dictionary.
+ letterNames = {
+ 'Hamzah': ('Hamzah', 'ء'),
+ 'Alif': ('ᵓAlif', 'ا'),
+ 'Alifhamzah': ('ᵓAlif-hamzah', 'أ'),
+ 'Wawhamzah': ('Wa\u0304w-hamzah', 'ؤ'),
+ 'Yahamzah': ('Ya\u0304ᵓ-hamzah', 'ئ'),
+ 'Ba': ('Baᵓ', 'ب'),
+ 'Ta': ('Taᵓ', 'ت'),
+ 'Tha': ('T\u0331aᵓ', 'ث'),
+ 'Ra': ('Raᵓ', 'ر'),
+ 'Dal': ('Da\u0304l', 'د'),
+ 'Dhal': ('D\u0331a\u0304l', 'ذ'),
+ 'Qaf': ('Qa\u0304f', 'ق'),
+ 'Lam': ('La\u0304m', 'ل'),
+ 'Lamalif': ('La\u0304m-ᵓalif', 'لا'),
+ 'Mim': ('Mi\u0304m', 'م'),
+ 'Nun': ('Nu\u0304n', 'ن'),
+ 'Waw': ('Wa\u0304w', 'و'),
+ 'Ya': ('Ya\u0304ᵓ', 'ي'),
+ 'Tamarbutah': ('Ta\u0304ᵓ marbu\u0304t\u0323ah', 'ة'),
+ 'Alifmaqsurah': ('ᵓAlif maqs\u0323u\u0304rah', 'ى'),
+ }
+ for k, (romanized, arabic) in letterNames.items ():
+ env.globals[k] = f'{romanized} <bdo lang="ar">({arabic})</bdo>'
+ env.globals[k.lower ()] = env.globals[k].lower ()
+ env.globals[k + '_'] = romanized
+ env.globals[k.lower () + '_'] = romanized.lower ()
+
corpus = []
for x in args.corpus:
with open (x) as fd: