X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/2ed6d0e50d89234c3d63c3707e855c922bd49358..f0062360d6fbd63712c94ef712179e86c4db39db:/src/plugins/alias.sml diff --git a/src/plugins/alias.sml b/src/plugins/alias.sml index 43e109f..b96d57d 100644 --- a/src/plugins/alias.sml +++ b/src/plugins/alias.sml @@ -24,30 +24,32 @@ open Ast structure SM = DataStructures.StringMap -val aliases : TextIO.outstream SM.map ref = ref SM.empty +val aliases : Domain.files SM.map ref = ref SM.empty fun aliasesF node = valOf (SM.find (!aliases, node)) -val aliasesD : TextIO.outstream SM.map ref = ref SM.empty +val aliasesD : Domain.files SM.map ref = ref SM.empty fun aliasesDF node = valOf (SM.find (!aliasesD, node)) fun write nodes = let val files = map (fn node => aliasesF node) nodes in - fn s => app (fn file => TextIO.output (file, s)) files + (fn s => app (fn file => #write file s) files, + fn () => app (fn file => #writeDom file ()) files) end fun writeD nodes = let val files = map (fn node => aliasesDF node) nodes in - fn s => app (fn file => TextIO.output (file, s)) files + (fn s => app (fn file => #write file s) files, + fn () => app (fn file => #writeDom file ()) files) end fun openInAll base = foldl (fn (node, r) => SM.insert (r, node, - Domain.domainFile {node = node, name = base})) + Domain.domainsFile {node = node, name = base})) SM.empty Domain.nodes val _ = Domain.registerBefore @@ -55,8 +57,8 @@ val _ = Domain.registerBefore aliasesD := openInAll "aliases.default")) val _ = Domain.registerAfter - (fn _ => (SM.app TextIO.closeOut (!aliases); - SM.app TextIO.closeOut (!aliasesD))) + (fn _ => (SM.app (fn file => #close file ()) (!aliases); + SM.app (fn file => #close file ()) (!aliasesD))) fun validEmailUser s = size s > 0 andalso size s < 50 @@ -83,12 +85,10 @@ val _ = Env.type_one "email" datatype aliasSource = User of string | Default - | CatchAll val source = fn (EApp ((EVar "userSource", _), e), _) => Option.map User (Env.string e) | (EVar "defaultSource", _) => SOME Default - | (EVar "catchAllSource", _) => SOME CatchAll | _ => NONE datatype aliasTarget = @@ -117,8 +117,8 @@ fun writeSource (env, s, t) = let val nodes = Env.env (Env.list Env.string) (env, "MailNodes") - val write = write nodes - val writeD = writeD nodes + val (write, writeDom) = write nodes + val (writeD, writeDomD) = writeD nodes fun writeTarget (writer, t) = case t of @@ -130,20 +130,15 @@ fun writeSource (env, s, t) = case s of User s => (write s; write "@"; - write (Domain.currentDomain ()); + writeDom (); write ": "; writeTarget (write, t); write "\n") - | Default => (write "*@"; - write (Domain.currentDomain ()); - write ": "; - writeTarget (write, t); - write "\n") - | CatchAll => (writeD "*@"; - writeD (Domain.currentDomain ()); - writeD ": "; - writeTarget (writeD, t); - writeD "\n") + | Default => (writeD "*@"; + writeDomD (); + writeD ": "; + writeTarget (writeD, t); + writeD "\n") end val _ = Env.actionV_two "aliasPrim"