FAUST compiler  0.9.9.6b8
Text.cpp
Go to the documentation of this file.
1 /************************************************************************
2  ************************************************************************
3  FAUST compiler
4  Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale
5  ---------------------------------------------------------------------
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  ************************************************************************
20  ************************************************************************/
21 
22 
23 
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <string.h>
27 #include "Text.hh"
28 #include "compatibility.hh"
29 #include <string>
30 #include <vector>
31 #include <iostream>
32 #include <sstream>
33 #include <assert.h>
34 
35 #include "floats.hh"
36 
37 extern bool gInternDoubleSwitch;
38 
39 static string substitution (const string& model, const vector<string>& args);
40 
47 string subst (const string& model, const vector<string>& args)
48 {
49  return substitution(model, args);
50 }
51 
52 string subst (const string& model, const string& a0)
53 {
54  vector<string> args(10);
55  args[0] = a0;
56  return substitution (model, args);
57 }
58 
59 string subst (const string& model, const string& a0, const string& a1)
60 {
61  vector<string> args(10);
62  args[0] = a0;
63  args[1] = a1;
64 
65  return substitution (model, args);
66 }
67 
68 string subst (const string& model, const string& a0, const string& a1, const string& a2)
69 {
70  vector<string> args(10);
71 
72  args[0] = a0;
73  args[1] = a1;
74  args[2] = a2;
75 
76  return substitution (model, args);
77 }
78 
79 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3)
80 {
81  vector<string> args(10);
82 
83  args[0] = a0;
84  args[1] = a1;
85  args[2] = a2;
86  args[3] = a3;
87 
88  return substitution (model, args);
89 }
90 
91 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3, const string& a4)
92 {
93  vector<string> args(10);
94 
95  args[0] = a0;
96  args[1] = a1;
97  args[2] = a2;
98  args[3] = a3;
99  args[4] = a4;
100 
101  return substitution (model, args);
102 }
103 
104 string subst (const string& model, const string& a0, const string& a1, const string& a2, const string& a3, const string& a4, const string& a5)
105 {
106  vector<string> args(10);
107 
108  args[0] = a0;
109  args[1] = a1;
110  args[2] = a2;
111  args[3] = a3;
112  args[4] = a4;
113  args[5] = a5;
114 
115  return substitution (model, args);
116 }
117 
118 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)
119 {
120  vector<string> args(10);
121 
122  args[0] = a0;
123  args[1] = a1;
124  args[2] = a2;
125  args[3] = a3;
126  args[4] = a4;
127  args[5] = a5;
128  args[6] = a6;
129 
130  return substitution (model, args);
131 }
132 
133 
134 static string substitution (const string& model, const vector<string>& args)
135 {
136  char c;
137  int i=0, ilast = (int)model.length()-1;
138  string result;
139 
140  while (i < ilast) {
141  c = model[i++];
142  if (c != '$') {
143  result += c;
144  } else {
145  c = model[i++];
146  if (c >= '0' && c <= '9') {
147  result += args[c - '0'];
148  } else {
149  result += c;
150  }
151  }
152  }
153  if (i == ilast) result += model[i];
154  return result;
155 }
156 
157 
158 string T (char* c) { return string(c); }
159 string T (int n) { char c[64]; snprintf(c, 63, "%d",n); return string(c); }
160 string T (long n) { char c[64]; snprintf(c, 63, "%ld",n); return string(c); }
161 
162 
168 static void ensureFloat(char* c)
169 {
170  bool isInt = true;
171  while (*c != 0) {
172  if ((*c == '.') | (*c == 'e')) isInt = false;
173  c++;
174  }
175 
176  if (isInt) {
177  *c++ = '.';
178  *c++ = '0';
179  *c = 0;
180  }
181 }
182 
188 string T(double n)
189 {
190  char c[64];
191  int p = 1;
192 
193  do { snprintf(c, 32, "%.*g", p++, n); } while (atof(c) != n);
194  ensureFloat(c);
195  return string(c)+inumix();
196 }
197 
198 
202 string unquote(const string& s)
203 {
204  assert(s.size() >= 2);
205  assert(s[0] == '"');
206  assert(s[s.size()-1] == '"');
207  return s.substr(1, s.size()-2);
208 }
209 
210 
214 string quote(const string& s)
215 {
216  string q("\"");
217  q += s;
218  q += "\"";
219  return q;
220 }
221 
222 string rmWhiteSpaces(const string& s)
223 {
224  size_t i = s.find_first_not_of(" \t");
225  size_t j = s.find_last_not_of(" \t");
226 
227  if ( (i != string::npos) & (j != string::npos) ) {
228  return s.substr(i, 1+j-i);
229  } else {
230  return "";
231  }
232 }
bool gInternDoubleSwitch
string quote(const string &s)
add quotes to a string
Definition: Text.cpp:214
string unquote(const string &s)
remove quotes from a string
Definition: Text.cpp:202
string subst(const string &model, const vector< string > &args)
Text substitution.
Definition: Text.cpp:47
string T(char *c)
Definition: Text.cpp:158
string rmWhiteSpaces(const string &s)
Definition: Text.cpp:222
static void ensureFloat(char *c)
If needed add a trailing '.0' to the the textual representation of a floating point number to avoid c...
Definition: Text.cpp:168
bool isInt(const Node &n)
Definition: node.hh:126
const char * inumix()
suffix for numeric constants
Definition: floats.cpp:44
static string substitution(const string &model, const vector< string > &args)
Definition: Text.cpp:134