static string kpsewhich (string name) { bench_start ("kpsewhich"); string which= var_eval_system ("kpsewhich " * name); bench_cumul ("kpsewhich"); return which; }
url get_from_web (url name) { if (!is_rooted_web (name)) return url_none (); url res= get_cache (name); if (!is_none (res)) return res; #ifdef OS_WIN32 string urlString = as_string (name); url tmp = url_temp(); if (starts (urlString, "www.")) urlString = "http://" * urlString; else if (starts (urlString, "ftp.")) urlString = "ftp://" * urlString; else if (starts (urlString, "ftp://")) urlPath = NULL; else if (starts (urlString, "http://")) urlPath = NULL; else urlString = "http://" * urlString; urlString= web_encode (urlString); c_string urlPath (urlString); c_string tempFilePath (as_string (tmp)); if(!URL_Get(urlPath, tempFilePath)) return url_none(); else return set_cache (name, tmp); #else string test= var_eval_system ("which wget"); if (!ends (test, "wget")) return url_none (); url tmp= url_temp (); string tmp_s= escape_sh (concretize (tmp)); string cmd= "wget --header='User-Agent: TeXmacs-" TEXMACS_VERSION "' -q"; cmd << " -O " << tmp_s << " " << escape_sh (web_encode (as_string (name))); // cout << cmd << "\n"; system (cmd); // cout << "got " << name << " as " << tmp << "\n"; if (var_eval_system ("cat " * tmp_s * " 2> /dev/null") == "") { remove (tmp); return url_none (); } else return set_cache (name, tmp); #endif }
static void init_deprecated () { #ifndef OS_WIN32 // Check for Macaulay 2 if (get_env ("M2HOME") == "") if (exists_in_path ("M2")) { string where= concretize (resolve_in_path ("M2")); string s = var_eval_system ("grep 'M2HOME=' " * where); string dir = s (search_forwards ("=", s) + 1, N(s)); if (dir != "") set_env ("M2HOME", dir); } #endif }
url resolve_in_path (url u) { if (use_which) { string name = escape_sh (as_string (u)); string which= var_eval_system ("which " * name * " 2> /dev/null"); if (ends (which, name)) return which; else if ((which != "") && (!starts (which, "which: ")) && (!starts (which, "no "))) cout << "TeXmacs] " << which << "\n"; } return resolve (url_path ("$PATH") * u, "x"); }
string get_date (string lan, string fm) { //#if defined(__MINGW__) || defined(__MINGW32__) || defined(OS_WIN32) // return win32::get_date(lan, fm); if (invalid_format (fm)) { if ((lan == "british") || (lan == "english") || (lan == "american")) fm= "%B %d, %Y"; else if (lan == "german") fm= "%d. %B %Y"; else if (lan == "chinese" || lan == "japanese" || lan == "korean" || lan == "taiwanese") { string y= simplify_date (var_eval_system ("date +\"%Y\"")); string m= simplify_date (var_eval_system ("date +\"%m\"")); string d= simplify_date (var_eval_system ("date +\"%d\"")); if (lan == "japanese") return y * "<#5e74>" * m * "<#6708>" * d * "<#65e5>"; if (lan == "korean") return y * "<#b144> " * m * "<#c6d4> " * d * "<#c77c>"; return y * "," * m * "," * d; } else fm= "%d %B %Y"; } lan= language_to_locale (lan); string lvar= "LC_TIME"; if (get_env (lvar) == "") lvar= "LC_ALL"; if (get_env (lvar) == "") lvar= "LANG"; string old= get_env (lvar); set_env (lvar, lan); string date= simplify_date (var_eval_system ("date +\"" * fm * "\"")); if ((lan == "cz_CZ") || (lan == "hu_HU") || (lan == "pl_PL")) date= il2_to_cork (date); // if (lan == "ru_RU") date= iso_to_koi8 (date); set_env (lvar, old); return date; }
// eps2write available starting with gs 9.14 (2014-03-26) // epswrite removed in gs 9.16 (2015-03-30) string eps_device () { static string dev; // no need to resolve each time if (dev == "") { string cmd= gs_prefix ()*" --version"; string buf= var_eval_system (cmd); double ver; int pos=0; if (read_double (buf, pos, ver)) { if (DEBUG_CONVERT) debug_convert << "gs version :"<<buf<<LF; if (ver >= 9.14) dev="eps2write"; else dev="epswrite"; } else convert_error << "Cannot determine gs version"<<LF; } return copy(dev); }
string edit_main_rep::get_metadata (string kind) { string var= "global-" * kind; string val= get_init_string (var); if (val != "") return val; val= search_metadata (subtree (et, rp), kind); if (val != "") return val; if (kind == "title") return as_string (tail (get_name ())); #ifndef __MINGW32__ if (kind == "author" && !is_none (resolve_in_path ("finger")) && !is_none (resolve_in_path ("sed"))) { string val= var_eval_system ("finger `whoami` | sed -e '/Name/!d' -e 's/.*Name: //'"); if (N(val) > 1) return utf8_to_cork (val); } #endif return ""; }
static void init_misc () { // Test whether 'which' works #if defined(__MINGW__) || defined(__MINGW32__) || defined (OS_WIN32) use_which = false; #else use_which = (var_eval_system ("which texmacs 2> /dev/null") != ""); #endif //string loc= var_eval_system ("locate bin/locate 2> /dev/null"); //use_locate= (search_forwards ("bin/locate", loc) > 0); // Set extra environment variables for Cygwin #ifdef OS_CYGWIN set_env ("CYGWIN", "check_case:strict"); set_env ("COMSPEC", ""); set_env ("ComSpec", ""); #endif }
static url get_kpsepath (string s) { // FIXME: adapt to WIN32 if (get_setting ("KPSEPATH") != "true") return url_none (); string r= var_eval_system ("kpsepath " * s); if (N(r)==0) return url_none (); int i, start, end; url p= url_none (); for (i=0; i<N(r); i++) { while ((i<N(r)) && (r[i]=='!')) i++; start=i; while ((i<N(r)) && (r[i]!=':')) i++; end=i; while ((end>start) && (r[end-1]=='/')) end--; string dir= r (start, end); if (dir == ".") continue; p= expand (complete (dir * url_wildcard (), "dr")) | p; } return p; }
void TeXmacs_init_paths (int& argc, char** argv) { (void) argc; (void) argv; #ifdef QTTEXMACS url exedir = url_system (qt_application_directory ()); #else url exedir = url_system(argv[0]) * ".." ; if (! is_rooted(exedir)) { exedir = url_pwd() * exedir ; } #endif #if (defined(QTTEXMACS) && defined(Q_WS_MAC)) // the following line can inibith external plugin loading // QCoreApplication::setLibraryPaths(QStringList()); // ideally we would like to control the external plugins // and add the most useful (gif, jpeg, svg converters) // to the bundle package. I still do not have a reliable solution // so just allow everything that is reachable. // plugins need to be installed in TeXmacs.app/Contents/Plugins QCoreApplication::addLibraryPath( QDir::cleanPath(QCoreApplication::applicationDirPath().append("/../Plugins")) ); // cout << from_qstring ( QCoreApplication::libraryPaths () .join("\n") ) << LF; { // ensure that private versions of the Qt frameworks have priority on // other instances. // in the event that we load qt plugins which could possibly link to // other instances of the Qt libraries string buf; buf = as_string(exedir * "../Frameworks"); if (get_env("DYLD_FRAMEWORK_PATH") != "") buf = buf * ":" * get_env("DYLD_FRAMEWORK_PATH"); set_env ("DYLD_FRAMEWORK_PATH", buf); buf = as_string(exedir * "../Resources/lib"); if (get_env("DYLD_LIBRARY_PATH") != "") buf = buf * ":" * get_env("DYLD_LIBRARY_PATH"); set_env ("DYLD_LIBRARY_PATH", buf); } #endif #if defined(AQUATEXMACS) ||(defined(QTTEXMACS) && defined(Q_WS_MAC)) || (defined(X11TEXMACS) && defined (MACOSX_EXTENSIONS)) // Mac bundle environment initialization // We set some environment variables when the executable // is in a .app bundle on MacOSX if (get_env ("TEXMACS_PATH") == "") set_env ("TEXMACS_PATH", as_string(exedir * "../Resources/share/TeXmacs")); //cout << get_env("PATH") * ":" * as_string(url("$PWD") * argv[0] // * "../../Resources/share/TeXmacs/bin") << LF; if (exists("/bin/bash")) { string shell_env = var_eval_system ("PATH='' /bin/bash -l -c 'echo $PATH'"); set_env ("PATH", get_env("PATH") * ":" * shell_env * ":" * as_string (exedir * "../Resources/share/TeXmacs/bin")); } else { set_env ("PATH", get_env("PATH") * ":" * as_string (exedir * "../Resources/share/TeXmacs/bin")); } // system("set"); #endif #ifdef __MINGW32__ // Win bundle environment initialization // TEXMACS_PATH is set by assuming that the executable is in TeXmacs/bin/ // HOME is set to USERPROFILE // PWD is set to HOME // if PWD is lacking, then the path resolution machinery may not work if (get_env ("TEXMACS_PATH") == "") set_env ("TEXMACS_PATH", as_string (exedir * "..")); // if (get_env ("HOME") == "") //now set in immediate_options otherwise --setup option fails // set_env ("HOME", get_env("USERPROFILE")); // HACK // In WINE the variable PWD is already in the outer Unix environment // so we need to override it to have a correct behaviour if ((get_env ("PWD") == "") || (get_env ("PWD")[0] == '/')) { set_env ("PWD", as_string (exedir)); // set_env ("PWD", get_env("HOME")); } // system("set"); #endif }
string pretty_time (int t) { return var_eval_system ("date -r " * as_string (t)); }