src/Pure/name.ML
changeset 28941 128459bd72d2
parent 28863 32e83a854e5e
child 28965 1de908189869
equal deleted inserted replaced
28940:df0cb410be35 28941:128459bd72d2
    27   val invent_list: string list -> string -> int -> string list
    27   val invent_list: string list -> string -> int -> string list
    28   val variants: string list -> context -> string list * context
    28   val variants: string list -> context -> string list * context
    29   val variant_list: string list -> string list -> string list
    29   val variant_list: string list -> string list -> string list
    30   val variant: string list -> string -> string
    30   val variant: string list -> string -> string
    31 
    31 
    32   include NAME_BINDING
    32   include BINDING
    33   val add_prefix: bool -> string -> binding -> binding
    33   type binding = Binding.T
    34   val map_prefix: ((string * bool) list -> binding -> binding) -> binding -> binding
    34   val name_of: Binding.T -> string (*FIMXE legacy*)
    35   val name_of: binding -> string (*FIMXE legacy*)
    35   val map_name: (string -> string) -> Binding.T -> Binding.T (*FIMXE legacy*)
    36   val map_name: (string -> string) -> binding -> binding (*FIMXE legacy*)
    36   val qualified: string -> Binding.T -> Binding.T (*FIMXE legacy*)
    37   val qualified: string -> binding -> binding (*FIMXE legacy*)
       
    38   val display: binding -> string
       
    39 end;
    37 end;
    40 
    38 
    41 structure Name: NAME =
    39 structure Name: NAME =
    42 struct
    40 struct
    43 
       
    44 open NameSpace;
       
    45 
    41 
    46 (** common defaults **)
    42 (** common defaults **)
    47 
    43 
    48 val uu = "uu";
    44 val uu = "uu";
    49 val aT = "'a";
    45 val aT = "'a";
   150 fun variant used = singleton (variant_list used);
   146 fun variant used = singleton (variant_list used);
   151 
   147 
   152 
   148 
   153 (** generic name bindings **)
   149 (** generic name bindings **)
   154 
   150 
   155 fun add_prefix sticky prfx b = if prfx = "" then error "empty name prefix"
   151 open Binding;
   156   else (map_binding o apfst) (cons (prfx, sticky)) b;
   152 
       
   153 type binding = Binding.T;
   157 
   154 
   158 val prefix_of = fst o dest_binding;
   155 val prefix_of = fst o dest_binding;
   159 val name_of = snd o dest_binding;
   156 val name_of = snd o dest_binding;
   160 val map_name = map_binding o apsnd;
   157 val map_name = map_binding o apsnd;
   161 val qualified = map_name o NameSpace.qualified;
   158 val qualified = map_name o NameSpace.qualified;
   162 
   159 
   163 fun map_prefix f b =
       
   164   let
       
   165     val (prefix, name) = dest_binding b;
       
   166     val pos = pos_of b;
       
   167   in f prefix (binding_pos (name, pos)) end;
       
   168 
       
   169 fun display b =
       
   170   let
       
   171     val (prefix, name) = dest_binding b
       
   172     fun mk_prefix (prfx, true) = prfx
       
   173       | mk_prefix (prfx, false) = enclose "(" ")" prfx
       
   174   in if not (! NameSpace.long_names) orelse null prefix orelse name = "" then name
       
   175     else NameSpace.implode (map mk_prefix prefix) ^ ":" ^ name
       
   176   end;
       
   177 
       
   178 end;
   160 end;