src/Pure/General/symbol.scala
changeset 55033 8e8243975860
parent 54734 b91afc3aa3e6
child 55430 8eb6c740ec1a
equal deleted inserted replaced
55032:b49366215417 55033:8e8243975860
   364       Set("!", "#", "$", "%", "&", "*", "+", "-", "/", "<", "=", ">", "?", "@", "^", "_", "|", "~")
   364       Set("!", "#", "$", "%", "&", "*", "+", "-", "/", "<", "=", ">", "?", "@", "^", "_", "|", "~")
   365 
   365 
   366     val symbolic = recode_set((for { (sym, _) <- symbols; if raw_symbolic(sym) } yield sym): _*)
   366     val symbolic = recode_set((for { (sym, _) <- symbols; if raw_symbolic(sym) } yield sym): _*)
   367 
   367 
   368 
   368 
       
   369     /* cartouches */
       
   370 
       
   371     val open_decoded = decode(open)
       
   372     val close_decoded = decode(close)
       
   373 
       
   374 
   369     /* control symbols */
   375     /* control symbols */
   370 
   376 
   371     val ctrl_decoded: Set[Symbol] =
   377     val ctrl_decoded: Set[Symbol] =
   372       Set((for ((sym, _) <- symbols if sym.startsWith("\\<^")) yield decode(sym)): _*)
   378       Set((for ((sym, _) <- symbols if sym.startsWith("\\<^")) yield decode(sym)): _*)
   373 
   379 
   418   def is_digit(sym: Symbol): Boolean = sym.length == 1 && '0' <= sym(0) && sym(0) <= '9'
   424   def is_digit(sym: Symbol): Boolean = sym.length == 1 && '0' <= sym(0) && sym(0) <= '9'
   419   def is_quasi(sym: Symbol): Boolean = sym == "_" || sym == "'"
   425   def is_quasi(sym: Symbol): Boolean = sym == "_" || sym == "'"
   420   def is_letdig(sym: Symbol): Boolean = is_letter(sym) || is_digit(sym) || is_quasi(sym)
   426   def is_letdig(sym: Symbol): Boolean = is_letter(sym) || is_digit(sym) || is_quasi(sym)
   421   def is_blank(sym: Symbol): Boolean = symbols.blanks.contains(sym)
   427   def is_blank(sym: Symbol): Boolean = symbols.blanks.contains(sym)
   422 
   428 
   423   def is_symbolic_char(sym: Symbol): Boolean = symbols.sym_chars.contains(sym)
   429 
   424   def is_symbolic(sym: Symbol): Boolean = raw_symbolic(sym) || symbols.symbolic.contains(sym)
   430   /* cartouches */
       
   431 
       
   432   val open = "\\<open>"
       
   433   val close = "\\<close>"
       
   434 
       
   435   def open_decoded: Symbol = symbols.open_decoded
       
   436   def close_decoded: Symbol = symbols.close_decoded
       
   437 
       
   438   def is_open(sym: Symbol): Boolean = sym == open_decoded || sym == open
       
   439   def is_close(sym: Symbol): Boolean = sym == close_decoded || sym == close
       
   440 
       
   441 
       
   442   /* symbols for symbolic identifiers */
   425 
   443 
   426   private def raw_symbolic(sym: Symbol): Boolean =
   444   private def raw_symbolic(sym: Symbol): Boolean =
   427     sym.startsWith("\\<") && sym.endsWith(">") && !sym.startsWith("\\<^")
   445     sym.startsWith("\\<") && sym.endsWith(">") && !sym.startsWith("\\<^")
   428 
   446 
       
   447   def is_symbolic(sym: Symbol): Boolean =
       
   448     !is_open(sym) && !is_close(sym) && (raw_symbolic(sym) || symbols.symbolic.contains(sym))
       
   449 
       
   450   def is_symbolic_char(sym: Symbol): Boolean = symbols.sym_chars.contains(sym)
       
   451 
   429 
   452 
   430   /* control symbols */
   453   /* control symbols */
   431 
   454 
   432   def is_ctrl(sym: Symbol): Boolean =
   455   def is_ctrl(sym: Symbol): Boolean =
   433     sym.startsWith("\\<^") || symbols.ctrl_decoded.contains(sym)
   456     sym.startsWith("\\<^") || symbols.ctrl_decoded.contains(sym)
   434 
   457 
   435   def is_controllable(sym: Symbol): Boolean =
   458   def is_controllable(sym: Symbol): Boolean =
   436     !is_blank(sym) && !is_ctrl(sym) && !is_malformed(sym)
   459     !is_blank(sym) && !is_ctrl(sym) && !is_open(sym) && !is_close(sym) && !is_malformed(sym)
   437 
   460 
   438   def sub_decoded: Symbol = symbols.sub_decoded
   461   def sub_decoded: Symbol = symbols.sub_decoded
   439   def sup_decoded: Symbol = symbols.sup_decoded
   462   def sup_decoded: Symbol = symbols.sup_decoded
   440   def bsub_decoded: Symbol = symbols.bsub_decoded
   463   def bsub_decoded: Symbol = symbols.bsub_decoded
   441   def esub_decoded: Symbol = symbols.esub_decoded
   464   def esub_decoded: Symbol = symbols.esub_decoded