"Fossies" - the Fresh Open Source Software Archive

Member "TeXmacs-2.1.2-src/src/System/Classes/url.hpp" (5 May 2022, 6986 Bytes) of package /linux/misc/TeXmacs-2.1.2-src.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 /******************************************************************************
    3 * MODULE     : url.hpp
    4 * DESCRIPTION: unified resource location handling
    5 * COPYRIGHT  : (C) 1999  Joris van der Hoeven
    6 *******************************************************************************
    7 * This software falls under the GNU general public license version 3 or later.
    8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
    9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
   10 ******************************************************************************/
   11 
   12 #ifndef URL_H
   13 #define URL_H
   14 #include "tree.hpp"
   15 
   16 #define URL_SYSTEM 0
   17 #define URL_UNIX 1
   18 #define URL_STANDARD 2
   19 #define URL_CLEAN_UNIX 3
   20 
   21 /******************************************************************************
   22 * The url data type
   23 ******************************************************************************/
   24 
   25 struct url_rep: concrete_struct {
   26   tree t;
   27   inline url_rep (tree t2): t (t2) {}
   28 };
   29 
   30 class url {
   31   CONCRETE(url);
   32 private:
   33   url (tree t): rep (tm_new<url_rep> (t)) {}
   34 public:
   35   url ();
   36   url (const char* name);
   37   url (string name);
   38   url (string dir, string name);
   39   inline bool operator == (url u) { return rep->t == u->t; }
   40   inline bool operator != (url u) { return rep->t != u->t; }
   41   inline url operator [] (int i) { return url (rep->t[i]); }
   42   friend url as_url (tree t);
   43 };
   44 CONCRETE_CODE(url);
   45 
   46 tm_ostream& operator << (tm_ostream& out, url u);
   47 inline url as_url (tree t) { return url(t); }
   48 string as_string (url u, int type= URL_SYSTEM);
   49 inline tree as_tree (url u) { return tree (u->t); }
   50 inline string as_system_string (url u) { return as_string (u, URL_SYSTEM); }
   51 inline string as_unix_string (url u) { return as_string (u, URL_UNIX); }
   52 inline string as_standard_string (url u) { return as_string (u,URL_STANDARD); }
   53 
   54 /******************************************************************************
   55 * url constructors
   56 ******************************************************************************/
   57 
   58 url url_general (string name, int type);
   59 url url_unix (string name);
   60 url url_unix (string dir, string name);
   61 url url_system (string name);
   62 url url_system (string dir, string name);
   63 url url_standard (string name);
   64 url url_standard (string dir, string name);
   65 
   66 inline url url_none () { return as_url (tuple ("none")); }
   67 inline url url_here () { return as_url (tree (".")); }
   68 inline url url_parent () { return as_url (tree ("..")); }
   69 inline url url_ancestor () { return as_url (tree ("...")); }
   70 inline url url_pwd () { return url_system ("$PWD"); }
   71 
   72 url url_root (string protocol);       // root url
   73 url url_ramdisc (string contents);    // ramdisc with contents contents
   74 url url_wildcard ();                  // any url
   75 url url_wildcard (string name);       // string with * wildcards
   76 
   77 url operator * (url u1, url u2);      // concatenation of url with rootless url
   78 url operator * (url u1, const char* name);
   79 url operator * (url u1, string name);
   80 url operator | (url u1, url u2);      // disjunction of urls like in file paths
   81 
   82 inline url url_parent (url u) { return u * url_parent (); }
   83 
   84 /******************************************************************************
   85 * predicates
   86 ******************************************************************************/
   87 
   88 inline bool is_none (url u) { return is_tuple (u->t, "none", 0); }
   89 inline bool is_here (url u) { return u->t == "."; }
   90 inline bool is_parent (url u) { return u->t == ".."; }
   91 inline bool is_ancestor (url u) { return u->t == "..."; }
   92 inline bool is_atomic (url u) { return is_atomic (u->t); }
   93 inline bool is_concat (url u) { return is_tuple (u->t, "concat", 2); }
   94 inline bool is_or (url u) { return is_tuple (u->t, "or", 2); }
   95 inline bool is_root (url u) {
   96   return is_tuple (u->t, "root") && (N(u->t) >= 2); }
   97 inline bool is_root (url u, string s) {
   98   return is_root (u) && (u[1]->t->label == s); }
   99 inline bool is_root_web (url u) {
  100   return is_root (u, "http") || is_root (u, "https") || is_root (u, "ftp") ||
  101          is_root (u, "blank"); }
  102 inline bool is_root_tmfs (url u) { return is_root (u, "tmfs"); }
  103 inline bool is_root_blank (url u) { return is_root (u, "blank"); }
  104 inline bool is_wildcard (url u) { return is_tuple (u->t, "wildcard"); }
  105 inline bool is_wildcard (url u, int n) {
  106   return is_tuple (u->t, "wildcard", n); }
  107 inline bool is_pseudo_atomic (url u) {
  108   return is_atomic (u->t) || is_tuple (u->t, "wildcard", 1); }
  109 
  110 bool is_rooted (url u);
  111 bool is_rooted (url u, string protocol);
  112 bool is_rooted_web (url u);
  113 bool is_rooted_tmfs (url u);
  114 bool is_rooted_tmfs (url u, string sub_protocol);
  115 bool is_rooted_blank (url u);
  116 bool is_name (url u);
  117 bool is_rooted_name (url u);
  118 bool is_ramdisc (url u);
  119 
  120 /******************************************************************************
  121 * operations on urls
  122 ******************************************************************************/
  123 
  124 url    head (url u);                 // keep only the directory of the file
  125 url    tail (url u);                 // keep only the file name without path
  126 string suffix (url u);               // get suffix of file
  127 string basename (url u, string suf); // get basename of file with given suffix
  128 string basename (url u);             // get basename of file
  129 url    glue (url u, string s);       // glue suffix to url tail
  130 url    unglue (url u, int nr);       // remove nr chars from suffix
  131 url    unblank (url u);              // a/b/ -> a/b
  132 url    relative (url base, url u);   // a/b, c -> a/c
  133 url    delta (url base, url u);      // relative (a, delta (a, b)) == b
  134 string get_root (url u);             // get root
  135 url    unroot (url u);               // remove root
  136 url    reroot (url u, string s);     // reroot using new protocol
  137 url    expand (url u);               // rewrite a/{b:c} -> a/b:a/c
  138 url    sort (url u);                 // order items in ors
  139 url    factor (url u);               // inverse of expand; also sorts
  140 bool   descends (url u, url base);   // does u descend from base?
  141 bool   is_secure (url u);            // is u secure?
  142 
  143 /******************************************************************************
  144 * url resolution
  145 ******************************************************************************/
  146 
  147 url  complete (url u, string filter= "fr"); // wildcard completion
  148 url  resolve (url u, string filter= "fr");  // find first match only
  149 url  resolve_in_path (url u);               // find file in path
  150 bool exists (url u);                        // file exists
  151 bool exists_in_path (url u);                // file exists in path
  152 bool has_permission (url u, string filter); // check file permissions
  153 url  descendance (url u);                   // utility for style&package menus
  154 url  subdirectories (url u);                // similarly for patters
  155 url  concretize_url (url u);                // variant of concretize below
  156 string concretize (url u);                  // system name for resolved url
  157 string materialize (url u, string f= "fr"); // resolve + concretize
  158 
  159 #endif // defined URL_H