--- parser3/src/include/pa_string.h 2009/10/15 01:07:20 1.196 +++ parser3/src/include/pa_string.h 2012/03/16 09:24:10 1.201 @@ -1,14 +1,14 @@ /** @file Parser: string class decl. - Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_STRING_H #define PA_STRING_H -static const char * const IDENT_STRING_H="$Date: 2009/10/15 01:07:20 $"; +#define IDENT_PA_STRING_H "$Id: pa_string.h,v 1.201 2012/03/16 09:24:10 moko Exp $" // includes #include "pa_types.h" @@ -103,11 +103,11 @@ public: L_URI='U', ///< text in uri L_SQL='Q', ///< ^table:sql body L_JS='J', ///< JavaScript code - L_XML='X', ///< ^dom:set xml + L_XML='X', ///< ^xdoc:create xml L_HTML='H', ///< HTML code - L_REGEX='R', ///< RegEx expression + L_REGEX='R', ///< RegExp + L_JSON='S', ///< JSON code L_HTTP_COOKIE='C', ///< cookies encoded as %uXXXX for compartibility with js functions encode/decode - L_FILE_POST='f', ///< temporary escaping zero-char L_PARSER_CODE='p', ///< ^process body // READ WARNING ABOVE BEFORE ADDING ANYTHING L_OPTIMIZE_BIT = 0x80 ///< flag, requiring cstr whitespace optimization @@ -363,7 +363,15 @@ public: CORD get_cord() const { return body; } uint get_hash_code() const; - const char* cstr() const { return CORD_to_const_char_star(body, length()); } + const char* cstr() const { +#ifdef STRING_LENGTH_CACHING + string_length = length(); + if(string_length) + return const_cast(this)->body=CORD_to_const_char_star(body, string_length); +#endif + return CORD_to_const_char_star(body, length()); + } + char* cstrm() const { return CORD_to_char_star(body, length()); } #ifdef STRING_LENGTH_CACHING @@ -572,6 +580,14 @@ public: String& append(const String& src, Language lang, bool forced=false) { return src.append_to(*this, lang, forced); } + String& append_quoted(const String* src, Language lang=L_JSON){ + *this << "\""; + if(src) + this->append(*src, lang, true/*forced lang*/); + *this << "\""; + return *this; + } + String& operator << (const String& src) { return append(src, L_PASS_APPENDED); } String& operator << (const char* src) { return append_help_length(src, 0, L_AS_IS); } String& operator << (const Body& src){