📄 pgw.c
字号:
/* thanks to Caerwyn Jones <caerwyn@comcast.net> for this module */#include <u.h>#include <libc.h>#include <bio.h>#include "dict.h"enum { Buflen=1000, Maxaux=5,};/* Possible tags */enum { B, /* Bold */ Blockquote, /* Block quote */ Br, /* Break line */ Cd, /* ? coloquial data */ Col, /* ? Coloquial */ Def, /* Definition */ Hw, /* Head Word */ I, /* Italics */ P, /* Paragraph */ Pos, /* Part of Speach */ Sn, /* Sense */ U, /* ? cross reference*/ Wf, /* ? word form */ Ntag /* end of tags */};/* Assoc tables must be sorted on first field */static Assoc tagtab[] = { {"b", B}, {"blockquote", Blockquote}, {"BR", Br}, {"cd", Cd}, {"col", Col}, {"def", Def}, {"hw", Hw}, {"i", I}, {"p", P}, {"pos", Pos}, {"sn", Sn}, {"u", U}, {"wf", Wf},};/* Possible tag auxilliary info */enum { Cols, /* number of columns in a table */ Num, /* letter or number, for a sense */ St, /* status (e.g., obs) */ Naux};static Assoc auxtab[] = { {"cols", Cols}, {"num", Num}, {"st", St}};static Assoc spectab[] = { {"3on4", L'¾'}, {"AElig", L'Æ'}, {"Aacute", L'Á'}, {"Aang", L'Å'}, {"Abarab", L'Ā'}, {"Acirc", L'Â'}, {"Agrave", L'À'}, {"Alpha", L'Α'}, {"Amacr", L'Ā'}, {"Asg", L'Ʒ'}, /* Unicyle. Cf "Sake" */ {"Auml", L'Ä'}, {"Beta", L'Β'}, {"Cced", L'Ç'}, {"Chacek", L'Č'}, {"Chi", L'Χ'}, {"Chirho", L'☧'}, /* Chi Rho U+2627 */ {"Csigma", L'Ϛ'}, {"Delta", L'Δ'}, {"Eacute", L'É'}, {"Ecirc", L'Ê'}, {"Edh", L'Ð'}, {"Epsilon", L'Ε'}, {"Eta", L'Η'}, {"Gamma", L'Γ'}, {"Iacute", L'Í'}, {"Icirc", L'Î'}, {"Imacr", L'Ī'}, {"Integ", L'∫'}, {"Iota", L'Ι'}, {"Kappa", L'Κ'}, {"Koppa", L'Ϟ'}, {"Lambda", L'Λ'}, {"Lbar", L'Ł'}, {"Mu", L'Μ'}, {"Naira", L'N'}, /* should have bar through */ {"Nplus", L'N'}, /* should have plus above */ {"Ntilde", L'Ñ'}, {"Nu", L'Ν'}, {"Oacute", L'Ó'}, {"Obar", L'Ø'}, {"Ocirc", L'Ô'}, {"Oe", L'Œ'}, {"Omega", L'Ω'}, {"Omicron", L'Ο'}, {"Ouml", L'Ö'}, {"Phi", L'Φ'}, {"Pi", L'Π'}, {"Psi", L'Ψ'}, {"Rho", L'Ρ'}, {"Sacute", L'Ś'}, {"Sigma", L'Σ'}, {"Summ", L'∑'}, {"Tau", L'Τ'}, {"Th", L'Þ'}, {"Theta", L'Θ'}, {"Tse", L'Ц'}, {"Uacute", L'Ú'}, {"Ucirc", L'Û'}, {"Upsilon", L'Υ'}, {"Uuml", L'Ü'}, {"Wyn", L'ƿ'}, /* wynn U+01BF */ {"Xi", L'Ξ'}, {"Ygh", L'Ʒ'}, /* Yogh U+01B7 */ {"Zeta", L'Ζ'}, {"Zh", L'Ʒ'}, /* looks like Yogh. Cf "Sake" */ {"a", L'a'}, /* ante */ {"aacute", L'á'}, {"aang", L'å'}, {"aasper", MAAS}, {"abreve", L'ă'}, {"acirc", L'â'}, {"acute", LACU}, {"aelig", L'æ'}, {"agrave", L'à'}, {"ahook", L'ą'}, {"alenis", MALN}, {"alpha", L'α'}, {"amacr", L'ā'}, {"amp", L'&'}, {"and", MAND}, {"ang", LRNG}, {"angle", L'∠'}, {"ankh", L'☥'}, /* ankh U+2625 */ {"ante", L'a'}, /* before (year) */ {"aonq", MAOQ}, {"appreq", L'≃'}, {"aquar", L'♒'}, {"arDadfull", L'ض'}, /* Dad U+0636 */ {"arHa", L'ح'}, /* haa U+062D */ {"arTa", L'ت'}, /* taa U+062A */ {"arain", L'ع'}, /* ain U+0639 */ {"arainfull", L'ع'}, /* ain U+0639 */ {"aralif", L'ا'}, /* alef U+0627 */ {"arba", L'ب'}, /* baa U+0628 */ {"arha", L'ه'}, /* ha U+0647 */ {"aries", L'♈'}, {"arnun", L'ن'}, /* noon U+0646 */ {"arnunfull", L'ن'}, /* noon U+0646 */ {"arpa", L'ه'}, /* ha U+0647 */ {"arqoph", L'ق'}, /* qaf U+0642 */ {"arshinfull", L'ش'}, /* sheen U+0634 */ {"arta", L'ت'}, /* taa U+062A */ {"artafull", L'ت'}, /* taa U+062A */ {"artha", L'ث'}, /* thaa U+062B */ {"arwaw", L'و'}, /* waw U+0648 */ {"arya", L'ي'}, /* ya U+064A */ {"aryafull", L'ي'}, /* ya U+064A */ {"arzero", L'٠'}, /* indic zero U+0660 */ {"asg", L'ʒ'}, /* unicycle character. Cf "hallow" */ {"asper", LASP}, {"assert", L'⊢'}, {"astm", L'⁂'}, /* asterism: should be upside down */ {"at", L'@'}, {"atilde", L'ã'}, {"auml", L'ä'}, {"ayin", L'ع'}, /* arabic ain U+0639 */ {"b1", L'-'}, /* single bond */ {"b2", L'='}, /* double bond */ {"b3", L'≡'}, /* triple bond */ {"bbar", L'ƀ'}, /* b with bar U+0180 */ {"beta", L'β'}, {"bigobl", L'/'}, {"blC", L'C'}, /* should be black letter */ {"blJ", L'J'}, /* should be black letter */ {"blU", L'U'}, /* should be black letter */ {"blb", L'b'}, /* should be black letter */ {"blozenge", L'◊'}, /* U+25CA; should be black */ {"bly", L'y'}, /* should be black letter */ {"bra", MBRA}, {"brbl", LBRB}, {"breve", LBRV}, {"bslash", L'\\'}, {"bsquare", L'■'}, /* black square U+25A0 */ {"btril", L'◀'}, /* U+25C0 */ {"btrir", L'▶'}, /* U+25B6 */ {"c", L'c'}, /* circa */ {"cab", L'〉'}, {"cacute", L'ć'}, {"canc", L'♋'}, {"capr", L'♑'}, {"caret", L'^'}, {"cb", L'}'}, {"cbigb", L'}'}, {"cbigpren", L')'}, {"cbigsb", L']'}, {"cced", L'ç'}, {"cdil", LCED}, {"cdsb", L'〛'}, /* ]] U+301b */ {"cent", L'¢'}, {"chacek", L'č'}, {"chi", L'χ'}, {"circ", LRNG}, {"circa", L'c'}, /* about (year) */ {"circbl", L'̥'}, /* ring below accent U+0325 */ {"circle", L'○'}, /* U+25CB */ {"circledot", L'⊙'}, {"click", L'ʖ'}, {"club", L'♣'}, {"comtime", L'C'}, {"conj", L'☌'}, {"cprt", L'©'}, {"cq", L'\''}, {"cqq", L'”'}, {"cross", L'✠'}, /* maltese cross U+2720 */ {"crotchet", L'♩'}, {"csb", L']'}, {"ctilde", L'c'}, /* +tilde */ {"ctlig", MLCT}, {"cyra", L'а'}, {"cyre", L'е'}, {"cyrhard", L'ъ'}, {"cyrjat", L'ѣ'}, {"cyrm", L'м'}, {"cyrn", L'н'}, {"cyrr", L'р'}, {"cyrsoft", L'ь'}, {"cyrt", L'т'}, {"cyry", L'ы'}, {"dag", L'†'}, {"dbar", L'đ'}, {"dblar", L'⇋'}, {"dblgt", L'≫'}, {"dbllt", L'≪'}, {"dced", L'd'}, /* +cedilla */ {"dd", MDD}, {"ddag", L'‡'}, {"ddd", MDDD}, {"decr", L'↓'}, {"deg", L'°'}, {"dele", L'd'}, /* should be dele */ {"delta", L'δ'}, {"descnode", L'☋'}, /* descending node U+260B */ {"diamond", L'♢'}, {"digamma", L'ϝ'}, {"div", L'÷'}, {"dlessi", L'ı'}, {"dlessj1", L'j'}, /* should be dotless */ {"dlessj2", L'j'}, /* should be dotless */ {"dlessj3", L'j'}, /* should be dotless */ {"dollar", L'$'}, {"dotab", LDOT}, {"dotbl", LDTB}, {"drachm", L'ʒ'}, {"dubh", L'-'}, {"eacute", L'é'}, {"earth", L'♁'}, {"easper", MEAS}, {"ebreve", L'ĕ'}, {"ecirc", L'ê'}, {"edh", L'ð'}, {"egrave", L'è'}, {"ehacek", L'ě'}, {"ehook", L'ę'}, {"elem", L'∊'}, {"elenis", MELN}, {"em", L'—'}, {"emacr", L'ē'}, {"emem", MEMM}, {"en", L'–'}, {"epsilon", L'ε'}, {"equil", L'⇋'}, {"ergo", L'∴'}, {"es", MES}, {"eszett", L'ß'}, {"eta", L'η'}, {"eth", L'ð'}, {"euml", L'ë'}, {"expon", L'↑'}, {"fact", L'!'}, {"fata", L'ɑ'}, {"fatpara", L'¶'}, /* should have fatter, filled in bowl */ {"female", L'♀'}, {"ffilig", MLFFI}, {"fflig", MLFF}, {"ffllig", MLFFL}, {"filig", MLFI}, {"flat", L'♭'}, {"fllig", MLFL}, {"frE", L'E'}, /* should be curly */ {"frL", L'L'}, /* should be curly */ {"frR", L'R'}, /* should be curly */ {"frakB", L'B'}, /* should have fraktur style */ {"frakG", L'G'}, {"frakH", L'H'}, {"frakI", L'I'}, {"frakM", L'M'}, {"frakU", L'U'}, {"frakX", L'X'}, {"frakY", L'Y'}, {"frakh", L'h'}, {"frbl", LFRB}, {"frown", LFRN}, {"fs", L' '}, {"fsigma", L'ς'}, {"gAacute", L'Á'}, /* should be Α+acute */ {"gaacute", L'α'}, /* +acute */ {"gabreve", L'α'}, /* +breve */ {"gafrown", L'α'}, /* +frown */ {"gagrave", L'α'}, /* +grave */ {"gamacr", L'α'}, /* +macron */ {"gamma", L'γ'}, {"gauml", L'α'}, /* +umlaut */ {"ge", L'≧'}, {"geacute", L'ε'}, /* +acute */ {"gegrave", L'ε'}, /* +grave */ {"ghacute", L'η'}, /* +acute */ {"ghfrown", L'η'}, /* +frown */ {"ghgrave", L'η'}, /* +grave */ {"ghmacr", L'η'}, /* +macron */ {"giacute", L'ι'}, /* +acute */ {"gibreve", L'ι'}, /* +breve */ {"gifrown", L'ι'}, /* +frown */ {"gigrave", L'ι'}, /* +grave */ {"gimacr", L'ι'}, /* +macron */ {"giuml", L'ι'}, /* +umlaut */ {"glagjat", L'ѧ'}, {"glots", L'ˀ'}, {"goacute", L'ο'}, /* +acute */ {"gobreve", L'ο'}, /* +breve */ {"grave", LGRV}, {"gt", L'>'}, {"guacute", L'υ'}, /* +acute */ {"gufrown", L'υ'}, /* +frown */ {"gugrave", L'υ'}, /* +grave */ {"gumacr", L'υ'}, /* +macron */ {"guuml", L'υ'}, /* +umlaut */ {"gwacute", L'ω'}, /* +acute */ {"gwfrown", L'ω'}, /* +frown */ {"gwgrave", L'ω'}, /* +grave */ {"hacek", LHCK}, {"halft", L'⌈'}, {"hash", L'#'}, {"hasper", MHAS}, {"hatpath", L'ֲ'}, /* hataf patah U+05B2 */ {"hatqam", L'ֳ'}, /* hataf qamats U+05B3 */ {"hatseg", L'ֱ'}, /* hataf segol U+05B1 */ {"hbar", L'ħ'}, {"heart", L'♡'}, {"hebaleph", L'א'}, /* aleph U+05D0 */ {"hebayin", L'ע'}, /* ayin U+05E2 */ {"hebbet", L'ב'}, /* bet U+05D1 */ {"hebbeth", L'ב'}, /* bet U+05D1 */ {"hebcheth", L'ח'}, /* bet U+05D7 */ {"hebdaleth", L'ד'}, /* dalet U+05D3 */ {"hebgimel", L'ג'}, /* gimel U+05D2 */ {"hebhe", L'ה'}, /* he U+05D4 */ {"hebkaph", L'כ'}, /* kaf U+05DB */ {"heblamed", L'ל'}, /* lamed U+05DC */ {"hebmem", L'מ'}, /* mem U+05DE */ {"hebnun", L'נ'}, /* nun U+05E0 */ {"hebnunfin", L'ן'}, /* final nun U+05DF */ {"hebpe", L'פ'}, /* pe U+05E4 */ {"hebpedag", L'ף'}, /* final pe? U+05E3 */ {"hebqoph", L'ק'}, /* qof U+05E7 */ {"hebresh", L'ר'}, /* resh U+05E8 */ {"hebshin", L'ש'}, /* shin U+05E9 */ {"hebtav", L'ת'}, /* tav U+05EA */ {"hebtsade", L'צ'}, /* tsadi U+05E6 */ {"hebwaw", L'ו'}, /* vav? U+05D5 */ {"hebyod", L'י'}, /* yod U+05D9 */ {"hebzayin", L'ז'}, /* zayin U+05D6 */ {"hgz", L'ʒ'}, /* ??? Cf "alet" */ {"hireq", L'ִ'}, /* U+05B4 */ {"hlenis", MHLN}, {"hook", LOGO}, {"horizE", L'E'}, /* should be on side */ {"horizP", L'P'}, /* should be on side */ {"horizS", L'∽'}, {"horizT", L'⊣'}, {"horizb", L'{'}, /* should be underbrace */ {"ia", L'α'}, {"iacute", L'í'}, {"iasper", MIAS}, {"ib", L'β'}, {"ibar", L'ɨ'}, {"ibreve", L'ĭ'}, {"icirc", L'î'}, {"id", L'δ'}, {"ident", L'≡'}, {"ie", L'ε'}, {"ifilig", MLFI}, {"ifflig", MLFF}, {"ig", L'γ'}, {"igrave", L'ì'}, {"ih", L'η'}, {"ii", L'ι'}, {"ik", L'κ'}, {"ilenis", MILN}, {"imacr", L'ī'}, {"implies", L'⇒'}, {"index", L'☞'}, {"infin", L'∞'}, {"integ", L'∫'}, {"intsec", L'∩'}, {"invpri", L'ˏ'}, {"iota", L'ι'}, {"iq", L'ψ'}, {"istlig", MLST}, {"isub", L'ϵ'}, /* iota below accent */ {"iuml", L'ï'}, {"iz", L'ζ'}, {"jup", L'♃'}, {"kappa", L'κ'}, {"koppa", L'ϟ'}, {"lambda", L'λ'}, {"lar", L'←'}, {"lbar", L'ł'}, {"le", L'≦'}, {"lenis", LLEN}, {"leo", L'♌'}, {"lhalfbr", L'⌈'}, {"lhshoe", L'⊃'}, {"libra", L'♎'}, {"llswing", MLLS}, {"lm", L'ː'}, {"logicand", L'∧'}, {"logicor", L'∨'}, {"longs", L'ʃ'}, {"lrar", L'↔'}, {"lt", L'<'}, {"ltappr", L'≾'}, {"ltflat", L'∠'}, {"lumlbl", L'l'}, /* +umlaut below */ {"mac", LMAC}, {"male", L'♂'}, {"mc", L'c'}, /* should be raised */ {"merc", L'☿'}, /* mercury U+263F */ {"min", L'−'}, {"moonfq", L'☽'}, /* first quarter moon U+263D */ {"moonlq", L'☾'}, /* last quarter moon U+263E */ {"msylab", L'm'}, /* +sylab (ˌ) */ {"mu", L'μ'}, {"nacute", L'ń'}, {"natural", L'♮'}, {"neq", L'≠'}, {"nfacute", L'′'}, {"nfasper", L'ʽ'}, {"nfbreve", L'˘'}, {"nfced", L'¸'}, {"nfcirc", L'ˆ'}, {"nffrown", L'⌢'}, {"nfgra", L'ˋ'}, {"nfhacek", L'ˇ'}, {"nfmac", L'¯'}, {"nftilde", L'˜'}, {"nfuml", L'¨'}, {"ng", L'ŋ'}, {"not", L'¬'}, {"notelem", L'∉'}, {"ntilde", L'ñ'}, {"nu", L'ν'}, {"oab", L'〈'}, {"oacute", L'ó'}, {"oasper", MOAS}, {"ob", L'{'}, {"obar", L'ø'}, {"obigb", L'{'}, /* should be big */ {"obigpren", L'('}, {"obigsb", L'['}, /* should be big */ {"obreve", L'ŏ'}, {"ocirc", L'ô'}, {"odsb", L'〚'}, /* [[ U+301A */ {"oelig", L'œ'}, {"oeamp", L'&'}, {"ograve", L'ò'}, {"ohook", L'o'}, /* +hook */ {"olenis", MOLN}, {"omacr", L'ō'}, {"omega", L'ω'}, {"omicron", L'ο'}, {"ope", L'ɛ'}, {"opp", L'☍'}, {"oq", L'`'}, {"oqq", L'“'}, {"or", MOR}, {"osb", L'['}, {"otilde", L'õ'}, {"ouml", L'ö'}, {"ounce", L'℥'}, /* ounce U+2125 */ {"ovparen", L'⌢'}, /* should be sideways ( */ {"p", L'′'}, {"pa", L'∂'}, {"page", L'P'}, {"pall", L'ʎ'}, {"paln", L'ɲ'}, {"par", PAR}, {"para", L'¶'}, {"pbar", L'p'}, /* +bar */ {"per", L'℘'}, /* per U+2118 */ {"phi", L'φ'}, {"phi2", L'ϕ'}, {"pi", L'π'}, {"pisces", L'♓'}, {"planck", L'ħ'}, {"plantinJ", L'J'}, /* should be script */ {"pm", L'±'}, {"pmil", L'‰'}, {"pp", L'″'}, {"ppp", L'‴'}, {"prop", L'∝'}, {"psi", L'ψ'}, {"pstlg", L'£'}, {"q", L'?'}, /* should be raised */ {"qamets", L'ֳ'}, /* U+05B3 */ {"quaver", L'♪'}, {"rar", L'→'}, {"rasper", MRAS}, {"rdot", L'·'}, {"recipe", L'℞'}, /* U+211E */ {"reg", L'®'}, {"revC", L'Ɔ'}, /* open O U+0186 */ {"reva", L'ɒ'}, {"revc", L'ɔ'}, {"revope", L'ɜ'}, {"revr", L'ɹ'}, {"revsc", L'˒'}, /* upside-down semicolon */ {"revv", L'ʌ'}, {"rfa", L'o'}, /* +hook (Cf "goal") */ {"rhacek", L'ř'}, {"rhalfbr", L'⌉'}, {"rho", L'ρ'}, {"rhshoe", L'⊂'}, {"rlenis", MRLN}, {"rsylab", L'r'}, /* +sylab */ {"runash", L'F'}, /* should be runic 'ash' */ {"rvow", L'˔'}, {"sacute", L'ś'}, {"sagit", L'♐'}, {"sampi", L'ϡ'}, {"saturn", L'♄'}, {"sced", L'ş'}, {"schwa", L'ə'}, {"scorpio", L'♏'}, {"scrA", L'A'}, /* should be script */ {"scrC", L'C'}, {"scrE", L'E'}, {"scrF", L'F'}, {"scrI", L'I'}, {"scrJ", L'J'}, {"scrL", L'L'}, {"scrO", L'O'}, {"scrP", L'P'}, {"scrQ", L'Q'}, {"scrS", L'S'}, {"scrT", L'T'}, {"scrb", L'b'}, {"scrd", L'd'}, {"scrh", L'h'}, {"scrl", L'l'}, {"scruple", L'℈'}, /* U+2108 */ {"sdd", L'ː'}, {"sect", L'§'}, {"semE", L'∃'}, {"sh", L'ʃ'}, {"shacek", L'š'}, {"sharp", L'♯'}, {"sheva", L'ְ'}, /* U+05B0 */ {"shti", L'ɪ'}, {"shtsyll", L'∪'},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -