package com.ctc.wstx.ent;
import java.io.IOException;
import java.io.Writer;
import java.net.URL;
import javax.xml.stream.Location;
import javax.xml.stream.XMLResolver;
import com.ctc.wstx.api.ReaderConfig;
import com.ctc.wstx.io.InputSourceFactory;
import com.ctc.wstx.io.TextEscaper;
import com.ctc.wstx.io.WstxInputLocation;
import com.ctc.wstx.io.WstxInputSource;
public class IntEntity
extends EntityDecl
{
Location where entity content definition started;
points to the starting/opening quote for internal
entities.
/**
* Location where entity content definition started;
* points to the starting/opening quote for internal
* entities.
*/
protected final Location mContentLocation;
Replacement text of the entity; full array contents.
/**
* Replacement text of the entity; full array contents.
*/
final char[] mRepl;
String mReplText = null;
public IntEntity(Location loc, String name, URL ctxt,
char[] repl, Location defLoc)
{
super(loc, name, ctxt);
mRepl = repl;
mContentLocation = defLoc;
}
public static IntEntity create(String id, String repl)
{
return create(id, repl.toCharArray());
}
public static IntEntity create(String id, char[] val)
{
WstxInputLocation loc = WstxInputLocation.getEmptyLocation();
return new IntEntity(loc, id, null, val, loc);
}
@Override
public String getNotationName() {
return null;
}
@Override
public String getPublicId() {
return null;
}
@Override
public String getReplacementText()
{
String repl = mReplText;
if (repl == null) {
repl = (mRepl.length == 0) ? "" : new String(mRepl);
mReplText = repl;
}
return mReplText;
}
@Override
public int getReplacementText(Writer w) throws IOException
{
w.write(mRepl);
return mRepl.length;
}
@Override
public String getSystemId() {
return null;
}
/*
///////////////////////////////////////////
// Implementation of abstract base methods
///////////////////////////////////////////
*/
@Override
public void writeEnc(Writer w) throws IOException
{
w.write("<!ENTITY ");
w.write(mName);
w.write(" \"");
TextEscaper.outputDTDText(w, mRepl, 0, mRepl.length);
w.write("\">");
}
/*
///////////////////////////////////////////
// Extended API for Wstx core
///////////////////////////////////////////
*/
// // // Access to data
Gives raw access to replacement text data...
Note: this is not really safe, as caller can modify the array, but
since this method is thought to provide fast access, let's avoid making
copy here.
/**
* Gives raw access to replacement text data...
*<p>
* Note: this is not really safe, as caller can modify the array, but
* since this method is thought to provide fast access, let's avoid making
* copy here.
*/
@Override
public char[] getReplacementChars() {
return mRepl;
}
// // // Type information
@Override
public boolean isExternal() { return false; }
@Override
public boolean isParsed() { return true; }
@Override
public WstxInputSource expand(WstxInputSource parent,
XMLResolver res, ReaderConfig cfg,
int xmlVersion)
{
/* 26-Dec-2006, TSa: Better leave source as null, since internal
* entity declaration context should never be used: when expanding,
* reference context is to be used.
*/
return InputSourceFactory.constructCharArraySource
//(parent, mName, mRepl, 0, mRepl.length, mContentLocation, getSource());
(parent, mName, mRepl, 0, mRepl.length, mContentLocation, null);
}
}