orelse ch = #"-" orelse ch = #"_") path
andalso SS.exists (fn s' => path = s' orelse String.isPrefix (s' ^ "/") path) (your_paths ())
+fun yourDomainHost s =
+ let
+ val (pref, suf) = Substring.splitl (fn ch => ch <> #".") (Substring.full s)
+ in
+ print ("pref[" ^ Substring.string pref ^ "] suf[" ^ Substring.string suf ^ "]\n");
+ Substring.size suf > 0
+ andalso validHost (Substring.string pref)
+ andalso yourDomain (Substring.string
+ (Substring.slice (suf, 1, NONE)))
+ end
+
+val _ = Env.type_one "no_spaces"
+ Env.string
+ (CharVector.all (fn ch => not (Char.isSpace ch)))
+val _ = Env.type_one "no_newlines"
+ Env.string
+ (CharVector.all (fn ch => ch <> #"\n" andalso ch <> #"\r"))
+
val _ = Env.type_one "ip"
Env.string
validIp
Env.string
yourDomain
+val _ = Env.type_one "your_domain_host"
+ Env.string
+ yourDomainHost
+
val _ = Env.type_one "your_user"
Env.string
yourUser