1/* ANTLR Translator Generator 2 * Project led by Terence Parr at http://www.jGuru.com 3 * Software rights: http://www.antlr.org/license.html 4 * 5 * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/src/String.cpp#2 $ 6 */ 7 8#include "antlr/String.hpp" 9 10#include <cctype> 11 12#ifdef HAS_NOT_CSTDIO_H 13#include <stdio.h> 14#else 15#include <cstdio> 16#endif 17 18#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 19namespace antlr { 20#endif 21 22// wh: hack for Borland C++ 5.6 23#if __BORLANDC__ 24 using std::sprintf; 25#endif 26 27 28// RK: should be using snprintf actually... (or stringstream) 29ANTLR_C_USING(sprintf) 30 31ANTLR_USE_NAMESPACE(std)string operator+( const ANTLR_USE_NAMESPACE(std)string& lhs, const int rhs ) 32{ 33 char tmp[100]; 34 sprintf(tmp,"%d",rhs); 35 return lhs+tmp; 36} 37 38ANTLR_USE_NAMESPACE(std)string operator+( const ANTLR_USE_NAMESPACE(std)string& lhs, size_t rhs ) 39{ 40 char tmp[100]; 41 sprintf(tmp,"%lu",(unsigned long)rhs); 42 return lhs+tmp; 43} 44 45/** Convert character to readable string 46 */ 47ANTLR_USE_NAMESPACE(std)string charName(int ch) 48{ 49 if (ch == EOF) 50 return "EOF"; 51 else 52 { 53 ANTLR_USE_NAMESPACE(std)string s; 54 55 // when you think you've seen it all.. an isprint that crashes... 56 ch = ch & 0xFF; 57#ifdef ANTLR_CCTYPE_NEEDS_STD 58 if( ANTLR_USE_NAMESPACE(std)isprint( ch ) ) 59#else 60 if( isprint( ch ) ) 61#endif 62 { 63 s.append("'"); 64 s += ch; 65 s.append("'"); 66// s += "'"+ch+"'"; 67 } 68 else 69 { 70 s += "0x"; 71 72 unsigned int t = ch >> 4; 73 if( t < 10 ) 74 s += t | 0x30; 75 else 76 s += t + 0x37; 77 t = ch & 0xF; 78 if( t < 10 ) 79 s += t | 0x30; 80 else 81 s += t + 0x37; 82 } 83 return s; 84 } 85} 86 87#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 88} 89#endif 90 91