#include <u.h>
#include <libc.h>
#include <bio.h>
#include <ctype.h>
enum
{
Unbsp = 0x00A0,
Uprivate = 0xF000,
Uempty, /* \& */
Uamp, /* raw & */
Ult, /* raw < */
Ugt, /* raw > */
Utick, /* raw ' */
Ubtick, /* raw ` */
Uminus, /* raw - */
Uspace, /* raw space */
Upl, /* symbol + */
Ueq, /* symbol = */
Umi, /* symbol - */
Uformatted, /* start diverted output */
Uunformatted, /* end diverted output */
UPI = 720, /* units per inch */
UPX = 10, /* units per pixel */
/* special input modes */
CopyMode = 1<<1,
ExpandMode = 1<<2,
ArgMode = 1<<3,
HtmlMode = 1<<4,
MaxLine = 1024,
};
Rune* L(char*);
void addesc(Rune, int (*)(void), int);
void addraw(Rune*, void(*)(Rune*));
void addreq(Rune*, void(*)(int, Rune**), int);
void af(Rune*, Rune*);
void as(Rune*, Rune*);
void br(void);
void closehtml(void);
Rune* copyarg(void);
void delraw(Rune*);
void delreq(Rune*);
void ds(Rune*, Rune*);
int dv(int);
int e_nop(void);
int e_warn(void);
void* emalloc(uint);
void* erealloc(void*, uint);
Rune* erunesmprint(char*, ...);
Rune* erunestrdup(Rune*);
char* esmprint(char*, ...);
char* estrdup(char*);
int eval(Rune*);
int evalscale(Rune*, int);
Rune* getname(void);
int getnext(void);
Rune* getds(Rune*);
Rune* _getnr(Rune*);
int getnr(Rune*);
int getnrr(Rune*);
int getrune(void);
Rune* getqarg(void);
Rune* getline(void);
void hideihtml(void);
void html(Rune*, Rune*);
void htmlinit(void);
void ihtml(Rune*, Rune*);
void inputnotify(void(*)(void));
void itrap(void);
void itrapset(void);
int linefmt(Fmt*);
void nr(Rune*, int);
void _nr(Rune*, Rune*);
void out(Rune*);
void (*outcb)(Rune);
void outhtml(Rune*);
void outrune(Rune);
void outtrap(void);
int popinput(void);
void printds(int);
int pushinputfile(Rune*);
void pushinputstring(Rune*);
int pushstdin(void);
int queueinputfile(Rune*);
int queuestdin(void);
void r_nop(int, Rune**);
void r_warn(int, Rune**);
Rune *readline(int);
void reitag(void);
void renraw(Rune*, Rune*);
void renreq(Rune*, Rune*);
void run(void);
void runinput(void);
int runmacro(int, int, Rune**);
void runmacro1(Rune*);
Rune* rune2html(Rune);
void setlinenumber(Rune*, int);
void showihtml(void);
void sp(int);
void t1init(void);
void t2init(void);
void t3init(void);
void t4init(void);
void t5init(void);
void t6init(void);
void t7init(void);
void t8init(void);
void t9init(void);
void t10init(void);
void t11init(void);
void t12init(void);
void t13init(void);
void t14init(void);
void t15init(void);
void t16init(void);
void t17init(void);
void t18init(void);
void t19init(void);
void t20init(void);
Rune troff2rune(Rune*);
void unfont(void);
void ungetnext(Rune);
void ungetrune(Rune);
void unitag(void);
void warn(char*, ...);
extern int backslash;
extern int bol;
extern Biobuf bout;
extern int broke;
extern int dot;
extern int inputmode;
extern int inrequest;
extern int tick;
extern int utf8;
extern int verbose;
extern int linepos;
#define runemalloc(n) (Rune*)emalloc((n)*sizeof(Rune))
#define runerealloc(r, n) (Rune*)erealloc(r, (n)*sizeof(Rune))
#define runemove(a, b, n) memmove(a, b, (n)*sizeof(Rune))
#pragma varargck type "L" void
|