changeset 55033 | 8e8243975860 |
parent 54734 | b91afc3aa3e6 |
child 55430 | 8eb6c740ec1a |
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 |