00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <lang/LangParam.h>
00022 #include <common/DefinesString.h>
00023
00024 LangParam::LangParam(const LangStringConverter &convValue)
00025 {
00026 const LangString &value = convValue.getValue();
00027
00028 int valueLen = value.size();
00029 int current = 0;
00030 while (current < valueLen)
00031 {
00032 int bstart = value.find('{', current);
00033 if (bstart == std::string::npos)
00034 {
00035 parts_.push_back(LangString(value, current));
00036 break;
00037 }
00038
00039 int bend = value.find('}', bstart);
00040 if (bend == std::string::npos)
00041 {
00042 parts_.push_back(LangString(value, current));
00043 break;
00044 }
00045
00046 static LangString numbers = LANG_STRING("0123456789");
00047 int charstart = value.find_first_not_of(numbers, bstart+1);
00048 if (charstart != bend)
00049 {
00050 parts_.push_back(LangString(value, current));
00051 break;
00052 }
00053
00054 LangString position(value, bstart+1, bend - bstart - 1);
00055 LangString part(value, current, bstart-current);
00056
00057 std::string positionString = LangStringUtil::convertFromLang(position);
00058 positions_.push_back(atoi(positionString.c_str()));
00059 parts_.push_back(part);
00060
00061 current = bend + 1;
00062 if (current >= valueLen)
00063 {
00064 parts_.push_back(LangString());
00065 }
00066 }
00067
00068
00069 }
00070
00071 LangString LangParam::getParameterizedString()
00072 {
00073 if (parts_.size() != 1 || positions_.size() != 0) return LangString();
00074 return parts_.front();
00075 }
00076
00077 LangString LangParam::getParameterizedString(const LangStringConverter ¶m1)
00078 {
00079 if (parts_.size() != 2 || positions_.size() != 1) return LangString();
00080 LangString result;
00081 result.append(parts_[0]).append(param1.getValue()).append(parts_[1]);
00082 return result;
00083 }
00084
00085 LangString LangParam::getParameterizedString(const LangStringConverter ¶m1, const LangStringConverter ¶m2)
00086 {
00087 if (parts_.size() != 3 || positions_.size() != 2) return LangString();
00088 LangString result;
00089 result.append(parts_[0]);
00090 result.append(positions_[0]==0?param1.getValue():param2.getValue());
00091 result.append(parts_[1]);
00092 result.append(positions_[1]==0?param1.getValue():param2.getValue());
00093 result.append(parts_[2]);
00094 return result;
00095 }
00096
00097 LangString LangParam::getParameterizedString(const LangStringConverter ¶m1,
00098 const LangStringConverter ¶m2, const LangStringConverter ¶m3)
00099 {
00100 if (parts_.size() != 4 || positions_.size() != 3) return LangString();
00101 LangString result;
00102 result.append(parts_[0]);
00103 result.append(positions_[0]==0?param1.getValue():positions_[0]==1?param2.getValue():param3.getValue());
00104 result.append(parts_[1]);
00105 result.append(positions_[1]==0?param1.getValue():positions_[1]==1?param2.getValue():param3.getValue());
00106 result.append(parts_[2]);
00107 result.append(positions_[2]==0?param1.getValue():positions_[2]==1?param2.getValue():param3.getValue());
00108 result.append(parts_[3]);
00109 return result;
00110 }
00111
00112 LangString LangParam::getParameterizedString(const LangStringConverter ¶m1,
00113 const LangStringConverter ¶m2, const LangStringConverter ¶m3, const LangStringConverter ¶m4)
00114 {
00115 if (parts_.size() != 5 || positions_.size() != 4) return LangString();
00116 LangString result;
00117 result.append(parts_[0]);
00118 result.append(positions_[0]==0?param1.getValue():positions_[0]==1?param2.getValue():positions_[0]==2?param3.getValue():param4.getValue());
00119 result.append(parts_[1]);
00120 result.append(positions_[1]==0?param1.getValue():positions_[1]==1?param2.getValue():positions_[1]==2?param3.getValue():param4.getValue());
00121 result.append(parts_[2]);
00122 result.append(positions_[2]==0?param1.getValue():positions_[2]==1?param2.getValue():positions_[2]==2?param3.getValue():param4.getValue());
00123 result.append(parts_[3]);
00124 result.append(positions_[3]==0?param1.getValue():positions_[3]==1?param2.getValue():positions_[3]==2?param3.getValue():param4.getValue());
00125 result.append(parts_[4]);
00126 return result;
00127 }
00128
00129 LangString LangParam::getValue()
00130 {
00131 LangString result;
00132 for (unsigned int i=0; i<parts_.size(); i++)
00133 {
00134 result.append(parts_[i]);
00135 if (i + 1 < parts_.size())
00136 {
00137 result.append(LANG_STRING(S3D::formatStringBuffer("{%i}", i)));
00138 }
00139 }
00140 return result;
00141 }
00142
00143 LangString LangParam::getKey(const LangStringConverter &value,
00144 const LangStringConverter ¶m1)
00145 {
00146 LangParam parameterized(value);
00147 return parameterized.getParameterizedString(param1);
00148 }
00149
00150 LangString LangParam::getKey(const LangStringConverter &value,
00151 const LangStringConverter ¶m1,
00152 const LangStringConverter ¶m2)
00153 {
00154 LangParam parameterized(value);
00155 return parameterized.getParameterizedString(param1, param2);
00156 }
00157
00158 LangString LangParam::getKey(const LangStringConverter &value,
00159 const LangStringConverter ¶m1,
00160 const LangStringConverter ¶m2,
00161 const LangStringConverter ¶m3)
00162 {
00163 LangParam parameterized(value);
00164 return parameterized.getParameterizedString(param1, param2, param3);
00165 }
00166
00167 LangString LangParam::getKey(const LangStringConverter &value,
00168 const LangStringConverter ¶m1,
00169 const LangStringConverter ¶m2,
00170 const LangStringConverter ¶m3,
00171 const LangStringConverter ¶m4)
00172 {
00173 LangParam parameterized(value);
00174 return parameterized.getParameterizedString(param1, param2, param3, param4);
00175 }