// This file is part of fityk program. Copyright (C) Marcin Wojdyr
// Licence: GNU General Public License version 2
// $Id: common.cpp 273 2007-03-18 12:12:10Z wojdyr $
#include "common.h"
#include <string>
#include <time.h>
#include <stdlib.h>
#include "ui.h"
#include "logic.h"
using namespace std;
volatile bool user_interrupt = false;
const char* fityk_version_line = "# Fityk script. Fityk version: " VERSION;
vector<int> range_vector (int l, int u)
{
vector<int> v(u - l);
for (int i = l; i < u; i++)
v[i - l] = i;
return v;
}
std::string time_now ()
{
time_t const t = time(0);
return ctime (&t);
}
bool is_double (string const& s) {
char const *c = s.c_str();
char *endptr;
strtod(c, &endptr);
if (c == endptr)
return false;
while (isspace(*endptr))
endptr++;
return (*endptr == 0);
}
bool is_int (string const& s) {
char const *c = s.c_str();
char *endptr;
strtol(c, &endptr, 10);
if (c == endptr)
return false;
while (isspace(*endptr))
endptr++;
return (*endptr == 0);
}
void replace_all(string &s, string const &old, string const &new_)
{
string::size_type pos = 0;
while ((pos = s.find(old, pos)) != string::npos) {
s.replace(pos, old.size(), new_);
pos += new_.size();
}
}
/// replaces all words `old_word' in text `str' with `new_word'
/// word `foo' is in: "4*foo+1" but not in: "foobar", "_foo", "$foo"
void replace_words(string &t, string const &old_word, string const &new_word)
{
string::size_type pos = 0;
while ((pos=t.find(old_word, pos)) != string::npos) {
int k = old_word.size();
if ((pos == 0
|| !(isalnum(t[pos-1]) || t[pos-1]=='_' || t[pos-1]=='$'))
&& (pos+k==t.size() || !(isalnum(t[pos+k]) || t[pos+k]=='_'))) {
t.replace(pos, k, new_word);
pos += new_word.size();
}
else
pos++;
}
}
/// find matching bracket for (, [ or {, return position in string
string::size_type
find_matching_bracket(string const& formula, string::size_type left_pos)
{
if (left_pos == string::npos)
return string::npos;
assert(left_pos < formula.size());
char opening = formula[left_pos],
closing = 0;
if (opening == '(')
closing = ')';
else if (opening == '[')
closing = ']';
else if (opening == '{')
closing = '}';
else
assert(0);
size_t pos = left_pos;
int open_bracket_counter = 1;
while (open_bracket_counter > 0) {
++pos;
if (formula[pos] == closing)
--open_bracket_counter;
else if (formula[pos] == opening)
++open_bracket_counter;
assert(formula[pos]);
}
assert(formula[pos] == closing);
return pos;
}
syntax highlighted by Code2HTML, v. 0.9.1