/* -*- c -*- * File: pstring.h * Author: Igor Vlasenko * Created: Fri Jul 1 20:11:51 2005 * * $Id$ */ #include #include #include #include "pbuffer.h" #include "pstring.h" static PSTRING lowercase_pstring (pbuffer* pBuffer ,PSTRING pstring) { size_t size=pstring.endnext-pstring.begin; char* buf=pbuffer_resize(pBuffer, size+1); char* inbuf=buf; const char* i=pstring.begin; PSTRING retval; while (i=buflen) { buf=pbuffer_resize(StrBuffer, 2*offset); buflen=pbuffer_size(StrBuffer); } switch (curchar) { /* straight from the CGI.pm bible. (HTML::Template) */ case '&' : bufdelta=5; strncpy(buf+offset, "&", bufdelta);break; case '"' : bufdelta=6; strncpy(buf+offset, """,bufdelta);break; case '>' : bufdelta=4; strncpy(buf+offset, ">", bufdelta);break; case '<' : bufdelta=4; strncpy(buf+offset, "<", bufdelta);break; case '\'': bufdelta=5; strncpy(buf+offset, "'", bufdelta);break; default: *(buf+offset)=curchar; } offset+=bufdelta; } break; case HTML_TEMPLATE_OPT_ESCAPE_JS: while (curpos=buflen) { buf=pbuffer_resize(StrBuffer, 2*offset); buflen=pbuffer_size(StrBuffer); } switch (curchar) { case '\\' : bufdelta=2; strncpy(buf+offset, "\\\\", bufdelta);break; case '"' : bufdelta=2; strncpy(buf+offset, "\\\"",bufdelta);break; case '\'' : bufdelta=2; strncpy(buf+offset, "\\'",bufdelta);break; case '\n' : bufdelta=2; strncpy(buf+offset, "\\n",bufdelta);break; case '\r' : bufdelta=2; strncpy(buf+offset, "\\r",bufdelta);break; default: *(buf+offset)=curchar; } offset+=bufdelta; } break; case HTML_TEMPLATE_OPT_ESCAPE_URL: while (curpos=buflen) { buf=pbuffer_resize(StrBuffer, 2*offset); buflen=pbuffer_size(StrBuffer); } /* * # do the translation (RFC 2396 ^uric) * s!([^a-zA-Z0-9_.\-])!sprintf('%%%02X', $_) */ if ((curchar>='a' && curchar<='z') || (curchar>='A' && curchar<='Z') || (curchar>='0' && curchar<='9') || curchar=='_' || curchar=='.' || curchar=='\\' || curchar=='-' ) *(buf+offset)=curchar; else { bufdelta=3; sprintf(buf+offset,"%%%.2X",(int) curchar); } offset+=bufdelta; } break; default : return pstring; } retval.begin=buf; retval.endnext=buf+offset; return retval; }