summaryrefslogtreecommitdiff
path: root/language/bengali/pandey
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/bengali/pandey
Initial commit
Diffstat (limited to 'language/bengali/pandey')
-rw-r--r--language/bengali/pandey/README11
-rw-r--r--language/bengali/pandey/beng.c1153
-rw-r--r--language/bengali/pandey/beng.sty51
-rw-r--r--language/bengali/pandey/doc/bengdoc.bn731
-rw-r--r--language/bengali/pandey/doc/bengdoc.pdfbin0 -> 86123 bytes
-rw-r--r--language/bengali/pandey/doc/example.bn55
-rw-r--r--language/bengali/pandey/doc/example.pdfbin0 -> 38130 bytes
-rw-r--r--language/bengali/pandey/manifest.txt28
-rw-r--r--language/bengali/pandey/mf/bn.mf17
-rw-r--r--language/bengali/pandey/mf/bnbanjon.mf508
-rw-r--r--language/bengali/pandey/mf/bndigit.mf86
-rw-r--r--language/bengali/pandey/mf/bnjuk.mf980
-rw-r--r--language/bengali/pandey/mf/bnkaar.mf90
-rw-r--r--language/bengali/pandey/mf/bnlig.mf121
-rw-r--r--language/bengali/pandey/mf/bnligtbl.mf36
-rw-r--r--language/bengali/pandey/mf/bnmacro.mf668
-rw-r--r--language/bengali/pandey/mf/bnmisc.mf33
-rw-r--r--language/bengali/pandey/mf/bnpunct.mf203
-rw-r--r--language/bengali/pandey/mf/bnr10.mf29
-rw-r--r--language/bengali/pandey/mf/bnsl10.mf30
-rw-r--r--language/bengali/pandey/mf/bnswar.mf162
-rw-r--r--language/bengali/pandey/mf/xbnr10.mf29
-rw-r--r--language/bengali/pandey/mf/xbnsl10.mf30
-rw-r--r--language/bengali/pandey/mf/xbnsupp.mf80
-rw-r--r--language/bengali/pandey/tfm/bnr10.tfmbin0 -> 1500 bytes
-rw-r--r--language/bengali/pandey/tfm/bnsl10.tfmbin0 -> 1500 bytes
-rw-r--r--language/bengali/pandey/tfm/xbnr10.tfmbin0 -> 328 bytes
-rw-r--r--language/bengali/pandey/tfm/xbnsl10.tfmbin0 -> 328 bytes
-rw-r--r--language/bengali/pandey/ubn.fd36
-rw-r--r--language/bengali/pandey/ubnx.fd36
30 files changed, 5203 insertions, 0 deletions
diff --git a/language/bengali/pandey/README b/language/bengali/pandey/README
new file mode 100644
index 0000000000..3f12a17d6f
--- /dev/null
+++ b/language/bengali/pandey/README
@@ -0,0 +1,11 @@
+This is a package for typesetting Bengali.
+
+Copyright 2002 Anshuman Pandey
+The entire package is released under the terms of the
+LaTeX Project Public License, version 1, or (at your option) any later
+version. The file manifest.txt gives the list of files included in the
+package.
+
+Contact information:
+ http://www-personal.umich.edu/~pandey/
+ (see also the umich.edu directory search)
diff --git a/language/bengali/pandey/beng.c b/language/bengali/pandey/beng.c
new file mode 100644
index 0000000000..18b69463b9
--- /dev/null
+++ b/language/bengali/pandey/beng.c
@@ -0,0 +1,1153 @@
+/***************************************************************************/
+/* */
+/* beng.c v2.0 */
+/* */
+/* Source code for "Bengali for TeX" preprocessor. */
+/* Anshuman Pandey <apandey@u.washington.edu>, 2002/03/27 */
+/* */
+/* Based on Revision 1.1 1996/03/05 of skt.c preprocessor developed by */
+/* Charles Wikner <wikner@nacdh4.nac.ac.za> */
+/* */
+/***************************************************************************/
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+/* DECLARE FUNCTIONS */
+void exit (int);
+void search (void);
+void write_outbuf(void);
+void write_line (char *);
+char * str_find (char *, char *);
+void getline (void);
+char * command (char *);
+void error (char *, int);
+void process (void);
+void chrcat (char *, char);
+void bncont (void);
+void bnword (void);
+void single (char);
+void frontac (void);
+void backac (void);
+void sam_warning (void);
+void samyoga (void);
+
+FILE *infile, *outfile, *fopen();
+char infilename[80];
+char outfilename[80];
+
+#define TRUE 1
+#define FALSE 0
+
+unsigned char bnline; /* flag TRUE if there is any Bengali on this line */
+unsigned char bnmode; /* flag TRUE while within {\bn } */
+unsigned char eof_flag; /* flag True when end of file detected */
+unsigned char ac_flag; /* flag TRUE while processing Bengali vowels */
+unsigned char roman_flag; /* flag TRUE if previous output was Roman string */
+
+int nest_cnt; /* '{' increments, '}' decrements, while in \bn */
+int err_cnt; /* incremented by any error while in \bn */
+#define err_max 10 /* after err_max errors, program aborts */
+int line_cnt; /* line number of current input line */
+
+char inbuf[133]; /* input file line buffer of text being processed */
+char *i_ptr; /* general pointer to input buffer */
+char outbuf[512]; /* output file line buffer of text processed */
+char *o_ptr; /* general pointer to output buffer */
+
+unsigned char cont_end; /* flag TRUE when line ends with %-continuation */
+unsigned char cont_begin; /* flag TRUE when line begins after %-continuation */
+unsigned char hal_flag; /* flag TRUE when hal_type detected in syllable */
+unsigned char ac_char; /* storage for working vowel character */
+unsigned char pre_ra; /* storage/flag for 'r' at beginning of samyoga */
+char ac_hook; /* vowel diacritic code */
+char bnbuf[255]; /* storage for Bengali in internal code */
+char *s_ptr; /* general pointer to Bengali buffer */
+char *old_sptr; /* points to samyoga start; used by warning message */
+char work[80]; /* general scratchpad */
+char *w_ptr; /* general pointer to work buffer */
+char tmp[80]; /* temporary buffer for previous syllable */
+int ra; /* post_ra type to use with this character */
+int ya; /* post_ya type to use with this character */
+int post_ra; /* flag to append ra to samyoga */
+int post_ya; /* flag to append ya to samyoga */
+int hasanta; /* flag to add hasanta to samyoga (i.e. no vowel) */
+int hr_flag; /* flag indicates vowel picked up in samyoga (h.r) */
+
+
+/***************************************************************************/
+/* Function: main() */
+/***************************************************************************/
+
+main(argc,argv)
+int argc;
+char *argv[];
+{ char *p; int k;
+
+ /* Initialization */
+
+ bnmode = eof_flag = FALSE;
+ nest_cnt = err_cnt = 0;
+ line_cnt = 0;
+ i_ptr = inbuf; *i_ptr = '\0';
+ s_ptr = bnbuf; *s_ptr = '\0';
+ o_ptr = outbuf; *o_ptr = '\0';
+
+ /* handle command-line options */
+
+ k=0;
+ if (argc>1) strcpy(infilename,argv[1]);
+ if (strcmp(infilename,"-h")==0)
+ { k=1;
+ strcpy(infilename,"");
+ printf("Preprocessor for \"Bengali for TeX\" package, v2.0, 2002.03.27\n");
+ printf("Anshuman Pandey <apandey@u.washington.edu>\n");
+ printf("Syntax: beng infile[.bn] [outfile[.tex]]\n");
+ exit(0);
+ }
+
+ /* then get file names */
+ switch(argc-k)
+ { case 3: strcpy(infilename,argv[1+k]);
+ strcpy(outfilename,argv[2+k]);
+ break;
+ case 2: strcpy(infilename,argv[1+k]);
+ strcpy(outfilename,"");
+ break;
+ default: strcpy(infilename,"");
+ while(strlen(infilename) == 0)
+ { printf("Input file: "); gets(infilename); }
+ printf("Output file: ");
+ gets(outfilename);
+ }
+
+ if (strlen(outfilename) == 0)
+ { strcpy (outfilename,infilename); /* default output file name */
+ p = strchr(outfilename,'.');
+ if (p != 0) *p = '\0'; /* delete out file name extension */
+ }
+ p = strchr(infilename,'.');
+ if (p == 0) strcat(infilename,".bn"); /* default input file extension */
+ if ((infile=fopen(infilename,"r")) == NULL)
+ { printf("Cannot open file %s\n",infilename); exit(1); }
+ getline(); if (eof_flag)
+ { printf("Input file %s is empty.\n",infilename); exit(1); }
+ p = strchr(outfilename,'.');
+ if (p == 0)
+ { if (inbuf[0] == '@') strcat(outfilename,".dn");
+ else strcat(outfilename,".tex"); /* set default output file extension */
+ }
+ if ((outfile=fopen(outfilename,"w")) == NULL)
+ { printf("Cannot open output file %s\n",outfilename); exit(1); }
+
+ /* Normal main loop */
+
+ while(eof_flag == 0)
+ { while(!bnmode && !eof_flag) search(); /* search for \bn command */
+ while( bnmode && !eof_flag) process(); /* process bengali text */
+ if (err_cnt >= err_max)
+ { printf("Too many (%d) errors, aborting program\n",err_cnt); break; }
+ }
+ if ((err_cnt < err_max) && (nest_cnt != 0))
+ printf("Brace mismatch within \\bn = %d\n",nest_cnt);
+ fclose(infile);
+ fclose(outfile);
+ exit(1);
+
+}
+
+
+/***************************************************************************/
+/* Function: search() */
+/* */
+/* Search inbuf for '{\bn', getting more input lines as necessary */
+/* until string found or end of file, copying input to output; if */
+/* the string is found but command not recognised, it is treated as */
+/* ordinary text; if valid command i_ptr points to first sanskrit */
+/* char after command, and sets bnmode TRUE. */
+/***************************************************************************/
+
+void search(void)
+{
+unsigned char c;
+char *p,*q;
+ while (eof_flag == 0)
+ { p = str_find(i_ptr,"{\\bn");
+ if (p == 0)
+ { if (bnline == TRUE) { strcat(outbuf,i_ptr); write_outbuf(); }
+ else { write_line(inbuf); o_ptr = outbuf; *o_ptr = '\0'; }
+ getline();
+ continue;
+ }
+ q = i_ptr; i_ptr = p;
+ if ((p = command(p)) == 0) /* test command string \bn */
+ { p = i_ptr; i_ptr = q; /* if bad \bn command */
+ c = *++p; *p = '\0'; /* copy partial line, and search more */
+ strcat(outbuf,i_ptr); *p = c; i_ptr = p; continue;
+ }
+ i_ptr = q;
+ nest_cnt++; c = *p; *p = '\0'; /* skip over '{\bn' */
+ strcat(outbuf,i_ptr); /* append partial line to outbuf */
+ *p = c; i_ptr = p;
+ bnmode = TRUE; bnline = TRUE; /* now comes the fun! */
+ break;
+ }
+}
+
+
+/***************************************************************************/
+/* Function: write_outbuf() */
+/* */
+/* Write outbuf in 80 character lines */
+/***************************************************************************/
+
+void write_outbuf(void)
+{
+char c, d, e;
+ while(1)
+ { c = '\0';
+ if (strlen(outbuf) < 81) { write_line(outbuf); break; }
+ for (o_ptr = outbuf + 78; o_ptr > outbuf + 50; o_ptr--)
+ { if (*o_ptr == ' ') break; }
+ if (*o_ptr != ' ') { for (o_ptr = outbuf+78; o_ptr > outbuf + 50; o_ptr--)
+ if ((*o_ptr=='\\') && (*(o_ptr-1)!='\\')) break;
+ if (o_ptr == outbuf+50) o_ptr = outbuf+78;
+ c = *o_ptr; *o_ptr++ = '%'; d = *o_ptr;
+ }
+ *o_ptr++ = '\n'; e = *o_ptr; *o_ptr = '\0';
+ write_line(outbuf);
+ *o_ptr = e;
+ if (c!='\0') { *--o_ptr = d; *--o_ptr = c; } /* restore displaced chars */
+ strcpy(outbuf,o_ptr);
+ }
+ o_ptr = outbuf;
+ *o_ptr = '\0';
+}
+
+
+/***************************************************************************/
+/* Function: write_line() */
+/* */
+/* Write p-string to output device */
+/***************************************************************************/
+
+void write_line(char *p)
+{
+ if (err_cnt == 0) fputs(p,outfile);
+}
+
+
+/***************************************************************************/
+/* Function: str_find() */
+/* */
+/* Find first occasion of string *str within *buf before '%' char; */
+/* return pointer first char of str within buf, else 0. */
+/***************************************************************************/
+
+char * str_find(char *buf, char *str)
+{ char *p, *x;
+ p = strstr(buf,str);
+ if (p == 0) return(0);
+ x = strchr(buf,'%');
+ if ((x != 0) && (p > x)) return(0);
+ return(p);
+}
+
+
+/***************************************************************************/
+/* Function: getline() */
+/* */
+/* Get another line from input file; reset i_ptr, increments */
+/* line_cnt, and sets eof_flag if EOF. */
+/***************************************************************************/
+
+void getline(void)
+{
+char *p;
+ i_ptr = inbuf;
+ *i_ptr = '\0';
+ line_cnt++;
+ if (fgets(inbuf,133,infile) == NULL) eof_flag = TRUE;
+ if (bnmode == FALSE) bnline = FALSE;
+}
+
+
+/***************************************************************************/
+/* Function: command() */
+/* */
+/* Check for valid \bn command; if invalid command, print error message */
+/***************************************************************************/
+
+char * command(char *p)
+{ p += 4; /* skip over '{\bn' */
+ if (*p++ != ' ') p = 0;
+ if (p == 0) error("Unrecognised command string",7);
+ return(p);
+}
+
+
+/***************************************************************************/
+/* Function: error() */
+/* */
+/* Print out error message, including string *s and 'n' characters */
+/* of inbuf. */
+/***************************************************************************/
+
+void error(char *s, int n)
+{ char err_str[80]; int j;
+ if (++err_cnt <= err_max)
+ { if (n > 0) { for (j=0; j<n; j++) err_str[j] = *(i_ptr+j);
+ err_str[j] = '\0';
+ }
+ if (n == 0) { strcpy(err_str,"oct(");
+ chrcat(err_str,'0' + (*i_ptr/64));
+ chrcat(err_str,'0' + (*i_ptr/8));
+ chrcat(err_str,'0' + (*i_ptr & 7));
+ strcat(err_str,")");
+ }
+ if (n < 0) { err_str[0] = '\0'; }
+ }
+ printf("Line %4d Error: %s %s\n",line_cnt,s,err_str);
+}
+
+
+/***************************************************************************/
+/* Function: process() */
+/* */
+/* Process input text within {\bn, converting to internal format in bnbuf */
+/***************************************************************************/
+
+#define ISAC(c) (((strchr("aAiIuUxeEoO",c) != 0) && c) ? TRUE : FALSE)
+
+/* wWX removed from the definition of ISAC above (.R .l .L) */
+
+void process(void)
+{ int cap_flag, underscore;
+unsigned char *i, c, d;
+#define CF ac_flag=underscore=cap_flag=roman_flag=FALSE
+#define CC CF; continue
+#define CR ac_flag=underscore=cap_flag=FALSE;
+#define CI i_ptr++; CC
+
+ CF;
+ while(1)
+ { if (eof_flag) return;
+ if (err_cnt >= err_max)
+ { bnmode = FALSE; return; }
+ c = *i_ptr; d = *(i_ptr+1);
+/* END OF LINE */
+ if ((c == '\0') || (c == '\n'))
+ { bnword(); strcat (outbuf,i_ptr); write_outbuf(); getline(); CC; }
+/* IMBEDDED ROMAN */
+ if (strchr("!'()*+,-/:;=?[]`",c) || ((c == '.') && (*(i_ptr+1) == '.')))
+ { if (c == '.') i_ptr++;
+ if (bnbuf[0]) { bnword(); }
+ while(1)
+ { chrcat(outbuf,c); c = *++i_ptr;
+ if (c == '.')
+ { if (*(i_ptr+1) != '.') break;
+ i_ptr++; continue;
+ }
+ if ((strchr("!'()*+,-/:;=?[]`",c) && c) == 0) break;
+ }
+ CR; continue;
+ }
+/* ILLEGAL CHARS */
+ if (strchr("_$fqwxzBCDEFGJKLNOPQSVWXYZ\177",c))
+ { error("Illegal bengali character: ",1); CI; }
+ if (c>127) { error("Invalid character >80H: ",1); CI; }
+/*?? Since we are now case sensitive (unlike skt), the list of */
+/*?? illegal chars has been increased (_ added, and & removed) */
+/* CONTROL CHARACTERS */
+ if (c < ' ')
+ { error("Illegal control character: ",0); CI; }
+/* IMBEDDED LATEX COMMAND STRINGS */
+ if (c == '\\')
+ { if (d == '-') /* imbedded discretionary hyphen */
+ { strcat(bnbuf,"!"); i_ptr++; CI; }
+ bnword();
+ if (isalpha(d) == 0)
+ { chrcat(outbuf,c); chrcat(outbuf,*++i_ptr); CI; }
+ else
+ { while (1)
+ { chrcat(outbuf,c); c = *++i_ptr; if (isalpha(c) == 0) break; }
+ }
+ CC;
+ }
+/* SPACE CHAR */
+ if (c == ' ')
+ { bnword(); while(*++i_ptr == ' '); chrcat(outbuf,c); CC;
+ }
+/*?? slight change here, since underscore is now an illegal character */
+/* COMMENT DELIMITER */
+ if (c == '%')
+ { if (*(i_ptr+1) == '\n') bncont();
+ else bnword();
+ strcat(outbuf,i_ptr); write_outbuf(); getline(); CC;
+ }
+
+/* HASANTA */
+ if (c == '&') {
+ c = '@';
+ }
+
+/* BRACES */
+ if (c == '{') { if (d == '}') { i_ptr++; CI; } /* for words like pra{}uga */
+ else { nest_cnt++; bncont(); chrcat(outbuf,c); CI; }
+ }
+ if (c == '}')
+ { bnword(); chrcat(outbuf,c);
+ if (--nest_cnt == 0)
+ { bnmode = FALSE;
+ i_ptr++; return;
+ }
+ else CI;
+ }
+/* UPPER CASE */
+ if (isupper(c))
+ { switch (c)
+ { case 'A':
+ case 'I':
+ case 'U':
+ case 'M':
+ case 'H': break;
+ case 'T': c = 'L'; break;
+ case 'R': c = 'w'; break;
+ default: c = '*'; break;
+ }
+ if (c=='*') { error("Invalid upper case: ",1); CI; }
+ }
+/*?? big change with that code: the upper case has a different *meaning* than */
+/*?? the lower case: fortunately, AIUMH are the same as the internal code :-) */
+/* DOT_CHAR */
+ if (c == '.') { switch(d)
+ { case 'y': c = 'Y'; break;
+ case 'd': c = 'q'; break;
+ case 'h': c = 'H'; break;
+ /* case 'l': c = 'w'; break; */
+ case 'm': c = 'M'; break;
+ case 'n': c = 'N'; break;
+ case 'o': c = '%'; break;
+ case 'r': c = 'x'; break;
+ case 's': c = 'S'; break;
+ case 't': c = 'f'; break;
+ }
+ if (c=='.') { error("Invalid dot_character: ",2); CI; }
+ i_ptr++; d = *(i_ptr+1);
+ }
+
+/* NEXT CHAR IS H */
+ if (d=='h')
+ { if (strchr("bcdfgjkptqw",c)) { c=toupper(c); i_ptr++; d=*(i_ptr+1); }
+ }
+
+/* The upper/lowercase stuff removed: a following 'h' converts a consonant */
+/* to its upper case internal code, e.g th --> T. Note that 'w' is added */
+/* to the list for R Rh */
+
+/* QUOTE CHAR */
+ if (c == '\"') { switch(d)
+ { case 'n': c = 'z'; break;
+ case 's': c = 'Z'; break;
+ }
+ if (c=='\"') { error("Invalid quote_character",2); CI; }
+ i_ptr++; d = *(i_ptr+1);
+ }
+
+/* TILDE CHAR */
+ if (c == '~') { switch (d)
+ { case 'n': c = 'V'; break;
+ case 'm': c = '~'; break;
+ case 'r': c = 'R'; break;
+ default : c = '*'; break;
+ }
+ if (c=='*')
+ { error("Invalid use of tilde character: ",2); CI; }
+ i_ptr++; d = *(i_ptr+1);
+ }
+/* TWO CHAR VOWELS */
+ if ( strchr("aiu",c) && strchr("aiu",d) )
+ { switch(c)
+ { case 'a': switch(d)
+ { case 'a': c = 'A'; break;
+ case 'i': c = 'E'; break;
+ case 'u': c = 'O'; break;
+ } break;
+ case 'i': if (d=='i') c = 'I'; break;
+ case 'u': if (d=='u') c = 'U'; break;
+ }
+ if (isupper(c)) { i_ptr++; d = *(i_ptr+1); }
+ }
+/*?? all the upper/lowercase stuff removed */
+/* NOW CHAR SHOULD BE INTERNAL REPRESENTATION OF SANSKRIT CHAR */
+ if ( ((c=='~' || c=='M') && !(ac_flag)) ) {
+ i_ptr -=2; error("No vowel before nasal: ",3); i_ptr +=2; CF;
+ }
+
+ if (c=='H' && !(ac_flag)) {
+ i_ptr -=2; error("No vowel before visarga: ",3); i_ptr +=2; CF;
+ }
+
+ chrcat(bnbuf,c);
+ CR;
+ if (ISAC(c)) ac_flag = TRUE;
+ i_ptr++;
+ }
+}
+
+#undef CI
+#undef CC
+#undef CR
+#undef CF
+
+
+/***************************************************************************/
+/* Function: chrcat() */
+/* */
+/* Append character c to end of buffer s */
+/***************************************************************************/
+
+void chrcat(char *s, char c)
+{ char temp[] = " "; temp[0] = c; strcat(s,temp);
+}
+
+
+/***************************************************************************/
+/* Function: bncont() */
+/* */
+/* Similar to bnword() but used where input text line ends in '%' to */
+/* continue on next line. */
+/***************************************************************************/
+
+void bncont(void)
+{
+ cont_end = TRUE; bnword();
+ cont_end = FALSE; cont_begin = TRUE;
+}
+
+
+/***************************************************************************/
+/* Function: bnword() */
+/* */
+/* Convert contents of bnbuf to output string in outbuf */
+/***************************************************************************/
+
+/* internal code for consonants */
+static char hal_chars[] = "BCDFGJKLNPQRSTVWYZbcdfghjklmnpqrstvwyz";
+
+#define ISHAL(c) (((strchr(hal_chars,c) != 0) && c) ? TRUE : FALSE)
+
+#define CLRFLAGS ac_hook=post_ra=pre_ra=hasanta=hal_flag=post_ya=0
+
+#define CAT(w,x,z) \
+strcat(w,x); strcat(w,z)
+
+void bnword(void)
+{ char c;
+ if (roman_flag && bnbuf[0]) { strcat(outbuf,"\\,"); roman_flag = FALSE; }
+
+/* A word is built up one syllable at a time: a syllable typically comprises */
+/* a consonant (or samyoga) followed by a vowel (with its nasalisation). */
+/* If there is no consonant, then a front-vowel is output; if there */
+/* is no vowel, then a viraama is appended to the consonant/samyoga. */
+/* One effect of this is that, if a consonant cluster is not fully resolved */
+/* into a single samyoga, it will be treated as two syllable: in particular, */
+/* the hook of the short-i will span one samyoga only. */
+/* */
+/* The `work' buffer is used as a scratchpad while building a syllable; on */
+/* completion it is stored in the `tmp' buffer before shipping to the output */
+/* buffer. This temporary storage while working on the next syllable, allows */
+/* changes to the back spacing of the previous syllable for more effiecient */
+/* output. */
+/* */
+/* `ra' is difficult: the first `r' of a consonant cluster is simply flagged */
+/* in `pre_ra', and similarly the final `r' in `post_ra', and then these are */
+/* dealt with when appending a vowel. */
+
+ CLRFLAGS;
+ s_ptr = bnbuf; c = *s_ptr;
+ if (c == '\0') return;
+ *tmp = '\0'; *work = '\0';
+ while (1)
+ { CLRFLAGS; /* in particular, need to clear hal_flag for the likes of kara */
+ c= *s_ptr++;
+ if (c == '\0')
+ { if (*tmp) { if (outbuf[0]=='\0' && tmp[0]=='[') strcat(outbuf,"{}");
+ strcat(outbuf,tmp);
+ }
+ break;
+ }
+ if (ISAC(c))
+ { ac_char = c;
+ frontac();
+ if (*tmp) { if (outbuf[0]=='\0' && tmp[0]=='[') strcat(outbuf,"{}");
+ strcat(outbuf,tmp);
+ }
+ strcpy(tmp,work);
+ *work = '\0'; cont_begin = 0;
+ continue;
+ }
+ if (strchr("0123456789\"!%|\\@~HM",c))
+ { single(c);
+ if (*tmp) { if (outbuf[0]=='\0' && tmp[0]=='[') strcat(outbuf,"{}");
+ strcat(outbuf,tmp);
+ }
+ strcpy(tmp,work);
+ *work = '\0'; cont_begin = 0;
+ continue;
+ }
+ if (c == 'r') { pre_ra = TRUE; c = *s_ptr; }
+ else s_ptr--;
+ old_sptr = s_ptr; /* save pointer to start of samyoga */
+ if (ISHAL(c)) { hal_flag = TRUE; samyoga(); c = *s_ptr; }
+ ac_char = hasanta = 0;
+ if (!hr_flag) { if (ISAC(c)) { ac_char = *s_ptr++; }
+ else hasanta = TRUE; /* hr_flag = h.r parsed by samyoga */
+ }
+ backac(); hr_flag = FALSE;
+ if (*tmp) { if (outbuf[0]=='\0' && tmp[0]=='[') strcat(outbuf,"{}");
+ strcat(outbuf,tmp);
+ }
+ strcpy(tmp,work);
+ *work = '\0'; cont_begin = FALSE;
+
+ }
+ strcat(outbuf,work);
+ s_ptr = bnbuf; *s_ptr = '\0';
+ cont_begin = 0;
+}
+
+
+/***************************************************************************/
+/* Function: single() */
+/* */
+/* Output single (stand-alone) character to work buffer */
+/***************************************************************************/
+
+void single(char c)
+{
+ switch(c)
+ { case '0': strcat(work,"0"); break; /* numerals */
+ case '1': strcat(work,"1"); break;
+ case '2': strcat(work,"2"); break;
+ case '3': strcat(work,"3"); break;
+ case '4': strcat(work,"4"); break;
+ case '5': strcat(work,"5"); break;
+ case '6': strcat(work,"6"); break;
+ case '7': strcat(work,"7"); break;
+ case '8': strcat(work,"8"); break;
+ case '9': strcat(work,"9"); break;
+ case '!': strcat(tmp,"\\-"); break; /* discretionary hyphen */
+/* case '%': strcat(work,"?"); break; */
+ case '|': strcat(work,"."); break; /* dnari */
+/* case '\\': strcat(work,"H1"); break; */
+ case '@': strcat(work,"\\30Cz"); break; /* hasanta */
+ case '~': strcat(work,"w"); break; /* candrabindu */
+ case 'H': strcat(work,"H"); break; /* visarga */
+ case 'M': strcat(work,"M"); break; /* anusvara */
+ }
+}
+
+
+/***************************************************************************/
+/* Function: frontac() */
+/* */
+/* Process a front-vowel to workbuf */
+/***************************************************************************/
+
+void frontac(void)
+{
+ CLRFLAGS;
+ switch(ac_char)
+ { case 'a': strcat(work,"a"); break;
+ case 'A': strcat(work,"aA"); break;
+ case 'i': strcat(work,"\\302z"); break;
+ case 'I': strcat(work,"\\303z"); break;
+ case 'u': strcat(work,"\\304z"); break;
+ case 'U': strcat(work,"\\305z"); break;
+ case 'x': strcat(work,"\\306z"); break;
+ /* case 'w': strcat(work,"--"); break; */
+ case 'e': strcat(work,"\\308z"); break;
+ case 'E': strcat(work,"\\309z"); break;
+ case 'o': strcat(work,"\\30Az"); break;
+ case 'O': strcat(work,"\\30Bz"); break;
+ default : error("Lost in frontac()",-1);
+ }
+}
+
+
+/***************************************************************************/
+/* Function: sam_warning() */
+/* */
+/* Print a warning message that a hasanta will be used within a */
+/* samyoga. Also print input file line number, together with an */
+/* indication of the samyoga and where the viraama will be placed. */
+/***************************************************************************/
+
+void sam_warning(void)
+{
+ char *p, msg[80]="";
+ p = old_sptr;
+ if (pre_ra)
+ { strcat(msg,"r");
+ if (p==s_ptr) strcat(msg,"-");
+ }
+ while (ISHAL(*p))
+ { switch (*p)
+ { case 'B': strcat(msg,"bh"); break;
+ case 'C': strcat(msg,"ch"); break;
+ case 'D': strcat(msg,"dh"); break;
+ case 'G': strcat(msg,"gh"); break;
+ case 'H': strcat(msg,".h"); break;
+ case 'J': strcat(msg,"jh"); break;
+ case 'K': strcat(msg,"kh"); break;
+ case 'P': strcat(msg,"ph"); break;
+ case 'T': strcat(msg,"th"); break;
+ case 'f': strcat(msg,".t"); break;
+ case 'F': strcat(msg,".th"); break;
+ case 'N': strcat(msg,".n"); break;
+ case 'q': strcat(msg,".d"); break;
+ case 'Q': strcat(msg,".dh"); break;
+ case 'S': strcat(msg,".s"); break;
+ case 'V': strcat(msg,"~n"); break;
+ case 'Y': strcat(msg,".y"); break;
+ case 'z': strcat(msg,"\"n"); break;
+ case 'Z': strcat(msg,"\"s"); break;
+ default: chrcat(msg,*p); break;
+ }
+ if (++p == s_ptr) strcat(msg,"-");
+ }
+ if (ISAC(*p))
+ { switch (*p)
+ { /* case 'w': strcat(msg,".l"); break; */
+ case 'x': strcat(msg,".r"); break;
+ default: chrcat(msg,*p); break;
+ }
+ }
+ printf("Line %4d Warning: samyoga viraama: %s\n",line_cnt,msg);
+}
+
+
+/***************************************************************************/
+/* Function: backac() */
+/* */
+/* Handle vowel diacritics */
+/***************************************************************************/
+
+void backac(void)
+{ int j,k; char c, *p;
+
+ if (pre_ra && (*work=='\0')) /* case r.r, r.R, r.l, r.L, ru, rU, ra */
+ { c = toupper(ac_char);
+ /* if ((c =='X') || (c == 'W')) {frontac(); return; } */
+ if (c == 'U')
+ { if (ac_char == 'u')
+ { strcat(work,"\\319z"); ac_char = 'a'; }
+ else { strcat(work,"\\31Az"); ac_char = 'a'; }
+ }
+
+ else { strcat(work,"r"); } /* ra */
+ pre_ra = FALSE; hal_flag = TRUE;
+ }
+
+ if (post_ra) { strcat(work,"\\30Fz"); } /* ra-phala */
+ if (post_ya) { strcat(work,"\\30Dz"); } /* ya-phala */
+ post_ya = post_ra = 0;
+
+c = ac_char;
+
+if (pre_ra) { strcat(work,"\\30Ez"); } /* add repha */
+/* if (hasanta) { strcat(work,"\\30Cz"); } /* add hasanta */
+
+if (ac_char == 'A') { strcat(work,"A");} /* add aa-dia */
+if (ac_char == 'i') { CAT(tmp,"i",""); } /* add i-dia */
+if (ac_char == 'I') { strcat(work,"I"); } /* add ii-dia */
+if (ac_char == 'u') { strcat(work,"u");} /* add u-dia */
+if (ac_char == 'U') { strcat(work,"U");} /* add uu-dia */
+if (ac_char == 'x') { strcat(work,"W");} /* add .r dia */
+if (ac_char == 'e') { CAT(tmp,"e",""); } /* add e-dia */
+if (ac_char == 'E') { CAT(tmp,"E",""); } /* add ai-dia */
+if (ac_char == 'o') { CAT(tmp,"e",""); strcat(work,"A");} /* add o-dia */
+if (ac_char == 'O') { CAT(tmp,"e",""); strcat(work,"O");} /* add au-dia */
+
+}
+
+/***************************************************************************/
+/* Function: samyoga() */
+/* */
+/* Work along bnbuf sequentially to build up a samyoga print */
+/* string in the work buffer and update the samyoga parameters. */
+/* */
+/* The method is quite unsophisticated, but its simplicity lends */
+/* clarity for later additions or changes, and for this reason */
+/* is done in Devanagari alphabetical order, but with longer */
+/* strings before shorter. */
+/* */
+/* Cr and Cy conjuncts are not defined in the individual cases for each */
+/* consonant. Rather these are handled in bulk by the program at the end */
+/* of the function. */
+/* */
+/* Macros are used to simplify reading the program --- believe it or not! */
+/* */
+/* Switch/case is used on the first letter, then the main LS macro tests: */
+/* (1) if the test string matches the input exactly, then */
+/* (2) bump input pointer to the character after string match */
+/* (3) use NC etc macro to break out of switch instruction */
+/***************************************************************************/
+
+
+#define LS(a,c,z) n=strlen(a); \
+ if(strncmp(p,a,n)==0) { strcat(work,z); p+=n; c;}
+
+#define NX sam_flag = 'X'; break;
+#define NR sam_flag = 'R'; break;
+#define NC sam_flag = 'C'; break;
+
+#define IX p++; sam_flag = 'X'; break;
+#define IR p++; sam_flag = 'R'; break;
+#define IC p++; sam_flag = 'C'; break;
+
+/******************************************************************************/
+
+void samyoga(void)
+{
+char *p, sam_flag; int n;
+ sam_flag = 0;
+ p = s_ptr;
+ while (1)
+ { if (!ISHAL(*p)) { NX; }
+ switch (*p++)
+ {
+
+ /* k */
+ case 'k': if(*p=='u')
+ {p+=1; strcat(work,"k{\\kern-.25em}u{\\kern.25em}");NX;}
+ if(*p=='U')
+ {p+=1; strcat(work,"k{\\kern-.25em}U{\\kern.25em}");NX;}
+ if(*p=='x')
+ {p+=1; strcat(work,"k{\\kern-.25em}W{\\kern.25em}");NX;}
+ if(*p=='S' && *(p+1)=='N')
+ {p+=2; strcat(work,"\\388z");NR;}
+ if(*p=='S' && *(p+1)=='m')
+ {p+=2; strcat(work,"\\389z");NR;}
+ LS("k", NR, "\\380z" );
+ LS("f", NR, "\\381z" );
+ LS("t", NR, "\\382z" );
+ LS("b", NR, "\\383z" );
+ LS("m", NR, "\\384z" );
+ LS("r", NR, "\\385z" );
+ LS("l", NR, "\\386z" );
+ LS("v", NR, "\\383z" );
+ LS("s", NR, "\\38Az" );
+ LS("S", NR, "\\387z" );
+ strcat(work,"k"); NR;
+
+ /* kh */
+ case 'K': strcat(work,"K"); NR;
+
+ /* g */
+ case 'g': LS("D", NR, "\\38Bz" );
+ LS("n", NR, "\\38Cz" );
+ LS("b", NR, "\\38Dz" );
+ LS("m", NR, "\\38Ez" );
+ LS("l", NR, "\\38Fz" );
+ LS("v", NR, "\\38Dz" );
+ strcat(work,"g"); NR;
+
+ /* gh */
+ case 'G': LS("n", NR, "\\390z");
+ strcat(work,"G"); NR;
+
+ /* "n */
+ case 'z': if(*p=='k' && *(p+1)=='S')
+ {p+=2; strcat(work,"\\392z");NR;}
+ LS("k", NR, "\\391z");
+ LS("K", NR, "\\393z");
+ LS("g", NR, "\\394z");
+ LS("G", NR, "\\395z");
+ LS("m", NR, "\\396z");
+ strcat(work,"q"); NR;
+
+ /* c */
+ case 'c': if(*p=='C' && (*(p+1)=='b' || *(p+1)=='v'))
+ {p+=2; strcat(work,"\\399z");NR;}
+ LS("c", NR, "\\397z");
+ LS("C", NR, "\\398z");
+ LS("V", NR, "\\39Az");
+ strcat(work,"c"); NR;
+
+ /* ch */
+ case 'C': strcat(work,"C"); NR;
+
+ /* j */
+ case 'j': if(*p=='j' && (*(p+1)=='b' || *(p+1)=='v'))
+ {p+=2; strcat(work,"\\39Cz");NR;}
+ LS("j", NR, "\\39Bz" );
+ LS("J", NR, "\\39Dz" );
+ LS("V", NR, "\\39Ez" );
+ LS("b", NR, "\\39Fz" );
+ LS("v", NR, "\\39Fz" );
+ strcat(work,"j"); NR;
+
+ /* jh */
+ case 'J': if(*p=='u')
+ {p+=1; strcat(work,"J{\\kern-.24em}u{\\kern.24em}");NX;}
+ if(*p=='U')
+ {p+=1; strcat(work,"J{\\kern-.24em}U{\\kern.24em}");NX;}
+ if(*p=='x')
+ {p+=1; strcat(work,"J{\\kern-.24em}W{\\kern.24em}");NX;}
+ strcat(work,"J"); NR;
+
+ /* ~n */
+ case 'V': if(*p=='u')
+ {p+=1; strcat(work,"Q{\\kern-.39em}u{\\kern.39em}");NX;}
+ if(*p=='U')
+ {p+=1; strcat(work,"Q{\\kern-.39em}U{\\kern.39em}");NX;}
+ if(*p=='x')
+ {p+=1; strcat(work,"Q{\\kern-.39em}W{\\kern.39em}");NX;}
+ LS("c", NR, "\\3A0z" );
+ LS("C", NR, "\\3A1z" );
+ LS("j", NR, "\\3A2z" );
+ LS("J", NR, "\\3A3z" );
+ strcat(work,"Q"); NR;
+
+ /* .t */
+ case 'f': LS("f", NR, "\\3A4z" );
+ LS("b", NR, "\\3A5z" );
+ LS("v", NR, "\\3A5z" );
+ strcat(work,"T"); NR;
+
+ /* .th */
+ case 'F': strcat(work,"Z"); NR;
+
+ /* .da */
+ case 'q': LS("q", NR, "\\3A6z" );
+ strcat(work,"D"); NR;
+
+ /* .dh */
+ case 'Q': strcat(work,"X"); NR;
+
+ /* .n */
+ case 'N': LS("f", NR, "\\3A7z" );
+ LS("F", NR, "\\3A8z" );
+ LS("q", NR, "\\3A9z" );
+ LS("N", NR, "\\3AAz" );
+ LS("t", NR, "\\3ACz" );
+ LS("m", NR, "\\3ABz" );
+ strcat(work,"N"); NR;
+
+ /* t */
+ case 't': if(*p=='t' && (*(p+1)=='b' || *(p+1)=='v'))
+ {p+=2; strcat(work,"\\3ADz"); NR;}
+ if(*p=='r' && *(p+1)=='u')
+ {p+=2; strcat(work,"\\3B3z"); NX;}
+ LS("t", NR, "\\3ACz" );
+ LS("T", NR, "\\3AEz" );
+ LS("n", NR, "\\3AFz" );
+ LS("b", NR, "\\3B0z" );
+ LS("m", NR, "\\3B1z" );
+ LS("r", NR, "\\3B2z" );
+ LS("v", NR, "\\3B0z" );
+ strcat(work,"t"); NR;
+
+ /* th */
+ case 'T': LS("b", NR, "\\4Lz");
+ LS("v", NR, "\\4Lz");
+ strcat(work,"z"); NR;
+
+ /* d */
+ case 'd': if(*p=='B' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3BAz");NR;}
+ LS("g", NR, "\\3B4z");
+ LS("G", NR, "\\3B5z");
+ LS("d", NR, "\\3B6z");
+ LS("D", NR, "\\3B7z");
+ LS("b", NR, "\\3B8z");
+ LS("B", NR, "\\3B9z");
+ LS("m", NR, "\\3BBz");
+ LS("v", NR, "\\3B8z" );
+ strcat(work,"d"); NR;
+
+ /* dh */
+ case 'D': LS("n", NR, "\\3BCz" );
+ LS("b", NR, "\\3BDz" );
+ LS("v", NR, "\\3BDz" );
+ strcat(work,"x"); NR;
+
+ /* n */
+ case 'n': if(*p=='t' && *(p+1)=='u')
+ {p+=2; strcat(work,"\\3C1z");NR;}
+ if(*p=='t' && (*(p+1)=='b' || *(p+1)=='v'))
+ {p+=2; strcat(work,"\\3C2z");NR;}
+ if(*p=='t' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3C3z");NR;}
+ if(*p=='d' && (*(p+1)=='b' || *(p+1)=='v'))
+ {p+=2; strcat(work,"\\4Pz");NR;}
+ LS("f", NR, "\\3BEz" );
+ LS("q", NR, "\\3BFz" );
+ LS("t", NR, "\\3C0z" );
+ LS("T", NR, "\\3C4z" );
+ LS("d", NR, "\\3C5z" );
+ LS("D", NR, "\\3C6z" );
+ LS("n", NR, "\\3C7z" );
+ LS("b", NR, "\\3C8z" );
+ LS("m", NR, "\\3C9z" );
+ LS("s", NR, "\\3CAz" );
+ LS("v", NR, "\\3C8z" );
+ strcat(work,"n"); NR;
+
+ /* p */
+ case 'p': LS("f", NR, "\\3CBz" );
+ LS("t", NR, "\\3CCz" );
+ LS("n", NR, "\\3CDz" );
+ LS("p", NR, "\\3CEz" );
+ LS("l", NR, "\\3CFz" );
+ LS("s", NR, "\\3D0z" );
+ strcat(work,"p"); NR;
+
+ /* ph */
+ case 'P': if(*p=='u')
+ {p+=1; strcat(work,"f{\\kern-.21em}u{\\kern.21em}");NX;}
+ if(*p=='U')
+ {p+=1; strcat(work,"f{\\kern-.21em}U{\\kern.21em}");NX;}
+ if(*p=='x')
+ {p+=1; strcat(work,"f{\\kern-.21em}W{\\kern.21em}");NX;}
+ LS("l", NR, "\\3D1z" );
+ strcat(work,"f"); NR;
+
+ /* b */
+ case 'b': LS("j", NR, "\\3D2z" );
+ LS("d", NR, "\\3D3z" );
+ LS("D", NR, "\\3D4z" );
+ LS("b", NR, "\\3D5z" );
+ LS("l", NR, "\\3D6z" );
+ strcat(work,"b"); NR;
+
+ /* bh */
+ case 'B': LS("r", NR, "\\3D7z" );
+ LS("l", NR, "\\3D8z" );
+ strcat(work,"v"); NR;
+
+ /* m */
+ case 'm': if(*p=='B' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3DEz");NR;}
+ LS("n", NR, "\\3D9z" );
+ LS("p", NR, "\\3DAz" );
+ LS("P", NR, "\\3DBz" );
+ LS("b", NR, "\\3DCz" );
+ LS("B", NR, "\\3DDz" );
+ LS("m", NR, "\\3DFz" );
+ LS("l", NR, "\\3E0z" );
+ LS("v", NR, "\\3DCz" );
+ strcat(work,"m"); NR;
+
+ /* y */
+ case 'y': strcat(work,"Y"); NR;
+
+ /* .y */
+ case 'Y': strcat(work,"y"); NR;
+
+ /* r */
+ case 'r': strcat(work,"r"); NR;
+
+ /* l */
+ case 'l': if(*p=='g' && *(p+1)=='u')
+ {p+=2; strcat(work,"\\3E3z");NX;}
+ LS("k", NR, "\\3E1z" );
+ LS("g", NR, "\\3E2z" );
+ LS("f", NR, "\\3E4z" );
+ LS("q", NR, "\\3E5z" );
+ LS("p", NR, "\\3E6z" );
+ LS("b", NR, "\\3E7z" );
+ LS("m", NR, "\\3E8z" );
+ LS("l", NR, "\\3E9z" );
+ strcat(work,"l"); NR;
+
+ /* "s */
+ case 'Z': LS("c", NR, "\\3EAz" );
+ LS("C", NR, "\\3EBz" );
+ LS("n", NR, "\\3ECz" );
+ LS("m", NR, "\\3EDz");
+ LS("b", NR, "\\3EFz" );
+ LS("l", NR, "\\3EEz" );
+ LS("v", NR, "\\3EFz" );
+ strcat(work,"S"); NR;
+
+ /* .s */
+ case 'S': if(*p=='k' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3F1z");NR;}
+ LS("k", NR, "\\3F0z" );
+ LS("f", NR, "\\3F2z" );
+ LS("F", NR, "\\3F3z" );
+ LS("N", NR, "\\3F4z" );
+ LS("p", NR, "\\3F5z" );
+ LS("P", NR, "\\3F6z" );
+ LS("m", NR, "\\3F7z" );
+ strcat(work,"F"); NR;
+
+ /* s */
+ case 's': if(*p=='k' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3F9z");NR;}
+ if(*p=='k' && *(p+1)=='l')
+ {p+=2; strcat(work,"\\3FAz");NR;}
+ if(*p=='t' && *(p+1)=='u')
+ {p+=2; strcat(work,"\\3FEz");NX;}
+ if(*p=='t' && *(p+1)=='r')
+ {p+=2; strcat(work,"\\3FFz");NR;}
+ if(*p=='p' && *(p+1)=='l')
+ {p+=2; strcat(work,"\\313z");NR;}
+ LS("k", NR, "\\3F8z" );
+ LS("K", NR, "\\3FBz" );
+ LS("f", NR, "\\3FCz" );
+ LS("t", NR, "\\3FDz" );
+ LS("T", NR, "\\310z" );
+ LS("n", NR, "\\311z" );
+ LS("p", NR, "\\312z" );
+ LS("P", NR, "\\314z" );
+ LS("b", NR, "\\315z" );
+ LS("m", NR, "\\316z" );
+ LS("l", NR, "\\317z" );
+ LS("v", NR, "\\315z" );
+ strcat(work,"s"); NR;
+
+ /* h */
+ case 'h': if(*p=='x') { strcat(work,"\\31Cz");hr_flag = TRUE; IX; }
+ LS("N", NR, "\\318z");
+ LS("n", NR, "\\31Fz");
+ LS("b", NR, "\\33Ez");
+ LS("m", NR, "\\320z");
+ LS("l", NR, "\\37Dz");
+ LS("v", NR, "\\33Ez");
+ strcat(work,"h"); NR;
+
+ case 'w': LS("g", NR, "\\37Fz");
+ strcat(work,"R"); NR;
+
+ case 'W': strcat(work,"V"); NR;
+
+ case 'L': strcat(work,"B"); NR;
+
+ /* Assamese r */
+ case 'R': strcat(work,"\\4rz"); NR;
+
+ /* Assamese v */
+ case 'v': strcat(work,"\\4vz"); NR;
+
+ default: error("Lost in samyoga()",-1); NX;
+ }
+
+ if (sam_flag == 'X') { s_ptr = p; break; }
+ if (sam_flag == 'R') { /* if ((*p=='r') && ra) { post_ra = TRUE; p++; } */
+ if ((*p=='r')) { post_ra = TRUE; p++; }
+ /* if ((*p=='y') && ya) { post_ya = TRUE; p++; } */
+ if ((*p=='y')) { post_ya = TRUE; p++; }
+ s_ptr = p; break;
+ }
+ if (!ISHAL(*p)) { s_ptr = p; break; }
+ }
+}
+
+/***************************************************************************/
+/* samapta */
+/***************************************************************************/
diff --git a/language/bengali/pandey/beng.sty b/language/bengali/pandey/beng.sty
new file mode 100644
index 0000000000..b8ed4a437c
--- /dev/null
+++ b/language/bengali/pandey/beng.sty
@@ -0,0 +1,51 @@
+% LaTeX2e package for using "Bengali for TeX".
+% ============================================
+%
+% Sample input .bn file:
+%
+% \documentclass{article}
+% \usepackage{beng}
+% \begin{document}
+% {\bn baa"ngalaa bhaa.saa}
+% \end{document}
+%
+
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesFile{beng.sty}[2002/03/27 v2.0 Bengali for TeX]
+
+% Error message for someone running LaTeX 2.09:
+
+\@ifundefined{selectfont}
+{\@latexerr{This style option may only be used with LaTeX2e.}\@eha
+ \endinput}{}
+%
+
+\DeclareFontSubstitution{U}{bn}{m}{n}
+
+% Define \bn macro:
+
+\DeclareRobustCommand\bn{%
+ \usefont{U}{bn}{m}{n}%
+ \tolerance=10000\pretolerance=10000
+ \emergencystretch=.2\hsize
+ \baselineskip1.30\baselineskip }
+
+% Define counter for Bengali numerals. This allows for the
+% printing of page numbers in Bengali: \pagenumbering{beng}
+
+%\def\@beng#1{{\bn\number #1}}
+
+% Define macros to access characters in font:
+
+\def\3#1z{{\char"#1}}
+\def\4#1z{{\usefont{U}{bnx}{m}{n}#1}}
+
+%\newcommand*\bnnum{\let\nstyle=d}
+%\newcommand*\cmnum{\let\nstyle=r}
+%\cmnum
+%\DeclareRobustCommand*\rn[1]{\if\nstyle r{\rm #1}\else#1\fi}
+
+%\def\@bengali#1{{\bn\number #1}} % allows counters in bengali
+%\def\bengali#1{\expandafter\@bengali\csname c@#1\endcsname}
+
+\endinput
diff --git a/language/bengali/pandey/doc/bengdoc.bn b/language/bengali/pandey/doc/bengdoc.bn
new file mode 100644
index 0000000000..aa9fdc8c7e
--- /dev/null
+++ b/language/bengali/pandey/doc/bengdoc.bn
@@ -0,0 +1,731 @@
+\documentclass[11pt]{article}
+\usepackage{beng,multicol}
+
+\def\portraitpage{%
+ \setlength{\topmargin}{-0.50in} % real margin == this + 1in
+ \setlength{\oddsidemargin}{-0.0in} % real margin == this + 1in
+ \setlength{\evensidemargin}{-0.0in} % real margin == this + 1in
+ \setlength{\columnsep}{20pt}
+ \setlength{\columnseprule}{0.4pt}
+
+ % Use Portrait Size Page
+ \setlength{\textwidth}{6.5in}
+ \setlength{\textheight}{9.0in}%
+}
+\portraitpage
+\parindent=0pt
+
+\begin{document}
+
+\begin{center}
+{\LARGE \bfseries Bengali for \TeX{}}
+\medskip
+
+{\Large Version 2.0}
+\medskip
+
+Anshuman Pandey
+\medskip
+
+27 March 2002
+\end{center}
+
+\section{Introduction}
+The \textit{Bengali for \TeX{}} ({\sf bengali}) package provides
+the capability to typeset Bengali in \TeX{}. This latest version,
+2.0, is a major revision to the package. Assamese is supported in
+this version.
+
+\section{Transliterated Input}
+The package uses a version of the Velthuis transliteration
+scheme which has been extended to accommodate certain Bengali
+characters not found in Devanagari (the script for which
+the Velthuis scheme was originally developed). Table \ref{chars}
+provides the characters and the respective transliteration
+codes.
+\medskip
+
+The Bengali text is delimited by the \verb+\+\verb+bn+
+macro, eg. \verb+{\+\verb+bn baa.mlaa}+ produces
+{\bn baa.mlaa}.
+
+\section{Preprocessor}
+Once a document is prepared using the transliterated input,
+it must be run rough the preprocessor. The preprocessor
+must first be compiled with a C compiler. For the
+preprocessor to recognize the document, it must have
+the extension {\tt .bn}. Typing {{\tt beng} \textit{infile}}
+will cause the preprocessor {\tt beng} to read the
+given file and output a \TeX{} by the same name.
+\LaTeX{} is to be then run on the output.
+\medskip
+
+{\bf Note:} The preprocessor does not implicitly produce a
+\textit{hasanta} if the inherent \textit{a} is missing in the
+word final position. Explicit \textit{hasanta} is produced
+by {\tt \&}.
+\medskip
+
+Page numbers may be printed in Bengali by placing
+\verb+\pagenumbering{beng}+ in the preamble
+of your document.
+
+\section{Examples}
+The file {\tt example.bn} contains the short story
+``Aj\=ante'' by Bonaphul. The following example is
+a poem by Rabindranath Tagore:
+\medskip
+
+\begin{multicols}{2}
+{\renewcommand{\baselinestretch}{1}
+{\large {\bn ke la{}ibe mor kaar.ya, kahe sandhyaa rabi \\
+"suniyaa jagaT rahe niruttar chabi | \\
+maa.tir pradiip chila, se kahila, svaami \\
+aamaar .ye.tuku saadhya kariba taa aami |\par}}}
+\columnbreak
+
+{\small
+\verb+ke la{}ibe mor kaar.ya, kahe sandhyaa rabi+ \\
+\verb+"suniyaa jagaT rahe niruttar chabi |+ \\
+\verb+maa.tir pradiip chila, se kahila, svaami+ \\
+\verb+aamaar .ye.tuku saadhya kariba taa aami |+ \\}
+\end{multicols}
+\vfill
+
+\hrule
+\smallskip
+
+Anshuman Pandey \\
+\textit{apandey@u.washington.edu}
+
+\begin{table*}[p]
+\begin{center}
+\renewcommand{\doublerulesep}{.5cm}
+\renewcommand{\arraystretch}{1.40}
+
+\begin{tabular}{|lc|lc|lc|lc|}
+\hline
+\multicolumn{8}{|c|}{\textit{Vowels}} \\
+\hline
+ \texttt{a} & {\bn a}
+& \texttt{aa} & {\bn aa}
+& \texttt{i} & {\bn i}
+& \texttt{ii} & {\bn ii} \\
+
+ \texttt{u} & {\bn u}
+& \texttt{uu} & {\bn uu}
+& \texttt{.r} & {\bn .r}
+& \texttt{e} & {\bn e} \\
+
+ \texttt{ai} & {\bn ai}
+& \texttt{o} & {\bn o}
+& \texttt{au} & {\bn au}
+& \texttt{a.m} & {\bn a.m} \\
+
+ \texttt{a\char`~m} & {\bn a~m}
+& \texttt{aH} & {\bn a.h}
+& &
+& & \\
+
+\hline
+\end{tabular}
+\vspace*{.5cm}
+
+\begin{tabular}{|ll|ll|ll|ll|ll|}
+\hline
+\multicolumn{10}{|c|}{\textit{Consonants}} \\
+\hline
+ \texttt{ka} & {\bn ka}
+& \texttt{kha} & {\bn kha}
+& \texttt{ga} & {\bn ga}
+& \texttt{gha} & {\bn gha}
+& \texttt{"na} & {\bn "na} \\
+
+ \texttt{ca} & {\bn ca}
+& \texttt{cha} & {\bn cha}
+& \texttt{ja} & {\bn ja}
+& \texttt{jha} & {\bn jha}
+& \texttt{\char`~na} & {\bn ~na} \\
+
+ \texttt{.ta} & {\bn .ta}
+& \texttt{.tha} & {\bn .tha}
+& \texttt{.da} & {\bn .da}
+& \texttt{.dha} & {\bn .dha}
+& \texttt{.na} & {\bn .na} \\
+
+ \texttt{ta} & {\bn ta}
+& \texttt{tha} & {\bn tha}
+& \texttt{da} & {\bn da}
+& \texttt{dha} & {\bn dha}
+& \texttt{na} & {\bn na} \\
+
+ \texttt{pa} & {\bn pa}
+& \texttt{pha} & {\bn pha}
+& \texttt{ba} & {\bn ba}
+& \texttt{bha} & {\bn bha}
+& \texttt{ma} & {\bn ma} \\
+\hline
+\end{tabular}
+\vspace*{.5cm}
+
+\begin{tabular}{|ll|ll|ll|ll|ll|}
+\hline
+\multicolumn{10}{|c|}{\textit{Semi-vowels}} \\
+\hline
+ \texttt{ya} & {\bn ya}
+& \texttt{.ya} & {\bn .ya}
+& \texttt{ra} & {\bn ra}
+& \texttt{la} & {\bn la}
+& \texttt{ba} & {\bn ba} \\
+\hline
+\end{tabular}
+\hspace*{.4cm}
+\begin{tabular}{|ll|ll|ll|}
+\hline
+\multicolumn{6}{|c|}{\textit{Sibilants}} \\
+\hline
+
+ \texttt{"sa} & {\bn "sa}
+& \texttt{.sa} & {\bn .sa}
+& \texttt{sa} & {\bn sa} \\
+\hline
+\end{tabular}
+\vspace*{.5cm}
+
+\begin{tabular}{|ll|}
+\hline
+\multicolumn{2}{|c|}{\textit{Aspirate}} \\
+\hline
+\texttt{ha} & {\bn ha} \\
+\hline
+\end{tabular}
+\hspace*{.4cm}
+\begin{tabular}{|ll|ll|}
+\hline
+\multicolumn{4}{|c|}{\textit{Flaps}} \\
+\hline
+ \texttt{Ra} & {\bn Ra}
+& \texttt{Rha} & {\bn Rha} \\
+\hline
+\end{tabular}
+\vspace*{.5cm}
+
+\begin{tabular}{|ll|ll|ll|ll|ll|}
+\hline
+\multicolumn{10}{|c|}{\textit{Numerals}} \\
+\hline
+ \texttt{0} & {\bn 0} & \texttt{1} & {\bn 1}
+& \texttt{2} & {\bn 2} & \texttt{3} & {\bn 3}
+& \texttt{4} & {\bn 4} \\
+ \texttt{5} & {\bn 5}
+& \texttt{6} & {\bn 6} & \texttt{7} & {\bn 7}
+& \texttt{8} & {\bn 8} & \texttt{9} & {\bn 9} \\
+\hline
+\end{tabular}
+\vspace*{.5cm}
+
+\begin{tabular}{|ll|ll|}
+\hline
+\multicolumn{4}{|c|}{\textit{Assamese Variants}} \\
+\hline
+ \texttt{\char`~ra} & {\bn ~ra}
+& \texttt{va} & {\bn va} \\
+\hline
+\end{tabular}
+
+\vspace*{.5cm}
+\begin{tabular}{|lll|lll|lll|lll|}
+\hline
+\multicolumn{12}{|c|}{\textit{Special Characters}} \\
+\hline
+ \texttt{.m} & {\bn a.m} & \textit{anusv\=ara}
+& \texttt{\char`~m} & {\bn a~m} & \textit{candrabindu}
+& \texttt{.h} & {\bn a.h} & \textit{visarga}
+& \texttt{T} & {\bn Ta} & \textit{kha\d{n}\d{d}a ta} \\
+
+ \texttt{|} & {\bn |} & \textit{d\=a\d{m}\d{r}{\=\i}}
+& \texttt{\&} & {\bn &} & \textit{hasanta}
+& & &
+& & & \\
+
+\hline
+\end{tabular}
+\caption{Transliteration Scheme for \textit{Bengali for \TeX{}}}
+\label{chars}
+\end{center}
+\end{table*}
+
+%%% Consonant-Vowel Combinations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\renewcommand{\arraystretch}{1.25}
+\begin{table}[p]
+\vspace*{-0.5in}
+\hspace*{0.0in}\vbox{
+\begin{center}
+\begin{tabular}{|c||c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
+\hline
+ / &
+ {\tt a} &
+ {\tt aa} &
+ {\tt i} &
+ {\tt ii} &
+ {\tt u} &
+ {\tt uu} &
+ {\tt .r} &
+ {\tt e} &
+ {\tt ai} &
+ {\tt o} &
+ {\tt au} \\ \hline \hline
+
+ {\tt k} &
+{\bn ka} &
+{\bn kaa} &
+{\bn ki} &
+{\bn kii} &
+{\bn ku} &
+{\bn kuu} &
+{\bn k.r} &
+{\bn ke} &
+{\bn kai} &
+{\bn ko} &
+{\bn kau}
+\\ \hline
+ {\tt kh} &
+{\bn kha} &
+{\bn khaa} &
+{\bn khi} &
+{\bn khii} &
+{\bn khu} &
+{\bn khuu} &
+{\bn kh.r} &
+{\bn khe} &
+{\bn khai} &
+{\bn kho} &
+{\bn khau} \\ \hline
+ {\tt g} &
+{\bn ga} &
+{\bn gaa} &
+{\bn gi} &
+{\bn gii} &
+{\bn gu} &
+{\bn guu} &
+{\bn g.r} &
+{\bn ge} &
+{\bn gai} &
+{\bn go} &
+{\bn gau} \\ \hline
+ {\tt gh} &
+{\bn gha} &
+{\bn ghaa} &
+{\bn ghi} &
+{\bn ghii} &
+{\bn ghu} &
+{\bn ghuu} &
+{\bn gh.r} &
+{\bn ghe} &
+{\bn ghai} &
+{\bn gho} &
+{\bn ghau} \\ \hline
+ {\tt "n} &
+{\bn "na} &
+{\bn "naa} &
+{\bn "ni} &
+{\bn "nii} &
+{\bn "nu} &
+{\bn "nuu} &
+{\bn "n.r} &
+{\bn "ne} &
+{\bn "nai} &
+{\bn "no} &
+{\bn "nau} \\ \hline
+ {\tt c} &
+{\bn ca} &
+{\bn caa} &
+{\bn ci} &
+{\bn cii} &
+{\bn cu} &
+{\bn cuu} &
+{\bn c.r} &
+{\bn ce} &
+{\bn cai} &
+{\bn co} &
+{\bn cau} \\ \hline
+ {\tt ch} &
+{\bn cha} &
+{\bn chaa} &
+{\bn chi} &
+{\bn chii} &
+{\bn chu} &
+{\bn chuu} &
+{\bn ch.r} &
+{\bn che} &
+{\bn chai} &
+{\bn cho} &
+{\bn chau} \\ \hline
+ {\tt j} &
+{\bn ja} &
+{\bn jaa} &
+{\bn ji} &
+{\bn jii} &
+{\bn ju} &
+{\bn juu} &
+{\bn j.r} &
+{\bn je} &
+{\bn jai} &
+{\bn jo} &
+{\bn jau} \\ \hline
+ {\tt jh} &
+{\bn jha} &
+{\bn jhaa} &
+{\bn jhi} &
+{\bn jhii} &
+{\bn jhu} &
+{\bn jhuu} &
+{\bn jh.r} &
+{\bn jhe} &
+{\bn jhai} &
+{\bn jho} &
+{\bn jhau} \\ \hline
+ {\tt \char`~n} &
+{\bn ~na} &
+{\bn ~naa} &
+{\bn ~ni} &
+{\bn ~nii} &
+{\bn ~nu} &
+{\bn ~nuu} &
+{\bn ~n.r} &
+{\bn ~ne} &
+{\bn ~nai} &
+{\bn ~no} &
+{\bn ~nau} \\ \hline
+ {\tt .t} &
+{\bn .ta} &
+{\bn .taa} &
+{\bn .ti} &
+{\bn .tii} &
+{\bn .tu} &
+{\bn .tuu} &
+{\bn .t.r} &
+{\bn .te} &
+{\bn .tai} &
+{\bn .to} &
+{\bn .tau} \\ \hline
+ {\tt .th} &
+{\bn .tha} &
+{\bn .thaa} &
+{\bn .thi} &
+{\bn .thii} &
+{\bn .thu} &
+{\bn .thuu} &
+{\bn .th.r} &
+{\bn .the} &
+{\bn .thai} &
+{\bn .tho} &
+{\bn .thau} \\ \hline
+ {\tt .d} &
+{\bn .da} &
+{\bn .daa} &
+{\bn .di} &
+{\bn .dii} &
+{\bn .du} &
+{\bn .duu} &
+{\bn .d.r} &
+{\bn .de} &
+{\bn .dai} &
+{\bn .do} &
+{\bn .dau} \\ \hline
+ {\tt .dh} &
+{\bn .dha} &
+{\bn .dhaa} &
+{\bn .dhi} &
+{\bn .dhii} &
+{\bn .dhu} &
+{\bn .dhuu} &
+{\bn .dh.r} &
+{\bn .dhe} &
+{\bn .dhai} &
+{\bn .dho} &
+{\bn .dhau} \\ \hline
+ {\tt .n} &
+{\bn .na} &
+{\bn .naa} &
+{\bn .ni} &
+{\bn .nii} &
+{\bn .nu} &
+{\bn .nuu} &
+{\bn .n.r} &
+{\bn .ne} &
+{\bn .nai} &
+{\bn .no} &
+{\bn .nau} \\ \hline
+ {\tt t} &
+{\bn ta} &
+{\bn taa} &
+{\bn ti} &
+{\bn tii} &
+{\bn tu} &
+{\bn tuu} &
+{\bn t.r} &
+{\bn te} &
+{\bn tai} &
+{\bn to} &
+{\bn tau} \\ \hline
+ {\tt th} &
+{\bn tha} &
+{\bn thaa} &
+{\bn thi} &
+{\bn thii} &
+{\bn thu} &
+{\bn thuu} &
+{\bn th.r} &
+{\bn the} &
+{\bn thai} &
+{\bn tho} &
+{\bn thau} \\ \hline
+ {\tt d} &
+{\bn da} &
+{\bn daa} &
+{\bn di} &
+{\bn dii} &
+{\bn du} &
+{\bn duu} &
+{\bn d.r} &
+{\bn de} &
+{\bn dai} &
+{\bn do} &
+{\bn dau} \\ \hline
+ {\tt dh} &
+{\bn dha} &
+{\bn dhaa} &
+{\bn dhi} &
+{\bn dhii} &
+{\bn dhu} &
+{\bn dhuu} &
+{\bn dh.r} &
+{\bn dhe} &
+{\bn dhai} &
+{\bn dho} &
+{\bn dhau} \\ \hline
+ {\tt n} &
+{\bn na} &
+{\bn naa} &
+{\bn ni} &
+{\bn nii} &
+{\bn nu} &
+{\bn nuu} &
+{\bn n.r} &
+{\bn ne} &
+{\bn nai} &
+{\bn no} &
+{\bn nau} \\ \hline
+ {\tt p} &
+{\bn pa} &
+{\bn paa} &
+{\bn pi} &
+{\bn pii} &
+{\bn pu} &
+{\bn puu} &
+{\bn p.r} &
+{\bn pe} &
+{\bn pai} &
+{\bn po} &
+{\bn pau} \\ \hline
+ {\tt ph} &
+{\bn pha} &
+{\bn phaa} &
+{\bn phi} &
+{\bn phii} &
+{\bn phu} &
+{\bn phuu} &
+{\bn ph.r} &
+{\bn phe} &
+{\bn phai} &
+{\bn pho} &
+{\bn phau} \\ \hline
+ {\tt b} &
+{\bn ba} &
+{\bn baa} &
+{\bn bi} &
+{\bn bii} &
+{\bn bu} &
+{\bn buu} &
+{\bn b.r} &
+{\bn be} &
+{\bn bai} &
+{\bn bo} &
+{\bn bau} \\ \hline
+ {\tt bh} &
+{\bn bha} &
+{\bn bhaa} &
+{\bn bhi} &
+{\bn bhii} &
+{\bn bhu} &
+{\bn bhuu} &
+{\bn bh.r} &
+{\bn bhe} &
+{\bn bhai} &
+{\bn bho} &
+{\bn bhau} \\ \hline
+ {\tt m} &
+{\bn ma} &
+{\bn maa} &
+{\bn mi} &
+{\bn mii} &
+{\bn mu} &
+{\bn muu} &
+{\bn m.r} &
+{\bn me} &
+{\bn mai} &
+{\bn mo} &
+{\bn mau} \\ \hline
+ {\tt y} &
+{\bn ya} &
+{\bn yaa} &
+{\bn yi} &
+{\bn yii} &
+{\bn yu} &
+{\bn yuu} &
+{\bn y.r} &
+{\bn ye} &
+{\bn yai} &
+{\bn yo} &
+{\bn yau} \\ \hline
+ {\tt .y} &
+{\bn .ya} &
+{\bn .yaa} &
+{\bn .yi} &
+{\bn .yii} &
+{\bn .yu} &
+{\bn .yuu} &
+{\bn .y.r} &
+{\bn .ye} &
+{\bn .yai} &
+{\bn .yo} &
+{\bn .yau} \\ \hline
+ {\tt r} &
+{\bn ra} &
+{\bn raa} &
+{\bn ri} &
+{\bn rii} &
+{\bn ru} &
+{\bn ruu} &
+{\bn r.r} &
+{\bn re} &
+{\bn rai} &
+{\bn ro} &
+{\bn rau} \\ \hline
+ {\tt \char`~r} &
+{\bn ~ra} &
+{\bn ~raa} &
+{\bn ~ri} &
+{\bn ~rii} &
+{\bn ~ru} &
+{\bn ~ruu} &
+{\bn ~r.r} &
+{\bn ~re} &
+{\bn ~rai} &
+{\bn ~ro} &
+{\bn ~rau} \\ \hline
+ {\tt l} &
+{\bn la} &
+{\bn laa} &
+{\bn li} &
+{\bn lii} &
+{\bn lu} &
+{\bn luu} &
+{\bn l.r} &
+{\bn le} &
+{\bn lai} &
+{\bn lo} &
+{\bn lau} \\ \hline
+ {\tt v} &
+{\bn va} &
+{\bn vaa} &
+{\bn vi} &
+{\bn vii} &
+{\bn vu} &
+{\bn vuu} &
+{\bn v.r} &
+{\bn ve} &
+{\bn vai} &
+{\bn vo} &
+{\bn vau} \\ \hline
+ {\tt "s} &
+{\bn "sa} &
+{\bn "saa} &
+{\bn "si} &
+{\bn "sii} &
+{\bn "su} &
+{\bn "suu} &
+{\bn "s.r} &
+{\bn "se} &
+{\bn "sai} &
+{\bn "so} &
+{\bn "sau} \\ \hline
+ {\tt .s} &
+{\bn .sa} &
+{\bn .saa} &
+{\bn .si} &
+{\bn .sii} &
+{\bn .su} &
+{\bn .suu} &
+{\bn .s.r} &
+{\bn .se} &
+{\bn .sai} &
+{\bn .so} &
+{\bn .sau} \\ \hline
+ {\tt s} &
+{\bn sa} &
+{\bn saa} &
+{\bn si} &
+{\bn sii} &
+{\bn su} &
+{\bn suu} &
+{\bn s.r} &
+{\bn se} &
+{\bn sai} &
+{\bn so} &
+{\bn sau} \\ \hline
+ {\tt h} &
+{\bn ha} &
+{\bn haa} &
+{\bn hi} &
+{\bn hii} &
+{\bn hu} &
+{\bn huu} &
+{\bn h.r} &
+{\bn he} &
+{\bn hai} &
+{\bn ho} &
+{\bn hau} \\ \hline
+ {\tt R} &
+{\bn Ra} &
+{\bn Raa} &
+{\bn Ri} &
+{\bn Rii} &
+{\bn Ru} &
+{\bn Ruu} &
+{---} &
+{\bn Re} &
+{\bn Rai} &
+{\bn Ro} &
+{\bn Rau} \\ \hline
+ {\tt Rh} &
+{\bn Rha} &
+{\bn Rhaa} &
+{\bn Rhi} &
+{\bn Rhii} &
+{\bn Rhu} &
+{\bn Rhuu} &
+{---} &
+{\bn Rhe} &
+{\bn Rhai} &
+{\bn Rho} &
+{\bn Rhau} \\ \hline
+\end{tabular}
+\vspace{0.10in}
+\end{center}
+} % end vbox
+\end{table}
+
+\end{document}
diff --git a/language/bengali/pandey/doc/bengdoc.pdf b/language/bengali/pandey/doc/bengdoc.pdf
new file mode 100644
index 0000000000..e1efdf0a55
--- /dev/null
+++ b/language/bengali/pandey/doc/bengdoc.pdf
Binary files differ
diff --git a/language/bengali/pandey/doc/example.bn b/language/bengali/pandey/doc/example.bn
new file mode 100644
index 0000000000..c8498e8017
--- /dev/null
+++ b/language/bengali/pandey/doc/example.bn
@@ -0,0 +1,55 @@
+% Example for "Bengali for TeX" package.
+% "Ajante" by Bonaphul
+
+\documentclass[12pt]{article}
+\usepackage{beng}
+
+\begin{document}
+\centerline{{\bn \LARGE ajaante}}
+\centerline{{\bn \Large banaphula}}
+\bigskip
+
+{\bn \large sedina aaphise maa{}ine peyechi|
+
+baaRi pherabaara pathe bhaabalaama `ora' janye eka.taa `ba.disa'
+kine niye .yaa{}i| becaarii aneka dina thekei balache|
+
+e -- dokaana se -- dokaana khu~mje jaamaa kinate praaya sandhyaa
+haye gela| jaamaa.ti kine beriyechi, b.r.s.tio aaramba ha'la| ki
+kari, daa~mRaate ha'la| b.r.s.ti.taa ek.tu dharate, jaamaa.ti bagale
+ka're, chaataa.ti maathaaya diye .yaacchi| baRa raastaa.tuku bena elaama,
+taar para{}i gali, taa -- o andhakaara|
+
+galite cuke anyamanaska haye bhaabate bhaabate .yaacchi, anekdin
+pare aaja natuna jaamaa peye taara mane ki aananda{}i na habe| aami --
+
+emana samaya ha.thaaTa eka.taa loka ghaaRe ese paRala| seo pa'Re
+gela, aamio pa'Re gelaama, jaamaa.taa kaadaaya maakhaamaakhi haye gela|
+
+aami u.the dekhi, loka.taa takhanao u.the ni, u.thabaara upakrama
+karache| baage jaamaara sarbaa"nga jva'le gela, maaralaama eka laakhi|
+
+raastaa dekhe calate paara na suyaara?
+
+maarera co.te se aabaara pa'Re gela, kintu kona javaaba karale na| taate
+aamaara aarao raaga ha'la, aarao maarate laagalaama|
+
+golamaala "sune paasera baaRira eka duuyaara khule gela| haate eka
+bhadraloka beriye ese jij~naasaa karalena, byaapaara ki masaa{}i?
+
+dekhuna diki masaa{}i, raaskela.taa aamaara eta .taakaara jaamaa.taa
+maa.ti ka're dile| kaadaaya maakhaamaakhi haye geche ekebaare|
+patha calate jaane naa, ghaaRe ese paRala|
+
+ke -- o? o.h, thaaka masaa{}i, maapa karuna, oke aara maarabena na |
+o becaaraa andha bobaa bhikhaarii, ei galitei thaake|
+
+taara dike ceye dekhi, maarera co.te se becaaraa kaa~mpache,
+gaa-maya kaadaa| aara aamaara dike kaataramukhe andhad.r.s.ti
+tule haata du.ti joRa ka're aache|}
+\vfill
+
+{\noindent\small Typeset with Bengali for \TeX{}}
+\end{document}
+
+
diff --git a/language/bengali/pandey/doc/example.pdf b/language/bengali/pandey/doc/example.pdf
new file mode 100644
index 0000000000..1af7ed15ec
--- /dev/null
+++ b/language/bengali/pandey/doc/example.pdf
Binary files differ
diff --git a/language/bengali/pandey/manifest.txt b/language/bengali/pandey/manifest.txt
new file mode 100644
index 0000000000..a0cc6ff63c
--- /dev/null
+++ b/language/bengali/pandey/manifest.txt
@@ -0,0 +1,28 @@
+beng.c
+beng.sty
+ubn.fd
+ubnx.fd
+doc/bengdoc.bn
+doc/bengdoc.pdf
+doc/example.bn
+doc/example.pdf
+mf/bn.mf
+mf/bnbanjon.mf
+mf/bndigit.mf
+mf/bnjuk.mf
+mf/bnkaar.mf
+mf/bnlig.mf
+mf/bnligtbl.mf
+mf/bnmacro.mf
+mf/bnmisc.mf
+mf/bnpunct.mf
+mf/bnr10.mf
+mf/bnsl10.mf
+mf/bnswar.mf
+mf/xbnr10.mf
+mf/xbnsl10.mf
+mf/xbnsupp.mf
+tfm/bnr10.tfm
+tfm/bnsl10.tfm
+tfm/xbnr10.tfm
+tfm/xbnsl10.tfm
diff --git a/language/bengali/pandey/mf/bn.mf b/language/bengali/pandey/mf/bn.mf
new file mode 100644
index 0000000000..89a96afef9
--- /dev/null
+++ b/language/bengali/pandey/mf/bn.mf
@@ -0,0 +1,17 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bn.mf: METAFONT file that calls the base files
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input bnswar;
+input bnkaar;
+input bnbanjon;
+input bndigit;
+input bnpunct;
+input bnlig;
+input bnmisc;
+input bnjuk;
+input bnligtbl;
+
+%% End of the file bn.mf
diff --git a/language/bengali/pandey/mf/bnbanjon.mf b/language/bengali/pandey/mf/bnbanjon.mf
new file mode 100644
index 0000000000..d2fc9de15f
--- /dev/null
+++ b/language/bengali/pandey/mf/bnbanjon.mf
@@ -0,0 +1,508 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnbanjon.mf: METAFONT file that defines the Bengali consonants
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("k",0.70stwd#,stht#,stdp#); "The letter ka";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (5/8w,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/8w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (5/8w,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (5/8w,3/4h);
+draw z3..z4;
+z8 = (7/8w,2/7h); z8r = z8 + (len/2,-len/2); z8l = z8 - (len/2,-len/2);
+penstroke z5e{right}..z8e;
+fill fullcircle scaled 1.1pt shifted (z8 - (0.44pt,-0.2pt));
+endchar;
+
+beginchar("K",0.62stwd#,stht#,stdp#); "The letter kha";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+rt z4 = (1/6w,14/25h); z5 = (1/2w,3/4h);
+z6 = (2/3w,3/5h); z7 = (1/4w,11/30h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z4{right}..{dir 30}z5{dir -45}..{down}z6{down}..{dir -165}z7;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z2l + (0.15pt,0) = z2r - (0.15pt,0) = z2 + (0,0.17pt);
+penstroke z7e{dir -10}..{dir -65}z2e;
+fill fullcircle scaled 1.3pt shifted (z4 + (0.15pt,0.39pt));
+endchar;
+
+beginchar("g",0.56stwd#,stht#,stdp#); "The letter ga";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+rt z4 = (5/6w,4/7h); top z5 = (9/20w,3/4h); rt z6 = (1/7w,11/21h);
+z7 = (1/2w,19/40h); z8 = (17/50w,4/15h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z4{dir 120}..{left}z5{left}..{down}z6{dir 30}..{down}z7{down}..{dir -125}z8;
+endchar;
+
+beginchar("G",0.56stwd#,stht#,stdp#); "The letter gha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0); draw z3..z4;
+z5 = (1/5w,3/4h-0.05pt); z6 = (1/8w,14/23h);
+z7 = (14/25w,21/40h); z8 = (2/9w,3/10h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z5{dir -120}..{down}z6{down}..{dir 30}z7--z8;
+z8r + (0.25pt,-0.25pt) = z8l - (0.25pt,-0.25pt) = z8;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z8e{right}..tension 1.5 ..{dir -75}z4e;
+endchar;
+
+beginchar("q",0.62stwd#,stht#,stdp#); "The letter una";
+z1 = (1/5w,3/4h); z2 = (19/40w,19/31h); z3 = (23/29w,23/31h);
+z4 = (1/2w,3/4h); z5 = (4/9w,3/8h); z6 = (19/40w,16/45h);
+z7 = (4/5w,1/2h); lft z8 = (7/8w,5/16h); z9 = (23/40w,1/12h);
+z10 = (9/50w,1/3h); z11 = (1/10w,13/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1..tension 1.2..{right}z2{right}..tension 1.2..
+{up}z3{up}..{dir -130}z4{dir -130}..
+tension 2..z5--z6{dir 0}..{dir 60}z7{dir -60}..{down}z8{down}
+..{left}z9{left}..z10..z11;
+endchar;
+
+beginchar("c",0.48stwd#,stht#,stdp#); "The letter cha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+top lft z3 = (1/6w,3/4h); lft z4 = (1/6w,1/4h);
+z5 = (2/5w,1/16h); z6 = (5/6w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6{dir 165}..{dir 100}z3;
+endchar;
+
+beginchar("C",0.55stwd#,stht#,stdp#); "The letter chha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+top z3 = (1/6w,3/4h); z4 = (1/6w,5/12h); z5 = (1/5w,3/8h);
+z6 = (11/20w,9/16h); z7 = (13/20w,9/16h); z8 = (5/6w,4/9h);
+z9 = (1/5w,9/40h); z10 = (w,-1/3d);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3..z4{down}..{right}z5{right}..{dir 80}z6{left}..{up}z3;
+draw z6{right}..z7..{down}z8{down}..{left}z9;
+z9r + (0.2pt,-0.2pt) = z9l - (0.2pt,-0.2pt) = z9;
+z10l + (0,0.15pt) = z10r - (0,0.15pt) = z10;
+penstroke z9e{right}..{dir -45}z10e;
+endchar;
+
+beginchar("j",0.70stwd#,stht#,stdp#); "The letter ja";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (8/20w,3/4h); z4 = (5/21w,1/2h); z5 = (8/20w,9/24h);
+z6 = (21/36w,37/80h); z7 = (11/16w,3/10h); z8 = (1/2w,1/8h);
+rt z9 = (1/10w,5/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir -135}..{down}z4{down}..{right}z5{right}..{dir30}z6
+ {dir -60}..{down}z7{down}..{left}z8{left}..{up}z9;
+rt z11 = z11l + (0.2pt,-0.2pt) = z11r - (0.2pt,-0.2pt) = (11/12w,3/5h);
+z12 = z12l + (0.15pt,0) = z12r - (0.15pt,0) = (8/9w,0);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z3{dir -90}..{dir 15}z11;
+penstroke z11e{dir -120}..{dir -75}z12e;
+endchar;
+
+beginchar("J",0.68stwd#,stht#,stdp#); "The letter jha";
+z1 = (w-0.9pt,3/4h); z2 = (w-0.9pt,1/11h);
+z3 = (5/8w,3/4h); z4 = (5/8w,0); lft z5 = 4/7[z3,z4];
+pickup pencircle scaled penth#; draw (z1+(0,0.3pt))..z2; draw z3..z4;
+draw (0,3/4h)..z3; draw z1..(w,3/4h);
+draw z5{dir -45}..{dir -75}z2;
+rt z6 = (5/8w,13/20h); z7 = (1/7w,8/21h);
+pickup pencircle scaled 0.5pt;
+draw z6{z7-z6 rotated -8}..z7;
+z4 + (0,0.2pt) = z4l + (0.15pt,0) = z4r - (0.15pt,0);
+z7 = z7r + (0.2pt,-0.2pt) = z7l - (0.1pt,-0.27pt);
+penstroke z7e{right}.. tension 1.5 .. z4e;
+endchar;
+
+beginchar("Q",0.90stwd#,stht#,stdp#); "The letter ina";
+numeric wd; wd = 17/24w;
+z1 = (9/20wd,2/5h); z2 = (19/25wd,3/4h); z3 = (6/7wd,2/3h);
+z4 = (6/7wd,0); z5 = (1/2wd,1/6h);
+z6 = (1/5wd,1/5h); z7 = (1/8wd,3/8h); z8 = (1/6wd,1/2h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{dir 135}..tension 1.2..{right}z2{right}..z3{down}..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw (z4+(0,0.2pt)){up}...{left}z5{left}..z6..{up}z7{up}..z8;
+fill fullcircle scaled 1.4pt shifted (z1 + (0.47pt,0.38pt));
+z9 = 9/20[z3,z4] + (0,0.4pt); z13 = 11/20[z3,z4] + (0,0.4pt); z10 = (8/9w,13/24h) + (0,0.4pt);
+z11 = (5/6w,1/3h) + (0,0.4pt); z12 = (8/9w,3/24h) + (0,0.4pt);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated 60;
+draw z9{dir 75}..z10..z11;
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -60;
+draw z13{dir -75}..z12..z11;
+fill fullcircle scaled 1.1pt shifted (z11 + (-0.1pt,0));
+endchar;
+
+beginchar("T",0.48stwd#,stht#,stdp#); "The letter Ta";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+top lft z3 = (1/6w,3/4h); lft z4 = (1/6w,1/4h);
+z5 = (2/5w,1/16h); z6 = (5/6w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6;
+fill fullcircle scaled 1.2pt shifted (z6 - (0.43pt,0.15pt));
+z7 = (w-0.7pt,3/4h); z8 = (1/2w,31/32h); z9 = (-1/8w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z7{dir 60}..{left}z8{left}...z9{dir 75};
+endchar;
+
+beginchar("Z",0.5stwd#,stht#,stdp#); "The letter Tha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (4/7w,3/4h); z4 = (1/6w,9/40h); z5 = (7/16w,1/16h);
+z6 = (5/6w,3/8h); z7 = (1/3w,9/8h); z8 = (2/5w,19/16h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3{dir -75}..{dir -150}z4{down}..{right}z5{right}..{up}z6{up}
+ ..{dir 120}z3..{up}z7{up}..{dir 45}z8;
+endchar;
+
+beginchar("D",0.60stwd#,stht#,stdp#); "The letter Da";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (1/2w,3/4h); z4 = (1/2w,9/22h); z5 = (11/20w,3/8h);
+z6 = (41/50w,21/40h); lft z7 = (8/9w,5/16h);
+z8 = (23/40w,1/12h); z9 = (1/10w,13/20h); z10 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{down}..{down}z4{dir -60}..{dir -60}z5{dir 30}..{dir60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+endchar;
+
+beginchar("X",0.48stwd#,stht#,stdp#); "The letter Dha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+top lft z3 = (1/6w,3/4h); lft z4 = (1/6w,1/4h);
+z5 = (2/5w,1/16h); z6 = (5/6w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6;
+fill fullcircle scaled 1.2pt shifted (z6 - (0.43pt,0.15pt));
+endchar;
+
+beginchar("N",0.52stwd#,stht#,stdp#); "The letter murdhanya Na";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+rt z4 = 1/4[z1,z2]; z5 = (7/16w,3/4h); rt z6 = (1/6w,9/16h); z7 = (3/8w,27/64h);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -30;
+draw z4{dir 130}..{left}z5{left}..{down}z6{down}...{dir 20}z7;
+fill fullcircle scaled 1.1pt shifted (z7+(0.08pt,0.37pt));
+endchar;
+
+beginchar("t",0.60stwd#,stht#,stdp#); "The letter ta";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+z3 = (1/2w,5/9h); lft z4 = (6/7w,7/20h);
+z5 = (3/5w,1/12h); rt z6 = (1/10w,13/20h); z7 = (1/5w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir 28}..{down}z4{down}..{left}z5{left}..z7..z6;
+fill fullcircle scaled 1.5pt shifted (z3 + (0.24pt,-0.44pt));
+endchar;
+
+beginchar("z",0.58stwd#,stht#,stdp#); "The letter tha";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+z4 = (1/7w,5/8h); z5 = (3/8w,3/4h);
+z6 = (3/5w,5/8h); z7 = (1/5w,3/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z4{dir 90}...{right}z5{right}..{down}z6{down}..{dir -160}z7;
+z2l + (0.1pt,-0.4pt) = z2r - (0.1pt,0.4pt) = z2;
+z7r + (0.1pt,-0.24pt) = z7l - (0.1pt,-0.24pt) = z7;
+penstroke z7e{right}..tension1.2..{dir -75}z2e;
+fill fullcircle scaled 1pt shifted (z4 + (0.33pt,0pt));
+endchar;
+
+beginchar("d",0.47stwd#,stht#,stdp#); "The letter da";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+z3 = (1/6w,3/4h); z4 = (1/6w,3/10h); draw z3..z4;
+z5 = (6/7w,4/7h); z4' = 1/2[z4,z5] + (0,0.25pt);
+pickup pencircle xscaled 0pt yscaled 0.5pt rotated 45;
+draw z4{z4'-z4}..z4'..{z5-z4'}z5;
+z6 = z6l + (0.17pt,0) = z6r - (0.17pt,0) = (3/4w,0);
+z5l + (0.2pt,-0.2pt) = z5r - (0.2pt,-0.2pt) = z5;
+penstroke z5e{dir -120}..{dir -75}z6e;
+endchar;
+
+beginchar("x",0.52stwd#,stht#,stdp#); "The letter dha";
+pickup pencircle scaled penth#;
+z1 = (w-0.9pt,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (w-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (w-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (w-0.9pt,3/4h);
+draw z3..z4;
+z8 = 9/20[z5,z6] + (0,0.2pt); z9 = (1/4w,27/40h); bot z10 = (11/30w,3/4h);
+pickup pencircle scaled 0.3pt;
+draw z8{left}..{up}z9{up}..{right}z10;
+fill fullcircle scaled 1.0pt shifted (z10 + (0.1pt,-0.33pt));
+endchar;
+
+beginchar("n",0.52stwd#,stht#,stdp#); "The letter na";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0);
+draw z1..z2; draw z3..z4;
+z5 = (1/4w,5/12h); bot z6 = z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z5{dir 20}..{down}z6;
+fill fullcircle scaled 1.5pt shifted (z5 - (-0.14pt,0.485pt));
+endchar;
+
+beginchar("p",0.60stwd#,stht#,stdp#); "The letter pa";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+rt z4 = (5/6w,5/9h); top z5 = (8/19w,3/4h); rt z6 = (1/8w,17/28h);
+z7 = (2/7w,3/8h); z8 = (17/24w,5/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z4--z8{z8-z4}..{left}z5{left}..{dir -140}z6{dir 30}..{dir -140}z7;
+pickup pencircle xscaled 0pt yscaled 0.6pt rotated 50;
+draw z7--z8;
+endchar;
+
+beginchar("f",0.67stwd#,stht#,stdp#); "The letter pha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+z3 = (13/20w,3/5h); z4 = (13/20w,0); draw z3..z4;
+top rt z5 = (1/10w,3/4h); z6 = (2/5w,43/80h); z7 = (1/6w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z7e{right}..tension 1.5 ..{dir -75}z4e;
+lft z8 = (7/8w,4/9h); z9 = (5/6w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{right}..{down}z8{down}..z9;
+fill fullcircle scaled 1.2pt shifted (z9 + (-0.18pt,0.30pt));
+endchar;
+
+beginchar("b",0.52stwd#,stht#,stdp#); "The letter ba";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (w-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (w-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (w-0.9pt,3/4h);
+draw z3..z4;
+endchar;
+
+beginchar("v",0.63stwd#,stht#,stdp#); "The letter bha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (2/5w,3/7h); z4 = (4/5w,1/2h); lft z5 = (7/8w,5/16h);
+z6 = (17/30w,1/12h); rt z7 = (1/10w,13/20h); z8 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 15;
+draw z3{dir -29}..{dir 60}z4{dir -50}..{down}z5{down}..{left}z6{left}..z8..z7;
+fill fullcircle scaled 1.65pt shifted (z3 + (0.36pt,0.48pt));
+endchar;
+
+beginchar("m",0.55stwd#,stht#,stdp#); "The letter ma";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0);
+draw z1..z2; draw z3..z4;
+z5 = (1/6w,3/4h-0.04pt); z6 = (7/16w,1/4h);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z5{dir -135}..z6{dir -142};
+z4l + (0.1pt,0) = z4r - (0.1pt,0) = z4;
+z6l + (0,0.23pt) = z6r - (0,0.23pt) = z6 + (0,0.27pt);
+penstroke z6e{right}..{down}z4e;
+fill fullcircle scaled 1.5pt shifted (z6 - (0.21pt,-0.03pt));
+endchar;
+
+beginchar("Y",0.55stwd#,stht#,stdp#); "The letter antashthya ja";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0); draw z3..z4;
+top rt z5 = (1/10w,3/4h); z6 = (1/2w,43/80h); z7 = (1/6w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z7e{right}..tension 1.5 ..{dir -75}z4e;
+endchar;
+
+beginchar("r",0.52stwd#,stht#,stdp#); "The letter ra";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (w-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (w-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (w-0.9pt,3/4h);
+draw z3..z4;
+fill fullcircle scaled 0.9pt shifted (9/20w,2/21h);
+endchar;
+
+beginchar("l",0.62stwd#,stht#,stdp#); "The letter la";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0);
+draw z1..z2; draw z3..z4;
+z5 = (5/6w,9/20h); z6 = (16/24w,5/9h); z7 = (9/16w,2/5h);
+z8 = (1/3w,5/9h); z9 = (1/8w,13/32h); z10 = (3/8w,4/15h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt;
+draw z5{dir 135}..{left}z6{left}..{dir -75}z7{dir 105}..{left}z8{left}
+ ..{down}z9{down}..{dir 14.5}z10;
+fill fullcircle scaled 1.2pt shifted (z10 + (-0.09pt,0.32pt));
+endchar;
+
+beginchar("S",0.56stwd#,stht#,stdp#); "The letter talabya sha";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+z4 = (0,3/4h); z5 = (5/16w,19/32h);
+top z6 = (14/25w,3/4h); z7 = 2/7[z1,z2];
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z4{right}..{dir -60}z5{dir 60}..{right}z6{right}..{z7-z6}z7;
+fill fullcircle xscaled 1.4pt yscaled 2.5pt rotated -45 shifted (z5 + (-0.50pt,-0.62pt));
+fill fullcircle xscaled 1.4pt yscaled 2.5pt rotated 45 shifted (z5 + (0.50pt,-0.62pt));
+endchar;
+
+beginchar("F",0.55stwd#,stht#,stdp#); "The letter murdhanya sa";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0); draw z3..z4;
+top rt z5 = (1/10w,3/4h); z6 = (1/2w,43/80h); z7 = (1/6w,1/3h); rt z8 = (5/6w,8/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7; draw (z6+(0,0.1pt))--z8;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z7e{right}..tension 2.5 ..{dir -75}z4e;
+endchar;
+
+beginchar("s",0.60stwd#,stht#,stdp#); "The letter danto sa";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0);
+draw z1..z2; draw z3..z4;
+top z5 = (1/9w,3/4h); rt z10 = (w-0.9pt,5/13h); z7 = (1/6w,1/3h); z8 = (1/4w,3/11h);
+z9 - z10 = 3/2(z7 - z8); rt z6 = 5/8[z8,z9];
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z5{right}..{down}z6;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z7..z8..z9...{dir -45}z10;
+endchar;
+
+beginchar("h",0.5stwd#,stht#,stdp#); "The letter ha";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (3/10w,3/4h); z4 = (1/3w,3/5h); z5 = (5/6w,1/2h);
+lft z6 = (1/8w,5/16h); z7 = (w,-1/3d);
+z6l + (0.15pt,-0.3pt) = z6r - (0.15pt,-0.3pt) = z6;
+z7l - (0,0.15pt) = z7r + (0,0.15pt) = z7;
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z4{dir 30}..{down}z5{down}..{dir 150}z6;
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+penstroke z6e{dir -30}..{dir -45}z7e;
+fill fullcircle xscaled 1.5pt yscaled 1pt rotated 30 shifted (z4 + (0,-0.20pt));
+endchar;
+
+beginchar("R",0.60stwd#,stht#,stdp#); "The letter Da-e bindu ra";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (1/2w,3/4h); z4 = (1/2w,9/22h); z5 = (11/20w,3/8h);
+z6 = (41/50w,21/40h); lft z7 = (8/9w,5/16h);
+z8 = (23/40w,1/12h); z9 = (1/10w,13/20h); z10 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{down}..{down}z4{dir -60}..{dir -60}z5{dir 30}..{dir60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+fill fullcircle scaled 1.2pt shifted (23/40w,-2/5d);
+endchar;
+
+beginchar("V",0.48stwd#,stht#,stdp#); "The letter Dha-e bindu ra";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+top lft z3 = (1/6w,3/4h); lft z4 = (1/6w,1/4h);
+z5 = (2/5w,1/16h); z6 = (5/6w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6;
+fill fullcircle scaled 1.2pt shifted (z6 - (0.43pt,0.15pt));
+fill fullcircle scaled 1.2pt shifted (3/8w,-2/5d);
+endchar;
+
+beginchar("y",0.55stwd#,stht#,stdp#); "The letter antashthya ya";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0); draw z3..z4;
+top rt z5 = (1/10w,3/4h); z6 = (1/2w,43/80h); z7 = (1/6w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z7e{right}..tension 1.5 ..{dir -75}z4e;
+fill fullcircle scaled 1.2pt shifted (11/25w,1/20h);
+endchar;
+
+beginchar("B",0.52stwd#,stht#,stdp#); "The letter khanda-ta";
+z1 = (17/60w,28/40h); z2 = (1/2w,4/7h); z3 = (2/3w,52/80h);
+z4 = (1/2w,3/4h); z5 = (1/7w,21/40h); z6 = (9/10w,0);
+pickup pencircle xscaled 0.5pt yscaled 0.3pt rotated 60;
+%pickup pencircle scaled 0.4pt;
+draw z1..{right}z2{right}..{up}z3{up}..{left}z4{left} ..z1..
+{down}z5{down}..{down}z6;
+endchar;
+
+beginchar("M",0.32stwd#,stht#,stdp#); "The letter anuswar";
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+z1 = (1/2w,3/4h); z2 = (1/2w,3/4h-11/20w); draw z1..z2..cycle;
+z3 = z3l - (0,0.30pt) = z3r + (0,0.30pt) = (1/5w,17/40h);
+z4 = z4l - (0,0.20pt) = z4r + (0,0.20pt) = (w,0);
+penstroke z3e{dir -45}...{dir -75}z4e;
+endchar;
+
+beginchar("H",0.27stwd#,stht#,stdp#); "The letter bisarga";
+z1 = (1/2w,3/4h); z4 = (1/2w,1/10h); z2 = (1/2w,3/4h-2/3w); z3 = (1/2w,1/10h+2/3w);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z1..z2..cycle; draw z3..z4..cycle;
+endchar;
+
+beginchar("w",0stwd#,stht#,stdp#); "chandrabindu";
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+z1 = (w-2.6pt,h); z2 = (w-1pt,3/4h+0.4pt); z3 = (w+0.6pt,h);
+draw z1..{right}z2{right}..z3;
+fill fullcircle scaled 1.1pt shifted (-1pt,h);
+endchar;
+
+%%% End of bnbanjon.mf
diff --git a/language/bengali/pandey/mf/bndigit.mf b/language/bengali/pandey/mf/bndigit.mf
new file mode 100644
index 0000000000..a77a226f27
--- /dev/null
+++ b/language/bengali/pandey/mf/bndigit.mf
@@ -0,0 +1,86 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bndigit.mf: METAFONT file that defines the Bengali digits
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar("0",0.48stwd#,stht#,stdp#); "The number 0";
+z1 = (1/2w,7/16h+19/50w); z2 = (1/2w,7/16h-19/50w);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1..z2..cycle;
+endchar;
+
+beginchar("1",0.52stwd#,stht#,stdp#); "The number 1";
+z1 = (1/5w,3/4h); z2 = (3/4w,3/8h); z3 = (5/6w,1/4h); z4 = (7/12w,1/15h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1{dir -135}..z2..{down}z3{down}..{dir -160}z4;
+fill fullcircle xscaled 2.0pt yscaled 1.3pt rotated 20 shifted (z4 + (-0.12pt,0.35pt));
+endchar;
+
+beginchar("2",0.52stwd#,stht#,stdp#); "The number 2";
+z1 = (1/4w,3/4h); z2 = (5/9w,11/24h); z3 = (3/4w,21/41h);
+z4 = (1/5w,1/3h); z5 = (9/10w,-d/5);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt;
+draw z1{dir -135}..tension 2..{dir -45}z3{dir -45}..{dir 150}z4;
+z4l + (0.1pt,-0.35pt) = z4r - (0.1pt,-0.35pt) = z4 - (0.30pt,-0.04pt);
+z5l - (0.15pt,0) = z5r + (0.15pt,0) = z5;
+penstroke z4e{dir -30}..{dir -45}z5e;
+endchar;
+
+beginchar("3",0.60stwd#,stht#,stdp#); "The number 3";
+z3 = (1/2w,5/9h); lft z4 = (6/7w,7/20h);
+z5 = (3/5w,1/12h); rt z6 = (1/10w,13/20h); z7 = (1/5w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir 28}..{down}z4{down}..{left}z5{left}..z7..z6;
+fill fullcircle scaled 1.5pt shifted (z3 + (0.24pt,-0.44pt));
+endchar;
+
+beginchar("4",0.54stwd#,stht#,stdp#); "The number 4";
+z1 = (1/2w,3/4h); z2 = (1/6w,9/16h); z3 = (1/2w,3/8h);
+z4 = (5/6w,3/16h); z5 = (1/2w,0); z6 = (1/6w,3/16h); z7 = (5/6w,9/16h);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated 45;
+draw z1..z2..z3..z4..z5..z6..z3..z7..cycle;
+endchar;
+
+beginchar("5",0.54stwd#,stht#,stdp#); "The number 5";
+z1 = (1/2w,3/4h); z2 = (1/5w,1/9h); z3 = (3/4w,0); z4 = (9/10w,11/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{dir -145}..{dir -50}z2{dir -50}..{right}z3{dir 150}..
+{dir 30}z4{left}..{up}z1;
+endchar;
+
+beginchar("6",0.59stwd#,stht#,stdp#); "The number 6";
+top z3 = (7/20w,3/4h); z4 = (1/2w,9/22h); z5 = (11/20w,3/8h);
+z6 = (41/50w,21/40h); lft z7 = (8/9w,5/16h);
+z8 = (23/40w,1/12h); z9 = (1/10w,13/20h); z10 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir -10}..tension 1.2..{dir -70}z4{dir -60}..{dir -60}z5{dir 30}..{dir 60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+endchar;
+
+beginchar("7",0.48stwd#,stht#,stdp#); "The number 7";
+z1 = (3/4w,10/21h); z2 = (1/6w,1/2h); z3 = (1/2w,3/4h); z4 = (8/9w,0);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{left}..tension 1.4..{dir 135}z2{dir 135}..tension 1.4..
+{right}z3{right}..z1..tension 2.2..{dir -15}z4;
+endchar;
+
+beginchar("8",0.55stwd#,stht#,stdp#); "The number 8";
+z1 = (1/10w,3/4h); z2 = (1/6w,3/7h); z3 = (1/6w,1/6h);
+z4 = (1/4w,1/16h); z5 = (13/20w,17/42h); z6 = (9/10w,1/2h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt;
+draw z1{right}..tension 2.2..{down}z2--z3{down}..z4{right}..
+{up}z5{dir 135}..tension 2..{dir -135}z2;
+pickup pencircle xscaled 0 yscaled 0.5pt rotated 30;
+draw z5{dir 75}..{dir 75}z6;
+endchar;
+
+beginchar("9",0.55stwd#,stht#,stdp#); "The number 9";
+z1 = (1/6w,3/4h); z2 = (7/8w,1/5h); z3 = (2/3w,0);
+z4 = (23/60w,1/4h); z5 = (1/6w,1/10h);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated 45;
+draw z1{down}..{down}z2{down}..{dir -165}z3{up}..{left}z4{left}..{dir -75}z5;
+fill fullcircle scaled 1.2pt shifted (z5 + (0.39pt,-0.1pt));
+endchar;
+
+%%% End of bndigit.mf
diff --git a/language/bengali/pandey/mf/bnjuk.mf b/language/bengali/pandey/mf/bnjuk.mf
new file mode 100644
index 0000000000..365448cac8
--- /dev/null
+++ b/language/bengali/pandey/mf/bnjuk.mf
@@ -0,0 +1,980 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnjuk.mf: METAFONT file that defines the Bengali conjunct consonants
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 20 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input bnmacro;
+
+newchar(128,0.70,"k + k");
+matra(w,h);
+ka_(1/7w,1/3h,6/7w-0.9pt,(3/4-1/3)*h,3/10);
+ka(4/17w,0,(6/7-4/17)*w-0.25pt,11/20h,3/10);
+endchar;
+
+newchar(129,0.55,"k + T");
+matra(w,h); tiki(w,h,0);
+ka(1/7w,11/40h,13/20w,(3/4-11/40)*h,3/8);
+_Dha(3/10w,0,7/10w-0.9pt,3/10h);
+endchar;
+
+newchar(130,0.75,"k + t");
+matra(w,h);
+tta(1/11w,0,(16/25-1/11)*w,3/4h-0.8pt);
+shnur(15/25w,3/8h,10/25w-0.4pt,11/60h);
+endchar;
+
+newchar(131,0.70,"k + b");
+matra(w,h);
+ka_(1/7w,1/3h,6/7w-0.9pt,(3/4-1/3)*h,1/10);
+ba(4/17w,0,(5/7-4/17)*w-0.6pt,11/20h);
+endchar;
+
+newchar(132,0.68,"k + m");
+matra(w,h);
+ka(1/10w,3/10h,15/26w,(3/4 - 3/10)*h,3/10);
+ma(29/50w,0,21/50w-0.9pt,1/3h,1.2,-0.5pt);
+endchar;
+
+newchar(133,0.84,"k + r");
+matra(w,h);
+tra(1/11w,0,(16/25-1/11)*w,2/3h);
+shnur(16/25w,3/8h,9/25w-0.4pt,11/60h);
+endchar;
+
+newchar(134,0.65,"k + l");
+matra(w,h);
+ka(1/4w,3/10h,3/4w-0.9pt,(3/4-3/10)*h,3/10);
+la(1/10w,0,(3/4-1/10)*w-0.6pt,3/10h,0);
+endchar;
+
+newchar(135,0.82,"k + s");
+matra(w,h);
+khiyo(1/10w,0,9/10w-0.9pt,3/4h);
+endchar;
+
+newchar(136,0.75,"k + s + n");
+matra(w,h);
+khiyo(1/9w,1/16h,8/9w-0.9pt,(3/4-1/16)*h);
+na(1/4w,-11/30d,5/12w-0.32pt,11/32h,0);
+endchar;
+
+newchar(137,0.85,"k + s + m");
+matra(w,h);
+khiyo(1/10w,1/16h,17/24w,(3/4-1/16)*h);
+ma(575/1000w,-3/4d,425/1000w-0.9pt,39/100h,1.35,0);
+endchar;
+
+newchar(138,0.67,"k + ss");
+matra(w,h); rtbar(w,h);
+ka(1/8w,3/11h,11/20w,(3/4-3/11)*h,3/8);
+_ds(1/5w,0,4/5w-0.9pt,3/5h);
+endchar;
+
+newchar(139,0.65,"g + dh");
+pickup dflt_pen;
+draw ((1/6+9/16)*w-0.18pt,3/4h)..(w,3/4h);
+ga(1/6w,3/8h,9/16w-0.18pt,3/8h,0);
+dha(3/8w,0,5/8w-0.9pt,3/7h);
+endchar;
+
+newchar(140,0.56,"g + n");
+pickup dflt_pen;
+draw (w-0.9pt,3/4h)..(w,3/4h);
+ga(1/6w,3/8h,5/6w-0.9pt,3/8h,0);
+na(1/4w,0,3/4w-0.9pt,3/8h,1/9);
+endchar;
+
+newchar(141,0.56,"g + b");
+pickup dflt_pen;
+draw (w-0.9pt,3/4h)..(w,3/4h);
+ga(1/6w,3/8h,5/6w-0.9pt,3/8h,0);
+ba(4/9w,0,5/9w-0.9pt,3/7h);
+endchar;
+
+newchar(142,0.70,"g + m");
+pickup dflt_pen;
+draw (2/3w,3/4h)..(w,3/4h);
+ga(1/9w,3/8h,5/9w,3/8h,0);
+ma(2/3w,0,1/3w-0.9pt,3/10h,1.4,(3/8-3/10)*h);
+endchar;
+
+newchar(143,0.59,"g + l");
+pickup dflt_pen;
+draw (w-0.9pt,3/4h)..(w,3/4h);
+ga(1/5w,3/8h,4/5w-0.9pt,3/8h,0);
+la(1/7w,0,6/7w-0.9pt,7/20h,1/9);
+endchar;
+
+newchar(144,0.52,"gh + n");
+matra(w,h);
+gha(1/6w,3/20h,5/6w-0.9pt,(3/4-3/20)*h);
+na(1/3w,-1/4d,2/3w-0.9pt,3/8h,0);
+endchar;
+
+newchar(145,0.60,"una + k");
+matra(w,h);
+na(1/7w,2/5h,31/61w,(3/4-3/7)*h,-1);
+ka(1/5w,0,4/5w-0.9pt,31/60h,3/10);
+z1 = (11/20w,3/4h); z3 = (19/20w,3/4h); z2 = 3/5[z1,z3] - (0,1/7h);
+pickup dflt_pen; draw z1{dir -45}..z2..z3;
+endchar;
+
+newchar(146,1.22,"una + k + s");
+una(1/14w,1/8h,(5/12-1/12)*w,(3/4-1/8)*h);
+khiyo(5/12w,0,7/12w-0.9pt,3/4h);
+pickup dflt_pen; draw (4/11w,3/4h)..(w,3/4h);
+endchar;
+
+newchar(147,0.80,"una + kh");
+una(1/9w,1/5h,(1/2-1/60)*w,(3/4-1/5)*h);
+rtbar(w,21/20h); matra(1/7w,h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+z1 = (29/50w,21/40h); z2 = (7/10w,18/50h); z3 = (29/50w,1/5h); z4 = (w-0.9pt,0);
+draw z1{dir -45}..{down}z2{down}..{dir -135}z3{dir -15}..z4;
+endchar;
+
+newchar(148,0.58,"una + g");
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (1/10w,3/4h); z4 = (1/6w,3/5h); z5 = (1/8w,17/80h);
+z6 = (1/5w,1/5h); z7 = 1/3[z6,z8];
+z8 = (8/9w,11/19h); z9 = (5/6w,0);
+pickup pencircle xscaled 0.2pt yscaled 0.6pt rotated 45;
+draw z4{dir 30}..z7..tension 2..z6..z5;
+draw z7..{dir 35}z8{dir -120}..{dir -75}z9;
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+fill fullcircle scaled 1.2pt shifted (z4 + (0.19pt,-0.25pt));
+z1' = (9/20w,3/4h); z3' = (17/20w,3/4h); z2' = 3/5[z1',z3'] - (0,1/7h);
+pickup dflt_pen; draw z1'{dir -45}..z2'..z3';
+endchar;
+
+newchar(149,0.90,"una + gh");
+una(1/12w,1/8h,(1/2-1/18)*w,(3/4-1/8)*h);
+gha(1/2w,0,1/2w-0.9pt,3/4h);
+pickup dflt_pen; draw (9/19w,3/4h)..(w,3/4h);
+endchar;
+
+newchar(150,0.65,"una + m");
+una(1/9w,1/5h,(2/3-1/15)*w,(3/4-1/5)*h);
+ma(3/5w,0,2/5w-0.9pt,31/120h,1.8,-0.5pt);
+pickup dflt_pen; draw (19/30w,3/4h)..(w,3/4h);
+endchar;
+
+newchar(151,0.75,"ch + ch");
+matra(w,h);
+cha(1/8w,1/5h,(17/40-1/8)*w,(3/4-1/5)*h);
+cha(19/40w,0,21/40w-0.9pt,3/4h);
+endchar;
+
+newchar(152,0.75,"ch + chh");
+matra(w,h);
+cha(1/8w,1/5h,(17/40-1/8)*w,(3/4-1/5)*h);
+chha(19/40w,0,21/40w-0.9pt,3/4h);
+endchar;
+
+newchar(153,0.73,"ch + chh + b");
+matra(w,h);
+cha(1/8w,1/4h,(17/40-1/8)*w,(3/4-1/4)*h);
+chha(19/40w,1/15h,21/40w-0.9pt,(3/4-1/15)*h);
+ba(5/9w,-17/40d,1/4w,1/4h);
+endchar;
+
+newchar(154,0.65,"ch + ina");
+matra(w,h);
+cha(1/5w,3/9h,3/10w,(3/4-3/9)*h);
+ina(1/8w,0,7/8w-0.9pt,3/7h);
+endchar;
+
+newchar(155,0.95,"j + j");
+matra(w,h);
+ja(1/12w,11/50h,2/5w,(3/4-11/50)*h);
+ja(21/50w,0,23/50w,31/50h);
+jaleg(31/50w,0,19/50w-0.8pt,31/50h);
+top z1 = (12/50w,3/4h); z2 = (62/100w,31/50h);
+pickup pencircle xscaled 0.25pt yscaled 0.5pt;
+draw z1{dir -60}..{dir 15}z2;
+endchar;
+
+newchar(156,0.95,"j + j + b");
+matra(w,h);
+ja(1/12w,11/50h,2/5w,(3/4-11/50)*h);
+ja(21/50w,0,23/50w,31/50h);
+jaleg(31/50w,-1/30d,19/50w-0.6pt,1/30d + 31/50h);
+top z1 = (12/50w,3/4h); z2 = (62/100w,31/50h);
+pickup pencircle xscaled 0.25pt yscaled 0.5pt;
+draw z1{dir -60}..{dir 15}z2;
+z3 = (w-1.15pt,1/8h); z4 = (27/40w,-1/30h); z5 = (w-0.95pt,-3/5d);
+pickup dflt_pen;
+draw z3{z4-z3 rotated -3}..z4;
+draw z4{z5-z4 rotated -5}..{z5-z4 rotated 5}z5--z3;
+endchar;
+
+newchar(157,1.20,"j + jha");
+matra(79/100w,h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+ja(1/12w,0,(1/2-1/12)*w,3/4h);
+jaleg(13/50w,0,(1/2-1/4)*w,3/4h);
+jha(1/2w,0,1/2w-0.9pt,3/4h,1.05);
+endchar;
+
+newchar(158,0.75,"j + ina");
+matra(w,h);
+ja(1/10w,0,11/16w,3/4h);
+hump(59/100w,9/38h,2/5w-0.9pt,1/3h);
+top z1 = (2/5w,3/4h); z2 = (23/40w,4/9h);
+pickup dflt_pen; draw z1..z2;
+endchar;
+
+newchar(159,0.72,"j + b");
+matra(w,h);
+ja(1/10w,0,11/16w,3/4h);
+jaleg(2/5w,-3/8d,3/5w-0.7pt,3/8d + 3/4h);
+z1 = (w-1.5pt,1/5h); z2 = (1/2w,1/30h); z3 = (w-1.15pt,-1/2d);
+pickup dflt_pen; draw z1{z2-z1 rotated -4}..z2; draw z2{z3-z2 rotated -6}..z3;
+endchar;
+
+beginchar(160,0.80stwd#,stht#,stdp#); "ina + ch";
+numeric wd; wd = 11/20w+0.9pt;
+z1 = (wd-0.9pt,3/4h+0.3pt); z2 = (wd-0.9pt,0);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+z4 = (1/7wd,5/8h); z5 = (3/8wd,3/4h);
+z6 = (3/5wd,5/8h); z7 = (1/5wd,3/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z4{dir 90}...{right}z5{right}..{down}z6{down}..{dir -160}z7;
+z2l + (0.1pt,-0.4pt) = z2r - (0.1pt,0.4pt) = z2;
+z7r + (0.1pt,-0.24pt) = z7l - (0.1pt,-0.24pt) = z7;
+penstroke z7e{right}..tension1.2..{dir -75}z2e;
+fill fullcircle scaled 1pt shifted (z4 + (0.33pt,0pt));
+hump(11/20w,1/4h,9/20w-1.1pt,9/20h);
+endchar;
+
+newchar(161,0.60,"ina + chh");
+z1 = (1/8w,13/20h); bot z2 = (3/10w,3/4h); z3 = (9/20w,13/20h);
+z4 = (1/8w,7/20h); z5 = (11/20w,8/20h); z5' = (26/40w,14/40h);
+z6 = (1/8w,1/8h); z7 = (w-0.5pt,-2/3d);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{up}..{right}z2{right}..{down}z3{down}..{down}z4{down}..{dir 60}z5
+ {dir -20}..z5'..{left}z6{right}..tension 1.5..z7;
+hump(9/20w,1/2h,11/20w-0.9pt,(3/4-1/2)*h);
+fill fullcircle scaled 1.1pt shifted (z1 + (0.34pt,0.06pt));
+endchar;
+
+newchar(162,0.69,"ina + j");
+ja(1/10w,0,13/17w,3/5h);
+hump(9/20w,1/2h,11/20w-0.9pt,(3/4-1/2)*h);
+z1 = (1/7w,12/19h); z2 = (1/3w,3/4h); z3 = (1/3w+0.48pt,3/5h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z1{up}..{right}z2{right}..{dir -135}z3;
+z4 = (5/6w,9/20h); z5 = (4/5w,0);
+pickup dflt_pen;
+draw z4{dir -120}..tension 1.8..z5;
+fill fullcircle scaled 1.1pt shifted (z1 + (0.45pt,-0.18pt));
+endchar;
+
+newchar(163,0.62,"ina + jh");
+ina(1/8w,3/8h,73/100w,3/8h);
+jha(1/5w,0,53/100w,3/7h,5/6);
+endchar;
+
+newchar(164,0.57,"T + T");
+matra(w,h);
+Dha(1/4w,1/15h,3/4w-0.9pt,(3/4-1/15)*h);
+tiki(w,h,0);
+z1 = (7/10w,1/5h); z2 = (1/2w,-1/3d); z3 = (1/8w,1/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z1{dir -30}..{left}z2{left}..{dir 125}z3;
+endchar;
+
+newchar(165,0.50,"T + b");
+matra(w,h);
+Dha(1/6w,1/10h,5/6w-0.9pt,(3/4-1/10)*h);
+tiki(w,h,-1/12);
+ba(6/13w,-1/2d,1/2w-0.9pt,3/10h);
+endchar;
+
+newchar(166,0.90,"D + D");
+matra(w,h);
+Da(1/11w,1/4h,(2/5-1/12)*w,(3/4-1/4)*h);
+Da(21/50w,0,29/50w-0.9pt,3/4h);
+endchar;
+
+newchar(167,0.78,"N + T");
+pickup dflt_pen; draw ((6/13+1/35)*w,3/4h)..(w,3/4h);
+mna(1/11w,3/8h,(6/13-1/16)*w,3/8h,0);
+Dha(6/13w,0,7/13w-0.9pt,3/4h); tiki(w,h,1/4);
+endchar;
+
+newchar(168,0.61,"N + Th");
+mna(1/7w,39/80h,41/100w,(3/4-35/80)*h,-1);
+Tha(1/4w,0,3/4w-0.9pt,3/4h);
+endchar;
+
+beginchar(169,0.63stwd#,stht#,stdp#); "N + D";
+z1 = (1/5w,61/100h); z1' = (39/100w,3/4h);
+z2' = (60/100w,3/5h); z2 = (74/100w,76/100h);
+z4 = (18/25w,8/20h); z5 = (7/8w,12/50h);
+z6 = (23/40w,1/18h); z8 = (1/10w,13/20h); z7 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1{dir 100}..{right}z1'{right}..{dir -60}z2'{dir 60}..
+ {dir 45}z2{dir -35}..{dir -135}z4
+ {dir -30}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+fill fullcircle scaled 1.2pt shifted (z1 + (0.40pt,0.2pt));
+endchar;
+
+newchar(170,0.52,"N + N");
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+mna(1/6w,3/8h,5/6w-0.9pt,3/8h,1/9);
+mna(1/6w,0,5/6w-0.9pt,3/8h,0);
+endchar;
+
+newchar(171,0.65,"N + m");
+pickup dflt_pen; draw (5/8w,3/4h)..(w,3/4h);
+mna(1/8w,3/8h,1/2w,3/8h,1/9);
+ma(5/8w,0,3/8w-0.9pt,3/8h,1,0);
+endchar;
+
+newchar(172,0.57,"t + t");
+matra(w,h);
+tta(1/7w,0,6/7w-0.9pt,3/4h-0.8pt);
+endchar;
+
+newchar(173,0.55,"t + t + b");
+matra(w,h);
+tta(1/7w,1/9h,6/7w-0.9pt,(3/4-1/9)*h-0.7pt);
+ba(5/11w,-1/3d,1/3w,3/10h);
+endchar;
+
+beginchar(174,0.62stwd#,stht#,stdp#); "t + th";
+z1 = (w-0.9pt,3/4h+0.3pt); z1' = (w-0.9pt,3/4h); z2 = (w-0.9pt,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+z4 = (1/7w,3/5h); z4' = (7/25w,3/4h);
+z5 = (9/20w,3/5h); z5' = (11/20w,3/4h);
+z6 = (13/20w,5/8h); z7 = (1/4w,3/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z4{dir 100}...{right}z4'{right}..{dir -60}z5{dir 60}..
+ {dir 45}z5'{dir -50}..{down}z6{down}..{dir -160}z7;
+z2l + (0.1pt,-0.4pt) = z2r - (0.1pt,0.4pt) = z2;
+z7r + (0.1pt,-0.24pt) = z7l - (0.1pt,-0.24pt) = z7;
+penstroke z7e{right}..tension1.2..{dir -75}z2e;
+fill fullcircle scaled 1pt shifted (z4 + (0.33pt,0.2pt));
+endchar;
+
+newchar(175,0.58,"t + n");
+matra(w,h);
+ta_(1/10w,1/3h,9/10w-0.9pt,(3/4-1/3)*h);
+na(7/24w,0,17/24w-1.2pt,29/80h,0);
+endchar;
+
+newchar(176,0.60,"t + b");
+matra(w,h);
+ta_(1/10w,3/10h,9/10w-0.9pt,(3/4-3/10)*h);
+ba(4/9w,0,1/2w-0.9pt,3/8h);
+endchar;
+
+newchar(177,0.74,"t + m");
+matra(w,h);
+ta_(1/12w,1/3h,3/5w,(3/4 - 1/3)*h);
+ma(3/5w,0,2/5w-0.9pt,1/3h,1.2,-0.5pt);
+endchar;
+
+newchar(178,0.66,"t + r");
+matra(w,h);
+tra(1/8w,0,7/8w-0.9pt,2/3h);
+endchar;
+
+newchar(179,0.80,"t + r + u");
+matra(w,h);
+tra(1/10w,0,11/20w,2/3h);
+z1' = (13/20w,2/5h); z2' = (w-0.4pt,47/100h); z3' = (17/20w,3/5h);
+pickup pencircle scaled penth#;
+draw z1'{dir -60}..{up}z2'{up}..{left}z3';
+fill fullcircle scaled 1.3pt shifted (z3' + (-0.1pt,-0.46pt));
+endchar;
+
+newchar(180,0.87,"d + g");
+matra(21/50w,h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+da(1/10w,0,(19/50-1/10)*w,3/4h,0);
+ga(23/50w,3/9h,27/50w-0.9pt,(3/4-3/9)*h,0.8);
+endchar;
+
+newchar(181,0.84,"d + gh");
+matra(w,h);
+da(1/10w,0,(19/50-1/11)*w,3/4h,0);
+gha(23/50w,0,27/50w-0.9pt,3/4h);
+endchar;
+
+newchar(182,0.58,"d + d");
+matra(w,h)
+da(1/8w,11/40h,(9/20-1/8)*w,(3/4-11/40)*h,0);
+da(9/20w+0.1pt,0,1/2w-1.0pt,(3/4-1/40)*h,-33/50);
+endchar;
+
+newchar(183,0.62,"d + dh");
+matra(w,h);
+da_(1/7w,3/8h,(2/3-1/7)*w-0.07pt,3/8h);
+dha(1/4w,0,3/4w-0.9pt,1/2h);
+endchar;
+
+newchar(184,0.53,"d + b");
+matra(w,h);
+da_(1/6w,3/8h,5/6w-0.9pt,3/8h);
+ba(1/3w,0,2/3w-0.9pt,1/2h);
+endchar;
+
+newchar(185,0.62,"d + bh");
+matra(w,h);
+da(1/6w,7/25h,1/3w,(3/4-7/25)*h,0);
+bha(1/8w,0,7/8w-0.9pt,8/19h);
+endchar;
+
+newchar(186,0.62,"d + bh + r");
+matra(w,h);
+da(1/6w,7/25h,1/3w,(3/4-7/25)*h,0);
+bhra(1/8w,0,7/8w-0.9pt,8/19h);
+endchar;
+
+newchar(187,0.56,"d + m");
+matra(w,h)
+da(1/8w,1/7h,(23/40-1/8)*w,(3/4-1/7)*h,0);
+ma(23/40w-0.1pt,0,17/40w-0.8pt,1/4h,2.0,0);
+endchar;
+
+newchar(188,0.50,"dh + n");
+dha_(9/40w,3/14h,31/40w-0.9pt,(3/4-3/14)*h);
+na(1/6w,-1/4d,5/6w-0.9pt,3/8h,0);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+endchar;
+
+newchar(189,0.92,"dh + b");
+dha_(1/11w,0,(1/2-1/10)*w,3/4h);
+ba(1/2w,0,1/2w-0.9pt,3/4h);
+pickup dflt_pen; draw (1/2w,3/4h)..(w,3/4h);
+endchar;
+
+newchar(190,0.78,"n + T");
+matra(w,h);
+na(1/8w,3/10h,(6/13-19/180)*w,3/8h,1/9);
+Dha(6/13w,0,7/13w-0.9pt,3/4h); tiki(w,h,1/4);
+endchar;
+
+newchar(191,0.63,"n + D");
+matra(w,h);
+na(1/10w,7/18h,(2/5-1/14)*h,1/3h,1/12);
+Da(1/8w,0,7/8w-0.9pt,3/4h);
+endchar;
+
+newchar(192,0.62,"n + t");
+matra(w,h);
+na_(1/5w,11/25h,4/5w-0.7pt,(3/4-11/25)*h);
+ta(1/10w,0,11/12w-0.9pt,3/8h,0.4);
+endchar;
+
+newchar(193,0.60,"n + t + u");
+matra(w,h);
+na_(1/10w,12/25h,4/5w-0.7pt,(3/4-12/25)*h);
+tta(1/5w,-11/20d,4/5w-0.9pt,4/7h);
+endchar;
+
+newchar(194,0.60,"n + t + b");
+matra(w,h);
+na_(1/5w,12/25h,4/5w-0.7pt,(3/4-12/25)*h);
+ta(1/10w,1/8h,11/12w-0.9pt,3/10h,0.4);
+ba(17/30w,-2/5d,1/4w,1/4h);
+endchar;
+
+newchar(195,0.62,"n + t + r");
+matra(w,h);
+na_(1/5w,12/25h,4/5w-0.7pt,(3/4-12/25)*h);
+tra(1/7w,-1/4d,6/7w-0.9pt,21/40h);
+endchar;
+
+newchar(196,0.60,"n + th");
+matra(w,h);
+na_(1/10w,12/25h,4/5w-0.7pt,(3/4-12/25)*h);
+ha(3/10w,-1/3d,7/10w-0.3pt,5/8h);
+endchar;
+
+newchar(197,0.68,"n + d");
+matra(w,h);
+na(1/10w,3/10h,(1/2-1/10)*w,3/8h,0.2);
+da(1/2w,0,1/2w-0.9pt,3/4h,0);
+endchar;
+
+newchar(198,0.62,"n + dh");
+matra(w,h);
+na(1/6w,3/9h,9/16w-0.38pt,3/8h,0.1);
+dha(5/17w,0,12/17w-0.9pt,19/39h);
+endchar;
+
+newchar(199,0.52,"n + n");
+matra(w,h);
+na(1/6w,3/10h,5/6w-0.9pt,3/8h,1/9);
+na(1/6w,0,5/6w-0.9pt,3/8h,1/9);
+endchar;
+
+newchar(200,0.55,"n + b");
+matra(w,h);
+na(1/7w,7/24h,6/7w-0.9pt,3/8h,1/6);
+ba(4/9w,0,5/9w-0.9pt,3/7h);
+endchar;
+
+newchar(201,0.65,"n + m");
+matra(w,h);
+na(1/8w,7/20h,1/2w,3/8h,1/15);
+ma(5/8w,0,3/8w-0.9pt,7/20h,1.1,0);
+endchar;
+
+newchar(202,0.70,"n + ss");
+matra(w,h);
+na(1/8w,9/28h,7/20w,3/12h,-1);
+ds(1/5w,0,4/5w-0.9pt,3/4h);
+endchar;
+
+newchar(203,0.80,"p + T");
+pickup dflt_pen; draw ((8/17+1/35)*w,3/4h)..(w,3/4h);
+pa(1/11w,9/20h,(8/17-1/16)*w,1/4*h,-1/10);
+Dha(8/17w,0,9/17w-0.9pt,3/4h); tiki(w,h,1/4);
+endchar;
+
+newchar(204,0.65,"p + t");
+pickup dflt_pen; draw ((4/5 + 1/7)*w-0.9pt,3/4h)..(w,3/4h);
+pa(1/7w,3/7h,4/5w-0.9pt,(3/4-3/7)*h,0.28);
+ta(1/11w,0,9/10w-0.9pt,3/8h,0.4);
+endchar;
+
+newchar(205,0.60,"p + n");
+pa(1/7w,7/17h,6/7w-0.9pt,(3/4-7/17)*h,0.3);
+na(1/3w,0,2/3w-0.9pt,3/8h,0.3);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+endchar;
+
+newchar(206,0.60,"p + p");
+pa(1/7w,3/7h,6/7w-0.9pt,(3/4-3/7)*h,0.3);
+pa(1/7w,0,6/7w-0.9pt,(3/4-3/7)*h,0.05);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+endchar;
+
+newchar(207,0.60,"p + l");
+pa(1/7w,7/17h,6/7w-0.9pt,(3/4-7/17)*h,0.3);
+la(1/5w,0,4/5w-0.9pt,3/8h,0.3);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+endchar;
+
+newchar(208,0.70,"p + ss");
+matra(w,h);
+pa(1/8w,23/60h,33/100w,1/5h,-1.15);
+ds(1/5w,0,4/5w-0.9pt,3/4h);
+endchar;
+
+newchar(209,0.68,"ph + l");
+matra(w,h);
+pha_(9/40w,1/5h,31/40w-0.9pt,(3/4-1/5)*h);
+la(1/8w,-1/5d,5/9w-0.05pt,1/3h,1/3);
+endchar;
+
+beginchar(210,0.69stwd#,stht#,stdp#); "b + j";
+matra(w,h);
+top z3 = (8/20w,3/4h); z5 = (8/20w,9/24h);
+z6 = (21/36w,37/80h); z7 = (11/16w,3/10h); z8 = (1/2w,1/8h);
+rt z9 = (1/10w,4/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3--z5{right}..{dir30}z6
+ {dir -60}..{down}z7{down}..{left}z8{left}..{up}z9;
+rt z11 = z11l + (0.2pt,-0.2pt) = z11r - (0.2pt,-0.2pt) = (11/12w,3/5h);
+z12 = z12l + (0.15pt,0) = z12r - (0.15pt,0) = (8/9w,0);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z3{dir -90}..{dir 15}z11;
+penstroke z11e{dir -120}..{dir -75}z12e;
+ba(1/8w,3/8h,(2/5-1/8)*w,3/8h);
+endchar;
+
+newchar(211,0.65,"b + d");
+matra(w,h);
+ba(1/10w,3/10h,(19/40-1/10)*w,3/7h);
+da(19/40w,0,21/40w-0.9pt,3/4h,0);
+endchar;
+
+newchar(212,0.65,"b + dh");
+matra(w,h);
+ba_(1/8w,3/8h,9/16w-0.22pt,3/8*h);
+dha(4/17w,0,13/17w-0.9pt,4/7h);
+endchar;
+
+newchar(213,0.54,"b + b");
+matra(w,h);
+ba_(1/7w,3/8h,6/7w-0.9pt,3/8*h);
+ba(4/17w,0,13/17w-0.9pt,4/7h);
+endchar;
+
+newchar(214,0.54,"b + l");
+matra(w,h);
+ba(1/4w,5/18h,3/4w-0.9pt,(3/4 - 5/18)*h);
+la(1/7w,0,6/7w-0.9pt,7/20h,1/9);
+endchar;
+
+newchar(215,0.70,"bh + r");
+matra(w,h);
+bhra(1/8w,0,7/8w-0.9pt,2/3h);
+endchar;
+
+newchar(216,0.60,"bh + l");
+matra(w,h);
+bha(1/8w,1/3h,7/8w-0.9pt,3/8h);
+la(4/25w,-1/5d,4/5w-0.9pt,3/9h,1/3);
+endchar;
+
+newchar(217,0.56,"m + n");
+matra(w,h);
+ma_(1/7w,11/25h,6/7w-0.7pt,(3/4-11/25)*h);
+na(1/5w,0,4/5w-0.9pt,3/8h,0.3);
+endchar;
+
+newchar(218,1.00,"m + p");
+ma_(1/12w,1/2h,(3/7-1/10)*w,(3/4-13/25)*h);
+pa(4/9w,3/8h,5/9w-0.9pt,3/8h,1);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(37/100w,3/4h);
+endchar;
+
+newchar(219,0.95,"m + ph");
+matra(w,h);
+ma_(1/11w,12/25h,(2/5-1/30)*w,(3/4-12/25)*h);
+pha(3/7w,0,4/7w-0.9pt,14/25h,0.38);
+endchar;
+
+newchar(220,0.56,"m + b");
+matra(w,h);
+ma_(1/7w,11/25h,6/7w-0.65pt,(3/4-11/25)*h);
+ba(1/3w,0,2/3w-0.9pt,29/60h);
+endchar;
+
+newchar(221,0.64,"m + bh");
+matra(w,h);
+ma_(1/6w,11/25h,5/6w-1.2pt,(3/4-11/25)*h);
+bha(1/8w,0,7/8w-0.9pt,8/17h);
+endchar;
+
+newchar(222,0.62,"m + bh + r");
+matra(w,h);
+ma_(1/6w,11/24h,5/6w-1.2pt,(3/4-11/24)*h);
+bhra(1/8w,0,7/8w-0.9pt,19/40h);
+endchar;
+
+newchar(223,0.70,"m + m");
+matra(w,h);
+ma_(1/9w,11/25h,18/30w,(3/4-11/25)*h);
+ma(2/3w,0,1/3w-0.9pt,3/8h,1,1/15h);
+endchar;
+
+newchar(224,0.58,"m + l");
+matra(w,h);
+ma_(1/7w,11/25h,6/7w-0.7pt,(3/4-11/25)*h);
+la(1/6w,0,5/6w-0.9pt,3/8h,0.3);
+endchar;
+
+newchar(225,0.65,"l + k");
+matra(w,h);
+la(1/10w,3/10h,(3/4-1/10)*w-0.6pt,3/8h,0.2);
+ka(1/4w,0,3/4w-0.9pt,1/2h,3/10);
+endchar;
+
+newchar(226,0.60,"l + g");
+matra(w,h);
+la(1/8w,3/10h,7/8w-0.9pt,3/8h,1/9);
+ga(1/4w,0,3/4w-0.9pt,3/8h,0);
+endchar;
+
+newchar(227,0.60,"l + g + u");
+matra(w,h);
+la(1/8w,1/3h,7/8w-1.2pt,3/8h,1/10);
+gu(1/10w,-1/2d,19/20w,2/3h);
+endchar;
+
+newchar(228,0.80,"l + T");
+matra(w,h);
+la(1/11w,3/10h,(8/17-1/14)*w,3/8h,1/9);
+Dha(8/17w,0,9/17w-0.9pt,3/4h); tiki(w,h,1/4);
+endchar;
+
+newchar(229,0.72,"l + D");
+matra(w,h);
+la(1/10w,7/18h,(1/2-1/14)*h,1/3h,1/12);
+Da(1/4w,0,3/4w-0.9pt,3/4h);
+endchar;
+
+newchar(230,0.60,"l + p");
+matra(w,h);
+la(1/6w,9/26h,5/6w-0.9pt,3/8h,0);
+pa(1/7w,1/25h,6/7w-0.9pt,(3/4-7/17-1/25)*h,0.13);
+endchar;
+
+newchar(231,0.60,"l + b");
+matra(w,h);
+la(1/8w,1/4h,7/8w-0.9pt,3/8h,1/4);
+ba(4/9w,0,5/9w-0.9pt,3/7h);
+endchar;
+
+newchar(232,0.70,"l + m");
+matra(w,h);
+la(1/9w,3/10h,5/9w,3/8h,1/9);
+ma(2/3w,0,1/3w-0.9pt,3/10h,1.4,0);
+endchar;
+
+newchar(233,0.62,"l + l");
+matra(w,h);
+la(1/8w,3/10h,7/8w-0.9pt,3/8h,1/9);
+la(1/8w,0,7/8w-0.9pt,3/8h,1/9);
+endchar;
+
+newchar(234,0.85,"sh + ch");
+pickup dflt_pen; draw (11/20w,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/10w,3/4h);
+sha(1/10w,7/17h,(21/40 - 1/10)*w,(3/4-7/17)*h,0);
+cha(21/40w,0,19/40w-0.9pt,3/4h);
+endchar;
+
+newchar(235,0.88,"sh + chh");
+pickup dflt_pen; draw (11/20w,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/10w,3/4h);
+sha(1/10w,7/17h,(11/20 - 1/10)*w,(3/4-7/17)*h,0);
+chha(11/20w,0,9/20w-0.9pt,3/4h);
+endchar;
+
+newchar(236,0.60,"sh + n");
+sha(1/7w,7/17h,6/7w-0.9pt,(3/4-7/17)*h,0.3);
+na(1/3w,0,2/3w-0.9pt,3/8h,0.3);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/7w,3/4h);
+endchar;
+
+newchar(237,0.72,"sh + m");
+pickup dflt_pen;
+draw (2/3w,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/9w,3/4h);
+sha(1/9w,7/17h,(2/3 - 1/9)*w,(3/4-7/17)*h,0.38);
+ma(2/3w,0,1/3w-0.9pt,3/10h,1.4,0);
+endchar;
+
+newchar(238,0.60,"sh + l");
+sha(1/7w,7/17h,6/7w-0.9pt,(3/4-7/17)*h,0.3);
+la(1/5w,0,4/5w-0.9pt,3/8h,0.3);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/7w,3/4h);
+endchar;
+
+newchar(239,0.60,"sh + b");
+pickup dflt_pen;
+draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(1/7w,3/4h);
+sha(1/7w,7/17h,6/7w-0.9pt,(3/4-7/17)*h,0.5);
+ba(4/9w,0,5/9w-0.9pt,3/7h);
+endchar;
+
+newchar(240,0.60,"s + k");
+matra(w,h);
+ms_(1/7w,3/7h,1/2w,(3/4-3/7)*h);
+ka(1/7w,0,6/7w-0.9pt,59/100h,2/5);
+endchar;
+
+newchar(241,0.82,"s + k + r");
+matra(w,h);
+ms_(1/9w,3/7h,(1/2-1/8)*w,(3/4-3/7)*h);
+tra(1/6w,-1/4d,(2/3-1/6)*w,23/40h);
+shnur(2/3w,1/4h,1/3w-0.3pt,1/9h);
+endchar;
+
+newchar(242,0.54,"s + T");
+matra(w,h); tiki(w,h,0);
+ms_(1/7w,3/8h,12/20w,(3/4-3/8)*h);
+_Dha(1/6w,0,5/6w-0.9pt,3/7h);
+endchar;
+
+newchar(243,0.61,"s + Th");
+matra(w,h);
+ms_(1/7w,31/80h,21/50w,(3/4-31/80)*h);
+Tha(1/4w,0,3/4w-0.9pt,3/4h);
+endchar;
+
+beginchar(244,0.80stwd#,stht#,stdp#); "s + N";
+pickup pencircle scaled penth#;
+numeric wd; wd = 11/20w + 0.9pt;
+z1 = (0,3/4h); z2=(wd-0.9pt,3/4h); draw z1..z2;
+top z3 = (wd-0.9pt,3/4h); z4 = (wd-0.9pt,0); draw z3..z4;
+top rt z5 = (1/10w,3/4h); z6 = (1/2wd,43/80h); z7 = (1/6wd,1/3h); rt z8 = (5/6wd,8/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7; draw (z6+(0,0.1pt))--z8;
+z7r + (0.25pt,-0.25pt) = z7l - (0.25pt,-0.25pt) = z7;
+z4l + (0.15pt,0) = z4r - (0.15pt,0) = z4;
+penstroke z7e{right}..tension 2.5 ..{dir -75}z4e;
+hump(11/20w,1/4h,9/20w-1.1pt,9/20h);
+endchar;
+
+newchar(245,0.88,"s + p");
+matra(3/10w,h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+ms_(1/11w,3/7h+0.19pt,(5/12-1/8)*w,(3/4-3/7)*h);
+pa(5/12w,3/8h,7/12w-0.9pt,(3/4-3/8)*h,1);
+endchar;
+
+newchar(246,0.82,"s + ph");
+matra(w,h)
+ms_(1/11w,3/7h,5/15w,(3/4-3/7)*h);
+pha(7/19w,0,12/19w-0.9pt,14/25h,0.38);
+endchar;
+
+newchar(247,0.60,"s + m");
+matra(w,h);
+ms_(1/7w,3/7h,1/2w,(3/4-3/7)*h);
+ma(21/40w,0,19/40w-0.9pt,2/5h,0.8,0.8pt);
+endchar;
+
+newchar(248,0.75,"ss + k");
+matra(w,h);
+ds_(1/10w,1/2h,2/3w,1/4h);
+ka(3/8w,0,5/8w-0.9pt,22/40h,3/10);
+endchar;
+
+newchar(249,0.84,"ss + k + r");
+matra(w,h);
+ds_(1/9w,13/25h,(2/3-1/9)*w,(3/4-13/25)*h);
+tra(1/6w,-1/4d,(2/3-1/6)*w,11/20h);
+shnur(2/3w,1/4h,1/3w-0.3pt,1/9h);
+endchar;
+
+newchar(250,0.75,"ss + k + l");
+matra(w,h);
+ds_(1/10w,1/2h,2/3w,1/4h);
+ka(2/5w,1/15h,3/5w-0.9pt,9/20h,3/10);
+la(9/41w,-13/20d,1/2w,1/3h,0);
+endchar;
+
+newchar(251,0.80,"ss + kh");
+matra(21/40w,h);
+ds_(1/10w,3/6h,19/40w,(3/4-3/6)*h);
+rtbar(w,21/20h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+z1 = (9/20w,3/10h); z2 = (3/5w,1/2h); z3 = (72/100w,18/50h);
+z4 = (27/50w,18/100h); z5 = (w-0.9pt,0);
+draw z1{right}..{up}z2{dir -45}..{down}z3{down}..{dir -135}z4{dir -15}..z5;
+fill fullcircle scaled 1.2pt shifted (z1 + (0,0.4pt));
+endchar;
+
+newchar(252,0.83,"ss + T");
+matra(w,h); tiki(w,h,1/4);
+ds(1/11w,1/6h,(11/20-1/11)*w,(3/4-1/6)*h);
+Dha(11/20w-0.25pt,0,9/20w-0.7pt,3/4h);
+endchar;
+
+newchar(253,0.68,"ss + t");
+matra(w,h);
+ds_(1/6w,9/19h,5/6w-0.6pt,(3/4-9/19)*h);
+ta(1/11w,0,10/11w-0.9pt,11/25h,0.2);
+endchar;
+
+newchar(254,0.60,"ss + t + u");
+matra(w,h);
+ds_(1/10w,12/25h,8/9w-0.9pt,(3/4-12/25)*h);
+tta(1/5w,-11/20d,4/5w-0.9pt,4/7h);
+endchar;
+
+newchar(255,0.65,"ss + t + r");
+matra(w,h);
+ds_(1/7w,13/25h,4/5w-0.5pt,(3/4-13/25)*h);
+tra(1/7w,-1/4d,6/7w-0.9pt,11/20h);
+endchar;
+
+newchar(16,0.60,"ss + th");
+matra(w,h);
+ds_(1/10w,12/25h,8/9w-0.9pt,(3/4-12/25)*h);
+ha(3/10w,-1/3d,7/10w-0.3pt,5/8h);
+endchar;
+
+newchar(17,0.63,"ss + n");
+matra(w,h);
+ds_(1/9w,9/19h,8/9w-0.6pt,(3/4-9/19)*h);
+na(1/4w,0,3/4w-0.9pt,3/8h,0.3);
+endchar;
+
+newchar(18,1.15,"ss + p");
+ds_(1/14w,10/20h,(9/20-1/15)*w,(3/4-10/20)*h);
+pa(1/2w,3/8h,1/2w-0.9pt,3/8h,1);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(41/100w,3/4h);
+endchar;
+
+newchar(19,1.15,"ss + p + l");
+ds_(1/14w,10/20h,(9/20-1/15)*w,(3/4-10/20)*h);
+pa(1/2w,3/8h,1/2w-0.9pt,3/8h,1);
+la(57/100w,0,43/100w-0.9pt,3/8h,0);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+draw (0,3/4h)..(41/100w,3/4h);
+endchar;
+
+newchar(20,1.02,"ss + ph");
+matra(w,h);
+pha(10/21w,0,11/21w-0.9pt,14/25h,0.38);
+ds_(1/11w,12/25h,2/5*w,(3/4-12/25)*h);
+endchar;
+
+newchar(21,0.63,"ss + b");
+matra(w,h);
+ds_(1/9w,9/19h,8/9w-0.6pt,(3/4-9/19)*h);
+ba(5/14w,0,9/14w-0.9pt,1/2h);
+endchar;
+
+newchar(22,0.77,"ss + m");
+matra(w,h);
+ds_(1/11w,9/19h,6/9w-0.2pt,(3/4-9/19)*h);
+ma(2/3w,0,1/3w-0.9pt,3/8h,1,(9/19-3/8)*h);
+endchar;
+
+newchar(23,0.63,"ss + l");
+matra(w,h);
+ds_(1/9w,9/19h,8/9w-0.6pt,(3/4-9/19)*h);
+la(1/5w,0,4/5w-0.9pt,3/8h,0.3);
+endchar;
+
+newchar(24,0.5,"h + N");
+matra(w,h);
+ha_(1/8w,1/8h,7/8w-0.4pt,(3/4-1/8)*h);
+mna(1/6w,-1/3d,5/6w-1.2pt,3/11h,0);
+endchar;
+
+newchar(31,0.65,"h + n");
+matra(w,h);
+ha_(1/12w,0,8/13*w,3/4h);
+shnur(18/30w,17/40h,12/30w-0.5pt,1/6h);
+endchar;
+
+newchar(32,0.75,"h + m");
+matra(w,h);
+ha_ma(1/10w,0,9/10w-0.9pt,3/4h);
+endchar;
+
+newchar(62,0.5,"h + b");
+matra(w,h);
+ha_(1/8w,1/8h,7/8w-0.4pt,(3/4-1/8)*h);
+ba(1/3w,-1/3d,3/7w,3/10h);
+endchar;
+
+newchar(125,0.5,"h + l");
+matra(w,h);
+ha_(1/8w,1/8h,7/8w-0.4pt,(3/4-1/8)*h);
+la(1/6w,-1/3d,5/6w-0.9pt,3/10h,-0.15);
+endchar;
+
+newchar(127,0.98,"rh + g");
+matra(11/20w,h);
+pickup dflt_pen; draw (w-0.9pt,3/4h)..(w,3/4h);
+Da(1/12w,0,(11/20-1/12)*w,3/4h);
+ga(21/40w,3/10h,19/40w-0.9pt,(3/4-3/10)*h,0.65);
+fill fullcircle scaled 1.2pt shifted (15/40w,-1/3d);
+endchar;
+
+%%% End of bnjuk.mf
diff --git a/language/bengali/pandey/mf/bnkaar.mf b/language/bengali/pandey/mf/bnkaar.mf
new file mode 100644
index 0000000000..7fc2ac6e82
--- /dev/null
+++ b/language/bengali/pandey/mf/bnkaar.mf
@@ -0,0 +1,90 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnkaar.mf: METAFONT file that defines the Bengali vowel forms
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%
+% apandey 2002.03.27 commented out "a-kar" character; unneeded char
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%beginchar("a",0,stht#,stdp#); "a-kar";
+%endchar;
+
+beginchar("A",0.23stwd#,stht#,stdp#); "aa-kar";
+z1 = (1/2w,3/4h+0.3pt); z1' = (1/2w,3/4h); z2 = (1/2w,0); z3 = (w,3/4h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+pickup pencircle scaled 0.4pt; draw z1'..z3;
+z5 = (0,3/4h); lft z6 = (8/20w,19/32h); draw z5{dir -30}..{dir -60}z6;
+endchar;
+
+beginchar("i",0.22stwd#,stht#,stdp#); "hraswa i-kar";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+z3 = (1/2w,3/4h); z4=(1/2w,0); draw z3..z4;
+z5 = (1/4w,7/8h); z6 = (1.3w,9/8h); z7 = (3w,7/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3..z5..{right}z6{right}..z7;
+endchar;
+
+beginchar("I",0.25stwd#,stht#,stdp#); "dirgha i-kar";
+z1 = (1/5w,3/4h); z2 = (w,3/4h); z3 = (3/5w,3/4h); z4 = (3/5w,0);
+z5 = (-3/4w,9/8h); z6 = (-9/5w,h); z7 = (-3/4w,7/8h); z8 = (-1/5w,3/4h);
+pickup pencircle scaled penth#;
+draw z1..z2; draw z3..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.5pt;
+draw z3{up}..{left}z5{left}..{down}z6{down}..{right}z7{right}..{dir -120}z8;
+endchar;
+
+beginchar("u",0stwd#,stht#,stdp#); "hraswa-u-kar";
+z1 = (w-0.9pt,0); z2 = (w-0.9pt,-9/20d); z3 = (w-1.8pt,-4/5d);
+z4 = (w-2.8pt,-1/2d); z5 = (w-2.0pt,-1/5d); z6 = (w+1.2pt,-7/5d);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 30;
+draw z1{down}..z2..{left}z3{left}..{up}z4{up}..{right}z5{right}..z2..tension 2..z6;
+endchar;
+
+beginchar("U",0stwd#,stht#,stdp#); "dirgha-u-kar";
+z1 = (w-0.9pt,0); z2 = (w-2.6pt,-9/20d);
+z3 = (w-0.7pt,-2/3d); z4 = (w+1.5pt,-7/5d);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 30;
+draw z1{left}..{down}z2{down}..{dir 20}z3--z4;
+endchar;
+
+beginchar("W",0stwd#,stht#,stdp#); "ri-kar";
+z1 = (w-0.9pt,0); z2 = (w-2.1pt,-1/3d); z3 = (w,-d);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1--z2--z3;
+endchar;
+
+beginchar("e",0.32stwd#,stht#,stdp#); "e-kar";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z4 = (1pt,3/8h); z3 = (w-0.4pt,3/4h); z5 = (w-0.1pt,0);
+draw z3..z4..{dir 15}z5;
+fill fullcircle scaled 1pt shifted (z5 + (-0.12pt,0.3pt));
+endchar;
+
+beginchar("E",0.32stwd#,stht#,stdp#); "oi-kar";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z4 = (1pt,3/8h); z3 = (w-0.4pt,3/4h); z5 = (w-0.1pt,0);
+draw z3..z4..{dir 15}z5;
+fill fullcircle scaled 1pt shifted (z5 + (-0.12pt,0.3pt));
+z6 = (1/8w,31/32h); z7 = (-1/3w,11/10h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt;
+draw z3{dir 60}..{left}z6{left}...z7{dir 75};
+endchar;
+
+beginchar("o",0,stht#,stdp#); "o-kar";
+endchar;
+
+beginchar("O",0.25stwd#,stht#,stdp#); "ou-kar";
+z1 = (1/5w,3/4h); z2 = (w,3/4h); z3 = (3/5w,3/4h); z4 = (3/5w,0);
+pickup pencircle scaled 0.4pt;
+draw z1..z2; draw z3..z4;
+z7' = (3/5w,3/4h); z8' = (-3/4w,31/32h); z9' = (-9/5w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z7'{dir 60}..{left}z8'{left}...z9'{dir 75};
+endchar;
+
+%%% End of bnkaar.mf
diff --git a/language/bengali/pandey/mf/bnlig.mf b/language/bengali/pandey/mf/bnlig.mf
new file mode 100644
index 0000000000..5e637f2346
--- /dev/null
+++ b/language/bengali/pandey/mf/bnlig.mf
@@ -0,0 +1,121 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnlig.mf: METAFONT file that defines some special ligatures
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 20 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar(25,0.75stwd#,stht#,stdp#); "ra + u";
+numeric wd; wd = 12/20w + 0.9pt;
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (wd-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6wd,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (wd-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (wd-0.9pt,3/4h);
+draw z3..z4;
+fill fullcircle scaled 0.9pt shifted (9/20wd,2/21h);
+z1' = (12/20w,2/5h); z2' = (w-0.8pt,47/100h); z3' = (16/20w,3/5h);
+pickup pencircle scaled penth#;
+draw z1'{dir -60}..{up}z2'{up}..{left}z3';
+fill fullcircle scaled 1.3pt shifted (z3' + (-0.1pt,-0.46pt));
+endchar;
+
+beginchar(26,0.70stwd#,stht#,stdp#); "ra + U";
+numeric wd; wd = 13/20w + 0.9pt;
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (wd-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6wd,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (wd-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (wd-0.9pt,3/4h);
+draw z3..z4;
+fill fullcircle scaled 0.9pt shifted (9/20wd,2/21h);
+z1' = (13/20w,1/2h) + (0.02pt,0); z2' = (16/20w,11/20h);
+z3' = (w-0.9pt,1/2h); z4' = (w-0.8pt,1/20h);
+pickup pencircle xscaled 0.5pt yscaled 0.3pt rotated -30;
+draw z1'..tension 4..z2'..tension 4..z3'{down}..tension 4..{dir -30}z4';
+endchar;
+
+beginchar(27,0.56stwd#,stht#,stdp#); "ha + u";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (1/6w,1/2h); z3' = (37/100w,13/20h);
+z4 = (3/5w,1/2h); z4' = (74/100w,13/20h); z5 = (6/7w,1/2h);
+lft z6 = (1/7w,9/32h); z7 = (w,-1/3d);
+z6l + (0.15pt,-0.3pt) = z6r - (0.15pt,-0.3pt) = z6;
+z7l - (0,0.15pt) = z7r + (0,0.15pt) = z7;
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z3{dir 100}..{right}z3'{right}..{dir -60}z4{dir 60}..
+ {dir 45}z4'{dir -35}..{down}z5{down}..{dir 160}z6;
+penstroke z6e{dir -22}..{dir -45}z7e;
+fill fullcircle scaled 1.3pt shifted (z3 + (0.43pt,0.05pt));
+endchar;
+
+beginchar(28,0.67stwd#,stht#,stdp#); "ha + ri-kar";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+numeric wd; wd = 14/18w;
+z3 = (3/10wd,3/4h); z4 = (1/3wd,3/5h); z5 = (5/6wd,1/2h);
+lft z6 = (1/8wd,5/16h); z7 = (wd,-1/3d);
+z6l + (0.15pt,-0.3pt) = z6r - (0.15pt,-0.3pt) = z6;
+z7l - (0,0.15pt) = z7r + (0,0.15pt) = z7;
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z4{dir 30}..{down}z5{down}..{dir 150}z6;
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+penstroke z6e{dir -30}..{dir -45}z7e;
+fill fullcircle xscaled 1.5pt yscaled 1pt rotated 30 shifted (z4 + (0,-0.20pt));
+z1' = (13/20w,1/2h) + (0.02pt,0); z2' = (16/20w,11/20h);
+z3' = (w-0.9pt,1/2h); z4' = (w-0.8pt,0);
+pickup pencircle xscaled 0.5pt yscaled 0.3pt rotated -30;
+draw z1'..tension 4..z2'..tension 4..z3'{down}..tension 4..{dir -45}z4';
+endchar;
+
+beginchar(29,0.70stwd#,stht#,stdp#); "ga + u";
+z1 = (7/10w,3/5h); z2 = (74/100w,76/100h);
+z4 = (19/25w,8/20h); z5 = (7/8w,12/50h);
+z6 = (24/40w,1/18h); z8 = (1/10w,13/20h); z7 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1--z2{dir -60}..{dir -135}z4
+ {dir -30}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+z2' = (9/20w,3/4h); z3' = (9/40w,12/20h);
+z4' = (18/40w,11/20h); z5' = (7/20w,8/20h);
+draw z1{dir 120}..{left}z2'{left}..{down}z3'{dir 30}..{down}z4'{down}..z5';
+endchar;
+
+beginchar(30,0.72stwd#,stht#,stdp#); "sha + u";
+z1 = (7/10w,3/5h); z2 = (74/100w,76/100h);
+z4 = (19/25w,8/20h); z5 = (7/8w,12/50h);
+z6 = (24/40w,1/18h); z8 = (1/10w,13/20h); z7 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1--z2{dir -60}..{dir -135}z4
+ {dir -30}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+z4' = (1/10w,3/4h); z5' = (6/16w,20/31h);
+z6' = (13/25w,3/4h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z4'{right}..{dir -60}z5'{dir 60}..{right}z6'{right}..{dir -60}z1;
+fill fullcircle xscaled 1.2pt yscaled 2.0pt rotated -45 shifted (z5' + (-0.50pt,-0.62pt));
+fill fullcircle xscaled 1.2pt yscaled 2.0pt rotated 45 shifted (z5' + (0.50pt,-0.62pt));
+endchar;
+
+%%% End of bnlig.mf
diff --git a/language/bengali/pandey/mf/bnligtbl.mf b/language/bengali/pandey/mf/bnligtbl.mf
new file mode 100644
index 0000000000..fe6f3b50e8
--- /dev/null
+++ b/language/bengali/pandey/mf/bnligtbl.mf
@@ -0,0 +1,36 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnligtbl.mf: METAFONT file that defines the ligature tables
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 20 1997
+% June 1998: Modifications by Jaijeet Roychowdhury, now useable with ITRANS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ligtable "a": "a" =: "A"; %% a + a = A
+ligtable "e": "e" =: "I"; %% e + e = I
+ligtable "o": "o" =: "U", "i" =: "E", "u" =: "O";
+ %% o + o = U, o + i = E, o + u = O
+ligtable "`": "`" =: oct"134"; %% ` + ` = ``
+ligtable "'": "'" =: oct"42"; %% ' + ' = "
+ligtable "-": "-" =: oct"173"; %% - + - = endash
+% jaijeet: next line changed
+ligtable oct"173": "-" =: "."; %% endash + - = emdash
+ligtable "r": "u" =: oct"31", "U" =: oct"32"; %% r + u = ru, r + U = rU
+ligtable "h": "u" =: oct"33", "W" =: oct"34"; %% h + u = hu, h + W = hW
+ligtable "g": "u" =: oct"35"; %% g + u = gu
+ligtable "S": "u" =: oct"36"; %% S + u = Su
+%ligtable ".": "." =: oct"74"; %% . + . = ..
+ligtable "|": "|" =: oct"74"; %% | + | = ..
+ligtable "k": oct"17" =: oct"205"; %% k + \rafala = \kr
+ligtable "t": oct"17" =: oct"262"; %% t + \rafala = \tr
+ligtable oct"262": "u" =: oct"263"; %% \tr + u = \tru
+ligtable oct"300": "u" =: oct"301", %% \nt + u = \ntu
+ oct"17" =: oct"303"; %% \nt + \rafala = \ntr
+ligtable "v": oct"17" =: oct"327"; %% v + \rafala = \vr
+ligtable oct"335": oct"17" =: oct"336"; %% \mv + \rafala = \mvr
+ligtable oct"342": "u" =: oct"343"; %% \lg + u = \lgu
+ligtable oct"360": oct"17" =: oct"361"; %% \ssk + \rafala = \sskr
+ligtable oct"370": oct"17" =: oct"371"; %% \sk + \rafala = \skr
+ligtable oct"375": "u" =: oct"376", %% \st + u = \stu
+ oct"17" =: oct"377"; %% \st + \rafala = \str
+
+%%% End of bnligtbl.mf
diff --git a/language/bengali/pandey/mf/bnmacro.mf b/language/bengali/pandey/mf/bnmacro.mf
new file mode 100644
index 0000000000..7ea26ae138
--- /dev/null
+++ b/language/bengali/pandey/mf/bnmacro.mf
@@ -0,0 +1,668 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnbanjon.mf: METAFONT file that defines various macros
+% for use in bnjuk.mf
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+def newchar(expr code, char_width, char_descr) =
+beginchar(code,char_width*stwd#,stht#,stdp#); char_descr;
+enddef;
+
+def matra(expr w,h) =
+pickup dflt_pen;
+draw (0,3/4h)..(w,3/4h);
+enddef;
+
+def rtbar(expr w,h) =
+pickup dflt_pen;
+draw (w-0.9pt,0)..(w-0.9pt,3/4h);
+enddef;
+
+def na(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z; pair z[];
+z1 = (xoff + w, yoff + (overshoot + 1)*h); z2 = (xoff + w, yoff);
+z3 = (xoff + 0.040w, yoff + 2/3h);
+pickup dflt_pen; draw z1..z2;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir 25}..{down}z2;
+fill fullcircle scaled 0.5h shifted (z3 + (0.062w,-0.152h));
+endgroup
+enddef;
+
+def na_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z2 = (1/5w,4/9h); z3 = (11/15w,0); top z4 = (15/16w,h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z2{right}..{right}z3{right}..{dir 105}z4;
+fill fullcircle scaled 1.4pt shifted (z2 + (-0.02w,-0.19h));
+endgroup
+enddef;
+
+def ma(expr xoff, yoff, w, h, overshoot, another) =
+begingroup
+save z; pair z[];
+z1 = (xoff + w, yoff + (overshoot + 1)*h); z2 = (xoff + w, yoff);
+z3 = (xoff - 0.25w, yoff + 4/5h); z4 = (xoff, yoff + h + another);
+pickup dflt_pen; draw z1..z2; draw z4{dir -80}..{dir -100}(z3 + (0.25w,0));
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{right}..{down}z2;
+fill fullcircle scaled 1.5pt shifted (z3 + (-0.02w,-0.152h));
+endgroup
+enddef;
+
+def la(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (w,(overshoot + 1)*h); z2 = (w,0);
+z3 = (w,1/2h); z4 = (3/4w,4/5h); z5 = (20/33w,11/20h);
+z6 = (7/24w,5/6h); z7 = (0,1/2h); z8 = (1/8w,4/15h);
+pickup dflt_pen; draw z1..z2;
+pickup pencircle xscaled 0.3pt yscaled 0.5pt;
+draw z3{dir 135}..{left}z4{left}..{dir -75}z5{dir 105}..{left}z6{left}
+ ..{down}z7{down}..{dir -15}z8;
+fill fullcircle scaled 1.2pt shifted (z8 + (0.042w,0.110h));
+endgroup
+enddef;
+
+def ds_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (0,1/6h); z2 = (1/8w,0); z3 = (6/15w,h);
+z4 = (17/20w,0); z5 = (9/10w,h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 60;
+draw z1..{right}z2{right}..{dir 75}z3{dir -75}..{right}z4{right}..{dir 135}z5;
+endgroup
+enddef;
+
+def ga(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (w,h+0.3pt); z2 = (w,-overshoot*h);
+pickup dflt_pen; draw z1..z2;
+rt z4 = (w,4/7h); z5 = (9/20w,h); rt z6 = (0,5/9h);
+z7 = (17/40w,11/40h); z8 = (16/50w,1/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z4{dir 120}..{left}z5{left}..{down}z6{dir 30}
+ ..{down}z7{down}..{dir -135}z8;
+endgroup
+enddef;
+
+def ba(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z1 = (w,h); z2 = (w,0); z3 = 1/8[z1,z2] - (0.015w,0); z4 = (0,1/2h);
+pickup dflt_pen; draw z1..z2;
+pickup pencircle scaled 0.5pt;
+draw z3{z4-z3 rotated -8}..z4;
+draw z4{right}.. tension 1.5 .. (z2 - (0.015w,0));
+endgroup
+enddef;
+
+def ba_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z1 = (w,h); z2 = (w,0); z3 = 1/8[z1,z2] - (0.015w,0);
+z4 = (0,8/24h); z5 = (1/3w,0);
+pickup dflt_pen; draw z1..z2;
+pickup pencircle scaled 0.5pt;
+draw z3{z4-z3 rotated -8}..z4;
+draw z4..z5;
+endgroup
+enddef;
+
+def ma_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z1 = (1/7w,h); z2 = (1/5w,4/9h); z3 = (11/15w,0); top z4 = (15/16w,h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1..{dir -120}z2{right}..{right}z3{right}..{dir 135}z4;
+fill fullcircle scaled 1.4pt shifted (z2 + (-0.10w,-0.12h));
+endgroup
+enddef;
+
+def pa(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (w,h+0.3pt); z2 = (w, -h * overshoot);
+pickup pencircle scaled 0.4pt; draw z1..z2;
+rt z4 = (w,19/40h); z5 = (9/20w,h); rt z6 = (0,2/3h);
+z7 = (1/5w,0); z8 = (19/24w,3/4h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z4--z8{z8-z4}..{left}z5{left}..{dir -140}z6{dir 30}..{dir -140}z7;
+pickup pencircle xscaled 0pt yscaled 0.6pt rotated 50;
+draw z7--z8;
+endgroup
+enddef;
+
+def sha(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (w,h+0.3pt); z2 = (w,0); z3 = (w,-overshoot * h);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z3;
+top z4 = (0,h+0.13pt); z5 = (11/30w,16/24h);
+top z6 = (16/25w,h); z7 = 1/2[z1,z2];
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z4{right}..{dir -60}z5{dir 60}..{right}z6{right}..{z7-z6}z7;
+fill fullcircle xscaled 1.3pt yscaled 2.3pt rotated -45 shifted (z5 + (-0.50pt,-0.62pt));
+fill fullcircle xscaled 1.3pt yscaled 2.3pt rotated 45 shifted (z5 + (0.50pt,-0.62pt));
+endgroup
+enddef;
+
+def cha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (0,h); z4 = (0,1/3h);
+z5 = (1/4w,1/16h); z6 = (w,16/27h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6{dir 165}..{dir 100}z3;
+endgroup
+enddef;
+
+def chha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (0,h); z4 = (0,5/9h); z5 = (1/8w,1/2h);
+z6 = (11/20w,3/4h); z7 = (26/40w,3/4h); z8 = (w,17/27h);
+z9 = (1/5w,1/3h); z10 = (w,0);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3..z4{down}..{right}z5{right}..{dir 80}z6{left}..{up}z3;
+draw z6{right}..z7..{down}z8{down}..{left}z9;
+draw z9{dir -25}..{dir -45}z10;
+endgroup
+enddef;
+
+def ta(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (2/3w,h); lft z4 = (w,7/15h);
+z5 = (3/4w,0); z6 = (1/4w,11/20h); z7 = (0,(1 + overshoot)*h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir 28}..{down}z4{down}..{left}z5{left}..z6..z7;
+fill fullcircle scaled 1.5pt shifted (z3 + (0.24pt,-0.44pt));
+endgroup
+enddef;
+
+def ta_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (3/5w,4/5h); lft z4 = (w,7/15h);
+z5 = (3/4w,0); z6 = (1/6w,1/2h); top z7 = (0,7/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir 28}..{down}z4{down}..{left}z5{left}..z6..z7;
+fill fullcircle scaled 1.5pt shifted (z3 + (0.24pt,-0.44pt));
+endgroup
+enddef;
+
+def dha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+ba(xoff,yoff,2/3w,h);
+z1 = (2/3w,6/7h); z2 = (41/40w,5/6h); z3 = (w,1/25h);
+pickup pencircle xscaled 0.35pt yscaled 0.5pt;
+draw z1--z2{dir -95}..tension 1.5..{dir -85}z3;
+endgroup
+enddef;
+
+def ka(expr xoff, yoff, w, h, pos) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+ba(xoff,yoff,2/3w,h);
+z1 = (2/3w,4/5h); z2 = (w,pos * h);
+draw z1{right}..{dir -120}z2;
+fill fullcircle scaled 1.1pt shifted (z2 + (-0.25pt,0.16pt));
+endgroup
+enddef;
+
+def ka_(expr xoff, yoff, w, h, pos) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+ba_(xoff,yoff,2/3w,h);
+z1 = (2/3w,4/5h); z2 = (w,pos * h);
+draw z1{right}..{dir -120}z2;
+fill fullcircle scaled 1.1pt shifted (z2 + (-0.25pt,0.16pt));
+endgroup
+enddef;
+
+def da(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (0,(1 + overshoot)*h); z4 = (0,17/50h);
+pickup dflt_pen; draw z3..z4;
+z5 = (9/8w,3/4h); z2 = 1/2[z4,z5] + (0,0.25pt);
+z6 = (w,0);
+pickup pencircle xscaled 0pt yscaled 0.5pt rotated 45;
+draw z4{z2-z4}..z2..{z5-z2}z5;
+pickup dflt_pen; draw z5{dir -105}..{dir -80}z6;
+endgroup
+enddef;
+
+def da_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (0,h); z2 = (0,0); z3 = (7/8w,1/2h); z4 = (w,1/3h); z5 = (w,0);
+z6 = 1/2[z2,z3] + (0,0.35pt);
+pickup dflt_pen; draw z1--z2{z6-z2}..{z3-z6}z3--z4--z5;
+endgroup
+enddef;
+
+def tiki(expr w,h,offshoot) =
+begingroup
+save z; pair z[];
+z1 = (w-0.7pt,3/4h); z2 = ((1 + offshoot)/2*w,31/32h);
+z3 = (offshoot*w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z1{dir 60}..{left}z2{left}..z3;
+endgroup
+enddef;
+
+def shnur(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (0,1/2h); z2 = (1/2w,h); z3 = (5/6w,0);
+pickup dflt_pen;
+draw z1..{right}z2{right}..{dir -120}z3;
+fill fullcircle scaled (3/5w) shifted (z3 + (-0.17*w,0.11*h));
+endgroup
+enddef;
+
+def ha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z4 = (1/4w,4/5h); z5 = (5/6w,2/3h);
+z6 = (1/10w,11/24h); z7 = (w,0);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z4{dir 30}..{down}z5{down}..{dir 150}z6;
+pickup pencircle scaled 0.3pt;
+draw z6{dir -30}..{dir -45}z7;
+fill fullcircle xscaled 1.5pt yscaled 1pt rotated 30 shifted (z4 + (0,-0.20pt));
+endgroup
+enddef;
+
+def ha_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (2/10w,h); z4 = (1/4w,4/5h); z5 = (5/6w,2/3h);
+z6 = (1/10w,11/24h); z7 = (w,0);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z4{dir 30}..{down}z5{down}..{dir 150}z6;
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+draw z6{dir -30}..{dir -45}z7;
+fill fullcircle xscaled 1.5pt yscaled 1pt rotated 30 shifted (z4 + (0,-0.20pt));
+endgroup
+enddef;
+
+def mna(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (w,(overshoot + 1)*h); z2 = (w,0);
+z4 = (8/16w,h); z3 = (0.040w,4/9h); rt z5 = (w,2/3h);
+pickup dflt_pen; draw z1..z2;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3{dir 100}..{right}z4{right}..{dir -55}z5;
+fill fullcircle scaled 0.4h shifted (z3 + (0.120w,0.050h));
+endgroup
+enddef;
+
+def tra(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (9/20w,8/15h); z2 = (4/5w,h); z3 = (w,8/9h);
+z4 = (w,0); z5 = (1/2w,1/7h);
+z6 = (1/6w,1/5h); z7 = (0,1/2h); z8 = (1/18w,5/7h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{dir 135}..tension 1.2..{right}z2{right}..z3{down}..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw (z4+(0,0.2pt)){up}...{left}z5{left}..z6..{up}z7{up}..z8;
+fill fullcircle scaled 0.263h shifted (z1 + (0.0887w,0.0713h));
+endgroup
+enddef;
+
+def Dha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top lft z3 = (0,h); lft z4 = (0,3/16h);
+z5 = (2/5w,1/20h); z6 = (w,16/27h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3--z4{down}..z5{dir 30}..{up}z6;
+fill fullcircle scaled 1.2pt shifted (z6 - (0.43pt,0.15pt));
+endgroup
+enddef;
+
+def bha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (1/3w,5/8h); z4 = (6/7w,5/6h); z5 = (w,15/32h);
+z6 = (3/5w,0); z8 = (0,13/15h); z7 = (3/25w,7/16h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 15;
+draw z3{dir -29}..{dir 60}z4{dir -50}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z3 + (0.36pt,0.38pt));
+endgroup
+enddef;
+
+def Da(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (1/2w,h); z4 = (1/2w,6/11h); z5 = (11/20w,1/2h);
+z6 = (8/9w,7/10h); lft z7 = (w,5/12h);
+z8 = (23/40w,1/10h); z9 = (0,8/15h); z10 = (1/10w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{down}..{down}z4{dir -60}..{dir -60}z5{dir 30}..{dir60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+endgroup
+enddef;
+
+def ms_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z1 = (4/5w,h); z2 = (0,1/4h); z3 = (1/5w,0); z4 = (w,3/4h);
+pickup pencircle xscaled 0.3pt yscaled 0.5pt rotated 45;
+draw z1{left}..{down}z2{down}..{right}z3{right}..{up}z4{up}..{left}z1;
+z5 = (1/3w,2/3h); z6 = (2/3w,3/10h); draw z5..z6;
+endgroup
+enddef;
+
+def pha_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (7/10w,4/5h); z4 = (7/10w,0); draw z3..z4;
+top rt z5 = (0,h); z6 = (1/3w,43/60h); z7 = (1/10w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7;
+draw z7{right}..tension 1.5 ..{dir -75}(z4 - (0.08pt,0));
+lft z8 = (41/40w,14/27h); z9 = (w,1/4h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{right}..{down}z8{down}..z9;
+fill fullcircle scaled 1pt shifted (z9 + (-0.20pt,0.20pt));
+endgroup
+enddef;
+
+def pha(expr xoff, yoff, w, h, overshoot) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (7/10w,4/5*(1+overshoot)*h); z4 = (7/10w,0); draw z3..z4;
+top rt z5 = (1/7w,h); z6 = (11/40w,48/60h); z7 = (0w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+draw z5{right}.. tension 2 ..z6--z7;
+draw z7{right}..tension 1.5 ..{dir -75}(z4 - (0.08pt,0));
+lft z8 = (41/40w,(14/27+overshoot*3/4)*h); z9 = (w,(1/4+overshoot*3/4)*h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{right}..{down}z8{down}..z9;
+fill fullcircle scaled 1pt shifted (z9 + (-0.20pt,0.20pt));
+endgroup
+enddef;
+
+def ds(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+pickup dflt_pen;
+top z3 = (w,h); z4 = (w,0); draw z3..z4;
+top z5 = (1/20w,h); rt z10 = (w,3/7h);
+z7 = (0,2/5h); z8 = (1/7w,14/50h);
+z9 - z10 = (z7 - z8); rt bot z6 = 3/5[z8,z9];
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z5{right}..{down}z6;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z7..z8..z9..tension 1.4..z10;
+endgroup
+enddef;
+
+def _ds(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+pickup dflt_pen;
+top z3 = (w,h); z4 = (w,0); draw z3..z4;
+top z5 = (1/20w,h); rt z10 = (w,3/7h);
+z7 = (0,2/5h); z8 = (1/7w,14/50h);
+z9 - z10 = (z7 - z8); rt bot z6 = 3/5[z8,z9];
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z7..z8..z9..tension 1.4..z10;
+endgroup
+enddef;
+
+def _Dha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top lft z3 = (2/5w,h); lft z4 = (0,3/6h);
+z5 = (1/2w,0); z6 = (w,20/27h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z3..tension 2..z4{down}..z5..{up}z6;
+fill fullcircle scaled 1.2pt shifted (z6 - (0.43pt,0.15pt));
+endgroup
+enddef;
+
+def Tha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (1/2w,h); z4 = (0,3/10h); z5 = (6/16w,1/12h);
+z6 = (w,1/2h); z7 = (3/8w,3/2h); z8 = (9/19w,19/12h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z3{dir -75}..{dir -150}z4{down}..{right}z5{right}..{up}z6{up}
+ ..{dir 120}z3..{up}z7{up}..{dir 45}z8;
+endgroup
+enddef;
+
+def tta(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (1/5w,3/4h); z2 = (3/4w,h);
+z3 = (w,64/75h); z4 = (4/5w,3/5h); z5 = (w,28/75h);
+z6 = (3/5w,1/9h); z8 = (0,13/15h); z7 = (3/25w,4/9h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1{dir 75}..{right}z2{right}..{down}z3{down}..{dir -135}z4
+{dir -40}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.3pt shifted (z4 + (-0.37pt,0));
+fill fullcircle scaled 1.1pt shifted (z1 + (0.39pt,0));
+endgroup
+enddef;
+
+def gha(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (w,h); z4 = (w,0); pickup dflt_pen; draw z3..z4;
+z5 = (1/7w,h-0.05pt); z6 = (0,4/5h);
+z7 = (15/25w,7/10h); z8 = (1/9w,4/10h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z5{dir -120}..{down}z6{down}..{dir 30}z7--z8;
+draw z8{right}..tension 1.5 ..{dir -75}z4;
+endgroup
+enddef;
+
+def una(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (1/10w,h); z2 = (19/40w,76/93h); z3 = (25/29w,92/93h);
+z4 = (1/2w,h); z5 = (4/9w,1/2h); z6 = (19/40w,64/135h);
+z7 = (8/9w,2/3h); lft z8 = (w,11/25h); z9 = (23/40w,1/9h);
+z10 = (6/50w,4/9h); z11 = (0,13/15h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1..tension 1.2..{right}z2{right}..tension 1.2..
+{up}z3{up}..{dir -130}z4{dir -130}..
+tension 2..z5--z6{dir 0}..{dir 60}z7{dir -60}..{down}z8{down}
+..{left}z9{left}..z10..z11;
+endgroup
+enddef;
+
+def khiyo_base(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z1 = (1/15w,h); z2 = (1/7w,4/5h); z3 = (1/2w,2/5h);
+z4 = (w-0.01pt,0.2pt); z5 = (w,h); z6 = (w,0);
+pickup dflt_pen; draw z5..z6;
+pickup pencircle xscaled 0.3pt yscaled 0.55 pt rotated 45;
+draw z1..{down}z2{dir 20}..{dir -130}z3{right}..{down}z4;
+fill fullcircle scaled 1.4pt shifted (z2 + (-0.055w,-0.07h));
+fill fullcircle scaled 1.4pt shifted (z3 + (-0.07w,-0.04h));
+endgroup
+enddef;
+
+def khiyo(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+khiyo_base(xoff,yoff,2/3w,h);
+top z1 = (17/40w,h); z2 = (2/3w,29/40h); z3 = (w,9/20h);
+pickup pencircle xscaled 0.3pt yscaled 0.6 pt;
+draw z1{dir -120}..{dir 15}z2{dir 15}..{dir -120}z3;
+fill fullcircle scaled 1.3pt shifted (z3 + (-0.090w,-0.00h));
+endgroup
+enddef;
+
+def bhra(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z3 = (1/3w,9/15h); z4 = (6/7w,6/7h); z5 = (w,8/11h); z6 = (w,0);
+z8 = (w,0); z9 = (1/2w,1/6h);
+z10 = (11/30w,1/6h); z11 = (1/15w,6/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 15;
+draw z3{dir -29}..{dir 60}z4..tension 3.5..z5--z6;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z8{dir 90}..{left}z9..z10{left}..z11;
+fill fullcircle scaled 1.4pt shifted (z3 + (0.36pt,0.38pt));
+endgroup
+enddef;
+
+def ja(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (8/20w,h); z4 = (4/21w,2/3h); z5 = (8/20w,1/2h);
+z6 = (23/36w,35/60h); z7 = (12/16w,19/50h); z8 = (1/2w,1/6h);
+rt z9 = (0,3/4h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{dir -135}..{down}z4{down}..{right}z5{right}..{dir30}z6
+ {dir -60}..{down}z7{down}..{left}z8{left}..{up}z9;
+endgroup
+enddef;
+
+def jaleg(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+top z3 = (0,h);
+rt z11 = (w,3/4h);
+z12 = (7/8w,0);
+pickup pencircle xscaled 0.25pt yscaled 0.5pt;
+draw z3{dir -90}..{dir 15}z11;
+pickup pencircle xscaled 0.2pt yscaled 0.45pt rotated 45;
+draw z11{dir -120}..tension 1.8..z12;
+endgroup
+enddef;
+
+def hump(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z9 = (0,2/5h); z13 = (0,3/5h); z11 = (8/9w,1/2h);
+z10 = (w,0); z12 = (w,h);
+pickup pencircle xscaled 0.25pt yscaled 0.45pt;
+draw z9{dir -60}..z10..z11;
+pickup pencircle xscaled 0.25pt yscaled 0.45pt;
+draw z13{dir 60}..z12..z11;
+fill fullcircle scaled 1.0pt shifted (z11 + (-0.15pt,0));
+endgroup
+enddef;
+
+def ina(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+tra(xoff,yoff,3/5w,h);
+hump(xoff+3/5w,yoff+1/3h,2/5w,3/5h);
+endgroup
+enddef;
+
+def jha(expr xoff, yoff, w, h, fract) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+ba(xoff,yoff,7/10w,h);
+z1 = (7/10w,2/5h); z2 = (w,1/20h); z3 = (w,fract*h);
+pickup dflt_pen; draw z2..z3;
+draw z1{z2-z1 rotated -8}..z2;
+endgroup
+enddef;
+
+def dha_(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+ba(xoff,yoff,w,h);
+z8 = (1/2w,22/30h); z9 = (1/9w,9/10h); bot z10 = (9/30w,h);
+pickup pencircle scaled 0.35pt;
+draw z8{left}..{up}z9{up}..{right}z10;
+fill fullcircle scaled 1.0pt shifted (z10 + (0.1pt,-0.33pt));
+endgroup
+enddef;
+
+def gu(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[],z[]'; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+z1 = (7/10w,3/5h); z2 = (74/100w,76/100h);
+z4 = (19/25w,8/20h); z5 = (7/8w,12/50h);
+z6 = (24/40w,1/18h); z8 = (1/10w,13/20h); z7 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1--z2{dir -60}..{dir -135}z4
+ {dir -30}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+z2' = (9/20w,3/4h); z3' = (9/40w,12/20h);
+z4' = (18/40w,11/20h); z5' = (7/20w,8/20h);
+draw z1{dir 120}..{left}z2'{left}..{down}z3'{dir 30}..{down}z4'{down}..z5';
+endgroup
+enddef;
+
+def ha_ma(expr xoff, yoff, w, h) =
+begingroup
+save z, currenttransform; pair z[]; transform currenttransform;
+currenttransform = identity shifted (xoff,yoff) slanted slantval;
+khiyo_base(xoff,yoff,3/4w,h);
+z2 = (3/8w,3/4h); z3 = (3/4w,3/4h);
+z4 = (w,27/40h); z5 = (w,1/10h);
+pickup pencircle scaled 0.5pt;
+draw z2{dir -15}..{dir 15}z3{dir 15}..z4{dir -95}..{dir -85}z5;
+endgroup
+enddef;
+
+%%% End of bnmacro.mf
diff --git a/language/bengali/pandey/mf/bnmisc.mf b/language/bengali/pandey/mf/bnmisc.mf
new file mode 100644
index 0000000000..1007b7e7d5
--- /dev/null
+++ b/language/bengali/pandey/mf/bnmisc.mf
@@ -0,0 +1,33 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnmisc.mf: METAFONT file that defines some special symbols
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 20 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar(12,0stwd#,stht#,stdp#); "hasanta";
+z1 = (w-0.9pt,-1/4d); z2 = (w+1pt,-5/4d);
+pickup pencircle scaled penth#; draw z1..z2;
+endchar;
+
+beginchar(13,0.25stwd#,stht#,stdp#); "ja-fala";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+z3 = (5/6w,3/4h); z4 = (4/9w,7/17h); lft z5 = (0,0);
+pickup pencircle xscaled 0.6pt yscaled 0.3pt;
+draw z3{dir -180}..tension 1.5 ..{dir -80}z4{dir -80}..{dir -170}z5;
+endchar;
+
+beginchar(14,0stwd#,stht#,stdp#); "ref";
+z1l + (0.4pt,0) = z1r - (0.4pt,0) = z1 = (-1.4pt,13/16h);
+z2l + (0.2pt,0) = z2r - (0.2pt,0) = z2 = (2.5pt,9/8h);
+penstroke z1e..z2e;
+endchar;
+
+beginchar(15,0stwd#,stht#,stdp#); "ra-fala";
+z1 = (w-0.9pt,1/10h); z2 = (w-0.9pt,-d/3); z3 = (w-2.5pt,-1/6d);
+z4 = (w-4.4pt,-1/6d); z5 = (w-5.6pt,1/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z1--z2{dir 135}..{left}z3..z4{left}..{up}z5;
+endchar;
+
+%%% End of bnmisc.mf
diff --git a/language/bengali/pandey/mf/bnpunct.mf b/language/bengali/pandey/mf/bnpunct.mf
new file mode 100644
index 0000000000..2914f1a8c5
--- /dev/null
+++ b/language/bengali/pandey/mf/bnpunct.mf
@@ -0,0 +1,203 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnpunct.mf: METAFONT file that defines the Bengali punctuation symbols
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 20 1997
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+beginchar(".",0.40stwd#,stht#,stdp#); "dnari (period)";
+z1 = (3/4w,3/4h); z2 = (3/4w,0);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45; draw z1..z2;
+endchar;
+
+beginchar(60,0.50stwd#,stht#,stdp#); "double dnari";
+z1 = (1/3w,3/4h); z2 = (1/3w,0);
+z3 = (2/3w,3/4h); z4 = (2/3w,0);
+pickup pencircle xscaled 0.56pt yscaled 0pt rotated -45;
+draw z1..z2; draw z3..z4;
+endchar;
+
+beginchar("!",0.3stwd#,stht#,stdp#); "exclamation mark (bang)";
+pickup pencircle scaled 0.4pt;
+z1 = (1/2w,3/4h); z2 = (1/2w,1/6h); z3 = (1/2w,0);
+z1l + (0.2pt,0.1pt) = z1r + (-0.2pt,0.1pt) = z1;
+z2l + (0.1pt,-0.1pt) = z2r + (-0.1pt,-0.1pt) = z2;
+filldraw z1l..tension 3..z2l..z2..z2r..tension 3..z1r..z1..cycle;
+fill fullcircle scaled 1.2pt shifted z3;
+endchar;
+
+beginchar(",",0.3stwd#,stht#,stdp#); "comma";
+pickup pencircle scaled 0.5pt;
+z1 = (2/3w,1/9h); z2 = (2/5w,-d);
+draw z1{dir -60}..{dir -130}z2;
+fill fullcircle scaled 1.5pt shifted (z1 + (-0.50pt,-0.22pt));
+endchar;
+
+beginchar(";",0.3stwd#,stht#,stdp#); "semi colon";
+pickup pencircle scaled 0.5pt;
+z1 = (2/3w,1/9h); z2 = (2/5w,-d);
+draw z1{dir -60}..{dir -130}z2;
+fill fullcircle scaled 1.5pt shifted (z1 + (-0.50pt,-0.22pt));
+fill fullcircle scaled 1.5pt shifted (z1 + (-0.50pt,1.8pt));
+endchar;
+
+beginchar(":",0.3stwd#,stht#,stdp#); "colon";
+z1 = (1/2w,1/6h); z2 = (1/2w,(3/4-1/6)*h);
+fill fullcircle scaled 1.5pt shifted z1;
+fill fullcircle scaled 1.5pt shifted z2;
+endchar;
+
+beginchar("`",0.3stwd#,stht#,stdp#); "backquote";
+pickup pencircle scaled 0.5pt;
+z1 = (1/3w,(3/4-1/9)*h); z2 = (3/5w,h);
+draw z1{dir 120}..{dir 50}z2;
+fill fullcircle scaled 1.5pt shifted (z1 + (0.50pt,0.22pt));
+endchar;
+
+beginchar("'",0.3stwd#,stht#,stdp#); "quote";
+pickup pencircle scaled 0.5pt;
+z1 = (2/3w,24/25h); z2 = (2/5w,(3/4-1/9-1/25)*h);
+draw z1{dir -60}..{dir -130}z2;
+fill fullcircle scaled 1.5pt shifted (z1 + (-0.50pt,-0.22pt));
+endchar;
+
+beginchar(34,0.45stwd#,stht#,stdp#); "double quote";
+pickup pencircle scaled 0.5pt;
+z1 = (2/5w,29/30h); z2 = (1/5w,(3/4-1/9-1/30)*h);
+z1' = (4/5w,29/30h); z2' = (3/5w,(3/4-1/9-1/30)*h);
+draw z1{dir -60}..{dir -130}z2;
+draw z1'{dir -60}..{dir -130}z2';
+fill fullcircle scaled 1.5pt shifted (z1 + (-0.50pt,-0.22pt));
+fill fullcircle scaled 1.5pt shifted (z1' + (-0.50pt,-0.22pt));
+endchar;
+
+beginchar(92,0.45stwd#,stht#,stdp#); "double backquote";
+pickup pencircle scaled 0.5pt;
+z1 = (1/5w,(3/4-1/9)*h); z2 = (2/5w,h);
+z1' = (3/5w,(3/4-1/9)*h); z2' = (4/5w,h);
+draw z1{dir 120}..{dir 50}z2;
+draw z1'{dir 120}..{dir 50}z2';
+fill fullcircle scaled 1.5pt shifted (z1 + (0.50pt,0.22pt));
+fill fullcircle scaled 1.5pt shifted (z1' + (0.50pt,0.22pt));
+endchar;
+
+beginchar("#",0.55stwd#,stht#,stdp#); "hash";
+pickup pencircle scaled 0.5pt;
+z1 = (1/2w,3/4h); z2 = (1/4w,-2/3d);
+z1' = (3/4w,3/4h); z2' = (1/2w,-2/3d);
+draw z1--z2; draw z1'--z2';
+z3 = (1/8w,(1/4-1/30)*h); z4 = (7/8w,(1/4-1/30)*h);
+z3' = (1/8w,(1/2-1/10)*h); z4' = (7/8w,(1/2-1/10)*h);
+draw z3--z4; draw z3'--z4';
+endchar;
+
+beginchar("/",0.3stwd#,stht#,stdp#); "forward slash";
+pickup pencircle scaled 0.5pt;
+z1 = (7/8w,3/4h); z2 = (1/8w,-2/3d);
+draw z1--z2;
+endchar;
+
+beginchar("=",0.5stwd#,stht#,stdp#); "equality sign";
+pickup pencircle scaled 0.5pt;
+z3 = (1/8w,(1/4-1/30)*h); z4 = (7/8w,(1/4-1/30)*h);
+z3' = (1/8w,(1/2-1/10)*h); z4' = (7/8w,(1/2-1/10)*h);
+draw z3--z4; draw z3'--z4';
+endchar;
+
+beginchar("[",0.20stwd#,stht#,stdp#); "left square bracket";
+pickup pencircle scaled 0.1pt;
+z1=(w,h); z2 = (1/3w,h); z3 = (1/3w,-d); z4 = (w,-d);
+z1 - z1' = (0,0.5pt); z2 - z2' = (-0.5pt,0.5pt);
+z4 - z4' = (0,-0.5pt); z3 - z3' = (-0.5pt,-0.5pt);
+filldraw z1--z2--z3--z4--z4'--z3'--z2'--z1'--cycle;
+endchar;
+
+beginchar("]",0.20stwd#,stht#,stdp#); "right square bracket";
+pickup pencircle scaled 0.1pt;
+z1=(0,h); z2 = (2/3w,h); z3 = (2/3w,-d); z4 = (0,-d);
+z1 - z1' = (0,0.5pt); z2 - z2' = (0.5pt,0.5pt);
+z4 - z4' = (0,-0.5pt); z3 - z3' = (0.5pt,-0.5pt);
+filldraw z1--z2--z3--z4--z4'--z3'--z2'--z1'--cycle;
+endchar;
+
+beginchar("(",0.28stwd#,stht#,stdp#); "left parenthesis";
+pickup pencircle scaled 0.1pt;
+z1 = (8/9w,h); z3 = (8/9w,-d);
+z2 = (1/4w,1/3h); z2' = z2 + (0.5pt,0);
+filldraw z2'{up}..{dir 60}z1{dir -130}..{down}z2{down}
+ ..{dir -50}z3{dir 120}..cycle;
+endchar;
+
+beginchar(")",0.28stwd#,stht#,stdp#); "right parenthesis";
+pickup pencircle scaled 0.1pt;
+z1 = (1/9w,h); z3 = (1/9w,-d);
+z2 = (3/4w,1/3h); z2' = z2 - (0.5pt,0);
+filldraw z2'{up}..{dir 120}z1{dir -50}..{down}z2{down}
+ ..{dir -130}z3{dir 60}..cycle;
+endchar;
+
+beginchar("*",0.48stwd#,stht#,stdp#); "asterisk";
+numeric frac; frac = 1/8h;
+z1 = (1/2w,h); z2 = (1/2w,3/7h);
+z3 = (1/6w,h-frac); z4 = (5/6w,3/7h + frac);
+z5 = (1/6w,3/7h+frac); z6 = (5/6w,h - frac);
+pickup pencircle scaled 0.5pt;
+draw z1--z2; draw z3--z4; draw z5--z6;
+endchar;
+
+beginchar("+",0.68stwd#,stht#,stdp#); "plus sign";
+z1 = (1/12w,3/8h); z2 = (11/12w,3/8h);
+z3 = (1/2w,3/4h); z4 = (1/2w,0);
+pickup pencircle scaled 0.5pt;
+draw z1--z2; draw z3--z4;
+endchar;
+
+beginchar("-",0.30stwd#,stht#,stdp#); "hyphen";
+z1 = (1/10w,3/8h); z2 = (9/10w,3/8h);
+z1 - z3 = (0,0.5pt); z2 - z4 = (0,0.5pt);
+pickup pencircle scaled 0.1pt;
+filldraw z1--z2--z4--z3--cycle;
+endchar;
+
+beginchar(123,0.60stwd#,stht#,stdp#); "endash";
+z1 = (0,3/8h); z2 = (w,3/8h);
+pickup pencircle scaled 0.25pt;
+draw z1--z2;
+endchar;
+
+beginchar(124,1.10stwd#,stht#,stdp#); "emdash";
+z1 = (0,3/8h); z2 = (w,3/8h);
+pickup pencircle scaled 0.25pt;
+draw z1--z2;
+endchar;
+
+beginchar("%",0.70stwd#,stht#,stdp#); "percent sign";
+z1 = (5/6w,h); z2 = (1/6w,-1/3d);
+pickup pencircle scaled 0.5pt;
+draw z1--z2;
+pickup pencircle xscaled 0.4pt yscaled 0.2pt;
+draw fullcircle xscaled 11/40w yscaled 1/2h shifted (1/4w,3/4h);
+draw fullcircle xscaled 11/40w yscaled 1/2h shifted (3/4w,-1/3d + 1/4h);
+z3 = (11/40w,h);
+pickup pencircle scaled 0.25pt;
+draw z3{dir -45}..{dir 45}z1;
+endchar;
+
+beginchar("?",0.45stwd#,stht#,stdp#); "Question mark";
+z1=(1/6w,3/5h); z2=(1/2w,3/4h); z3=(5/6w,3/5h);z4=(11/20w,11/30h);
+z5=(1/2w,1/7h);
+pickup pencircle xscaled 0.5pt yscaled 0.25pt rotated -25;
+draw z1{up}..{right}z2{right}..{down}z3{down}..{dir -135}z4..{down}z5;
+fill fullcircle scaled 1.1pt shifted (z5 - (0pt,1.3pt));
+fill fullcircle scaled 1.2pt shifted (z1 + (0.37pt,-0.00pt));
+endchar;
+
+beginchar("$",0.65stwd#,stht#,stdp#); "bucks";
+z1 = (4/7w,h); z2 = (1/7w,-1/3d);
+pickup pencircle scaled 0.5pt;
+draw z1--z2;
+z3 = (4/7w,3/7h); z4 = (8/9w,3/7h);
+draw z3--z4;
+endchar;
+
+%%% End of bnpunct.mf
diff --git a/language/bengali/pandey/mf/bnr10.mf b/language/bengali/pandey/mf/bnr10.mf
new file mode 100644
index 0000000000..1160756b9b
--- /dev/null
+++ b/language/bengali/pandey/mf/bnr10.mf
@@ -0,0 +1,29 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnr10.mf: METAFONT file that defines the Bengali alphabet (nonslanted)
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mode_setup;
+font_size 10pt#;
+u# = 3/9pt#;
+s# = 1/3pt#;
+em# := 20pt#; cap# := 20pt#;
+thin# := 1/3pt#; thick# := 5/6pt#;
+o# := 1/5pt#;
+define_pixels(em,cap);
+define_blacker_pixels(thin,thick);
+define_corrected_pixels(o);
+numeric stwd, stht, stdp, penth;
+stwd# = 10pt#; stht# = 8pt#; stdp# = 2pt#;
+penth# = 0.4pt; dflt_pen := savepen;
+font_quad 18u#+2s#;
+font_normal_space 9u#+3s#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+numeric slantval; slantval = 0;
+
+input bn;
+end;
+
+%%% End of bnr10.mf
diff --git a/language/bengali/pandey/mf/bnsl10.mf b/language/bengali/pandey/mf/bnsl10.mf
new file mode 100644
index 0000000000..ab611e5acb
--- /dev/null
+++ b/language/bengali/pandey/mf/bnsl10.mf
@@ -0,0 +1,30 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnsl10.mf: METAFONT file that defines the Bengali alphabet (slanted)
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mode_setup;
+font_size 10pt#;
+u# = 3/9pt#;
+s# = 1/3pt#;
+em# := 20pt#; cap# := 20pt#;
+thin# := 1/3pt#; thick# := 5/6pt#;
+o# := 1/5pt#;
+define_pixels(em,cap);
+define_blacker_pixels(thin,thick);
+define_corrected_pixels(o);
+numeric stwd, stht, stdp, penth;
+stwd# = 10pt#; stht# = 8pt#; stdp# = 2pt#;
+penth# = 0.4pt; dflt_pen := savepen;
+currenttransform := identity slanted 1/5;
+font_quad 18u#+2s#;
+font_normal_space 9u#+3s#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+numeric slantval; slantval = 1/5;
+
+input bn;
+end;
+
+%%% End of bnsl10.mf
diff --git a/language/bengali/pandey/mf/bnswar.mf b/language/bengali/pandey/mf/bnswar.mf
new file mode 100644
index 0000000000..ae1faa1113
--- /dev/null
+++ b/language/bengali/pandey/mf/bnswar.mf
@@ -0,0 +1,162 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bnswar.mf: METAFONT file that defines the Bengali vowels
+% Created by: Abhijit Das (Barda) IISc Bangalore
+% Last modified: Jun 19 1997
+%
+% apandey 1999.05.29 repositioned "the letter a" from ASC 0 to ASC 97
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%beginchar(0,0.80stwd#,stht#,stdp#); "The letter a";
+beginchar(97,0.80stwd#,stht#,stdp#); "The letter a";
+pickup pencircle scaled penth#;
+numeric wd; wd = 37/40w;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (w-0.9pt,3/4h); z4 = (w-0.9pt,0); draw z3..z4;
+z5 = (3/8wd,3/5h); z6 = (19/25wd,2/5h); z7 = (3/4wd,3/10h);
+z8 = (11/20wd,1/8h); z9 = (1/12wd,13/20h); top z10 = (3/10wd,3/4h);
+z11 = (6/25wd,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z5{dir 25}..{down}z6{down}..z7..{left}z8{left}..z11..z9;
+draw z7{dir -60}..{dir -75}z4;
+pickup pencircle scaled 0.3pt;
+draw z10{dir -30}..{dir -75}(z5 + (0.25pt,0.2pt));
+fill fullcircle scaled 1.5pt shifted (z5 + (0.20pt,-0.45pt));
+endchar;
+
+beginchar(2,0.5stwd#,stht#,stdp#); "The letter hraswa-i";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (3/10w,3/4h); z4 = (1/3w,3/5h); z5 = (5/6w,1/2h);
+lft z6 = (1/8w,5/16h); z7 = (w,-1/3d);
+z6l + (0.15pt,-0.3pt) = z6r - (0.15pt,-0.3pt) = z6;
+z7l - (0,0.15pt) = z7r + (0,0.15pt) = z7;
+pickup pencircle xscaled 0.6pt yscaled 0.3pt rotated -45;
+draw z4{dir 30}..{down}z5{down}..{dir 150}z6;
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+penstroke z6e{dir -30}..{dir -45}z7e;
+fill fullcircle xscaled 1.5pt yscaled 1pt rotated 30 shifted (z4 + (0,-0.20pt));
+z10 = (w-0.7pt,3/4h); z8 = (1/2w,31/32h); z9 = (-1/8w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z10{dir 60}..{left}z8{left}...z9{dir 75};
+endchar;
+
+beginchar(3,0.60stwd#,stht#,stdp#); "The letter dirgha-i";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z3 = (1/10w,3/4h); z4 = (1/6w,3/5h); z5 = (1/8w,17/80h);
+z6 = (1/5w,1/5h); z7 = 1/3[z6,z8];
+z8 = (8/9w,9/16h); z9 = (5/6w,0);
+pickup pencircle xscaled 0.2pt yscaled 0.6pt rotated 45;
+draw z4{dir 30}..z7..tension 2..z6..z5;
+draw z7..{dir 35}z8{dir -120}..{dir -75}z9;
+z7' = (w-0.7pt,3/4h); z8' = (5/9w,31/32h); z9' = (0,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z7'{dir 60}..{left}z8'{left}...z9'{dir 75};
+pickup pencircle scaled 0.3pt;
+draw z3{dir -20}..{dir -75}(z4 + (0.5pt,0));
+fill fullcircle scaled 1.2pt shifted (z4 + (0.19pt,-0.25pt));
+endchar;
+
+beginchar(4,0.60stwd#,stht#,stdp#); "The letter hrashwa-u";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (1/2w,3/4h); z4 = (1/2w,9/22h); z5 = (11/20w,3/8h);
+z6 = (41/50w,21/40h); lft z7 = (8/9w,5/16h);
+z8 = (23/40w,1/12h); z9 = (1/10w,13/20h); z10 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{down}..{down}z4{dir -60}..{dir -60}z5{dir 30}..{dir60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+z7' = (w-0.7pt,3/4h); z8' = (1/2w,31/32h); z9' = (-1/8w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z7'{dir 60}..{left}z8'{left}...z9'{dir 75};
+endchar;
+
+beginchar(5,0.60stwd#,stht#,stdp#); "The letter dirgha-u";
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h); draw z1..z2;
+top z3 = (1/2w,3/4h); z4 = (1/2w,9/22h); z5 = (11/20w,3/8h);
+z6 = (41/50w,21/40h); lft z7 = (8/9w,5/16h);
+z8 = (23/40w,1/12h); z9 = (1/10w,13/20h); z10 = (9/50w,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z3{down}..{down}z4{dir -60}..{dir -60}z5{dir 30}..{dir60}z6{dir -60}
+ ..{down}z7{down}..{left}z8{left}..z10..z9;
+z10' = z10 + (0.6pt,0); z11 = z9 + (0.8pt,0);
+draw (z8+(0.3pt,0)){left}..z10'..z11;
+z7' = (w-0.7pt,3/4h); z8' = (1/2w,31/32h); z9' = (-1/8w,11/10h);
+pickup pencircle xscaled 0.2pt yscaled 0.4pt;
+draw z7'{dir 60}..{left}z8'{left}...z9'{dir 75};
+endchar;
+
+beginchar(6,0.67stwd#,stht#,stdp#); "The letter ri";
+z1 = (w-0.9pt,3/4h); z2 = (w-0.9pt,1/11h);
+z3 = (5/8w,3/4h); z4 = (5/8w,0); lft z5 = 4/7[z3,z4];
+pickup pencircle scaled penth#; draw z1..z2; draw z3..z4;
+draw z5{dir -45}..{dir -75}z2;
+rt z6 = (5/8w,13/20h); z7 = (1/6w,8/21h);
+pickup pencircle scaled 0.5pt;
+draw z6{z7-z6 rotated -8}..z7;
+z4 + (0,0.2pt) = z4l + (0.15pt,0) = z4r - (0.15pt,0);
+z7 = z7r + (0.2pt,-0.2pt) = z7l - (0.1pt,-0.27pt);
+penstroke z7e{right}.. tension 1.5 .. z4e;
+z8 = (1/2w-0.2pt,3/4h); z9 = (1/4w-0.1pt,31/50h); z10 = (1/10w,18/25h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw z6--z8{dir -150}..{left}z9{left}..{up}z10;
+fill fullcircle scaled 1.2pt shifted (z10 + (0.47pt,0));
+endchar;
+
+beginchar(8,0.65stwd#,stht#,stdp#); "The letter e";
+z1 = (9/20w,2/5h); z2 = (19/25w,3/4h); z3 = (6/7w,2/3h);
+z4 = (6/7w,0pt); z5 = (1/2w,1/6h);
+z6 = (1/5w,1/5h); z7 = (1/8w,3/8h); z8 = (1/6w,1/2h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{dir 135}..tension 1.2..{right}z2{right}..z3{down}..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw (z4+(0,0.2pt)){up}...{left}z5{left}..z6..{up}z7{up}..z8;
+fill fullcircle scaled 1.4pt shifted (z1 + (0.47pt,0.38pt));
+endchar;
+
+beginchar(9,0.76stwd#,stht#,stdp#); "The letter oi";
+numeric wd; wd = 21/25w;
+z1 = (9/20wd,2/5h); z2 = (19/25wd,3/4h); z3 = (6/7wd,2/3h);
+z4 = (6/7wd,0pt); z5 = (1/2wd,1/6h);
+z6 = (1/5wd,1/5h); z7 = (1/8wd,3/8h); z8 = (1/6wd,1/2h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 45;
+draw z1{dir 135}..tension 1.2..{right}z2{right}..z3{down}..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt;
+draw (z4+(0,0.2pt)){up}...{left}z5{left}..z6..{up}z7{up}..z8;
+fill fullcircle scaled 1.4pt shifted (z1 + (0.47pt,0.38pt));
+z9 = (9/10w,11/14h); z10 = (7/20w,17/16h); z11 = (2/5w,9/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated -30;
+draw 2/7[z3,z4]{right}..z9..{up}z10{up}..z11;
+endchar;
+
+beginchar(10,0.58stwd#,stht#,stdp#); "The letter o";
+numeric wd; wd = w; z1 = (3/10wd,29/50h); z2 = (2/3wd,3/4h);
+z3 = (7/8wd,16/25h); z4 = (18/25wd,9/20h); z5 = (7/8wd,7/25h);
+z6 = (23/40wd,1/12h); z8 = (1/10wd,13/20h); z7 = (9/50wd,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1{dir 75}..{right}z2{right}..{down}z3{down}..{dir -135}z4
+{dir -40}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+fill fullcircle scaled 1.2pt shifted (z1 + (0.39pt,0));
+endchar;
+
+beginchar(11,0.67stwd#,stht#,stdp#); "The letter ou";
+numeric wd;
+wd = 22/25*w; z1 = (3/10wd,3/5h); z2 = (2/3wd,3/4h);
+z3 = (7/8wd,16/25h); z4 = (18/25wd,9/20h); z5 = (7/8wd,7/25h);
+z6 = (23/40wd,1/12h); z8 = (1/10wd,13/20h); z7 = (9/50wd,1/3h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 30;
+draw z1{dir 75}..{right}z2{right}..{down}z3{down}..{dir -135}z4
+{dir -40}..{down}z5{down}..{left}z6{left}..z7..z8;
+fill fullcircle scaled 1.4pt shifted (z4 + (-0.37pt,0));
+fill fullcircle scaled 1.2pt shifted (z1 + (0.39pt,0));
+z9 = (7/8w,4/5h); z10 = (7/20w,17/16h); z11 = (2/5w,9/8h);
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated -30;
+draw (z4 - (0,0.2pt)){dir 30}..z9..{up}z10{up}..z11;
+endchar;
+
+%%% End of bnswar.mf
diff --git a/language/bengali/pandey/mf/xbnr10.mf b/language/bengali/pandey/mf/xbnr10.mf
new file mode 100644
index 0000000000..73d4aeeb01
--- /dev/null
+++ b/language/bengali/pandey/mf/xbnr10.mf
@@ -0,0 +1,29 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% xbnr10.mf: METAFONT supplemental characters for Bengali (nonslanted)
+% Created by: Anshuman Pandey <apandey@u.washington.edu>
+% Modified: Mar 27 2002
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mode_setup;
+font_size 10pt#;
+u# = 3/9pt#;
+s# = 1/3pt#;
+em# := 20pt#; cap# := 20pt#;
+thin# := 1/3pt#; thick# := 5/6pt#;
+o# := 1/5pt#;
+define_pixels(em,cap);
+define_blacker_pixels(thin,thick);
+define_corrected_pixels(o);
+numeric stwd, stht, stdp, penth;
+stwd# = 10pt#; stht# = 8pt#; stdp# = 2pt#;
+penth# = 0.4pt; dflt_pen := savepen;
+font_quad 18u#+2s#;
+font_normal_space 9u#+3s#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+numeric slantval; slantval = 0;
+
+input xbnsupp;
+end;
+
+%%% End of xbnr10.mf
diff --git a/language/bengali/pandey/mf/xbnsl10.mf b/language/bengali/pandey/mf/xbnsl10.mf
new file mode 100644
index 0000000000..68d3f2e3f9
--- /dev/null
+++ b/language/bengali/pandey/mf/xbnsl10.mf
@@ -0,0 +1,30 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% xbnsl10.mf: METAFONT supplemental characters for Bengali (slanted)
+% Created by: Anshuman Pandey <apandey@u.washington.edu>
+% Modified: Mar 27 2002
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+mode_setup;
+font_size 10pt#;
+u# = 3/9pt#;
+s# = 1/3pt#;
+em# := 20pt#; cap# := 20pt#;
+thin# := 1/3pt#; thick# := 5/6pt#;
+o# := 1/5pt#;
+define_pixels(em,cap);
+define_blacker_pixels(thin,thick);
+define_corrected_pixels(o);
+numeric stwd, stht, stdp, penth;
+stwd# = 10pt#; stht# = 8pt#; stdp# = 2pt#;
+penth# = 0.4pt; dflt_pen := savepen;
+currenttransform := identity slanted 1/5;
+font_quad 18u#+2s#;
+font_normal_space 9u#+3s#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+numeric slantval; slantval = 1/5;
+
+input xbnsupp;
+end;
+
+%%% End of xbnsl10.mf
diff --git a/language/bengali/pandey/mf/xbnsupp.mf b/language/bengali/pandey/mf/xbnsupp.mf
new file mode 100644
index 0000000000..5d6198930f
--- /dev/null
+++ b/language/bengali/pandey/mf/xbnsupp.mf
@@ -0,0 +1,80 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% asextra.mf: METAFONT definitions for Assamese extension characters
+% Created by: Anshuman Pandey <apandey@u.washington.edu>
+% Last modified: Mar 27 2002
+%
+% apandey 2002.03.27 added "Assamese ra" at position 114 "r"
+% apandey 2002.03.27 added "Assamese va" at position 118 "v"
+% apandey 2002.03.27 added "Bengali lig thba" at position 76 "L"
+% apandey 2002.03.27 added "Bengali lig ndba" at position 80 "P"
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+input bnmacro;
+
+
+% th + ba
+newchar(76,0.48,"th + b");
+ha(1/10w,1/4h+0.2pt,2/3w+0.1pt,3/5h-0.1pt);
+pickup pencircle scaled 0.4pt;
+draw (5/6w,1/4h)..(5/6w,3/4h+0.2pt);
+draw(5/6w,3/4h)..(w,3/4h);
+ba(1/3w,-1/3d,1/2w,33/80h);
+endchar;
+
+
+% n + d + ba
+newchar(80,0.66,"n + d + b");
+matra(w,h);
+na(1/10w,(3/10+1/16)*h,(1/2-1/10)*w,5/16h,0.2);
+da(1/2w,1/5h,1/2w-0.9pt,3/7h,0);
+ba(21/40w+0.03pt,-1/4d,1/3w,8/20h);
+endchar;
+
+
+% Assamese ra
+beginchar(114,0.52stwd#,stht#,stdp#); "The letter Assamese ra"; % "r"
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (w-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (w-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (w-0.9pt,3/4h);
+draw z3..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+rt z8 = (5/6w,1/4h);
+z9 = (1/2w,43/80h);
+%draw (z9+(0,0.1pt))--z8;
+draw z8--z9;
+endchar;
+
+
+% Assamese va
+beginchar(118,0.52stwd#,stht#,stdp#); "The letter Assamese va"; % "v"
+pickup pencircle scaled penth#;
+z1 = (0,3/4h); z2=(w,3/4h);
+draw z1..z2;
+z5 = (w-0.9pt,13/20h);
+z5r = z5 + (0,penth#/2); z5l = z5 - (0,penth#/2);
+z6 = (1/6w,8/21h);
+numeric len; len = 1/2(penth#/(sqrt 2));
+z6l = z6 + (len,-len); z6r = z6 - (len,-len);
+penstroke z5e{z6-z5 rotated -8}..z6e;
+bot z4 = z4l + (0.1pt,0) = z4r - (0.1pt,0) = (w-0.9pt,0);
+z7 - z6 = (0.2pt,-0.2pt);
+z7l = z7 + (len, -len); z7r = z6r;
+penstroke z7e{z4-z7 rotated 120}.. tension 1.5 .. z4e;
+top z3 = (w-0.9pt,3/4h);
+draw z3..z4;
+pickup pencircle xscaled 0.3pt yscaled 0.6pt rotated 50;
+rt z8 = (2/3w,1/11h);
+z9 = (1/4w,1/4h);
+draw (z9+(0,0.1pt))--z8;
+endchar;
diff --git a/language/bengali/pandey/tfm/bnr10.tfm b/language/bengali/pandey/tfm/bnr10.tfm
new file mode 100644
index 0000000000..e72e1d04a2
--- /dev/null
+++ b/language/bengali/pandey/tfm/bnr10.tfm
Binary files differ
diff --git a/language/bengali/pandey/tfm/bnsl10.tfm b/language/bengali/pandey/tfm/bnsl10.tfm
new file mode 100644
index 0000000000..e72e1d04a2
--- /dev/null
+++ b/language/bengali/pandey/tfm/bnsl10.tfm
Binary files differ
diff --git a/language/bengali/pandey/tfm/xbnr10.tfm b/language/bengali/pandey/tfm/xbnr10.tfm
new file mode 100644
index 0000000000..535a3637ef
--- /dev/null
+++ b/language/bengali/pandey/tfm/xbnr10.tfm
Binary files differ
diff --git a/language/bengali/pandey/tfm/xbnsl10.tfm b/language/bengali/pandey/tfm/xbnsl10.tfm
new file mode 100644
index 0000000000..535a3637ef
--- /dev/null
+++ b/language/bengali/pandey/tfm/xbnsl10.tfm
Binary files differ
diff --git a/language/bengali/pandey/ubn.fd b/language/bengali/pandey/ubn.fd
new file mode 100644
index 0000000000..2ea1b0e10c
--- /dev/null
+++ b/language/bengali/pandey/ubn.fd
@@ -0,0 +1,36 @@
+% LaTeX2e font description file for "Bengali for TeX".
+% ====================================================
+%
+% This file contains the font definitions for the BNR family in the U
+% `user-defined / unknown' encoding. It is used by the LaTeX New Font
+% Selection Scheme, which is part of the standard distribution of
+% LaTeX2e.
+
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesFile{ubn.fd}[2002/03/27 v2.0 Bengali font declarations]
+
+\DeclareFontFamily{U}{bn}{}
+
+\DeclareFontShape{U}{bn}{m}{n}{
+ <5><6><7> gen * bnr
+ <8> <9> gen * bnr
+ <10->bnr10 }{}
+
+\DeclareFontShape{U}{bn}{m}{sc}{ <-> ssub * bnr/m/n }{}
+\DeclareFontShape{U}{bn}{m}{it}{ <-> ssub * bnr/m/sl }{}
+\DeclareFontShape{U}{bn}{m}{itsc}{ <-> ssub * bnr/m/n }{}
+
+\DeclareFontShape{U}{bn}{m}{sl}{
+ <5><6><7> gen * bnsl
+ <8> <9> gen * bnsl
+ <10->bnsl10 }{}
+
+\DeclareFontShape{U}{bn}{m}{slsc}{ <-> ssub * bnr/m/sl }{}
+\DeclareFontShape{U}{bn}{bx}{n}{ <-> ssub * bnr/m/n }{}
+\DeclareFontShape{U}{bn}{bx}{sc}{ <-> ssub * bnr/m/n }{}
+\DeclareFontShape{U}{bn}{bx}{it}{ <-> ssub * bnr/m/sl }{}
+\DeclareFontShape{U}{bn}{bx}{itsc}{ <-> ssub * bnr/m/n }{}
+\DeclareFontShape{U}{bn}{bx}{sl}{ <-> ssub * bnr/m/sl }{}
+\DeclareFontShape{U}{bn}{bx}{slsc}{ <-> ssub * bnr/m/n}{}
+
+\endinput
diff --git a/language/bengali/pandey/ubnx.fd b/language/bengali/pandey/ubnx.fd
new file mode 100644
index 0000000000..886fe8ba08
--- /dev/null
+++ b/language/bengali/pandey/ubnx.fd
@@ -0,0 +1,36 @@
+% LaTeX2e font description file for "Bengali for TeX".
+% ====================================================
+%
+% This file contains the font definitions for the xbnrX family in the U
+% `user-defined / unknown' encoding. It is used by the LaTeX New Font
+% Selection Scheme, which is part of the standard distribution of
+% LaTeX2e.
+
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesFile{uas.fd}[2002/03/27 v2.0 Bengali supplemental font declarations]
+
+\DeclareFontFamily{U}{bnx}{}
+
+\DeclareFontShape{U}{bnx}{m}{n}{
+ <5><6><7> gen * xbnr
+ <8> <9> gen * xbnr
+ <10->xbnr10 }{}
+
+\DeclareFontShape{U}{bnx}{m}{sc}{ <-> ssub * xbnr/m/n }{}
+\DeclareFontShape{U}{bnx}{m}{it}{ <-> ssub * xbnr/m/sl }{}
+\DeclareFontShape{U}{bnx}{m}{itsc}{ <-> ssub * xbnr/m/n }{}
+
+\DeclareFontShape{U}{bnx}{m}{sl}{
+ <5><6><7> gen * xbnsl
+ <8> <9> gen * xbnsl
+ <10->xbnsl10 }{}
+
+\DeclareFontShape{U}{bnx}{m}{slsc}{ <-> ssub * xbnr/m/sl }{}
+\DeclareFontShape{U}{bnx}{bx}{n}{ <-> ssub * xbnr/m/n }{}
+\DeclareFontShape{U}{bnx}{bx}{sc}{ <-> ssub * xbnr/m/n }{}
+\DeclareFontShape{U}{bnx}{bx}{it}{ <-> ssub * xbnr/m/sl }{}
+\DeclareFontShape{U}{bnx}{bx}{itsc}{ <-> ssub * xbnr/m/n }{}
+\DeclareFontShape{U}{bnx}{bx}{sl}{ <-> ssub * xbnr/m/sl }{}
+\DeclareFontShape{U}{bnx}{bx}{slsc}{ <-> ssub * xbnr/m/n}{}
+
+\endinput