00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <stdio.h>
00025 #include <stdlib.h>
00026 #include <string.h>
00027 #include "Text.hh"
00028 #include "compatibility.hh"
00029 #include <string>
00030 #include <vector>
00031 #include <iostream>
00032 #include <sstream>
00033 #include <assert.h>
00034
00035 #include "floats.hh"
00036
00037 extern bool gInternDoubleSwitch;
00038
00039 static string substitution (const string& model, const vector<string>& args);
00040
00047 string subst (const string& model, const vector<string>& args)
00048 {
00049 return substitution(model, args);
00050 }
00051
00052 string subst (const string& model, const string& a0)
00053 {
00054 vector<string> args(10);
00055 args[0] = a0;
00056 return substitution (model, args);
00057 }
00058
00059 string subst (const string& model, const string& a0, const string& a1)
00060 {
00061 vector<string> args(10);
00062 args[0] = a0;
00063 args[1] = a1;
00064
00065 return substitution (model, args);
00066 }
00067
00068 string subst (const string& model, const string& a0, const string& a1, const string& a2)
00069 {
00070 vector<string> args(10);
00071
00072 args[0] = a0;
00073 args[1] = a1;
00074 args[2] = a2;
00075
00076 return substitution (model, args);
00077 }
00078
00079 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3)
00080 {
00081 vector<string> args(10);
00082
00083 args[0] = a0;
00084 args[1] = a1;
00085 args[2] = a2;
00086 args[3] = a3;
00087
00088 return substitution (model, args);
00089 }
00090
00091 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3, const string& a4)
00092 {
00093 vector<string> args(10);
00094
00095 args[0] = a0;
00096 args[1] = a1;
00097 args[2] = a2;
00098 args[3] = a3;
00099 args[4] = a4;
00100
00101 return substitution (model, args);
00102 }
00103
00104 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3, const string& a4, const string& a5)
00105 {
00106 vector<string> args(10);
00107
00108 args[0] = a0;
00109 args[1] = a1;
00110 args[2] = a2;
00111 args[3] = a3;
00112 args[4] = a4;
00113 args[5] = a5;
00114
00115 return substitution (model, args);
00116 }
00117
00118 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3, const string& a4, const string& a5, const string& a6)
00119 {
00120 vector<string> args(10);
00121
00122 args[0] = a0;
00123 args[1] = a1;
00124 args[2] = a2;
00125 args[3] = a3;
00126 args[4] = a4;
00127 args[5] = a5;
00128 args[6] = a6;
00129
00130 return substitution (model, args);
00131 }
00132
00133
00134 static string substitution (const string& model, const vector<string>& args)
00135 {
00136 char c;
00137 int i=0, ilast = model.length()-1;
00138 string result;
00139
00140 while (i < ilast) {
00141 c = model[i++];
00142 if (c != '$') {
00143 result += c;
00144 } else {
00145 c = model[i++];
00146 if (c >= '0' && c <= '9') {
00147 result += args[c - '0'];
00148 } else {
00149 result += c;
00150 }
00151 }
00152 }
00153 if (i == ilast) result += model[i];
00154 return result;
00155 }
00156
00157
00158 string T (char* c) { return string(c); }
00159 string T (int n) { char c[64]; snprintf(c, 63, "%d",n); return string(c); }
00160 string T (long n) { char c[64]; snprintf(c, 63, "%ld",n); return string(c); }
00161
00162
00168 static void ensureFloat(char* c)
00169 {
00170 bool isInt = true;
00171 while (*c != 0) {
00172 if ((*c == '.') | (*c == 'e')) isInt = false;
00173 c++;
00174 }
00175
00176 if (isInt) {
00177 *c++ = '.';
00178 *c++ = '0';
00179 *c = 0;
00180 }
00181 }
00182
00188 string T(double n)
00189 {
00190 char c[64];
00191 int p = 1;
00192
00193 do { snprintf(c, 32, "%.*g", p++, n); } while (atof(c) != n);
00194 ensureFloat(c);
00195 return string(c)+inumix();
00196 }
00197
00198
00202 string unquote(const string& s)
00203 {
00204 assert(s.size() >= 2);
00205 assert(s[0] == '"');
00206 assert(s[s.size()-1] == '"');
00207 return s.substr(1, s.size()-2);
00208 }
00209
00210
00214 string quote(const string& s)
00215 {
00216 string q("\"");
00217 q += s;
00218 q += "\"";
00219 return q;
00220 }
00221