| author | wenzelm | 
| Tue, 29 Apr 2014 20:40:44 +0200 | |
| changeset 56792 | 792dd0e9cebb | 
| parent 55512 | 75c68e05f9ea | 
| child 59720 | f893472fff31 | 
| permissions | -rw-r--r-- | 
| 
55511
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
1  | 
/* Title: Pure/ML/antiquote.scala  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
2  | 
Author: Makarius  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
3  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
4  | 
Antiquotations within plain text.  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
5  | 
*/  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
7  | 
package isabelle  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
8  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
9  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
10  | 
import scala.util.parsing.input.CharSequenceReader  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
12  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
13  | 
object Antiquote  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
14  | 
{
 | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
15  | 
sealed abstract class Antiquote  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
16  | 
case class Text(source: String) extends Antiquote  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
17  | 
case class Antiq(source: String) extends Antiquote  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
18  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
19  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
20  | 
/* parsers */  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
21  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
22  | 
object Parsers extends Parsers  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
23  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
24  | 
trait Parsers extends Scan.Parsers  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
25  | 
  {
 | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
26  | 
private val txt: Parser[String] =  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
27  | 
      rep1("@" ~ guard(one(s => s != "{")) | many1(s => s != "@")) ^^ (x => x.mkString)
 | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
28  | 
|
| 55512 | 29  | 
val antiq_other: Parser[String] =  | 
30  | 
many1(s => s != "\"" && s != "`" && s != "}" && !Symbol.is_open(s) && !Symbol.is_close(s))  | 
|
31  | 
||
32  | 
private val antiq_body: Parser[String] =  | 
|
33  | 
      quoted("\"") | (quoted("`") | (cartouche | antiq_other))
 | 
|
| 
55511
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
34  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
35  | 
val antiq: Parser[String] =  | 
| 55512 | 36  | 
      "@{" ~ rep(antiq_body) ~ "}" ^^ { case x ~ y ~ z => x + y.mkString + z }
 | 
| 
55511
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
37  | 
|
| 55512 | 38  | 
val antiquote: Parser[Antiquote] =  | 
| 
55511
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
39  | 
antiq ^^ (x => Antiq(x)) | txt ^^ (x => Text(x))  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
40  | 
}  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
41  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
42  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
43  | 
/* read */  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
44  | 
|
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
45  | 
def read(input: CharSequence): List[Antiquote] =  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
46  | 
  {
 | 
| 55512 | 47  | 
    Parsers.parseAll(Parsers.rep(Parsers.antiquote), new CharSequenceReader(input)) match {
 | 
| 
55511
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
48  | 
case Parsers.Success(xs, _) => xs  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
49  | 
case Parsers.NoSuccess(_, next) =>  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
50  | 
        error("Malformed quotation/antiquotation source" +
 | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
51  | 
Position.here(Position.Line(next.pos.line)))  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
52  | 
}  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
53  | 
}  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
54  | 
}  | 
| 
 
984e210d412e
antiquotations within plain text: Scala version in accordance to ML;
 
wenzelm 
parents:  
diff
changeset
 | 
55  |