Mercurial > hg > jgplsrc
view ws.c @ 0:e0bbaa717f41 draft default tip
lol J
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Mon, 25 Nov 2013 11:56:30 -0500 |
parents | |
children |
line wrap: on
line source
/* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */ /* License in license.txt. */ /* */ /* Words: Spelling */ #include "j.h" #include "w.h" static C spell[3][70]={ '=', '<', '>', '_', '+', '*', '-', '%', '^', '$', '~', '|', '.', ':', ',', ';', '#', '@', '/', CBSLASH, '[', ']', '{', '}', '`', CQQ, '&', '!', '?', 'a', 'A', 'b', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'H', 'i', 'I', 'j', 'L', 'm', 'M', 'n', 'o', 'p', 'q', 'r', 's', 'S', 't', 'T', 'u', 'v', 'x', 'y', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 0, CASGN, CFLOOR, CCEIL, 1, CPLUSDOT,CSTARDOT,CNOT, CDOMINO, CLOG, CSPARSE, CNUB, CREV, CEVEN, COBVERSE,CCOMDOT, CCUT, CBASE, CATDOT, CSLDOT, CBSDOT, CLEV, CDEX, CTAKE, CDROP, CGRDOT, CEXEC, CUNDER, CFIT, CQRYDOT, CALP, CATOMIC, CBDOT, CCDOT, CCYCLE, CDDOT, CDCAP, CEPS, CEBAR, CFIX, CHGEOM, CIOTA, CICAP, CJDOT, CLDOT, CMDOT, CMCAP, CNDOT, CCIRCLE, CPOLY, 1, CRDOT, 1, 1, CTDOT, CTCAP, CUDOT, CVDOT, CXDOT, CYDOT, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, CGASGN, CLE, CGE, CFCONS, CPLUSCO, CSTARCO, CMATCH, CROOT, CPOWOP, CSELF, CNE, CCANT, CODD, CADVERSE,CLAMIN, CWORDS, CABASE, CATCO, CGRADE, CDGRADE, CCAP, CIDA, CTAIL, CCTAIL, CGRCO, CTHORN, CAMPCO, CIBEAM, CQRYCO, CACE, 1, 1, 1, 1, 1, CDCAPCO, 1, 1, 1, 1, CICO, 1, 1, CLCAPCO, 1, 1, 1, 1, CPCO, CQCO, 1, CSCO, CSCAPCO, CTCO, 1, CUCO, 1, CXCO, 1, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, CFCONS, 0, }; static C sp3[4][5]={ CFETCH, CEMEND, CPDERIV, CUNDCO, 0, '{', '}', 'p', '&', 0, CESC2, CESC2, CESC1, CESC1, 0, CESC2, CESC2, CESC1, CESC2, 0, }; /* trigraphs */ C spellin(I n,C*s){C c,d,p=*s,*t;I j; switch(n){ case 1: R p; case 2: c=s[1]; j=c==CESC1?1:c==CESC2?2:0; R j&&(t=(C*)strchr(spell[0],p)) ? spell[j][t-spell[0]] : 0; case 3: c=s[1]; d=s[2]; if(p==CSIGN&&d==CESC2&&'1'<=c&&c<='9')R CFCONS; if(t=(C*)strchr(sp3[1],p)){j=t-sp3[1]; R c==sp3[2][j]&&d==sp3[3][j]?sp3[0][j]:0;} default: /* note: fall through */ R 0; }} void spellit(C c,C*s){C*q;I k; s[1]=s[2]=0; if(0<=c&&(UC)c<=127) s[0]=c; else if(q=(C*)strchr(spell[1],c)){k=q-spell[1]; s[0]=spell[0][k]; s[1]=CESC1;} else if(q=(C*)strchr(spell[2],c)){k=q-spell[2]; s[0]=spell[0][k]; s[1]=CESC2;} else if(q=(C*)strchr(sp3[0], c)){k=q-sp3[0]; s[0]=sp3[1][k]; s[1]=sp3[2][k]; s[2]=sp3[3][k];} else if(CAMIP==c)s[0]='}'; else if(CAPIP==c)s[0]=','; } /* spell out ID c in s */ A jtspella(J jt,A w){C c,s[3];V*v; RZ(w); v=VAV(w); c=v->id; if(c==CFCONS)R over(thorn1(v->h),chr[':']); spellit(c,s); R str(s[2]?3L:s[1]?2L:1L,s); } A jtspellout(J jt,C c){C s[3]; spellit(c,s); R str(s[2]?3L:s[1]?2L:1L,s);}