|
|
| version 1.13, 2003/09/25 09:15:03 | version 1.20, 2015/10/13 21:27:57 |
|---|---|
| Line 1 | Line 1 |
| /** @file | /** @file |
| Parser: sql driver manager implementation. | Parser: sql driver manager implementation. |
| Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) |
| Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) | Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) |
| */ | */ |
| static const char* IDENT_CHARSETS_C="$Date$"; | |
| #include "pa_charsets.h" | #include "pa_charsets.h" |
| volatile const char * IDENT_PA_CHARSETS_C="$Id$" IDENT_PA_CHARSETS_H; | |
| // defines for globals | // defines for globals |
| #define CHARSET_UTF8_NAME "UTF-8" | #define CHARSET_UTF8_NAME "UTF-8" |
| Line 26 Charsets::Charsets() { | Line 26 Charsets::Charsets() { |
| } | } |
| Charset& Charsets::get(const String::Body ANAME) { | Charset& Charsets::get(const String::Body ANAME) { |
| if(Charset* result=Hash<key_type, value_type>::get(ANAME)) | if(Charset* result=HashString<value_type>::get(ANAME)) |
| return *result; | return *result; |
| else | else |
| throw Exception("parser.runtime", | throw Exception(PARSER_RUNTIME, |
| new String(ANAME, String::L_TAINTED), | new String(ANAME, String::L_TAINTED), |
| "unknown charset"); | "unknown charset"); |
| } | } |
| Charset* Charsets::checkBOM(char *&body,size_t &body_size, Charset* enforced_charset){ | |
| if((!enforced_charset || enforced_charset->isUTF8()) && (body_size>=3 && strncmp(body, "\xEF\xBB\xBF", 3)==0)){ | |
| // skip UTF-8 signature (BOM code) | |
| body+=3; | |
| body_size-=3; | |
| return &UTF8_charset; | |
| } | |
| return enforced_charset; | |
| } | |
| void Charsets::load_charset(Request_charsets& charsets, const String::Body ANAME, const String& afile_spec) { | void Charsets::load_charset(Request_charsets& charsets, const String::Body ANAME, const String& afile_spec) { |
| //we know that charset? | //we know that charset? |
| if(Hash<key_type, value_type>::get(ANAME)) | if(HashString<value_type>::get(ANAME)) |
| return; // don't load it then | return; // don't load it then |
| put(ANAME, new Charset(&charsets, ANAME, &afile_spec)); | put(ANAME, new Charset(&charsets, ANAME, &afile_spec)); |