KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > kawa > lispexpr > ReaderQuote


1 // Copyright (c) 2001 Per M.A. Bothner
2
// This is free software; for terms and warranty disclaimer see ./COPYING.
3

4 package gnu.kawa.lispexpr;
5 import gnu.text.Lexer;
6 import gnu.text.SyntaxException;
7 import gnu.lists.PairWithPosition;
8
9 public class ReaderQuote extends ReadTableEntry
10 {
11   Object JavaDoc magicSymbol;
12   char next;
13   Object JavaDoc magicSymbol2;
14
15   /** Read an expression EXP and return (magicSymbol EXP). */
16   public ReaderQuote(Object JavaDoc magicSymbol)
17   {
18     this.magicSymbol = magicSymbol;
19   }
20
21   /** If the next character is 'next' read an expression EXP
22    * and return (magicSymbol2 EXP).
23    * Otherwise, read EXP and return (magicSymbol EXP). */

24   public ReaderQuote(Object JavaDoc magicSymbol, char next, Object JavaDoc magicSymbol2)
25   {
26     this.next = next;
27     this.magicSymbol = magicSymbol;
28     this.magicSymbol2 = magicSymbol2;
29   }
30
31   public Object JavaDoc read (Lexer in, int ch, int count)
32     throws java.io.IOException JavaDoc, SyntaxException
33   {
34     LispReader reader = (LispReader) in;
35     String JavaDoc file = reader.getName();
36     int line1 = reader.getLineNumber() + 1;
37     int column1 = reader.getColumnNumber() + 1;
38     Object JavaDoc magic = magicSymbol;
39     if (next != '\0')
40       {
41     ch = reader.read();
42     if (ch == next)
43       magic = magicSymbol2;
44     else if (ch >= 0)
45       reader.unread(ch);
46       }
47     int line2 = reader.getLineNumber() + 1;
48     int column2 = reader.getColumnNumber() + 1;
49     Object JavaDoc operand = reader.readObject();
50     return PairWithPosition.make(magic,
51                                  PairWithPosition.make(operand,
52                                                        reader.makeNil(),
53                                                        file, line2, column2),
54                                  file, line1, column1);
55   }
56 }
57
Popular Tags