summaryrefslogtreecommitdiff
path: root/graphics/asymptote/runstring.cc
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/runstring.cc')
-rw-r--r--graphics/asymptote/runstring.cc158
1 files changed, 87 insertions, 71 deletions
diff --git a/graphics/asymptote/runstring.cc b/graphics/asymptote/runstring.cc
index a9c557af78..537f70d5af 100644
--- a/graphics/asymptote/runstring.cc
+++ b/graphics/asymptote/runstring.cc
@@ -1,6 +1,6 @@
/***** Autogenerated from runstring.in; changes will be overwritten *****/
-#line 1 "runtimebase.in"
+#line 1 "./runtimebase.in"
/*****
* runtimebase.in
* Andy Hammerlindl 2009/07/28
@@ -10,7 +10,7 @@
*****/
-#line 1 "runstring.in"
+#line 1 "./runstring.in"
/*****
* runstring.in
*
@@ -18,7 +18,7 @@
*
*****/
-#line 1 "runtimebase.in"
+#line 23 "./runtimebase.in"
#include "stack.h"
#include "types.h"
#include "builtin.h"
@@ -64,6 +64,9 @@ function *realRealFunction();
#line 10 "runstring.in"
#include <cfloat>
#include <cstring>
+#include <iomanip>
+#include <ctime>
+#include <chrono>
#include <algorithm>
#include "array.h"
@@ -171,124 +174,124 @@ void checkformat(const char *ptr, bool intformat)
#endif
namespace run {
// String operations
-#line 113 "runstring.in"
+#line 116 "./runstring.in"
void emptyString(stack *Stack)
{
-#line 114 "runstring.in"
+#line 117 "./runstring.in"
{Stack->push<string>(emptystring); return;}
}
-#line 119 "runstring.in"
+#line 122 "./runstring.in"
// Int length(string *s);
void gen_runstring1(stack *Stack)
{
string * s=vm::pop<string *>(Stack);
-#line 120 "runstring.in"
+#line 123 "./runstring.in"
{Stack->push<Int>((Int) s->length()); return;}
}
-#line 124 "runstring.in"
+#line 127 "./runstring.in"
// Int find(string *s, string t, Int pos=0);
void gen_runstring2(stack *Stack)
{
Int pos=vm::pop<Int>(Stack,0);
string t=vm::pop<string>(Stack);
string * s=vm::pop<string *>(Stack);
-#line 125 "runstring.in"
+#line 128 "./runstring.in"
size_t n=s->find(t,pos);
{Stack->push<Int>(n == string::npos ? (Int) -1 : (Int) n); return;}
}
-#line 130 "runstring.in"
+#line 133 "./runstring.in"
// Int rfind(string *s, string t, Int pos=-1);
void gen_runstring3(stack *Stack)
{
Int pos=vm::pop<Int>(Stack,-1);
string t=vm::pop<string>(Stack);
string * s=vm::pop<string *>(Stack);
-#line 131 "runstring.in"
+#line 134 "./runstring.in"
size_t n=s->rfind(t,pos);
{Stack->push<Int>(n == string::npos ? (Int) -1 : (Int) n); return;}
}
-#line 136 "runstring.in"
+#line 139 "./runstring.in"
// string reverse(string s);
void gen_runstring4(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 137 "runstring.in"
+#line 140 "./runstring.in"
reverse(s.begin(),s.end());
{Stack->push<string>(s); return;}
}
-#line 142 "runstring.in"
+#line 145 "./runstring.in"
// string insert(string s, Int pos, string t);
void gen_runstring5(stack *Stack)
{
string t=vm::pop<string>(Stack);
Int pos=vm::pop<Int>(Stack);
string s=vm::pop<string>(Stack);
-#line 143 "runstring.in"
+#line 146 "./runstring.in"
if ((size_t) pos < s.length())
{Stack->push<string>(s.insert(pos,t)); return;}
{Stack->push<string>(s); return;}
}
-#line 149 "runstring.in"
+#line 152 "./runstring.in"
// string substr(string* s, Int pos, Int n=-1);
void gen_runstring6(stack *Stack)
{
Int n=vm::pop<Int>(Stack,-1);
Int pos=vm::pop<Int>(Stack);
string* s=vm::pop<string*>(Stack);
-#line 150 "runstring.in"
+#line 153 "./runstring.in"
if ((size_t) pos < s->length())
{Stack->push<string>(s->substr(pos,n)); return;}
{Stack->push<string>(emptystring); return;}
}
-#line 156 "runstring.in"
+#line 159 "./runstring.in"
// string erase(string s, Int pos, Int n);
void gen_runstring7(stack *Stack)
{
Int n=vm::pop<Int>(Stack);
Int pos=vm::pop<Int>(Stack);
string s=vm::pop<string>(Stack);
-#line 157 "runstring.in"
+#line 160 "./runstring.in"
if ((size_t) pos < s.length())
{Stack->push<string>(s.erase(pos,n)); return;}
{Stack->push<string>(s); return;}
}
-#line 163 "runstring.in"
+#line 166 "./runstring.in"
// string downcase(string s);
void gen_runstring8(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 164 "runstring.in"
+#line 167 "./runstring.in"
std::transform(s.begin(),s.end(),s.begin(),tolower);
{Stack->push<string>(s); return;}
}
-#line 169 "runstring.in"
+#line 172 "./runstring.in"
// string upcase(string s);
void gen_runstring9(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 170 "runstring.in"
+#line 173 "./runstring.in"
std::transform(s.begin(),s.end(),s.begin(),toupper);
{Stack->push<string>(s); return;}
}
// returns a string constructed by translating all occurrences of the string
// from in an array of string pairs {from,to} to the string to in string s.
-#line 177 "runstring.in"
+#line 180 "./runstring.in"
// string replace(string *S, stringarray2 *translate);
void gen_runstring10(stack *Stack)
{
stringarray2 * translate=vm::pop<stringarray2 *>(Stack);
string * S=vm::pop<string *>(Stack);
-#line 178 "runstring.in"
+#line 181 "./runstring.in"
size_t size=checkArray(translate);
for(size_t i=0; i < size; i++) {
array *a=read<array*>(translate,i);
@@ -318,14 +321,14 @@ void gen_runstring10(stack *Stack)
{Stack->push<string>(buf.str()); return;}
}
-#line 208 "runstring.in"
+#line 211 "./runstring.in"
// string format(string *format, Int x, string locale=emptystring);
void gen_runstring11(stack *Stack)
{
string locale=vm::pop<string>(Stack,emptystring);
Int x=vm::pop<Int>(Stack);
string * format=vm::pop<string *>(Stack);
-#line 209 "runstring.in"
+#line 212 "./runstring.in"
ostringstream out;
const char *p0=format->c_str();
checkformat(p0,true);
@@ -379,7 +382,7 @@ void gen_runstring11(stack *Stack)
{Stack->push<string>(out.str()); return;}
}
-#line 263 "runstring.in"
+#line 266 "./runstring.in"
// string format(string *format, bool forcemath=false, string separator, real x, string locale=emptystring);
void gen_runstring12(stack *Stack)
{
@@ -388,7 +391,7 @@ void gen_runstring12(stack *Stack)
string separator=vm::pop<string>(Stack);
bool forcemath=vm::pop<bool>(Stack,false);
string * format=vm::pop<string *>(Stack);
-#line 265 "runstring.in"
+#line 268 "./runstring.in"
if(*format == "%") {Stack->push<string>(""); return;} // Temporary workaround for github Issue #29.
bool tex=getSetting<string>("tex") != "none";
@@ -515,12 +518,12 @@ void gen_runstring12(stack *Stack)
{Stack->push<string>(out.str()); return;}
}
-#line 392 "runstring.in"
+#line 395 "./runstring.in"
// Int hex(string s);
void gen_runstring13(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 393 "runstring.in"
+#line 396 "./runstring.in"
istringstream is(s);
is.setf(std::ios::hex,std::ios::basefield);
Int value;
@@ -530,45 +533,45 @@ void gen_runstring13(stack *Stack)
error(buf);
}
-#line 403 "runstring.in"
+#line 406 "./runstring.in"
// Int ascii(string s);
void gen_runstring14(stack *Stack)
{
string s=vm::pop<string>(Stack);
-#line 404 "runstring.in"
+#line 407 "./runstring.in"
{Stack->push<Int>(s.empty() ? -1 : (unsigned char) s[0]); return;}
}
-#line 408 "runstring.in"
+#line 411 "./runstring.in"
// string string(Int x);
void gen_runstring15(stack *Stack)
{
Int x=vm::pop<Int>(Stack);
-#line 409 "runstring.in"
+#line 412 "./runstring.in"
ostringstream buf;
buf << x;
{Stack->push<string>(buf.str()); return;}
}
-#line 415 "runstring.in"
+#line 418 "./runstring.in"
// string string(real x, Int digits=DBL_DIG);
void gen_runstring16(stack *Stack)
{
Int digits=vm::pop<Int>(Stack,DBL_DIG);
real x=vm::pop<real>(Stack);
-#line 416 "runstring.in"
+#line 419 "./runstring.in"
ostringstream buf;
buf.precision(digits);
buf << x;
{Stack->push<string>(buf.str()); return;}
}
-#line 423 "runstring.in"
+#line 426 "./runstring.in"
// string time(string format=defaulttimeformat);
void gen_runstring17(stack *Stack)
{
string format=vm::pop<string>(Stack,defaulttimeformat);
-#line 424 "runstring.in"
+#line 427 "./runstring.in"
#ifdef HAVE_STRFTIME
const time_t bintime=time(NULL);
if(!strftime(Time,nTime,format.c_str(),localtime(&bintime))) {Stack->push<string>(""); return;}
@@ -578,13 +581,13 @@ void gen_runstring17(stack *Stack)
#endif
}
-#line 434 "runstring.in"
+#line 437 "./runstring.in"
// string time(Int seconds, string format=defaulttimeformat);
void gen_runstring18(stack *Stack)
{
string format=vm::pop<string>(Stack,defaulttimeformat);
Int seconds=vm::pop<Int>(Stack);
-#line 435 "runstring.in"
+#line 438 "./runstring.in"
#ifdef HAVE_STRFTIME
const time_t bintime=seconds;
if(!strftime(Time,nTime,format.c_str(),localtime(&bintime))) {Stack->push<string>(""); return;}
@@ -596,21 +599,34 @@ void gen_runstring18(stack *Stack)
#endif
}
-#line 447 "runstring.in"
+#line 450 "./runstring.in"
// Int seconds(string t=emptystring, string format=emptystring);
void gen_runstring19(stack *Stack)
{
string format=vm::pop<string>(Stack,emptystring);
string t=vm::pop<string>(Stack,emptystring);
-#line 448 "runstring.in"
-#if defined(HAVE_STRPTIME)
- const time_t bintime=time(NULL);
- tm tm=*localtime(&bintime);
- if(t != "" && !strptime(t.c_str(),format.c_str(),&tm)) {Stack->push<Int>(-1); return;}
- {Stack->push<Int>((Int) mktime(&tm)); return;}
-#else
- {Stack->push<Int>(-1); return;}
-#endif
+#line 451 "./runstring.in"
+ if (t == "")
+ {
+ auto clock = std::chrono::system_clock::now();
+ {Stack->push<Int>(static_cast<Int>(
+ std::chrono::duration_cast<std::chrono::seconds>(
+ clock.time_since_epoch()
+ ).count()
+ )); return;}
+ }
+
+ std::tm tmObj = {};
+ istringstream instream(t);
+ instream.imbue(std::locale(""));
+ instream >> std::get_time(&tmObj,format.c_str());
+
+ if(instream.fail())
+ {
+ {Stack->push<Int>(-1); return;}
+ }
+
+ {Stack->push<Int>(static_cast<Int>(std::mktime(&tmObj))); return;}
}
} // namespace run
@@ -619,45 +635,45 @@ namespace trans {
void gen_runstring_venv(venv &ve)
{
-#line 112 "runstring.in"
+#line 115 "./runstring.in"
REGISTER_BLTIN(run::emptyString,"emptyString");
-#line 119 "runstring.in"
+#line 122 "./runstring.in"
addFunc(ve, run::gen_runstring1, primInt(), SYM(length), formal(primString(), SYM(s), false, false));
-#line 124 "runstring.in"
+#line 127 "./runstring.in"
addFunc(ve, run::gen_runstring2, primInt(), SYM(find), formal(primString(), SYM(s), false, false), formal(primString(), SYM(t), false, false), formal(primInt(), SYM(pos), true, false));
-#line 130 "runstring.in"
+#line 133 "./runstring.in"
addFunc(ve, run::gen_runstring3, primInt(), SYM(rfind), formal(primString(), SYM(s), false, false), formal(primString(), SYM(t), false, false), formal(primInt(), SYM(pos), true, false));
-#line 136 "runstring.in"
+#line 139 "./runstring.in"
addFunc(ve, run::gen_runstring4, primString(), SYM(reverse), formal(primString(), SYM(s), false, false));
-#line 142 "runstring.in"
+#line 145 "./runstring.in"
addFunc(ve, run::gen_runstring5, primString(), SYM(insert), formal(primString(), SYM(s), false, false), formal(primInt(), SYM(pos), false, false), formal(primString(), SYM(t), false, false));
-#line 149 "runstring.in"
+#line 152 "./runstring.in"
addFunc(ve, run::gen_runstring6, primString(), SYM(substr), formal(primString(), SYM(s), false, false), formal(primInt(), SYM(pos), false, false), formal(primInt(), SYM(n), true, false));
-#line 156 "runstring.in"
+#line 159 "./runstring.in"
addFunc(ve, run::gen_runstring7, primString(), SYM(erase), formal(primString(), SYM(s), false, false), formal(primInt(), SYM(pos), false, false), formal(primInt(), SYM(n), false, false));
-#line 163 "runstring.in"
+#line 166 "./runstring.in"
addFunc(ve, run::gen_runstring8, primString(), SYM(downcase), formal(primString(), SYM(s), false, false));
-#line 169 "runstring.in"
+#line 172 "./runstring.in"
addFunc(ve, run::gen_runstring9, primString(), SYM(upcase), formal(primString(), SYM(s), false, false));
-#line 175 "runstring.in"
+#line 178 "./runstring.in"
addFunc(ve, run::gen_runstring10, primString(), SYM(replace), formal(primString(), SYM(s), false, false), formal(stringArray2(), SYM(translate), false, false));
-#line 208 "runstring.in"
+#line 211 "./runstring.in"
addFunc(ve, run::gen_runstring11, primString(), SYM(format), formal(primString(), SYM(format), false, false), formal(primInt(), SYM(x), false, false), formal(primString(), SYM(locale), true, false));
-#line 263 "runstring.in"
+#line 266 "./runstring.in"
addFunc(ve, run::gen_runstring12, primString(), SYM(format), formal(primString(), SYM(format), false, false), formal(primBoolean(), SYM(forcemath), true, false), formal(primString(), SYM(separator), false, false), formal(primReal(), SYM(x), false, false), formal(primString(), SYM(locale), true, false));
-#line 392 "runstring.in"
+#line 395 "./runstring.in"
addFunc(ve, run::gen_runstring13, primInt(), SYM(hex), formal(primString(), SYM(s), false, false));
-#line 403 "runstring.in"
+#line 406 "./runstring.in"
addFunc(ve, run::gen_runstring14, primInt(), SYM(ascii), formal(primString(), SYM(s), false, false));
-#line 408 "runstring.in"
+#line 411 "./runstring.in"
addFunc(ve, run::gen_runstring15, primString(), SYM(string), formal(primInt(), SYM(x), false, false));
-#line 415 "runstring.in"
+#line 418 "./runstring.in"
addFunc(ve, run::gen_runstring16, primString(), SYM(string), formal(primReal(), SYM(x), false, false), formal(primInt(), SYM(digits), true, false));
-#line 423 "runstring.in"
+#line 426 "./runstring.in"
addFunc(ve, run::gen_runstring17, primString(), SYM(time), formal(primString(), SYM(format), true, false));
-#line 434 "runstring.in"
+#line 437 "./runstring.in"
addFunc(ve, run::gen_runstring18, primString(), SYM(time), formal(primInt(), SYM(seconds), false, false), formal(primString(), SYM(format), true, false));
-#line 447 "runstring.in"
+#line 450 "./runstring.in"
addFunc(ve, run::gen_runstring19, primInt(), SYM(seconds), formal(primString(), SYM(t), true, false), formal(primString(), SYM(format), true, false));
}