⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brlreaderstring.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
字号:
package gnu.kawa.brl;// BRLRead.java -- a class to read BRL forms// Copyright (C) 2001  Bruce R. Lewis and Eaton Vance Management// See the file COPYING for license terms.import gnu.text.*;import gnu.mapping.InPort;import gnu.lists.*;public class BRLReaderString extends gnu.kawa.lispexpr.ReadTableEntry{  public Object read (Lexer in, int ch, int count)      throws java.io.IOException  {	int startPos = in.tokenBufferLength;	LineBufferedReader port = in.getPort();	char saveReadState = '\0';	int c = ch;	int prev;	char endch;	String startFile = port.getName();	int startLine = port.getLineNumber();	int startColumn = port.getColumnNumber();	switch((char)ch)	    {	    case ']':		// normal BRL case		endch = '[';		break;	    case '}':		endch = '{';		break;	    case '{':		endch = '}';		break;	    case '[':		endch = ']';		break;	    default:		// By default, symmetric string delimiters		endch = (char)ch;		break;	    }	if (port instanceof InPort)	    {		saveReadState = ((InPort) port).readState;		((InPort) port).readState = (char) ch;	    }	try	    {		boolean inString = true;		while (inString)		    {			int next;			prev = c;			if (port.pos < port.limit			    && prev != '\r'			    && prev != '\n')			    c = port.buffer[port.pos++];			else			    /* If no buffered data, or if port			       might update lineNumber */			    c = port.read();			if (c == endch)			    {				if (port.peek() == endch)				    {					in.tokenBufferAppend(c);					port.skip();				    }				else				  {				    inString = false;				    saveReadState = '\n';				    if (in instanceof BRLRead)				      ((BRLRead) in).saveExpressionStartPosition();				  }			    }			else if (c == '\n' && in.isInteractive()				 && ((BRLRead) in).nesting == 0)			  {			    port.unread();			    inString = false;			    in.tokenBufferAppend(c);			  }			else			    {				if (c < 0)				  {				    inString = false;				    if (! in.isInteractive()					&& ((BRLRead) in).nesting > 0)				      in.error('e',					       startFile, startLine + 1,					       startColumn,					       "nested literal text starting here was not ended by a '['");				  }				else				    in.tokenBufferAppend(c);			    }		    }			int length = in.tokenBufferLength - startPos;		if (length == 0)		  return BRL.emptyForm;		else if (((BRLRead) in).isBrlCompatible())		  return new FString(in.tokenBuffer, startPos, length);		else		  {		    String str = new String(in.tokenBuffer, startPos, length);		    return new UnescapedData(str);		  }	    }	finally	    {		in.tokenBufferLength = startPos;		if (port instanceof InPort)		    ((InPort) port).readState = saveReadState;	    }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -