#include #include #include #include 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