summaryrefslogtreecommitdiff
path: root/language/arabic/arabtex/mfinput
diff options
context:
space:
mode:
Diffstat (limited to 'language/arabic/arabtex/mfinput')
-rw-r--r--language/arabic/arabtex/mfinput/arabsymb.mf177
-rw-r--r--language/arabic/arabtex/mfinput/hcaption.mf199
-rw-r--r--language/arabic/arabtex/mfinput/hcbase.mf1020
-rw-r--r--language/arabic/arabtex/mfinput/hclassic.mf208
-rw-r--r--language/arabic/arabtex/mfinput/nash.mf38
-rw-r--r--language/arabic/arabtex/mfinput/nash14.mf52
-rw-r--r--language/arabic/arabtex/mfinput/nash14bf.mf51
-rw-r--r--language/arabic/arabtex/mfinput/nashbase.mf541
-rw-r--r--language/arabic/arabtex/mfinput/nashchar.mf762
-rw-r--r--language/arabic/arabtex/mfinput/nashdia.mf119
-rw-r--r--language/arabic/arabtex/mfinput/nashdig.mf74
-rw-r--r--language/arabic/arabtex/mfinput/nashlig.mf508
-rw-r--r--language/arabic/arabtex/mfinput/nashspec.mf206
-rw-r--r--language/arabic/arabtex/mfinput/xarbsymb.dat209
-rw-r--r--language/arabic/arabtex/mfinput/xarbsymb.mf213
-rw-r--r--language/arabic/arabtex/mfinput/xnsh.mf43
-rw-r--r--language/arabic/arabtex/mfinput/xnsh14.mf52
-rw-r--r--language/arabic/arabtex/mfinput/xnsh14bf.mf51
-rw-r--r--language/arabic/arabtex/mfinput/xnshbase.mf578
-rw-r--r--language/arabic/arabtex/mfinput/xnshchar.mf646
-rw-r--r--language/arabic/arabtex/mfinput/xnshdia.mf145
-rw-r--r--language/arabic/arabtex/mfinput/xnshdig.mf100
-rw-r--r--language/arabic/arabtex/mfinput/xnshlig.mf547
-rw-r--r--language/arabic/arabtex/mfinput/xnshspec.mf202
24 files changed, 6741 insertions, 0 deletions
diff --git a/language/arabic/arabtex/mfinput/arabsymb.mf b/language/arabic/arabtex/mfinput/arabsymb.mf
new file mode 100644
index 0000000000..9ce55b36a5
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/arabsymb.mf
@@ -0,0 +1,177 @@
+%%%%%%%%%%%%%%%%%%%% arabsymb.mf %%%%%%%%%%%%%%%%%%%%
+% 18.10.1998 22:33:10
+% code assignments for arabic font in ArabTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+% 21.05.97
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+nashcode := oct "1"; % file has been read
+
+%%%%%%%%%%%%%%%%%% connection forms %%%%%%%%%%%%%%%%%%
+
+f_iso := oct "0"; % isolated
+f_end := oct "1"; % final
+f_mid := oct "2"; % medial
+f_beg := oct "3"; % initial
+
+%%%%%%%%%%%%%%%%%% diacritical marks %%%%%%%%%%%%%%%%%
+
+ttah_dia := oct "010"; % for urdu
+one_dot_up := oct "011"; %
+two_dots_down := oct "012"; %
+fatha := oct "013"; %
+kasra := oct "013"; %
+damma := oct "014"; %
+hamza := oct "015"; %
+madda := oct "016"; %
+shadda := oct "017"; %
+two_dots_up := oct "020"; %
+three_dots_up := oct "021"; %
+three_dots_down := oct "022"; %
+fathatan := oct "023"; %
+kasratan := oct "023"; %
+dammatan := oct "024"; %
+sukun := oct "025"; %
+wasla := oct "026"; %
+quran_alif := oct "027"; %
+bow_dia := oct "030"; % for kurdish
+e_dia := oct "040"; % for pashto
+zwarakay := oct "040"; % for pashto
+one_dot_down := oct "056"; % period
+h_dia := oct "146"; % for urdu
+ammad := oct "146"; % for pashto
+
+%%%%%%%%%%%%%%%%%% letters %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+hamza_iso := oct "132"; % 132 040 040
+
+alif := oct "100"; % 100,101
+alif_iso := alif; % 100
+alif_end := oct "101"; %
+bah_s := oct "110"; % 110-113
+gim := oct "140"; % 140-143
+hhah := oct "150"; % 150-153
+khah := oct "160"; % 160-163
+tsah := oct "170"; % 170-173
+dal := oct "130"; % 130,131
+rah := oct "120"; % 120,121
+zay := oct "122"; % 122,123
+zhah := oct "124"; % 124,125
+sin := oct "200"; % 200-203
+shin := oct "210"; % 210-213
+sad := oct "220"; % 220-223
+dad := oct "230"; % 230-233
+kaf_w := oct "234"; % 234-237 wide kaf
+ttah := oct "240"; % 240-243
+zzah := oct "244"; % 244-247
+ain := oct "250"; % 250-253
+fah_s := oct "254"; % 254-257 fah family
+fah := oct "362"; % 362,363
+qaf := oct "364"; % 364,365
+vah := oct "366"; % 366,367
+kaf_s := oct "270"; % 270-273 kaf family
+kaf := oct "274"; % 274,275
+gaf_s := oct "300"; % 300-303 gaf family
+gaf := oct "304"; % 304,305
+lam := oct "310"; % 310-313
+mim := oct "320"; % 320-323
+nun := oct "340"; % 340,341
+hah := oct "350"; % 350-354
+waw := oct "360"; % 360,361
+yah := oct "370"; % 370,371
+
+bah := bah_s; %
+
+%%%%%%%%%%%%%%%%%% special characters %%%%%%%%%%%%%%%%%%%
+
+block := oct "000"; % 000-003
+tatwil := oct "004"; % 004-007
+
+rquotes := oct "042"; % 042
+period := oct "056"; % 056
+lquotes := oct "134"; % 134
+
+space_spec := oct "044"; % 046,047 carrier for dots
+no_break := oct "046"; % 046 no space but breaks ligatures
+break := oct "047"; % 047 small space, breaks connection
+
+%%%%%%%%%%%%%%%%%% ligatures %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+bah_spec_gim := oct "027"; % 031 medial bah before gim
+bah_beg_gim := oct "030"; % 032 initial (!) bah before gim
+g_to_mb := oct "031"; % 033 medial bah to gim
+bah_high := oct "032"; % 034,035 before sin, sad
+bah_spec := oct "034"; % 036,037 bah before final rah, nun
+lam_spec_low := oct "072"; % 074 medial lam for 'allah'
+alif_spec_mim := oct "075"; % 076 final alif after mim
+lam_alif := oct "102"; % 102,103
+lam_alif_iso := lam_alif; % 102
+lam_alif_end := oct "103"; %
+bah_end_hah := oct "102"; % 104,105 bah before final hah
+bah_spec_yah := oct "104"; % 106,107 bah before gim, with tie;
+% also bah before yah
+gim_spec := oct "143"; % 144,145 from above
+gim_close := oct "144"; % 146,147 closed gim
+hhah_spec := oct "153"; % 154,155 from above
+khah_spec := oct "163"; % 164,165 from above
+rah_k := oct "166"; % 166,167 kurdish rah
+tsah_spec := oct "173"; % 174,175 from above
+sin_spec := oct "202"; % 204,205 short form
+shin_spec := oct "204"; % 206,207 short form
+sad_spec := oct "222"; % 224,225 short form
+dad_spec := oct "224"; % 226,227 short form
+kaf_spec := oct "274"; % 276,277 short form
+gaf_spec := oct "304"; % 306,307 short form
+lam_on_gim := oct "312"; % 314 initial (!) lam before gim
+lam_long := oct "312"; % 315 initial lam before yah
+lam_spec_yah := oct "314"; % 316 before final yah ?
+lam_spec_mim := oct "314"; % 317 initial lam before medial mim
+mim_spec_high := oct "322"; % 324 from above
+mim_spec := oct "324"; % 325-327 final; medial after lam;
+% also before gim
+mim_spec_mim := oct "325"; % 330 initial mim before mim
+mim_lam_gim := oct "327"; % 331 medial mim between lam and gim
+lam_spec_hah := oct "330"; % 333 initial lam before medial hah
+mim_spec_long := oct "332"; % 334 medial mim after lam, vocalized
+mm_to_b := oct "333"; % 335 bah to medial mim
+bah_mid_mim := oct "334"; % 336,337 bah before medial mim
+mim_spec_alif := oct "342"; % 344 medial mim before alif
+er_to_s := oct "343"; % 345 sin to final rah
+bah_end_mim := oct "344"; % 346 medial bah before final mim
+bah_beg_mim := oct "345"; % 347 initial (!) bah before final mim
+hah_urd := oct "353"; % 353,354 two-eyed hah,
+% see hah and hah_spec_lam
+hah_spec_lam := oct "352"; % 354 medial hah after initial lam
+hah_spec := oct "354"; % 355-357 final short hah;
+% also medial hah after sin
+yah_spec := oct "371"; % 372 ligature for final yah
+
+%%%%%%%%%%%%%%%%%% ties %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+g_to_s := bah_spec_gim; % = sin to gim
+em_to_s := bah_end_mim; % = sin to final mim
+mh_to_s := bah_end_hah; % = sin to medial hah or final mim
+g_to_bb := bah_beg_gim; % = initial bah to gim
+em_to_bb := bah_beg_mim; % = initial bah to final mim
+
+%%%%%%%%%%%%%%%%%% others %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+bah_p := oct "114"; % 114-117 bah family with loop
+rah_p := oct "126"; % 126,127 rah with loop
+dal_p := oct "136"; % 136,137 dal with loop
+rah_s := oct "156"; % 156,157 rah with two dots
+sin_p := oct "214"; % 214,215 sin with two dots
+kaf_p_s := oct "260"; % 260-263 kaf family with loop
+kaf_p := oct "264"; % 264,265 kaf with loop and mark
+kaf_p_spec := oct "264"; % 266,267 short form of kaf with loop
+nun_p := oct "342"; % 342,343 nun with loop
+yah_h := oct "373"; % 373,374 yah with hook
+yah_h_spec := oct "374"; % 375 ligature for final yah with hook
+yah_p := oct "376"; % 376,377 long yah
+
+%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+endinput;
diff --git a/language/arabic/arabtex/mfinput/hcaption.mf b/language/arabic/arabtex/mfinput/hcaption.mf
new file mode 100644
index 0000000000..4ddaccfd0b
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/hcaption.mf
@@ -0,0 +1,199 @@
+%(c) 1990,91 by Joel M. Hoffman
+
+%hcaption. Modernized Fancy Classical Hebrew font. Version 0.9.
+%calls the file base.
+%last update: 5/15/91 by JMH
+% modified for use with ArabTeX: 5/25/96 Klaus Lagally
+% renamed "hcbase_pc" to "hcbase": 1999/04/10 KL
+
+%This calls the file ``hcbase_pc'' to create a slanted, elongated Hebrew font
+%for use in captions. See that file for more information.
+
+%Use of this material in a commercial venture of any sort requires
+%permission from me. Otherwise, you are free to use this for any
+%legal, non-destructive purpose. If you find this font useful, a
+%contribution to charity will be most appreciated.
+%
+%Send comments or complaints to:
+%
+%BITNET: hoffman@nyuacf.BITNET <-- this will change soon
+%CompuServe: 72700,402 -or- 72700.402@compuserve.com
+%SNAIL: Joel M. Hoffman
+% 19 Hillcrest Lane
+% Rye, NY 10580
+% U.S.A.
+
+if unknown mode:
+mode:=localfont; fi
+mode_setup;
+currenttransform:= currenttransform slanted 1/5;
+
+
+
+%I used large units, and then later scaled the font down to size. -JMH
+%u#:=1/100in#; %ten units to a square.
+u#:=1/384.16in#; %but account for magnification.(1/384.16)
+%u#:=1/295.16in#; %but account for magnification and hp vs. epson
+
+let_height#:=42u#; %height of a standard letter.
+asc_height#:=40u#; %ascender height (for lamed).
+desc_height#:=30u#; %descender height(depth?).
+
+let_width#:=31u#; %width of a standard letter. (31u#)
+
+serif_height#:=5u#; %height of a standard serif.(2.5u#)
+serif_width#:=2.5u#; %width of a standard serif. (2.5u#)
+chupchiklength#:=6u#;
+
+vowel_width#:=14u#; %width of vowels under the letters.
+vowel_height#:=12u#; %How tall the vowels are.
+vowel_depth#:=8u#; %the space between the baseline and the vowels.
+
+let_fit#:=3u#; %space to left and right of letter (.5u#)
+vowel_fit#:=1.4u#; %space to the left and right of vowel(1.4u#);
+
+thick#:=10u#; %thickness of thick lines. (7.5u#)
+thin#:=3u#; %thickness of thin lines. (2u#)
+hairline#:=.5u#; %VERY thin lines (.3u#)
+vowel_stroke#:=4u#; %pen to use
+dot#:=4u#; %diameter of dots (dagesh, vowels, etc)
+squaredot#:=10u#;
+
+overshoot#:=4u#; %overshoot for bet, taf.
+
+tightness:=.68; %tightness for right_curve; (.78)
+
+baseline_tilt:=45; %degrees for the tilt in baseline lines.
+
+head_tilt#:=.7u#; %tilt for the head on the zion, etc.
+
+sss:=.7; %Shrink the serif's width by this amount on a shin.
+ %(s)hrink (s)hin's (s)erif
+
+define_pixels(let_height,asc_height,desc_height,let_width,head_tilt);
+define_pixels(vowel_height,vowel_width,vowel_depth,vowel_height);
+define_pixels(squaredot);
+define_whole_pixels(let_fit,vowel_fit);
+define_pixels(serif_height,serif_width,chupchiklength);
+define_pixels(overshoot);
+define_whole_blacker_pixels(thick,thin,dot,hairline,vowel_stroke);
+
+def serifpen = pickup pencircle xscaled thin yscaled thick; enddef;
+%def serifpen = pickup pencircle xscaled hairline yscaled thick; enddef;
+def vowelpen = pickup pensquare scaled vowel_stroke; enddef;
+
+
+%this is from the METAFONT book:
+shrink_fit:=1+hround(2let_fit#*hppp)-2let_fit;
+
+def normal_adjust_fit(expr left_adjustment,right_adjustment) =
+ l:=-hround(left_adjustment*hppp)-let_fit;
+ interim xoffset:=-l;
+ charwd:=charwd+2let_fit#+left_adjustment+right_adjustment;
+ r:=l+hround(charwd*hppp)-shrink_fit;
+ w:=r-hround(right_adjustment*hppp)-let_fit;
+ enddef;
+let af=normal_adjust_fit;
+def negate_af = af(-let_fit#,-let_fit#); enddef;
+def vowel_af = af(-let_fit#+vowel_fit#,-let_fit#+vowel_fit#); enddef;
+extra_endchar := extra_endchar&"r:=r+shrink_fit;w:=r-l;";
+
+
+
+
+def top_serif (suffix i,j) = %draw a serif at point z.i, using z.j
+ serifpen;
+ x.j = x.i-serif_width; y.j = y.i + serif_height;
+ draw (x.i+serif_width,y.i) ... z.i .. z.j;
+enddef;
+
+def bottom_serif (suffix i,j) = %draw an inverse serif at point z.i, with z.j
+ serifpen;
+ x.j = x.i+serif_width;y.j=y.i-serif_height;
+ draw (x.i-serif_width,y.i) ... z.i .. z.j;
+enddef;
+
+def roundoff_bottom (suffix i) = %round off point z.i, assuming thin lines.
+ fill fullcircle scaled thin shifted z.i;
+enddef;
+
+def right_curve(suffix i,j,k,l) = %call general_right_curve
+general_right_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
+enddef;
+
+def left_curve(suffix i,j,k,l) = %call general_left_curve
+general_left_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
+enddef;
+
+
+def general_right_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
+ y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
+ x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
+ penpos i (sa,90);
+ penpos j (sb,90);
+ penpos k (sc,0);
+ penpos l (sd,0);
+ penstroke z.l.e{up} ... {up}z.k.e ... z.j.e{left} ...{left} z.i.e;
+enddef;
+
+def general_left_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
+ y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
+ x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
+ penpos i (sa,-90);
+ penpos j (sb,-90);
+ penpos k (sc,0);
+ penpos l (sd,0);
+ penstroke z.i.e{right}...{right}z.j.e...z.k.e{up}...{up}z.l.e;
+enddef;
+
+
+
+def any_curve (expr adjust,thick,thin) (suffix i,j,k,l,m) =
+ %draw from i to m via k, using j and l, using specified values for
+ % withds.
+ z.j=(tightness/adjust)[z.i,z.k];
+ z.l=(tightness/adjust)[z.m,z.k];
+ penpos i (thick,angle(z.k-z.i)+90);
+ penpos j (thick,angle(z.k-z.i)+90);
+ penpos l (thin,angle(z.m-z.k)+90);
+ penpos m (thin,angle(z.m-z.k)+90);
+ penstroke z.i.e{z.k-z.i}
+ ... {z.k-z.i}z.j.e
+ ... z.l.e{z.m-z.k}
+ ... {z.m-z.k}z.m.e;
+enddef;
+
+def baseline (expr a,b) = %draw a baseline
+ pickup penrazor scaled thick rotated baseline_tilt;
+ draw a --- b;
+enddef;
+baselinewidth:= thick*sind(baseline_tilt);%but should be thick/sind....
+
+def thickpen = pickup pencircle scaled thick; enddef;
+def thinpen = pickup pencircle scaled thin; enddef;
+def hairlinepen = pickup pencircle scaled hairline; enddef;
+def baselinepen = pickup penrazor scaled thick rotated baseline_tilt; enddef;
+def dotpen = pickup pencircle scaled dot; enddef;
+def squarepen = pickup penrazor scaled squaredot rotated 45; enddef;
+
+def dotat (expr z) = %put at dot at z
+fill fullcircle scaled dot shifted z;
+enddef;
+
+def chupchik(suffix i,j)(expr ang) = %draw a chupchik from z at angle ang
+thinpen;
+z.i=z.j+dir(ang)*chupchiklength;
+draw z.i--z.j;
+enddef;
+
+def mycutoff(expr a,b) = %cutoff with culling
+cullit;
+cutoff(a,b);
+cullit;
+enddef;
+
+%input hcbase_pc; % KL 25.05.96
+input hcbase; % 1999/04/10 KL
+
+end; % KL 03.11.96
+
diff --git a/language/arabic/arabtex/mfinput/hcbase.mf b/language/arabic/arabtex/mfinput/hcbase.mf
new file mode 100644
index 0000000000..1ff4cae671
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/hcbase.mf
@@ -0,0 +1,1020 @@
+%(c) 1990,91 by Joel M. Hoffman
+
+%base for hclassic and hcaption. Version 0.9.
+%The files hclassic.mf and hcaption.mf call this file.
+%updated 5/15/91 by JMH
+
+%This is my first MF attempt, so a lot of this may seem silly. If so,
+%please let me know. Some letters still contain bugs: _ayin_, _shin_,
+%and perhaps a few others. Also, the _mem_ looks terrible. As of yet,
+%there are no numbers, and very litle punctuation --- only a period, comma,
+%exclamation mark and a hyphen.
+%
+%In addition to the 26 normal and final letters, I have included a
+%aleph-lamed ligature (seldom used), and a non-descending _ayin_ for use
+%with vowels. There is also a full-complement of vowels, and a general
+%purpose dot (for use in _shin_ vs. _sin_, among others). The files
+%dots.tex and vowels.tex contain macros for using the vowels.
+%
+%Use of this material in a commercial venture of any sort requires
+%permission from me. Otherwise, you are free to use this for any
+%legal, non-destructive purpose. If you find this font useful, a
+%contribution to charity will be most appreciated.
+%
+%Because of the bugs and the lack of punctuation, I have numbered this
+%version 0.9. If you fix the bugs or have time to add the necessary
+%punctuation, please let me know!
+%
+%Send comments or complaints to:
+%
+%BITNET: hoffman@nyuacf.BITNET <-- this will change soon
+%CompuServe: 72700,402 -or- 72700.402@compuserve.com
+% new : joel@wam.umd.edu (Joel M. Hoffman)
+
+%SNAIL: Joel M. Hoffman
+% 19 Hillcrest Lane
+% Rye, NY 10580
+% U.S.A.
+
+
+beginchar("-",.7let_width#,let_height#,0); "hyphen";
+
+af(0,0);
+baselinepen;
+top lft z1=(0,h);
+top rt z2 =(w,h);
+draw z1---z2;
+labels(1,2);
+showit;
+endchar;
+
+
+beginchar(",",2dot#,2dot#,dot#); "Comma";
+
+af(0,0)
+dotpen;
+top rt z1 = (w,h);
+bot lft z2 = (0,-d);
+draw z1 --- z2;
+labels(1,2);
+showit;
+endchar;
+
+
+beginchar(":",1.4squaredot#,let_height#,0); "Colon";
+
+af(0,0);
+squarepen;
+top rt z1 = (w/2,1.4squaredot);
+bot lft z2 = (w/2,0);
+draw z1---z2;
+top rt z3 = (w/2,h);
+bot lft z4 = (w/2,h-1.4squaredot);
+draw z3---z4;
+labels(1,2,3,4);
+showit;
+endchar;
+
+
+beginchar("!",1.4squaredot#,let_height#,0); "Exclamation mark";
+
+af(0,0);
+squarepen;
+top rt z1 = (w/2,1.4squaredot);
+bot lft z2 = (w/2,0);
+draw z1---z2;
+z3=(w/2,3/5h);
+z4=(w/2,h+1.4squaredot);
+draw z3---z4;
+labels(1,2,3,4);
+showit;
+endchar;
+
+
+beginchar(".",1.4squaredot#,1.4squaredot#,0); "Period";
+
+af(0,0);
+squarepen;
+top rt z1 = (w/2,h);
+bot lft z2 = (w/2,0);
+draw z1---z2;
+labels (1,2);
+showit;
+endchar;
+
+
+beginchar(142,let_width#,let_height#,0); "The letter Mem";
+
+af(0,0);
+x1=.7w;y1r=h;
+penpos1(thick,90);
+x2r=w;y2=h/2;
+penpos2(thin,0);
+z3=(.8w,baselinewidth/2);
+penpos3(baselinewidth,-90); %up to here is the right part
+x4=.7w;y4l=y1l;
+penpos4(thin,90);
+%penstroke z3e...{up}z2e{up}...z1e...z4e;
+thinpen;
+%z5=(.3w,.8(y1-thin));
+z5=(2serif_width,.9(y1-thin));
+lft z6=(0,0);
+penpos5(thin,135);penpos6(thin,180);
+penstroke z3e...{up}z2e{up}...z1e...z5;%...{down}z6;
+draw z4r{left}... z5 ... {down}z6;
+z7=(.25w,baselinewidth/2);
+fudge:=.05w;
+baseline(z7,z3+(fudge,0));
+%and now for the upper-left bit
+pickup pencircle xscaled thin yscaled thick;
+z8=(serif_width,h-thick/2);
+bot rt z9=(x5+thin,y5-thin);
+%draw z8--z9;
+top_serif(8,10);
+bottom_serif(8,11);
+labels(1,2,3,4,5,6,7,8,9,10,11);
+showit;
+endchar;
+
+
+
+beginchar(124,.85let_width#,let_height#+asc_height#,0);
+"The ligature aleph-lamed";
+
+af(0,0);
+%adopted from the aleph:
+pickup pencircle xscaled thin yscaled thick;
+lft z1=(0,let_height-thick/2);
+z0=(thin/2,h-3serif_height);%this has to match a thin line later
+z2=(0,y1-serif_height/3);
+bot z3 = (w,serif_height/3);
+bot z4 = (w,0);
+pickup pencircle xscaled thin yscaled (thick/cosd(angle(z3-z2)));
+%draw z0{down}... z2{z3-z2}...{z3-z2}z3...z4;
+draw z1 ... z2{z3-z2}...{z3-z2}z3...z4;
+z7=(4/5w,y1);
+z8=(4/5w,y7-serif_height/3);
+z8-z9=whatever*(z2-z3);
+x9=w;
+z10=(x9,y9-serif_height);
+hairlinepen;
+z6-z5=whatever*(z3-z2) rotated 90;
+z6= 3/4[z8,z9];
+z5=whatever[z3,z2];
+draw z5---z6;
+pickup pencircle xscaled thin yscaled (thick/cosd(angle(z3-z2)));
+draw z7...z8{z9-z8}...{z9-z8}z9...z10;
+%and now the lamed-like serif, from the letter lamed
+thinpen;
+z11=(thin/2,h);
+z12=(1.5serif_width,h-serif_height);
+draw z11...z12...z0{down}...z2;
+labels(1,2,3,4,5,6,7,8,9,10,11,12);
+showit;
+endchar;
+
+
+
+beginchar(123,let_width#,let_height#,0);
+"The letter Ayin (for use with vowels)";
+%n.b.: use this ayin when a vowel appears under it.
+
+af(0,0);
+z1=(0,-d+thick/2);
+z3=(.66w,thick/2);
+z5=(x3+((w-thin/2)-x3)/1.8,h/1.8);
+any_curve(1.3,thick,thin,1,2,3,4,5);
+fill fullcircle scaled thick shifted z1;
+pickup pencircle scaled (thick*2); %cheat in the next step.
+mycutoff((0,y1r-sind(angle(z3-z1))*thick/2),90+baseline_tilt);
+z6=(w-w/3.5,h-thick/2);
+alittle:=.05h;
+z8=(w,y6-alittle);
+z10=z5;
+any_curve(2,thin,thick,10,9,8,7,6);
+top_serif(6,11);
+thinpen;
+z12=whatever[z1,z3];
+(y14-y12)=(x12-x14)*(y5-y3)/(x5-x3); %i.e.,(y14-y12)/(x14-x12)=-(y5-y3)/(x5-x3)
+y14=2/3h;x14=.14w;
+z16=(2serif_width,h-thick/2-head_tilt);
+any_curve(1,thin,thin,16,15,14,13,12);
+pickup pencircle xscaled thin yscaled thick;
+z17=(serif_width,y16+head_tilt);
+z18=(x16+serif_width,y16-head_tilt);
+draw z17--z18;
+top_serif(17,19);
+bottom_serif(18,20);
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);% Wow! 20.
+showit;
+endchar;
+
+
+
+beginchar(136,let_width#,let_height#,0); "The letter Tet";
+
+af(0,0);
+%first, make somthing like a zion
+nw:=w/3.5;
+thinpen;
+z1=(nw/2,0);
+z2=(nw/2,h-thick/2-head_tilt);
+%draw z1---z2; that would be a zion
+pickup pencircle xscaled thin yscaled thick;
+lft z3 = (0,y2+head_tilt);
+rt z4 = (nw,y2-head_tilt);
+draw z3 -- z4;
+top_serif(3,5);
+bottom_serif(4,6);
+%now we've got a zion
+thinpen;
+z7=(thin/2,.66h);
+z8=(thin/2,thick/2);
+draw z8---z7---z2;
+z9=(0,y8);
+z12=(w-thin/2,h/2);
+general_left_curve(.9tightness,tightness/2,thick,thick,thin,thin,9,10,11,12);
+z13=z12;
+z14=(.78w,h-thick/2);
+z15=(.38w,.45h); %z15=(.35w,.5h); <--- old values
+penpos13(thin,0);
+penpos14(thick,90);%thick
+penpos15(thin,angle(z15-z14)-90);
+z16r=.2[z15r,z14r];
+z16l=.2[z15l,z14l];
+z16=.5[z16l,z16r];
+%z16=.5[z15,z14];
+%penpos16(thin/2,angle(z15-z14)-90);
+penstroke z13e{up}...{left}z14e...{z15-z16}z16e{z15-z15}---z15e;
+%penstroke z13e{up}...{left}z14e{z15-z15}---z15e;
+fill fullcircle scaled thin shifted z15;
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+showit;
+endchar;
+
+
+
+
+
+beginchar(8,vowel_stroke#,0,vowel_depth#+vowel_height#); "The mark Meteg";
+
+vowel_af;
+vowelpen;
+top z1 = (w/2,-vowel_depth);
+bot z2 = (w/2,-vowel_depth-vowel_height);
+draw z1--z2;
+labels(1,2);
+showit;
+endchar;
+
+beginchar(9,vowel_width#,0,vowel_depth#+vowel_height#); "The vowel tzere";
+
+vowel_af;
+dotpen;
+top lft z1 = (0,-vowel_depth);
+top rt z2 = (w,-vowel_depth);
+dotat(z1);
+dotat(z2);
+labels(1,2);
+showit;
+endchar;
+
+beginchar(0,0,0,0); "General purpose dot";
+
+negate_af;
+dotpen;
+z1=(0,0);
+dotat(z1);
+labels(1);
+showit;
+endchar;
+
+
+
+beginchar(7,dot#,0,vowel_depth#+vowel_height#); "The vowel Shva";
+
+vowel_af;
+dotpen;
+top z1 = (w/2,-vowel_depth);
+bot z2 = (w/2,-d);
+dotat(z1);
+dotat(z2);
+labels(1,2);
+showit;
+endchar;
+
+
+
+beginchar(6,vowel_width#,0,vowel_depth#+(1.5*vowel_height#));
+"The vowel Kamatz Katan";
+
+vowel_af;
+vowelpen;
+top lft z1 = (0,-vowel_depth);
+top rt z2 = (w,-vowel_depth);
+draw z1---z2;
+z3=(w/2,-vowel_depth-(1.5*vowel_height)+dot/2);
+fill fullcircle scaled dot shifted z3;
+hairlinepen;
+draw z3---.5[z1,z2];
+labels(1,2,3);
+showit;
+endchar;
+
+beginchar(5,vowel_width#,0,vowel_depth#+dot#); "The vowel chiriq";
+
+vowel_af;
+dotpen;
+bot z1 = (w/2,-d);
+dotat(z1);
+labels(1);
+showit;
+endchar;
+
+
+beginchar(4,vowel_width#,0,vowel_depth#+1.5vowel_height#); "The vowel Qibutz";
+
+vowel_af;
+dotpen;
+top lft z1 = (0,-vowel_depth);
+bot rt z2 = (w,-d);
+z3=.5[z1,z2];
+dotat(z1);
+dotat(z2);
+dotat(z3);
+labels(1,2,3);
+showit;
+endchar;
+
+
+beginchar(3,vowel_width#,0,vowel_depth#+vowel_height#); "The vowel Segol";
+
+vowel_af;
+dotpen;
+top lft z1 = (0,-vowel_depth);
+top rt z2 = (w,-vowel_depth);
+bot z3 = (w/2,-vowel_depth-vowel_height);
+dotat(z1);
+dotat(z2);
+dotat(z3);
+labels(1,2,3);
+showit;
+endchar;
+
+
+beginchar(2,vowel_width#,0,vowel_depth#+vowel_height#); "The vowel Kamatz";
+
+vowel_af;
+vowelpen;
+top lft z1 = (0,-vowel_depth);
+top rt z2 = (w,-vowel_depth);
+draw z1---z2;
+z3=(w/2,-vowel_depth-vowel_height+dot/2);
+fill fullcircle scaled dot shifted z3;
+hairlinepen;
+draw z3---.5[z1,z2];
+labels(1,2,3);
+showit;
+endchar;
+
+beginchar(1,vowel_width#,0,vowel_depth#+vowel_stroke#); "The vowel Patach";
+
+vowel_af;
+vowelpen;
+bot lft z1 = (0,-d);
+bot rt z2 = (w,-d);
+draw z1---z2;
+labels(1,2);
+showit;
+endchar;
+
+
+
+
+beginchar(149,let_width#,let_height#,desc_height#); "The final letter Tzadi";
+
+af(0,0);
+%first, make a final nun:
+nw:=w/3.5;
+z1=(serif_width,h-thick/2);
+z3=(nw,h-thick/2);
+z5=(nw/1.5,.8h);
+any_curve(2,thin,thick,5,4,3,2,1);
+fudge:=.05nw;
+z6=(nw-fudge,y3);
+z8=z5;
+z10=(nw/2,.6h);
+any_curve(1.2,thin,thin,10,9,8,7,6);
+thinpen;
+z11=(nw/2,-desc_height);
+draw z10---z11;
+top_serif(1,0);
+z12=whatever[z10,z11];
+y12=.3h;
+z14=(x13-serif_width,y13+head_tilt);
+z15=(x13+serif_width,y13-head_tilt);
+x15=w-serif_width;
+y14=h-thick/2;
+thinpen;
+draw z12---z13;
+pickup pencircle xscaled thin yscaled thick;
+draw z14---z15;
+bottom_serif(15,16);
+top_serif(14,17);
+labels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
+showit;
+endchar;
+
+
+beginchar(147,let_width#,let_height#,desc_height#); "The final letter Feh";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z4=(w-thin/2,-d);
+top_serif(1,0);
+%this is from the letter pe
+right_curve(1,2,3,4);
+z6=z1;
+z8=(0,h/2);
+z10=(w/2-thick/2,h/2);
+any_curve(1.5,thin,thick,6,7,8,9,10);
+fill fullcircle scaled thick shifted z10;
+x12=0;
+y11=h/2;
+chupchik(11,12,70);
+labels(0,1,2,3,4,6,7,8,9,10,11,12);
+showit;
+endchar;
+
+
+
+
+
+beginchar(146,let_width#,let_height#,.3let_height#); "The letter Ayin";
+%n.b.: This is a descending ayin, for use when there's no vowel
+%under it!
+
+af(0,0);
+z1=(0,-d);
+z3=(.66w,thick/2);
+z5=(x3+((w-thin/2)-x3)/1.8,h/1.8);
+any_curve(1.3,thick,thin,1,2,3,4,5);
+fill fullcircle scaled thick shifted z1;
+pickup pencircle scaled (thick*1.5); %cheat in the next step.
+mycutoff((0,y1r-sind(angle(z3-z1))*thick/2),180);
+z6=(w-w/3.5,h-thick/2);
+alittle:=.05h;
+z8=(w,y6-alittle);
+z10=z5;
+any_curve(2,thin,thick,10,9,8,7,6);
+top_serif(6,11);
+thinpen;
+z12=whatever[z1,z3];
+(y14-y12)=(x12-x14)*(y5-y3)/(x5-x3); %i.e.,(y14-y12)/(x14-x12)=-(y5-y3)/(x5-x3)
+y14=2/3h;x14=.14w;
+z16=(2serif_width,h-thick/2-head_tilt);
+any_curve(1,thin,thin,16,15,14,13,12);
+pickup pencircle xscaled thin yscaled thick;
+z17=(serif_width,y16+head_tilt);
+z18=(x16+serif_width,y16-head_tilt);
+draw z17--z18;
+top_serif(17,19);
+bottom_serif(18,20);
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);% Wow! 20.
+showit;
+endchar;
+
+
+
+
+beginchar(153,1.1let_width#,let_height#,0); "The letter Shin";
+
+af(0,0);
+z1=(.1w,baselinewidth/2);
+z3=(.7w,baselinewidth/2);
+z5=(x3+((w-thin/2)-x3)/1.8,h/1.8);
+any_curve(1,thick,thin,1,2,3,4,5);
+z6=(w-2*sss*serif_width,h-thick/2);
+alittle:=.05h;
+z8=(w,y6-alittle);
+z10=z5;
+any_curve(2,thin,thick,10,9,8,7,6);
+top_serif(6,11);
+thinpen;
+z12=(x1,0);
+z14=(thin/2,2/3h);
+z16=(2*sss*serif_width,h-thick/2-head_tilt);
+any_curve(1,thin,thin,16,15,14,13,12);
+pickup pencircle xscaled thin yscaled thick;
+z17=(sss*serif_width,y16+head_tilt);
+z18=(x16+sss*serif_width,y16-head_tilt);
+draw z17--z18;
+top_serif(17,19);
+bottom_serif(18,20);
+z21=((x16+x6)/2,y16);
+(y21-y22)=(y5-y3)/(x5-x3)*(x21-x22);
+z22=whatever[z1,z3];
+hairlinepen;
+draw z21---z22;
+z23=(x21-sss*serif_width,y21+head_tilt);
+z24=(x21+sss*serif_width,y21-head_tilt);
+pickup pencircle xscaled thin yscaled thick;
+draw z23--z24;
+top_serif(23,25);
+bottom_serif(24,26);
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26);
+showit;
+endchar;
+
+
+beginchar(151,let_width#,let_height#,desc_height#); "The letter Koof";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z2=(tightness*w,h-thick/2);
+z3=(w-thin/2,tightness*y2);
+z4=(w-thin/2,h/3);
+z6=(.33w,0);
+penpos1(thick,90);
+penpos2(thick,90);
+penpos3(thin,0);
+penpos6(thin,angle(z4-z6)-90);
+z5=tightness[z6,z4];
+penpos5(thin,angle(z4-z6)-90);
+penstroke z6e{z4-z6}...{z4-z6}z5e...z3e{up}...z2e{left}...{left}z1e;
+top_serif(1,0);
+thinpen;
+z7=(serif_width,(3/5)*h);
+z8=(serif_width,-d);
+draw z7---z8;
+fill fullcircle scaled thin shifted z6;
+labels(0,1,2,3,4,5,6,7,8);
+showit;
+endchar;
+
+
+
+
+beginchar(145,let_width#,let_height#,0); "The letter Samech";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+penpos1(thick,90);
+z2=(tightness*w,y1);
+penpos2(thick,90);
+z3=(w-thin/2,h/2);
+penpos3(thin,0);
+z4=(.55w,thick/2);
+penpos4(thick,-90);
+penstroke z4e{right}...{up}z3e{up}...z2e{left}...{left}z1e;
+top_serif(1,0);
+z5=(x4,thick/2);
+z7=(thin/2,thick/2);
+z9=(thin/2,.8y1);
+any_curve(1,thin,thick,9,8,7,6,5);
+thinpen;
+draw z9---z1;
+labels(0,1,2,3,4,5,6,7,8,9);
+showit;
+endchar;
+
+
+
+beginchar(141,let_width#,let_height#,0); "The final letter Mem";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z4=(w-thin/2,0);
+right_curve(1,2,3,4);
+top_serif(1,0);
+z5=(w-thin/2,thick/2);
+z7=(thin/2,thick/2); % This is for a rounded lower-left
+z9=(thin/2,.8y1); % corner. A right angle is better (?)
+%any_curve(1,thin,thick,9,8,7,6,5); % <--
+pickup penrazor scaled thick rotated 90;
+draw z5---(0,thick/2);
+pickup penrazor scaled thin rotated 0;
+draw z7---z9;
+thinpen;
+draw z9---z1;
+labels(0,1,2,3,4,5,6,7,8,9,10);
+showit;
+endchar;
+
+
+
+
+beginchar(143,let_width#/3.5,let_height#,desc_height#); "The final letter Nun";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z3=(w,h-thick/2);
+z5=(w/1.5,.8h); % this isn't quite a yud.
+any_curve(2,thin,thick,5,4,3,2,1); %now we've got a yud. (almost)
+fudge:=.05w;
+z6=(w-fudge,y3);
+z8=z5;
+z10=(w/2,.6h);
+any_curve(1.2,thin,thin,10,9,8,7,6);
+thinpen;
+z11=(w/2,-desc_height);
+draw z10---z11;
+top_serif(1,0);
+labels(0,1,2,3,4,5,6,7,8,9,10);
+showit;
+endchar;
+
+
+
+beginchar(144,let_width#/2.2,let_height#,0); "The letter Nun";
+
+af(0,0);
+z1=(.2w+serif_width,h-thick/2);
+z4=(w-thin/2,h/2);
+general_right_curve(tightness/2.2,tightness,thick,thick,thin,thin,1,2,3,4);
+top_serif(1,0);
+z5=(w/2,baselinewidth/2);
+z8=z4;
+general_left_curve(tightness/2.2,tightness,
+ baselinewidth,baselinewidth,thin,thin,5,6,7,8);
+baseline((0,baselinewidth/2),(.75w,baselinewidth/2));
+labels(0,1,2,3,4,5,6,7,8);
+showit;
+endchar;
+
+
+
+
+beginchar(154,.9let_width#+overshoot#,let_height#,0); "The letter Taf";
+
+af(0,0);
+z1=(overshoot,h-thick/2);
+z4=(w-thin/2,0);
+right_curve(1,2,3,4);
+roundoff_bottom(4);
+top_serif(1,0);
+%thinpen;
+%z5=(2.5*overshoot,h-baselinewidth/2);
+%z6=(2*overshoot,baselinewidth/2);
+%draw z5{dir -110}...{dir -80}z6;
+%baseline((x6-1.5overshoot,y6),(x6+overshoot,y6));
+z11=(2.5*overshoot,h-thick/2); %this is taken from the Aleph, q.v.
+z15=(x11,thick/2);
+x13l=0;
+x13r=thin;
+y13l=y13r=.6h;
+z13=.5[z13l,z13r];
+penpos11(thin,angle(z13-z11)+90);
+penpos15(thick,angle(z15-z13)+90);
+z14=.3[z13,z15];
+penstroke z11e{z13-z11}...z13e...{z15-z13}z15e;
+fill fullcircle scaled thick shifted z15;
+z16=(0,baselinewidth/2);
+baseline(z16,(x15,baselinewidth/2));
+labels(0,1,2,3,4,5,6,11,12,13,14,15,16);
+showit;
+endchar;
+
+beginchar(140,.9let_width#,let_height#+asc_height#,0); "The letter Lamed";
+
+af(0,0);
+z1=(w/2,let_height-thick/2);
+z4=(w-thin/2,0); %we'll erase some of this later
+right_curve(1,2,3,4);
+z5=(x4,let_height/2);
+thinpen;
+erase draw z4--z5;
+showit;
+z6=(w/3,0);
+z8=z5;
+z10=(x4,.75let_height);
+any_curve(1,thin,thin,6,7,8,9,10);
+%and now for the ascender.
+z11=(thin/2,h);
+z12=(2serif_width,h-serif_height); %the lamed has it's own serif, though.
+z13=(thin/2,h-3serif_height);
+z14=(thin/2,y1+asc_height/2);
+draw z11...z12...z13{down}...{down}z14;
+showit;
+z15=(x14,y1+.75asc_height);
+z17=(thin/2,y1);
+z19=(4/5w,y1);
+any_curve(1,thick,thin,19,18,17,16,15);
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19);
+fill fullcircle scaled ((thick+thin)/2) shifted z6;
+showit;
+endchar;
+
+
+
+beginchar(138,let_width#,let_height#,desc_height#); "The final letter Chaf";
+
+af(0,0);
+thickpen;
+top z1 = (serif_width,let_height);
+top rt z2 = (let_width,let_height);
+draw z1---z2;
+mycutoff(z1,180);
+top_serif(1,0);
+thinpen;
+rt z3=(w-overshoot,h-thick/2);
+rt z4=(w-overshoot,-d);
+draw z3--z4;
+labels(0,1,2,3,4);
+showit;
+endchar;
+
+
+beginchar(135,let_width#,let_height#,0); "The letter Chet";
+
+af(0,0);
+thickpen;
+top z1 = (serif_width,let_height);
+top rt z2 = (w,h);
+draw z1 --- z2;
+mycutoff(z1,180);
+top_serif(1,0);
+thinpen;
+rt z3 = (w-overshoot,h-thick/2);
+rt z4 = (w-overshoot,0);
+draw z3--z4;
+z5=(serif_width,h-thick/2);
+z6=(serif_width,0);
+draw z5--z6;
+labels(1,2,3,4,5,6);
+showit;
+endchar;
+
+beginchar (137,let_width#/3.5,let_height#,0); "The letter Yud";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z3=(w,h-thick/2);
+z5=(w/2,h/2);
+any_curve(2.2,thin,thick,5,4,3,2,1);
+top_serif(1,0);
+labels(0,1,2,3,4,5);
+showit;
+endchar;
+
+
+beginchar (134,let_width#/3.5,let_height#,0); "The letter Zion";
+
+af(0,0);
+thinpen;
+z1=(w/2,0);
+z2=(w/2,h-thick/2-head_tilt);
+draw z1--z2;
+pickup pencircle xscaled thin yscaled thick;
+lft z3 = (0,y2+head_tilt);
+rt z4 = (w,y2-head_tilt);
+draw z3 -- z4;
+top_serif(3,5);
+bottom_serif(4,6);
+labels(1,2,3,4,5,6);
+showit;
+endchar;
+
+
+beginchar(130,let_width#/2.2,let_height#,0); "The letter Gimel";
+
+af(serif_width#,0);
+z1=(serif_width,h-thick/2);
+z4=((.85w)-thin/2,baselinewidth);
+top_serif(1,0);
+right_curve(1,2,3,4);
+thinpen;
+bot rt z5 = (w,0);
+draw z5--z4;
+baselinepen;
+z6=(-serif_width/2,baselinewidth/2);
+top rt z7 = z4;
+baseline(z6,z7);
+labels(0,1,2,3,4,5,6,7);
+showit;
+endchar;
+
+
+beginchar(148,let_width#,let_height#,0); "The letter Pe";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+penpos1(thick,90);
+z2=(tightness*w,y1);
+penpos2(thick,90);
+z3=(w-thin/2,h/2);
+penpos3(thin,0);
+z4=(tightness*w,baselinewidth/2);
+penpos4(baselinewidth,-90);
+z5=(serif_width,baselinewidth/2);
+penpos5(baselinewidth,-90);
+penstroke z5e{right}...{right}z4e...{up}z3e{up}...z2e{left}...{left}z1e;
+top_serif(1,0);
+baseline((0,baselinewidth/2),(w/2,baselinewidth/2));
+showit;
+%so far, we've got a kaf.
+z6=z1;
+z8=(0,h/2);
+z10=(w/2-thick/2,h/2);
+any_curve(1.5,thin,thick,6,7,8,9,10);
+fill fullcircle scaled thick shifted z10;
+%and now for the chupchik:
+x12=0;
+y11=h/2;
+chupchik(11,12,70);
+labels(0,1,2,3,4,5,6,7,8,9,10,11);
+showit;
+endchar;
+
+
+
+beginchar(139,let_width#,let_height#,0); "The letter Kaf";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+penpos1(thick,90);
+z2=(tightness*w,y1);
+penpos2(thick,90);
+z3=(w-thin/2,h/2);
+penpos3(thin,0);
+z4=(tightness*w,baselinewidth/2);
+penpos4(baselinewidth,-90);
+z5=(serif_width,baselinewidth/2);
+penpos5(baselinewidth,-90);
+penstroke z5e{right}...{right}z4e...{up}z3e{up}...z2e{left}...{left}z1e;
+top_serif(1,0);
+baseline((0,baselinewidth/2),(w/2,baselinewidth/2));
+labels(0,1,2,3,4,5);
+showit;
+endchar;
+
+
+
+
+
+
+
+
+beginchar(128,let_width#,let_height#,0); "The letter Aleph";
+
+af(0,0);
+pickup pencircle xscaled thin yscaled thick; % this pen is only approx. right
+lft z1 = (0,h-thick/2);
+z2 = (0,y1-serif_height/3);
+bot z3 = (w,serif_height/3);
+bot z4 = (w,0);
+pickup pencircle xscaled thin yscaled (thick/cosd(angle(z3-z2)));
+draw z1 ... z2{z3-z2}...{z3-z2}z3...z4;%corrected z3-z3
+z7 = (4/5w,y1); %now we make the upper right squiggle.
+z8 = (4/5w,y7-serif_height/3);
+z8-z9 = whatever*(z2-z3); % || to the big fat line
+x9 = w;
+%z9 = (w,4/5h+serif_height);
+z10 = (x9,y9-serif_height/3);
+hairlinepen; %and z6 the upper right part.
+z6-z5=whatever*(z3-z2) rotated 90;%the line is perp. to the fat line.
+z6 = 3/4[z8,z9]; %And put z6 somewhere on that squiggle.
+z5 = whatever[z3,z2]; %z5 is somewhere on the big fat line.
+draw z5---z6;
+pickup pencircle xscaled thin yscaled (thick/cosd(angle(z3-z2)));
+draw z7 ... z8{z9-z8}...{z9-z8}z9...z10;
+pickup pencircle xscaled thin yscaled thick rotated angle(z3-z2);
+z11 = .2[z2,z3]; %we're in the home stretch.
+z15 = (x11,thick/2);
+x13l = 0; %Try to figure out a third point for the curve
+x13r = thin; %A thin line.
+y13l=y13r=.55h; %touching the left edge
+z13=.5[z13l,z13r]; %Just like the macro for penpos.
+penpos11 (thin,angle(z13-z11)+90);
+penpos15 (thick,angle(z15-z13)+90);
+z14=.3[z13,z15];
+penstroke z11e{z13-z11}...z13e...{z15-z13}z15e;
+fill fullcircle scaled thick shifted z15;
+showit;
+z16=(0,baselinewidth/2);
+baseline(z16,(x15,baselinewidth/2));
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
+showit;
+endchar;
+
+beginchar(150,let_width#,let_height#,0); "The letter Tzadi";
+
+af(0,thick#/2);
+z1=(0,baselinewidth/2);
+z2=(w/2,baselinewidth/2);
+z4=(w,baselinewidth/2);
+z6=(w/3,h/1.8);
+any_curve(1,baselinewidth,thin,2,3,4,5,6);
+baseline(z1,(w/(1.5),baselinewidth/2));
+hairlinepen;
+z7=whatever[z6,z4];
+x7=w/2;
+z8=(w-overshoot*2,h-thick/2);
+draw z7--z8;
+thickpen;
+%it looks better sticking out a bit, but we have to set adjust_fit (af) above
+z9=(w,h-thick/2); %z9=(w-thick/2,h-thick/2); <--- old version
+draw z8--z9;
+mycutoff((x8-cosd(angle(z8-z7))*hairline,y8),angle(z8-z7)+90);
+z10=(serif_width,let_height-thick/2);
+showit;
+x13=x6+thin/2; %can't reuse z6 becuase z6l and z6r are already (mis)set.
+y13=y6-thin/2;
+right_curve(10,11,12,13);
+showit;
+top_serif(10,14);
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+showit;
+endchar;
+
+
+
+
+beginchar(133,let_width#/3,let_height#,0); "The letter Vav";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z4=(w-thin/2,0);
+general_right_curve(tightness/2,tightness,thick,thick,thin,thin,1,2,3,4);
+roundoff_bottom(4);
+top_serif(1,0);
+labels(0,1,2,3,4);
+showit;
+endchar;
+
+
+
+beginchar(131,let_width#,let_height#,0); "The letter Daled";
+
+af(0,0);
+thickpen;
+top z1 = (serif_width,h);
+top rt z2 = (w,h);
+draw z1 --- z2; %Draw the top line
+mycutoff(z1,180); %mycutoff left part so we can make serif.
+top_serif(1,0);
+thinpen;
+rt z3 = (w-overshoot,h-thick/2);
+rt z4 = (w-overshoot,0);
+draw z3--z4;
+labels(0,1,2,3,4);
+showit;
+endchar;
+
+
+beginchar(132,let_width#,let_height#,0); "The letter Heh";
+
+af(0,0);
+thickpen;
+top z1 = (serif_width,h);
+top rt z2 = (w,h);
+draw z1 --- z2; %Draw the top line
+mycutoff(z1,180); %cutoff left part so we can make serif.
+top_serif(1,0);
+thinpen;
+rt z3 = (w-overshoot,h-thick/2);
+rt z4 = (w-overshoot,0);
+draw z3--z4; %Up to here we have a daled
+z5=(serif_width,.55h);
+z6=(serif_width,0);
+draw z5--z6; %Now we've drawn the stem.
+labels(1,2,3,4,5,6);
+showit;
+endchar;
+
+
+beginchar(129,let_width#,let_height#,0); "The letter Bet";
+
+af(0,0);
+z1=(serif_width,let_height-thick/2);
+z4=(let_width-thin/2-overshoot,baselinewidth/2);
+right_curve(1,2,3,4);
+roundoff_bottom(4);
+top_serif(1,0);
+baseline((0,baselinewidth/2),(let_width,baselinewidth/2));
+labels(1,2,3,4);
+showit;
+endchar;
+
+
+
+
+beginchar(152,let_width#,let_height#,0); "The letter Resh";
+
+af(0,0);
+z1=(serif_width,h-thick/2);
+z4=(w-thin/2,0);
+right_curve(1,2,3,4);
+roundoff_bottom(4);
+top_serif(1,0);
+labels(0,1,2,3,4);
+showit;
+endchar;
+
+
+
+font_normal_space 30u#;
+font_normal_stretch 10u#;
+font_normal_shrink 20u#;
+
+end; % KL 25.05.9
diff --git a/language/arabic/arabtex/mfinput/hclassic.mf b/language/arabic/arabtex/mfinput/hclassic.mf
new file mode 100644
index 0000000000..4d54e8dd0e
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/hclassic.mf
@@ -0,0 +1,208 @@
+%(c) 1990,91 by Joel M. Hoffman
+
+%hclassic. Modernized Classical Hebrew font. Version 0.9.
+%calls the file base.
+%last update: 5/15/91 by JMH
+% modified for use with ArabTeX: 5/25/96 Klaus Lagally
+% renamed "hcbase_pc" to "hcbase": 1999/04/10 KL
+
+%This calls the file ``hcbase_pc'' to create a general purpose classical
+%Hebrew font. See that file for more information.
+
+%Use of this material in a commercial venture of any sort requires
+%permission from me. Otherwise, you are free to use this for any
+%legal, non-destructive purpose. If you find this font useful, a
+%contribution to charity will be most appreciated.
+%
+%Send comments or complaints to:
+%
+%BITNET: hoffman@nyuacf.BITNET <-- this will change soon
+%CompuServe: 72700,402 -or- 72700.402@compuserve.com
+%SNAIL: Joel M. Hoffman
+% 19 Hillcrest Lane
+% Rye, NY 10580
+% U.S.A.
+
+
+mode_def testing=
+ pixels_per_inch:=300*4;
+ blacker:=.1;
+ o_correction:=1;
+ fillin:=.01;
+ proofing:=2;
+ fontmaking:=0;
+ tracingtitles:=1;
+ enddef;
+if unknown mode:
+mode:=localfont; fi
+mode_setup;
+
+if mode=testing: screenstrokes; fi
+
+
+%I used large units, and then later scaled the font down to size. -JMH
+%u#:=1/100in#; %ten units to a square.
+u#:=1/384.16in#; %but account for magnification.(1/384.16)
+%u#:=1/295.16in#;%but account for magnification and hp vs. epson
+
+let_height#:=35u#; %height of a standard letter.
+asc_height#:=25u#; %ascender height (for lamed).
+desc_height#:=16u#; %descender height(depth?).
+
+let_width#:=31u#; %width of a standard letter. (31u#)
+
+serif_height#:=3u#; %height of a standard serif.(2.5u#)
+serif_width#:=2.5u#; %width of a standard serif. (2.5u#)
+chupchiklength#:=6u#;
+
+vowel_width#:=14u#; %width of vowels under the letters.
+vowel_height#:=12u#; %How tall the vowels are.
+vowel_depth#:=8u#; %the space between the baseline and the vowels.
+
+let_fit#:=3u#; %space to left and right of letter (.5u#)
+vowel_fit#:=1.4u#; %space to the left and right of vowel(1.4u#);
+
+thick#:=8.5u#; %thickness of thick lines. (7.5u#)
+thin#:=3u#; %thickness of thin lines. (2u#)
+hairline#:=1u#; %VERY thin lines (.3u#)
+vowel_stroke#:=4u#; %pen to use
+dot#:=4u#; %diameter of dots (dagesh, vowels, etc)
+squaredot#:=10u#;
+
+overshoot#:=3u#; %overshoot for bet, taf.
+
+tightness:=.74; %tightness for right_curve; (.78)
+
+baseline_tilt:=60; %degrees for the tilt in baseline lines.
+
+head_tilt#:=.7u#; %tilt for the head on the zion, etc.
+
+sss:=.7; %Shrink the serif's width by this amount on a shin.
+ %(s)hrink (s)hin's (s)erif
+
+define_pixels(let_height,asc_height,desc_height,let_width,head_tilt);
+define_pixels(vowel_height,vowel_width,vowel_depth,vowel_height);
+define_pixels(squaredot);
+define_whole_pixels(let_fit,vowel_fit);
+define_pixels(serif_height,serif_width,chupchiklength);
+define_pixels(overshoot);
+define_whole_blacker_pixels(thick,thin,dot,hairline,vowel_stroke);
+
+def serifpen = pickup pencircle xscaled thin yscaled thick; enddef;
+%def serifpen = pickup pencircle xscaled hairline yscaled thick; enddef;
+def vowelpen = pickup pensquare scaled vowel_stroke; enddef;
+
+
+%this is from the METAFONT book:
+shrink_fit:=1+hround(2let_fit#*hppp)-2let_fit;
+
+def normal_adjust_fit(expr left_adjustment,right_adjustment) =
+ l:=-hround(left_adjustment*hppp)-let_fit;
+ interim xoffset:=-l;
+ charwd:=charwd+2let_fit#+left_adjustment+right_adjustment;
+ r:=l+hround(charwd*hppp)-shrink_fit;
+ w:=r-hround(right_adjustment*hppp)-let_fit;
+ enddef;
+let af=normal_adjust_fit;
+def negate_af = af(-let_fit#,-let_fit#); enddef;
+def vowel_af = af(-let_fit#+vowel_fit#,-let_fit#+vowel_fit#); enddef;
+extra_endchar := extra_endchar&"r:=r+shrink_fit;w:=r-l;";
+
+
+
+
+def top_serif (suffix i,j) = %draw a serif at point z.i, using z.j
+ serifpen;
+ x.j = x.i-serif_width; y.j = y.i + serif_height;
+ draw (x.i+serif_width,y.i) ... z.i .. z.j;
+enddef;
+
+def bottom_serif (suffix i,j) = %draw an inverse serif at point z.i, with z.j
+ serifpen;
+ x.j = x.i+serif_width;y.j=y.i-serif_height;
+ draw (x.i-serif_width,y.i) ... z.i .. z.j;
+enddef;
+
+def roundoff_bottom (suffix i) = %round off point z.i, assuming thin lines.
+ fill fullcircle scaled thin shifted z.i;
+enddef;
+
+def right_curve(suffix i,j,k,l) = %call general_right_curve
+general_right_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
+enddef;
+
+def left_curve(suffix i,j,k,l) = %call general_left_curve
+general_left_curve(tightness,tightness,thick,thick,thin,thin,i,j,k,l);
+enddef;
+
+
+def general_right_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
+ y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
+ x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
+ penpos i (sa,90);
+ penpos j (sb,90);
+ penpos k (sc,0);
+ penpos l (sd,0);
+ penstroke z.l.e{up} ... {up}z.k.e ... z.j.e{left} ...{left} z.i.e;
+enddef;
+
+def general_left_curve (expr ta,tb,sa,sb,sc,sd) (suffix i,j,k,l) =
+ y.j=y.i;x.j=ta*(x.l-x.i)+x.i;
+ x.k=x.l;y.k=tb*(y.i-y.l)+y.l;
+ penpos i (sa,-90);
+ penpos j (sb,-90);
+ penpos k (sc,0);
+ penpos l (sd,0);
+ penstroke z.i.e{right}...{right}z.j.e...z.k.e{up}...{up}z.l.e;
+enddef;
+
+
+
+def any_curve (expr adjust,thick,thin) (suffix i,j,k,l,m) =
+ %draw from i to m via k, using j and l, using specified values for
+ % withds.
+ z.j=(tightness/adjust)[z.i,z.k];
+ z.l=(tightness/adjust)[z.m,z.k];
+ penpos i (thick,angle(z.k-z.i)+90);
+ penpos j (thick,angle(z.k-z.i)+90);
+ penpos l (thin,angle(z.m-z.k)+90);
+ penpos m (thin,angle(z.m-z.k)+90);
+ penstroke z.i.e{z.k-z.i}
+ ... {z.k-z.i}z.j.e
+ ... z.l.e{z.m-z.k}
+ ... {z.m-z.k}z.m.e;
+enddef;
+
+def baseline (expr a,b) = %draw a baseline
+ pickup penrazor scaled thick rotated baseline_tilt;
+ draw a --- b;
+enddef;
+baselinewidth:= sind(baseline_tilt)*thick;
+
+def thickpen = pickup pencircle scaled thick; enddef;
+def thinpen = pickup pencircle scaled thin; enddef;
+def hairlinepen = pickup pencircle scaled hairline; enddef;
+def baselinepen = pickup penrazor scaled thick rotated baseline_tilt; enddef;
+def dotpen = pickup pencircle scaled dot; enddef;
+def squarepen = pickup penrazor scaled squaredot rotated 45; enddef;
+
+def dotat (expr z) = %put at dot at z
+fill fullcircle scaled dot shifted z;
+enddef;
+
+def chupchik(suffix i,j)(expr ang) = %draw a chupchik from z at angle ang
+thinpen;
+z.i=z.j+dir(ang)*chupchiklength;
+draw z.i--z.j;
+enddef;
+
+def mycutoff(expr a,b) = %cutoff with culling
+cullit;
+cutoff(a,b);
+cullit;
+enddef;
+
+%input hcbase_pc; % KL 25.05.96
+input hcbase; % 1999/04/10 KL
+
+end; % KL 03.11.96
diff --git a/language/arabic/arabtex/mfinput/nash.mf b/language/arabic/arabtex/mfinput/nash.mf
new file mode 100644
index 0000000000..72af764a6f
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nash.mf
@@ -0,0 +1,38 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% nash.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ArabTeX NASKH Font
+% collect all characters
+% 27.01.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% abort if cm base is loaded
+if unknown nashbase: endinput fi;
+
+mode_setup;
+
+% font parameters
+em# := 25.4dx#;
+ex# := 8dy#;
+font_slant 0;
+font_normal_space .3em#;
+font_normal_stretch .5em#;
+font_normal_shrink .1em#;
+font_x_height ex#;
+font_quad em#;
+font_extra_space 0;
+font_coding_scheme "ArabTeX Naskh";
+
+font_setup;
+
+input nashchar;
+
+input nashlig;
+
+input nashdia;
+
+input nashdig;
+
+input nashspec;
diff --git a/language/arabic/arabtex/mfinput/nash14.mf b/language/arabic/arabtex/mfinput/nash14.mf
new file mode 100644
index 0000000000..1ce0496e71
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nash14.mf
@@ -0,0 +1,52 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% nash14.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Naskh font at 14.4 pt
+% 27.01.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi
+
+font_identifier "NASKH";
+
+font_size 14.4pt#;
+
+fs# := 14.4pt#;
+
+% grid units
+fs# = 25.4dx#;
+fs# = 25.4dy#;
+
+% diacritics distance
+dia_d := 2;
+
+% normal pen
+px# := 1.8dy#; py# := 0.3dx#;
+
+pen_angle := 70;
+
+diag_angle = pen_angle - angle(px#,py#);
+
+% dot pen
+dp# := 2dy#; ap := 50;
+
+% dot distances
+dpx := 1.5; dpy := 3;
+dpx := 1.2; dpy := 2.5;
+
+% small pen for diacritics
+spx# = dx#;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input nash
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/nash14bf.mf b/language/arabic/arabtex/mfinput/nash14bf.mf
new file mode 100644
index 0000000000..2e951299e5
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nash14bf.mf
@@ -0,0 +1,51 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% nash14bf.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Nash font at 14 pt, bold
+% 08.04.92
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi
+
+font_identifier "NASHBF";
+
+font_size 14.4pt#;
+
+fs# := 14.4pt#;
+
+% grid units
+fs# = 25.4dx#;
+fs# = 25.4dy#;
+
+% diacritics distance
+dia_d := 2;
+
+% normal pen
+px# := 2.4dy#; py# := 0.6dx#;
+
+pen_angle := 50;
+
+diag_angle = pen_angle - angle(px#,py#);
+
+% dot pen
+dp# := 2.2dy#; ap := 50;
+
+% dot distances
+dpx := 1.5; dpy := 3;
+
+% small pen for diacritics
+spx# := 1.5dx#;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input nash
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/nashbase.mf b/language/arabic/arabtex/mfinput/nashbase.mf
new file mode 100644
index 0000000000..9126ec6e9c
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashbase.mf
@@ -0,0 +1,541 @@
+%%%%%%%%%%%%%%%%%%%%%% nashbase.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% base file for NASH
+% 21.05.97
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown cmbase: else:
+errhelp "you are using 'cmbase'; rerun with base=&plain";
+errmessage "this font needs the 'plain' METAFONT base; run aborted";
+endinput
+fi;
+
+if unknown nashcode: input arabsymb fi;
+
+nashbase := 1;
+
+def font_setup =
+ define_pixels(dx, dy, dp, em, ex);
+ define_blacker_pixels(px, py, spx);
+ pa := pen_angle; pl := px++py; da := pa - angle(px,py);
+ pickup pensquare xscaled px yscaled py rotated pa;
+% pickup pencircle xscaled px yscaled py rotated pa;
+ nash_pen := savepen;
+ pickup pencircle scaled spx;
+ dia_pen := savepen;
+enddef;
+
+def makegrid(text r) =
+ for x=0 step dx until w+.5dx:
+ for y=0 step dy until h+.5dy:
+ fill unitsquare shifted (x,y);
+ endfor;
+ for y=dy step dy until d+.5dy:
+ fill unitsquare shifted (x,-y);
+ endfor;
+ endfor
+% for y=0,h,-d: r((0,y), (w,y)); endfor
+% for x=0,w: r((x,-d), (x,h)); endfor
+ maketicks(r);
+enddef;
+
+%%%%%%%%%%%%%% char-macros %%%%%%%%%%%%%%%%%
+
+def arabchar(expr code, form, uw, uh, ud) =
+ beginchar(if string code: code else: (code + form) fi,
+ uw*dx#, uh*dy#, (ud + dia_d)*dy#);
+ pickup nash_pen;
+ if .5w <> good.x .5w: change_width; fi
+ x.l = x.ll = 0; x.r = x.rr = w; x.m = 0.5w;
+ bot y.l = bot y.r = y.m = bot y.ll - .5ex = 0; y.rr = y.ll;
+enddef;
+
+def diachar(expr code, uw, uh) =
+ beginchar(code, uw*dx#, (uh+0.5)*dy#, 0.5*dy#);
+% beginchar(code, uw*dx#, uh*dy#, 0);
+ pickup dia_pen;
+ if .5w <> good.x .5w: change_width; fi
+ lft x.l = 0; rt x.r = w;
+ y.l = 0.5dy; y.r = h - dy;
+% bot y.l = 0; top y.r = h;
+enddef;
+
+def numchar(expr code) =
+ beginchar(code, 10*dx#, 10*dy#, 5*dy#);
+ pickup nash_pen;
+ if .5w <> good.x .5w: change_width; fi
+ lft x.l = 0; rt x.r = w;
+ bot y.l = -d; top y.r = h;
+% bot y.l = 0; top y.r = h;
+enddef;
+
+extra_endchar :=
+extra_endchar & "penlabels(l,m,r,ll,rr,range 1 thru 20);";
+
+%%%%%%%%%%%%%% dot-macros %%%%%%%%%%%%%%%%%
+
+def put_dot (suffix $) =
+ z.$1 - z.$2 = (0, px - py) rotated pa;
+ z.$ = .5[z.$1, z.$2];
+ draw z.$1--z.$2;
+ labels($1,$2);
+enddef;
+
+def one_dot (expr n) =
+ x.dd := x.m; y.dd := y.m + round(n*dy);
+ put_dot(dd);
+enddef;
+
+def two_dots (expr n) =
+ x.dr - x.m = x.m - x.dl = round(dpx*dx);
+ y.dl = y.dr = y.m + round(n*dy);
+ put_dot(dl); put_dot(dr);
+enddef;
+
+def three_dots (expr n) =
+ two_dots(n); one_dot(n+dpy);
+enddef;
+
+def three_dots_low (expr n) =
+ two_dots(n); one_dot(n-dpy);
+enddef;
+
+%%%%%%%%%%%%%% stroke-macros %%%%%%%%%%%%%%%%%
+
+def bow (expr u, v, w) =
+ draw u..controls v and v..w;
+enddef;
+
+def l_att (suffix $) =
+ x.$l = x.$ - dx; y.$l = y.l;
+ bow(z.$, z.$l, z.l);
+enddef;
+
+def r_att (suffix $) =
+ x.$r = x.$ + dx; y.$r = y.r;
+ bow(z.$, z.$r, z.r);
+enddef;
+
+def r_att (suffix $) =
+ x.$r = x.$ + dx; y.$r = y.r;
+% bow(z.$, z.$r, z.r);
+draw z.${z.$r-z.$}..z.r{right};
+enddef;
+
+def serif (suffix $) =
+ z.$ = 0.2[z.$2,z.$1];
+% z.$2 - z.$1 = 3dy * (-4dx,11dy); % 110
+ y.$2 - y.$1 = 3dy;
+ z.$2 - z.$1 = whatever * (-4dx,11dy);
+ draw z.$1--z.$2;
+enddef;
+
+def s_bow (suffix $) =
+ x.$1 - .5dx = x.$;
+ x.$2 - 4dx = lft x.$3 = lft x.$4 + 1.5dx - pl = x.l;
+ y.$1 - dy = y.$3 = y.$4 - 2dy = y.$2 + 2dy = - 2dy;
+ draw z.$..z.$1{down}..z.$3{up}..z.$4;
+enddef;
+
+def p_loop (suffix $) =
+pickup dia_pen;
+x.$1 = x.$2 = x.$; y.$1 + spx + dy = y.$2; top y.$2 = y.$;
+draw z.$1..z.$2..cycle;
+pickup nash_pen;
+enddef;
+
+def r_con (suffix $) =
+ charic := (y.$-y.r)/vppp;
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%% bah-macros %%%%%%%%%%%%%%%%%
+
+def bah_bow =
+x1 = x4 + dx = x2 + 13.8dx; x2 = x3 = x.l + 0.6dx;
+%x1 = x4 = x2 + 13.8dx; x2 = x3 = x.l + 0.6dx;
+y4 - 5dy = y1 - 3dy = y2 - 2dy = y.m = y3 - 4dy;
+x5 = x.m; y5 = y.m - 0.5dy;
+enddef;
+
+def bah_end =
+bah_bow; draw z1..z5{left}..z2..z3; r_att(1);
+enddef;
+
+def bah_iso =
+bah_bow; draw z4..z1..z5{left}..z2..z3;
+enddef;
+
+def bah_mid =
+x6 = x.m; y6 = good.y (y.r + 2dy);
+l_att(6); r_att(6);
+enddef;
+
+def bah_beg =
+x.m := x.m + 0.5dx;
+x1 - dx = x2 = x.m; y1 = y.l; y2 = y.m + 4dy;
+bow(z2, z1, z.l);
+enddef;
+
+%%%%%%%%%%%%%% hhah-macros %%%%%%%%%%%%%%%%%
+
+def hhah_iso_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 4dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_mid_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 3dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_beg_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 2dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_bow =
+lft x4 = x1 - 2dx = x5 - 8dx; rt x6 - 6dx = x5;
+y5 = y6 - dy = -10dy; y4 = 0.6[y2,y5];
+penpos4(pl,da); penpos5(pl,90); penpos6(0.3dy,90);
+draw z2{left}..z4{down};
+fill z4r{down}..z5r{right}..z6r--z6l--z5l{left}..z4l{up}--cycle;
+enddef;
+
+def hhah_iso =
+hhah_iso_bar; hhah_bow;
+enddef;
+
+def hhah_end =
+hhah_mid_bar; hhah_bow;
+draw z3{down}..z.r{right};
+enddef;
+
+def hhah_mid =
+hhah_mid_bar; draw z2{left}..z.l{left};
+draw z3{down}..z.r{right};
+enddef;
+
+def hhah_beg =
+hhah_beg_bar; draw z2{left}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% dal-macros %%%%%%%%%%%%%%%%%
+
+def dal_iso =
+x1 = x2 + 2dx = x3 - 3dx = x.r - 4dx; x.m := x1;
+y1 - 6dy = y2 = y3 - dy = y.r;
+draw z1{(7dx,-4dy)}..z3..z2{left};
+enddef;
+
+def dal_end =
+x1 + dx = x3 - dx = x4 + 4dx = x.r - 3dx; lft x2 = x.r - 9dx;
+y1 = 8dy; y2 - dy = y3 = y4 = y.l; z5 = .3[z1,z3];
+draw z1--z5{z3-z1}..z.r{right};
+draw z5{z3 - z1}..z4{left}..z2;
+enddef;
+
+%%%%%%%%%%%%%% rah-macros %%%%%%%%%%%%%%%%%
+
+def rah_bow =
+x5 + dx = x2 + dx = x4 + 9dx = x3 - px + 6dx = x.r;
+y5 + 3dy = y2 - 0.5dy = y4 + 6dy = y3 + 6dy = y.r;
+penpos2(pl,da); penpos3(pl,90);
+penpos4(0.3dy,90); penpos5(0.4[py,px],0);
+enddef;
+
+def rah_iso =
+rah_bow;
+y1 - 2dy = y.r; x1 + 0.5dx = x2;
+penpos1(pl,da);
+fill z1l..z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r..z1r--cycle;
+enddef;
+
+def rah_end =
+rah_bow;
+y1 - .5dy = y.r; x1 = x2; % = x.r - dx;
+fill z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r--cycle;
+draw z1..z.r{right};
+enddef;
+
+%%%%%%%%%%%%%% sin-macros %%%%%%%%%%%%%%%%%
+
+def s_wave =
+z2 - z1 = z5 - z4 = 2(z3 - z2);
+x3 - x1 = 6(x3 - x5) = 6dx; x.m := x2;
+y4 = y5 - 0.5dy = y2 - 2.5dy = y.r;
+draw z3..z5..z2; draw z2..z4{left};
+enddef;
+
+def mid_wave =
+x3 = x.r - 3dx; s_wave;
+draw z4{left}..z1;
+enddef;
+
+def beg_wave =
+rt x3 = x.r; s_wave;
+draw z4{left}..z1;
+enddef;
+
+def sin_iso =
+beg_wave; s_bow(1);
+enddef;
+
+def sin_end =
+mid_wave;
+draw z3{down}..z.r{right}; s_bow(1); enddef;
+
+def sin_mid =
+mid_wave; draw z3{down}..z.r{right}; l_att(1);
+enddef;
+
+def sin_beg =
+beg_wave; l_att(1);
+enddef;
+
+%%%%%%%%%%%%%% sad-macros %%%%%%%%%%%%%%%%%
+
+def sad_bow =
+x2 - dx = x3 - 9dx; x2 + 3dx = x.m; x4 = x2 - 2dx;
+y2 = y3 - 3dy = y4 - 2dy = y.r;
+x8 = x2 + 3.5dx; y8 = y2 + 0.5dy;
+draw z2{(5dx,6dy)}..z3{(4dx,-7dy)}..tension 2..z2{left};
+enddef;
+
+def sad_iso =
+x.m := x.m + 4dx;
+sad_bow; draw z2{left}..z4; s_bow(4);
+enddef;
+
+def sad_beg =
+x.m := x.m + dx;
+sad_bow; draw z2{left}..z4; l_att(4);
+enddef;
+
+%%%%%%%%%%%%%% ttah-macros %%%%%%%%%%%%%%%%%
+
+def ttah_stroke =
+x5 = x7 - dx = x2; y5 = 12dy; y7 = y2 + dy;
+draw z5{down}..z7{down};
+serif(5);
+enddef;
+
+def ttah_tail =
+x2 - x6 = 5dx; y6 = top y2;
+penpos2(pl,da);
+fill z6--z2r--z2l{left}..z6..cycle;
+enddef;
+
+def ttah_iso =
+x.m := x.m + dx;
+sad_bow; ttah_stroke; ttah_tail;
+x.m := x.m + dx;
+enddef;
+
+def ttah_beg =
+sad_bow; ttah_stroke;
+x.m := x.m + dx;
+enddef;
+
+%%%%%%%%%%%%%% ain-macros %%%%%%%%%%%%%%%%%
+
+def ain_head =
+x.m := x.m - 2dx;
+lda := 0.5pa + angle(dx,dy);
+penpos7(pl,pa); penpos3(0.3dy,90);
+penpos2(px,lda); penpos8(px,lda);
+x7 + 2dx = x3 + dx = x2 + 6dx; x8 = x2 + 0.3dx;
+y7 = y2 - 3dy = y3 - 4dy; y8 = y2; z7 = 0.25[z1, z.l];
+fill z7l{z.l-z1}..z2l{up}--z2r--z8r{down}..z7r{z1-z.l}--cycle;
+fill z2r{(7dx,10dy)}..z3r--z3l..z8l{(-7dx,-10dy)}--z2l--cycle;
+enddef;
+
+def ain_bow =
+lft x4 = x.l = x5 - 8dx; rt x6 = x5 + 6dx;
+y5 = y6 - dy = -10dy; y4 = 0.6[y1,y5];
+penpos4(pl,da); penpos5(pl,90); penpos6(0.3dy,90);
+draw z1{z.l - z1}..z4{down};
+fill z4r{down}..z5r{right}..z6r--z6l--z5l{left}..z4l{up}--cycle;
+enddef;
+
+def ain_top =
+x2 = x1 = x.r - 3.5dx; y2 - 2dy = y1 = 2dy;
+%x2 = x1 = x.m + 0.5dx; y2 - 2dy = y1 = 2dy;
+x7 - x2 = x2 - x3 = 2dx; y7 = y3 = y2 - 0.5dy;
+x8 = x3 - dx; y8 = y3;
+draw z.r{left}..z1..z3; draw z8..z2..z7;
+enddef;
+
+def ain_iso =
+x1 = x.r - 3dx; y1 = 5dy;
+ain_head; ain_bow;
+enddef;
+
+def ain_end =
+ain_top; draw z7..z1{z.l - z1}; ain_bow;
+enddef;
+
+def ain_mid =
+ain_top; draw z7..z1..z.l{left};
+enddef;
+
+def ain_beg =
+rt x1 = x.r; y1 = 3dy;
+ain_head; draw z1..z7..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% fah-macros %%%%%%%%%%%%%%%%%
+
+def fah_iso =
+x.m := x.m + 4dx;
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 6dy; y2 = y3 = 8dy;
+lft x5 = x.l; lft x6 = lft x5 - 1.5dx + pl; x7 = 6dx;
+y5 = 3dy; y6 = y5 + 3dy; bot y7 = -0.5dy;
+draw z2..z1..z3..z4{down}..z7..z5{up}..z6;
+enddef;
+
+def fah_end =
+x.m := x.m + 4dx;
+x1 = x2 + dx = x.r - 2dx; lft x3 = lft x4 + 1.5dx - pl = x5 - 5dx = x.l;
+y5 = dy; y1 = 6.5dy; y2 = 2dy; y3 = 4dy; y4 = 6dy;
+x2a + 3dx = x2b = x1; y2a = y2b = y.r + 2dy;
+draw z.r{left}..z2a..z1;
+draw z1..z2b..tension 1.5..z5..z3{up}..z4;
+enddef;
+
+def fah_mid =
+x1 = x2 + dx = x.r - 2dx; y1 - 5dy = y2 - 0.5dy = y.r;
+x2a + 3dx = x2b = x1; y2a = y2b = y.r + 2dy;
+draw z.r{left}..z2a..z1; draw z1..z2b..z.l{left};
+enddef;
+
+def fah_beg =
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 4dy; y2 = y3 = 6dy;
+draw z2..z1..z3..z4{down}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% kaf-macros %%%%%%%%%%%%%%%%%
+
+def kaf_mark (suffix $) =
+x.$6 + dx = x.$7 + 2dx = x.$8 = x.$9 + 3dx = x.$;
+y.$6 - 3dy = y.$7 - dy = y.$8 = y.$9 + dy = y.$;
+pickup dia_pen;
+draw z.$6{(-6dx,-5dy)}..z.$7..z.$8..z.$9{left};
+pickup nash_pen;
+labels($6,$7,$9);
+enddef;
+
+def kaf_beg =
+x1 - 11dx = x2 = x4 - 10dx = x.l;
+%x1 = x.r - dx; x2 = x.l; x4 = x.r - 2dx;
+%y4 = y.r; y1 = 14dy; y2 = 9dy; z3 = .4[z2, z4];
+y4 = y.l = y1 - 13dy = y2 - 8dy; z3 = .4[z2, z4];
+bow (z1, z2, z3);
+draw z3{z3 - z2}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% gaf-macros %%%%%%%%%%%%%%%%%
+
+def gaf_iso =
+x1 - 15dx = x2 - 6dx = x4 - 8dx = x6 - dx = x.l;
+y1 - 13dy = y2 - 9dy = y4 = y6 - dy = y.l;
+z3 = .7[z2, z4]; z5 = .5[z4, z.l];
+bow(z1, z2, z3); bow(z3, z4, z5); bow(z5, z.l, z6);
+enddef;
+
+def gaf_iso =
+x1 - 2dx = x2 + 7dx = x4 +5dx = x.r;
+y1 - 13dy = y2 - 9dy = y4 = y.r;
+z3 = .7[z2, z4]; bow(z1, z2, z3);
+x6 = x7 = x.l + 0.6dx; y6 = y7 - 2dy = y.l + dx;
+x5 = .5[x6, x4]; y5 = y.m; z13 = .5[z4, z3];
+draw z7 .. z6 .. z5{right} .. z13{z3-z13}--z3;
+enddef;
+
+def gaf_serif =
+x10 = x1; y10 = y1 + 2.5dy; x11 = x2 + 2dx; y11 = y2 + 3dy;
+pickup dia_pen;
+z12 = 0.1[z10,z11]; draw z12--z11;
+pickup nash_pen;
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+def serpent =
+x1 = x3 = x.r - 3dx;
+x2 = x4 = x5 - dx = x.l + 4dx;
+y1 = y2 = y4 - 4dy = y5 - 8dy = y.l; y3 = y4;
+draw z5 .. z4{right} .. z3{right} .. z1{left} .. z2;
+enddef;
+
+%%%%%%%%%%%%%% nun-macros %%%%%%%%%%%%%%%%%
+
+def nun_iso =
+x1 + 2dx = rt x2 = x.r; x3 = x.m; lft x4 = lft x5 + 1.5dx - pl = x.l;
+y1 - 8dy = y2 - 3dy = y4 - 3dy = y5 - 5dy = y3 + dy = y.r - 3dy;
+draw z1..z2{down}..z3..z4{up}..z5;
+enddef;
+
+def nun_end =
+x1 = x.r - 2dx; y1 = y.r + dy;
+x2 - .5dx = x1; lft x3 = lft x4 + 1.5dx - pl = x.l;
+y2 - dy = y3 = y4 - 2dy = y.r - 3dy;
+x5 = x.m; y5 = y3 - 4dy;
+draw z1..z2{down}..z5..z3{up}..z4; r_att(1);
+enddef;
+
+%%%%%%%%%%%%%% waw-macros %%%%%%%%%%%%%%%%%
+
+def waw_bow =
+rah_bow;
+x1 + 2.5dx = x2; y1 - 3dy = y2;
+x6 = x1; y6 = y2;
+fill z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r--cycle;
+enddef;
+
+%%%%%%%%%%%%%% hah-macros %%%%%%%%%%%%%%%%%
+
+def hah_iso =
+x1 = x.m - .5dx; rt x2 = x.r; lft x3 = x.l;
+y1 = 7dy; y2 = y3 = 3dy;
+%y1 = 6dy; y2 = y3 = 3dy;
+%y1 = 6dy; y2 = y3 = 2dy;
+draw z1..z2{down}..z3{up}..z1;
+enddef;
+
+def hah_end =
+x1 = x2 - dx = x4 + 2.5dx = x.m;
+y1 = 7dy; y2 = y.r; y4 = 4dy;
+z3 = .15[z1, z2]; z5 = .6[z1, z2];
+draw z1--z5{z5-z1}..z.r{right};
+draw z3{(-7dx,-4dy)}..z4{down}..z5{(7dx,4dy)};
+enddef;
+
+%%%%%%%%%%%%%% yah-macros %%%%%%%%%%%%%%%%%
+
+def yah_iso =
+x6 = x1 + 5dx = x2 + dx = x.r = x3 + 6dx;
+lft x4 = lft x5 + 1.5dx - pl = x.r - 13dx;
+%x6 = x1 + 5dx = x2 + dx = x.r = x3 + 6dx; lft x4 = x5 - dx = x.r - 13dx;
+y6 - 7dy = y1 - 3dy = y5 - 3dy = y2 - dy = y4 = y3 + 3dy = y.r - 2dy;
+draw z6{up}..tension 1.5..z1{down}..tension 1.5
+..z2{down}..tension 1.5..z3..z4{up}..z5;
+enddef;
+
+def yah_end =
+x1 + 4dx = rt x2 = x.r = x3 + 5dx;
+lft x4 = lft x5 + 1.5dx - pl = x.r - 11dx;
+y1 + 2dy = y2 + 4dy = y4 + 4dy = y3 + 7dy = y5 + dy = y.r;
+draw z.r{left}..z1{down}..tension 1.5
+..z2{down}..tension 1.5..z3..z4{up}..z5;
+enddef;
+
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/nashchar.mf b/language/arabic/arabtex/mfinput/nashchar.mf
new file mode 100644
index 0000000000..94e653bcf0
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashchar.mf
@@ -0,0 +1,762 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% nashchar.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% NASH Font
+% normal characters
+% 21.05.97
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi;
+
+%%%%%%%%%%%%%% alif %%%%%%%%%%%%%%%%%
+
+arabchar(alif, f_iso, 3, 15, -1);
+rt x6 = x.r; bot y6=0;
+x7 = x6 - dx; y7 = 13dy;
+draw z6{up}..z7{up};
+serif(7);
+endchar;
+
+arabchar(alif, f_end, 4, 15, 0);
+x6 + 2dx = x7 + 3dx = x.r;
+y6 = y.r; y7 = 13dy;
+z8 = 0.7[z7,z6]; draw z7---z8..z.r{right};
+endchar;
+
+%%%%%%%%%%%%%% bah family %%%%%%%%%%%%%%%%%
+
+arabchar(bah_s, f_iso, 16, 6, 1);
+bah_iso;
+endchar;
+
+arabchar(bah_s, f_end, 17, 6, 1);
+bah_end;
+endchar;
+
+arabchar(bah_s, f_mid, 5, 8, 0);
+x1 = x.m; y1 = y.l + 2dy;
+draw z.l{right}..z1; draw z1..z.r{right};
+endchar;
+
+arabchar(bah_s, f_beg, 5, 8, 0);
+x2 = x1 = x.l + 3dx; y1 - 4dy = y2 - dy = y.l;
+draw z1{(4dx,-11dy)}..z2..z.l{left};
+endchar;
+
+%%%%%%%%%%%%%% bah family with loop %%%%%%%%%%%%%%%%%
+
+arabchar(bah_p, f_iso, 16, 6, 3);
+bah_iso;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+arabchar(bah_p, f_end, 17, 6, 3);
+bah_end;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+arabchar(bah_p, f_mid, 6, 8, 2);
+x1 = x2 + dx = x.r - 2dx; y1 - 2dy = y2 = y.l;
+draw z.l{right}..z1{up}; draw z1..z.r{right};
+p_loop(2);
+endchar;
+
+arabchar(bah_p, f_beg, 5, 8, 2);
+x2 = x1 = x.l + 3dx; y1 - 4dy = y2 - dy = y.l;
+draw z1{(4dx,-11dy)}..z2..z.l{left};
+p_loop(2);
+endchar;
+
+%%%%%%%%%%%%%% gim %%%%%%%%%%%%%%%%%
+
+arabchar(gim, f_iso, 12, 10, 10);
+hhah_iso; one_dot(-3);
+endchar;
+
+arabchar(gim, f_end, 13, 10, 10);
+hhah_end; one_dot(-3);
+endchar;
+
+arabchar(gim, f_mid, 13, 10, 4);
+hhah_mid; one_dot(-4);
+endchar;
+
+arabchar(gim, f_beg, 12, 10, 4);
+hhah_beg; x.m := x.m + dx; one_dot(-4);
+endchar;
+
+%%%%%%%%%%%%%% hhah %%%%%%%%%%%%%%%%%
+
+arabchar(hhah, f_iso, 12, 10, 10);
+hhah_iso;
+endchar;
+
+arabchar(hhah, f_end, 13, 10, 10);
+hhah_end;
+endchar;
+
+arabchar(hhah, f_mid, 13, 10, 0);
+hhah_mid;
+endchar;
+
+arabchar(hhah, f_beg, 12, 10, 0);
+hhah_beg;
+endchar;
+
+%%%%%%%%%%%%%% khah %%%%%%%%%%%%%%%%%
+
+arabchar(khah, f_iso, 12, 15, 10);
+hhah_iso; x.m := x.m - 2dx; one_dot(10);
+endchar;
+
+arabchar(khah, f_end, 13, 15, 10);
+hhah_end; one_dot(10);
+endchar;
+
+arabchar(khah, f_mid, 13, 15, 0);
+hhah_mid; one_dot(10);
+endchar;
+
+arabchar(khah, f_beg, 12, 15, 0);
+hhah_beg; one_dot(10);
+endchar;
+
+%%%%%%%%%%%%%% tsah %%%%%%%%%%%%%%%%%
+
+arabchar(tsah, f_iso, 12, 10, 10);
+hhah_iso; three_dots_low(-2);
+endchar;
+
+arabchar(tsah, f_end, 13, 10, 10);
+hhah_end; three_dots_low(-2);
+endchar;
+
+arabchar(tsah, f_mid, 13, 10, 7);
+hhah_mid; x.m := x.m + dx; three_dots_low(-4);
+endchar;
+
+arabchar(tsah, f_beg, 12, 10, 7);
+hhah_beg; x.m := x.m + dx; three_dots_low(-4);
+endchar;
+
+%%%%%%%%%%%%%% dal, dhal %%%%%%%%%%%%%%%%%
+
+arabchar(dal, f_iso, 7, 10, 0);
+dal_iso;
+endchar;
+
+arabchar(dal, f_end, 10, 11, 0);
+dal_end;
+endchar;
+
+%%%%%%%%%%%%%% dal with loop %%%%%%%%%%%%%%%%%
+
+arabchar(dal_p, f_iso, 7, 10, 0);
+dal_iso; p_loop(3);
+endchar;
+
+arabchar(dal_p, f_end, 10, 11, 1);
+dal_end;
+x6 = x4 + 2dx; y6 = y4; p_loop(6);
+endchar;
+
+%%%%%%%%%%%%%% rah %%%%%%%%%%%%%%%%%
+
+arabchar(rah, f_iso, 8, 5, 5);
+rah_iso;
+endchar;
+
+arabchar(rah, f_end, 8, 5, 5);
+rah_end;
+endchar;
+
+%%%%%%%%%%%%%% rah with loop %%%%%%%%%%%%%%%%%
+
+arabchar(rah_p, f_iso, 8, 5, 8);
+rah_iso; p_loop(3l);
+endchar;
+
+arabchar(rah_p, f_end, 8, 5, 8);
+rah_end; p_loop(3l);
+endchar;
+
+%%%%%%%%%%%%%% rah with two dots %%%%%%%%%%%%%%%%%
+
+arabchar(rah_s, f_end, 8, 5, 6);
+rah_end;
+x6 = x.r; y6 = y3l; x7 = x3l; y7 = y5 + dy;
+put_dot(6); put_dot(7);
+endchar;
+
+arabchar(rah_s, f_iso, 8, 5, 6);
+rah_iso;
+x6 = x.r; y6 = y3l; x7 = x3l; y7 = y5 + dy;
+put_dot(6); put_dot(7);
+endchar;
+
+%%%%%%%%%%%%%% kurdish rah %%%%%%%%%%%%%%%%%
+
+arabchar(rah_k, f_iso, 8, 5, 10);
+rah_iso;
+x6 + dx = x7 + 3dx = x.r;
+y6 + 3dy = y7 + 8dy = y.r;
+draw z6{(dx,-2dy)}..z7;
+endchar;
+
+arabchar(rah_k, f_end, 8, 5, 10);
+rah_end;
+x6 + dx = x7 + 3dx = x.r;
+y6 + 3dy = y7 + 8dy = y.r;
+draw z6{(dx,-2dy)}..z7;
+endchar;
+
+%%%%%%%%%%%%%% zay %%%%%%%%%%%%%%%%%
+
+arabchar(zay, f_iso, 8, 10, 5);
+rah_iso; one_dot(7);
+endchar;
+
+arabchar(zay, f_end, 8, 10, 5);
+rah_end; one_dot(5);
+endchar;
+
+%%%%%%%%%%%%%% zhah %%%%%%%%%%%%%%%%%
+
+arabchar(zhah, f_iso, 8, 12, 5);
+rah_iso; three_dots(6);
+endchar;
+
+arabchar(zhah, f_end, 8, 12, 5);
+rah_end; three_dots(5);
+endchar;
+
+%%%%%%%%%%%%%% sin %%%%%%%%%%%%%%%%%
+
+arabchar(sin, f_iso, 16, 6, 5);
+sin_iso;
+endchar;
+
+arabchar(sin, f_end, 18, 6, 5);
+sin_end;
+endchar;
+
+arabchar(sin, f_mid, 13, 6, 0);
+sin_mid;
+endchar;
+
+arabchar(sin, f_beg, 11, 6, 0);
+sin_beg;
+endchar;
+
+%%%%%%%%%%%%%% sin with two dots %%%%%%%%%%%%%%%%%
+
+arabchar(sin_p, f_iso, 16, 15, 5);
+sin_iso; one_dot(8);
+x6 = x.m; y6 + 4dy = y.r; put_dot(6);
+endchar;
+
+arabchar(sin_p, f_end, 18, 15, 5);
+sin_end; one_dot(8);
+x6 = x.m; y6 + 4dy = y.r; put_dot(6);
+endchar;
+
+%%%%%%%%%%%%%% shin %%%%%%%%%%%%%%%%%
+
+arabchar(shin, f_iso, 16, 15, 5);
+sin_iso; three_dots(8);
+endchar;
+
+arabchar(shin, f_end, 18, 15, 5);
+sin_end; three_dots(8);
+endchar;
+
+arabchar(shin, f_mid, 13, 15, 0);
+sin_mid; three_dots(8);
+endchar;
+
+arabchar(shin, f_beg, 11, 15, 0);
+sin_beg; three_dots(8);
+endchar;
+
+%%%%%%%%%%%%%% sad %%%%%%%%%%%%%%%%%
+
+arabchar(sad, f_iso, 19, 10, 5);
+sad_iso;
+endchar;
+
+arabchar(sad, f_end, 19, 10, 5);
+sad_iso; draw z.r{left}..z8;
+endchar;
+
+arabchar(sad, f_mid, 14, 10, 0);
+sad_beg; draw z.r{left}..z8;
+endchar;
+
+arabchar(sad, f_beg, 14, 10, 0);
+sad_beg;
+endchar;
+
+%%%%%%%%%%%%%% dad %%%%%%%%%%%%%%%%%
+
+arabchar(dad, f_iso, 19, 10, 5);
+sad_iso; one_dot(8);
+endchar;
+
+arabchar(dad, f_end, 19, 10, 5);
+sad_iso; draw z.r{left}..z8;
+one_dot(8);
+endchar;
+
+arabchar(dad, f_mid, 14, 10, 0);
+sad_beg; draw z.r{left}..z8;
+one_dot(8);
+endchar;
+
+arabchar(dad, f_beg, 14, 10, 0);
+sad_beg; one_dot(8);
+endchar;
+
+%%%%%%%%%%%%%% ttah %%%%%%%%%%%%%%%%%
+
+arabchar(ttah, f_iso, 13, 15, 0);
+ttah_iso;
+endchar;
+
+arabchar(ttah, f_end, 13, 15, 0);
+ttah_iso; draw z.r{left}..z8;
+endchar;
+
+arabchar(ttah, f_mid, 12, 15, 0);
+ttah_beg; draw z.r{left}..z8; draw z2--z.l;
+endchar;
+
+arabchar(ttah, f_beg, 11, 15, 0);
+ttah_beg; draw z2--z.l;
+endchar;
+
+%%%%%%%%%%%%%% zzah %%%%%%%%%%%%%%%%%
+
+arabchar(zzah, f_iso, 13, 15, 0);
+ttah_iso; one_dot(8);
+endchar;
+
+arabchar(zzah, f_end, 13, 15, 0);
+ttah_iso; draw z.r{left}..z8;
+one_dot(8);
+endchar;
+
+arabchar(zzah, f_mid, 12, 15, 0);
+ttah_beg; draw z.r{left}..z8; draw z2--z.l;
+one_dot(8);
+endchar;
+
+arabchar(zzah, f_beg, 11, 15, 0);
+ttah_beg; draw z2--z.l;
+one_dot(8);
+endchar;
+
+%%%%%%%%%%%%%% ain, ghain %%%%%%%%%%%%%%%%%
+
+arabchar(ain, f_iso, 11, 11, 10);
+ain_iso;
+endchar;
+
+arabchar(ain, f_end, 10, 7, 10);
+ain_end;
+endchar;
+
+arabchar(ain, f_mid, 9, 7, 0);
+ain_mid;
+endchar;
+
+arabchar(ain, f_beg, 9, 10, 5);
+ain_beg;
+endchar;
+
+%%%%%%%%%%%%%% fah family %%%%%%%%%%%%%%%%%
+
+arabchar(fah_s, f_iso, 17, 10, 0);
+fah_iso;
+endchar;
+
+arabchar(fah_s, f_end, 18, 10, 0);
+fah_end;
+endchar;
+
+arabchar(fah_s, f_mid, 8, 9, 2);
+fah_mid;
+endchar;
+
+arabchar(fah_s, f_beg, 6, 10, 5);
+fah_beg;
+endchar;
+
+%%%%%%%%%%%%%% fah %%%%%%%%%%%%%%%%%
+
+arabchar(fah, f_iso, 17, 15, 0);
+fah_iso; one_dot(12);
+endchar;
+
+arabchar(fah, f_end, 18, 15, 0);
+fah_end; one_dot(10);
+endchar;
+
+%%%%%%%%%%%%%% qaf %%%%%%%%%%%%%%%%%
+
+arabchar(qaf, f_iso, 12, 15, 2);
+x.m := x.m + 2dx;
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 4dy; y2 = y3 = 6dy;
+lft x5 = x.l; lft x6 = lft x5 - 1.5dx + pl; x7 = 5dx;
+y5 = dy; y6 = y5 + 3dy; y7 = -2dy;
+draw z2..z1..z3..z4{down}..z7..z5{up}..z6;
+two_dots(11);
+endchar;
+
+arabchar(qaf, f_end, 12, 15, 4);
+x.m := x.m + 2dx;
+x1 + 3dx = x2 + dx = x.r;
+lft x3 = lft x4 + 1.5dx - pl = x5 - 5dx = x.l;
+y1 - 4dy = y2 = y.r = y3 + 2dy = y4 = y5 + 5dy;
+draw z.r{left}..z2..z1{right}..z2..z5..z3{up}..z4;
+two_dots(10);
+endchar;
+
+%%%%%%%%%%%%%% vah %%%%%%%%%%%%%%%%%
+
+arabchar(vah, f_iso, 17, 15, 0);
+fah_iso; three_dots(12);
+endchar;
+
+arabchar(vah, f_end, 18, 15, 2);
+fah_end; three_dots(10);
+endchar;
+
+%%%%%%%%%%%%%% kaf family %%%%%%%%%%%%%%%%%
+
+%arabchar(kaf_s, f_iso, 13, 15, 0);
+arabchar(kaf_s, f_iso, 16, 15, 0);
+gaf_iso;
+endchar;
+
+%arabchar(kaf_s, f_end, 13, 15, 0);
+arabchar(kaf_s, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+endchar;
+
+arabchar(kaf_s, f_mid, 12, 15, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+endchar;
+
+arabchar(kaf_s, f_beg, 9, 15, 0);
+kaf_beg;
+endchar;
+
+%%%%%%%%%%%%%% kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf, f_iso, 10, 15, 0);
+x1 = x.r - 2dx; x2 = x.m; x3 = x.l + dx;
+y1 = 12dy; y2 = y.r; y3 = y.l + dy;
+x4 = x.l + 6dx; y4 = y.l + 4dy;
+bow(z1, z.r, z2); bow(z2, z.l, z3);
+serif(1); kaf_mark(4);
+endchar;
+
+arabchar(kaf, f_end, 12, 15, 0);
+x1 + dx = x2 = x.r - 2dx;
+x4 = x.m; lft x5 = x6 - dx = x.l;
+z3 = .7[z1, z2];
+y1 = 12dy; y2 = y.r; y4 = y.r; y5 = y6 - 2dy = y.l + 2dy;
+x7 = x.l + 7dx; y7 = y.l + 4dy;
+draw z1--z3{z2 - z1}..z4..z5..z6;
+draw z3{z2 - z3}..z.r{right};
+kaf_mark(7);
+endchar;
+
+%%%%%%%%%%%%%% kaf family with loop %%%%%%%%%%%%%%%%%
+
+%arabchar(kaf_p_s, f_iso, 13, 15, 0);
+arabchar(kaf_p_s, f_iso, 16, 15, 0);
+gaf_iso;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+%arabchar(kaf_p_s, f_end, 13, 15, 0);
+arabchar(kaf_p_s, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_s, f_mid, 12, 15, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_s, f_beg, 9, 15, 0);
+kaf_beg;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% kaf with loop %%%%%%%%%%%%%%%%%
+
+%arabchar(kaf_p, f_iso, 13, 15, 0);
+arabchar(kaf_p, f_iso, 16, 15, 0);
+gaf_iso;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+%x8 = x.l + 5dx; y8 = y.l + 4dy; kaf_mark(8);
+z18 = .4[z1,z2]; x9 = x18; y9 = bot y18; p_loop(9);
+endchar;
+
+%arabchar(kaf_p, f_end, 13, 15, 0);
+arabchar(kaf_p, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+%x8 = x.l + 5dx; y8 = y.l + 4dy; kaf_mark(8);
+z18 = .4[z1,z2]; x9 = x18; y9 = bot y18; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% wide kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_w, f_iso, 16, 10, 0);
+serpent;
+ttah_tail;
+endchar;
+
+arabchar(kaf_w, f_end, 16, 10, 0);
+serpent;
+draw z.r{left}..z1;
+ttah_tail;
+endchar;
+
+arabchar(kaf_w, f_mid, 16, 10, 0);
+serpent;
+draw z.r{left}..z1;
+draw z2{left}..z.l;
+endchar;
+
+arabchar(kaf_w, f_beg, 16, 10, 0);
+serpent;
+draw z2{left}..z.l;
+endchar;
+
+%%%%%%%%%%%%%% gaf family %%%%%%%%%%%%%%%%%
+
+%arabchar(gaf_s, f_iso, 13, 15, 0);
+arabchar(gaf_s, f_iso, 16, 15, 0);
+gaf_iso; gaf_serif;
+endchar;
+
+%arabchar(gaf_s, f_end, 13, 15, 0);
+arabchar(gaf_s, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+gaf_serif;
+endchar;
+
+arabchar(gaf_s, f_mid, 12, 15, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+gaf_serif;
+endchar;
+
+arabchar(gaf_s, f_beg, 9, 15, 0);
+kaf_beg; gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% gaf %%%%%%%%%%%%%%%%%
+
+%arabchar(gaf, f_iso, 13, 15, 0);
+arabchar(gaf, f_iso, 16, 15, 0);
+gaf_iso; gaf_serif;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+%x8 = x.l + 5dx; y8 = y.l + 4dy; kaf_mark(8);
+endchar;
+
+%arabchar(gaf, f_end, 13, 15, 0);
+arabchar(gaf, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+gaf_serif;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+%x8 = x.l + 5dx; y8 = y.l + 4dy; kaf_mark(8);
+endchar;
+
+%%%%%%%%%%%%%% lam %%%%%%%%%%%%%%%%%
+
+arabchar(lam, f_iso, 9, 15, 3);
+rt x4 = w; lft x5 = 0; x1 = x4 - dx; x3 = x5 + dx;
+y1 = 12dy; y3 = 3dy; y4 = y5 = 0;
+draw z1{down}..z4{down}..z5{up}..z3; serif(1);
+endchar;
+
+arabchar(lam, f_end, 12, 15, 7);
+x1 + 3dx = x2 + 2dx = x.r; y1 - 11dy = y2 = y.r;
+z8 = 0.7[z1,z2]; draw z1---z8..z.r{right};
+s_bow(1);
+endchar;
+
+arabchar(lam, f_mid, 5, 15, 0);
+x1 + 3dx = x2 + 2dx = x.r; y1 - 11dy = y2 = y.r;
+z8 = 0.7[z1,z2]; draw z1---z8..z.r{right};
+bow (z1, z2, z.l);
+endchar;
+
+arabchar(lam, f_beg, 4, 15, 0);
+x1 = x2 - dx = x.l + 2dx;
+y1 = 12dy; y2 = y.l; z3 = 0.8[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+%%%%%%%%%%%%%% mim %%%%%%%%%%%%%%%%%
+
+arabchar(mim, f_iso, 7, 10, 5);
+%arabchar(mim, f_iso, 7, 10, 8);
+x2 + 6dx = x4 + 4dx = x5 + 3.5dx = x6 + 4.5dx = x1;
+y2 + dy = y4 + 11dy = y5 - 2.5dy = y6 - 1.5dy = y1;
+z2 = z.l; bow(z4,z2,z1); bow(z6,z5,z1);
+endchar;
+
+arabchar(mim, f_end, 10, 10, 1);
+x1 + 0.5dx = x2 - 2.5dx = x3 + 2dx = x5 - 2dx = x.m;
+y1 - 3dy = y2 - 0.5dy = y3 - 1.5dy = y5 - dy = y.l;
+x4 = x.l + 2dx; y4 = -8dy;
+draw z.r{left}..z5..z1..tension 1.5..z3;
+draw z3{down}..tension 1.2..z2;
+bow(z3, z.l, z4);
+endchar;
+
+arabchar(mim, f_mid, 8, 10, 1);
+x1 + 0.5dx = x2 - 2.5dx = x3 + 2dx = x5 - 2dx = x.m;
+y1 - 3dy = y2 - 0.5dy = y3 - 1.5dy = y5 - dy = y.l;
+draw z.r{left}..z5..z1..tension 1.5..z3
+& z3{down}..tension 1.2..z2; l_att(3);
+endchar;
+
+arabchar(mim, f_beg, 7, 10, 0);
+x1 = x2 - dx = x3 + 2dx = x.l + 5dx;
+y1 - 4dy = y2 = y3 - 2dy = y.l;
+draw z3..tension 2..z2..tension 1.5..z1..z3..z.l{left};
+endchar;
+
+%%%%%%%%%%%%%% nun %%%%%%%%%%%%%%%%%
+
+arabchar(nun, f_iso, 10, 8, 3);
+nun_iso;
+endchar;
+
+arabchar(nun, f_end, 11, 4, 6);
+nun_end;
+endchar;
+
+%%%%%%%%%%%%%% nun with loop %%%%%%%%%%%%%%%%%
+
+arabchar(nun_p, f_iso, 10, 8, 6);
+nun_iso;
+x6 = x3; top y6 = y3; p_loop(6);
+endchar;
+
+arabchar(nun_p, f_end, 11, 4, 9);
+nun_end;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+%%%%%%%%%%%%%% hah, tah marbuta %%%%%%%%%%%%%%%%%
+
+arabchar(hah, f_iso, 5, 10, 0);
+hah_iso;
+endchar;
+
+arabchar(hah, f_end, 6, 10, 0);
+hah_end;
+endchar;
+
+arabchar(hah, f_mid, 6, 10, 4);
+x1 + dx = x2 = x3 = x4 + 2dx = x.m + dx;
+y1 = y2 - 4dy = y3 + 4dy = y4 = y.r;
+draw z1{(7dx,-4dy)}..z3..z4{up}..z2;
+draw z2{(5dx,-6dy)}..z.l{left}; draw z.r--z1;
+endchar;
+
+arabchar(hah, f_beg, 9, 10, 0);
+x1 + 0.5dx = x2 = x3 + 1.5dx = x4 - 1.5dx = x.r - 5dx;
+x6 + dx = x5 - 3dx = x.r;
+y1 = 7dy; y2 = 2dy; y3 = y4 = 4dy; y6 = dy;
+draw z1{curl 0}..tension 1.5..z6..tension 2..z2..z3..z4..z2..z.l{left};
+endchar;
+
+%%%%%%%%%%%%%% waw %%%%%%%%%%%%%%%%%
+
+arabchar(waw, f_iso, 9, 7, 6);
+waw_bow;
+draw z2{(-7dx,-4dy)}..z6..z1{right}..z2{(4dx,-11dy)};
+endchar;
+
+arabchar(waw, f_end, 10, 7, 6);
+x.r := x.r - dx;
+waw_bow;
+x.r := x.r + dx;
+draw z.r{left}..z6..z1{right}..z2{(4dx,-11dy)};
+endchar;
+
+%%%%%%%%%%%%%% yah, alif_maqsura %%%%%%%%%%%%%%%%%
+
+arabchar(yah, f_iso, 13, 5, 5);
+yah_iso;
+endchar;
+
+arabchar(yah, f_end, 11, 5, 7);
+yah_end;
+endchar;
+
+%%%%%%%%%%%%%% long yah %%%%%%%%%%%%%%%%%
+
+arabchar(yah_p, f_iso, 15, 8, 3);
+x10 = x4 - dx = x5; x3 = x6 = x7 + 2dx = x4 - 8dx; x8 = x4 + 4dx = x.r;
+%x10 = x4 - dx = x5; x3 = x6 = x7 = x4 - 8dx; x8 = x4 + 5dx = x.r;
+y10 = y6 = y4 - 3dy = y5 - 5dy = y.r; y3 = y.rr; y7 = y8 = y.r - 3dy;
+z9 = 0.2[z10,z5]; z1 = 0.9[z6,z9]; z2 = 0.8[z3,z5];
+draw z8--z7{left}..z6..controls z1 and z2..z5..z4{(dx,-6dy)};
+endchar;
+
+arabchar(yah_p, f_end, 5, 8, 6);
+x8 - 7dx = x7 + 3dx = x.r; y7 = y8 = y.r - 3dy;
+draw z8--z7{left}..z.r{(4dx,dy)};
+endchar;
+
+%%%%%%%%%%%%%% yah with hook %%%%%%%%%%%%%%%%%
+
+arabchar(yah_h, f_iso, 15, 5, 5);
+yah_iso;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+arabchar(yah_h, f_end, 13, 5, 7);
+yah_end;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+%arabchar(yah_h_spec, f_end, 11, 5, 7); % final yah with hook
+%x.m := x.m + 2dx; x2 = x.r + 4dx;
+%x3 = x.m; lft x4 = x5 - dx = x.l + 2dx;
+%y2 - dy = y4 = y5 - 3dy = y3 + 3dy = -3dy;
+%draw z.r{(8dx,-3dy)}..tension 1.5
+%..z2{down}..tension 1.5..z3{left}..z4{up}..z5;
+%x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+%endchar;
+
+%%%%%%%%%%%%%% hamza %%%%%%%%%%%%%%%%%
+
+arabchar(hamza_iso, f_iso, 5, 8, 0);
+x3 = x1 + 3.5dx = x2 + 3.5dx = x7; x8 = x2 + 0.2dx +0.3py;
+y3 - 3dy = y1 + dy = y2 - 2dy = y7 = y.r + dy; y8 = y2;
+lda := 0.5[pa,90]; x.m = 0.5[x1,x7];
+penpos7(px,pa); penpos3(0.3dy,90);
+penpos2(px,lda); penpos8(px,lda);
+fill z7l{z1-z7}..z2l{up}--z2r--z8r{down}..z7r{z7-z1}--cycle;
+fill z2r{(7dx,10dy)}..z3r--z3l..z8l{(-7dx,-10dy)}--z2l--cycle;
+draw z1..z7;
+endchar;
+
+endinput;
+
+%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%
+
diff --git a/language/arabic/arabtex/mfinput/nashdia.mf b/language/arabic/arabtex/mfinput/nashdia.mf
new file mode 100644
index 0000000000..e4616d7711
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashdia.mf
@@ -0,0 +1,119 @@
+%%%%%%%%%%%%%%%%%%%%%%% nashdia.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% NASH Font
+% 14.03.92
+% 03.11.96
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi;
+
+%%%%%%%%%%%%%% diacritics %%%%%%%%%%%%%%%%%
+
+diachar(damma, 4, 5);
+z1 = z.l; x2 = 3dx; y2 = y.r; x3 = x.r; y3 = 2dy;
+draw z1{dir 30}..z2{left}..z3{dir -45};
+endchar;
+
+diachar(fatha, 4, 2.5);
+draw z.l--z.r;
+endchar;
+
+diachar(sukun, 4, 4);
+%draw (.5w, y.l)..(.5w, y.r)..cycle;
+%draw (.5w, y.r){dir -35}..(.5w, y.l){left}..{dir 35}(.5w, y.r);
+%draw (.5w, y.r){dir -45}..(.5w, y.l){left}..{dir 45}(.5w, y.r);
+draw (.5w, y.r){dir -45}..(.5w, y.l){left}..{dir 30}(.5w, y.r);
+endchar;
+
+diachar(dammatan, 5, 5);
+x4 = x.l; x5 = x1 = dx; y4 = y5 = 3dy; y1 = y.l;
+x2 - x.l = 3dx; y2 = y.r; x3 = x.r; y3 = 2dy;
+draw z1{dir 30}..z2{left}..z3{dir -45};
+draw z4..z5..z1{down};
+endchar;
+
+diachar(fathatan, 4, 4.5);
+x1 = x.r; x2 = x.l; y1 = y.r - 2dy; y2 = y.l + 2dy;
+draw z.l--z1; draw z2--z.r;
+endchar;
+
+diachar(hamza, 4, 5);
+x1 = x.r; x2 = x.l; x3 = x.r - dx;
+y1 = 2dy; y2 = 2.5dy; y3 = y.r - .5dy;
+draw z.l--z1;
+draw z3{left}..z2..z1{z1-z.l};
+endchar;
+
+diachar(shadda, 5, 3);
+z5 - z3 = z3 - z1 = z4 - z2 = whatever * (4dx, dy);
+z5 = z.r; x1 = x.l; y2 = y.l; x2 = .5[x1, x3];
+draw z1{down}..z2..z3{up}; draw z3{down}..z4..z5{up};
+endchar;
+
+diachar(quran_alif, 2, 5);
+x1 = x.l; x2 = .5[x.l, x.r];
+y1 = y.r; y2 = y.l;
+draw z1--z2;
+endchar;
+
+diachar(wasla, 6, 2);
+x1 - .4w = x2 - .7w = x4 - .7w = x5 = dx; x3 = x.r + dx;
+%x1 = .4w; x2 = x4 = .7w; x3 = x.r;
+y1 = y3 = h/2; y2 = y.l; y4 = y5 = y.r;
+draw z5..z1..z2..z3..z4..z1;
+endchar;
+
+diachar(madda, 6, 1.5);
+%x.r - x2 = x1 - x.l = .25(x.r - x.l);
+%y1 = y.r; y2 = y.l;
+%draw z.l..z1..z2..z.r;
+x.r - x2 = x1 - x.l = .1(x.r - x.l);
+y1 = y.r + dy; y3 = y2 = y.l; x3 = x.r;
+draw z.l--z1..z2..z3;
+endchar;
+
+diachar(ttah_dia, 4, 5);
+z1 = z.l; x2 = x4 = dx; y2 = dy; y4 = y.r; x3 = x.r; y3 = 2dy;
+draw z1{dir 45}..z2..z3..z1{left}; draw z2..z4;
+endchar;
+
+arabchar(one_dot_up, 0, 2, 4, -2);
+one_dot(1);
+endchar;
+
+arabchar(two_dots_up, 0, 5, 4, -2);
+two_dots(1);
+endchar;
+
+arabchar(three_dots_up, 0, 5, 7, -2);
+three_dots(1);
+endchar;
+
+arabchar(two_dots_down, 0, 5, 2, 0);
+two_dots(1);
+endchar;
+
+arabchar(three_dots_down, 0, 5, 2, 3);
+three_dots_low(1);
+endchar;
+
+diachar(bow_dia, 4, 2);
+draw (x.l,y.r)..(.5w, y.l)..z.r;
+endchar;
+
+diachar(e_dia, 4, 2.5);
+draw z.l--(x.r,y.l);
+endchar;
+
+diachar(h_dia, 4, 5);
+x1 = x2 = x3 = .5w;
+y1 = y.r; y2 = y.l; y3 = .2[y2,y1];
+draw z1{z.l-z1}..z2{right}..z3{left};
+endchar;
+
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/nashdig.mf b/language/arabic/arabtex/mfinput/nashdig.mf
new file mode 100644
index 0000000000..5c2b195f6a
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashdig.mf
@@ -0,0 +1,74 @@
+%%%%%%%%%%%%%%%%%%%%% nashdig.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% NASH Font
+% 07.04.92
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi;
+
+%%%%%%%%%%%%%% digits %%%%%%%%%%%%%%%%%
+
+numchar("0");
+x1 + .6pl = x4 - .6pl = 5dx;
+y1 - .6pl = y4 + .6pl = bot y.l + 6dy;
+penpos1(2px,pa); penpos4(2px,pa);
+fill z1l--z1r--z4r--z4l--cycle;
+endchar;
+
+numchar("1");
+x1 = 4dx; x2 = 7dx; y1 - 11dy = bot y2 = bot y.l;
+draw z1..z2{down};
+endchar;
+
+numchar("2");
+x1 = 3dx; x2 = 6dx; x3 = 8dx;
+y3 - 11dy = y1 - 11dy = bot y2 = bot y.l;
+%draw z3..z1{(-4dx,7dy)};
+draw z3{down}..z1; draw z1..z2{down};
+endchar;
+
+numchar("3");
+x1 = 2dx; x2 = 4dx; x3 = 9dx; x4 = 6dx;
+y4 = y3 = y1; y1 - 11dy = bot y2 = bot y.l;
+draw z3{down}..z4; draw z4{down}..z1; draw z1..z2{down};
+endchar;
+
+numchar("4");
+x1 = x2 - .5dx = x3 - dx = 6dx; x4 = x5 = 2dx;
+y1 - 11dy = y2 - 6dy = bot y3 = y4 - 8dy = y5 - 2dy = bot y.l;
+bow(z1, z4, z2); bow(z2, z5, z3);
+endchar;
+
+numchar("5");
+x1 = x2 - 3dx = x3 + 2dx = 5dx;
+y1 - 6dy = y2 = y3; y3 - 4dy = bot y.l - dy;
+draw z1{(dx,-dy)}..z2..z3..z1{(dx,dy)};
+endchar;
+
+numchar("6");
+x1 + 4dx = x2 = x3 - 2dx = 6dx;
+y1 -10dy = y2 - 10dy = bot y3 = bot y.l;
+draw z1{(7dx,-4dy)}..z2; draw z2{down}..z3;
+endchar;
+
+numchar("7");
+x1 + 4dx = x2 = x3 - 4dx = 5dx;
+y1 - 10dy = y3 - 10dy = bot y2 = bot y.l;
+draw z1..z2{down}; draw z3..z2{down};
+endchar;
+
+numchar("8");
+x1 + 4dx = x2 = x3 - 4dx = 5dx;
+y2 - 10dy = bot y1 = bot y3 = bot y.l;
+draw z1..z2{up}; draw z3..z2{up};
+endchar;
+
+numchar("9");
+x1 = x2 + 4dx = x3 + 2dx = x4 - 2dx = 6dx;
+y1 - 7dy = y2 - 7dy = y3 - 11dy = bot y4 = bot y.l;
+draw z1..z2..z3..z1{down}..z4;
+endchar;
+
diff --git a/language/arabic/arabtex/mfinput/nashlig.mf b/language/arabic/arabtex/mfinput/nashlig.mf
new file mode 100644
index 0000000000..60d6a8ba80
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashlig.mf
@@ -0,0 +1,508 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% nashlig.mf %%%%%%%%%%%%%%%%%%%%%%%%
+% NASH Font
+% ligatures
+% 22.10.92
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi;
+
+%%%%%%%%%%%%%% alif after mim %%%%%%%%%%%%%%%%%
+
+arabchar(alif_spec_mim, f_end, 3, 15, 0); % mim-alif
+x1 + dx = x2 + .5dx = x.r; y1 = 13dy; y2 = y.r + .5dy;
+bow(z1, z2, z.r); serif(1);
+endchar;
+
+%%%%%%%%%%%%%% bah_high %%%%%%%%%%%%%%%%%
+
+arabchar(bah_high, f_beg, 5, 10, 0);
+x.m := x.m + 0.5dx;
+x1 - dx = x2 = x.m; y1 = y.l; y2 = y.l + 6dy;
+bow(z2, z1, z.l);
+endchar;
+
+arabchar(bah_high, f_mid, 6, 10, 0);
+x5 - dx = x6 = x.m;
+y6 = good.y (y.l + 6dy); y5 = y.l;
+z4 = .5[z6, z5];
+l_att(4); bow(z6, z5, z.r);
+endchar;
+
+%%%%%%%%%%%%%% bah before nun %%%%%%%%%%%%%%%%%
+
+arabchar(bah_spec, f_beg, 5, 10, 0);
+x4 - 2dx = x.ll; y4 - 2dy = y.ll;
+draw z4{(dx,-2dy)}..z.ll{left};
+r_con(ll); % measure for raising final nun, rah
+endchar;
+
+arabchar(bah_spec, f_mid, 5, 10, 0);
+x6 = x.l + 2dx; y6 = good.y (y.ll + 2dy);
+draw z6..z.ll{left}; draw z6{down}..z.r{right};
+%r_con(ll);
+endchar;
+
+%%%%%%%%%%%%%% bah over yah maqsoura %%%%%%%%%%%%%%%%%
+
+arabchar(bah_spec_yah, f_beg, 5, 10, 7);
+x1 - 2dx = x2 - 3dx = x.l; y1 - 6dy = y2 - dy = y.l;
+draw z1{(4dx,-7dy)}..z2..z.l{(-6dx,-dy)};
+endchar;
+
+arabchar(bah_spec_yah, f_mid, 4, 8, 2);
+z1 = 0.5[z.ll, z.rr]; x2 = x.l; x4 = x.r;
+y2 = y4 = y.r + dy;
+draw z.ll..controls z1 and z2..z4;
+r_con(4);
+endchar;
+
+%%%%%%%%%%%%%% bah over middle mim %%%%%%%%%%%%%%%%%
+
+arabchar(bah_mid_mim, f_beg, 6, 10, 0);
+x1 = x.rr - dx; y1 = y.rr + dy;
+draw z.l{(-dx,dy)}..z1{(dx,-dy)};
+endchar;
+
+arabchar(bah_mid_mim, f_mid, 6, 10, 0);
+x1 = x.rr - 3dx; y1 = y.rr + 2dy;
+draw z.l{(-dx,dy)}..z1..z.rr{right};
+r_con(rr);
+endchar;
+
+%%%%%%%%%%%%%% bah over end mim %%%%%%%%%%%%%%%%%
+
+arabchar(bah_beg_mim, f_mid, 5, 8, 0);
+x1 = x.l + 7dx; y1 = y.r + dy;
+draw z.l{(dx,dy)}..z1{(dx,-6dy)};
+endchar;
+
+arabchar(bah_end_mim, f_mid, 8, 8, 4);
+x1 = x.r - 2dx; y1 = y.r + 2dy;
+draw z.l{(dx,dy)}..z1{(dx,-6dy)}..z.r{right};
+endchar;
+
+%%%%%%%%%%%%%% bah over gim %%%%%%%%%%%%%%%%%
+
+arabchar(bah_spec_gim, f_mid, 12, 8, 7);
+x5 = x4 = x.r - 4dx; y4 - 4dy = y5 = y.r;
+z3 = 0.2[z5,z4]; z1 = 0.9[z1,z3]; z2 = 0.8[z.ll,z4];
+z6 = 0.5[z4, z.rr]; x7 = x5; x8 = x.r; y7 = y8 = y.r + dy;
+draw z.l..controls z1 and z2..z4..controls z6 and z7..z8;
+r_con(8);
+endchar;
+
+arabchar(bah_beg_gim, f_mid, 8, 8, 6);
+x4 - dx = x5 = x.r; y4 - 3dy = y5 - 5dy = y.r;
+z3 = 0.2[z.r,z5]; z1 = 0.9[z.l,z3]; z2 = 0.8[z.ll,z5];
+draw z.l..controls z1 and z2..z5..z4{(dx,-6dy)};
+endchar;
+
+%%%%%%%%%%%%%% bah over hah %%%%%%%%%%%%%%%%%
+
+arabchar(bah_end_hah, f_mid, 6, 8, 5);
+x1 = x.r - 2dx; y1 = y.r + 2dy;
+draw z.l{(dx,dy)}..z1..z.r{right};
+endchar;
+
+arabchar(bah_end_hah, f_beg, 6, 8, 0);
+x1 + 2dx = x.r; y1 = y.r;
+draw z.l{(4dx,7dy)}..z1;
+endchar;
+
+%%%%%%%%%%%%%% hhah-spec-macros %%%%%%%%%%%%%%%%%
+
+def hhah_spec_bar =
+x1 = x2 - 9dx = x.rr;
+y1 = y.rr; y2 = 0.5[y.r, y.rr];
+draw z1{right}..z2{right};
+r_con(rr);
+enddef;
+
+def hhah_spec_beg =
+hhah_spec_bar; draw z2{left}..z.l{left};
+enddef;
+
+def hhah_spec_iso =
+hhah_spec_bar; hhah_bow;
+enddef;
+
+%%%%%%%%%%%%%% gim ligature %%%%%%%%%%%%%%%%%
+
+arabchar(gim_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+x.m := x.r + 2dx;
+one_dot(-3);
+endchar;
+
+arabchar(gim_spec, f_mid, 2, 10, 5);
+hhah_spec_beg;
+x.m := x.r + 4dx;
+one_dot(-4);
+endchar;
+
+%%%%%%%%%%%%%% hhah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(hhah_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+endchar;
+
+arabchar(hhah_spec, f_mid, 2, 10, 5);
+hhah_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% khah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(khah_spec, f_end, 4, 15, 10);
+hhah_spec_iso;
+x.m := x.r;
+one_dot(10);
+endchar;
+
+arabchar(khah_spec, f_mid, 2, 15, 5);
+hhah_spec_beg;
+x.m := x.r;
+one_dot(10);
+endchar;
+
+%%%%%%%%%%%%%% tsah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(tsah_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+x.m := x.r + 3dx;
+three_dots_low(-3);
+endchar;
+
+arabchar(tsah_spec, f_mid, 2, 10, 8);
+hhah_spec_beg;
+x.m := x.r + 4dx;
+three_dots_low(-4);
+endchar;
+
+%%%%%%%%%%%%%% closed hhah %%%%%%%%%%%%%%%%%
+
+arabchar(gim_close, f_beg, 12, 9, 0); % closed hhah
+%arabchar(gim_close, f_beg, 12, 8, 0); % closed hhah
+x1 = x2 - 9dx = x.l + 2dx; y1 - 4dy = y2 - 2dy = y.r;
+x3 = x7 = x1 + 7dx; y3 - 2dy = y7 = y.r;
+x4 = x1 - 2dx; y4 = y.l + 2dy;
+draw z4..z1{(8dx,3dy)}..z2{right}; draw z2{left}..z.l{left};
+endchar;
+
+%arabchar(gim_close, f_mid, 13, 8, 1); % closed hhah
+%hhah_mid; draw z3{down}..z.r{right};
+%endchar;
+
+%%%%%%%%%%%%%% sin_spec-macros %%%%%%%%%%%%%%%%%
+
+def sin_spec_wave =
+z5 - z.l = z3 - z2;
+x3 - x2 = 2(x3 - x5) = 2dx; x.m := x2;
+y5 = y2 - 2dy = y.l;
+draw z3..z5..z2; draw z2{down}..z.l{left};
+enddef;
+
+def sin_spec_beg =
+sin_spec_wave;
+enddef;
+
+def sin_spec_mid =
+sin_spec_wave; r_att(3);
+enddef;
+
+def sin_spec_mid =
+sin_spec_wave; draw z3{down}..z.r{right};
+enddef;
+
+%%%%%%%%%%%%%% short sin %%%%%%%%%%%%%%%%%
+
+arabchar(sin_spec, f_mid, 6, 6, 0);
+sin_spec_mid;
+endchar;
+
+arabchar(sin_spec, f_beg, 4, 6, 0);
+sin_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% short shin %%%%%%%%%%%%%%%%%
+
+arabchar(shin_spec, f_mid, 6, 15, 0);
+sin_spec_mid; three_dots(8);
+endchar;
+
+arabchar(shin_spec, f_beg, 4, 15, 0);
+sin_spec_beg; three_dots(8);
+endchar;
+
+%%%%%%%%%%%%%% sad_spec-macros %%%%%%%%%%%%%%%%%
+
+def sad_spec_beg =
+x.m := x.m - dx;
+x1 = x2 - dx = x3 - 9dx = x.l;
+y1 + dy = y2 = y3 - 3dy = y.l;
+x8 = x2 + 3.5dx; y8 = y2 + 0.5dy;
+draw z1{(5dx,6dy)}..z3{(4dx,-7dy)}..tension 2..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% short sad %%%%%%%%%%%%%%%%%
+
+arabchar(sad_spec, f_mid, 10, 10, 0);
+sad_spec_beg; draw z.r{left}..z8;
+endchar;
+
+arabchar(sad_spec, f_beg, 10, 10, 0);
+sad_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% short dad %%%%%%%%%%%%%%%%%
+
+arabchar(dad_spec, f_mid, 10, 10, 0);
+sad_spec_beg; draw z.r{left}..z8;
+one_dot(8);
+endchar;
+
+arabchar(dad_spec, f_beg, 10, 10, 0);
+sad_spec_beg; one_dot(8);
+endchar;
+
+%%%%%%%%%%%%%% kaf_spec-macros %%%%%%%%%%%%%%%%%
+
+def kaf_spec_beg =
+x1 = x.l + 9dx; x2 = x.l - 3.5dx; x4 = x.l + 8dx;
+%x1 = x.r - dx; x2 = x.l - 3.5dx; x4 = x.r - 2dx;
+%y4 = y.r; y1 = 14dy; y2 = 9dy; z3 = .4[z2, z4];
+y4 = y.l = y1 - 13dy = y2 - 8dy; z3 = .4[z2, z4];
+bow (z1, z2, z3);
+draw z3{z3 - z2}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% short kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_spec, f_mid, 10, 15, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+endchar;
+
+arabchar(kaf_spec, f_beg, 7, 15, 0);
+%arabchar(kaf_spec, f_beg, 10, 15, 0);
+kaf_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% short gaf %%%%%%%%%%%%%%%%%
+
+arabchar(gaf_spec, f_mid, 10, 16, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+gaf_serif;
+endchar;
+
+arabchar(gaf_spec, f_beg, 7, 16, 0);
+kaf_spec_beg;
+gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% short kaf with loop %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_p_spec, f_mid, 10, 15, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_spec, f_beg, 7, 15, 0);
+kaf_spec_beg;
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% lam_alif %%%%%%%%%%%%%%%%%
+
+def lam_alif_serif(suffix $) =
+x.$sa = x.$sb - 2dx = x.$;
+y.$sa + dy = y.$sb + 3dy = y.$;
+draw z.$--z.$sa--z.$sb;
+enddef;
+
+arabchar(lam_alif_end, 0, 12, 15, 0);
+x1 + 3dx = x2 + 2dx = x.r;
+x3 + 8dx = x4 = x5 + 8dx = x6 + 2dx = x1;
+y1 = 12dy; y2 = y3 + 2dy = y.r; y4 = y6 + dy = 4dy; y5 = 11dy;
+z7 = 0.7[z1,z2]; draw z1---z7..z.r{right};
+bow(z1, z4, z3);
+draw z5{z4 - z5}..z6; lam_alif_serif(5);
+endchar;
+
+arabchar(lam_alif_iso, 0, 11, 15, 0);
+x1 + 2dx = x4 + 2dx = x3 + 6dx = x2 = x5 + 10dx = x.r;
+y1 = 13dy; y4 = 3dy; y3 = y2 = y.r; y5 = 12dy;
+bow(z1, z4, z3);
+bow(z5, z2, z3);
+serif(1); lam_alif_serif(5);
+endchar;
+
+%%%%%%%%%%%%%% lam in 'allah' %%%%%%%%%%%%%%%%%
+
+arabchar(lam_spec_low, f_mid, 5, 11, 0);
+x1 + .5dx = x2 - .5dx = x.m; y1 = 9dy; y2 = y.r;
+bow (z1, z2, z.r); bow (z1, z2, z.l);
+endchar;
+
+%%%%%%%%%%%%%% lam over yah %%%%%%%%%%%%%%%%%
+
+arabchar(lam_spec_yah, f_mid, 7, 15, 7);
+x4 = x.r; x1 = x2 - dx = x.r - 3dx;
+y1 - 11dy = y2 = y4 = y.r + 2dy;
+z3 = .2[z2, z1];
+bow (z1, z3, z.l); draw z1---z3..z4{right};
+r_con (4);
+endchar;
+
+arabchar(lam_on_gim, f_mid, 6, 10, 5);
+x1 = x2 - dx = x.l + 4dx;
+y1 = 9dy; y2 = y.l; z3 = 0.7[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+arabchar(lam_long, f_beg, 6, 15, 3);
+x1 = x2 - dx = x.l + 4dx;
+y1 = 12dy; y2 = y.l; z3 = 0.8[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+%%%%%%%%%%%%%% lam over mim and hah %%%%%%%%%%%%%%%%%
+
+arabchar(lam_spec_mim, f_beg, 3, 15, 0);
+x1 + dx = x2 + .5dx = x.l; y1 = 13dy; y2 = y.l + .5dy;
+bow(z1, z2, z.l); serif(1);
+endchar;
+
+arabchar(lam_spec_hah, f_beg, 3, 10, 0);
+x1 + dx = x2 + .5dx = x.l; y1 - 8dy = y2 - .5dy = y.l;
+bow(z1, z2, z.l); serif(1);
+endchar;
+
+%%%%%%%%%%%%%% mim ligatures %%%%%%%%%%%%%%%%%
+
+arabchar(mim_spec, f_end, 5, 5, 13); % final mim connected from above
+x2 + 6dx = x4 + 4dx = x5 + 3.5dx = x6 + 4.5dx = x1;
+y2 + dy = y4 + 11dy = y5 - 2.5dy = y6 - 1.5dy = y1;
+z5 = z.r; bow(z4,z2,z1); draw z5--z1;
+endchar;
+
+arabchar(mim_spec, f_mid, 4, 10, 0); % medial mim after lam
+x2 = x.r = x1 - 2dx; y1 = y.r = y2 - dy;
+draw z.l{right}..z2..z1;
+r_con(2);
+endchar;
+
+arabchar(mim_spec, f_beg, 8, 10, 5); % mim over gim
+x2 = x1 = x3 + 2dx = x.l + 7dx;
+y2 = y1 - 2dy = y3 - dy = y.l + 2dy;
+draw z3..z1..z2{left}..z.l;
+endchar;
+
+arabchar(mim_spec_mim, f_beg, 6, 10, 0); % mim over mim
+x2 = x1 = x3 + 2dx = x.l + 3dx;
+y2 = y1 - 2dy = y3 - dy = y.l + 5dy;
+draw z3..z1..z2{left}..z.l{(dx,-dy)};
+endchar;
+
+arabchar(mim_spec_high, f_mid, 5, 10, 0); % mim after gim etc
+x1 = x2 - dx = x3 + dx = x.rr;
+y1 = y.rr; y2 = y3 - 3dy = y.l;
+%x1 = x2 - dx = x3 + 2dx = x.rr;
+%y1 = y.rr; y2 = y3 - 2dy = y.l;
+draw z3..tension 2..z2..tension 2..z1..z3..z.l{left};
+%draw z3..tension 2..z2..tension 1.5..z1..z3..z.l{left};
+r_con(1);
+endchar;
+
+arabchar(mim_spec_long, f_mid, 9, 10, 0); % long mim after lam
+x2 = x.r = x1 - 2dx; y1 = y.r = y2 - dy;
+draw z.l{right}..z2..z1;
+r_con(2);
+endchar;
+
+arabchar(mim_spec_alif, f_mid, 8, 8, 3); % mim before alif
+x1 = x2 = x.l + 5dx; y1 + 3dy = y2 - 3dy = y.r;
+z3 = .5[z2, z.r];
+draw z.l{(4dx,-7dy)}..z1{(7dx,-4dy)};
+draw z1{(-7dx,4dy)}..z2{right}..z3{(dx,-6dy)}..z.r{right};
+endchar;
+
+arabchar(mim_lam_gim, f_mid, 6, 10, 2); % lam_mim over gim
+x1 - 2dx = x2 = x.r; y1 + dy = y2 = y.r + 2dy;
+draw z.l{(dx,dy)}..z2..z1;
+r_con(2);
+endchar;
+
+%%%%%%%%%%%%%% hah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(hah_spec, f_end, 5, 8, 0);
+x1 + 2dx = x.r; y1 - 2dy = y.r;
+draw z.r{left}..z1..z.l{(-dx,-dy)};
+endchar;
+
+arabchar(hah_spec, f_mid, 6, 5, 6); % sharp medial hah
+x1 = x2 = x3 + 1.5dx = x.r - 2dx;
+y1 + 6dy = y2 - 2dy = y.r; y3 = y1 + 2dy;
+draw z1{up}..z.r{(dx,dy)};
+bow (z1, z3, z2); l_att(2);
+endchar;
+
+arabchar(hah_spec, f_beg, 5, 8, 2);
+x1 = x.r; x2 - 2dx = x.l;
+y1 = y2 = y.r + 2dy;
+draw z1..z2{up}; draw z2{down}..z.l{left};
+endchar;
+
+arabchar(hah_spec_lam, f_mid, 5, 15, 0); % hah after lam
+x2 = x3 + 1.5dx = x4 - 1.5dx = x.l + 3dx;
+x6 + dx = x5 - 3dx = x.l + 8dx;
+y2 = 2dy; y3 = y4 = 4dy; y6 = dy;
+draw z.rr{curl 0}..tension 1.5..z6..tension 2..z2..z3..z4..z2..z.l{left};
+r_con(rr);
+endchar;
+
+%%%%%%%%%%%%%% yah after sin %%%%%%%%%%%%%%%%%
+
+arabchar(yah_spec, f_end, 9, 5, 7); % final yah connected from above
+x.m := x.m + dx; x2 = x.r + 4dx;
+x3 = x.m; lft x4 = lft x5 + 1.5dx - pl = x.l;
+y2 - dy = y4 = y5 - 3dy = y3 + 3dy = -3dy;
+draw z.r{(8dx,-3dy)}..tension 1.5
+..z2{down}..tension 1.5..z3{left}..z4{up}..z5;
+endchar;
+
+arabchar(yah_h_spec, f_end, 11, 5, 7); % final yah with hook
+x.m := x.m + 2dx; x2 = x.r + 4dx;
+x3 = x.m; lft x4 = x5 - dx = x.r - 9dx;
+y2 - dy = y4 = y5 - 3dy = y3 + 3dy = -3dy;
+draw z.r{(8dx,-3dy)}..tension 1.5
+..z2{down}..tension 1.5..z3{left}..z4{up}..z5;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+%%%%%%%%%%%%%% ties %%%%%%%%%%%%%%%%%
+
+%arabchar(mm_to_b, f_mid, 6, 5, 6);
+%x1 = x.rr - 3dx; y1 = y.r + 2dy;
+%x2 = x.l; y.l - y2 = y.rr - y.r;
+%draw z2{(-dx,dy)}..z1..z.r{right};
+%r_con(rr);
+%endchar;
+
+arabchar(er_to_s, f_mid, 5, 5, 0);
+x1 + dx = x.l; x5 = x.r - 2dx;
+y1 - .5dy = y5 - 2dy = y.r;
+draw z1--z5; draw z5..z.r{right};
+endchar;
+
+arabchar(g_to_mb, f_mid, 8, 8, 6);
+z3 = 0.2[z.r,z.rr]; z1 = 0.9[z1,z3]; z2 = 0.8[z.ll,z.rr];
+draw z.l..controls z1 and z2..z.rr;
+endchar;
+
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%
+
+endinput;
+
diff --git a/language/arabic/arabtex/mfinput/nashspec.mf b/language/arabic/arabtex/mfinput/nashspec.mf
new file mode 100644
index 0000000000..e50b0f9a16
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/nashspec.mf
@@ -0,0 +1,206 @@
+%%%%%%%%%%%%%%%%%%%%%%% nashspec.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% NASH Font
+% special characters
+% 26.02.92
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown nashbase: input nashbase fi;
+
+%%%%%%%%%%%%%% very special characters %%%%%%%%%%%%%%%%%
+
+arabchar(space_spec, f_beg, 5, 8, 6);
+endchar;
+
+arabchar(space_spec, f_mid, 0, 8, 6);
+endchar;
+
+arabchar(tatwil, f_iso, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_beg, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_mid, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_end, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(block, f_iso, 10, 10, 0); % block isoliert
+x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_beg, 10, 10, 0); % block initial
+x1 = x2 = x.l + dx; x3 = x4 = x.m;
+%x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_mid, 10, 10, 0); % block medial
+x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 5dy; y2 = y3 = 0;
+%y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_end, 10, 10, 0); % block final
+x1 = x2 = x.m; x3 = x4 = x.r - dx;
+%x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+%arabchar(0, 0, 10, 15, 0); % block in position 0
+%x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+%y1 = y4 = 10dy; y2 = y3 = 0;
+%fill z1--z2--z3--z4--cycle;
+%endchar;
+
+%%%%%%%%%%%%%% special characters %%%%%%%%%%%%%%%%%
+
+arabchar(".", 0, 2, 2, -1.5);
+x1 = x.m; y1 = dy;
+put_dot(1);
+endchar;
+
+arabchar(",", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = 6dy; y2 = dy;
+%x1 = x2 = x.m; y1 = 10dy; y2 = 5dy;
+draw z1{(-dx,-dy)}..z2{right};
+endchar;
+
+arabchar(";", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = 10dy; y2 = 5dy;
+draw z1{(-dx,-dy)}..z2{right};
+one_dot(1);
+endchar;
+
+arabchar(":", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = dy; y2 = 6dy;
+put_dot(1); put_dot(2);
+endchar;
+
+arabchar("!", 0, 4, 15, 0);
+x1 = x2 = x3 = x.m; y1 = dy; y2 = 6dy; y3 = 13dy;
+put_dot(1); draw z3--z2;
+endchar;
+
+arabchar("?", 0, 7, 15, 0);
+x1 - 2dx = x3 + 2dx = x2 = x4 = x.m;
+y1 = y3 = 10dy; y2 = 13dy; y4 = 4dy;
+draw z1..z2{left}..z3..z4{(-4dx,-11dy)};
+one_dot(1);
+endchar;
+
+arabchar("$", 0, 6, 10, 5);
+x1 = x2 = x.m; x3 = x5 = x.m + 2dx; x4 = x6 = x.m - 2dx;
+y1 = 8dy; y2 = -6dy; y3 = y4 = 3dy; y5 = y6 = -dy;
+draw z1--z2; draw z3..z4..z5..z6;
+endchar;
+
+arabchar("*", 0, 8, 10, 0);
+x1 = x2 = x.m; x3 = x5 = x.m + 3dx; x4 = x6 = x.m - 3dx;
+y1 = 7dy; y3 = y6 = 5dy; y4 = y5 = dy; y2 = -dy;
+draw z1--z2; draw z3--z4; draw z5--z6;
+endchar;
+
+arabchar("%", 0, 14, 10, 5);
+x1 = x5 = x6 = x.m + 4dx;
+x2 = x3 = x4 = x.m - 4dx;
+y1 = y3 = 8dy; y4 = 3dy; y5 = dy; y2 = y6 = -4dy;
+draw z3..z4..cycle; draw z5..z6..cycle;
+pickup dia_pen; draw z1--z2;
+endchar;
+
+arabchar("/", 0, 10, 10, 5);
+%arabchar("/", 0, 10, 15, 7);
+pickup dia_pen;
+x1 + 4dx = x2 - 4dx = x.m;
+y2 = 9dy; y1 = -6dy;
+%y2 = 14dy; y1 = -6dy;
+draw z1--z2;
+endchar;
+
+arabchar(rquotes, 0, 8, 10, 5); % ``
+x1 = x3 = x2 + 2dx = x.m - dx;
+x4 = x6 = x5 + 2dx = x.m + 3dx;
+y1 = y4 = 5dy; y2 = y5 = dy; y3 = y6 = -3dy;
+draw z1..z2..z3; draw z4..z5..z6;
+endchar;
+
+arabchar(lquotes, 0, 8, 10, 5); % ''
+x1 = x3 = x2 - 2dx = x.m + dx;
+x4 = x6 = x5 - 2dx = x.m - 3dx;
+y1 = y4 = 5dy; y2 = y5 = dy; y3 = y6 = -3dy;
+draw z1..z2..z3; draw z4..z5..z6;
+endchar;
+
+arabchar("=", 0, 16, 10, 0);
+x5 = x7 = x.m - 7dx; x6 = x8 = x.m + 7dx;
+y5 = y6 = 3dy; y7 = y8 = -dy;
+draw z5--z6; draw z7--z8;
+endchar;
+
+arabchar("+", 0, 10, 10, 0);
+x1 = x2 = x3 + 4dx = x4 - 4dx = x.m;
+y1 = 5dy; y2 = -3dy; y3 = y4 = dy;
+draw z1--z2; draw z3--z4;
+endchar;
+
+arabchar("-", 0, 8, 10, 0);
+x1 + 3dx = x2 - 3dx = x.m;
+y1 = y2 = dy;
+%y1 = y2 = 4dy;
+draw z1--z2;
+endchar;
+
+arabchar("#", 0, 16, 10, 5);
+x1 = x4 = x3 - 4dx = x2 + 4dx = x.m;
+x5 = x7 = x.m - 7dx; x6 = x8 = x.m + 7dx;
+y1 = y3 = 7dy; y2 = y4 = -7dy;
+y5 = y6 = 2dy; y7 = y8 = -2dy;
+draw z5--z6; draw z7--z8;
+pickup dia_pen;
+draw z1--z2; draw z3--z4;
+endchar;
+
+arabchar("(", 0, 8, 10, 5);
+x1 = x2 = x.m + 3dx; x3 = x.m - 3dx;
+top y1 = 10dy; bot y2 = -7dy; y3 = .5[y1,y2];
+%top y1 = 15dy; bot y2 = -7dy; y3 = 4dy;
+draw z1..z3..z2;
+endchar;
+
+arabchar(")", 0, 8, 10, 5);
+x1 = x2 = x.m - 3dx; x3 = x.m + 3dx;
+top y1 = 10dy; bot y2 = -7dy; y3 = .5[y1,y2];
+draw z1..z3..z2;
+endchar;
+
+arabchar("[", 0, 6, 10, 5);
+x1 = x2 = x.m + 2dx; x3 = x4 = x.m - 2dx;
+y1 = y3 = 9dy; y2 = y4 = -6dy;
+%y1 = y3 = 14dy; y2 = y4 = -6dy;
+draw z1--z3--z4--z2;
+endchar;
+
+arabchar("]", 0, 6, 10, 5);
+x1 = x2 = x.m + 2dx; x3 = x4 = x.m - 2dx;
+y1 = y3 = 9dy; y2 = y4 = -6dy;
+draw z3--z1--z2--z4;
+endchar;
+
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/xarbsymb.dat b/language/arabic/arabtex/mfinput/xarbsymb.dat
new file mode 100644
index 0000000000..4e8f3e1bab
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xarbsymb.dat
@@ -0,0 +1,209 @@
+% code assignments for arabic font in ArabTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+% 15.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\a@ident {xarbsymb.sty} {3.07 symbolic output encoding } {15.07.97}
+
+nashcode 1 file has been read
+
+%%%%%%%%%%%%%%%%%% connection forms %%%%%%%%%%%%%%%%%%
+
+f_iso 0 isolated
+f_end 1 final
+f_mid 2 medial
+f_beg 3 initial
+
+%%%%%%%%%%%%%%%%%% diacritical marks %%%%%%%%%%%%%%%%%
+
+ttah_dia 010 for urdu
+one_dot_up 011
+two_dots_down 012
+fatha 013
+kasra 013
+damma 014
+hamza 015
+madda 016
+shadda 017
+two_dots_up 020
+three_dots_up 021
+three_dots_down 022
+fathatan 023
+kasratan 023
+dammatan 024
+sukun 025
+wasla 026
+quran_alif 027
+bow_dia 030 for kurdish
+e_dia 040 for pashto
+zwarakay 040 for pashto
+one_dot_down 056 period
+hamz_s 143 for kashmiri 0674
+bars 144 for 06fd, 06fe
+roof 145 for 06c9
+h_dia 146 for urdu
+ammad 146 for pashto
+
+f_iv 122 farsi 4
+f_v 123 farsi 5
+f_vi 124 farsi 6
+
+%%%%%%%%%%%%%%%%%% letters %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+alif 100 100,101
+alif_iso alif 100
+alif_end 101 101
+
+lam_alif 102 102,103
+lam_alif_iso lam_alif 102
+lam_alif_end 103 103
+
+bah_s 110 110-113 bah without dots
+bah bah_s 110
+bah_p 114 114-117 bah with loop
+
+rah 120 120,121
+%% zay 122 122,123
+%% zhah 124 124,125
+rah_p 126 126,127 rah with loop
+
+hamza_iso 132 132
+hamzc hamza_iso 132
+
+dal 130 130,131
+dal_p 136 136,137 dal with loop
+
+gim_close 144 147 closed gim
+%% gim 140 140-143
+hhah 150 150-153
+rah_s 156 156,157 rah with two dots
+khah 160 160-163
+%% tsah 170 170-173
+rah_k 166 166,167 kurdish rah
+
+sin 200 200-203
+sin_spec 202 204,205 short form
+%% shin_spec 204 206,207 short form
+qaf_s 206 206,207 qaf without dots
+%% shin 210 210-213
+%% sin_p 214 214,215 sin with two dots
+
+sad 220 220-223
+sad_spec 222 224,225 short form
+%% dad_spec 224 226,227 short form
+%% dad 230 230-233
+
+gaf_p_spec 224 226,227 short form of gaf with loop
+gaf_p_s 230 230-233 gaf with loop
+kaf_w 234 234-237 wide kaf
+
+ttah 240 240-243
+
+%% zzah 244 244-247
+waw_r 244 244,245 waw with ring
+waw_b 246 246,247 waw with bar
+
+ain 250 250-253
+fah_s 254 254-257 fah family
+
+kaf_p_s 260 260-263 kaf with loop
+gaf_p kaf_p_s 260
+kaf_p 264 264,265 kaf with loop and mark
+kaf_p_spec 264 266,267 short form of kaf with loop
+kaf_s 270 270-273 kaf family
+kaf 274 274,275
+kaf_spec 274 276,277 short form
+gaf_s 300 300-303 gaf family
+gaf 304 304,305
+gaf_spec 304 306,307 short form
+
+lam 310 310-313
+mim 320 320-323
+mim_sind 335 335 Sindhi final mim 06fe
+
+nun 340 340,341
+nun_p 342 342,343 nun with loop
+
+hah 350 350-354
+hah_urd 353 353,354 two-eyed hah,
+ % see hah and hah_spec_lam
+hah_spec_lam 352 354 medial hah after initial lam
+hah_spec 354 355-357 final short hah;
+h_s hah_spec 354
+ % also medial hah after sin
+
+waw 360 360,361
+%% fah 362 362,363
+qaf 364 364,365
+%% vah 366 366,367
+
+yah 370 370,371
+yah_spec 371 372 ligature for final yah
+yah_h 373 373,374 yah with hook
+yah_h_spec 374 375 ligature for yah with hook
+yah_p 376 376,377 long yah
+yah_p_s 366 366,367 long yah with loop
+
+%%%%%%%%%%%%%%%%%% special characters %%%%%%%%%%%%%%%%%%%
+
+block 000 000-003
+tatwil 004 004-007
+
+rquotes 042 042
+period 056 056
+lquotes 134 134
+
+space_spec 044 046,047 carrier for dots
+smspc space_spec 044
+skip 045 047 small space, initial (!)
+no_break 046 046 no space, breaks ligatures
+break 047 047 small space, medial
+
+%%%%%%%%%%%%%%%%%% ligatures %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+bah_spec_gim 027 031 medial bah before gim
+bah_beg_gim 030 032 initial (!) bah before gim
+g_to_mb 031 033 medial bah to gim
+bah_high 032 034,035 before sin, sad
+bah_spec 034 036,037 bah before final rah, nun
+lam_spec_low 072 074 medial lam for 'allah'
+lam_l lam_spec_low 072
+alif_spec_mim 075 076 final alif after mim
+bah_end_hah 102 104,105 bah before final hah
+bah_spec_yah 104 106,107 bah before gim, with tie;
+ % also bah before yah
+%% gim_spec 143 144,145 from above
+hhah_spec 153 154,155 from above
+khah_spec 163 164,165 from above
+%% tsah_spec 173 174,175 from above
+lam_gim 311 314 lam on gim
+lam_on_gim 312 314 initial (!) lam before gim
+lam_long 312 315 initial lam before yah
+lam_spec_yah 314 316 before final yah ?
+lam_spec_mim 314 317 initial lam before medial mim
+mim_spec_high 322 324 from above
+mim_spec 324 325-327 final; medial after lam;
+ % also before gim
+mim_spec_mim 325 330 initial mim before mim
+mim_lam_gim 327 331 medial mim between lam and gim
+lam_spec_hah 330 333 initial lam before medial hah
+mim_spec_long 332 334 medial mim after lam, vocalized
+mm_to_b 333 335 bah to medial mim
+bah_mid_mim 334 336,337 bah before medial mim
+mim_spec_alif 342 344 medial mim before alif
+er_to_s 343 345 sin to final rah
+bah_end_mim 344 346 medial bah before final mim
+bah_beg_mim 345 347 initial (!) bah before final mim
+
+%%%%%%%%%%%%%%%%%% ties %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+g_to_s bah_spec_gim sin to gim
+em_to_s bah_end_mim sin to final mim
+mh_to_s bah_end_hah sin to medial hah or final mim
+g_to_bb bah_beg_gim initial bah to gim
+em_to_bb bah_beg_mim initial bah to final mim
+
+%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/language/arabic/arabtex/mfinput/xarbsymb.mf b/language/arabic/arabtex/mfinput/xarbsymb.mf
new file mode 100644
index 0000000000..031b7097ce
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xarbsymb.mf
@@ -0,0 +1,213 @@
+%%%%%%%%%%%%%%%%%%%% xarbsymb.mf %%%%%%%%%%%%%%%%%%%%
+% 15.7.1998 16:19:14
+% code assignments for arabic font in ArabTeX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+% 15.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\a@ident {xarbsymb.sty} {3.07 symbolic output encoding } {15.07.97}
+
+nashcode := oct "1"; % file has been read
+
+%%%%%%%%%%%%%%%%%% connection forms %%%%%%%%%%%%%%%%%%
+
+f_iso := oct "0"; % isolated
+f_end := oct "1"; % final
+f_mid := oct "2"; % medial
+f_beg := oct "3"; % initial
+
+%%%%%%%%%%%%%%%%%% diacritical marks %%%%%%%%%%%%%%%%%
+
+ttah_dia := oct "010"; % for urdu
+one_dot_up := oct "011"; %
+two_dots_down := oct "012"; %
+fatha := oct "013"; %
+kasra := oct "013"; %
+damma := oct "014"; %
+hamza := oct "015"; %
+madda := oct "016"; %
+shadda := oct "017"; %
+two_dots_up := oct "020"; %
+three_dots_up := oct "021"; %
+three_dots_down := oct "022"; %
+fathatan := oct "023"; %
+kasratan := oct "023"; %
+dammatan := oct "024"; %
+sukun := oct "025"; %
+wasla := oct "026"; %
+quran_alif := oct "027"; %
+bow_dia := oct "030"; % for kurdish
+e_dia := oct "040"; % for pashto
+zwarakay := oct "040"; % for pashto
+one_dot_down := oct "056"; % period
+hamz_s := oct "143"; % for kashmiri 0674
+bars := oct "144"; % for 06fd, 06fe
+roof := oct "145"; % for 06c9
+h_dia := oct "146"; % for urdu
+ammad := oct "146"; % for pashto
+
+f_iv := oct "122"; % farsi 4
+f_v := oct "123"; % farsi 5
+f_vi := oct "124"; % farsi 6
+
+%%%%%%%%%%%%%%%%%% letters %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+alif := oct "100"; % 100,101
+alif_iso := alif; % 100
+alif_end := oct "101"; % 101
+
+lam_alif := oct "102"; % 102,103
+lam_alif_iso := lam_alif; % 102
+lam_alif_end := oct "103"; % 103
+
+bah_s := oct "110"; % 110-113 bah without dots
+bah := bah_s; % 110
+bah_p := oct "114"; % 114-117 bah with loop
+
+rah := oct "120"; % 120,121
+%% zay 122 122,123
+%% zhah 124 124,125
+rah_p := oct "126"; % 126,127 rah with loop
+
+hamza_iso := oct "132"; % 132
+hamzc := hamza_iso; % 132
+
+dal := oct "130"; % 130,131
+dal_p := oct "136"; % 136,137 dal with loop
+
+gim_close := oct "144"; % 147 closed gim
+%% gim 140 140-143
+hhah := oct "150"; % 150-153
+rah_s := oct "156"; % 156,157 rah with two dots
+khah := oct "160"; % 160-163
+%% tsah 170 170-173
+rah_k := oct "166"; % 166,167 kurdish rah
+
+sin := oct "200"; % 200-203
+sin_spec := oct "202"; % 204,205 short form
+%% shin_spec 204 206,207 short form
+qaf_s := oct "206"; % 206,207 qaf without dots
+%% shin 210 210-213
+%% sin_p 214 214,215 sin with two dots
+
+sad := oct "220"; % 220-223
+sad_spec := oct "222"; % 224,225 short form
+%% dad_spec 224 226,227 short form
+%% dad 230 230-233
+
+gaf_p_spec := oct "224"; % 226,227 short form of gaf with loop
+gaf_p_s := oct "230"; % 230-233 gaf with loop
+kaf_w := oct "234"; % 234-237 wide kaf
+
+ttah := oct "240"; % 240-243
+
+%% zzah 244 244-247
+waw_r := oct "244"; % 244,245 waw with ring
+waw_b := oct "246"; % 246,247 waw with bar
+
+ain := oct "250"; % 250-253
+fah_s := oct "254"; % 254-257 fah family
+
+kaf_p_s := oct "260"; % 260-263 kaf with loop
+gaf_p := kaf_p_s; % 260
+kaf_p := oct "264"; % 264,265 kaf with loop and mark
+kaf_p_spec := oct "264"; % 266,267 short form of kaf with loop
+kaf_s := oct "270"; % 270-273 kaf family
+kaf := oct "274"; % 274,275
+kaf_spec := oct "274"; % 276,277 short form
+gaf_s := oct "300"; % 300-303 gaf family
+gaf := oct "304"; % 304,305
+gaf_spec := oct "304"; % 306,307 short form
+
+lam := oct "310"; % 310-313
+mim := oct "320"; % 320-323
+mim_sind := oct "335"; % 335 Sindhi final mim 06fe
+
+nun := oct "340"; % 340,341
+nun_p := oct "342"; % 342,343 nun with loop
+
+hah := oct "350"; % 350-354
+hah_urd := oct "353"; % 353,354 two-eyed hah,
+ % see hah and hah_spec_lam
+hah_spec_lam := oct "352"; % 354 medial hah after initial lam
+hah_spec := oct "354"; % 355-357 final short hah;
+h_s := hah_spec; % 354
+ % also medial hah after sin
+
+waw := oct "360"; % 360,361
+%% fah 362 362,363
+qaf := oct "364"; % 364,365
+%% vah 366 366,367
+
+yah := oct "370"; % 370,371
+yah_spec := oct "371"; % 372 ligature for final yah
+yah_h := oct "373"; % 373,374 yah with hook
+yah_h_spec := oct "374"; % 375 ligature for yah with hook
+yah_p := oct "376"; % 376,377 long yah
+yah_p_s := oct "366"; % 366,367 long yah with loop
+
+%%%%%%%%%%%%%%%%%% special characters %%%%%%%%%%%%%%%%%%%
+
+block := oct "000"; % 000-003
+tatwil := oct "004"; % 004-007
+
+rquotes := oct "042"; % 042
+period := oct "056"; % 056
+lquotes := oct "134"; % 134
+
+space_spec := oct "044"; % 046,047 carrier for dots
+smspc := space_spec; % 044
+skip := oct "045"; % 047 small space, initial (!)
+no_break := oct "046"; % 046 no space, breaks ligatures
+break := oct "047"; % 047 small space, medial
+
+%%%%%%%%%%%%%%%%%% ligatures %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+bah_spec_gim := oct "027"; % 031 medial bah before gim
+bah_beg_gim := oct "030"; % 032 initial (!) bah before gim
+g_to_mb := oct "031"; % 033 medial bah to gim
+bah_high := oct "032"; % 034,035 before sin, sad
+bah_spec := oct "034"; % 036,037 bah before final rah, nun
+lam_spec_low := oct "072"; % 074 medial lam for 'allah'
+lam_l := lam_spec_low; % 072
+alif_spec_mim := oct "075"; % 076 final alif after mim
+bah_end_hah := oct "102"; % 104,105 bah before final hah
+bah_spec_yah := oct "104"; % 106,107 bah before gim, with tie;
+ % also bah before yah
+%% gim_spec 143 144,145 from above
+hhah_spec := oct "153"; % 154,155 from above
+khah_spec := oct "163"; % 164,165 from above
+%% tsah_spec 173 174,175 from above
+lam_gim := oct "311"; % 314 lam on gim
+lam_on_gim := oct "312"; % 314 initial (!) lam before gim
+lam_long := oct "312"; % 315 initial lam before yah
+lam_spec_yah := oct "314"; % 316 before final yah ?
+lam_spec_mim := oct "314"; % 317 initial lam before medial mim
+mim_spec_high := oct "322"; % 324 from above
+mim_spec := oct "324"; % 325-327 final; medial after lam;
+ % also before gim
+mim_spec_mim := oct "325"; % 330 initial mim before mim
+mim_lam_gim := oct "327"; % 331 medial mim between lam and gim
+lam_spec_hah := oct "330"; % 333 initial lam before medial hah
+mim_spec_long := oct "332"; % 334 medial mim after lam, vocalized
+mm_to_b := oct "333"; % 335 bah to medial mim
+bah_mid_mim := oct "334"; % 336,337 bah before medial mim
+mim_spec_alif := oct "342"; % 344 medial mim before alif
+er_to_s := oct "343"; % 345 sin to final rah
+bah_end_mim := oct "344"; % 346 medial bah before final mim
+bah_beg_mim := oct "345"; % 347 initial (!) bah before final mim
+
+%%%%%%%%%%%%%%%%%% ties %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+g_to_s := bah_spec_gim; % sin to gim
+em_to_s := bah_end_mim; % sin to final mim
+mh_to_s := bah_end_hah; % sin to medial hah or final mim
+g_to_bb := bah_beg_gim; % initial bah to gim
+em_to_bb := bah_beg_mim; % initial bah to final mim
+
+%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+endinput;
diff --git a/language/arabic/arabtex/mfinput/xnsh.mf b/language/arabic/arabtex/mfinput/xnsh.mf
new file mode 100644
index 0000000000..825b931cad
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnsh.mf
@@ -0,0 +1,43 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% xnsh.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Extended ArabTeX NASKH Font
+% collect all characters
+% 31.03.98
+% 16.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+% 16.07.1998
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% abort if cm base is loaded
+if unknown xnshbase: endinput fi;
+
+mode_setup;
+
+% font parameters
+em# := fs#;
+ex# := 8dy#;
+font_slant 0;
+font_normal_space .3em#;
+font_normal_stretch .5em#;
+font_normal_shrink 0;
+font_x_height ex#;
+font_quad em#;
+font_extra_space 0;
+font_coding_scheme "ArabTeX Naskh extended";
+
+font_setup;
+
+input xnshchar;
+
+input xnshlig;
+
+input xnshdia;
+
+input xnshdig;
+
+input xnshspec;
+
+endinput;
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
diff --git a/language/arabic/arabtex/mfinput/xnsh14.mf b/language/arabic/arabtex/mfinput/xnsh14.mf
new file mode 100644
index 0000000000..90cf63a6ed
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnsh14.mf
@@ -0,0 +1,52 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% xnsh14.mf %%%%%%%%%%%%%%%%%%%%%%%%%
+% Extended Naskh font at 14.4 pt
+% 31.03.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi
+
+font_identifier "XNASKH";
+
+font_size 14.4pt#;
+
+fs# := 14.4pt#;
+
+% grid units
+fs# = 25.4dx#;
+fs# = 25.4dy#;
+
+% diacritics distance
+dia_d := 2;
+
+% normal pen
+px# := 1.8dy#; py# := 0.3dx#;
+
+pen_angle := 70;
+
+diag_angle = pen_angle - angle(px#,py#);
+
+% dot pen
+dp# := 2dy#; ap := 50;
+
+% dot distances
+dpx := 1.5; dpy := 3;
+dpx := 1.2; dpy := 2.5;
+
+% small pen for diacritics
+spx# = dx#;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input xnsh
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/xnsh14bf.mf b/language/arabic/arabtex/mfinput/xnsh14bf.mf
new file mode 100644
index 0000000000..315620e3ca
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnsh14bf.mf
@@ -0,0 +1,51 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% xnsh14bf.mf %%%%%%%%%%%%%%%%%%%%%%%
+% Extended Nash font at 14 pt, bold
+% 31.03.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi
+
+font_identifier "XNASKHBF";
+
+font_size 14.4pt#;
+
+fs# := 14.4pt#;
+
+% grid units
+fs# = 25.4dx#;
+fs# = 25.4dy#;
+
+% diacritics distance
+dia_d := 2;
+
+% normal pen
+px# := 2.4dy#; py# := 0.6dx#;
+
+pen_angle := 50;
+
+diag_angle = pen_angle - angle(px#,py#);
+
+% dot pen
+dp# := 2.2dy#; ap := 50;
+
+% dot distances
+dpx := 1.5; dpy := 3;
+
+% small pen for diacritics
+spx# := 1.5dx#;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input xnsh
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/xnshbase.mf b/language/arabic/arabtex/mfinput/xnshbase.mf
new file mode 100644
index 0000000000..7e966b92f4
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshbase.mf
@@ -0,0 +1,578 @@
+%%%%%%%%%%%%%%%%%%%%%% xnshbase.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% base file for extended NASH
+% 13.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown cmbase: else:
+errhelp "you are using 'cmbase'; rerun with base=&plain";
+errmessage "this font needs the 'plain' METAFONT base; run aborted";
+endinput
+fi;
+
+if unknown nashcode: input xarbsymb fi;
+
+xnshbase := 1;
+
+def font_setup =
+ define_pixels(dx, dy, dp, em, ex);
+ define_blacker_pixels(px, py, spx);
+ pa := pen_angle; pl := px++py; da := pa - angle(px,py);
+ pickup pensquare xscaled px yscaled py rotated pa;
+% pickup pencircle xscaled px yscaled py rotated pa;
+ nash_pen := savepen;
+ pickup pencircle scaled spx;
+ dia_pen := savepen;
+enddef;
+
+def makegrid(text r) =
+ for x=0 step dx until w+.5dx:
+ for y=0 step dy until h+.5dy:
+ fill unitsquare shifted (x,y);
+ endfor;
+ for y=dy step dy until d+.5dy:
+ fill unitsquare shifted (x,-y);
+ endfor;
+ endfor
+% for y=0,h,-d: r((0,y), (w,y)); endfor
+% for x=0,w: r((x,-d), (x,h)); endfor
+ maketicks(r);
+enddef;
+
+%%%%%%%%%%%%%% char-macros %%%%%%%%%%%%%%%%%
+
+def arabchar(expr code, form, uw, uh, ud) =
+ beginchar(if string code: code else: (code + form) fi,
+ uw*dx#, uh*dy#, (ud + dia_d)*dy#);
+ pickup nash_pen;
+ if .5w <> good.x .5w: change_width; fi
+ x.l = x.ll = 0; x.r = x.rr = w; x.m = 0.5w;
+ bot y.l = bot y.r = y.m = bot y.ll - .5ex = 0; y.rr = y.ll;
+enddef;
+
+def diachar(expr code, uw, uh) =
+ beginchar(code, uw*dx#, (uh+0.5)*dy#, 0.5*dy#);
+% beginchar(code, uw*dx#, uh*dy#, 0);
+ pickup dia_pen;
+ if .5w <> good.x .5w: change_width; fi
+ lft x.l = 0; rt x.r = w;
+ y.l = 0.5dy; y.r = h - dy;
+% bot y.l = 0; top y.r = h;
+enddef;
+
+def numchar(expr code) =
+ beginchar(code, 10*dx#, 10*dy#, 5*dy#);
+ pickup nash_pen;
+ if .5w <> good.x .5w: change_width; fi
+ lft x.l = 0; rt x.r = w;
+ bot y.l = -d; top y.r = h;
+% bot y.l = 0; top y.r = h;
+enddef;
+
+extra_endchar :=
+extra_endchar & "penlabels(l,m,r,ll,rr,range 1 thru 20);";
+
+%%%%%%%%%%%%%% dot-macros %%%%%%%%%%%%%%%%%
+
+def put_dot (suffix $) =
+ z.$1 - z.$2 = (0, px - py) rotated pa;
+ z.$ = .5[z.$1, z.$2];
+ draw z.$1--z.$2;
+ labels($1,$2);
+enddef;
+
+def one_dot (expr n) =
+ x.dd := x.m; y.dd := y.m + round(n*dy);
+ put_dot(dd);
+enddef;
+
+def two_dots (expr n) =
+ x.dr - x.m = x.m - x.dl = round(dpx*dx);
+ y.dl = y.dr = y.m + round(n*dy);
+ put_dot(dl); put_dot(dr);
+enddef;
+
+def three_dots (expr n) =
+ two_dots(n); one_dot(n+dpy);
+enddef;
+
+def three_dots_low (expr n) =
+ two_dots(n); one_dot(n-dpy);
+enddef;
+
+%%%%%%%%%%%%%% stroke-macros %%%%%%%%%%%%%%%%%
+
+def bow (expr u, v, w) =
+ draw u..controls v and v..w;
+enddef;
+
+def l_att (suffix $) =
+ x.$l = x.$ - dx; y.$l = y.l;
+ bow(z.$, z.$l, z.l);
+enddef;
+
+def r_att (suffix $) =
+ x.$r = x.$ + dx; y.$r = y.r;
+ bow(z.$, z.$r, z.r);
+enddef;
+
+def r_att (suffix $) =
+ x.$r = x.$ + dx; y.$r = y.r;
+% bow(z.$, z.$r, z.r);
+draw z.${z.$r-z.$}..z.r{right};
+enddef;
+
+def serif (suffix $) =
+ z.$ = 0.2[z.$2,z.$1];
+% z.$2 - z.$1 = 3dy * (-4dx,11dy); % 110
+ y.$2 - y.$1 = 3dy;
+ z.$2 - z.$1 = whatever * (-4dx,11dy);
+ draw z.$1--z.$2;
+enddef;
+
+def s_bow (suffix $) =
+ x.$1 - .5dx = x.$;
+ x.$2 - 4dx = lft x.$3 = lft x.$4 + 1.5dx - pl = x.l;
+ y.$1 - dy = y.$3 = y.$4 - 2dy = y.$2 + 2dy = - 2dy;
+ draw z.$..z.$1{down}..z.$3{up}..z.$4;
+enddef;
+
+def p_loop (suffix $) =
+pickup dia_pen;
+x.$1 = x.$2 = x.$; y.$1 + spx + dy = y.$2; top y.$2 = y.$;
+draw z.$1..z.$2..cycle;
+pickup nash_pen;
+enddef;
+
+def r_con (suffix $) =
+ charic := (y.$-y.r)/vppp;
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%% bah-macros %%%%%%%%%%%%%%%%%
+
+def bah_bow =
+x1 = x4 + dx = x2 + 13.8dx; x2 = x3 = x.l + 0.6dx;
+%x1 = x4 = x2 + 13.8dx; x2 = x3 = x.l + 0.6dx;
+y4 - 5dy = y1 - 3dy = y2 - 2dy = y.m = y3 - 4dy;
+x5 = x.m; y5 = y.m - 0.5dy;
+enddef;
+
+def bah_end =
+bah_bow; draw z1..z5{left}..z2..z3; r_att(1);
+enddef;
+
+def bah_iso =
+bah_bow; draw z4..z1..z5{left}..z2..z3;
+enddef;
+
+def bah_mid =
+x6 = x.m; y6 = good.y (y.r + 2dy);
+l_att(6); r_att(6);
+enddef;
+
+def bah_beg =
+x.m := x.m + 0.5dx;
+x1 - dx = x2 = x.m; y1 = y.l; y2 = y.m + 4dy;
+bow(z2, z1, z.l);
+enddef;
+
+%%%%%%%%%%%%%% hhah-macros %%%%%%%%%%%%%%%%%
+
+def hhah_iso_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 4dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_mid_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 3dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_beg_bar =
+x1 - 2dx = x2 - 11dx = x.l; y1 - 4dy = y2 - 2dy = y.r;
+x3 = x2 - 2dx; y3 = y2; draw z1{(8dx,3dy)}..z2{right};
+enddef;
+
+def hhah_bow =
+lft x4 = x1 - 2dx = x5 - 8dx; rt x6 - 6dx = x5;
+y5 = y6 - dy = -10dy; y4 = 0.6[y2,y5];
+penpos4(pl,da); penpos5(pl,90); penpos6(0.3dy,90);
+draw z2{left}..z4{down};
+fill z4r{down}..z5r{right}..z6r--z6l--z5l{left}..z4l{up}--cycle;
+enddef;
+
+def hhah_iso =
+hhah_iso_bar; hhah_bow;
+enddef;
+
+def hhah_end =
+hhah_mid_bar; hhah_bow;
+draw z3{down}..z.r{right};
+enddef;
+
+def hhah_mid =
+hhah_mid_bar; draw z2{left}..z.l{left};
+draw z3{down}..z.r{right};
+enddef;
+
+def hhah_beg =
+hhah_beg_bar; draw z2{left}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% dal-macros %%%%%%%%%%%%%%%%%
+
+def dal_iso =
+x1 = x2 + 2dx = x3 - 3dx = x.r - 4dx; x.m := x1;
+y1 - 6dy = y2 = y3 - dy = y.r;
+draw z1{(7dx,-4dy)}..z3..z2{left};
+enddef;
+
+def dal_end =
+x1 + dx = x3 - dx = x4 + 4dx = x.r - 3dx; lft x2 = x.r - 9dx;
+y1 = 8dy; y2 - dy = y3 = y4 = y.l; z5 = .3[z1,z3];
+draw z1--z5{z3-z1}..z.r{right};
+draw z5{z3 - z1}..z4{left}..z2;
+enddef;
+
+%%%%%%%%%%%%%% rah-macros %%%%%%%%%%%%%%%%%
+
+def rah_bow =
+x5 + dx = x2 + dx = x4 + 9dx = x3 - px + 6dx = x.r;
+y5 + 3dy = y2 - 0.5dy = y4 + 6dy = y3 + 6dy = y.r;
+penpos2(pl,da); penpos3(pl,90);
+penpos4(0.3dy,90); penpos5(0.4[py,px],0);
+enddef;
+
+def rah_iso =
+rah_bow;
+y1 - 2dy = y.r; x1 + 0.5dx = x2;
+penpos1(pl,da);
+fill z1l..z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r..z1r--cycle;
+enddef;
+
+def rah_end =
+rah_bow;
+y1 - .5dy = y.r; x1 = x2; % = x.r - dx;
+fill z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r--cycle;
+draw z1..z.r{right};
+enddef;
+
+%%%%%%%%%%%%%% sin-macros %%%%%%%%%%%%%%%%%
+
+def s_wave =
+z2 - z1 = z5 - z4 = 2(z3 - z2);
+x3 - x1 = 6(x3 - x5) = 6dx; x.m := x2;
+y4 = y5 - 0.5dy = y2 - 2.5dy = y.r;
+draw z3..z5..z2; draw z2..z4{left};
+enddef;
+
+def mid_wave =
+x3 = x.r - 3dx; s_wave;
+draw z4{left}..z1;
+enddef;
+
+def beg_wave =
+rt x3 = x.r; s_wave;
+draw z4{left}..z1;
+enddef;
+
+def sin_iso =
+beg_wave; s_bow(1);
+enddef;
+
+def sin_end =
+mid_wave;
+draw z3{down}..z.r{right}; s_bow(1); enddef;
+
+def sin_mid =
+mid_wave; draw z3{down}..z.r{right}; l_att(1);
+enddef;
+
+def sin_beg =
+beg_wave; l_att(1);
+enddef;
+
+%%%%%%%%%%%%%% sad-macros %%%%%%%%%%%%%%%%%
+
+def sad_bow =
+x2 - dx = x3 - 9dx; x2 + 3dx = x.m; x4 = x2 - 2dx;
+y2 = y3 - 3dy = y4 - 2dy = y.r;
+x8 = x2 + 3.5dx; y8 = y2 + 0.5dy;
+draw z2{(5dx,6dy)}..z3{(4dx,-7dy)}..tension 2..z2{left};
+enddef;
+
+def sad_iso =
+x.m := x.m + 4dx;
+sad_bow; draw z2{left}..z4; s_bow(4);
+enddef;
+
+def sad_beg =
+x.m := x.m + dx;
+sad_bow; draw z2{left}..z4; l_att(4);
+enddef;
+
+%%%%%%%%%%%%%% ttah-macros %%%%%%%%%%%%%%%%%
+
+def ttah_stroke =
+x5 = x7 - dx = x2; y5 = 12dy; y7 = y2 + dy;
+draw z5{down}..z7{down};
+serif(5);
+enddef;
+
+def ttah_tail =
+x2 - x6 = 5dx; y6 = top y2;
+penpos2(pl,da);
+fill z6--z2r--z2l{left}..z6..cycle;
+enddef;
+
+def ttah_iso =
+x.m := x.m + dx;
+sad_bow; ttah_stroke; ttah_tail;
+x.m := x.m + dx;
+enddef;
+
+def ttah_beg =
+sad_bow; ttah_stroke;
+x.m := x.m + dx;
+enddef;
+
+%%%%%%%%%%%%%% ain-macros %%%%%%%%%%%%%%%%%
+
+def ain_head =
+x.m := x.m - 2dx;
+lda := 0.5pa + angle(dx,dy);
+penpos7(pl,pa); penpos3(0.3dy,90);
+penpos2(px,lda); penpos8(px,lda);
+x7 + 2dx = x3 + dx = x2 + 6dx; x8 = x2 + 0.3dx;
+y7 = y2 - 3dy = y3 - 4dy; y8 = y2; z7 = 0.25[z1, z.l];
+fill z7l{z.l-z1}..z2l{up}--z2r--z8r{down}..z7r{z1-z.l}--cycle;
+fill z2r{(7dx,10dy)}..z3r--z3l..z8l{(-7dx,-10dy)}--z2l--cycle;
+enddef;
+
+def ain_bow =
+lft x4 = x.l = x5 - 8dx; rt x6 = x5 + 6dx;
+y5 = y6 - dy = -10dy; y4 = 0.6[y1,y5];
+penpos4(pl,da); penpos5(pl,90); penpos6(0.3dy,90);
+draw z1{z.l - z1}..z4{down};
+fill z4r{down}..z5r{right}..z6r--z6l--z5l{left}..z4l{up}--cycle;
+enddef;
+
+def ain_top =
+x2 = x1 = x.r - 3.5dx; y2 - 2dy = y1 = 2dy;
+%x2 = x1 = x.m + 0.5dx; y2 - 2dy = y1 = 2dy;
+x7 - x2 = x2 - x3 = 2dx; y7 = y3 = y2 - 0.5dy;
+x8 = x3 - dx; y8 = y3;
+draw z.r{left}..z1..z3; draw z8..z2..z7;
+enddef;
+
+def ain_iso =
+x1 = x.r - 3dx; y1 = 5dy;
+ain_head; ain_bow;
+enddef;
+
+def ain_end =
+ain_top; draw z7..z1{z.l - z1}; ain_bow;
+enddef;
+
+def ain_mid =
+ain_top; draw z7..z1..z.l{left};
+enddef;
+
+def ain_beg =
+rt x1 = x.r; y1 = 3dy;
+ain_head; draw z1..z7..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% fah-macros %%%%%%%%%%%%%%%%%
+
+def fah_iso =
+x.m := x.m + 4dx;
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 6dy; y2 = y3 = 8dy;
+lft x5 = x.l; lft x6 = lft x5 - 1.5dx + pl; x7 = 6dx;
+y5 = 3dy; y6 = y5 + 3dy; bot y7 = -0.5dy;
+draw z2..z1..z3..z4{down}..z7..z5{up}..z6;
+enddef;
+
+def fah_end =
+x.m := x.m + 4dx;
+x1 = x2 + dx = x.r - 2dx; lft x3 = lft x4 + 1.5dx - pl = x5 - 5dx = x.l;
+y5 = dy; y1 = 6.5dy; y2 = 2dy; y3 = 4dy; y4 = 6dy;
+x2a + 3dx = x2b = x1; y2a = y2b = y.r + 2dy;
+draw z.r{left}..z2a..z1;
+draw z1..z2b..tension 1.5..z5..z3{up}..z4;
+enddef;
+
+def fah_mid =
+x1 = x2 + dx = x.r - 2dx; y1 - 5dy = y2 - 0.5dy = y.r;
+x2a + 3dx = x2b = x1; y2a = y2b = y.r + 2dy;
+draw z.r{left}..z2a..z1; draw z1..z2b..z.l{left};
+enddef;
+
+def fah_beg =
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 4dy; y2 = y3 = 6dy;
+draw z2..z1..z3..z4{down}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% qaf-macros %%%%%%%%%%%%%%%%%
+
+def qaf_iso =
+x.m := x.m + 2dx;
+x1 = x2 - 2dx = x3 + dx = x4 - 2.5dx; rt x4 = x.r;
+y1 = y4 = 4dy; y2 = y3 = 6dy;
+lft x5 = x.l; lft x6 = lft x5 - 1.5dx + pl; x7 = 5dx;
+y5 = dy; y6 = y5 + 3dy; y7 = -2dy;
+draw z2..z1..z3..z4{down}..z7..z5{up}..z6;
+enddef;
+
+def qaf_end =
+x.m := x.m + 2dx;
+x1 + 3dx = x2 + dx = x.r;
+lft x3 = lft x4 + 1.5dx - pl = x5 - 5dx = x.l;
+y1 - 4dy = y2 = y.r = y3 + 2dy = y4 = y5 + 5dy;
+draw z.r{left}..z2..z1{right}..z2..z5..z3{up}..z4;
+enddef;
+
+%%%%%%%%%%%%%% kaf-macros %%%%%%%%%%%%%%%%%
+
+def kaf_mark (suffix $) =
+x.$6 + dx = x.$7 + 2dx = x.$8 = x.$9 + 3dx = x.$;
+y.$6 - 3dy = y.$7 - dy = y.$8 = y.$9 + dy = y.$;
+pickup dia_pen;
+draw z.$6{(-6dx,-5dy)}..z.$7..z.$8..z.$9{left};
+pickup nash_pen;
+labels($6,$7,$9);
+enddef;
+
+def kaf_beg =
+x1 - 11dx = x2 = x4 - 10dx = x.l;
+%x1 = x.r - dx; x2 = x.l; x4 = x.r - 2dx;
+%y4 = y.r; y1 = 14dy; y2 = 9dy; z3 = .4[z2, z4];
+y4 = y.l = y1 - 13dy = y2 - 8dy; z3 = .4[z2, z4];
+bow (z1, z2, z3);
+draw z3{z3 - z2}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% gaf-macros %%%%%%%%%%%%%%%%%
+
+def gaf_iso =
+x1 - 15dx = x2 - 6dx = x4 - 8dx = x6 - dx = x.l;
+y1 - 13dy = y2 - 9dy = y4 = y6 - dy = y.l;
+z3 = .7[z2, z4]; z5 = .5[z4, z.l];
+bow(z1, z2, z3); bow(z3, z4, z5); bow(z5, z.l, z6);
+enddef;
+
+def gaf_iso =
+x1 - 2dx = x2 + 7dx = x4 +5dx = x.r;
+y1 - 13dy = y2 - 9dy = y4 = y.r;
+z3 = .7[z2, z4]; bow(z1, z2, z3);
+x6 = x7 = x.l + 0.6dx; y6 = y7 - 2dy = y.l + dx;
+x5 = .5[x6, x4]; y5 = y.m; z13 = .5[z4, z3];
+draw z7 .. z6 .. z5{right} .. z13{z3-z13}--z3;
+enddef;
+
+def gaf_serif =
+x10 = x1; y10 = y1 + 2.5dy; x11 = x2 + 2dx; y11 = y2 + 3dy;
+pickup dia_pen;
+z12 = 0.1[z10,z11]; draw z12--z11;
+pickup nash_pen;
+enddef;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+def serpent =
+x1 = x3 = x.r - 3dx;
+x2 = x4 = x5 - dx = x.l + 4dx;
+y1 = y2 = y4 - 4dy = y5 - 8dy = y.l; y3 = y4;
+draw z5 .. z4{right} .. z3{right} .. z1{left} .. z2;
+enddef;
+
+%%%%%%%%%%%%%% nun-macros %%%%%%%%%%%%%%%%%
+
+def nun_iso =
+x1 + 2dx = rt x2 = x.r; x3 = x.m; lft x4 = lft x5 + 1.5dx - pl = x.l;
+y1 - 8dy = y2 - 3dy = y4 - 3dy = y5 - 5dy = y3 + dy = y.r - 3dy;
+draw z1..z2{down}..z3..z4{up}..z5;
+enddef;
+
+def nun_end =
+x1 = x.r - 2dx; y1 = y.r + dy;
+x2 - .5dx = x1; lft x3 = lft x4 + 1.5dx - pl = x.l;
+y2 - dy = y3 = y4 - 2dy = y.r - 3dy;
+x5 = x.m; y5 = y3 - 4dy;
+draw z1..z2{down}..z5..z3{up}..z4; r_att(1);
+enddef;
+
+%%%%%%%%%%%%%% waw-macros %%%%%%%%%%%%%%%%%
+
+def waw_bow =
+rah_bow;
+x1 + 2.5dx = x2; y1 - 3dy = y2;
+x6 = x1; y6 = y2;
+fill z2l..z5l..z3r..z4r{left}--z4l--z3l..z5r..z2r--cycle;
+enddef;
+
+def waw_bar =
+pickup dia_pen;
+x7 = .3[x4,x5]; y7 = y5; draw z7--z5;
+pickup nash_pen;
+enddef;
+
+%%%%%%%%%%%%%% hah-macros %%%%%%%%%%%%%%%%%
+
+def hah_iso =
+x1 = x.m - .5dx; rt x2 = x.r; lft x3 = x.l;
+y1 = 7dy; y2 = y3 = 3dy;
+%y1 = 6dy; y2 = y3 = 3dy;
+%y1 = 6dy; y2 = y3 = 2dy;
+draw z1..z2{down}..z3{up}..z1;
+enddef;
+
+def hah_end =
+x1 = x2 - dx = x4 + 2.5dx = x.m;
+y1 = 7dy; y2 = y.r; y4 = 4dy;
+z3 = .15[z1, z2]; z5 = .6[z1, z2];
+draw z1--z5{z5-z1}..z.r{right};
+draw z3{(-7dx,-4dy)}..z4{down}..z5{(7dx,4dy)};
+enddef;
+
+%%%%%%%%%%%%%% yah-macros %%%%%%%%%%%%%%%%%
+
+def yah_iso =
+x6 = x1 + 5dx = x2 + dx = x.r = x3 + 6dx;
+lft x4 = lft x5 + 1.5dx - pl = x.r - 13dx;
+%x6 = x1 + 5dx = x2 + dx = x.r = x3 + 6dx; lft x4 = x5 - dx = x.r - 13dx;
+y6 - 7dy = y1 - 3dy = y5 - 3dy = y2 - dy = y4 = y3 + 3dy = y.r - 2dy;
+draw z6{up}..tension 1.5..z1{down}..tension 1.5
+..z2{down}..tension 1.5..z3..z4{up}..z5;
+enddef;
+
+def yah_end =
+x1 + 4dx = rt x2 = x.r = x3 + 5dx;
+lft x4 = lft x5 + 1.5dx - pl = x.r - 11dx;
+y1 + 2dy = y2 + 4dy = y4 + 4dy = y3 + 7dy = y5 + dy = y.r;
+draw z.r{left}..z1{down}..tension 1.5
+..z2{down}..tension 1.5..z3..z4{up}..z5;
+enddef;
+
+def yah_p_iso =
+x10 = x4 - dx = x5; x3 = x6 = x7 + 2dx = x4 - 8dx; x8 = x4 + 4dx = x.r;
+y10 = y6 = y4 - 3dy = y5 - 5dy = y.r; y3 = y.rr; y7 = y8 = y.r - 3dy;
+z9 = 0.2[z10,z5]; z1 = 0.9[z6,z9]; z2 = 0.8[z3,z5];
+draw z8--z7{left}..z6..controls z1 and z2..z5..z4{(dx,-6dy)};
+enddef;
+
+def yah_p_end =
+x8 - 7dx = x7 + 3dx = x.r; y7 = y8 = y.r - 3dy;
+draw z8--z7{left}..z.r{(4dx,dy)};
+enddef;
+
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/xnshchar.mf b/language/arabic/arabtex/mfinput/xnshchar.mf
new file mode 100644
index 0000000000..b5df351e5c
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshchar.mf
@@ -0,0 +1,646 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% xnshchar.mf %%%%%%%%%%%%%%%%%%%%%%%
+% Extended NASH Font
+% normal characters
+% 15.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi;
+
+%%%%%%%%%%%%%% alif %%%%%%%%%%%%%%%%%
+
+arabchar(alif, f_iso, 3, 15, -1);
+rt x6 = x.r; bot y6=0;
+x7 = x6 - dx; y7 = 13dy;
+draw z6{up}..z7{up};
+serif(7);
+endchar;
+
+arabchar(alif, f_end, 4, 15, 0);
+x6 + 2dx = x7 + 3dx = x.r;
+y6 = y.r; y7 = 13dy;
+z8 = 0.7[z7,z6]; draw z7---z8..z.r{right};
+endchar;
+
+%%%%%%%%%%%%%% bah family %%%%%%%%%%%%%%%%%
+
+arabchar(bah_s, f_iso, 16, 6, 1);
+bah_iso;
+endchar;
+
+arabchar(bah_s, f_end, 17, 6, 1);
+bah_end;
+endchar;
+
+arabchar(bah_s, f_mid, 5, 8, 0);
+x1 = x.m; y1 = y.l + 2dy;
+draw z.l{right}..z1; draw z1..z.r{right};
+endchar;
+
+arabchar(bah_s, f_beg, 5, 8, 0);
+x2 = x1 = x.l + 3dx; y1 - 4dy = y2 - dy = y.l;
+draw z1{(4dx,-11dy)}..z2..z.l{left};
+endchar;
+
+%%%%%%%%%%%%%% bah family with loop %%%%%%%%%%%%%%%%%
+
+arabchar(bah_p, f_iso, 16, 6, 3);
+bah_iso;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+arabchar(bah_p, f_end, 17, 6, 3);
+bah_end;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+arabchar(bah_p, f_mid, 6, 8, 2);
+x1 = x2 + dx = x.r - 2dx; y1 - 2dy = y2 = y.l;
+draw z.l{right}..z1{up}; draw z1..z.r{right};
+p_loop(2);
+endchar;
+
+arabchar(bah_p, f_beg, 5, 8, 2);
+x2 = x1 = x.l + 3dx; y1 - 4dy = y2 - dy = y.l;
+draw z1{(4dx,-11dy)}..z2..z.l{left};
+p_loop(2);
+endchar;
+
+%%%%%%%%%%%%%% hhah %%%%%%%%%%%%%%%%%
+
+arabchar(hhah, f_iso, 12, 10, 10);
+hhah_iso;
+endchar;
+
+arabchar(hhah, f_end, 13, 10, 10);
+hhah_end;
+endchar;
+
+arabchar(hhah, f_mid, 13, 10, 0);
+hhah_mid;
+endchar;
+
+arabchar(hhah, f_beg, 12, 8, 0);
+hhah_beg;
+endchar;
+
+%%%%%%%%%%%%%% khah %%%%%%%%%%%%%%%%%
+
+arabchar(khah, f_iso, 12, 15, 10);
+hhah_iso; x.m := x.m - 2dx; one_dot(10);
+endchar;
+
+arabchar(khah, f_end, 13, 15, 10);
+hhah_end; one_dot(10);
+endchar;
+
+arabchar(khah, f_mid, 13, 15, 0);
+hhah_mid; one_dot(10);
+endchar;
+
+arabchar(khah, f_beg, 12, 15, 0);
+hhah_beg; one_dot(10);
+endchar;
+
+%%%%%%%%%%%%%% dal, dhal %%%%%%%%%%%%%%%%%
+
+arabchar(dal, f_iso, 7, 10, 0);
+dal_iso;
+endchar;
+
+arabchar(dal, f_end, 10, 11, 0);
+dal_end;
+endchar;
+
+%%%%%%%%%%%%%% dal with loop %%%%%%%%%%%%%%%%%
+
+arabchar(dal_p, f_iso, 7, 10, 0);
+dal_iso; p_loop(3);
+endchar;
+
+arabchar(dal_p, f_end, 10, 11, 1);
+dal_end;
+x6 = x4 + 2dx; y6 = y4; p_loop(6);
+endchar;
+
+%%%%%%%%%%%%%% rah %%%%%%%%%%%%%%%%%
+
+arabchar(rah, f_iso, 8, 5, 5);
+rah_iso;
+endchar;
+
+arabchar(rah, f_end, 8, 5, 5);
+rah_end;
+endchar;
+
+%%%%%%%%%%%%%% rah with loop %%%%%%%%%%%%%%%%%
+
+arabchar(rah_p, f_iso, 8, 5, 8);
+rah_iso; p_loop(3l);
+endchar;
+
+arabchar(rah_p, f_end, 8, 5, 8);
+rah_end; p_loop(3l);
+endchar;
+
+%%%%%%%%%%%%%% rah with two dots %%%%%%%%%%%%%%%%%
+
+arabchar(rah_s, f_end, 8, 5, 6);
+rah_end;
+x6 = x.r; y6 = y3l; x7 = x3l; y7 = y5 + dy;
+put_dot(6); put_dot(7);
+endchar;
+
+arabchar(rah_s, f_iso, 8, 5, 6);
+rah_iso;
+x6 = x.r; y6 = y3l; x7 = x3l; y7 = y5 + dy;
+put_dot(6); put_dot(7);
+endchar;
+
+%%%%%%%%%%%%%% kurdish rah %%%%%%%%%%%%%%%%%
+
+arabchar(rah_k, f_iso, 8, 5, 10);
+rah_iso;
+x6 + dx = x7 + 3dx = x.r;
+y6 + 3dy = y7 + 8dy = y.r;
+draw z6{(dx,-2dy)}..z7;
+endchar;
+
+arabchar(rah_k, f_end, 8, 5, 10);
+rah_end;
+x6 + dx = x7 + 3dx = x.r;
+y6 + 3dy = y7 + 8dy = y.r;
+draw z6{(dx,-2dy)}..z7;
+endchar;
+
+%%%%%%%%%%%%%% sin %%%%%%%%%%%%%%%%%
+
+arabchar(sin, f_iso, 16, 6, 0);
+sin_iso;
+endchar;
+
+arabchar(sin, f_end, 18, 6, 0);
+sin_end;
+endchar;
+
+arabchar(sin, f_mid, 13, 6, 0);
+sin_mid;
+endchar;
+
+arabchar(sin, f_beg, 11, 6, 0);
+sin_beg;
+endchar;
+
+%%%%%%%%%%%%%% sad %%%%%%%%%%%%%%%%%
+
+arabchar(sad, f_iso, 19, 8, 0);
+sad_iso;
+endchar;
+
+arabchar(sad, f_end, 19, 8, 0);
+sad_iso; draw z.r{left}..z8;
+endchar;
+
+arabchar(sad, f_mid, 14, 8, 0);
+sad_beg; draw z.r{left}..z8;
+endchar;
+
+arabchar(sad, f_beg, 14, 8, 0);
+sad_beg;
+endchar;
+
+%%%%%%%%%%%%%% ttah %%%%%%%%%%%%%%%%%
+
+arabchar(ttah, f_iso, 13, 8, 0);
+ttah_iso;
+endchar;
+
+arabchar(ttah, f_end, 13, 8, 0);
+ttah_iso; draw z.r{left}..z8;
+endchar;
+
+arabchar(ttah, f_mid, 12, 8, 0);
+ttah_beg; draw z.r{left}..z8; draw z2--z.l;
+endchar;
+
+arabchar(ttah, f_beg, 11, 8, 0);
+ttah_beg; draw z2--z.l;
+endchar;
+
+%%%%%%%%%%%%%% ain, ghain %%%%%%%%%%%%%%%%%
+
+arabchar(ain, f_iso, 11, 11, 10);
+ain_iso;
+endchar;
+
+arabchar(ain, f_end, 10, 7, 10);
+ain_end;
+endchar;
+
+arabchar(ain, f_mid, 9, 7, 0);
+ain_mid;
+endchar;
+
+arabchar(ain, f_beg, 9, 10, 0);
+ain_beg;
+endchar;
+
+%%%%%%%%%%%%%% fah family %%%%%%%%%%%%%%%%%
+
+arabchar(fah_s, f_iso, 17, 11, 0);
+fah_iso;
+endchar;
+
+arabchar(fah_s, f_end, 18, 10, 0);
+fah_end;
+endchar;
+
+arabchar(fah_s, f_mid, 8, 10, 0);
+fah_mid;
+endchar;
+
+arabchar(fah_s, f_beg, 6, 10, 0);
+fah_beg;
+endchar;
+
+%%%%%%%%%%%%%% qaf %%%%%%%%%%%%%%%%%
+
+arabchar(qaf_s, f_iso, 12, 10, 2);
+qaf_iso;
+endchar;
+
+arabchar(qaf_s, f_end, 12, 10, 2);
+qaf_end;
+endchar;
+
+arabchar(qaf, f_iso, 12, 15, 2);
+qaf_iso; two_dots(11);
+endchar;
+
+arabchar(qaf, f_end, 12, 15, 4);
+qaf_end; two_dots(10);
+endchar;
+
+%%%%%%%%%%%%%% kaf family %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_s, f_iso, 16, 15, 0);
+gaf_iso;
+endchar;
+
+arabchar(kaf_s, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+endchar;
+
+arabchar(kaf_s, f_mid, 12, 15, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+endchar;
+
+arabchar(kaf_s, f_beg, 9, 15, 0);
+kaf_beg;
+endchar;
+
+%%%%%%%%%%%%%% kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf, f_iso, 10, 15, 0);
+x1 = x.r - 2dx; x2 = x.m; x3 = x.l + dx;
+y1 = 12dy; y2 = y.r; y3 = y.l + dy;
+x4 = x.l + 6dx; y4 = y.l + 4dy;
+bow(z1, z.r, z2); bow(z2, z.l, z3);
+serif(1); kaf_mark(4);
+endchar;
+
+arabchar(kaf, f_end, 12, 15, 0);
+x1 + dx = x2 = x.r - 2dx;
+x4 = x.m; lft x5 = x6 - dx = x.l;
+z3 = .7[z1, z2];
+y1 = 12dy; y2 = y.r; y4 = y.r; y5 = y6 - 2dy = y.l + 2dy;
+x7 = x.l + 7dx; y7 = y.l + 4dy;
+draw z1--z3{z2 - z1}..z4..z5..z6;
+draw z3{z2 - z3}..z.r{right};
+kaf_mark(7);
+endchar;
+
+%%%%%%%%%%%%%% kaf family with loop %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_p_s, f_iso, 16, 15, 0);
+gaf_iso;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_s, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_s, f_mid, 12, 15, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_s, f_beg, 9, 15, 0);
+kaf_beg;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% kaf with loop %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_p, f_iso, 16, 15, 0);
+gaf_iso;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+z18 = .4[z1,z2]; x9 = x18; y9 = bot y18; p_loop(9);
+endchar;
+
+arabchar(kaf_p, f_end, 16, 15, 0);
+gaf_iso; bow(z3, z4, z.r);
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+z18 = .4[z1,z2]; x9 = x18; y9 = bot y18; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% wide kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_w, f_iso, 16, 10, 0);
+serpent; ttah_tail;
+endchar;
+
+arabchar(kaf_w, f_end, 16, 10, 0);
+serpent; draw z.r{left}..z1; ttah_tail;
+endchar;
+
+arabchar(kaf_w, f_mid, 16, 10, 0);
+serpent; draw z.r{left}..z1; draw z2{left}..z.l;
+endchar;
+
+arabchar(kaf_w, f_beg, 16, 10, 0);
+serpent; draw z2{left}..z.l;
+endchar;
+
+%%%%%%%%%%%%%% gaf family %%%%%%%%%%%%%%%%%
+
+arabchar(gaf_s, f_iso, 16, 16, 0);
+gaf_iso; gaf_serif;
+endchar;
+
+arabchar(gaf_s, f_end, 16, 16, 0);
+gaf_iso; bow(z3, z4, z.r);
+gaf_serif;
+endchar;
+
+arabchar(gaf_s, f_mid, 12, 16, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+gaf_serif;
+endchar;
+
+arabchar(gaf_s, f_beg, 9, 16, 0);
+kaf_beg; gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% gaf %%%%%%%%%%%%%%%%%
+
+arabchar(gaf, f_iso, 16, 16, 0);
+gaf_iso; gaf_serif;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+endchar;
+
+arabchar(gaf, f_end, 16, 16, 0);
+gaf_iso; bow(z3, z4, z.r); gaf_serif;
+x8 = .6[x.l, x4]; y8 = y.l + 4dy; kaf_mark(8);
+endchar;
+
+%%%%%%%%%%%%%% gaf family with loop %%%%%%%%%%%%%%%%%
+
+arabchar(gaf_p_s, f_iso, 16, 18, 0);
+gaf_iso;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+arabchar(gaf_p_s, f_end, 16, 16, 0);
+gaf_iso; bow(z3, z4, z.r);
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+arabchar(gaf_p_s, f_mid, 12, 16, 0);
+kaf_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+arabchar(gaf_p_s, f_beg, 9, 16, 0);
+kaf_beg;
+z8 = .4[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% lam %%%%%%%%%%%%%%%%%
+
+arabchar(lam, f_iso, 9, 15, 4);
+rt x4 = w; lft x5 = 0; x1 = x4 - dx; x3 = x5 + dx;
+y1 = 12dy; y3 = 3dy; y4 = y5 = 0;
+draw z1{down}..z4{down}..z5{up}..z3; serif(1);
+endchar;
+
+arabchar(lam, f_end, 12, 15, 5);
+x1 + 3dx = x2 + 2dx = x.r; y1 - 11dy = y2 = y.r;
+z8 = 0.7[z1,z2]; draw z1---z8..z.r{right};
+s_bow(1);
+endchar;
+
+arabchar(lam, f_mid, 5, 15, 0);
+x1 + 3dx = x2 + 2dx = x.r; y1 - 11dy = y2 = y.r;
+z8 = 0.7[z1,z2]; draw z1---z8..z.r{right};
+bow (z1, z2, z.l);
+endchar;
+
+arabchar(lam, f_beg, 4, 15, 0);
+x1 = x2 - dx = x.l + 2dx;
+y1 = 12dy; y2 = y.l; z3 = 0.8[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+%%%%%%%%%%%%%% mim %%%%%%%%%%%%%%%%%
+
+arabchar(mim, f_iso, 7, 10, 5);
+x2 + 6dx = x4 + 4dx = x5 + 3.5dx = x6 + 4.5dx = x1;
+y2 + dy = y4 + 11dy = y5 - 2.5dy = y6 - 1.5dy = y1;
+z2 = z.l; bow(z4,z2,z1); bow(z6,z5,z1);
+endchar;
+
+arabchar(mim, f_end, 10, 10, 1);
+x1 + 0.5dx = x2 - 2.5dx = x3 + 2dx = x5 - 2dx = x.m;
+y1 - 3dy = y2 - 0.5dy = y3 - 1.5dy = y5 - dy = y.l;
+x4 = x.l + 2dx; y4 = -8dy;
+draw z.r{left}..z5..z1..tension 1.5..z3;
+draw z3{down}..tension 1.2..z2;
+bow(z3, z.l, z4);
+endchar;
+
+arabchar(mim, f_mid, 8, 10, 1);
+x1 + 0.5dx = x2 - 2.5dx = x3 + 2dx = x5 - 2dx = x.m;
+y1 - 3dy = y2 - 0.5dy = y3 - 1.5dy = y5 - dy = y.l;
+draw z.r{left}..z5..z1..tension 1.5..z3
+& z3{down}..tension 1.2..z2; l_att(3);
+endchar;
+
+arabchar(mim, f_beg, 7, 10, 0);
+x1 = x2 - dx = x3 + 2dx = x.l + 5dx;
+y1 - 4dy = y2 = y3 - 2dy = y.l;
+draw z3..tension 2..z2..tension 1.5..z1..z3..z.l{left};
+endchar;
+
+arabchar(mim_sind, f_iso, 7, 10, 0);
+x1 = x2 - dx = x3 + 2dx = x.l + 5dx;
+y1 - 4dy = y2 = y3 - 2dy = y.l;
+x4 = x.l; y4 = y.l - 2dy;
+draw z3..tension 2..z2..tension 1.5..z1..z3..z4{left};
+endchar;
+
+%%%%%%%%%%%%%% nun %%%%%%%%%%%%%%%%%
+
+arabchar(nun, f_iso, 10, 8, 4);
+nun_iso;
+endchar;
+
+arabchar(nun, f_end, 11, 4, 7);
+nun_end;
+endchar;
+
+%%%%%%%%%%%%%% nun with loop %%%%%%%%%%%%%%%%%
+
+arabchar(nun_p, f_iso, 10, 8, 6);
+nun_iso;
+x6 = x3; top y6 = y3; p_loop(6);
+endchar;
+
+arabchar(nun_p, f_end, 11, 4, 9);
+nun_end;
+x6 = x5; top y6 = y5; p_loop(6);
+endchar;
+
+%%%%%%%%%%%%%% hah, tah marbuta %%%%%%%%%%%%%%%%%
+
+arabchar(hah, f_iso, 5, 10, 0);
+hah_iso;
+endchar;
+
+arabchar(hah, f_end, 6, 10, 0);
+hah_end;
+endchar;
+
+arabchar(hah, f_mid, 6, 10, 4);
+x1 + dx = x2 = x3 = x4 + 2dx = x.m + dx;
+y1 = y2 - 4dy = y3 + 4dy = y4 = y.r;
+draw z1{(7dx,-4dy)}..z3..z4{up}..z2;
+draw z2{(5dx,-6dy)}..z.l{left}; draw z.r--z1;
+endchar;
+
+arabchar(hah, f_beg, 9, 10, 0);
+x1 + 0.5dx = x2 = x3 + 1.5dx = x4 - 1.5dx = x.r - 5dx;
+x6 + dx = x5 - 3dx = x.r;
+y1 = 7dy; y2 = 2dy; y3 = y4 = 4dy; y6 = dy;
+draw z1{curl 0}..tension 1.5..z6..tension 2..z2..z3..z4..z2..z.l{left};
+endchar;
+
+%%%%%%%%%%%%%% waw %%%%%%%%%%%%%%%%%
+
+arabchar(waw, f_iso, 9, 7, 6);
+waw_bow;
+draw z2{(-7dx,-4dy)}..z6..z1{right}..z2{(4dx,-11dy)};
+endchar;
+
+arabchar(waw, f_end, 10, 7, 6);
+x.r := x.r - dx; waw_bow; x.r := x.r + dx;
+draw z.r{left}..z6..z1{right}..z2{(4dx,-11dy)};
+endchar;
+
+%%%%%%%%%%%%%% waw with ring %%%%%%%%%%%%%%%%%
+
+arabchar(waw_r, f_iso, 9, 7, 6);
+waw_bow;
+draw z2{(-7dx,-4dy)}..z6..z1{right}..z2{(4dx,-11dy)};
+%x8 = x3; y8 = y5; p_loop(8);
+x8 = x3; y8 = y5 + dy; p_loop(8);
+endchar;
+
+arabchar(waw_r, f_end, 10, 7, 6);
+x.r := x.r - dx; waw_bow; x.r := x.r + dx;
+draw z.r{left}..z6..z1{right}..z2{(4dx,-11dy)};
+x8 = x3; y8 = y5 + .5dy; p_loop(8);
+endchar;
+
+%%%%%%%%%%%%%% waw with bar %%%%%%%%%%%%%%%%%
+
+arabchar(waw_b, f_iso, 9, 7, 6);
+waw_bow;
+draw z2{(-7dx,-4dy)}..z6..z1{right}..z2{(4dx,-11dy)};
+waw_bar;
+endchar;
+
+arabchar(waw_b, f_end, 10, 7, 6);
+x.r := x.r - dx; waw_bow; x.r := x.r + dx;
+draw z.r{left}..z6..z1{right}..z2{(4dx,-11dy)};
+waw_bar;
+endchar;
+
+%%%%%%%%%%%%%% yah, alif_maqsura %%%%%%%%%%%%%%%%%
+
+arabchar(yah, f_iso, 13, 5, 5);
+yah_iso;
+endchar;
+
+arabchar(yah, f_end, 11, 5, 7);
+yah_end;
+endchar;
+
+%%%%%%%%%%%%%% long yah %%%%%%%%%%%%%%%%%
+
+arabchar(yah_p, f_iso, 15, 8, 3);
+yah_p_iso;
+endchar;
+
+arabchar(yah_p, f_end, 5, 8, 3);
+yah_p_end;
+endchar;
+
+arabchar(yah_p_s, f_iso, 15, 8, 5);
+yah_p_iso;
+x11 = x.r - 7dx; top y11 = y8; p_loop(11);
+endchar;
+
+arabchar(yah_p_s, f_end, 5, 8, 5);
+yah_p_end;
+x11 = x.r - 2dx; top y11 = y8; p_loop(11);
+endchar;
+
+%%%%%%%%%%%%%% yah with hook %%%%%%%%%%%%%%%%%
+
+arabchar(yah_h, f_iso, 15, 5, 5);
+yah_iso;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+arabchar(yah_h, f_end, 13, 5, 7);
+yah_end;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+%%%%%%%%%%%%%% hamza %%%%%%%%%%%%%%%%%
+
+arabchar(hamza_iso, f_iso, 5, 8, 0);
+x3 = x1 + 3.5dx = x2 + 3.5dx = x7; x8 = x2 + 0.2dx +0.3py;
+y3 - 3dy = y1 + dy = y2 - 2dy = y7 = y.r + dy; y8 = y2;
+lda := 0.5[pa,90]; x.m = 0.5[x1,x7];
+penpos7(px,pa); penpos3(0.3dy,90);
+penpos2(px,lda); penpos8(px,lda);
+fill z7l{z1-z7}..z2l{up}--z2r--z8r{down}..z7r{z7-z1}--cycle;
+fill z2r{(7dx,10dy)}..z3r--z3l..z8l{(-7dx,-10dy)}--z2l--cycle;
+draw z1..z7;
+endchar;
+
+endinput;
+
+%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%
+
diff --git a/language/arabic/arabtex/mfinput/xnshdia.mf b/language/arabic/arabtex/mfinput/xnshdia.mf
new file mode 100644
index 0000000000..7aa0af856f
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshdia.mf
@@ -0,0 +1,145 @@
+%%%%%%%%%%%%%%%%%%%%%%% xnshdia.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Extended NASKH Font
+% 15.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi;
+
+%%%%%%%%%%%%%% diacritics %%%%%%%%%%%%%%%%%
+
+diachar(damma, 4, 5);
+z1 = z.l; x2 = 3dx; y2 = y.r; x3 = x.r; y3 = 2dy;
+draw z1{dir 30}..z2{left}..z3{dir -45};
+endchar;
+
+diachar(fatha, 4, 2.5);
+draw z.l--z.r;
+endchar;
+
+diachar(sukun, 4, 4);
+draw (.5w, y.r){dir -45}..(.5w, y.l){left}..{dir 30}(.5w, y.r);
+endchar;
+
+diachar(dammatan, 5, 5);
+x4 = x.l; x5 = x1 = dx; y4 = y5 = 3dy; y1 = y.l;
+x2 - x.l = 3dx; y2 = y.r; x3 = x.r; y3 = 2dy;
+draw z1{dir 30}..z2{left}..z3{dir -45};
+draw z4..z5..z1{down};
+endchar;
+
+diachar(fathatan, 4, 4.5);
+x1 = x.r; x2 = x.l; y1 = y.r - 2dy; y2 = y.l + 2dy;
+draw z.l--z1; draw z2--z.r;
+endchar;
+
+diachar(hamza, 4, 5);
+x1 = x.r; x2 = x.l; x3 = x.r - dx;
+y1 = 2dy; y2 = 2.5dy; y3 = y.r - .5dy;
+draw z.l--z1;
+draw z3{left}..z2..z1{z1-z.l};
+endchar;
+
+diachar(shadda, 5, 3);
+z5 - z3 = z3 - z1 = z4 - z2 = whatever * (4dx, dy);
+z5 = z.r; x1 = x.l; y2 = y.l; x2 = .5[x1, x3];
+draw z1{down}..z2..z3{up}; draw z3{down}..z4..z5{up};
+endchar;
+
+diachar(quran_alif, 2, 5);
+x1 = x.l; x2 = .5[x.l, x.r];
+y1 = y.r; y2 = y.l;
+draw z1--z2;
+endchar;
+
+diachar(wasla, 6, 2);
+x1 - .4w = x2 - .7w = x4 - .7w = x5 = dx; x3 = x.r + dx;
+%x1 = .4w; x2 = x4 = .7w; x3 = x.r;
+y1 = y3 = h/2; y2 = y.l; y4 = y5 = y.r;
+draw z5..z1..z2..z3..z4..z1;
+endchar;
+
+diachar(madda, 6, 1.5);
+x.r - x2 = x1 - x.l = .1(x.r - x.l);
+y1 = y.r + dy; y3 = y2 = y.l; x3 = x.r;
+draw z.l--z1..z2..z3;
+endchar;
+
+diachar(ttah_dia, 4, 6);
+z1 = z.l; x2 = x4 = dx; y2 = dy; y4 = y.l + 4dy; x3 = x.r; y3 = 2dy;
+draw z1{dir 45}..z2..z3..z1{left}; draw z2..z4;
+endchar;
+
+arabchar(one_dot_up, 0, 2, 4, -2);
+one_dot(1);
+endchar;
+
+arabchar(two_dots_up, 0, 5, 4, -2);
+two_dots(1);
+endchar;
+
+arabchar(three_dots_up, 0, 5, 7, -2);
+three_dots(1);
+endchar;
+
+arabchar(two_dots_down, 0, 5, 2, 0);
+two_dots(1);
+endchar;
+
+arabchar(three_dots_down, 0, 5, 2, 3);
+three_dots_low(1);
+endchar;
+
+diachar(bow_dia, 4, 2);
+draw (x.l,y.r)..(.5w, y.l)..z.r;
+endchar;
+
+diachar(e_dia, 4, 2.5);
+draw z.l--(x.r,y.l);
+endchar;
+
+diachar(h_dia, 4, 5);
+x1 = x2 = x3 = .5w;
+y1 = y.r; y2 = y.l; y3 = .2[y2,y1];
+draw z1{z.l-z1}..z2{right}..z3{left};
+endchar;
+
+if false:
+diachar(hamz_s, 6, 4);
+%x1 = x.r; y1 = dy;
+%x2 = x.r - 3dx; y2 = 1.5dy;
+%x3 = x.r - dx; y3 = y.r - .5dy;
+x1 = x2 + 3dx = x3 + dx = x.r;
+y1 + 2.5dy = y2 + 2dy = y3 + .5dy = y.r;
+draw z.l{dir 60}..z1{dir 60};
+draw z3{left}..z2..z1{dir 30};
+endchar;
+fi
+
+diachar(hamz_s, 4, 5);
+x1 = x2 + 3dx = x3 + dx = x.r;
+y1 + 2.5dy = y2 + 2dy = y3 + .5dy = y.r;
+x4 + dx = x.l; y4 + 2dy = y.l;
+draw z4{dir 60}..z1{dir 30};
+draw z3{left}..z2..z1{dir 30};
+endchar;
+
+diachar(bars, 3, 5);
+x1 = x.l; x2 = x.r;
+y1 = y.r; y2 = y.l;
+draw z1--z.l; draw z2--z.r;
+endchar;
+
+diachar(roof, 5, 3);
+x1 = .5[x.l,x.r]; x2 = x.r;
+y1 = y.r; y2 = y.l;
+draw z.l--z1--z2;
+endchar;
+
+endinput;
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+
diff --git a/language/arabic/arabtex/mfinput/xnshdig.mf b/language/arabic/arabtex/mfinput/xnshdig.mf
new file mode 100644
index 0000000000..53cad31237
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshdig.mf
@@ -0,0 +1,100 @@
+%%%%%%%%%%%%%%%%%%%%% xnshdig.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Extended NASKH Font
+% 22.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi;
+
+%%%%%%%%%%%%%% digits %%%%%%%%%%%%%%%%%
+
+numchar("0");
+x1 + .6pl = x4 - .6pl = 5dx;
+y1 - .6pl = y4 + .6pl = bot y.l + 6dy;
+penpos1(2px,pa); penpos4(2px,pa);
+fill z1l--z1r--z4r--z4l--cycle;
+endchar;
+
+numchar("1");
+x1 = 4dx; x2 = 7dx; y1 - 11dy = bot y2 = bot y.l;
+draw z1..z2{down};
+endchar;
+
+numchar("2");
+x1 = 3dx; x2 = 6dx; x3 = 8dx;
+y3 - 11dy = y1 - 11dy = bot y2 = bot y.l;
+%draw z3..z1{(-4dx,7dy)};
+draw z3{down}..z1; draw z1..z2{down};
+endchar;
+
+numchar("3");
+x1 = 2dx; x2 = 4dx; x3 = 9dx; x4 = 6dx;
+y4 = y3 = y1; y1 - 11dy = bot y2 = bot y.l;
+draw z3{down}..z4; draw z4{down}..z1; draw z1..z2{down};
+endchar;
+
+numchar("4");
+x1 = x2 - .5dx = x3 - dx = 6dx; x4 = x5 = 2dx;
+y1 - 11dy = y2 - 6dy = bot y3 = y4 - 8dy = y5 - 2dy = bot y.l;
+bow(z1, z4, z2); bow(z2, z5, z3);
+endchar;
+
+numchar("5");
+x1 = x2 - 3dx = x3 + 2dx = 5dx;
+y1 - 6dy = y2 = y3; y3 - 4dy = bot y.l - dy;
+draw z1{(dx,-dy)}..z2..z3..z1{(dx,dy)};
+endchar;
+
+numchar("6");
+x1 + 4dx = x2 = x3 - 2dx = 6dx;
+y1 -10dy = y2 - 10dy = bot y3 = bot y.l;
+draw z1{(7dx,-4dy)}..z2; draw z2{down}..z3;
+endchar;
+
+numchar("7");
+x1 + 4dx = x2 = x3 - 4dx = 5dx;
+y1 - 10dy = y3 - 10dy = bot y2 = bot y.l;
+draw z1..z2{down}; draw z3..z2{down};
+endchar;
+
+numchar("8");
+x1 + 4dx = x2 = x3 - 4dx = 5dx;
+y2 - 10dy = bot y1 = bot y3 = bot y.l;
+draw z1..z2{up}; draw z3..z2{up};
+endchar;
+
+numchar("9");
+x1 = x2 + 4dx = x3 + 2dx = x4 - 2dx = 6dx;
+y1 - 7dy = y2 - 7dy = y3 - 11dy = bot y4 = bot y.l;
+draw z1..z2..z3..z1{down}..z4;
+endchar;
+
+%numchar(oct "122");
+numchar(f_iv);
+x2 - 2dx = x3 - 6dx = x4 - 7dx = x5 - 2dx = x1 = 2dx;
+%y4 +2dy = y3 - dy = y5 = y1; y1 - 11dy = bot y2 = bot y.l;
+y4 +2dy = y3 - dy = y5 = y1; y1 - 9dy = bot y2 = bot y.l;
+draw z3..z5..z4; draw z4{(-dx,-dy)}..z1; draw z1..z2{down};
+endchar;
+
+numchar(f_v);
+x1 = x2 - 2dx = x3 + 3dx = 5dx;
+y1 - 6dy = y2 = y3; y3 - 4dy = bot y.l - dy;
+x4 = x1; y4 = y3;
+draw z1{(dx,-dy)}..z2..z4;
+draw z4..z3..z1{(dx,dy)};
+endchar;
+
+numchar(f_vi);
+x2 - 2dx = x3 - 6dx = x4 - 7dx = x5 - 2dx = x6 = x1 = 2dx;
+%y4 +2dy = y3 - dy = y5 = y6 + 8dy = y1; y1 - 11dy = bot y2 = bot y.l;
+y4 +2dy = y3 - dy = y5 = y6 + 8dy = y1; y1 - 9dy = bot y2 = bot y.l;
+draw z3..z5..z4; draw z4{(-dx,-dy)}..z6;
+endchar;
+
+endinput;
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
diff --git a/language/arabic/arabtex/mfinput/xnshlig.mf b/language/arabic/arabtex/mfinput/xnshlig.mf
new file mode 100644
index 0000000000..229073966f
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshlig.mf
@@ -0,0 +1,547 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%% xnshlig.mf %%%%%%%%%%%%%%%%%%%%%%%%
+% Extended NASH Font
+% ligatures
+% 14.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi;
+
+%%%%%%%%%%%%%% alif after mim %%%%%%%%%%%%%%%%%
+
+arabchar(alif_spec_mim, f_end, 3, 15, 0); % mim-alif
+x1 + dx = x2 + .5dx = x.r; y1 = 13dy; y2 = y.r + .5dy;
+bow(z1, z2, z.r); serif(1);
+endchar;
+
+%%%%%%%%%%%%%% bah_high %%%%%%%%%%%%%%%%%
+
+arabchar(bah_high, f_beg, 5, 10, 0);
+x.m := x.m + 0.5dx;
+x1 - dx = x2 = x.m; y1 = y.l; y2 = y.l + 6dy;
+bow(z2, z1, z.l);
+endchar;
+
+arabchar(bah_high, f_mid, 6, 10, 0);
+x5 - dx = x6 = x.m;
+y6 = good.y (y.l + 6dy); y5 = y.l;
+z4 = .5[z6, z5];
+l_att(4); bow(z6, z5, z.r);
+endchar;
+
+%%%%%%%%%%%%%% bah before nun %%%%%%%%%%%%%%%%%
+
+arabchar(bah_spec, f_beg, 5, 10, 0);
+x4 - 2dx = x.ll; y4 - 2dy = y.ll;
+draw z4{(dx,-2dy)}..z.ll{left};
+r_con(ll); % measure for raising final nun, rah
+endchar;
+
+arabchar(bah_spec, f_mid, 5, 10, 0);
+x6 = x.l + 2dx; y6 = good.y (y.ll + 2dy);
+draw z6..z.ll{left}; draw z6{down}..z.r{right};
+%r_con(ll);
+endchar;
+
+%%%%%%%%%%%%%% bah over yah maqsoura %%%%%%%%%%%%%%%%%
+
+%arabchar(bah_spec_yah, f_beg, 5, 10, 7);
+arabchar(bah_spec_yah, f_beg, 5, 10, 2);
+x1 - 2dx = x2 - 3dx = x.l; y1 - 6dy = y2 - dy = y.l;
+draw z1{(4dx,-7dy)}..z2..z.l{(-6dx,-dy)};
+endchar;
+
+arabchar(bah_spec_yah, f_mid, 4, 8, 2);
+z1 = 0.5[z.ll, z.rr]; x2 = x.l; x4 = x.r;
+y2 = y4 = y.r + dy;
+draw z.ll..controls z1 and z2..z4;
+r_con(4);
+endchar;
+
+%%%%%%%%%%%%%% bah over middle mim %%%%%%%%%%%%%%%%%
+
+arabchar(bah_mid_mim, f_beg, 6, 10, 0);
+x1 = x.rr - dx; y1 = y.rr + dy;
+draw z.l{(-dx,dy)}..z1{(dx,-dy)};
+endchar;
+
+arabchar(bah_mid_mim, f_mid, 6, 10, 0);
+x1 = x.rr - 3dx; y1 = y.rr + 2dy;
+draw z.l{(-dx,dy)}..z1..z.rr{right};
+r_con(rr);
+endchar;
+
+%%%%%%%%%%%%%% bah over end mim %%%%%%%%%%%%%%%%%
+
+arabchar(bah_beg_mim, f_mid, 5, 8, 0);
+x1 = x.l + 7dx; y1 = y.r + dy;
+draw z.l{(dx,dy)}..z1{(dx,-6dy)};
+endchar;
+
+arabchar(bah_end_mim, f_mid, 8, 8, 4);
+x1 = x.r - 2dx; y1 = y.r + 2dy;
+draw z.l{(dx,dy)}..z1{(dx,-6dy)}..z.r{right};
+endchar;
+
+%%%%%%%%%%%%%% bah over gim %%%%%%%%%%%%%%%%%
+
+%arabchar(bah_spec_gim, f_mid, 12, 8, 7);
+arabchar(bah_spec_gim, f_mid, 12, 8, 0);
+x5 = x4 = x.r - 4dx; y4 - 4dy = y5 = y.r;
+z3 = 0.2[z5,z4]; z1 = 0.9[z1,z3]; z2 = 0.8[z.ll,z4];
+z6 = 0.5[z4, z.rr]; x7 = x5; x8 = x.r; y7 = y8 = y.r + dy;
+draw z.l..controls z1 and z2..z4..controls z6 and z7..z8;
+r_con(8);
+endchar;
+
+arabchar(bah_beg_gim, f_mid, 8, 8, 6);
+x4 - dx = x5 = x.r; y4 - 3dy = y5 - 5dy = y.r;
+z3 = 0.2[z.r,z5]; z1 = 0.9[z.l,z3]; z2 = 0.8[z.ll,z5];
+draw z.l..controls z1 and z2..z5..z4{(dx,-6dy)};
+endchar;
+
+%%%%%%%%%%%%%% bah over hah %%%%%%%%%%%%%%%%%
+
+arabchar(bah_end_hah, f_mid, 6, 8, 5);
+x1 = x.r - 2dx; y1 = y.r + 2dy;
+draw z.l{(dx,dy)}..z1..z.r{right};
+endchar;
+
+arabchar(bah_end_hah, f_beg, 6, 8, 0);
+x1 + 2dx = x.r; y1 = y.r;
+draw z.l{(4dx,7dy)}..z1;
+endchar;
+
+%%%%%%%%%%%%%% hhah-spec-macros %%%%%%%%%%%%%%%%%
+
+def hhah_spec_bar =
+x1 = x2 - 9dx = x.rr;
+y1 = y.rr; y2 = 0.5[y.r, y.rr];
+draw z1{right}..z2{right};
+r_con(rr);
+enddef;
+
+def hhah_spec_beg =
+hhah_spec_bar; draw z2{left}..z.l{left};
+enddef;
+
+def hhah_spec_iso =
+hhah_spec_bar; hhah_bow;
+enddef;
+
+if false:
+%%%%%%%%%%%%%% gim ligature %%%%%%%%%%%%%%%%%
+
+arabchar(gim_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+x.m := x.r + 2dx;
+one_dot(-3);
+endchar;
+
+arabchar(gim_spec, f_mid, 2, 10, 5);
+hhah_spec_beg;
+x.m := x.r + 4dx;
+one_dot(-4);
+endchar;
+fi
+
+%%%%%%%%%%%%%% hhah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(hhah_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+endchar;
+
+%arabchar(hhah_spec, f_mid, 2, 10, 5);
+arabchar(hhah_spec, f_mid, 2, 10, 0);
+hhah_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% khah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(khah_spec, f_end, 4, 15, 10);
+hhah_spec_iso;
+x.m := x.r;
+one_dot(10);
+endchar;
+
+%arabchar(khah_spec, f_mid, 2, 15, 5);
+arabchar(khah_spec, f_mid, 2, 15, 0);
+hhah_spec_beg;
+x.m := x.r;
+one_dot(10);
+endchar;
+
+if false:
+%%%%%%%%%%%%%% tsah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(tsah_spec, f_end, 4, 10, 10);
+hhah_spec_iso;
+x.m := x.r + 3dx;
+three_dots_low(-3);
+endchar;
+
+arabchar(tsah_spec, f_mid, 2, 10, 8);
+hhah_spec_beg;
+x.m := x.r + 4dx;
+three_dots_low(-4);
+endchar;
+fi
+
+%%%%%%%%%%%%%% closed hhah %%%%%%%%%%%%%%%%%
+
+arabchar(gim_close, f_beg, 12, 9, 0); % closed hhah
+%arabchar(gim_close, f_beg, 12, 8, 0); % closed hhah
+x1 = x2 - 9dx = x.l + 2dx; y1 - 4dy = y2 - 2dy = y.r;
+x3 = x7 = x1 + 7dx; y3 - 2dy = y7 = y.r;
+x4 = x1 - 2dx; y4 = y.l + 2dy;
+draw z4..z1{(8dx,3dy)}..z2{right}; draw z2{left}..z.l{left};
+endchar;
+
+%arabchar(gim_close, f_mid, 13, 8, 1); % closed hhah
+%hhah_mid; draw z3{down}..z.r{right};
+%endchar;
+
+%%%%%%%%%%%%%% sin_spec-macros %%%%%%%%%%%%%%%%%
+
+def sin_spec_wave =
+z5 - z.l = z3 - z2;
+x3 - x2 = 2(x3 - x5) = 2dx; x.m := x2;
+y5 = y2 - 2dy = y.l;
+draw z3..z5..z2; draw z2{down}..z.l{left};
+enddef;
+
+def sin_spec_beg =
+sin_spec_wave;
+enddef;
+
+def sin_spec_mid =
+sin_spec_wave; r_att(3);
+enddef;
+
+def sin_spec_mid =
+sin_spec_wave; draw z3{down}..z.r{right};
+enddef;
+
+%%%%%%%%%%%%%% short sin %%%%%%%%%%%%%%%%%
+
+arabchar(sin_spec, f_mid, 6, 6, 0);
+sin_spec_mid;
+endchar;
+
+arabchar(sin_spec, f_beg, 4, 6, 0);
+sin_spec_beg;
+endchar;
+
+if false:
+%%%%%%%%%%%%%% short shin %%%%%%%%%%%%%%%%%
+
+arabchar(shin_spec, f_mid, 6, 15, 0);
+sin_spec_mid; three_dots(8);
+endchar;
+
+arabchar(shin_spec, f_beg, 4, 15, 0);
+sin_spec_beg; three_dots(8);
+endchar;
+fi
+
+%%%%%%%%%%%%%% sad_spec-macros %%%%%%%%%%%%%%%%%
+
+def sad_spec_beg =
+x.m := x.m - dx;
+x1 = x2 - dx = x3 - 9dx = x.l;
+y1 + dy = y2 = y3 - 3dy = y.l;
+x8 = x2 + 3.5dx; y8 = y2 + 0.5dy;
+draw z1{(5dx,6dy)}..z3{(4dx,-7dy)}..tension 2..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% short sad %%%%%%%%%%%%%%%%%
+
+%arabchar(sad_spec, f_mid, 10, 10, 0);
+arabchar(sad_spec, f_mid, 10, 8, 0);
+sad_spec_beg; draw z.r{left}..z8;
+endchar;
+
+%arabchar(sad_spec, f_beg, 10, 10, 0);
+arabchar(sad_spec, f_beg, 10, 8, 0);
+sad_spec_beg;
+endchar;
+
+if false:
+%%%%%%%%%%%%%% short dad %%%%%%%%%%%%%%%%%
+
+arabchar(dad_spec, f_mid, 10, 10, 0);
+sad_spec_beg; draw z.r{left}..z8;
+one_dot(8);
+endchar;
+
+arabchar(dad_spec, f_beg, 10, 10, 0);
+sad_spec_beg; one_dot(8);
+endchar;
+fi
+
+%%%%%%%%%%%%%% kaf_spec-macros %%%%%%%%%%%%%%%%%
+
+def kaf_spec_beg =
+x1 = x.l + 9dx; x2 = x.l - 3.5dx; x4 = x.l + 8dx;
+%x1 = x.r - dx; x2 = x.l - 3.5dx; x4 = x.r - 2dx;
+%y4 = y.r; y1 = 14dy; y2 = 9dy; z3 = .4[z2, z4];
+y4 = y.l = y1 - 13dy = y2 - 8dy; z3 = .4[z2, z4];
+bow (z1, z2, z3);
+draw z3{z3 - z2}..z.l{left};
+enddef;
+
+%%%%%%%%%%%%%% short kaf %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_spec, f_mid, 10, 15, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+endchar;
+
+arabchar(kaf_spec, f_beg, 7, 15, 0);
+%arabchar(kaf_spec, f_beg, 10, 15, 0);
+kaf_spec_beg;
+endchar;
+
+%%%%%%%%%%%%%% short gaf %%%%%%%%%%%%%%%%%
+
+%arabchar(gaf_spec, f_mid, 10, 16, 0);
+arabchar(gaf_spec, f_mid, 10, 17, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+gaf_serif;
+endchar;
+
+%arabchar(gaf_spec, f_beg, 7, 16, 0);
+arabchar(gaf_spec, f_beg, 7, 17, 0);
+kaf_spec_beg;
+gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% short kaf with loop %%%%%%%%%%%%%%%%%
+
+arabchar(kaf_p_spec, f_mid, 10, 15, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+arabchar(kaf_p_spec, f_beg, 7, 15, 0);
+kaf_spec_beg;
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+endchar;
+
+%%%%%%%%%%%%%% short gaf with loop %%%%%%%%%%%%%%%%%
+
+%arabchar(gaf_p_spec, f_mid, 10, 15, 0);
+arabchar(gaf_p_spec, f_mid, 10, 16, 0);
+kaf_spec_beg; draw z3{z.r-z3}..z.r{right};
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+%arabchar(gaf_p_spec, f_beg, 7, 15, 0);
+arabchar(gaf_p_spec, f_beg, 7, 16, 0);
+kaf_spec_beg;
+z8 = .3[z1,z2]; x9 = x8; y9 = bot y8; p_loop(9);
+gaf_serif;
+endchar;
+
+%%%%%%%%%%%%%% lam_alif %%%%%%%%%%%%%%%%%
+
+def lam_alif_serif(suffix $) =
+x.$sa = x.$sb - 2dx = x.$;
+y.$sa + dy = y.$sb + 3dy = y.$;
+draw z.$--z.$sa--z.$sb;
+enddef;
+
+arabchar(lam_alif_end, 0, 12, 15, 0);
+x1 + 3dx = x2 + 2dx = x.r;
+x3 + 8dx = x4 = x5 + 8dx = x6 + 2dx = x1;
+y1 = 12dy; y2 = y3 + 2dy = y.r; y4 = y6 + dy = 4dy; y5 = 11dy;
+z7 = 0.7[z1,z2]; draw z1---z7..z.r{right};
+bow(z1, z4, z3);
+draw z5{z4 - z5}..z6; lam_alif_serif(5);
+endchar;
+
+arabchar(lam_alif_iso, 0, 11, 15, 0);
+x1 + 2dx = x4 + 2dx = x3 + 6dx = x2 = x5 + 10dx = x.r;
+y1 = 13dy; y4 = 3dy; y3 = y2 = y.r; y5 = 12dy;
+bow(z1, z4, z3);
+bow(z5, z2, z3);
+serif(1); lam_alif_serif(5);
+endchar;
+
+%%%%%%%%%%%%%% lam in 'allah' %%%%%%%%%%%%%%%%%
+
+arabchar(lam_spec_low, f_mid, 5, 11, 0);
+x1 + .5dx = x2 - .5dx = x.m; y1 = 9dy; y2 = y.r;
+bow (z1, z2, z.r); bow (z1, z2, z.l);
+endchar;
+
+%%%%%%%%%%%%%% lam over yah %%%%%%%%%%%%%%%%%
+
+%arabchar(lam_spec_yah, f_mid, 7, 15, 7);
+arabchar(lam_spec_yah, f_mid, 7, 15, 0);
+x4 = x.r; x1 = x2 - dx = x.r - 3dx;
+y1 - 11dy = y2 = y4 = y.r + 2dy;
+z3 = .2[z2, z1];
+bow (z1, z3, z.l); draw z1---z3..z4{right};
+r_con (4);
+endchar;
+
+%arabchar(lam_on_gim, f_mid, 6, 10, 5);
+arabchar(lam_on_gim, f_mid, 6, 12, 0);
+x1 = x2 - dx = x.l + 4dx;
+y1 = 9dy; y2 = y.l; z3 = 0.7[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+%arabchar(lam_long, f_beg, 6, 15, 3);
+arabchar(lam_long, f_beg, 6, 15, 0);
+x1 = x2 - dx = x.l + 4dx;
+y1 = 12dy; y2 = y.l; z3 = 0.8[z1, z2];
+draw z1..z3{z2 - z3}..z.l{left}; serif(1);
+endchar;
+
+%%%%%%%%%%%%%% lam over mim and hah %%%%%%%%%%%%%%%%%
+
+arabchar(lam_spec_mim, f_beg, 3, 15, 0);
+x1 + dx = x2 + .5dx = x.l; y1 = 13dy; y2 = y.l + .5dy;
+bow(z1, z2, z.l); serif(1);
+endchar;
+
+arabchar(lam_spec_hah, f_beg, 3, 10, 0);
+x1 + dx = x2 + .5dx = x.l; y1 - 8dy = y2 - .5dy = y.l;
+bow(z1, z2, z.l); serif(1);
+endchar;
+
+%%%%%%%%%%%%%% mim ligatures %%%%%%%%%%%%%%%%%
+
+%arabchar(mim_spec, f_end, 5, 5, 13); % final mim connected from above
+arabchar(mim_spec, f_end, 5, 5, 8); % final mim connected from above
+x2 + 6dx = x4 + 4dx = x5 + 3.5dx = x6 + 4.5dx = x1;
+y2 + dy = y4 + 11dy = y5 - 2.5dy = y6 - 1.5dy = y1;
+z5 = z.r; bow(z4,z2,z1); draw z5--z1;
+endchar;
+
+arabchar(mim_spec, f_mid, 4, 10, 0); % medial mim after lam
+%x2 = x.r = x1 - 2dx; y1 = y.r = y2 - dy;
+x2 = x.r - dx = x1 - 2dx; y1 = y.r = y2 - dy;
+draw z.l{right}..z2..z1;
+r_con(2);
+endchar;
+
+arabchar(mim_spec, f_beg, 8, 10, 5); % mim over gim
+x2 = x1 = x3 + 2dx = x.l + 7dx;
+y2 = y1 - 2dy = y3 - dy = y.l + 2dy;
+draw z3..z1..z2{left}..z.l;
+endchar;
+
+arabchar(mim_spec_mim, f_beg, 6, 10, 0); % mim over mim
+x2 = x1 = x3 + 2dx = x.l + 3dx;
+y2 = y1 - 2dy = y3 - dy = y.l + 5dy;
+draw z3..z1..z2{left}..z.l{(dx,-dy)};
+endchar;
+
+arabchar(mim_spec_high, f_mid, 5, 10, 0); % mim after gim etc
+x1 = x2 - dx = x3 + dx = x.rr;
+y1 = y.rr; y2 = y3 - 3dy = y.l;
+%x1 = x2 - dx = x3 + 2dx = x.rr;
+%y1 = y.rr; y2 = y3 - 2dy = y.l;
+draw z3..tension 2..z2..tension 2..z1..z3..z.l{left};
+%draw z3..tension 2..z2..tension 1.5..z1..z3..z.l{left};
+r_con(1);
+endchar;
+
+%arabchar(mim_spec_long, f_mid, 9, 10, 0); % long mim after lam
+arabchar(mim_spec_long, f_mid, 9, 5, 0); % long mim after lam
+%x2 = x.r = x1 - 2dx; y1 = y.r = y2 - dy;
+x2 = x.r - dx = x1 - 2dx; y1 = y.r = y2 - dy;
+draw z.l{right}..z2..z1;
+r_con(2);
+endchar;
+
+arabchar(mim_spec_alif, f_mid, 8, 8, 3); % mim before alif
+x1 = x2 = x.l + 5dx; y1 + 3dy = y2 - 3dy = y.r;
+z3 = .5[z2, z.r];
+draw z.l{(4dx,-7dy)}..z1{(7dx,-4dy)};
+draw z1{(-7dx,4dy)}..z2{right}..z3{(dx,-6dy)}..z.r{right};
+endchar;
+
+arabchar(mim_lam_gim, f_mid, 6, 10, 2); % lam_mim over gim
+x1 - 2dx = x2 = x.r; y1 + dy = y2 = y.r + 2dy;
+draw z.l{(dx,dy)}..z2..z1;
+r_con(2);
+endchar;
+
+%%%%%%%%%%%%%% hah ligature %%%%%%%%%%%%%%%%%
+
+arabchar(hah_spec, f_end, 5, 8, 0);
+x1 + 2dx = x.r; y1 - 2dy = y.r;
+draw z.r{left}..z1..z.l{(-dx,-dy)};
+endchar;
+
+%arabchar(hah_spec, f_mid, 6, 5, 6); % sharp medial hah
+arabchar(hah_spec, f_mid, 6, 8, 6); % sharp medial hah
+x1 = x2 = x3 + 1.5dx = x.r - 2dx;
+y1 + 6dy = y2 - 2dy = y.r; y3 = y1 + 2dy;
+draw z1{up}..z.r{(dx,dy)};
+bow (z1, z3, z2); l_att(2);
+endchar;
+
+arabchar(hah_spec, f_beg, 5, 8, 2);
+x1 = x.r; x2 - 2dx = x.l;
+y1 = y2 = y.r + 2dy;
+draw z1..z2{up}; draw z2{down}..z.l{left};
+endchar;
+
+arabchar(hah_spec_lam, f_mid, 5, 15, 0); % hah after lam
+x2 = x3 + 1.5dx = x4 - 1.5dx = x.l + 3dx;
+x6 + dx = x5 - 3dx = x.l + 8dx;
+y2 = 2dy; y3 = y4 = 4dy; y6 = dy;
+draw z.rr{curl 0}..tension 1.5..z6..tension 2..z2..z3..z4..z2..z.l{left};
+r_con(rr);
+endchar;
+
+%%%%%%%%%%%%%% yah after sin %%%%%%%%%%%%%%%%%
+
+arabchar(yah_spec, f_end, 9, 5, 7); % final yah connected from above
+x.m := x.m + dx; x2 = x.r + 4dx;
+x3 = x.m; lft x4 = lft x5 + 1.5dx - pl = x.l;
+y2 - dy = y4 = y5 - 3dy = y3 + 3dy = -3dy;
+draw z.r{(8dx,-3dy)}..tension 1.5
+..z2{down}..tension 1.5..z3{left}..z4{up}..z5;
+endchar;
+
+arabchar(yah_h_spec, f_end, 11, 5, 7); % final yah with hook
+x.m := x.m + 2dx; x2 = x.r + 4dx;
+x3 = x.m; lft x4 = x5 - dx = x.r - 9dx;
+y2 - dy = y4 = y5 - 3dy = y3 + 3dy = -3dy;
+draw z.r{(8dx,-3dy)}..tension 1.5
+..z2{down}..tension 1.5..z3{left}..z4{up}..z5;
+x7 = x5 - 3dx; y7 = y5 - 5dy; draw z5--z7;
+endchar;
+
+%%%%%%%%%%%%%% ties %%%%%%%%%%%%%%%%%
+
+%arabchar(mm_to_b, f_mid, 6, 5, 6);
+%x1 = x.rr - 3dx; y1 = y.r + 2dy;
+%x2 = x.l; y.l - y2 = y.rr - y.r;
+%draw z2{(-dx,dy)}..z1..z.r{right};
+%r_con(rr);
+%endchar;
+
+arabchar(er_to_s, f_mid, 5, 5, 0);
+x1 + dx = x.l; x5 = x.r - 2dx;
+y1 - .5dy = y5 - 2dy = y.r;
+draw z1--z5; draw z5..z.r{right};
+endchar;
+
+arabchar(g_to_mb, f_mid, 8, 8, 6);
+z3 = 0.2[z.r,z.rr]; z1 = 0.9[z1,z3]; z2 = 0.8[z.ll,z.rr];
+draw z.l..controls z1 and z2..z.rr;
+endchar;
+
+endinput;
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/language/arabic/arabtex/mfinput/xnshspec.mf b/language/arabic/arabtex/mfinput/xnshspec.mf
new file mode 100644
index 0000000000..97095b08d3
--- /dev/null
+++ b/language/arabic/arabtex/mfinput/xnshspec.mf
@@ -0,0 +1,202 @@
+%%%%%%%%%%%%%%%%%%%%%%% xnshspec.mf %%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Extended NASH Font
+% special characters
+% 15.07.98
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+if unknown xnshbase: input xnshbase fi;
+
+%%%%%%%%%%%%%% very special characters %%%%%%%%%%%%%%%%%
+
+arabchar(space_spec, f_beg, 5, 8, 6);
+endchar;
+
+arabchar(space_spec, f_mid, 0, 8, 6);
+endchar;
+
+arabchar(tatwil, f_iso, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_beg, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_mid, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(tatwil, f_end, 5, 5, 0);
+draw z.r--z.l;
+endchar;
+
+arabchar(block, f_iso, 10, 12, 0); % block isoliert
+x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_beg, 10, 12, 0); % block initial
+x1 = x2 = x.l + dx; x3 = x4 = x.m;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_mid, 10, 12, 0); % block medial
+x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 5dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+arabchar(block, f_end, 10, 12, 0); % block final
+x1 = x2 = x.m; x3 = x4 = x.r - dx;
+%x1 = x2 = x.l + dx; x3 = x4 = x.r - dx;
+y1 = y4 = 10dy; y2 = y3 = 0;
+fill z1--z2--z3--z4--cycle;
+endchar;
+
+%%%%%%%%%%%%%% special characters %%%%%%%%%%%%%%%%%
+
+arabchar(".", 0, 2, 2, -1.5);
+x1 = x.m; y1 = dy;
+put_dot(1);
+endchar;
+
+arabchar(",", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = 6dy; y2 = dy;
+%x1 = x2 = x.m; y1 = 10dy; y2 = 5dy;
+draw z1{(-dx,-dy)}..z2{right};
+endchar;
+
+arabchar(";", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = 10dy; y2 = 5dy;
+draw z1{(-dx,-dy)}..z2{right};
+one_dot(1);
+endchar;
+
+arabchar(":", 0, 4, 10, 0);
+x1 = x2 = x.m; y1 = dy; y2 = 6dy;
+put_dot(1); put_dot(2);
+endchar;
+
+arabchar("!", 0, 4, 15, 0);
+x1 = x2 = x3 = x.m; y1 = dy; y2 = 4dy; y3 = 13dy;
+%x2a - x2 = x2 - x2b = .5dx; x3a - x3 = x3 - x3b = dx;
+x2a - x2 = x2 - x2b = .3px; x3a - x3 = x3 - x3b = .6px;
+y2a = y2b = y2; y3a = y3b = y3;
+put_dot(1);
+fill z2a--z3a--z3b--z2b--cycle;
+endchar;
+
+arabchar("?", 0, 7, 15, 0);
+x1 - 2dx = x3 + 2dx = x2 = x4 = x.m;
+y1 = y3 = 10dy; y2 = 13dy; y4 = 4dy;
+draw z1..z2{left}..z3..z4{(-4dx,-11dy)};
+one_dot(1);
+endchar;
+
+arabchar("$", 0, 6, 10, 5);
+%x1 = x2 = x.m; x3 = x5 = x.m + 2dx; x4 = x6 = x.m - 2dx;
+x1 = x2 = x.m; x3 = x5 = x.m + 3dx; x4 = x6 = x.m - 3dx;
+y1 = 8dy; y2 = -6dy; y3 = y4 = 3dy; y5 = y6 = -dy;
+draw z1--z2; draw z3..z4..z5..z6;
+endchar;
+
+arabchar("*", 0, 8, 10, 0);
+x1 = x2 = x.m; x3 = x5 = x.m + 3dx; x4 = x6 = x.m - 3dx;
+y1 = 7dy; y3 = y6 = 5dy; y4 = y5 = dy; y2 = -dy;
+draw z1--z2; draw z3--z4; draw z5--z6;
+endchar;
+
+arabchar("%", 0, 14, 10, 5);
+x1 = x5 = x6 = x.m + 4dx;
+x2 = x3 = x4 = x.m - 4dx;
+y1 = y3 = 8dy; y4 = 3dy; y5 = dy; y2 = y6 = -4dy;
+draw z3..z4..cycle; draw z5..z6..cycle;
+pickup dia_pen; draw z1--z2;
+endchar;
+
+arabchar("/", 0, 10, 10, 5);
+pickup dia_pen;
+x1 + 4dx = x2 - 4dx = x.m;
+y2 = 9dy; y1 = -6dy;
+draw z1--z2;
+endchar;
+
+arabchar(rquotes, 0, 8, 10, 5); % ``
+x1 = x3 = x2 + 2dx = x.m - dx;
+x4 = x6 = x5 + 2dx = x.m + 3dx;
+y1 = y4 = 5dy; y2 = y5 = dy; y3 = y6 = -3dy;
+draw z1..z2..z3; draw z4..z5..z6;
+endchar;
+
+arabchar(lquotes, 0, 8, 10, 5); % ''
+x1 = x3 = x2 - 2dx = x.m + dx;
+x4 = x6 = x5 - 2dx = x.m - 3dx;
+y1 = y4 = 5dy; y2 = y5 = dy; y3 = y6 = -3dy;
+draw z1..z2..z3; draw z4..z5..z6;
+endchar;
+
+arabchar("=", 0, 16, 10, 0);
+x5 = x7 = x.m - 7dx; x6 = x8 = x.m + 7dx;
+y5 = y6 = 3dy; y7 = y8 = -dy;
+draw z5--z6; draw z7--z8;
+endchar;
+
+arabchar("+", 0, 10, 10, 0);
+x1 = x2 = x3 + 4dx = x4 - 4dx = x.m;
+y1 = 5dy; y2 = -3dy; y3 = y4 = dy;
+draw z1--z2; draw z3--z4;
+endchar;
+
+arabchar("-", 0, 8, 10, 0);
+x1 + 3dx = x2 - 3dx = x.m;
+y1 = y2 = dy;
+%y1 = y2 = 4dy;
+draw z1--z2;
+endchar;
+
+arabchar("#", 0, 16, 10, 5);
+x1 = x4 = x3 - 4dx = x2 + 4dx = x.m;
+x5 = x7 = x.m - 7dx; x6 = x8 = x.m + 7dx;
+y1 = y3 = 7dy; y2 = y4 = -7dy;
+y5 = y6 = 2dy; y7 = y8 = -2dy;
+draw z5--z6; draw z7--z8;
+pickup dia_pen;
+draw z1--z2; draw z3--z4;
+endchar;
+
+arabchar("(", 0, 8, 10, 5);
+x1 = x2 = x.m + 3dx; x3 = x.m - 3dx;
+top y1 = 10dy; bot y2 = -7dy; y3 = .5[y1,y2];
+%top y1 = 15dy; bot y2 = -7dy; y3 = 4dy;
+draw z1..z3..z2;
+endchar;
+
+arabchar(")", 0, 8, 10, 5);
+x1 = x2 = x.m - 3dx; x3 = x.m + 3dx;
+top y1 = 10dy; bot y2 = -7dy; y3 = .5[y1,y2];
+draw z1..z3..z2;
+endchar;
+
+arabchar("[", 0, 6, 10, 5);
+x1 = x2 = x.m + 2dx; x3 = x4 = x.m - 2dx;
+y1 = y3 = 9dy; y2 = y4 = -6dy;
+%y1 = y3 = 14dy; y2 = y4 = -6dy;
+draw z1--z3--z4--z2;
+endchar;
+
+arabchar("]", 0, 6, 10, 5);
+x1 = x2 = x.m + 2dx; x3 = x4 = x.m - 2dx;
+y1 = y3 = 9dy; y2 = y4 = -6dy;
+draw z3--z1--z2--z4;
+endchar;
+
+endinput;
+%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%
+
+