# HG changeset patch # User wenzelm # Date 1515870139 -3600 # Node ID eec44c98d8b327b2a6870d0f0b1bec5f4b833854 # Parent 3f4b0c84630f2ad8fc864b2ad1687c04b4cdfe19# Parent c4a10621c72e62f6aaed12b7bd1b5beacdbff66e merged diff -r 3f4b0c84630f -r eec44c98d8b3 NEWS --- a/NEWS Sat Jan 13 09:18:54 2018 +0000 +++ b/NEWS Sat Jan 13 20:02:19 2018 +0100 @@ -118,6 +118,10 @@ *** Document preparation *** +* \<^cancel>\text\ marks unused text within inner syntax: it is ignored +within the formal language, but shown in the document with strike-out +style. + * Embedded languages such as inner syntax and ML may contain formal comments of the form "\ \text\". As in marginal comments of outer syntax, antiquotations are interpreted wrt. the presentation context of diff -r 3f4b0c84630f -r eec44c98d8b3 etc/symbols --- a/etc/symbols Sat Jan 13 09:18:54 2018 +0000 +++ b/etc/symbols Sat Jan 13 20:02:19 2018 +0100 @@ -388,6 +388,7 @@ \<^action> code: 0x00261b group: icon argument: cartouche font: IsabelleText \<^assert> \<^binding> argument: cartouche +\<^cancel> argument: cartouche \<^class> argument: cartouche \<^class_syntax> argument: cartouche \<^command_keyword> argument: cartouche diff -r 3f4b0c84630f -r eec44c98d8b3 lib/texinputs/isabelle.sty --- a/lib/texinputs/isabelle.sty Sat Jan 13 09:18:54 2018 +0000 +++ b/lib/texinputs/isabelle.sty Sat Jan 13 20:02:19 2018 +0100 @@ -236,6 +236,12 @@ } +% cancel text + +\usepackage[normalem]{ulem} +\newcommand{\isamarkupcancel}[1]{\xout{#1}} + + % tagged regions %plain TeX version of comment package -- much faster! diff -r 3f4b0c84630f -r eec44c98d8b3 lib/texinputs/isabellesym.sty --- a/lib/texinputs/isabellesym.sty Sat Jan 13 09:18:54 2018 +0000 +++ b/lib/texinputs/isabellesym.sty Sat Jan 13 20:02:19 2018 +0100 @@ -368,6 +368,7 @@ \newcommand{\isasymproof}{\isamath{\,\langle\mathit{proof}\rangle}} \newcommand{\isactrlassert}{\isakeywordcontrol{assert}} +\newcommand{\isactrlcancel}{\isakeywordcontrol{cancel}} \newcommand{\isactrlbinding}{\isakeywordcontrol{binding}} \newcommand{\isactrlclass}{\isakeywordcontrol{class}} \newcommand{\isactrlclassUNDERSCOREsyntax}{\isakeywordcontrol{class{\isacharunderscore}syntax}} diff -r 3f4b0c84630f -r eec44c98d8b3 src/HOL/Nitpick_Examples/Hotel_Nits.thy --- a/src/HOL/Nitpick_Examples/Hotel_Nits.thy Sat Jan 13 09:18:54 2018 +0000 +++ b/src/HOL/Nitpick_Examples/Hotel_Nits.thy Sat Jan 13 20:02:19 2018 +0100 @@ -44,7 +44,7 @@ "\s \ reach; (k,k') \ cards s g; roomk s r \ {k,k'}\ \ s\isin := (isin s)(r := isin s r \ {g}), roomk := (roomk s)(r := k'), - safe := (safe s)(r := owns s r = Some g \ isin s r = {} \ \\\ k' = currk s r\\ + safe := (safe s)(r := owns s r = Some g \ isin s r = {} \<^cancel>\\ k' = currk s r\ \ safe s r)\ \ reach" | exit_room: "\s \ reach; g \ isin s r\ \ s\isin := (isin s)(r := isin s r - {g})\ \ reach" diff -r 3f4b0c84630f -r eec44c98d8b3 src/HOL/Nitpick_Examples/Manual_Nits.thy --- a/src/HOL/Nitpick_Examples/Manual_Nits.thy Sat Jan 13 09:18:54 2018 +0000 +++ b/src/HOL/Nitpick_Examples/Manual_Nits.thy Sat Jan 13 20:02:19 2018 +0100 @@ -442,7 +442,7 @@ primrec insort\<^sub>1 where "insort\<^sub>1 \ x = N x 1 \ \" | "insort\<^sub>1 (N y k t u) x = - (* (split \ skew) *) (N y k (if x < y then insort\<^sub>1 t x else t) + \<^cancel>\(split \ skew)\ (N y k (if x < y then insort\<^sub>1 t x else t) (if x > y then insort\<^sub>1 u x else u))" theorem wf_insort\<^sub>1: "wf t \ wf (insort\<^sub>1 t x)" diff -r 3f4b0c84630f -r eec44c98d8b3 src/HOL/Predicate_Compile_Examples/Hotel_Example.thy --- a/src/HOL/Predicate_Compile_Examples/Hotel_Example.thy Sat Jan 13 09:18:54 2018 +0000 +++ b/src/HOL/Predicate_Compile_Examples/Hotel_Example.thy Sat Jan 13 20:02:19 2018 +0100 @@ -52,7 +52,7 @@ "roomk [] r = initk r" | "roomk (e#s) r = (let k = roomk s r in case e of Check_in g r' c \ k - | Enter g r' (x,y) \ if r' = r (*& x = k*) then y else k + | Enter g r' (x,y) \ if r' = r \<^cancel>\\ x = k\ then y else k | Exit g r \ k)" primrec isin :: "event list \ room \ guest set" diff -r 3f4b0c84630f -r eec44c98d8b3 src/HOL/Quickcheck_Examples/Hotel_Example.thy --- a/src/HOL/Quickcheck_Examples/Hotel_Example.thy Sat Jan 13 09:18:54 2018 +0000 +++ b/src/HOL/Quickcheck_Examples/Hotel_Example.thy Sat Jan 13 20:02:19 2018 +0100 @@ -54,7 +54,7 @@ "roomk [] r = initk r" | "roomk (e#s) r = (let k = roomk s r in case e of Check_in g r' c \ k - | Enter g r' (x,y) \ if r' = r (*& x = k*) then y else k + | Enter g r' (x,y) \ if r' = r \<^cancel>\\ x = k\ then y else k | Exit g r \ k)" primrec isin :: "event list \ room \ guest set" diff -r 3f4b0c84630f -r eec44c98d8b3 src/HOL/Quickcheck_Examples/Quickcheck_Narrowing_Examples.thy --- a/src/HOL/Quickcheck_Examples/Quickcheck_Narrowing_Examples.thy Sat Jan 13 09:18:54 2018 +0000 +++ b/src/HOL/Quickcheck_Examples/Quickcheck_Narrowing_Examples.thy Sat Jan 13 20:02:19 2018 +0100 @@ -177,7 +177,7 @@ fun l_bal where "l_bal(n, MKT ln ll lr h, r) = (if ht ll < ht lr - then case lr of ET \ ET (* impossible *) + then case lr of ET \ ET \ \impossible\ | MKT lrn lrr lrl lrh \ mkt lrn (mkt ln ll lrl) (mkt n lrr r) else mkt ln ll (mkt n lr r))" @@ -185,7 +185,7 @@ fun r_bal where "r_bal(n, l, MKT rn rl rr h) = (if ht rl > ht rr - then case rl of ET \ ET (* impossible *) + then case rl of ET \ ET \ \impossible\ | MKT rln rll rlr h \ mkt rln (mkt n l rll) (mkt rn rlr rr) else mkt rn (mkt n l rl) rr)" diff -r 3f4b0c84630f -r eec44c98d8b3 src/Pure/General/symbol.ML --- a/src/Pure/General/symbol.ML Sat Jan 13 09:18:54 2018 +0000 +++ b/src/Pure/General/symbol.ML Sat Jan 13 20:02:19 2018 +0100 @@ -16,6 +16,7 @@ val space: symbol val is_space: symbol -> bool val comment: symbol + val cancel: symbol val is_char: symbol -> bool val is_utf8: symbol -> bool val is_symbolic: symbol -> bool @@ -107,6 +108,7 @@ end; val comment = "\"; +val cancel = "\<^cancel>"; fun is_char s = size s = 1; diff -r 3f4b0c84630f -r eec44c98d8b3 src/Pure/General/symbol_pos.ML --- a/src/Pure/General/symbol_pos.ML Sat Jan 13 09:18:54 2018 +0000 +++ b/src/Pure/General/symbol_pos.ML Sat Jan 13 20:02:19 2018 +0100 @@ -34,6 +34,8 @@ val scan_cartouche: string -> T list -> T list * T list val scan_cartouche_content: string -> T list -> T list * T list val recover_cartouche: T list -> T list * T list + val scan_blanks: T list -> T list * T list + val scan_cancel_cartouche: string -> T list -> T list * T list val scan_comment_cartouche: string -> T list -> T list * T list val scan_comment: string -> T list -> T list * T list val scan_comment_body: string -> T list -> T list * T list @@ -216,10 +218,18 @@ val recover_cartouche = Scan.pass (SOME 0) scan_cartouche_depth; -fun scan_comment_cartouche err_prefix = - $$$ Symbol.comment @@@ Scan.many (Symbol.is_blank o symbol) @@@ - !!! (fn () => err_prefix ^ "cartouche expected after " ^ quote Symbol.comment) - (scan_cartouche err_prefix); + +(* operator with cartouche argument *) + +val scan_blanks = Scan.many (Symbol.is_blank o symbol); + +fun scan_operator_cartouche blanks operator_symbol err_prefix = + (if blanks then $$$ operator_symbol @@@ scan_blanks else $$$ operator_symbol) @@@ + !!! (fn () => err_prefix ^ "cartouche expected after " ^ quote operator_symbol) + (scan_cartouche err_prefix); + +val scan_cancel_cartouche = scan_operator_cartouche false Symbol.cancel; +val scan_comment_cartouche = scan_operator_cartouche true Symbol.comment; (* ML-style comments *) diff -r 3f4b0c84630f -r eec44c98d8b3 src/Pure/Syntax/lexicon.ML --- a/src/Pure/Syntax/lexicon.ML Sat Jan 13 09:18:54 2018 +0000 +++ b/src/Pure/Syntax/lexicon.ML Sat Jan 13 20:02:19 2018 +0100 @@ -22,8 +22,9 @@ val is_tid: string -> bool datatype token_kind = Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | FloatSy | - StrSy | StringSy | Cartouche | Space | Comment | Comment_Cartouche | EOF + StrSy | StringSy | Cartouche | Space | Cancel | Comment | Comment_Cartouche | EOF datatype token = Token of token_kind * string * Position.range + val kind_of_token: token -> token_kind val str_of_token: token -> string val pos_of_token: token -> Position.T val is_proper: token -> bool @@ -113,17 +114,17 @@ datatype token_kind = Literal | IdentSy | LongIdentSy | VarSy | TFreeSy | TVarSy | NumSy | FloatSy | StrSy | - StringSy | Cartouche | Space | Comment | Comment_Cartouche | EOF; + StringSy | Cartouche | Space | Cancel | Comment | Comment_Cartouche | EOF; datatype token = Token of token_kind * string * Position.range; +fun kind_of_token (Token (k, _, _)) = k; fun str_of_token (Token (_, s, _)) = s; fun pos_of_token (Token (_, _, (pos, _))) = pos; -fun is_proper (Token (Space, _, _)) = false - | is_proper (Token (Comment, _, _)) = false - | is_proper (Token (Comment_Cartouche, _, _)) = false - | is_proper _ = true; +val is_proper = + kind_of_token #> + (fn Space => false | Cancel => false | Comment => false | Comment_Cartouche => false | _ => true); (* stopper *) @@ -131,9 +132,7 @@ fun mk_eof pos = Token (EOF, "", (pos, Position.none)); val eof = mk_eof Position.none; -fun is_eof (Token (EOF, _, _)) = true - | is_eof _ = false; - +fun is_eof tok = kind_of_token tok = EOF; val stopper = Scan.stopper (K eof) is_eof; @@ -191,9 +190,8 @@ (* valued_token *) -fun valued_token (Token (Literal, _, _)) = false - | valued_token (Token (EOF, _, _)) = false - | valued_token _ = true; +val valued_token = + kind_of_token #> (fn Literal => false | EOF => false | _ => true); (* predef_term *) @@ -248,7 +246,7 @@ (** tokenize **) -fun token_leq (Token (_, s1, _), Token (_, s2, _)) = s1 <= s2; +val token_leq = op <= o apply2 str_of_token; fun token kind ss = Token (kind, Symbol_Pos.content ss, Symbol_Pos.range ss); fun tokenize lex xids syms = @@ -270,6 +268,7 @@ val scan_token = Symbol_Pos.scan_cartouche err_prefix >> token Cartouche || + Symbol_Pos.scan_cancel_cartouche Symbol.cancel >> token Cancel || Symbol_Pos.scan_comment err_prefix >> token Comment || Symbol_Pos.scan_comment_cartouche err_prefix >> token Comment_Cartouche || Scan.max token_leq scan_lit scan_val || diff -r 3f4b0c84630f -r eec44c98d8b3 src/Pure/Thy/latex.scala --- a/src/Pure/Thy/latex.scala Sat Jan 13 09:18:54 2018 +0000 +++ b/src/Pure/Thy/latex.scala Sat Jan 13 20:02:19 2018 +0100 @@ -116,9 +116,9 @@ } } + val Line_Error = """^l\.\d+ (.*)$""".r val More_Error = List( - """l\.\d+""", "", "