00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "LampBasic.h"
00026 #include "Core/InputOutput/TextConverter.h"
00027 #include "Core/System/StringMethod.h"
00028
00029 namespace Lamp{
00030
00031
00032
00033 String TextConverter::stringToText(const String& string){
00034 int bufferSize = string.getSize() * 2 + 3;
00035 char* buffer = new char[bufferSize];
00036 char* current = buffer;
00037 *current = '\"';
00038 current++;
00039 const char* source = string.getBytes();
00040 while(true){
00041 char character = *source;
00042 if(character == '\0'){ break; }
00043 if(character == '\n'){
00044 *current = '\\';
00045 current++;
00046 *current = 'n';
00047 current++;
00048 }else if(character == '\t'){
00049 *current = '\\';
00050 current++;
00051 *current = 't';
00052 current++;
00053 }else if(character == '\\'){
00054 *current = '\\';
00055 current++;
00056 *current = '\\';
00057 current++;
00058 }else if(character == '\"'){
00059 *current = '\\';
00060 current++;
00061 *current = '\"';
00062 current++;
00063 }else if(character == '\r'){
00064 *current = '\\';
00065 current++;
00066 *current = 'r';
00067 current++;
00068 }else if(character == '\v'){
00069 *current = '\\';
00070 current++;
00071 *current = 'v';
00072 current++;
00073 }else if(character == '\b'){
00074 *current = '\\';
00075 current++;
00076 *current = 'b';
00077 current++;
00078 }else if(character == '\f'){
00079 *current = '\\';
00080 current++;
00081 *current = 'f';
00082 current++;
00083 }else if(character == '\a'){
00084 *current = '\\';
00085 current++;
00086 *current = 'a';
00087 current++;
00088 }else{
00089
00090 *current = *source;
00091 current++;
00092 const char* next = StdStrinc(source);
00093 if((next - source) == 2){
00094 source++;
00095 *current = *source;
00096 current++;
00097 }
00098 }
00099 source++;
00100 }
00101 *current = '\"';
00102 current++;
00103 *current = '\0';
00104 String returnString(buffer);
00105 delete[] buffer;
00106 return returnString;
00107 }
00108
00109
00110 String TextConverter::textToString(const String& text){
00111 Assert('"' == text.charAt(0));
00112 Assert('"' == text.charAt(text.getSize() - 1));
00113 int bufferSize = text.getSize();
00114 char* buffer = new char[bufferSize];
00115 char* current = buffer;
00116 const char* source = text.getBytes();
00117
00118 source++;
00119 while(true){
00120 char character = *source;
00121 if(character == '\0'){ break; }
00122 if(character == '\\'){
00123
00124 source++;
00125 char escapeCharacter = *source;
00126 if(escapeCharacter == 'n'){
00127 *current = '\n';
00128 current++;
00129 }else if(escapeCharacter == 't'){
00130 *current = '\t';
00131 current++;
00132 }else if(escapeCharacter == '\\'){
00133 *current = '\\';
00134 current++;
00135 }else if(escapeCharacter == '\"'){
00136 *current = '\"';
00137 current++;
00138 }else if(escapeCharacter == 'r'){
00139 *current = '\r';
00140 current++;
00141 }else if(escapeCharacter == 'v'){
00142 *current = '\v';
00143 current++;
00144 }else if(escapeCharacter == 'b'){
00145 *current = '\b';
00146 current++;
00147 }else if(escapeCharacter == 'f'){
00148 *current = '\f';
00149 current++;
00150 }else if(escapeCharacter == 'a'){
00151 *current = '\a';
00152 current++;
00153 }else{
00154 AssertMessage(true,
00155 "TextConverter::textToString 未対応エスケープシーケンス");
00156 }
00157 }else{
00158
00159 *current = *source;
00160 current++;
00161 const char* next = StdStrinc(source);
00162 if((next - source) == 2){
00163 source++;
00164 *current = *source;
00165 current++;
00166 }
00167 }
00168 source++;
00169 }
00170
00171 current--;
00172 *current = '\0';
00173 String returnString(buffer);
00174 delete[] buffer;
00175 return returnString;
00176 }
00177
00178 }
00179