src/Pure/name.ML
changeset 28792 1d80cee865de
parent 28737 8cbb7cfcfb5b
child 28821 78a6ed46ad04
equal deleted inserted replaced
28791:cc16be808796 28792:1d80cee865de
    32   val binding_pos: string * Position.T -> binding
    32   val binding_pos: string * Position.T -> binding
    33   val binding: string -> binding
    33   val binding: string -> binding
    34   val no_binding: binding
    34   val no_binding: binding
    35   val prefix_of: binding -> (string * bool) list
    35   val prefix_of: binding -> (string * bool) list
    36   val name_of: binding -> string
    36   val name_of: binding -> string
       
    37   val is_nothing: binding -> bool
    37   val pos_of: binding -> Position.T
    38   val pos_of: binding -> Position.T
    38   val add_prefix: bool -> string -> binding -> binding
    39   val add_prefix: bool -> string -> binding -> binding
    39   val map_name: (string -> string) -> binding -> binding
    40   val map_name: (string -> string) -> binding -> binding
    40   val qualified: string -> binding -> binding
    41   val qualified: string -> binding -> binding
       
    42   val namify: NameSpace.naming -> binding -> NameSpace.naming * string
    41   val output: binding -> string
    43   val output: binding -> string
    42 end;
    44 end;
    43 
    45 
    44 structure Name: NAME =
    46 structure Name: NAME =
    45 struct
    47 struct
   170   (cons (prfx, sticky));
   172   (cons (prfx, sticky));
   171 
   173 
   172 val map_name = map_binding o apfst o apsnd;
   174 val map_name = map_binding o apfst o apsnd;
   173 val qualified = map_name o NameSpace.qualified;
   175 val qualified = map_name o NameSpace.qualified;
   174 
   176 
       
   177 fun is_nothing (Binding ((_, name), _)) = name = "";
       
   178 
       
   179 fun namify naming (Binding ((prefix, name), _)) =
       
   180   let
       
   181     fun mk_prefix (prfx, true) = NameSpace.sticky_prefix prfx
       
   182       | mk_prefix (prfx, false) = NameSpace.add_path prfx;
       
   183     val naming' = fold mk_prefix prefix naming;
       
   184   in (naming', NameSpace.full naming' name) end;
       
   185 
   175 fun output (Binding ((prefix, name), _)) =
   186 fun output (Binding ((prefix, name), _)) =
   176   if null prefix orelse name = "" then name
   187   if null prefix orelse name = "" then name
   177   else NameSpace.implode (map fst prefix) ^ " / " ^ name;
   188   else NameSpace.implode (map fst prefix) ^ " / " ^ name;
   178 
   189 
   179 end;
   190 end;