"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