texlive[74548] Master: aramaic-serto (9mar25)
commits+karl at tug.org
commits+karl at tug.org
Sun Mar 9 21:51:22 CET 2025
Revision: 74548
https://tug.org/svn/texlive?view=revision&revision=74548
Author: karl
Date: 2025-03-09 21:51:21 +0100 (Sun, 09 Mar 2025)
Log Message:
-----------
aramaic-serto (9mar25)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/aramaic-serto/assyr.font
trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.font
trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.py
trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.pdf
trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.ptex
trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assy.afm
trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assyrb10.afm
trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/serto10.afm
trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/sertob10.afm
trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/syriacvowels.mf
trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/assy.tfm
trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/assyrb10.tfm
trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/serto10.tfm
trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/sertob10.tfm
trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/assy.pfb
trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/assyrb10.pfb
trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/serto10.pfb
trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/sertob10.pfb
trunk/Master/texmf-dist/tex/latex/aramaic-serto/serto.sty
trunk/Master/tlpkg/libexec/ctan2tds
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/aramaic-serto/README.txt
trunk/Master/texmf-dist/doc/latex/aramaic-serto/test.mf
Removed Paths:
-------------
trunk/Master/texmf-dist/doc/latex/aramaic-serto/README
trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/test.mf
Deleted: trunk/Master/texmf-dist/doc/latex/aramaic-serto/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/README 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/README 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,7 +0,0 @@
-This package contains two fonts and a preprocessor to typeset the Syriac (Aramaic) language.
-For more information please consult the documentation sertodoc.pdf
-
-Copyright 2001-2013 (c) Johannes Heinecke
-This Material is subjec to the LaTeX Project Public License 1.3
-(http://ctan.org/license/lppl1.3)
-
Added: trunk/Master/texmf-dist/doc/latex/aramaic-serto/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/README.txt (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/README.txt 2025-03-09 20:51:21 UTC (rev 74548)
@@ -0,0 +1,9 @@
+This package contains two fonts and a preprocessor to typeset the Syriac (Aramaic) language.
+For more information please consult the documentation sertodoc.pdf
+
+Version 1.3.2
+
+Copyright 2001-2025 (c) Johannes Heinecke
+This Material is subjec to the LaTeX Project Public License 1.3
+(http://ctan.org/license/lppl1.3)
+
Property changes on: trunk/Master/texmf-dist/doc/latex/aramaic-serto/README.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/aramaic-serto/assyr.font
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/assyr.font 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/assyr.font 2025-03-09 20:51:21 UTC (rev 74548)
@@ -30,9 +30,9 @@
#:u `e.so.so 27 27 27 27 2
:u waw+`e.so.so 79+27 79+27 79+27 79+27 0
:uw waw+`e.so.so 79+27 79+27 79+27 79+27 0
+:E revo.so-arrikha 25 25 25 25 2
-
~ blank 32 32 32 32 0
. . 46 46 46 46 0
#: : 58 58 58 58 0
@@ -145,6 +145,7 @@
' \raise.2ex\hbox{$\rhook$}
b
g
+g G
d
h
w
@@ -151,6 +152,7 @@
z
.h \d{h}
.t \d{t}
+.T \d{t}
y
^k \v{c}
_k \b{h}
Modified: trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.font
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.font 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.font 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,4 +1,4 @@
-# incput coidng for serto[b]10.mf
+# incput coding for serto[b]10.mf
# preprocessor serto.py
# Designed and (c) by Johannes Heinecke
@@ -9,7 +9,7 @@
# Corrections by Patrick Charbonneau 22th October 03
# pcharbon(at)fas(dot)harvard(dot)edu with the help of npatel(at)fas(dot)harvard(dot)edu
-# Version 0.5 as of 2nd November 2003
+# Version 0.6 as of 9th March November 2025
#FONT: 10x20
# coding name: isolated initial medial final link
@@ -49,7 +49,7 @@
:ow waw+dot 79+13 79+13 80+13 80+13 0
:u `e.so.so 27 27 27 27 2
:uw waw+`e.so.so 79+27 79+27 80+27 80+27 0
-
+:E revo.so-arrikha 25 25 25 25 2
~ blank 32 32 32 32 0
. . 46 46 46 46 0
: : 58 58 58 58 0
@@ -155,6 +155,7 @@
t+ \b{t}
' \raise.2ex\hbox{$\rhook$}
b
+G g
g
d
h
@@ -162,6 +163,7 @@
z
.h \d{h}
.t \d{t}
+.T \d{t}
y
k
l
Modified: trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.py
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.py 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/serto.py 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,9 +1,8 @@
-#!/usr/bin/env python
-# -*- coding: ISO-8859-1 -*-
+#!/usr/bin/env python3
# Preprocessor for serto font for the use with LaTeX.
-# Copyright 2001-2013 by Johannes Heinecke
+# Copyright 2001-2020 by Johannes Heinecke
# you can use this and change it as you wish, under the condition
# that the original copyright line is not deleted
@@ -12,423 +11,512 @@
# 12 July 2003: correction on stretch
# 29 September 2007: Possibility to typeset two identical letters without a qusshaya
# 31 March 2013: add SERTOFONTDIR environment variable
+# 18 April 2020: finally adapted to python3
+# 15 December 2020: minor corrections
-FONTFILESERTO="serto.font" # specify absolute path
-FONTFILECHALD="assyr.font"
-#FONTFILEESTR="estrangelo.font"
+import re
+import sys
+import os
+version="1.3.2"
+
+mydir = os.path.dirname(__file__)
+if not mydir:
+ mydir = "."
+FONTFILESERTO = mydir + "/serto.font" # specify absolute path
+FONTFILECHALD = mydir + "/assyr.font"
+#FONTFILEESTRA = mydir + "/estrangelo.font"
+
+print(FONTFILESERTO, file=sys.stderr)
# use the environment variable SERTOFONTDIR to specify the directory of the *.font files
-import re, sys, string, os.path
+
# translating syriac unicode points to serto codings
class Letter:
def __init__(self,
- coding, # what coding to use in .ptex-file
- name, # name of the letter
- isolated, # what character to take in isolated usage
- initial, # what character to take in word-initial usage
- medial, # what character to take in word-medial usage
- final, # what character to take in word-final usage
- link): # does it link to the following (# link 0: next letter is initial, 1: next letter is medial, 2: ignore, 8: character is a superscript symbol 9: character is a subscript symbol
- self.coding = coding
- self.name = name
- self.isolated = map(int, isolated.split('+'))
- self.initial = map(int, initial.split('+'))
- self.medial = map(int, medial.split('+'))
- self.final = map(int, final.split('+'))
- self.link = int(link)
-
- if self.isolated[0] == -1: self.isolated = None
- if self.initial[0] == -1: self.initial = None
- if self.medial[0] == -1: self.medial = None
- if self.final[0] == -1: self.final = None
- #sys.stderr.write("%s:%s-%s-%s-%s\n" \
- # % (name,self.isolated,self.initial,self.medial,self.final))
-
+ coding, # what coding to use in .ptex-file
+ name, # name of the letter
+ isolated, # what character to take in isolated usage
+ initial, # what character to take in word-initial usage
+ medial, # what character to take in word-medial usage
+ final, # what character to take in word-final usage
+ link): # does it link to the following (# link 0: next letter is initial, 1: next letter is medial, 2: ignore, 8: character is a superscript symbol 9: character is a subscript symbol
+
+ self.coding = coding
+ self.name = name
+ self.isolated = list(map(int, isolated.split('+')))
+ self.initial = list(map(int, initial.split('+')))
+ self.medial = list(map(int, medial.split('+')))
+ self.final = list(map(int, final.split('+')))
+ self.link = int(link)
+
+ if self.isolated[0] == -1: self.isolated = None
+ if self.initial[0] == -1: self.initial = None
+ if self.medial[0] == -1: self.medial = None
+ if self.final[0] == -1: self.final = None
+ #sys.stderr.write("%s:%s-%s-%s-%s\n" \
+ # % (name,self.isolated,self.initial,self.medial,self.final))
+
def getcontext(self, ctx):
- if ctx == 0: return self.isolated[0]
- elif ctx == 1: return self.initial[0]
- elif ctx == 2: return self.medial[0]
- elif ctx == 3: return self.final[0]
+ if ctx == 0: return self.isolated[0]
+ elif ctx == 1: return self.initial[0]
+ elif ctx == 2: return self.medial[0]
+ elif ctx == 3: return self.final[0]
def getChar(self, ctx):
- if ctx == 0:
- if not self.isolated: return ['']
- return map(lambda x: "%c" % x, self.isolated)
- #return int(self.isolated[0])
- elif ctx == 1:
- if not self.initial: return ['']
- return map(lambda x: "%c" % x, self.initial)
- #return int(self.initial[0])
- elif ctx == 2:
- #sys.stderr.write("MEDIAL %s\n" % self.medial)
- if not self.medial:
- #sys.stderr.write("NONE:e\n")
- return ['']
- return map(lambda x: "%c" % x, self.medial)
- #return int(self.medial[0])
- elif ctx == 3:
- if not self.final: return ['']
- return map(lambda x: "%c" % x, self.final)
- #return int(self.final[0])
+ if ctx == 0:
+ if not self.isolated: return ['']
+ return map(lambda x: "%c" % x, self.isolated)
+ #return int(self.isolated[0])
+ elif ctx == 1:
+ if not self.initial: return ['']
+ return map(lambda x: "%c" % x, self.initial)
+ #return int(self.initial[0])
+ elif ctx == 2:
+ #sys.stderr.write("MEDIAL %s\n" % self.medial)
+ if not self.medial:
+ #sys.stderr.write("NONE:e\n")
+ return ['']
+ return map(lambda x: "%c" % x, self.medial)
+ #return int(self.medial[0])
+ elif ctx == 3:
+ if not self.final: return ['']
+ return map(lambda x: "%c" % x, self.final)
+ #return int(self.final[0])
class Serto:
def __init__(self, elatex=0):
- self.elatex=elatex # eLaTeX needs \TeXXeTstate=1
- self.tabelle = {} # style: {"_d": Letter-Object}
- self.transtabelle = {} # style: "_d": \d{d}
- self.usingUTF8 = False
+ self.elatex=elatex # eLaTeX needs \TeXXeTstate=1
+ self.tabelle = {} # style: {"_d": Letter-Object}
+ self.transtabelle = {} # style: "_d": \d{d}
+ #self.usingUTF8 = False
- self.inlineS = re.compile("(<S>)(.*?)(</S>)")
- self.inlineT = re.compile("(<T>)(.*?)(</T>)")
- self.inlineST = re.compile("(<ST>)(.*?)(</ST>)")
+ self.inlineS = re.compile("(<S>)(.*?)(</S>)")
+ self.inlineT = re.compile("(<T>)(.*?)(</T>)")
+ self.inlineST = re.compile("(<ST>)(.*?)(</ST>)")
- self.inlineC = re.compile("(<C>)(.*?)(</C>)")
- self.inlineCT = re.compile("(<CT>)(.*?)(</CT>)")
+ self.inlineC = re.compile("(<C>)(.*?)(</C>)")
+ self.inlineCT = re.compile("(<CT>)(.*?)(</CT>)")
- self.inlineE = re.compile("(<E>)(.*?)(</E>)")
- self.inlineET = re.compile("(<ET>)(.*?)(</ET>)")
+ self.inlineE = re.compile("(<E>)(.*?)(</E>)")
+ self.inlineET = re.compile("(<ET>)(.*?)(</ET>)")
- self.tabelle["serto"] = {}
- self.transtabelle["serto"] = {}
- self.readfont(FONTFILESERTO,
- self.tabelle["serto"],
- self.transtabelle["serto"])
- #print self.tabelle["serto"]
+ self.tabelle["serto"] = {}
+ self.transtabelle["serto"] = {}
+ self.readfont(FONTFILESERTO,
+ self.tabelle["serto"],
+ self.transtabelle["serto"])
+ #print self.tabelle["serto"]
- self.tabelle["chaldean"] = {}
- self.transtabelle["chaldean"] = {}
- self.readfont(FONTFILECHALD,
- self.tabelle["chaldean"],
- self.transtabelle["chaldean"])
+ self.tabelle["chaldean"] = {}
+ self.transtabelle["chaldean"] = {}
+ self.readfont(FONTFILECHALD,
+ self.tabelle["chaldean"],
+ self.transtabelle["chaldean"])
- self.UnicodeTable = { 0x0710: "'",
- 0x0712: "b",
- 0x0713: "g",
- 0x0714: "g", #gamal garshuni
- 0x0715: "d",
- 0x0717: "h",
- 0x0718: "w",
- 0x0719: "z",
- 0x071a: ".h",
- 0x071b: ".t",
- 0x071c: ".t", # teth garshuni
- 0x071d: "y",
- 0x071f: "k",
- 0x0720: "l",
- 0x0721: "m",
- 0x0722: "n",
- 0x0723: "s",
- 0x0724: "s", # final semkath
- 0x0725: "`",
- 0x0726: "p",
- 0x0728: ".s",
- 0x0729: "q",
- 0x072a: "r",
- 0x072b: "^s",
- 0x072c: "t",
- 0x0308: "P", # syame
- 0x0730: "a",
- 0x0731: "A",
- 0x0732: ":a",
- 0x0733: "=a",
- 0x0734: "=A",
- 0x0735: ":=a",
- 0x0736: "e",
- 0x0737: "E",
- 0x0738: ":e",
- 0x0739: ":e",
- 0x073a: "i",
- 0x073b: "I",
- 0x073c: ":i",
- 0x073d: "u",
- 0x073e: "U",
- 0x073f: ":u",
- 0x0740: ":=a",
- 0x0741: "*",
- 0x0742: "+",
- #punctuation listed in unicode not completed implemented in serto
- 0x0700: ".:.",
- 0x0701: ".",
- 0x0702: ".",
- 0x0703: ":",
- 0x0704: ":",
- 0x0705: ":",
- 0x0706: ":",
- 0x0707: ":",
- 0x0708: ":",
- 0x0709: ":",
- 0x070D: ".X.",
- }
-
+ self.UnicodeTable = { 0x0710: "'",
+ 0x0712: "b",
+ 0x0713: "g",
+ 0x0714: "G", #gamal garshuni
+ 0x0715: "d",
+ 0x0717: "h",
+ 0x0718: "w",
+ 0x0719: "z",
+ 0x071a: ".h",
+ 0x071b: ".t",
+ 0x071c: ".T", # teth garshuni
+ 0x071d: "y",
+ 0x071f: "k",
+ 0x0720: "l",
+ 0x0721: "m",
+ 0x0722: "n",
+ 0x0723: "s",
+ 0x0724: "s", # final semkath
+ 0x0725: "`",
+ 0x0726: "p",
+ 0x0728: ".s",
+ 0x0729: "q",
+ 0x072a: "r",
+ 0x072b: "^s",
+ 0x072c: "t",
+ 0x0308: "P", # syame
+ 0x0730: "a",
+ 0x0731: "A",
+ 0x0732: ":a",
+ 0x0733: "=a",
+ 0x0734: "=A",
+ 0x0735: ":=a",
+ 0x0736: "e",
+ 0x0737: "E",
+ 0x0738: ":e",
+ 0x0739: ":e",
+ 0x073a: "i",
+ 0x073b: "I",
+ 0x073c: ":i",
+ 0x073d: "u",
+ 0x073e: "U",
+ 0x073f: ":u",
+ 0x0740: ":=a",
+ 0x0741: "*",
+ 0x0742: "+",
+ #punctuation listed in unicode not completed implemented in serto
+ 0x0700: ".:.",
+ 0x0701: ".",
+ 0x0702: ".",
+ 0x0703: ":",
+ 0x0704: ":",
+ 0x0705: ":",
+ 0x0706: ":",
+ 0x0707: ":",
+ 0x0708: ":",
+ 0x0709: ":",
+ 0x070D: ".X.",
+ }
- #print "zzzzzz",UnicodeTable
+ # used for unicode encoded fonts (xelatex) which
+ # chose initial/middle/final forms automatically
+ self.code2Unicode = {
+ "'": (0x710,),
+ "b": (0x712,),
+ "g": (0x713,),
+ "G": (0x714,), # gamal garshuni
+ "d": (0x715,),
+ "D": (0x716,), # dotless dalath (ambiguous with dotles rish)
+ "h": (0x717,),
+ "w": (0x718,),
+ "z": (0x719,),
+ ".h": (0x71a,),
+ ".t": (0x71b,),
+ ".T": (0x71c,), # teth garshuni
+ "y": (0x71d,),
+ "Y": (0x71e,),
+ "k": (0x71f,),
+ "l": (0x720,),
+ "m": (0x721,),
+ "n": (0x722,),
+ "s": (0x723,),
+ "S": (0x724,), # semkath final
+ "`": (0x725,),
+ "p": (0x726,),
+ ".s": (0x728,),
+ "q": (0x729,),
+ "r": (0x72a,),
+ "R": (0x716,), # dotless rish (ambiguous with dotles dalath)
+ #"R": (0x72a,),
+ "^s": (0x72b,),
+ "t": (0x72c,),
+
+ # greek vowel symbols above
+ "a": (0x730,),
+ "e": (0x736,),
+ "i": (0x73a,),
+ "=a": (0x733,),
+ "o": (0x718, 0x741),
+ "u": (0x73d,),
+
+ # greek vowel symbols below
+ "A": (0x731,),
+ "E": (0x737,),
+ "I": (0x73b,),
+ "=A": (0x734,),
+ "U": (0x73e,),
+ "P": (0x735,),
+
+ # eastern vowels
+ ":a": (0x732,),
+ ":e": (0x739,),
+ ":i": (0x73c,),
+ ":iy": (0x71d, 0x73c),
+ ":=a": (0x735,),
+ ":o": (0x741,),
+ ":ow": (0x718, 0x741),
+ ":u": (0x73c,),
+ ":uw": (0x718, 0x73c),
+
+ # tatweel
+ "-": (0x640,),
+
+ # linea occultans (not in the font)
+ "=": [],
+
+ # punctuation
+ ".": (0x701, ),
+ ":": (0x703, ),
+ ".X.": (0x70d, ),
+ ".:.": (0x700, ),
+ }
+
+
+ #print "zzzzzz",UnicodeTable
+
def readfont(self, filename, tabelle, transtabelle):
- dirname = os.environ.get("SERTOFONTDIR")
- if not dirname:
- dirname = os.path.dirname(sys.argv[0])
- #print "eeee", dirname
- fp = open("%s/%s" % (dirname, filename), "r")
- lines = fp.readlines()
- fp.close()
+ dirname = os.environ.get("SERTOFONTDIR")
+ if not dirname:
+ # no environment variable
+ fp = open("%s" % (filename), "r")
+ else:
+ fp = open("%s/%s" % (dirname, os.path.basename(filename)), "r")
+ lines = fp.readlines()
+ fp.close()
- #self.tabelle = {} # "_d": (isol, init, med, fin, link)
- #self.tabelle = {} # "_d": Letter-Object
- #self.transtabelle = {} # "_d": \d{d}
- self.fontname = ""
- status = "syriac"
- self.errct = 0
- for z in lines:
- if len(z) < 2:
- continue
- if z[0] == "#":
- if z[:6] == "#FONT:":
- a = string.split(z)
- self.fontname = string.strip(a[1])
- #self.textframe.thetext.config(font=self.fontname)
- #self.testlabel.config(font=self.fontname)
- elif z[:7] == "#TRANS:":
- status = "transliterate"
- continue
+ #self.tabelle = {} # "_d": (isol, init, med, fin, link)
+ #self.tabelle = {} # "_d": Letter-Object
+ #self.transtabelle = {} # "_d": \d{d}
+ self.fontname = ""
+ status = "syriac"
+ self.errct = 0
+ for z in lines:
+ if len(z) < 2:
+ continue
+ if z[0] == "#":
+ if z[:6] == "#FONT:":
+ a = z.split()
+ self.fontname = a[1].strip()
+ #self.textframe.thetext.config(font=self.fontname)
+ #self.testlabel.config(font=self.fontname)
+ elif z[:7] == "#TRANS:":
+ status = "transliterate"
+ continue
- felder = string.split(z)
- if status == "syriac":
- if len(felder) < 7:
- self.errct = self.errct + 1
- print "ERROR:", z
- else:
- #print z, int(felder[2])
- #self.tabelle[felder[0]] = (int(felder[2]),
- # int(felder[3]),
- # int(felder[4]),
- # int(felder[5]),
- # int(felder[6]))
- tabelle[felder[0]] = Letter(felder[0],
- felder[1],
- felder[2],
- felder[3],
- felder[4],
- felder[5],
- felder[6])
- else:
- if len(felder) < 2:
- #print "WARNING:", z
- transtabelle[felder[0]] = felder[0]
- else:
- transtabelle[felder[0]] = felder[1]
+ felder = z.split()
+ if status == "syriac":
+ if len(felder) < 7:
+ self.errct = self.errct + 1
+ print("ERROR:", z, file=sys.stderr)
+ else:
+ #print ("rrr",felder)
+ #self.tabelle[felder[0]] = (int(felder[2]),
+ # int(felder[3]),
+ # int(felder[4]),
+ # int(felder[5]),
+ # int(felder[6]))
+ tabelle[felder[0]] = Letter(felder[0],
+ felder[1],
+ felder[2],
+ felder[3],
+ felder[4],
+ felder[5],
+ felder[6])
+ else:
+ if len(felder) < 2:
+ #print "WARNING:", z
+ transtabelle[felder[0]] = felder[0]
+ else:
+ transtabelle[felder[0]] = felder[1]
def tokenize(self, str, xlen, style="serto"):
- ix = 0
- self.tokens = []
- self.digits = []
- number = 0 #
+ ix = 0
+ self.tokens = []
+ self.digits = []
+ number = 0 #
- while(ix < xlen): #for ix in range(xlen):
- #print "IX", ix, str
- if str[ix] == "\\":
- command = "\\"
- ix = ix + 1
- while(ix < xlen):
- if not str[ix] in string.letters:
- break
- else:
- command = command + str[ix]
- ix = ix + 1
- self.tokens.append(command)
- elif str[ix] in "{}":
- self.tokens.append(str[ix])
- ix = ix + 1
- else:
- for ll in range(5, 0, -1):
- if self.tabelle[style].has_key(str[ix:ix+ll]):
- if ll == 1 and str[ix:ix+ll] in "aeiou" \
- and (len(self.tokens) == 0 \
- or self.tokens[-1] == "~"):
- #self.tokens.append("'" + str[ix:ix+ll])
- self.tokens.extend(["'", str[ix:ix+ll]])
- #pass
- else:
- if len(self.tokens) \
- and str[ix:ix+ll] == self.tokens[-1] \
- and self.tabelle[style][str[ix:ix+ll]].link != 3 \
- and str[ix:ix+ll] not in ["~", "0", "1",
- "2", "3", "4",
- "5", "6", "7",
- "8", "9", "--"]:
- # insert shadda
- self.tokens.append("Q")
- else:
- self.tokens.append(str[ix:ix+ll])
- ix = ix + ll
- break # for-loop
- else:
- ix = ix + 1
-
- #print "TOKENS",self.tokens
+ while(ix < xlen): #for ix in range(xlen):
+ #print "IX", ix, str
+ if str[ix] == "\\":
+ command = "\\"
+ ix = ix + 1
+ while(ix < xlen):
+ if not str[ix] in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ":
+ break
+ else:
+ command = command + str[ix]
+ ix = ix + 1
+ self.tokens.append(command)
+ elif str[ix] in "{}":
+ self.tokens.append(str[ix])
+ ix = ix + 1
+ else:
+ for ll in range(5, 0, -1):
+ if str[ix:ix+ll] in self.tabelle[style]:
+ if ll == 1 and str[ix:ix+ll] in "aeiou" \
+ and (len(self.tokens) == 0 \
+ or self.tokens[-1] == "~"):
+ #self.tokens.append("'" + str[ix:ix+ll])
+ self.tokens.extend(["'", str[ix:ix+ll]])
+ #pass
+ else:
+ if len(self.tokens) \
+ and str[ix:ix+ll] == self.tokens[-1] \
+ and self.tabelle[style][str[ix:ix+ll]].link != 3 \
+ and str[ix:ix+ll] not in ["~", "0", "1",
+ "2", "3", "4",
+ "5", "6", "7",
+ "8", "9", "--"]:
+ # insert shadda
+ self.tokens.append("Q")
+ else:
+ self.tokens.append(str[ix:ix+ll])
+ ix = ix + ll
+ break # for-loop
+ else:
+ ix = ix + 1
+
+ #print "TOKENS",self.tokens
def transtokenize(self, str, xlen, style="serto"):
- ix = 0
- self.tokens = []
- self.digits = []
- number = 0 #
- while(ix < xlen): #for ix in range(xlen):
- #print "IX", ix,
- for ll in range(5, 0, -1):
- if self.transtabelle[style].has_key(str[ix:ix+ll]):
- if ll == 1 and str[ix:ix+ll] in "aeiou" \
- and (len(self.tokens) == 0 \
- or self.tokens[-1] == "~"):
- self.tokens.append("'" + str[ix:ix+ll])
- #self.tokens.extend(["'", str[ix:ix+ll]])
- else:
- #if len(self.tokens) \
- # and str[ix:ix+ll] == self.tokens[-1] \
- # and self.tabelle[str[ix:ix+ll]][4] != 3 \
- # and str[ix:ix+ll] not in ["~", "0", "1", "2", "3", "4",
- # "5", "6", "7", "8", "9"]:
- # """insert shadda"""
- # self.tokens.append("Q")
- #else:
- self.tokens.append(str[ix:ix+ll])
- ix = ix + ll
- break # for-loop
- else:
- ix = ix + 1
-
- #print "TRANSTOKENS",self.tokens
+ ix = 0
+ self.tokens = []
+ self.digits = []
+ number = 0 #
+ while(ix < xlen): #for ix in range(xlen):
+ #print "IX", ix,
+ for ll in range(5, 0, -1):
+ if str[ix:ix+ll] in self.transtabelle[style]:
+ if ll == 1 and str[ix:ix+ll] in "aeiou" \
+ and (len(self.tokens) == 0 \
+ or self.tokens[-1] == "~"):
+ self.tokens.append("'" + str[ix:ix+ll])
+ #self.tokens.extend(["'", str[ix:ix+ll]])
+ else:
+ #if len(self.tokens) \
+ # and str[ix:ix+ll] == self.tokens[-1] \
+ # and self.tabelle[str[ix:ix+ll]][4] != 3 \
+ # and str[ix:ix+ll] not in ["~", "0", "1", "2", "3", "4",
+ # "5", "6", "7", "8", "9"]:
+ # """insert shadda"""
+ # self.tokens.append("Q")
+ #else:
+ self.tokens.append(str[ix:ix+ll])
+ ix = ix + ll
+ break # for-loop
+ else:
+ ix = ix + 1
+
+ #print "TRANSTOKENS",self.tokens
def transliterate(self, syrisch, style="serto"):
- if self.usingUTF8:
- line = unicode(syrisch, "utf8")
- newline = ""
- for c in line:
- #print "eee %x" % ord(c), self.UnicodeTable.has_key(ord(c)),
- #print c.encode("utf8")
- sertocode = self.UnicodeTable.get(ord(c), c)
- newline += sertocode
- #print "[%s]" % sertocode, newline
- syrisch = newline
+ if True: #self.usingUTF8
+ #line = unicode(syrisch, "utf8")
+ line = syrisch
+ newline = ""
+ for c in line:
+ #print "eee %x" % ord(c), self.UnicodeTable.has_key(ord(c)),
+ #print c.encode("utf8")
+ sertocode = self.UnicodeTable.get(ord(c), c)
+ newline += sertocode
+ #print "[%s]" % sertocode, newline
+ syrisch = newline
- syrisch = string.replace(syrisch, " ", "~")
- self.transtokenize(syrisch, len(syrisch), style)
- #self.err("TOKEN %s" %self.tokens)
- ret = []
- oldtok = ""
- for tok in self.tokens:
- if tok == "~": # blank
- ret.append(" ")
- #elif tok == "Q": # shadda
- #ret.append(ret[-1])
- #elif tok == "+": # soft sign under begadkefat
- #if len(ret):
- # ret[-1] = self.spec.get(oldtok+tok, oldtok+tok)
- else:
- ret.append(self.transtabelle[style].get(tok, tok))
- #oldtok = tok
-
- return string.join(ret, "")
+ syrisch = syrisch.replace(" ", "~")
+ self.transtokenize(syrisch, len(syrisch), style)
+ #self.err("TOKEN %s" %self.tokens)
+ ret = []
+ oldtok = ""
+ for tok in self.tokens:
+ if tok == "~": # blank
+ ret.append(" ")
+ #elif tok == "Q": # shadda
+ #ret.append(ret[-1])
+ #elif tok == "+": # soft sign under begadkefat
+ #if len(ret):
+ # ret[-1] = self.spec.get(oldtok+tok, oldtok+tok)
+ else:
+ ret.append(self.transtabelle[style].get(tok, tok))
+ #oldtok = tok
+
+ return "".join(ret)
def syriacise(self, style="serto"):
- # replace tokens by serto letters, take into account context
- ix = 0
- out = []
- digits = []
- self.maxlen = len(self.tokens)
- #sys.stderr.write("%s\n" % self.tokens)
- number = 0
- for i in range(self.maxlen):
- if self.tokens[i][0] in "\\{}":
- out.append(self.tokens[i])
+ # replace tokens by serto letters, take into account context
+ ix = 0
+ out = []
+ digits = []
+ self.maxlen = len(self.tokens)
+ #sys.stderr.write("%s\n" % self.tokens)
+ number = 0
+ for i in range(self.maxlen):
+ if self.tokens[i][0] in "\\{}":
+ out.append(self.tokens[i])
- elif self.tabelle[style][self.tokens[i]].medial == -1:
- #print "skipping letter"
- continue
- else:
- form = self.context(i, style=style)
+ elif self.tabelle[style][self.tokens[i]].medial == -1:
+ #print "skipping letter"
+ continue
+ else:
+ form = self.context(i, style=style)
- if self.tokens[i] in ["0", "1", "2", "3", "4",
- "5", "6", "7", "8", "9"]:
- number = 1
- digits.append(chr(self.tabelle[style][self.tokens[i]].getcontext(form)))
- else:
- if number == 1:
- number = 0
- digits.reverse()
- out.extend(digits)
- digits = []
- #out.append(chr(self.tabelle[self.tokens[i]][form]))
- #out.append("%c" %(self.tabelle[self.tokens[i]].getcontext(form)))
- for c in self.tabelle[style][self.tokens[i]].getChar(form):
- #sys.stderr.write("LETTER: %s\n" % c)
- out.append(c)
- #print self.tokens[i], form, self.tabelle[self.tokens[i]][form]
+ if self.tokens[i] in ["0", "1", "2", "3", "4",
+ "5", "6", "7", "8", "9"]:
+ number = 1
+ digits.append(chr(self.tabelle[style][self.tokens[i]].getcontext(form)))
+ else:
+ if number == 1:
+ number = 0
+ digits.reverse()
+ out.extend(digits)
+ digits = []
+ #out.append(chr(self.tabelle[self.tokens[i]][form]))
+ #out.append("%c" %(self.tabelle[self.tokens[i]].getcontext(form)))
+ for c in self.tabelle[style][self.tokens[i]].getChar(form):
+ #sys.stderr.write("LETTER: %s\n" % c)
+ out.append(c)
+ #print self.tokens[i], form, self.tabelle[self.tokens[i]][form]
- if number:
- number = 0
- digits.reverse()
- out.extend(digits)
+ if number:
+ number = 0
+ digits.reverse()
+ out.extend(digits)
- #for i in out: print "%d" % ord(i),
- #print
- #if not self.elatex:
- # out.reverse()
+ #for i in out: print "%d" % ord(i),
+ #print
+ #if not self.elatex:
+ # out.reverse()
- # This kills empty letters, caused by -1 in .font-file
- return string.join(out, "")
-
+ # This kills empty letters, caused by -1 in .font-file
+ return "".join(out)
+
def context(self, ix, style="serto"):
- """returns 0 if letter is isolated
- 1 if letter is initial
- 2 if letter is medial
- 3 if letter is final"""
+ """returns 0 if letter is isolated
+ 1 if letter is initial
+ 2 if letter is medial
+ 3 if letter is final"""
- if self.before(ix, style) and self.next(ix, style):
- return 2
- elif self.before(ix, style) and not self.next(ix, style):
- return 3
- elif not self.before(ix, style) and self.next(ix, style):
- return 1
- else:
- return 0
+ if self.before(ix, style) and self.next(ix, style):
+ return 2
+ elif self.before(ix, style) and not self.next(ix, style):
+ return 3
+ elif not self.before(ix, style) and self.next(ix, style):
+ return 1
+ else:
+ return 0
def next(self, ix, style="serto"):
- """returns 1 if next token is a letter"""
- for i in range(ix+1, self.maxlen):
- if self.tokens[i][0] in "\\{}":
- return 0
- elif self.tabelle[style][self.tokens[i]].link in [2,3]:
- continue
- elif self.tokens[i] not in ["~", "!", ",", ".", ";", "?"] :
- return 1
- else:
- return 0
- return 0
+ """returns 1 if next token is a letter"""
+ for i in range(ix+1, self.maxlen):
+ if self.tokens[i][0] in "\\{}":
+ return 0
+ elif self.tabelle[style][self.tokens[i]].link in [2,3]:
+ continue
+ elif self.tokens[i] not in ["~", "!", ",", ".", ";", "?"] :
+ return 1
+ else:
+ return 0
+ return 0
def before(self, ix, style="serto"):
- """returns 1 if preceding token is a letter"""
- for i in range(ix-1, -1, -1):
- if self.tokens[i][0] in "\\{}":
- return 0
- elif self.tabelle[style][self.tokens[i]].link == 2:
- continue
- elif self.tokens[i] != "~":
- if self.tabelle[style][self.tokens[i]].link == 0:
- return 0
- else:
- return 1
- else:
- return 0
- return 0
+ """returns 1 if preceding token is a letter"""
+ for i in range(ix-1, -1, -1):
+ if self.tokens[i][0] in "\\{}":
+ return 0
+ elif self.tabelle[style][self.tokens[i]].link == 2:
+ continue
+ elif self.tokens[i] != "~":
+ if self.tabelle[style][self.tokens[i]].link == 0:
+ return 0
+ else:
+ return 1
+ else:
+ return 0
+ return 0
@@ -435,175 +523,246 @@
def convert(self, transcript, style="serto"):
- # interface function
- # dummy blank
- if self.usingUTF8:
- line = unicode(transcript, "utf8")
- newline = ""
- for c in line:
- #sys.stderr.write( "eee %d %s\n" % (ord(c), self.UnicodeTable.has_key(ord(c))))
- #sys.stderr.write( c.encode("utf8") + "\n")
- sertocode = self.UnicodeTable.get(ord(c), c)
- newline += sertocode
- #sys.stderr.write( "[%s]\n" % sertocode)
- transcript = newline.encode("utf8")
-
- transcript = string.replace(transcript, " ", "~")
- self.tokenize(transcript, len(transcript), style)
- return self.syriacise(style)
+ # interface function
+ # dummy blank
+ if style == "estra":
+ XXXX
+ else: #if True: #self.usingUTF8:
+ line = transcript # unicode(transcript, "utf8")
+ newline = ""
+ for c in line:
+ #sys.stderr.write( "eee %d %s\n" % (ord(c), self.UnicodeTable.has_key(ord(c))))
+ #sys.stderr.write( c.encode("utf8") + "\n")
+ sertocode = self.UnicodeTable.get(ord(c), c)
+ newline += sertocode
+ #sys.stderr.write( "[%s]\n" % sertocode)
+ transcript = newline #.encode("utf8")
+
+ transcript = transcript.replace(" ", "~")
+ self.tokenize(transcript, len(transcript), style)
+ return self.syriacise(style)
def texify(self, word, style="serto"):
- res = []
- for ll in serto.convert(word, style):
- # ll: position of current syriac character in font table
- #sys.stdout.write("LETTER: 0x%x\n" % (ord(ll)))
- #sys.stderr.write("LETTER: %s\n" % ord(ll))
+ if style== "estra":
+ return self.texifyUnicodefont(word)
+
+ res = []
+ for ll in serto.convert(word, style):
+ # ll: position of current syriac character in font table
+ #sys.stdout.write("LETTER: 0x%x\n" % (ord(ll)))
+ #sys.stderr.write("LETTER: %s\n" % ord(ll))
- if ord(ll) < 16:
- #print "WWWWWWWWW", len(res), res
- if len(res):
- res[-1] = "\\uppersyriac{%d}{%s}" % (ord(ll), res[-1])
- else:
- res.append("\\uppersyriac{%d}{A}" % (ord(ll))) # A: Olaf
- elif ord(ll) < 32:
- if len(res):
- res[-1] = "\\lowersyriac{%d}{%s}" % (ord(ll), res[-1])
- else:
- res.append("\\lowersyriac{%d}{A}" % (ord(ll)))
- elif ord(ll) < 127 and ord(ll) not in [34,35,36,37,38,95]:
- res.append(ll)
- else:
- # special (active) TeX-characters, charactes > 127
- res.append("\\char%d{}" % ord(ll))
- if not self.elatex:
- res.reverse()
- return string.join(res, "")
+ if ord(ll) < 16:
+ #print "WWWWWWWWW", len(res), res
+ if len(res):
+ res[-1] = "\\uppersyriac{%d}{%s}" % (ord(ll), res[-1])
+ else:
+ res.append("\\uppersyriac{%d}{A}" % (ord(ll))) # A: Olaf
+ elif ord(ll) < 32:
+ if len(res):
+ res[-1] = "\\lowersyriac{%d}{%s}" % (ord(ll), res[-1])
+ else:
+ res.append("\\lowersyriac{%d}{A}" % (ord(ll)))
+ elif ord(ll) < 127 and ord(ll) not in [34,35,36,37,38,95]:
+ res.append(ll)
+ else:
+ # special (active) TeX-characters, charactes > 127
+ res.append("\\char%d{}" % ord(ll))
+ if not self.elatex:
+ res.reverse()
+ return "".join(res)
def inlineserto(self, matchobject):
- return "{\\serto\\beginR %s\\endR}" % self.texify(matchobject.group(2))
+ return "{\\serto\\beginR %s\\endR}" % self.texify(matchobject.group(2))
def inlinechaldean(self, matchobject):
- return "{\\assyr\\beginR %s\\endR}" \
- % self.texify(matchobject.group(2), "chaldean")
+ return "{\\assyr\\beginR %s\\endR}" \
+ % self.texify(matchobject.group(2), "chaldean")
+ def texifyUnicodefont(self, line):
+ line += " "
+ out = ""
+ i = 0
+ while i < len(line)-2:
+ if line[i:i+3] in self.code2Unicode:
+ codes = self.code2Unicode[line[i:i+3]]
+ #out += "^^^%x" % self.code2Unicode[line[i:i+3]]
+ i += 3
+ elif line[i:i+2] in self.code2Unicode:
+ codes = self.code2Unicode[line[i:i+2]]
+ #out += "^^^%x" % self.code2Unicode[line[i:i+2]]
+ i += 2
+ elif line[i:i+1] in self.code2Unicode:
+ codes = self.code2Unicode[line[i:i+1]]
+ #out += "^^^%x" % self.code2Unicode[line[i:i+1]]
+ i += 1
+ else:
+ codes = None
+ if line[i] != "\n":
+ out += line[i]
+ i += 1
+ if codes:
+ for x in codes:
+ out += "^^^%x" % x
+ return out
+
+ def inlineestra(self, matchobject):
+ return "{\\beginR\\estra %s\\endR}" % self.texifyUnicodefont(matchobject.group(2))
+
+# line = matchobject.group(2) + " "
+# out = ""
+# i = 0
+# while i < len(line)-2:
+# if line[i:i+3] in self.code2Unicode:
+# codes = self.code2Unicode[line[i:i+3]]
+# #out += "^^^%x" % self.code2Unicode[line[i:i+3]]
+# i += 3
+# elif line[i:i+2] in self.code2Unicode:
+# codes = self.code2Unicode[line[i:i+2]]
+# #out += "^^^%x" % self.code2Unicode[line[i:i+2]]
+# i += 2
+# elif line[i:i+1] in self.code2Unicode:
+# codes = self.code2Unicode[line[i:i+1]]
+# #out += "^^^%x" % self.code2Unicode[line[i:i+1]]
+# i += 1
+# else:
+# codes = None
+# out += line[i]
+# i += 1
+# if codes:
+# for x in codes:
+# out += "^^^%x" % x
+#
+#
+# return "{\\beginR\\estra %s\\endR}" % out
+
def inlinetrans(self, matchobject):
- return "\\emph{%s}" % self.transliterate(matchobject.group(2))
+ return "\\emph{%s}" % self.transliterate(matchobject.group(2))
def inlinesertotrans(self, matchobject):
- return "{\\serto\\beginR %s\\endR} \\emph{%s}" \
- % (self.texify(matchobject.group(2)),
- self.transliterate(matchobject.group(2)))
+ return "{\\serto\\beginR %s\\endR} \\emph{%s}" \
+ % (self.texify(matchobject.group(2)),
+ self.transliterate(matchobject.group(2)))
def inlinechaldeantrans(self, matchobject):
- return "{\\assyr\\beginR %s\\endR} \\emph{%s}" \
- % (self.texify(matchobject.group(2), "chaldean"),
- self.transliterate(matchobject.group(2), "chaldean"))
+ return "{\\assyr\\beginR %s\\endR} \\emph{%s}" \
+ % (self.texify(matchobject.group(2), "chaldean"),
+ self.transliterate(matchobject.group(2), "chaldean"))
+
+ def inlineestratrans(self, matchobject):
+ return "%s \\emph{%s}" \
+ % (self.inlineestra(matchobject),
+ self.transliterate(matchobject.group(2)))
+
def err(self, s):
- sys.stderr.write(s + "\n")
+ sys.stderr.write(s + "\n")
#-------------------------------------------------------
if __name__ == "__main__":
- sys.stderr.write("serto - LaTeX - preprocessor\n(c) Johannes Heinecke\n")
+ sys.stderr.write("serto - LaTeX - preprocessor V %s\n(c) Johannes Heinecke\n" % version)
if len(sys.argv) < 2:
- sys.stderr.write("usage:\n serto.py [-o] inputfile\n")
- sys.stderr.write(" -o: for usage with an older version of LaTeX which cannot typeset right-to-left scripts elatex\n\n")
- sys.exit(1)
+ sys.stderr.write("usage:\n serto.py [-o] inputfile\n")
+ sys.stderr.write(" -o: for usage with an older version of LaTeX which cannot typeset right-to-left scripts elatex\n\n")
+ sys.exit(1)
else:
- sys.stderr.write("\n")
- import getopt
+ sys.stderr.write("\n")
+ import getopt
- elatex = 1
- optlist,comargs = getopt.getopt(sys.argv[1:], "")
+ elatex = 1
+ optlist,comargs = getopt.getopt(sys.argv[1:], "")
- for (o,a) in optlist:
- if o == "-o":
- elatex = 0
+ for (o,a) in optlist:
+ if o == "-o":
+ elatex = 0
- serto = Serto(elatex=elatex)
- fp = open(comargs[0])
+ serto = Serto(elatex=elatex)
+ fp = open(comargs[0])
- #mode = "latin"
- mode = ["latin"]
- z = fp.readline()
- while (z):
- #print "LINE", z,
- if z.find("\usepackage[utf8]{inputenc}") > -1:
- serto.usingUTF8 = True
- #print 'QQQ',z, mode
- if z[:-1] == "<SERTO>":
- # must be on a single line (will be deleted)
- if not elatex:
- sys.stderr.write("using <SERTO> without the -e option (and elatex) may not work!\n")
- #mode = "serto"
- mode.append("serto")
- print '{\\serto\\beginR %'
+ #mode = "latin"
+ mode = ["latin"]
+ z = fp.readline()
+ while (z):
+ #print "LINE", z,
+ #if z.find("\usepackage[utf8]{inputenc}") > -1:
+ # serto.usingUTF8 = True
+ #print 'QQQ',z, mode
+ if z[:-1] == "<SERTO>":
+ # must be on a single line (will be deleted)
+ if not elatex:
+ sys.stderr.write("using <SERTO> without the -e option (and elatex) may not work!\n")
+ #mode = "serto"
+ mode.append("serto")
+ print('{\\serto\\beginR %')
- elif string.strip(z[:-1]) == "</SERTO>":
- #mode = "latin"
- del mode[-1]
- #print '\\endR}%' # causes problems in last line
- print '}%'
+ elif z[:-1].strip() == "</SERTO>":
+ del mode[-1]
+ #print '\\endR}%' # causes problems in last line
+ print('}%')
- elif z[:-1] == "<CHALDEAN>":
- # must be on a single line (will be deleted)
- if not elatex:
- sys.stderr.write("using <CHALDEAN> without the -e option (and elatex) may not work!\n")
- #mode = "chaldean"
- mode.append("chaldean")
- print '{\\assyr\\beginR %'
+ elif z[:-1] == "<ESTRANGELO>":
+ # must be on a single line (will be deleted)
+ mode.append("estra")
+ print('{\\beginR\\estra %')
- elif string.strip(z[:-1]) == "</CHALDEAN>":
- #mode = "latin"
- del mode[-1]
- #print '\\endR}%' # causes problems in last line
- print '}%'
+ elif z[:-1].strip() == "</ESTRANGELO>":
+ del mode[-1]
+ print('}%')
- elif z[:-1] == "<TRANS>":
- #mode = "trans"
- mode.append("trans")
- print '{\\it %'
- elif string.strip(z[:-1]) == "</TRANS>":
- #mode = "latin"
- del mode[-1]
- print '}%'
+ elif z[:-1] == "<CHALDEAN>":
+ # must be on a single line (will be deleted)
+ if not elatex:
+ sys.stderr.write("using <CHALDEAN> without the -e option (and elatex) may not work!\n")
+ #mode = "chaldean"
+ mode.append("chaldean")
+ print('{\\assyr\\beginR %')
+ elif z[:-1].strip() == "</CHALDEAN>":
+ #mode = "latin"
+ del mode[-1]
+ #print '\\endR}%' # causes problems in last line
+ print('}%')
-# elif z[:-1] == "<SERTOTRANS>":
-# mode = "sertotrans"
-# print '{\\serto\\beginR %'
-#
-# elif string.strip(z[:-1]) == "</SERTOTRANS>":
-# mode = "latin"
-# print '\\endR}%'
+ elif z[:-1] == "<TRANS>":
+ #mode = "trans"
+ mode.append("trans")
+ print('{\\it %')
+ elif z[:-1].strip() == "</TRANS>":
+ #mode = "latin"
+ del mode[-1]
+ print('}%')
- else:
- #print "mmm", mode, z
- if mode[-1] == "latin":
- #sys.stdout.write(serto.inlineS.sub(serto.inlineserto, z))
- a = serto.inlineS.sub(serto.inlineserto, z)
- b = serto.inlineT.sub(serto.inlinetrans, a)
- c = serto.inlineST.sub(serto.inlinesertotrans, b)
- d = serto.inlineC.sub(serto.inlinechaldean, c)
- e = serto.inlineCT.sub(serto.inlinechaldeantrans, d)
- sys.stdout.write(e)
- elif mode[-1] == "trans":
- print serto.transliterate(z)
- else:
- if z[:-1] == "": print "\n\\beginR",
- else:
- print serto.texify(z, mode[-1])
+ else:
+ #print "mmm", mode, z
+ if mode[-1] == "latin":
+ #sys.stdout.write(serto.inlineS.sub(serto.inlineserto, z))
+ a = serto.inlineS.sub(serto.inlineserto, z)
+ b = serto.inlineT.sub(serto.inlinetrans, a)
+ c = serto.inlineST.sub(serto.inlinesertotrans, b)
+ d = serto.inlineC.sub(serto.inlinechaldean, c)
+ e = serto.inlineCT.sub(serto.inlinechaldeantrans, d)
+ f = serto.inlineE.sub(serto.inlineestra, e)
+ g = serto.inlineET.sub(serto.inlineestratrans, f)
- #print "rrrrr", mode
- z = fp.readline()
+ sys.stdout.write(g)
+ elif mode[-1] == "trans":
+ print(serto.transliterate(z))
+ else:
+ if z[:-1] == "": print("\n\\beginR ", end="")
+ else:
+ print(serto.texify(z, mode[-1]))
- fp.close()
- sys.exit(serto.errct)
+ #print "rrrrr", mode
+ z = fp.readline()
+
+
+ fp.close()
+ sys.exit(serto.errct)
Modified: trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.ptex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.ptex 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/sertodoc.ptex 2025-03-09 20:51:21 UTC (rev 74548)
@@ -16,10 +16,20 @@
\usepackage{maketitel}
\usepackage{serto}
\usepackage{assyr}
+
+\usepackage{ifxetex}
+\ifxetex
+ % we use xelatex, so we can display the Estrangelo fonts
+ \usepackage{estrangelo} % needs xelatex
+\else
+\fi
\usepackage{longtable}
\usepackage{chicago2}
%\ifpdf
-\usepackage[pdftex,colorlinks=true,
+\usepackage[%
+xetex,
+%pdftex,
+,colorlinks=true,
urlcolor=urlcol, % URL: http://
citecolor=bibcol, % bibTeX
linkcolor=linkcol, % sections, footnotes, ...
@@ -46,23 +56,27 @@
% EDIT sertodoc.ptex
% serto.py sertodoc.ptex > sertodoc.tex
-% pdflatex sertodoc.tex
+% xelatex sertodoc.tex
\usepackage{parskip}
+\usepackage{metalogo}
-
%\let\S=S % for verbatim
%\let\T=T % for verbatim
\def\st{Ser\d to}
\def\texxet{{\tt TeX-{}-XeT}}
-\def\pdflatex{{\tt pdflatex}}
-\def\SertoVersion{1.0}
+%\def\pdflatex{{\tt pdflatex}}
+\def\pdflatex{pdf\LaTeX}
+\def\SertoVersion{1.3.2}
+
\newcommand{\showS}[1]{{\tt <S{}>#1</S{}>}}
\newcommand{\showT}[1]{{\tt <{}T>#1</{}T>}}
\newcommand{\showST}[1]{{\tt <S{}T>#1</S{}T>}}
\newcommand{\showC}[1]{{\tt <C{}>#1</C{}>}}
\newcommand{\showCT}[1]{{\tt <C{}T>#1</C{}T>}}
+\newcommand{\showE}[1]{{\tt <E{}>#1</E{}>}}
+\newcommand{\showET}[1]{{\tt <E{}T>#1</E{}T>}}
\newcommand{\SE}{{\tt <S>}}
\newcommand{\eSE}{{\tt </S>}}
\newcommand{\TR}{{\tt <T>}}
@@ -75,7 +89,7 @@
\begin{document}
\title{<S>ser.t=a'</S> \emph{\st} -- a font for Syriac (Aramaic)}
\author{Johannes Heinecke}
-\date{Version \SertoVersion, 30\textsuperscript{th} March 2013}
+\date{Version \SertoVersion, 9\textsuperscript{th} March 2025}
\maketitle
\tableofcontents
@@ -84,7 +98,7 @@
\emph{\st} is a form of the alphabet used for Aramaic (a
western semitic language) which has been spoken
-in the Near East since at least 1100 BC. More precisely, \st is used for
+in the Near East since at least 1100 BC. More precisely, \st\ is used for
Syriac which is the variant of Aramaic spoken since the second century
AD.\footnote{See \citeNP{ungnad1932},
\citeNP{brockelmann1960}, \citeNP{costaz1986} or \citeNP{noeldeke1986}
@@ -92,19 +106,17 @@
information on Syriac.}
Syriac used other alphabets as well, notably \emph{Es\d
-trangelo}, which is not (yet) contained in this package. Since \st{} is
-as the Arabic alphabet a syllabic script, vowels are marked by
+trangelo}, which is indirectly contained in this package (for use with
+\XeLaTeX\ only, see below). Since \st{} is,
+as the Arabic alphabet, a syllabic script, vowels are marked by
diacritic marks above (or under) the consonantic letters.
Modern forms of Aramaic still use either \st{}, the Chaldean alphabet
or Es\d trangelo.
-
Since Syriac split up in two main dialects in the fifth century AD,
two differing systems of vowel-marking were established: Whereas the
-western dialect (Edessean) used Greek letters as vowel symbols (these
-are the only ones provided by this package for the time being), the
+western dialect (Edessean) used Greek letters as vowel symbols, the
eastern dialects uses dots to indicate the vowels (Chaldean vowels).
-
This package enables you to typeset words or paragraphs in \st{} using a
preprocessor which chooses the correct letter form depending on
context. In order to typeset paragraphs the use of a
@@ -113,9 +125,17 @@
For older version of \LaTeX, the preprocessor must be used with the
option {\tt -o} (see section \ref{prep}).
-This package also included an adapted version of a Chaldean font (thanks to Tony
+This package also includes an adapted version of a Chaldean font (thanks to Tony
Khoshaba, who put this font to the Web).
+In order to use the Es\d trangelo alphabet, you have to use \XeLaTeX\
+instead of pdf\LaTeX, and install the font \emph{Estrangelo Edessa}.
+For copyright reason, this font cannot be
+included in this package\footnote{The font can be easily found on the
+ Web, or downloaded at
+\url{https://fontzone.net/download/estrangelo-edessa}}.
+The support for Es\d trangelo is still experimental.
+
%<S>qa.t.tel qa.tel</S>
%<S> ^sapiyr biy^s l=ak .</S>
@@ -122,7 +142,7 @@
\section{The alphabets}
-Every letter in \st{} (and some letters in the Chaldean alphabet)
+Every letter in \st{} (and some letters in the Chaldean alphabet and Es\d trangelo)
has several forms, depending on its position in
the word: An initial, medial or final form. Since some letters do not
connect to the following letter, there are isolated forms as well
@@ -133,105 +153,282 @@
\subsection{Consonants}\label{consonants}
+% without Estrangelo
+\def\ohne{\begin{longtable}{| >{\rule[-2mm]{0pt}{9mm}}c|c|c|c| c |
+ r l |
+ >{\it}c | >{\tt}c | }}
+% with Estrangelo
+\def\mit{\begin{longtable}{| >{\rule[-2mm]{0pt}{9mm}}c|c|c|c| % serto
+ c | c | % estrangelo
+ c | % chaldean
+ r l | % name (serto), name (transcript)
+ >{\it}c | >{\tt}c | }} % translit, coding
-%\begin{tabular}{| >{\rule[-2mm]{0pt}{9mm}}c|c|c|c| r >{\it}l | >{\tt}c|}
-\begin{longtable}{| >{\rule[-2mm]{0pt}{9mm}}c|c|c|c| c |
- r l |
- >{\it}c | >{\tt}c | }
+\ifxetex\mit\else\ohne\fi
+
\hline
-\multicolumn{4}{|c|}{ser\d to forms} & & \multicolumn{2}{c|}{name} & \rm translit. & \rm coding \\
-\cline{1-4}
+\ifxetex
+ \multicolumn{4}{|c|}{Ser\d to} &
+ \multicolumn{2}{c|}{Estr.} &
+ & \multicolumn{2}{c|}{name} & \rm translit. & \rm coding \\
+ \cline{1-6}
+\else
+ \multicolumn{4}{|c|}{Ser\d to} & & \multicolumn{2}{c|}{name} & \rm translit. & \rm coding \\
+ \cline{1-4}
+\fi
%\hline
\begin{turn}{90}isolated\end{turn} &
\begin{turn}{90}final\end{turn} &
\begin{turn}{90}medial\end{turn} &
\begin{turn}{90}initial\end{turn} &
+\ifxetex
+\begin{turn}{90}isolated\end{turn} &
+\begin{turn}{90}final\end{turn} &
+\fi
\begin{turn}{90}Chaldean\end{turn} & & & & \endhead
\hline
-<S>'</S> & <S>-'</S> & & & <C>'</C> &
- <S>'=alap+</S> & <T>'=alap+</T> & \raise.2ex\hbox{$\rhook$} & '\\
+<S>'</S> & <S>-'</S> & & &
+\ifxetex
+ <E>'</E> & <E>-'</E> &
+\fi
+ <C>'</C> &
+ <S>'=alap+</S> & <T>'=alap+</T> & \raise.2ex\hbox{$\rhook$} & ' \\
\hline
-<S>b</S> & <S>-b</S> & <S>-b-</S> & <S>b-</S> & <C>b</C> &
+<S>b</S> & <S>-b</S> & <S>-b-</S> & <S>b-</S> &
+\ifxetex
+ <E>b</E> & <E>-b</E> &
+\fi
+ <C>b</C> &
<S>beyt+</S> & <T>beyt+</T> & b\footnotemark & b \\
- & & & & <C>v</C>\footnotemark &
+
+ & & & &
+\ifxetex
+ <E></E> & <E>-</E> &
+\fi
+<C>v</C>\footnotemark &
& & v & v \\
\hline
-<S>g</S> & <S>-g</S> & <S>-g-</S> & <S>g-</S> &<C>g</C> &
+<S>g</S> & <S>-g</S> & <S>-g-</S> & <S>g-</S> &
+\ifxetex
+ <E>g</E> & <E>-g</E> &
+\fi
+ <C>g</C> &
<S>g=amal</S> & <T>g=amal</T> & g & g\\
- & & & & <C>.g</C> &
+ & & & &
+\ifxetex
+ & &
+\fi
+ <C>.g</C> &
& & \d g & g \\
- & & & & <C>j</C> &
+
+ & & & &
+\ifxetex
+ & &
+\fi
+ <C>j</C> &
& & j & j \\
+
+
+\ifxetex
+ & & & &
+ <E>G</E> & <E>-G</E> &
+ &
+ \multicolumn{2}{r|}{<T>g=amal gar^suwniy</T>} & \d g & G\\
+\fi
+
+
\hline
-<S>d</S> & <S>-d</S> & & &<C>d</C> &
+<S>d</S> & <S>-d</S> & & &
+\ifxetex
+ <E>d</E> & <E>-d</E> &
+\fi
+ <C>d</C> &
<S>d=alat+</S> & <T>d=alat+</T> & d & d\\
+
+\ifxetex
+ & & & &
+ <E>D</E> & <E>-D</E> &
+ <C>D</C> &
+ \multicolumn{2}{r|}{dotless <T>d=alat+</T>/<T>riy^s</T>} & d & D\\
+\fi
\hline
-<S>h</S> & <S>-h</S> & & &<C>h</C> &
+
+<S>h</S> & <S>-h</S> & & &
+\ifxetex
+ <E>h</E> & <E>-h</E> &
+\fi
+ <C>h</C> &
<S>he'</S> & <T>he'</T> & h & h\\
\hline
-<S>w</S> & <S>-w</S> & & &<C>w</C> &
+<S>w</S> & <S>-w</S> & & &
+\ifxetex
+ <E>w</E> & <E>-w</E> &
+\fi
+ <C>w</C> &
<S>waw</S> & <T>waw</T> & w & w \\
\hline
-<S>z</S> & <S>-z</S> & & &<C>z</C> &
+<S>z</S> & <S>-z</S> & & &
+\ifxetex
+ <E>z</E> & <E>-z</E> &
+\fi
+ <C>z</C> &
<S>zayn</S> & <T>zayn</T> & z & z \\
\hline
-<S>.h</S> & <S>-.h</S> & <S>-.h-</S> & <S>.h-</S> &<C>.h</C> &
+<S>.h</S> & <S>-.h</S> & <S>-.h-</S> & <S>.h-</S> &
+\ifxetex
+ <E>.h</E> & <E>-.h</E> &
+\fi
+ <C>.h</C> &
<S>.heyt+</S> & <T>.heyt+</T> & \d h & .h\\
\hline
-<S>.t</S> & <S>-.t</S> & <S>-.t-</S> & <S>.t-</S> &<C>.t</C> &
+<S>.t</S> & <S>-.t</S> & <S>-.t-</S> & <S>.t-</S> &
+\ifxetex
+ <E>.t</E> & <E>-.t</E> &
+\fi
+ <C>.t</C> &
<S>.teyt+</S> & <T>.teyt+</T> & \d t & .t\\
+
+\ifxetex
+ & & & &
+ <E>.T</E> & <E>-.T</E> &
+ <C>.T</C> &
+ \multicolumn{2}{r|}{<T>.teyt+ gar^suwniy</T>} & \d t & .T\\
+\fi
\hline
-<S>y</S> & <S>-y</S> & <S>-y-</S> & <S>y-</S> &<C>y</C> &
+<S>y</S> & <S>-y</S> & <S>-y-</S> & <S>y-</S> &
+\ifxetex
+ <E>y</E> & <E>-y</E> &
+\fi
+ <C>y</C> &
<S>y=ad+</S> & <T>y=ad+</T> & y & y \\
\hline
-<S>k</S> & <S>-k</S> & <S>-k-</S> & <S>k-</S> &<C>k</C> &
+<S>k</S> & <S>-k</S> & <S>-k-</S> & <S>k-</S> &
+\ifxetex
+ <E>k</E> & <E>-k</E> &
+\fi
+ <C>k</C> &
<S>k=ap+</S> & <T>k=ap+</T> & k & k\\
- & & & & <C>_k</C> &
+ & & & &
+\ifxetex
+ <E></E> & <E></E> &
+\fi
+ <C>_k</C> &
& & \b h & \verb._k. \\
- & & & & <C>^k</C> &
+
+ & & & &
+\ifxetex
+ <E></E> & <E></E> &
+\fi
+ <C>^k</C> &
& & \v c & \verb.^k. \\
\hline
-<S>l</S> & <S>-l</S> & <S>-l-</S> & <S>l-</S> & <C>l</C> &
+<S>l</S> & <S>-l</S> & <S>-l-</S> & <S>l-</S> &
+\ifxetex
+ <E>l</E> & <E>-l</E> &
+\fi
+ <C>l</C> &
<S>l=amad+</S> & <T>l=amad+</T> & l & l\\
\hline
-<S>m</S> & <S>-m</S> & <S>-m-</S> & <S>m-</S> & <C>m</C> &
+<S>m</S> & <S>-m</S> & <S>-m-</S> & <S>m-</S> &
+\ifxetex
+ <E>m</E> & <E>-m</E> &
+\fi
+ <C>m</C> &
<S>miym</S> & <T>miym</T> & m & m\\
\hline
-<S>n</S> & <S>-n</S> & <S>-n-</S> & <S>n-</S> &<C>n</C> &
+<S>n</S> & <S>-n</S> & <S>-n-</S> & <S>n-</S> &
+\ifxetex
+ <E>n</E> & <E>-n</E> &
+\fi
+ <C>n</C> &
<S>nuwn</S> & <T>nuwn</T> & n & n\\
\hline
-<S>s</S> & <S>-s</S> & <S>-s-</S> & <S>s-</S> &<C>s</C> &
+<S>s</S> & <S>-s</S> & <S>-s-</S> & <S>s-</S> &
+\ifxetex
+ <E>s</E> & <E>-s</E> &
+\fi
+ <C>s</C> &
<S>semkat+</S> & <T>semkat+</T> & s & s\\
\hline
-<S>`</S> & <S>-`</S> & <S>-`-</S> & <S>`-</S> &<C>`</C> &
+<S>`</S> & <S>-`</S> & <S>-`-</S> & <S>`-</S> &
+\ifxetex
+ <E>`</E> & <E>-`</E> &
+\fi
+ <C>`</C> &
<S>`e'</S> & <T>`e'</T> & \raise.2ex\hbox{$\lhook$} & ` \\
\hline
-<S>p</S> & <S>-p</S> & <S>-p-</S> & <S>p-</S> &<C>p</C> &
+<S>p</S> & <S>-p</S> & <S>-p-</S> & <S>p-</S> &
+\ifxetex
+ <E>p</E> & <E>-p</E> &
+\fi
+ <C>p</C> &
<S>pe'</S> & <T>pe'</T> & p & p \\
- & & & & <C>f</C> &
+ & & & &
+\ifxetex
+ <E></E> & <E></E> &
+\fi
+ <C>f</C> &
& & f & f \\
\hline
-<S>.s</S> & <S>-.s</S> & & &<C>.s</C> &
+<S>.s</S> & <S>-.s</S> & & &
+\ifxetex
+ <E>.s</E> & <E>-.s</E> &
+\fi
+ <C>.s</C> &
<S>.s=ade'</S> & <T>.s=ade'</T> & \d s & .s\\
\hline
-<S>q</S> & <S>-q</S> & <S>-q-</S> & <S>q-</S> &<C>q</C> &
+<S>q</S> & <S>-q</S> & <S>-q-</S> & <S>q-</S> &
+\ifxetex
+ <E>q</E> & <E>-q</E> &
+\fi
+ <C>q</C> &
<S>q=ap+</S> & <T>q=ap+</T> & q & q \\
\hline
%\newpage
%\hline
-<S>r</S> & <S>-r</S> & <S>-r-</S> & <S>r-</S> &<C>r</C> &
+<S>r</S> & <S>-r</S> & <S>-r-</S> & <S>r-</S> &
+\ifxetex
+ <E>r</E> & <E>-r</E> &
+\fi
+ <C>r</C> &
<S>riy^s</S> & <T>riy^s</T> & r & r \\
%\hline
-<S>R</S> & <S>-R</S> & <S>-R-</S> & <S>R-</S> &<C>R</C> &
- & & & R\\
+<S>R</S> & <S>-R</S> & <S>-R-</S> & <S>R-</S> &
+\ifxetex
+ <E></E> & <E></E> &
+\fi
+ <C>R</C> &
+ & & r & R\\
+
+
+\ifxetex
+ & & & &
+ <E>R</E> & <E>-R</E> &
+ &
+ \multicolumn{2}{r|}{dotless <T>d=alat+</T>/<T>riy^s</T>} & r & R\\
+\fi
\hline
-<S>^s</S> & <S>-^s</S> & <S>-^s-</S> & <S>^s-</S> &<C>^s</C> &
+
+\hline
+<S>^s</S> & <S>-^s</S> & <S>-^s-</S> & <S>^s-</S> &
+\ifxetex
+ <E>^s</E> & <E>-^s</E> &
+\fi
+ <C>^s</C> &
<S>^siyn</S> & <T>^siyn</T> & \v s & \verb.^s.\\
\hline
-<S>t</S> & <S>-t</S> & & &<C>t</C> &
+<S>t</S> & <S>-t</S> & & &
+\ifxetex
+ <E>t</E> & <E>-t</E> &
+\fi
+ <C>t</C> &
<S>taw</S> & <T>taw</T> & t & t\\
- & & & & <C>_t</C> &
+ & & & &
+\ifxetex
+ <E></E> & <E>-</E> &
+\fi
+ <C>_t</C> &
& & \b{t} & \verb._t. \\
\hline
@@ -258,13 +455,13 @@
under the consonant, user upper case input.
-\begin{quote}
-{\bf ATTENTION:} I had to change the coding of <T>zq=ap+=a'</T>
-(<S>_=a</S>) from {\tt o} to \verb.=a. in order to accomodate the new
-letter <S>_o</S> (coding {\tt o}). In texts encoded up to version 0.4
-{\tt o} has to be replaced by \verb.=a. Sorry for any
-inconveniances.
-\end{quote}
+%\begin{quote}
+%{\bf ATTENTION:} I had to change the coding of <T>zq=ap+=a'</T>
+%(<S>_=a</S>) from {\tt o} to \verb.=a. in order to accomodate the new
+%letter <S>_o</S> (coding {\tt o}). In texts encoded up to version 0.4
+%{\tt o} has to be replaced by \verb.=a. Sorry for any
+%inconveniances.
+%\end{quote}
\begin{tabular}[t]{| >{\rule[-3mm]{0pt}{11mm}}c | c | r l | c | >{\tt}c |}
@@ -276,11 +473,13 @@
\hline
<S>_e</S> & <S>_:e</S> & <S>rb+=a.s=a'</S> & <T>rb+=a.s=a'</T> & <T>e</T> & e \\
\hline
+ & <S>_:E</S> & <S>rb+=a.s=a' arrik=a'</S> & <T>rb+=a.s=a' arrik=a'</T> & <T>E</T> & E \\
+\hline
<S>_i</S> & <S>_:i</S> & <S>.hb+=a.s=a'</S> & <T>.hb+=a.s=a'</T> & <T>i</T> & i \\
\hline
-<S>_=a</S> & <S>_:=a</S> & <S>zq=ap+=a'</S> & <T>zq=ap+=a'</T> & <T>=a</T> & =a \\
+<S>_=a</S> & <S>_:=a</S> & <S>zq=ap+=a'</S> & <T>zq=ap+=a'</T> & <T>=a</T> & =a \\
\hline
-<S>_u</S> & <S>_:u</S> & <S>`.s=a.s=a'</S> & <T>`.s=a.s=a'</T> & <T>u</T> & u \\
+<S>_u</S> & <S>_:u</S> & <S>`.s=a.s=a'</S> & <T>`.s=a.s=a'</T> & <T>u</T> & u \\
\hline
<S>_o</S> & <S>_:o</S> & & & <T>=a</T> & o \\
\hline
@@ -310,6 +509,7 @@
lectionis}:
<S>l:iy</S>, <S>l:ow</S> (or <C>l:iy</C>, <C>l:ow</C>)
+
The <ST>sy=a--Pme'</ST> is processed as a vowel sign, even if it is not so
from a linguistic point of view. Its coding \showS{P} is chose because
of its plural signification. If you do not want it over a letter, put
@@ -350,8 +550,15 @@
\showC{:el:iy :el:iy lm:=an:=a' s:=ab:=akt:=an:iy}\\
\hfill <C>:el:iy ':el:iy lm:=an:=a' s:=ab:=akt:=an:iy</C>
+\ifxetex
+\showE{':el:iy ':el:iy lm:=an:=a' s:=ab:=akt:=an:iy}\\
+\hfill <ET>':el:iy ':el:iy lm:=an:=a' s:=ab:=akt:=an:iy</ET>
+\fi
+For Estrangelo the same vowel codings can be used
+
+
\subsection{Transliteration and long vowels}
As mention in section \ref{prep} below, the preprocessor can produce a
@@ -411,6 +618,22 @@
<S>./.</S> & ./. \\
\hline
\end{tabular}
+\ifxetex
+~~~~~~~
+\begin{tabular}{| >{\rule[-4mm]{0pt}{11mm}}c | >{\tt}c |}
+\hline
+Estrangelo & \rm coding \\
+\hline
+<E>. </E> & . \\
+\hline
+<E>: </E> & : \\
+\hline
+<E>.:. </E> & \verb:.:.: \\
+\hline
+<E>.X.</E> & .X. \\
+\hline
+\end{tabular}
+\fi
\subsection{Unicode}
@@ -555,18 +778,16 @@
\urlstyle{same}
-\section{The preprocessor {\tt serto.py}}\label{prep}
+\section{The preprocessor {\tt serto[2].py}}\label{prep}
Typesetting of texts is still not yet possible with standard \LaTeX, since the
right-to-left typesetting (as for
instance as in Arab\TeX) has not yet been implemented. For the time
being I propose a preprocessor (written in {\sc
-Python}\footnote{Every version from 2.4 onwards up to version 2.7 should do; Python 3.* however does not work {\sc
-Python} is an interpreted
-object oriented programming language available for many operating
-systems (\url{http://www.python.org}).}) and \pdflatex.
+Python}\footnote{Every version from 2.4 onwards up to version 2.7 should do for {\tt serto2.py}; for {\sc Python 3.*} use {\tt serto.py}.})
+and \pdflatex\footnote{\XeLaTeX{} can handle UTF-8. However I have not yet adapted this package to \XeLaTeX.}.
-I'm well aware that {\tt serto.py} is not part of the most beautiful pieces
+I'm well aware that {\tt serto[2].py} is not part of the most beautiful pieces
of software code, on the contrary, it's rather spaghetti code. Many things could
have been in a more intelligent way, but it works, which is the most important thing.
If you find the time to improve it please share your changes with me!
@@ -582,11 +803,11 @@
sure to have the \verb.\usepackage{serto}. included in your preamble.
The option {\tt -o} is necessary if you use an older version of \LaTeX\ which is
-not capable to typeset texts from the right to the left (\texxet extension). The {\tt -o}
+not capable to typeset texts from the right to the left (\texxet{} extension). The {\tt -o}
-option tells the preprocessor to inverse the letters on its
own. In order to typeset whole paragraphs \pdflatex\ is the better
solution. Usually it comes with every modern \TeX-distribution.
-At least on Ubuntu 12.04 (texlive package), the standardly installed \pdflatex\ behaves correctly.
+At least since Ubuntu 12.04 (texlive package), the standardly installed \pdflatex\ behaves correctly.
The preprocessor recognizes two types of commands. Within a
single line you can put Syriac words between \SE\ and \eSE:
@@ -602,11 +823,13 @@
\showST{\^{}s\symbol{64}m=a`} produces <ST>^s at m=a`</ST>
For multiple lines, start a block using {\tt <SERTO>}\footnote{Using
-{\tt <SERTO>} or {\tt <TRANS>} implies the using of the {\tt -e}
-option of the preprocessor {\tt serto.py}. If you do not use the {\tt -e}
-option the resulting \LaTeX-file is likely to be syntactically incorrect.}
+{\tt <SERTO>} or {\tt <TRANS>} cannot work correctly with the {\tt -o}
+option of the preprocessor {\tt serto.py}. Use {\tt <CHALDEAN>} \dots{}
+{\tt </CHALDEAN>} and
+{\tt <ESTRANGELO>} \dots{} {\tt <ESTRANGELO>} for the Chaldean or
+Estrangelo alphabets.}
in a line on its
-own. This block can be closed by {\tt </SERTO>}.
+own. This block must be closed by a line containing {\tt </SERTO>}.
%To have a block in \st\ and in transliterated form, use {\tt
%<SERTOTRANS} and {\tt </SERTOTRANS>}.
If you need transliterated Syriac,
@@ -776,8 +999,8 @@
%\elatex\ (needed for the \texxet\ extension) must be used.
%\elatex\ properly sets text from the right to the left.
+A long example in Ser\d to:
-
\begin{quote}
<SERTO>
wk=ad .hzaw kuwmd'e da.h.tIyt=A': medem da`bad na.siy.h=a':
@@ -824,7 +1047,7 @@
\verb.\end{document}.
\end{quote}
-Replacing {\tt <SERTO>} by {\tt <CHALDEAN>}
+Replacing {\tt <SERTO>} by {\tt <CHALDEAN>} and \verb.\sertob. by \verb.\assyrb.
results in this
\begin{quote}
@@ -841,9 +1064,23 @@
</CHALDEAN>
\end{quote}
+Using {\tt <ESTRANGELO>} (and deleting remaining \verb.\sertob. and \verb.\assyrb.) results in
+\begin{quote}
+<ESTRANGELO>
+wk=ad .hzaw kuwmd'e da.h.tIyt=A': medem da`bad na.siy.h=a':
+lAbkuwh=y= wa'sruwh=y= wa'ytIywh=y= qd=am malk=a'.
+we'^stA`iyw lmalk=a' me----dem da`bad l'Al=Ahayhwn. m=alk=a'
+deyn 'ema----r. l'=a hw=a' me^stAwd=ay=aw 'e^stEwdiyt lIy dtEdba.h
+l'Ap=aluw: na.siy.h=a' 'emar. liy 'la=Ahe' 'ayleyn dma't`eyn. l'=a
+hw=a' 'la=Ahe' 'Enuwn. qareb 'Enuwn lIy lh=ark=a'.
+wl'=A
+^suwbh=adhuwn dakiys.ty=ane' l'=a ^s=abeq '=n=a' .had menhuwn
+dl'=a mdaqeq '=n=a' `adm=a' lram^s=a'.
+</ESTRANGELO>
+\end{quote}
-The file was preprocessed using {\tt serto.py}.
+The file was preprocessed using {\tt serto3.py} and then typeset with \XeLaTeX.
\section{Things still missing}
@@ -910,7 +1147,7 @@
\end{itemize}
-\subsection{Other files}
+\subsection{Other Files}
The Stylefile etc. {\tt *.sty}, {\tt *.fd} go into a directory for
stylefiles,
e.g. \url{/usr/local/share/texmf/tex/latex/serto/}.
@@ -924,14 +1161,39 @@
of the preprocessor \verb.#!/usr/bin/python. if your python
interpreter is somewhere else.
+In order to typeset using Estrangelo, an external (Unicode encoded) font has to be downloaded.
+The examples in this document use \emph{Estrangelo Edessa} designed by Paul Nelson and George Kiraz and copyrighted by the
+Syriac Computing Institute. For copyright reasons this font is not included in this package. Once you have downloaded the {\tt .ttf} file, install it with your system fonts (in both Linux (Ubuntu) and Windows, clicking on the file name usually opens a font viewer application which allows the (local) installation. Note, that Estrangelo only works with \XeLaTeX\ and
+its {\tt fontspec}-package.
+
+If you use a different font, adapt {\tt estrangelo.sty} accordingly.
+
\section{License}
-This Material is subjec to the LaTeX Project Public License 1.3
+This Material is subject to the LaTeX Project Public License 1.3
(\url{http://ctan.org/license/lppl1.3}).
\section{Changelog}
\begin{itemize}
+\item Version 1.3.2
+ \begin{itemize}
+ \item added Chaldean vowel <CT>rb+:=a.s:=a' ':arr:=ik:=a'</CT>: <C>m:E</C>
+ \item documentation updated
+ \end{itemize}
+\item Version 1.3
+ \begin{itemize}
+ \item documentation updated
+ \item error in loading {\tt *.font}-files corrected
+ \item {\tt serto.py} (for {\sc Python3}), no more support for {\sc
+ Python2} any more.
+ \end{itemize}
+\item Version 1.1
+ \begin{itemize}
+ \item encoding script for {\sc Python3}: {\tt serto3.py}
+ \item experimental Estrangelo support using a {\tt .ttf} (needs to
+ be downloaded)
+ \end{itemize}
\item Version 1.0
\begin{itemize}
\item adding a character for the \emph{linea occultans} above the letter
Added: trunk/Master/texmf-dist/doc/latex/aramaic-serto/test.mf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/aramaic-serto/test.mf (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/aramaic-serto/test.mf 2025-03-09 20:51:21 UTC (rev 74548)
@@ -0,0 +1,198 @@
+
+u#:=16/36pt#; % unit width Change ONLY this
+ % parameter to change the size of the fonts.
+boxx#:=4u#; % Asyyrian font basic size boxx.
+huassyr#:=u#;
+vuassyr#:=u#;
+%ht#:=5boxx#; % height of the character
+font_size 10pt#;
+%font_size 7boxx#; % the design size of the fonts
+%xgap#:=0.6pt#; % horizontal adjustment
+
+% For vowels taken from sertofont.mf
+stu#:= 2.5u#; % the unit, used in serto10.mf
+hu#:=stu#; % the horizontal unit
+vu#:=stu#; % the vertical unit
+basestroke# := stu#;
+
+%s#:=0#; % extra space at the left and the right
+%o#:=2boxx#; % overshoot
+%px#:=2/3pt#; % horizontal thickness of the pen;
+px#:=3/2u#;
+slant :=0; % This parameter controls the slantness of the
+ % fonts. Change it to for example 1/4 or -1/4 to
+ % produce italic fonts.
+mode_setup;
+if unknown slant: slant :=0
+else: currenttransform:= identity slanted slant yscaled aspect_ratio
+fi;
+
+%ygap#:=(ht#/13.5u#)*xgap#; % vertical adjustment
+%ho#:=0#; % horizontal overshoot
+%leftstemloc#:=2.5u#+s#; % position of left stem
+%barheight#:=0.45ht#; % height of bar lines
+py#:=0.9px#; % vertical pen thickness
+
+%% Font-Parameter for TeX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Added by Johannes Heinecke
+font_quad 5u#; % 1 em
+font_x_height 4u#; % 1 ex (used by syriac.sty to define accent position)
+font_normal_space 6u#; % word gap
+font_normal_stretch 4u#; % word gap may stretch by ...
+font_normal_shrink 2u#; % word gap my shrink by ...
+font_slant slant;
+
+
+define_pixels(hu, vu, basestroke);
+%%% Taken from sertobase.mf (for vowels)
+ pickup pencircle xscaled .5basestroke yscaled .3basestroke;
+ vowel_pen:=savepen;
+
+ pickup pencircle xscaled .5basestroke yscaled .2basestroke rotated 30;
+ vowelII_pen:=savepen;
+
+ pickup pencircle xscaled .3basestroke yscaled .2basestroke rotated 30;
+ vowelIII_pen:=savepen;
+let sertochar=\;
+
+
+define_pixels(u,huassyr,vuassyr);
+%define_whole_pixels(xgap);
+%define_whole_vertical_pixels(ygap);
+define_blacker_pixels(px,py);
+pickup pencircle xscaled px yscaled py;
+logo_pen:=savepen;
+%define_good_x_pixels(leftstemloc);
+%define_good_y_pixels(barheight);
+%define_corrected_pixels(o);
+%define_horizontal_corrected_pixels(ho);
+
+ def makebox(text r) =
+
+ for y=0 step u until h:
+ r((0, y), (w, y));
+ endfor
+
+ for y=0, -d, h:
+ r((0, y), (w, y));
+ endfor
+
+ % vertical lines on x-values:
+ for x=0 step u until w:
+ r((x, -d), (x, h));
+ endfor
+enddef;
+
+
+beginchar("S",14huassyr#,12vuassyr#,0);"The letter Simkat";
+z1=(0,0);
+z2=(5.5huassyr,0);
+z3=(5.5huassyr,1vuassyr);
+z5=(7huassyr,0.3vuassyr);
+z7=(8huassyr,0);
+z11=(13huassyr,0);
+z13=(14huassyr,1vuassyr);
+z15=(14huassyr,4vuassyr);
+z17=(12huassyr,10.6vuassyr);
+z19=(11huassyr,11vuassyr);
+z21=(9huassyr,10vuassyr);
+z22=(8.52huassyr,9.32vuassyr);
+z23=(8.5huassyr,9.3vuassyr);
+z24=(8.48huassyr,9.32vuassyr);
+z25=(6huassyr,11.7vuassyr);
+
+z27=(5huassyr,12vuassyr);
+%z29=(3huassyr,10.3vuassyr);
+z31=(2huassyr,7vuassyr);
+z33=(2.8huassyr,4vuassyr);
+z35=(0,4vuassyr);
+
+z37=(7.8huassyr,4vuassyr);
+z39=(11huassyr,4vuassyr);
+z41=(11huassyr,6vuassyr);
+z43=(10huassyr,7vuassyr);
+z45=(8.7huassyr,6vuassyr);
+z46=(7.82huassyr,4.02vuassyr);
+
+z47=(7huassyr,4vuassyr);
+z49=(6huassyr,7.7vuassyr);
+z51=(5huassyr,8vuassyr);
+z53=(4.3huassyr,7vuassyr);
+z55=(6huassyr,4.5vuassyr);
+z57=(6.98huassyr,4.02vuassyr);
+
+pickup logo_pen;
+fill z1--z2--z3..z5..{right}z7--z11{right}..{up}z13{up}
+..z15{up}..z17..{left}z19..z21..z22--z23--z24..z25..{left}z27{left}..{down}z31{down}..z33--z35--cycle;
+
+unfill z37{right}..{right}z39{up}..{up}z41{up}..{left}z43{left}..z45..z46--cycle;
+unfill z47{up}..z49..{left}z51{left}..{down}z53{down}..z55..z57--cycle;
+labels(range 1 thru 57);
+endchar;
+
+beginchar("Y",12huassyr#,12vuassyr#,3vuassyr#);"The letter Chap";
+z1=(0,0);
+z2=(11huassyr,0);
+z3=(12huassyr,1vuassyr);
+z5=(12huassyr,4vuassyr);
+z7=(8.7huassyr,10vuassyr);
+z11=(5.5huassyr,12vuassyr);
+z13=(3huassyr,10.2vuassyr);
+z15=(2huassyr,7vuassyr);
+z17=(2.6huassyr,7.3vuassyr);
+z19=(4.5huassyr,8vuassyr);
+z21=(7huassyr,6.5vuassyr);
+z23=(8.5huassyr,4vuassyr);
+z25=(0,4vuassyr);
+
+z27=(4.2huassyr, -3.4vuassyr);
+z29=(5huassyr, -2.6vuassyr);
+z31=(6.3huassyr, -3.2vuassyr);
+z33=(7huassyr, -2vuassyr);
+z35=(6.8huassyr, -1.4vuassyr);
+z37=(6huassyr, -2.3vuassyr);
+z39=(4.6huassyr, -1.8vuassyr);
+z41=(4huassyr, -2.8vuassyr);
+
+pickup logo_pen;
+fill z1--z2{right}..{up}z3{up}..{up}z5..z7..{left}z11{left}..z13
+..{down}z15{right}..z17..{right}z19{right}..z21..z23--z25--cycle;
+
+fill z27{right}..{right}z29{right}..{right}z31{right}..{up}z33{up}..{left}z35{left}
+..{left}z37{left}..{left}z39{left}..{down}z41{down}..{right}cycle;
+endchar;
+
+
+
+
+beginchar("T",13huassyr#,12vuassyr#,0);"The letter Tau";
+z1=(11huassyr,0);
+z2=(12huassyr,0);
+z3=(13huassyr,1vuassyr);
+z5=(13huassyr,4vuassyr);
+z6=(6huassyr,11.5vuassyr);
+z66=(5.9huassyr,11.6vuassyr);
+z7=(5.4huassyr,12vuassyr);
+z77=(5.1huassyr,11.7vuassyr);
+z9=(5huassyr,11.5vuassyr);
+z11=(1.3huassyr,3vuassyr);
+z13=(1.1huassyr,1.9vuassyr);
+z15=(3huassyr,0);
+z17=(5.7huassyr,1vuassyr);
+z19=(7.7huassyr,0.2vuassyr);
+z21=(8huassyr,0);
+z23=(8.3huassyr,0.2vuassyr);
+z24=(8huassyr,1vuassyr);
+z25=(3.5huassyr,4.2vuassyr);
+z27=(2.4huassyr,4vuassyr);
+z29=(4.2huassyr,8vuassyr);
+pickup logo_pen;
+fill z1--z2{right}..{up}z3--z5--z6..z66..{left}z7{left}..z77..z9--z11
+..{down}z13{down}..{right}z15{right}..{right}z17{right}..z19..{right}z21..{up}z23{up}
+..z24..{left}z25{left}..z27--z29--cycle;
+labels(range 1 thru 29);
+endchar;
+
+
+end;
+
Property changes on: trunk/Master/texmf-dist/doc/latex/aramaic-serto/test.mf
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assy.afm
===================================================================
--- trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assy.afm 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assy.afm 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,11 +1,11 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20110222
-Comment Creation Date: Sat Apr 6 18:20:42 2013
+Comment Generated by FontForge 20230101
+Comment Creation Date: Sun Mar 9 14:08:07 2025
FontName assy
FullName assy
FamilyName assy
Weight Regular
-Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+Notice (Generated from MetaFont bitmap by mftrace 1.2.20+git20191022.3b4bc2e, http://www.xs4all.nl/~hanwen/mftrace/ )
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
@@ -16,8 +16,8 @@
CapHeight 533
XHeight 711
Ascender 600
-Descender -236
-StartCharMetrics 70
+Descender -295
+StartCharMetrics 71
C 1 ; WX 333 ; N acute ; B 0 353 361 692 ;
C 2 ; WX 333 ; N circumflex ; B -28 318 373 588 ;
C 3 ; WX 333 ; N tilde ; B -28 316 439 629 ;
@@ -31,6 +31,7 @@
C 19 ; WX 333 ; N guillemotleft ; B -28 94 439 405 ;
C 20 ; WX 333 ; N guillemotright ; B -4 167 303 573 ;
C 21 ; WX 333 ; N endash ; B -29 206 362 646 ;
+C 25 ; WX 333 ; N dotlessi ; B 0 116 291 329 ;
C 26 ; WX 333 ; N dotlessj ; B 0 116 257 507 ;
C 27 ; WX 222 ; N ff ; B 60 152 162 295 ;
C 36 ; WX 711 ; N dollar ; B 0 -178 711 533 ;
Modified: trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assyrb10.afm
===================================================================
--- trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assyrb10.afm 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/assyrb10.afm 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,11 +1,11 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20110222
-Comment Creation Date: Sat Apr 6 18:20:44 2013
+Comment Generated by FontForge 20230101
+Comment Creation Date: Sun Mar 9 14:08:08 2025
FontName assyrb10
FullName assyrb10
FamilyName assyrb10
Weight Regular
-Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+Notice (Generated from MetaFont bitmap by mftrace 1.2.20+git20191022.3b4bc2e, http://www.xs4all.nl/~hanwen/mftrace/ )
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
@@ -16,8 +16,8 @@
CapHeight 533
XHeight 711
Ascender 600
-Descender -236
-StartCharMetrics 70
+Descender -296
+StartCharMetrics 71
C 1 ; WX 387 ; N acute ; B 1 410 420 803 ;
C 2 ; WX 387 ; N circumflex ; B -32 367 434 683 ;
C 3 ; WX 387 ; N tilde ; B -32 367 510 728 ;
@@ -31,6 +31,7 @@
C 19 ; WX 387 ; N guillemotleft ; B -33 109 509 471 ;
C 20 ; WX 387 ; N guillemotright ; B -4 193 351 664 ;
C 21 ; WX 387 ; N endash ; B -33 238 420 750 ;
+C 25 ; WX 387 ; N dotlessi ; B 0 135 337 380 ;
C 26 ; WX 387 ; N dotlessj ; B 0 135 299 586 ;
C 27 ; WX 258 ; N ff ; B 70 175 188 342 ;
C 36 ; WX 1067 ; N dollar ; B 0 -178 1067 533 ;
Modified: trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/serto10.afm
===================================================================
--- trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/serto10.afm 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/serto10.afm 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,11 +1,11 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20110222
-Comment Creation Date: Sat Apr 6 18:20:37 2013
+Comment Generated by FontForge 20230101
+Comment Creation Date: Sun Mar 9 14:08:04 2025
FontName serto10
FullName serto10
FamilyName serto10
Weight Regular
-Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+Notice (Generated from MetaFont bitmap by mftrace 1.2.20+git20191022.3b4bc2e, http://www.xs4all.nl/~hanwen/mftrace/ )
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
@@ -17,7 +17,7 @@
XHeight 111
Ascender 277
Descender 0
-StartCharMetrics 107
+StartCharMetrics 108
C 1 ; WX 333 ; N acute ; B 0 353 361 692 ;
C 2 ; WX 333 ; N circumflex ; B -28 318 373 588 ;
C 3 ; WX 333 ; N tilde ; B -28 316 439 629 ;
@@ -34,6 +34,7 @@
C 20 ; WX 333 ; N guillemotright ; B -4 167 303 573 ;
C 21 ; WX 333 ; N endash ; B -29 206 362 646 ;
C 23 ; WX 444 ; N cwm ; B -14 2 348 109 ;
+C 25 ; WX 333 ; N dotlessi ; B 0 116 291 329 ;
C 26 ; WX 333 ; N dotlessj ; B 0 116 257 507 ;
C 27 ; WX 222 ; N ff ; B 60 152 162 295 ;
C 33 ; WX 667 ; N exclam ; B -1 -1 557 557 ;
Modified: trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/sertob10.afm
===================================================================
--- trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/sertob10.afm 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/afm/public/aramaic-serto/sertob10.afm 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,11 +1,11 @@
StartFontMetrics 2.0
-Comment Generated by FontForge 20110222
-Comment Creation Date: Sat Apr 6 18:20:40 2013
+Comment Generated by FontForge 20230101
+Comment Creation Date: Sun Mar 9 14:08:06 2025
FontName sertob10
FullName sertob10
FamilyName sertob10
Weight Regular
-Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+Notice (Generated from MetaFont bitmap by mftrace 1.2.20+git20191022.3b4bc2e, http://www.xs4all.nl/~hanwen/mftrace/ )
ItalicAngle 0
IsFixedPitch false
UnderlinePosition -100
@@ -17,7 +17,7 @@
XHeight 160
Ascender 449
Descender -21
-StartCharMetrics 107
+StartCharMetrics 108
C 1 ; WX 417 ; N acute ; B -10 435 462 872 ;
C 2 ; WX 417 ; N circumflex ; B -45 390 476 742 ;
C 3 ; WX 417 ; N tilde ; B -46 390 559 791 ;
@@ -34,6 +34,7 @@
C 20 ; WX 417 ; N guillemotright ; B -13 202 387 722 ;
C 21 ; WX 417 ; N endash ; B -45 250 462 812 ;
C 23 ; WX 556 ; N cwm ; B -23 -18 440 157 ;
+C 25 ; WX 417 ; N dotlessi ; B 0 106 407 449 ;
C 26 ; WX 417 ; N dotlessj ; B 0 106 365 672 ;
C 27 ; WX 278 ; N ff ; B 56 161 221 394 ;
C 33 ; WX 833 ; N exclam ; B -20 -21 716 716 ;
Modified: trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/syriacvowels.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/syriacvowels.mf 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/syriacvowels.mf 2025-03-09 20:51:21 UTC (rev 74548)
@@ -6,7 +6,7 @@
% Please send any improvements, corrections, suggestions, enhancements etc.
% to the Author!
%
-% Version 0.5 as of 10th November 2003
+% Version 0.6 as of 9th March 2025
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -217,6 +217,17 @@
penlabels(1,2);
endchar;
+sertochar "revo.so arrikha e short (chaldean)";
+beginchar(oct"31", 3hu#, 6vu#, 0);
+ pickup chaldeanvowels_pen;
+ lft z1 = (0, 2vu);
+ z2 = z1 + (1.6hu, 0vu);
+ drawdot z1;
+ drawdot z2;
+
+ penlabels(1,2);
+endchar;
+
sertochar "revo.so e (chaldean)";
beginchar(oct"32", 3hu#, 6vu#, 0);
pickup chaldeanvowels_pen;
Deleted: trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/test.mf
===================================================================
--- trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/test.mf 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/fonts/source/public/aramaic-serto/test.mf 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,198 +0,0 @@
-
-u#:=16/36pt#; % unit width Change ONLY this
- % parameter to change the size of the fonts.
-boxx#:=4u#; % Asyyrian font basic size boxx.
-huassyr#:=u#;
-vuassyr#:=u#;
-%ht#:=5boxx#; % height of the character
-font_size 10pt#;
-%font_size 7boxx#; % the design size of the fonts
-%xgap#:=0.6pt#; % horizontal adjustment
-
-% For vowels taken from sertofont.mf
-stu#:= 2.5u#; % the unit, used in serto10.mf
-hu#:=stu#; % the horizontal unit
-vu#:=stu#; % the vertical unit
-basestroke# := stu#;
-
-%s#:=0#; % extra space at the left and the right
-%o#:=2boxx#; % overshoot
-%px#:=2/3pt#; % horizontal thickness of the pen;
-px#:=3/2u#;
-slant :=0; % This parameter controls the slantness of the
- % fonts. Change it to for example 1/4 or -1/4 to
- % produce italic fonts.
-mode_setup;
-if unknown slant: slant :=0
-else: currenttransform:= identity slanted slant yscaled aspect_ratio
-fi;
-
-%ygap#:=(ht#/13.5u#)*xgap#; % vertical adjustment
-%ho#:=0#; % horizontal overshoot
-%leftstemloc#:=2.5u#+s#; % position of left stem
-%barheight#:=0.45ht#; % height of bar lines
-py#:=0.9px#; % vertical pen thickness
-
-%% Font-Parameter for TeX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Added by Johannes Heinecke
-font_quad 5u#; % 1 em
-font_x_height 4u#; % 1 ex (used by syriac.sty to define accent position)
-font_normal_space 6u#; % word gap
-font_normal_stretch 4u#; % word gap may stretch by ...
-font_normal_shrink 2u#; % word gap my shrink by ...
-font_slant slant;
-
-
-define_pixels(hu, vu, basestroke);
-%%% Taken from sertobase.mf (for vowels)
- pickup pencircle xscaled .5basestroke yscaled .3basestroke;
- vowel_pen:=savepen;
-
- pickup pencircle xscaled .5basestroke yscaled .2basestroke rotated 30;
- vowelII_pen:=savepen;
-
- pickup pencircle xscaled .3basestroke yscaled .2basestroke rotated 30;
- vowelIII_pen:=savepen;
-let sertochar=\;
-
-
-define_pixels(u,huassyr,vuassyr);
-%define_whole_pixels(xgap);
-%define_whole_vertical_pixels(ygap);
-define_blacker_pixels(px,py);
-pickup pencircle xscaled px yscaled py;
-logo_pen:=savepen;
-%define_good_x_pixels(leftstemloc);
-%define_good_y_pixels(barheight);
-%define_corrected_pixels(o);
-%define_horizontal_corrected_pixels(ho);
-
- def makebox(text r) =
-
- for y=0 step u until h:
- r((0, y), (w, y));
- endfor
-
- for y=0, -d, h:
- r((0, y), (w, y));
- endfor
-
- % vertical lines on x-values:
- for x=0 step u until w:
- r((x, -d), (x, h));
- endfor
-enddef;
-
-
-beginchar("S",14huassyr#,12vuassyr#,0);"The letter Simkat";
-z1=(0,0);
-z2=(5.5huassyr,0);
-z3=(5.5huassyr,1vuassyr);
-z5=(7huassyr,0.3vuassyr);
-z7=(8huassyr,0);
-z11=(13huassyr,0);
-z13=(14huassyr,1vuassyr);
-z15=(14huassyr,4vuassyr);
-z17=(12huassyr,10.6vuassyr);
-z19=(11huassyr,11vuassyr);
-z21=(9huassyr,10vuassyr);
-z22=(8.52huassyr,9.32vuassyr);
-z23=(8.5huassyr,9.3vuassyr);
-z24=(8.48huassyr,9.32vuassyr);
-z25=(6huassyr,11.7vuassyr);
-
-z27=(5huassyr,12vuassyr);
-%z29=(3huassyr,10.3vuassyr);
-z31=(2huassyr,7vuassyr);
-z33=(2.8huassyr,4vuassyr);
-z35=(0,4vuassyr);
-
-z37=(7.8huassyr,4vuassyr);
-z39=(11huassyr,4vuassyr);
-z41=(11huassyr,6vuassyr);
-z43=(10huassyr,7vuassyr);
-z45=(8.7huassyr,6vuassyr);
-z46=(7.82huassyr,4.02vuassyr);
-
-z47=(7huassyr,4vuassyr);
-z49=(6huassyr,7.7vuassyr);
-z51=(5huassyr,8vuassyr);
-z53=(4.3huassyr,7vuassyr);
-z55=(6huassyr,4.5vuassyr);
-z57=(6.98huassyr,4.02vuassyr);
-
-pickup logo_pen;
-fill z1--z2--z3..z5..{right}z7--z11{right}..{up}z13{up}
-..z15{up}..z17..{left}z19..z21..z22--z23--z24..z25..{left}z27{left}..{down}z31{down}..z33--z35--cycle;
-
-unfill z37{right}..{right}z39{up}..{up}z41{up}..{left}z43{left}..z45..z46--cycle;
-unfill z47{up}..z49..{left}z51{left}..{down}z53{down}..z55..z57--cycle;
-labels(range 1 thru 57);
-endchar;
-
-beginchar("Y",12huassyr#,12vuassyr#,3vuassyr#);"The letter Chap";
-z1=(0,0);
-z2=(11huassyr,0);
-z3=(12huassyr,1vuassyr);
-z5=(12huassyr,4vuassyr);
-z7=(8.7huassyr,10vuassyr);
-z11=(5.5huassyr,12vuassyr);
-z13=(3huassyr,10.2vuassyr);
-z15=(2huassyr,7vuassyr);
-z17=(2.6huassyr,7.3vuassyr);
-z19=(4.5huassyr,8vuassyr);
-z21=(7huassyr,6.5vuassyr);
-z23=(8.5huassyr,4vuassyr);
-z25=(0,4vuassyr);
-
-z27=(4.2huassyr, -3.4vuassyr);
-z29=(5huassyr, -2.6vuassyr);
-z31=(6.3huassyr, -3.2vuassyr);
-z33=(7huassyr, -2vuassyr);
-z35=(6.8huassyr, -1.4vuassyr);
-z37=(6huassyr, -2.3vuassyr);
-z39=(4.6huassyr, -1.8vuassyr);
-z41=(4huassyr, -2.8vuassyr);
-
-pickup logo_pen;
-fill z1--z2{right}..{up}z3{up}..{up}z5..z7..{left}z11{left}..z13
-..{down}z15{right}..z17..{right}z19{right}..z21..z23--z25--cycle;
-
-fill z27{right}..{right}z29{right}..{right}z31{right}..{up}z33{up}..{left}z35{left}
-..{left}z37{left}..{left}z39{left}..{down}z41{down}..{right}cycle;
-endchar;
-
-
-
-
-beginchar("T",13huassyr#,12vuassyr#,0);"The letter Tau";
-z1=(11huassyr,0);
-z2=(12huassyr,0);
-z3=(13huassyr,1vuassyr);
-z5=(13huassyr,4vuassyr);
-z6=(6huassyr,11.5vuassyr);
-z66=(5.9huassyr,11.6vuassyr);
-z7=(5.4huassyr,12vuassyr);
-z77=(5.1huassyr,11.7vuassyr);
-z9=(5huassyr,11.5vuassyr);
-z11=(1.3huassyr,3vuassyr);
-z13=(1.1huassyr,1.9vuassyr);
-z15=(3huassyr,0);
-z17=(5.7huassyr,1vuassyr);
-z19=(7.7huassyr,0.2vuassyr);
-z21=(8huassyr,0);
-z23=(8.3huassyr,0.2vuassyr);
-z24=(8huassyr,1vuassyr);
-z25=(3.5huassyr,4.2vuassyr);
-z27=(2.4huassyr,4vuassyr);
-z29=(4.2huassyr,8vuassyr);
-pickup logo_pen;
-fill z1--z2{right}..{up}z3--z5--z6..z66..{left}z7{left}..z77..z9--z11
-..{down}z13{down}..{right}z15{right}..{right}z17{right}..z19..{right}z21..{up}z23{up}
-..z24..{left}z25{left}..z27--z29--cycle;
-labels(range 1 thru 29);
-endchar;
-
-
-end;
-
Modified: trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/assy.tfm
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/assyrb10.tfm
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/serto10.tfm
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/tfm/public/aramaic-serto/sertob10.tfm
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/assy.pfb
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/assyrb10.pfb
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/serto10.pfb
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/fonts/type1/public/aramaic-serto/sertob10.pfb
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/tex/latex/aramaic-serto/serto.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/aramaic-serto/serto.sty 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/texmf-dist/tex/latex/aramaic-serto/serto.sty 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1,10 +1,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% serto.sty
%% For the use of serto fonts within LaTeX
-%% Last modified 9th June 2003
+%% Last modified 15th December 2020
%% Johannes Heinecke, Lannion
-\typeout{Document Style `serto.sty' <9th June 2003>.}
+\typeout{Document Style `serto.sty' <15th December 2020>.}
\def\fsertr{serto10 }
\def\fsertb{serto10b }
Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds 2025-03-09 20:40:55 UTC (rev 74547)
+++ trunk/Master/tlpkg/libexec/ctan2tds 2025-03-09 20:51:21 UTC (rev 74548)
@@ -1339,6 +1339,7 @@
'serbianc', "die 'skipping, use babel-serbianc'",
'serbianpart', "die 'skipping, await request'",
'serial', "die 'skipping, koma, 1999'",
+ 'serto', "die 'use aramaic-serto'",
'setouterbox', "die 'skipping, use oberdiek'",
'sfarticle', "die 'skipping, LaTeX 2.09'",
'sfheaders', "die 'skipping, noinfo license, no reply from author'",
@@ -2130,7 +2131,8 @@
'apacite', '\.apc|' . $standardtex,
'apnum', 'apnum.tex',
'arabtex', '(arab|heb)tex\.tex|' . $standardtex,
- 'autoaligne', '\.tex|' . $standardtex,
+ 'aramaic-serto', '\.(fd|sty)', # not .py
+ 'autoaligne', '\.tex|' . $standardtex,
'autopuncitems', '\.lua|' . $standardtex,
'autotype', '\.txt|' . $standardtex,
'axessibility', '\.lua|' . $standardtex,
@@ -3621,6 +3623,7 @@
# packages which have Metafont sources to run.
$standardmf='[0-9]\.mf';
%specialmf= (
+ 'aramaic-serto','^[^t].*mf$', # not test.mf
'asaetr', 'NULL', # cmcscsl10.mf conflict
'astro', 'astrosym.mf',
'backgammon', 'bg\.mf',
@@ -3684,6 +3687,7 @@
# additional mf files to be installed but not run.
$standardmfinstall = '\.mf$';
%specialmfinstall = (
+ 'aramaic-serto'=> '^[^t].*mf$', # not test.mf
'asaetr' => 'NULL', # cmcscsl10.mf conflict
'astro' => 'astrosym.(cal|cmn|mac|uni|xtr)',
'ibygrk' => 'ibycus4\.map', # tex|mf source
@@ -5069,6 +5073,7 @@
# don't use $mfpatt since that's only the tfm-able mf files; just
# install all the .mf files.
my $mf_inst_patt = $specialmfinstall{$package} || $standardmfinstall;
+ print "\t DOMF for package $package ($mf_inst_patt)\n";
&install ($mfdir, $mf_inst_patt);
}
More information about the tex-live-commits
mailing list.