Javolution 6.0.0 java
XMLStreamReaderImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.xml.internal.stream;
10 
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.io.InputStreamReader;
14 import java.io.Reader;
15 import java.io.UnsupportedEncodingException;
16 import java.util.Map;
18 import javolution.lang.Realtime;
27 
37 @Realtime
38 public final class XMLStreamReaderImpl implements XMLStreamReader {
39 
43  static final String[] NAMES_OF_EVENTS = new String[] { "UNDEFINED",
44  "START_ELEMENT", "END_ELEMENT", "PROCESSING_INSTRUCTIONS",
45  "CHARACTERS", "COMMENT", "SPACE", "START_DOCUMENT", "END_DOCUMENT",
46  "ENTITY_REFERENCE", "ATTRIBUTE", "DTD", "CDATA", "NAMESPACE",
47  "NOTATION_DECLARATION", "ENTITY_DECLARATION" };
48 
52  static final int READER_BUFFER_CAPACITY = 4096;
53 
58 
62  private int _readIndex;
63 
67  private int _readCount;
68 
72  private char[] _data = new char[READER_BUFFER_CAPACITY * 2];
73 
77  private int _index;
78 
82  private int _depth;
83 
87  private CharArray _qName;
88 
92  private int _prefixSep;
93 
98 
102  private int _attrPrefixSep;
103 
108 
112  private int _eventType = START_DOCUMENT;
113 
117  private boolean _isEmpty;
118 
122  boolean _charactersPending = false;
123 
127  private int _start;
128 
132  private int _state = STATE_CHARACTERS;
133 
137  private CharArray _text;
138 
142  private Reader _reader;
143 
147  private final char[] _readBuffer = new char[READER_BUFFER_CAPACITY];
148 
153  private int _startOffset; // Byte Order Mark count.
154 
158  private final LocationImpl _location = new LocationImpl();
159 
164 
169 
173  private CharArray[] _elemStack = new CharArray[16];
174 
178  private String _encoding;
179 
183  private final EntitiesImpl _entities = new EntitiesImpl();
184 
189 
194 
199  this(null);
200  }
201 
206  _factory = factory;
207  }
208 
216  public void setInput(InputStream in) throws XMLStreamException {
217  setInput(in, detectEncoding(in));
218  CharArray prologEncoding = getCharacterEncodingScheme();
219 
220  // Checks if necessary to change the reader.
221  if ((prologEncoding != null) && !prologEncoding.equals(_encoding)
222  && !(isUTF8(prologEncoding) && isUTF8(_encoding))) {
223  // Changes reader (keep characters already read).
224  int startOffset = _readCount;
225  reset();
226  _startOffset = startOffset;
227  setInput(in, prologEncoding.toString());
228  }
229  }
230 
231  private static boolean isUTF8(Object encoding) {
232  return encoding.equals("utf-8") || encoding.equals("UTF-8")
233  || encoding.equals("ASCII") || encoding.equals("utf8")
234  || encoding.equals("UTF8");
235  }
236 
243  public void setInput(InputStream in, String encoding)
244  throws XMLStreamException {
245  _encoding = encoding;
246  if (isUTF8(encoding)) { // Use our fast UTF-8 Reader.
248  } else {
249  try {
250  setInput(new InputStreamReader(in, encoding));
251  } catch (UnsupportedEncodingException e) {
252  throw new XMLStreamException(e);
253  }
254  }
255  }
256 
266  public void setInput(Reader reader) throws XMLStreamException {
267  if (_reader != null)
268  throw new IllegalStateException("Reader not closed or reset");
269  _reader = reader;
270  try { // Reads prolog (if there)
271  int readCount = reader.read(_readBuffer, _startOffset,
272  _readBuffer.length - _startOffset);
273  _readCount = (readCount >= 0) ? readCount + _startOffset
274  : _startOffset;
275  if ((_readCount >= 5) && (_readBuffer[0] == '<')
276  && (_readBuffer[1] == '?') && (_readBuffer[2] == 'x')
277  && (_readBuffer[3] == 'm') && (_readBuffer[4] == 'l')
278  && (_readBuffer[5] == ' ')) { // Prolog detected.
279  next(); // Processing instruction.
280  _prolog = this.getPIData();
281  _index = _prolog.offset() + _prolog.length(); // Keep prolog.
282  _start = _index; // Default state.
283  _eventType = START_DOCUMENT; // Resets to START_DOCUMENT.
284  }
285  } catch (IOException e) {
286  throw new XMLStreamException(e);
287  }
288  }
289 
305  public int getDepth() {
306  return _depth;
307  }
308 
315  public CharArray getQName() {
318  throw new IllegalStateException(
319  "Not a start element or an end element");
320  return _qName;
321  }
322 
330  public CharArray getQName(int depth) {
331  if (depth > this.getDepth())
332  throw new IllegalArgumentException();
333  return _elemStack[depth];
334  }
335 
344  throw new IllegalStateException("Not a start element");
345  return _attributes;
346  }
347 
365  public void setEntities(Map<String, String> entities) {
366  _entities.setEntitiesMapping(entities);
367  }
368 
374  public String toString() {
375  return "XMLStreamReader - State: " + NAMES_OF_EVENTS[_eventType]
376  + ", Location: " + _location.toString();
377  }
378 
379  // Implements XMLStreamReader Interface.
380  public int next() throws XMLStreamException {
381 
382  // Clears previous state.
383  if (_eventType == START_ELEMENT) {
384  if (_isEmpty) { // Previous empty tag, generates END_TAG automatically.
385  _isEmpty = false;
386  return _eventType = END_ELEMENT;
387  }
388  } else if (_eventType == END_ELEMENT) {
389  _namespaces.pop();
390  CharArray startElem = _elemStack[_depth--];
391  _start = _index = startElem.offset();
392  while (_seqs[--_seqsIndex] != startElem) { // Recycles CharArray instances.
393  }
394  }
395  // Reader loop.
396  while (true) {
397 
398  // Main character reading block.
399  if ((_readIndex >= _readCount) && isEndOfStream())
400  return _eventType; // END_DOCUMENT or CHARACTERS.
401  char c = _readBuffer[_readIndex++];
402  if (c <= '&')
403  c = (c == '&') ? replaceEntity()
404  : (c < ' ') ? handleEndOfLine(c) : c;
405  _data[_index++] = c;
406 
407  // Main processing.
408  //
409  switch (_state) {
410 
411  case STATE_CHARACTERS:
412  while (true) { // Read characters data all at once.
413 
414  if (c == '<') {
415  int length = _index - _start - 1;
416  if (length > 0) {
417  if (_charactersPending) {
419  _text.length() + length); // Coalescing.
420  } else {
421  _text = newSeq(_start, length);
422  _charactersPending = true;
423  }
424  _start = _index - 1; // Keeps '<' as part of markup.
425  }
427  break;
428  }
429 
430  // Local character reading block.
431  if ((_readIndex >= _readCount) && isEndOfStream())
432  return _eventType;
433  c = _readBuffer[_readIndex++];
434  if (c <= '&')
435  c = (c == '&') ? replaceEntity()
436  : (c < ' ') ? handleEndOfLine(c) : c;
437  _data[_index++] = c;
438  }
439  break;
440 
441  case STATE_CDATA:
442  while (true) { // Reads CDATA all at once.
443 
444  if ((c == '>') && (_index - _start >= 3)
445  && (_data[_index - 2] == ']')
446  && (_data[_index - 3] == ']')) {
447  _index -= 3;
448  int length = _index - _start;
449  if (length > 0) { // Not empty.
450  if (_charactersPending) {
452  _text.length() + length); // Coalescing.
453  } else {
454  _text = newSeq(_start, length);
455  _charactersPending = true;
456  }
457  }
458  _start = _index;
460  break;
461  }
462 
463  // Local character reading block.
464  if (_readIndex >= _readCount)
465  reloadBuffer();
466  c = _readBuffer[_readIndex++];
467  if (c < ' ')
468  c = handleEndOfLine(c);
469  _data[_index++] = c;
470  }
471  break;
472 
473  case STATE_DTD:
474  if (c == '>') {
476  _index = _start; // Do not keep DTD.
478  return _eventType = DTD;
479  } else if (c == '[') {
481  }
482  break;
483 
484  case STATE_DTD_INTERNAL:
485  if (c == ']') {
486  _state = STATE_DTD;
487  }
488  break;
489 
490  case STATE_MARKUP: // Starts with '<'
491  if (_index - _start == 2) {
492  if (c == '/') {
493  _start = _index = _index - 2;
495  _prefixSep = -1;
496  if (_charactersPending) { // Flush characters event.
497  _charactersPending = false;
498  return _eventType = CHARACTERS;
499  }
500  } else if (c == '?') {
501  _start = _index = _index - 2;
502  _state = STATE_PI;
503  if (_charactersPending) { // Flush characters event.
504  _charactersPending = false;
505  return _eventType = CHARACTERS;
506  }
507  } else if (c != '!') { // Element tag (first letter).
508  _data[_start] = c;
509  _index = _start + 1;
511  _prefixSep = -1;
512  if (_charactersPending) { // Flush character event.
513  _charactersPending = false;
514  return _eventType = CHARACTERS;
515  }
516  }
517  } else if ((_index - _start == 4)
518  && (_data[_start + 1] == '!')
519  && (_data[_start + 2] == '-')
520  && (_data[_start + 3] == '-')) {
521  _start = _index = _index - 4; // Removes <!--
523  if (_charactersPending) { // Flush character event.
524  _charactersPending = false;
525  return _eventType = CHARACTERS;
526  }
527 
528  } else if ((_index - _start == 9)
529  && (_data[_start + 1] == '!')
530  && (_data[_start + 2] == '[')
531  && (_data[_start + 3] == 'C')
532  && (_data[_start + 4] == 'D')
533  && (_data[_start + 5] == 'A')
534  && (_data[_start + 6] == 'T')
535  && (_data[_start + 7] == 'A')
536  && (_data[_start + 8] == '[')) {
537  _start = _index = _index - 9; // Do not keep <![CDATA[
539 
540  } else if ((_index - _start == 9)
541  && (_data[_start + 1] == '!')
542  && (_data[_start + 2] == 'D')
543  && (_data[_start + 3] == 'O')
544  && (_data[_start + 4] == 'C')
545  && (_data[_start + 5] == 'T')
546  && (_data[_start + 6] == 'Y')
547  && (_data[_start + 7] == 'P')
548  && (_data[_start + 8] == 'E')) {
549  // Keeps <!DOCTYPE as part of DTD.
550  _state = STATE_DTD;
551  } else {
552  // Ignores, e.g. <!ELEMENT <!ENTITY...
553  }
554  break;
555 
556  case STATE_COMMENT:
557  while (true) { // Read comment all at once.
558 
559  if ((c == '>') && (_index - _start >= 3)
560  && (_data[_index - 2] == '-')
561  && (_data[_index - 3] == '-')) {
562  _index -= 3; // Removes -->
565  _index = _start; // Do not keep comments.
566  return _eventType = COMMENT;
567  }
568 
569  // Local character reading block.
570  if (_readIndex >= _readCount)
571  reloadBuffer();
572  c = _readBuffer[_readIndex++];
573  if (c < ' ')
574  c = handleEndOfLine(c);
575  _data[_index++] = c;
576  }
577 
578  case STATE_PI:
579  if ((c == '>') && (_index - _start >= 2)
580  && (_data[_index - 2] == '?')) {
581  _index -= 2; // Removes ?>
584  _index = _start; // Do not keep processing instructions.
586  }
587  break;
588 
589  // OPEN_TAG:
591  _attributes.reset();
592  _namespaces.push();
593  while (true) { // Read element name all at once.
594 
595  if (c < '@') { // Else avoid multiple checks.
596  if (c == '>') {
597  _qName = newSeq(_start, --_index - _start);
598  _start = _index;
600  processStartTag();
601  _isEmpty = false;
602  return _eventType = START_ELEMENT;
603  } else if (c == '/') {
604  _qName = newSeq(_start, --_index - _start);
605  _start = _index;
607  break;
608  } else if (c == ':') {
609  _prefixSep = _index - 1;
610  } else if (c <= ' ') {
611  _qName = newSeq(_start, --_index - _start);
613  break;
614  }
615  }
616 
617  if (_readIndex >= _readCount)
618  reloadBuffer();
619  c = _data[_index++] = _readBuffer[_readIndex++];
620  }
621  break;
622 
624  if (c == '>') {
625  _start = --_index;
627  processStartTag();
628  _isEmpty = false;
629  return _eventType = START_ELEMENT;
630  } else if (c == '/') {
632  } else if (c > ' ') {
633  _start = _index - 1; // Includes current character.
634  _attrPrefixSep = -1;
636  }
637  break;
638 
640  while (true) { // Read attribute name all at once.
641 
642  if (c < '@') { // Else avoid multiple checks.
643  if (c <= ' ') {
646  break;
647  } else if (c == '=') {
650  break;
651  } else if (c == ':') {
652  _attrPrefixSep = _index - 1;
653  }
654  }
655 
656  if (_readIndex >= _readCount)
657  reloadBuffer();
658  _data[_index++] = c = _readBuffer[_readIndex++];
659  }
660  break;
661 
663  if (c == '=') {
664  --_index;
666  } else if (c > ' ') { throw new XMLStreamException(
667  "'=' expected", _location); }
668  break;
669 
671  if (c == '\'') {
672  _start = --_index;
674  } else if (c == '\"') {
675  _start = --_index;
677  } else if (c > ' ') { throw new XMLStreamException(
678  "Quotes expected", _location); }
679  break;
680 
682  while (true) { // Read attribute value all at once.
683 
684  if (c == '\'') {
688  break;
689  }
690 
691  // Local character reading block.
692  if (_readIndex >= _readCount)
693  reloadBuffer();
694  c = _readBuffer[_readIndex++];
695  if (c == '&')
696  c = replaceEntity();
697  _data[_index++] = c;
698  }
699  break;
700 
702  while (true) { // Read attribute value all at once.
703 
704  if (c == '\"') {
708  break;
709  }
710 
711  // Local character reading block.
712  if (_readIndex >= _readCount)
713  reloadBuffer();
714  c = _readBuffer[_readIndex++];
715  if (c == '&')
716  c = replaceEntity();
717  _data[_index++] = c;
718  }
719  break;
720 
722  if (c == '>') {
723  _start = --_index;
725  processStartTag();
726  _isEmpty = true;
727  return _eventType = START_ELEMENT;
728  } else {
729  throw new XMLStreamException("'>' expected", _location);
730  }
731 
732  // CLOSE_TAG:
734  while (true) { // Element name can be read all at once.
735 
736  if (c < '@') { // Else avoid multiple checks.
737  if (c == '>') {
738  _qName = newSeq(_start, --_index - _start);
739  _start = _index;
741  processEndTag();
742  return _eventType = END_ELEMENT;
743  } else if (c == ':') {
744  _prefixSep = _index - 1;
745  } else if (c <= ' ') {
746  _qName = newSeq(_start, --_index - _start);
748  break;
749  }
750  }
751 
752  if (_readIndex >= _readCount)
753  reloadBuffer();
754  c = _data[_index++] = _readBuffer[_readIndex++];
755  }
756  break;
757 
759  if (c == '>') {
760  _start = --_index;
762  processEndTag();
763  return _eventType = END_ELEMENT;
764  } else if (c > ' ') { throw new XMLStreamException(
765  "'>' expected", _location); }
766  break;
767 
768  default:
769  throw new XMLStreamException("State unknown: " + _state,
770  _location);
771  }
772  }
773  }
774 
775  // Defines parsing states (keep values close together to avoid lookup).
776  private static final int STATE_CHARACTERS = 1;
777 
778  private static final int STATE_MARKUP = 2;
779 
780  private static final int STATE_COMMENT = 3;
781 
782  private static final int STATE_PI = 4;
783 
784  private static final int STATE_CDATA = 5;
785 
786  private static final int STATE_OPEN_TAGxREAD_ELEM_NAME = 6;
787 
788  private static final int STATE_OPEN_TAGxELEM_NAME_READ = 7;
789 
790  private static final int STATE_OPEN_TAGxREAD_ATTR_NAME = 8;
791 
792  private static final int STATE_OPEN_TAGxATTR_NAME_READ = 9;
793 
794  private static final int STATE_OPEN_TAGxEQUAL_READ = 10;
795 
796  private static final int STATE_OPEN_TAGxREAD_ATTR_VALUE_SIMPLE_QUOTE = 11;
797 
798  private static final int STATE_OPEN_TAGxREAD_ATTR_VALUE_DOUBLE_QUOTE = 12;
799 
800  private static final int STATE_OPEN_TAGxEMPTY_TAG = 13;
801 
802  private static final int STATE_CLOSE_TAGxREAD_ELEM_NAME = 14;
803 
804  private static final int STATE_CLOSE_TAGxELEM_NAME_READ = 15;
805 
806  private static final int STATE_DTD = 16;
807 
808  private static final int STATE_DTD_INTERNAL = 17;
809 
818  private void reloadBuffer() throws XMLStreamException {
819  if (_reader == null)
820  throw new XMLStreamException("Input not specified");
823  _readIndex = 0;
824  try {
825  _readCount = _reader.read(_readBuffer, 0, _readBuffer.length);
826  if ((_readCount <= 0)
827  && ((_depth != 0) || (_state != STATE_CHARACTERS)))
828  throw new XMLStreamException("Unexpected end of document",
829  _location);
830  } catch (IOException e) {
831  throw new XMLStreamException(e);
832  }
833  while ((_index + _readCount) >= _data.length) { // Potential overflow.
835  }
836  }
837 
845  private boolean isEndOfStream() throws XMLStreamException {
846  if (_readIndex >= _readCount)
847  reloadBuffer();
848  if (_readCount <= 0) {
849  // _state == STATE_CHARACTERS (otherwise reloadBuffer() exception)
850  if (_eventType == END_DOCUMENT)
851  throw new XMLStreamException(
852  "End document has already been reached");
853  int length = _index - _start;
854  if (length > 0) { // Flushes trailing characters.
855  if (_charactersPending) {
857  + length); // Coalescing.
858  } else {
859  _text = newSeq(_start, length);
860  }
861  _start = _index;
863  } else {
865  }
866  return true;
867  }
868  return false;
869  }
870 
877  private char handleEndOfLine(char c) throws XMLStreamException {
878  if (c == 0xD) { // Replaces #xD with #xA
879  // Unless next char is #xA, then skip,
880  // #xD#xA will be replaced by #xA
881  if (_readIndex >= _readCount)
882  reloadBuffer();
883  if ((_readIndex < _readCount) && (_readBuffer[_readIndex] == 0xA))
884  _readIndex++; // Skips 0xD
885  c = (char) 0xA;
886  }
887  if (c == 0xA) {
888  _location._line++;
889  _location._column = -_readIndex; // column = 0
890  } else if (c == 0x0) { throw new XMLStreamException(
891  "Illegal XML character U+0000", _location); }
892  return c;
893  }
894 
901  private char replaceEntity() throws XMLStreamException {
902  if ((_state == STATE_COMMENT) || (_state == STATE_PI)
903  || (_state == STATE_CDATA))
904  return '&'; // (&2.4)
905 
906  int start = _index; // Index of first replacement character.
907  _data[_index++] = '&';
908  while (true) {
909  if (_readIndex >= _readCount)
910  reloadBuffer();
911  char c = _data[_index++] = _readBuffer[_readIndex++];
912  if (c == ';')
913  break;
914  if (c <= ' ')
915  throw new XMLStreamException("';' expected", _location);
916  }
917  // Ensures that the replacement string holds in the data buffer.
918  while (start + _entities.getMaxLength() >= _data.length) {
920  }
921 
922  // Replaces the entity.
923  int length = _entities.replaceEntity(_data, start, _index - start);
924 
925  // Returns the next character after entity unless ampersand.
926  _index = start + length;
927 
928  // Local character reading block.
929  if (_readIndex >= _readCount)
930  reloadBuffer();
931  char c = _readBuffer[_readIndex++];
932  return (c == '&') ? (c = replaceEntity()) : c;
933  }
934 
938  private void processAttribute() throws XMLStreamException {
939  if (_attrPrefixSep < 0) { // No prefix.
940  if (isXMLNS(_attrQName)) { // Sets default namespace.
942  } else {
944  _attrValue);
945  }
946  } else { // Prefix.
947  final int offset = _attrQName.offset();
948  final int length = _attrQName.length();
949 
950  CharArray prefix = newSeq(offset, _attrPrefixSep - offset);
951 
952  CharArray localName = newSeq(_attrPrefixSep + 1, offset + length
953  - _attrPrefixSep - 1);
954 
955  if (isXMLNS(prefix)) { // Namespace association.
956  _namespaces.setPrefix(localName, _attrValue);
957  } else {
958  _attributes.addAttribute(localName, prefix, _attrQName,
959  _attrValue);
960  }
961  }
962  }
963 
964  private static boolean isXMLNS(CharArray chars) {
965  return (chars.length() == 5) && (chars.charAt(0) == 'x')
966  && (chars.charAt(1) == 'm') && (chars.charAt(2) == 'l')
967  && (chars.charAt(3) == 'n') && (chars.charAt(4) == 's');
968  }
969 
970  private void processEndTag() throws XMLStreamException {
972  throw new XMLStreamException("Unexpected end tag for " + _qName,
973  _location);
974  }
975 
976  private void processStartTag() throws XMLStreamException {
977  if (++_depth >= _elemStack.length) {
978  increaseStack();
979  }
981  }
982 
983  // Implements Reusable.
984  public void reset() {
985  // Resets all members (alphabetically ordered).
986  _attributes.reset();
987  _attrPrefixSep = 0;
988  _attrQName = null;
989  _attrValue = null;
990  _attrQName = null;
991  _charactersPending = false;
992  _encoding = null;
993  _entities.reset();
995  _index = 0;
996  _isEmpty = false;
997  _location.reset();
998  _namespaces.reset();
999  _prolog = null;
1000  _readCount = 0;
1001  _reader = null;
1002  _depth = 0;
1003  _readIndex = 0;
1004  _seqsIndex = 0;
1005  _start = 0;
1006  _startOffset = 0;
1009 
1010  // Recycles if factory produced.
1011  if (_factory != null)
1012  _factory.recycle(this);
1013  }
1014 
1015  // Returns a new character sequence from the pool.
1016  private CharArray newSeq(int offset, int length) {
1018  : newSeq2();
1019  return seq.setArray(_data, offset, length);
1020  }
1021 
1022  private CharArray newSeq2() {
1023  _createSeqLogic.run();
1024  return _seqs[_seqsIndex++];
1025  }
1026 
1027  private final Runnable _createSeqLogic = new Runnable() {
1028 
1029  public void run() {
1030  if (_seqsCapacity >= _seqs.length) { // Resizes.
1031  CharArray[] tmp = new CharArray[_seqs.length * 2];
1032  System.arraycopy(_seqs, 0, tmp, 0, _seqs.length);
1033  _seqs = tmp;
1034  }
1035  CharArray seq = new CharArray();
1036  _seqs[_seqsCapacity++] = seq;
1037  }
1038 
1039  };
1040 
1041  private CharArray[] _seqs = new CharArray[256];
1042 
1043  private int _seqsIndex;
1044 
1045  private int _seqsCapacity;
1046 
1047  // Increases internal data buffer capacity.
1048  private void increaseDataBuffer() {
1049  // Note: The character data at any nesting level is discarded
1050  // only when moving to outer nesting level (due to coalescing).
1051  // This accumulation may cause resize of the data buffer if
1052  // numerous elements at the same nesting level are separated by
1053  // spaces or indentation.
1054  char[] tmp = new char[_data.length * 2];
1056  "XMLStreamReaderImpl: Data buffer increased to " + tmp.length));
1057  System.arraycopy(_data, 0, tmp, 0, _data.length);
1058  _data = tmp;
1059  }
1060 
1061  // Increases statck.
1062  private void increaseStack() {
1063  CharArray[] tmp = new CharArray[_elemStack.length * 2];
1065  "XMLStreamReaderImpl: CharArray stack increased to "
1066  + tmp.length));
1067  System.arraycopy(_elemStack, 0, tmp, 0, _elemStack.length);
1068  _elemStack = tmp;
1069  }
1070 
1074  private final class LocationImpl implements Location {
1075 
1076  int _column;
1077 
1078  int _line;
1079 
1081 
1082  public int getLineNumber() {
1083  return _line + 1;
1084  }
1085 
1086  public int getColumnNumber() {
1087  return _column + _readIndex;
1088  }
1089 
1090  public int getCharacterOffset() {
1091  return _charactersRead + _readIndex;
1092  }
1093 
1094  public String getPublicId() {
1095  return null; // Not available.
1096  }
1097 
1098  public String getSystemId() {
1099  return null; // Not available.
1100  }
1101 
1102  public String toString() {
1103  return "Line " + getLineNumber() + ", Column " + getColumnNumber();
1104  }
1105 
1106  public void reset() {
1107  _line = 0;
1108  _column = 0;
1109  _charactersRead = 0;
1110  }
1111 
1112  }
1113 
1115  // Implements XMLStreamReader Interface //
1117  // Implements XMLStreamReader Interface.
1118  public void require(int type, CharSequence namespaceURI,
1119  CharSequence localName) throws XMLStreamException {
1120  if (_eventType != type)
1121  throw new XMLStreamException("Expected event: "
1122  + NAMES_OF_EVENTS[type] + ", found event: "
1124  if ((namespaceURI != null) && !getNamespaceURI().equals(namespaceURI))
1125  throw new XMLStreamException("Expected namespace URI: "
1126  + namespaceURI + ", found: " + getNamespaceURI());
1127  if ((localName != null) && !getLocalName().equals(localName))
1128  throw new XMLStreamException("Expected local name: " + localName
1129  + ", found: " + getLocalName());
1130  }
1131 
1132  // Implements XMLStreamReader Interface.
1134  // Derived from interface specification code.
1136  "Parser must be on START_ELEMENT to read next text",
1137  getLocation()); }
1138  CharArray text = null;
1139  int eventType = next();
1140  while (eventType != XMLStreamConstants.END_ELEMENT) {
1141  if (eventType == XMLStreamConstants.CHARACTERS) {
1142  if (text == null) {
1143  text = getText();
1144  } else { // Merge (adjacent text, comments and PI are not kept).
1145  text.setArray(_data, text.offset(), text.length()
1146  + getText().length());
1147  }
1148  } else if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION
1149  || eventType == XMLStreamConstants.COMMENT) {
1150  // Skips (not kept).
1151  } else if (eventType == XMLStreamConstants.END_DOCUMENT) {
1152  throw new XMLStreamException(
1153  "Unexpected end of document when reading element text content",
1154  getLocation());
1155  } else if (eventType == XMLStreamConstants.START_ELEMENT) {
1156  throw new XMLStreamException(
1157  "Element text content may not contain START_ELEMENT",
1158  getLocation());
1159  } else {
1160  throw new XMLStreamException("Unexpected event type "
1161  + NAMES_OF_EVENTS[eventType], getLocation());
1162  }
1163  eventType = next();
1164  }
1165  return (text != null) ? text : newSeq(0, 0);
1166  }
1167 
1168  // Implements XMLStreamReader Interface.
1169  public Object getProperty(String name) throws IllegalArgumentException {
1170  if (name.equals(XMLInputFactory.IS_COALESCING)) {
1171  return Boolean.TRUE;
1172  } else if (name.equals(XMLInputFactory.ENTITIES)) {
1173  return _entities.getEntitiesMapping();
1174  } else {
1175  throw new IllegalArgumentException("Property: " + name
1176  + " not supported");
1177  }
1178  }
1179 
1180  // Implements XMLStreamReader Interface.
1181  public void close() throws XMLStreamException {
1182  reset();
1183  }
1184 
1185  public int getAttributeCount() {
1187  throw illegalState("Not a start element");
1188  return _attributes.getLength();
1189  }
1190 
1191  public CharArray getAttributeLocalName(int index) {
1193  throw illegalState("Not a start element");
1194  return _attributes.getLocalName(index);
1195  }
1196 
1197  public CharArray getAttributeNamespace(int index) {
1199  throw illegalState("Not a start element");
1200  CharArray prefix = _attributes.getPrefix(index);
1201  return _namespaces.getNamespaceURINullAllowed(prefix);
1202  }
1203 
1204  public CharArray getAttributePrefix(int index) {
1206  throw illegalState("Not a start element");
1207  return _attributes.getPrefix(index);
1208  }
1209 
1210  public CharArray getAttributeType(int index) {
1212  throw illegalState("Not a start element");
1213  return _attributes.getType(index);
1214  }
1215 
1216  public CharArray getAttributeValue(CharSequence uri, CharSequence localName) {
1218  throw illegalState("Not a start element");
1219  return (uri == null) ? _attributes.getValue(localName) : _attributes
1220  .getValue(uri, localName);
1221  }
1222 
1223  public CharArray getAttributeValue(int index) {
1225  throw illegalState("Not a start element");
1226  return _attributes.getValue(index);
1227  }
1228 
1230  return readPrologAttribute(ENCODING);
1231  }
1232 
1233  private static final CharArray ENCODING = new CharArray("encoding");
1234 
1235  public String getEncoding() {
1236  return _encoding;
1237  }
1238 
1239  public int getEventType() {
1240  return _eventType;
1241  }
1242 
1246  throw illegalState("Not a start or end element");
1247  if (_prefixSep < 0)
1248  return _qName;
1249  CharArray localName = newSeq(_prefixSep + 1,
1250  _qName.offset() + _qName.length() - _prefixSep - 1);
1251  return localName;
1252  }
1253 
1255  return _location;
1256  }
1257 
1258  public int getNamespaceCount() {
1261  throw illegalState("Not a start or end element");
1263  }
1264 
1265  public CharArray getNamespacePrefix(int index) {
1268  throw illegalState("Not a start or end element");
1269  return _namespaces._prefixes[index];
1270  }
1271 
1272  public CharArray getNamespaceURI(CharSequence prefix) {
1275  throw illegalState("Not a start or end element");
1276  return _namespaces.getNamespaceURI(prefix);
1277  }
1278 
1279  public CharArray getNamespaceURI(int index) {
1282  throw illegalState("Not a start or end element");
1283  return _namespaces._namespaces[index];
1284  }
1285 
1287  return _namespaces;
1288  }
1289 
1292  }
1293 
1297  throw illegalState("Not a start or end element");
1298  if (_prefixSep < 0)
1299  return null;
1300  int offset = _qName.offset();
1301  CharArray prefix = newSeq(offset, _prefixSep - offset);
1302  return prefix;
1303  }
1304 
1307  throw illegalState("Not a processing instruction");
1308  int offset = _text.indexOf(' ') + _text.offset() + 1;
1309  CharArray piData = newSeq(offset, _text.length() - offset);
1310  return piData;
1311  }
1312 
1315  throw illegalState("Not a processing instruction");
1316  CharArray piTarget = newSeq(_text.offset(),
1317  _text.indexOf(' ') + _text.offset());
1318  return piTarget;
1319  }
1320 
1321  public CharArray getText() {
1325  throw illegalState("Not a text event");
1326  return _text;
1327  }
1328 
1329  public char[] getTextCharacters() {
1330  return getText().array();
1331  }
1332 
1333  public int getTextCharacters(int sourceStart, char[] target,
1334  int targetStart, int length) throws XMLStreamException {
1335  CharArray text = getText();
1336  int copyLength = Math.min(length, text.length());
1337  System.arraycopy(text.array(), sourceStart + text.offset(), target,
1338  targetStart, copyLength);
1339  return copyLength;
1340  }
1341 
1342  public int getTextLength() {
1343  return getText().length();
1344  }
1345 
1346  public int getTextStart() {
1347  return getText().offset();
1348  }
1349 
1351  return readPrologAttribute(VERSION);
1352  }
1353 
1354  private static final CharArray VERSION = new CharArray("version");
1355 
1356  public boolean isStandalone() {
1358  return (standalone != null) ? standalone.equals("no") : true;
1359  }
1360 
1361  public boolean standaloneSet() {
1362  return readPrologAttribute(STANDALONE) != null;
1363  }
1364 
1365  private static final CharArray STANDALONE = new CharArray("standalone");
1366 
1367  public boolean hasName() {
1370  }
1371 
1372  public boolean hasNext() throws XMLStreamException {
1374  }
1375 
1376  public boolean hasText() {
1379  && (_text.length() > 0);
1380  }
1381 
1382  public boolean isAttributeSpecified(int index) {
1384  throw new IllegalStateException("Not a start element");
1385  return _attributes.getValue(index) != null;
1386  }
1387 
1388  public boolean isCharacters() {
1390  }
1391 
1392  public boolean isEndElement() {
1394  }
1395 
1396  public boolean isStartElement() {
1398  }
1399 
1400  public boolean isWhiteSpace() {
1401  if (isCharacters()) {
1402  char[] chars = _text.array();
1403  for (int i = _text.offset(), end = _text.offset() + _text.length(); i < end;) {
1404  if (!isWhiteSpace(chars[i++]))
1405  return false;
1406  }
1407  return true;
1408  }
1409  return false;
1410  }
1411 
1412  // Whitespaces according to XML 1.1 Specification.
1413  private static boolean isWhiteSpace(char c) {
1414  return (c == 0x20) || (c == 0x9) || (c == 0xD) || (c == 0xA);
1415  }
1416 
1417  public int nextTag() throws XMLStreamException {
1418  int eventType = next();
1419  while (eventType == XMLStreamConstants.COMMENT
1421  || eventType == XMLStreamConstants.DTD
1422  || (eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace())) {
1423  eventType = next();
1424  }
1425  if (eventType != XMLStreamConstants.START_ELEMENT
1426  && eventType != XMLStreamConstants.END_ELEMENT)
1427  throw new XMLStreamException("Tag expected (but found "
1428  + NAMES_OF_EVENTS[_eventType] + ")");
1429  return eventType;
1430  }
1431 
1432  private IllegalStateException illegalState(String msg) {
1433  return new IllegalStateException(msg + " ("
1434  + NAMES_OF_EVENTS[_eventType] + ")");
1435  }
1436 
1437  private String detectEncoding(InputStream input) throws XMLStreamException {
1438  // Autodetect encoding (see http://en.wikipedia.org/wiki/UTF-16)
1439  int byte0;
1440  try {
1441  byte0 = input.read();
1442  } catch (IOException e) {
1443  throw new XMLStreamException(e);
1444  }
1445  if (byte0 == -1)
1446  throw new XMLStreamException("Premature End-Of-File");
1447  if (byte0 == '<') { // UTF-8 or compatible encoding.
1448  _readBuffer[_startOffset++] = '<';
1449  return "UTF-8";
1450  } else {
1451  int byte1;
1452  try {
1453  byte1 = input.read();
1454  } catch (IOException e) {
1455  throw new XMLStreamException(e);
1456  }
1457  if (byte1 == -1)
1458  throw new XMLStreamException("Premature End-Of-File");
1459  if ((byte0 == 0) && (byte1 == '<')) { // UTF-16 BIG ENDIAN
1460  _readBuffer[_startOffset++] = '<';
1461  return "UTF-16BE";
1462  } else if ((byte0 == '<') && (byte1 == 0)) { // UTF-16 LITTLE ENDIAN
1463  _readBuffer[_startOffset++] = '<';
1464  return "UTF-16LE";
1465  } else if ((byte0 == 0xFF) && (byte1 == 0xFE)) { // BOM for UTF-16 LITTLE ENDIAN
1466  return "UTF-16";
1467  } else if ((byte0 == 0xFE) && (byte1 == 0xFF)) { // BOM for UTF-16 BIG ENDIAN
1468  return "UTF-16";
1469  } else { // Encoding unknown (or no prolog) assumes UTF-8
1470  _readBuffer[_startOffset++] = (char) byte0;
1471  _readBuffer[_startOffset++] = (char) byte1;
1472  return "UTF-8";
1473  }
1474  }
1475  }
1476 
1477  private final CharArray readPrologAttribute(CharSequence name) {
1478  if (_prolog == null)
1479  return null;
1480  final int READ_EQUAL = 0;
1481  final int READ_QUOTE = 1;
1482  final int VALUE_SIMPLE_QUOTE = 2;
1483  final int VALUE_DOUBLE_QUOTE = 3;
1484 
1485  int i = _prolog.indexOf(name);
1486  if (i >= 0) {
1487  i += _prolog.offset();
1488  int maxIndex = _prolog.offset() + _prolog.length();
1489  i += name.length();
1490  int state = READ_EQUAL;
1491  int valueOffset = 0;
1492  while (i < maxIndex) {
1493  char c = _prolog.array()[i++];
1494  switch (state) {
1495  case READ_EQUAL:
1496  if (c == '=') {
1497  state = READ_QUOTE;
1498  }
1499  break;
1500  case READ_QUOTE:
1501  if (c == '"') {
1502  state = VALUE_DOUBLE_QUOTE;
1503  valueOffset = i;
1504  } else if (c == '\'') {
1505  state = VALUE_SIMPLE_QUOTE;
1506  valueOffset = i;
1507  }
1508  break;
1509  case VALUE_SIMPLE_QUOTE:
1510  if (c == '\'')
1511  return newSeq(valueOffset, i - valueOffset - 1);
1512  break;
1513  case VALUE_DOUBLE_QUOTE:
1514  if (c == '"')
1515  return newSeq(valueOffset, i - valueOffset - 1);
1516  break;
1517  }
1518  }
1519  }
1520  return null;
1521  }
1522 
1523 }
javolution.xml.internal.stream.AttributesImpl.getType
CharArray getType(CharSequence qName)
Definition: AttributesImpl.java:125
javolution.xml.internal.stream.XMLStreamReaderImpl.illegalState
IllegalStateException illegalState(String msg)
Definition: XMLStreamReaderImpl.java:1432
javolution.xml.internal.stream.NamespacesImpl.setPrefix
void setPrefix(CharArray prefix, CharArray uri)
Definition: NamespacesImpl.java:152
javolution.xml.internal.stream.XMLStreamReaderImpl.isWhiteSpace
static boolean isWhiteSpace(char c)
Definition: XMLStreamReaderImpl.java:1413
javolution.text.CharArray
Definition: CharArray.java:36
javolution.context.LogContext
Definition: LogContext.java:56
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceContext
NamespaceContext getNamespaceContext()
Definition: XMLStreamReaderImpl.java:1286
javolution.xml.internal.stream.XMLStreamReaderImpl.nextTag
int nextTag()
Definition: XMLStreamReaderImpl.java:1417
javolution.xml.internal.stream.AttributesImpl.addAttribute
void addAttribute(CharArray localName, CharArray prefix, CharArray qName, CharArray value)
Definition: AttributesImpl.java:60
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxEQUAL_READ
static final int STATE_OPEN_TAGxEQUAL_READ
Definition: XMLStreamReaderImpl.java:794
javolution.xml.internal.stream.XMLStreamReaderImpl._createSeqLogic
final Runnable _createSeqLogic
Definition: XMLStreamReaderImpl.java:1027
javolution
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_COMMENT
static final int STATE_COMMENT
Definition: XMLStreamReaderImpl.java:780
javolution.xml.internal.stream.XMLStreamReaderImpl._elemStack
CharArray[] _elemStack
Definition: XMLStreamReaderImpl.java:173
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_MARKUP
static final int STATE_MARKUP
Definition: XMLStreamReaderImpl.java:778
javolution.io.UTF8StreamReader.reset
void reset()
Definition: UTF8StreamReader.java:302
javolution.xml.internal.stream.NamespacesImpl._defaultNsPrefix
final CharArray _defaultNsPrefix
Definition: NamespacesImpl.java:35
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_CDATA
static final int STATE_CDATA
Definition: XMLStreamReaderImpl.java:784
javolution.xml.internal.stream.EntitiesImpl.getMaxLength
int getMaxLength()
Definition: EntitiesImpl.java:44
javolution.xml.internal.stream.XMLStreamReaderImpl.isEndOfStream
boolean isEndOfStream()
Definition: XMLStreamReaderImpl.java:845
javolution.xml.internal.stream.XMLStreamReaderImpl.isStandalone
boolean isStandalone()
Definition: XMLStreamReaderImpl.java:1356
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.toString
String toString()
Definition: XMLStreamReaderImpl.java:1102
javolution.xml.stream.XMLStreamConstants.END_DOCUMENT
static final int END_DOCUMENT
Definition: XMLStreamConstants.java:61
javolution.xml.internal.stream.XMLStreamReaderImpl.increaseDataBuffer
void increaseDataBuffer()
Definition: XMLStreamReaderImpl.java:1048
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_DTD_INTERNAL
static final int STATE_DTD_INTERNAL
Definition: XMLStreamReaderImpl.java:808
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeValue
CharArray getAttributeValue(CharSequence uri, CharSequence localName)
Definition: XMLStreamReaderImpl.java:1216
javolution.xml.internal.stream.XMLStreamReaderImpl.getQName
CharArray getQName()
Definition: XMLStreamReaderImpl.java:315
javolution.xml.stream.XMLStreamConstants
Definition: XMLStreamConstants.java:19
javolution.xml.internal.stream.XMLStreamReaderImpl._eventType
int _eventType
Definition: XMLStreamReaderImpl.java:112
javolution.context
Definition: AbstractContext.java:9
javolution.xml.sax
Definition: Attributes.java:9
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxREAD_ELEM_NAME
static final int STATE_OPEN_TAGxREAD_ELEM_NAME
Definition: XMLStreamReaderImpl.java:786
javolution.xml.internal.stream.XMLStreamReaderImpl.setInput
void setInput(InputStream in)
Definition: XMLStreamReaderImpl.java:216
javolution.io
Definition: AppendableWriter.java:9
javolution.xml.internal.stream.XMLStreamReaderImpl.newSeq2
CharArray newSeq2()
Definition: XMLStreamReaderImpl.java:1022
javolution.xml.internal.stream.AttributesImpl.getPrefix
CharArray getPrefix(int index)
Definition: AttributesImpl.java:113
javolution.xml.internal.stream.EntitiesImpl.getEntitiesMapping
Map< String, String > getEntitiesMapping()
Definition: EntitiesImpl.java:145
javolution.context.LogContext.info
static void info(Object... message)
Definition: LogContext.java:109
javolution.xml.internal.stream.XMLStreamReaderImpl._start
int _start
Definition: XMLStreamReaderImpl.java:127
javolution.xml.internal.stream.XMLStreamReaderImpl.getTextStart
int getTextStart()
Definition: XMLStreamReaderImpl.java:1346
javolution.xml.internal.stream.NamespacesImpl.push
void push()
Definition: NamespacesImpl.java:219
javolution.xml.internal.stream.XMLStreamReaderImpl._readCount
int _readCount
Definition: XMLStreamReaderImpl.java:67
javolution.xml.internal.stream.XMLStreamReaderImpl.getLocalName
CharArray getLocalName()
Definition: XMLStreamReaderImpl.java:1243
javolution.xml.internal.stream.EntitiesImpl.reset
void reset()
Definition: EntitiesImpl.java:150
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_CLOSE_TAGxELEM_NAME_READ
static final int STATE_CLOSE_TAGxELEM_NAME_READ
Definition: XMLStreamReaderImpl.java:804
javolution.xml.internal.stream.AttributesImpl.getValue
CharArray getValue(CharSequence qName)
Definition: AttributesImpl.java:147
javolution.xml.internal.stream.XMLStreamReaderImpl.hasText
boolean hasText()
Definition: XMLStreamReaderImpl.java:1376
javolution.xml.internal.stream.XMLStreamReaderImpl._isEmpty
boolean _isEmpty
Definition: XMLStreamReaderImpl.java:117
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl._column
int _column
Definition: XMLStreamReaderImpl.java:1076
javolution.text.CharArray.equals
boolean equals(Object that)
Definition: CharArray.java:204
javolution.xml.internal.stream.XMLStreamReaderImpl._attributes
final AttributesImpl _attributes
Definition: XMLStreamReaderImpl.java:168
javolution.xml.internal.stream.XMLStreamReaderImpl._namespaces
final NamespacesImpl _namespaces
Definition: XMLStreamReaderImpl.java:163
javolution.xml.internal.stream.XMLStreamReaderImpl._text
CharArray _text
Definition: XMLStreamReaderImpl.java:137
javolution.xml.stream.XMLInputFactory.IS_COALESCING
static final String IS_COALESCING
Definition: XMLInputFactory.java:60
javolution.text.CharArray.offset
int offset()
Definition: CharArray.java:104
javolution.io.UTF8StreamReader
Definition: UTF8StreamReader.java:44
javolution.xml.internal.stream.XMLStreamReaderImpl.next
int next()
Definition: XMLStreamReaderImpl.java:380
javolution.xml.internal.stream.NamespacesImpl._prefixes
CharArray[] _prefixes
Definition: NamespacesImpl.java:54
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeType
CharArray getAttributeType(int index)
Definition: XMLStreamReaderImpl.java:1210
javolution.xml.internal.stream.XMLStreamReaderImpl._utf8StreamReader
final UTF8StreamReader _utf8StreamReader
Definition: XMLStreamReaderImpl.java:188
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl._line
int _line
Definition: XMLStreamReaderImpl.java:1078
javolution.xml.internal.stream.XMLStreamReaderImpl.getText
CharArray getText()
Definition: XMLStreamReaderImpl.java:1321
javolution.xml.internal.stream.XMLStreamReaderImpl._prolog
CharArray _prolog
Definition: XMLStreamReaderImpl.java:57
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl._charactersRead
int _charactersRead
Definition: XMLStreamReaderImpl.java:1080
javolution.xml.internal.stream.XMLStreamReaderImpl._readBuffer
final char[] _readBuffer
Definition: XMLStreamReaderImpl.java:147
javolution.xml.internal.stream.XMLStreamReaderImpl.hasName
boolean hasName()
Definition: XMLStreamReaderImpl.java:1367
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.getSystemId
String getSystemId()
Definition: XMLStreamReaderImpl.java:1098
javolution.text.CharArray.charAt
char charAt(int index)
Definition: CharArray.java:369
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceCount
int getNamespaceCount()
Definition: XMLStreamReaderImpl.java:1258
javolution.xml.internal.stream.EntitiesImpl.setEntitiesMapping
void setEntitiesMapping(Map< String, String > entityToReplacementText)
Definition: EntitiesImpl.java:129
javolution.xml.internal.stream.XMLStreamReaderImpl._index
int _index
Definition: XMLStreamReaderImpl.java:77
javolution.xml.stream.XMLStreamConstants.START_ELEMENT
static final int START_ELEMENT
Definition: XMLStreamConstants.java:24
javolution.xml.internal.stream.XMLStreamReaderImpl.getProperty
Object getProperty(String name)
Definition: XMLStreamReaderImpl.java:1169
javolution.xml.internal.stream.NamespacesImpl._namespacesCount
int[] _namespacesCount
Definition: NamespacesImpl.java:69
javolution.xml.internal.stream.XMLStreamReaderImpl.getTextCharacters
int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
Definition: XMLStreamReaderImpl.java:1333
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxREAD_ATTR_NAME
static final int STATE_OPEN_TAGxREAD_ATTR_NAME
Definition: XMLStreamReaderImpl.java:790
javolution.xml.internal.stream.XMLStreamReaderImpl._seqsCapacity
int _seqsCapacity
Definition: XMLStreamReaderImpl.java:1045
javolution.xml.stream.XMLStreamConstants.COMMENT
static final int COMMENT
Definition: XMLStreamConstants.java:44
javolution.xml.internal.stream.EntitiesImpl
Definition: EntitiesImpl.java:24
javolution.xml.stream.XMLStreamException
Definition: XMLStreamException.java:17
javolution.xml.internal.stream.XMLStreamReaderImpl.getQName
CharArray getQName(int depth)
Definition: XMLStreamReaderImpl.java:330
javolution.xml.internal.stream.XMLStreamReaderImpl._data
char[] _data
Definition: XMLStreamReaderImpl.java:72
javolution.xml.internal.stream.AttributesImpl.reset
void reset()
Definition: AttributesImpl.java:167
javolution.xml.internal.stream.XMLStreamReaderImpl.getTextCharacters
char[] getTextCharacters()
Definition: XMLStreamReaderImpl.java:1329
javolution.xml.internal.stream.XMLStreamReaderImpl.replaceEntity
char replaceEntity()
Definition: XMLStreamReaderImpl.java:901
javolution.xml.internal.stream.XMLStreamReaderImpl.processStartTag
void processStartTag()
Definition: XMLStreamReaderImpl.java:976
javolution.xml.internal.stream.XMLStreamReaderImpl._depth
int _depth
Definition: XMLStreamReaderImpl.java:82
javolution.xml.stream.Location
Definition: Location.java:17
javolution.xml.internal.stream.NamespacesImpl
Definition: NamespacesImpl.java:22
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceURI
CharArray getNamespaceURI(CharSequence prefix)
Definition: XMLStreamReaderImpl.java:1272
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_PI
static final int STATE_PI
Definition: XMLStreamReaderImpl.java:782
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.getCharacterOffset
int getCharacterOffset()
Definition: XMLStreamReaderImpl.java:1090
javolution.lang
Definition: Configurable.java:9
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributePrefix
CharArray getAttributePrefix(int index)
Definition: XMLStreamReaderImpl.java:1204
javolution.xml.internal.stream.XMLStreamReaderImpl.isStartElement
boolean isStartElement()
Definition: XMLStreamReaderImpl.java:1396
javolution.xml.internal.stream.XMLStreamReaderImpl.handleEndOfLine
char handleEndOfLine(char c)
Definition: XMLStreamReaderImpl.java:877
javolution.xml.internal.stream.XMLStreamReaderImpl._charactersPending
boolean _charactersPending
Definition: XMLStreamReaderImpl.java:122
javolution.xml.stream.XMLInputFactory
Definition: XMLInputFactory.java:54
javolution.xml.internal.stream.XMLStreamReaderImpl.getElementText
CharArray getElementText()
Definition: XMLStreamReaderImpl.java:1133
javolution.xml.internal.stream.XMLStreamReaderImpl._attrPrefixSep
int _attrPrefixSep
Definition: XMLStreamReaderImpl.java:102
javolution.text
Definition: CharArray.java:9
javolution.xml.internal.stream.NamespacesImpl.reset
void reset()
Definition: NamespacesImpl.java:227
javolution.xml.internal.stream.XMLStreamReaderImpl.standaloneSet
boolean standaloneSet()
Definition: XMLStreamReaderImpl.java:1361
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeNamespace
CharArray getAttributeNamespace(int index)
Definition: XMLStreamReaderImpl.java:1197
javolution.xml.internal.stream.XMLStreamReaderImpl.isUTF8
static boolean isUTF8(Object encoding)
Definition: XMLStreamReaderImpl.java:231
javolution.xml.internal.stream.XMLStreamReaderImpl.toString
String toString()
Definition: XMLStreamReaderImpl.java:374
javolution.xml.internal.stream.XMLStreamReaderImpl._seqs
CharArray[] _seqs
Definition: XMLStreamReaderImpl.java:1041
javolution.xml.internal.stream.XMLStreamReaderImpl.XMLStreamReaderImpl
XMLStreamReaderImpl()
Definition: XMLStreamReaderImpl.java:198
javolution.xml.stream.XMLStreamConstants.CHARACTERS
static final int CHARACTERS
Definition: XMLStreamConstants.java:39
javolution.xml.stream.NamespaceContext
Definition: NamespaceContext.java:20
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_CHARACTERS
static final int STATE_CHARACTERS
Definition: XMLStreamReaderImpl.java:776
javolution.xml.internal.stream.XMLStreamReaderImpl.setInput
void setInput(InputStream in, String encoding)
Definition: XMLStreamReaderImpl.java:243
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.reset
void reset()
Definition: XMLStreamReaderImpl.java:1106
javolution.xml.internal.stream.XMLStreamReaderImpl.getEncoding
String getEncoding()
Definition: XMLStreamReaderImpl.java:1235
javolution.xml.internal.stream.XMLStreamReaderImpl.reloadBuffer
void reloadBuffer()
Definition: XMLStreamReaderImpl.java:818
javolution.xml.internal.stream.AttributesImpl
Definition: AttributesImpl.java:11
javolution.io.UTF8StreamReader.setInput
UTF8StreamReader setInput(InputStream inStream)
Definition: UTF8StreamReader.java:95
javolution.xml.internal.stream.XMLStreamReaderImpl.increaseStack
void increaseStack()
Definition: XMLStreamReaderImpl.java:1062
javolution.xml.stream.XMLStreamConstants.END_ELEMENT
static final int END_ELEMENT
Definition: XMLStreamConstants.java:29
javolution.xml.internal.stream.XMLStreamReaderImpl
Definition: XMLStreamReaderImpl.java:38
javolution.xml.internal.stream.XMLStreamReaderImpl.getDepth
int getDepth()
Definition: XMLStreamReaderImpl.java:305
javolution.text.CharArray.length
int length()
Definition: CharArray.java:95
javolution.xml.internal.stream.XMLStreamReaderImpl.NAMES_OF_EVENTS
static final String[] NAMES_OF_EVENTS
Definition: XMLStreamReaderImpl.java:43
javolution.xml.internal.stream.XMLStreamReaderImpl.READER_BUFFER_CAPACITY
static final int READER_BUFFER_CAPACITY
Definition: XMLStreamReaderImpl.java:52
javolution.xml.internal.stream.XMLStreamReaderImpl.isAttributeSpecified
boolean isAttributeSpecified(int index)
Definition: XMLStreamReaderImpl.java:1382
javolution.xml.internal.stream.EntitiesImpl.replaceEntity
int replaceEntity(char[] buffer, int start, int length)
Definition: EntitiesImpl.java:59
javolution.xml.internal.stream.XMLStreamReaderImpl._state
int _state
Definition: XMLStreamReaderImpl.java:132
javolution.xml.internal.stream.NamespacesImpl.getNamespaceURI
CharArray getNamespaceURI(CharSequence prefix)
Definition: NamespacesImpl.java:95
javolution.xml.internal.stream.XMLInputFactoryImpl.recycle
void recycle(XMLStreamReaderImpl reader)
Definition: XMLInputFactoryImpl.java:83
javolution.xml.internal.stream.XMLStreamReaderImpl.XMLStreamReaderImpl
XMLStreamReaderImpl(XMLInputFactoryImpl factory)
Definition: XMLStreamReaderImpl.java:205
javolution.xml.internal.stream.XMLStreamReaderImpl.setInput
void setInput(Reader reader)
Definition: XMLStreamReaderImpl.java:266
javolution.text.CharArray.toString
String toString()
Definition: CharArray.java:175
javolution.xml.internal.stream.XMLInputFactoryImpl
Definition: XMLInputFactoryImpl.java:22
javolution.xml.internal.stream.XMLStreamReaderImpl.reset
void reset()
Definition: XMLStreamReaderImpl.java:984
javolution.xml.internal.stream.XMLStreamReaderImpl.processAttribute
void processAttribute()
Definition: XMLStreamReaderImpl.java:938
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_CLOSE_TAGxREAD_ELEM_NAME
static final int STATE_CLOSE_TAGxREAD_ELEM_NAME
Definition: XMLStreamReaderImpl.java:802
javolution.xml.internal.stream.XMLStreamReaderImpl.hasNext
boolean hasNext()
Definition: XMLStreamReaderImpl.java:1372
javolution.xml.stream.XMLStreamReader
Definition: XMLStreamReader.java:50
javolution.xml.internal.stream.XMLStreamReaderImpl.isCharacters
boolean isCharacters()
Definition: XMLStreamReaderImpl.java:1388
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.getLineNumber
int getLineNumber()
Definition: XMLStreamReaderImpl.java:1082
javolution.lang.Realtime
Definition: Realtime.java:59
javolution.xml.internal.stream.XMLStreamReaderImpl.getEventType
int getEventType()
Definition: XMLStreamReaderImpl.java:1239
javolution.xml.internal.stream.XMLStreamReaderImpl.close
void close()
Definition: XMLStreamReaderImpl.java:1181
javolution.xml.internal.stream.XMLStreamReaderImpl._prefixSep
int _prefixSep
Definition: XMLStreamReaderImpl.java:92
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl
Definition: XMLStreamReaderImpl.java:1074
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxATTR_NAME_READ
static final int STATE_OPEN_TAGxATTR_NAME_READ
Definition: XMLStreamReaderImpl.java:792
javolution.xml.internal.stream.XMLStreamReaderImpl.isEndElement
boolean isEndElement()
Definition: XMLStreamReaderImpl.java:1392
javolution.xml.stream.XMLInputFactory.ENTITIES
static final String ENTITIES
Definition: XMLInputFactory.java:80
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeLocalName
CharArray getAttributeLocalName(int index)
Definition: XMLStreamReaderImpl.java:1191
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.getPublicId
String getPublicId()
Definition: XMLStreamReaderImpl.java:1094
javolution.xml.internal.stream.XMLStreamReaderImpl.getVersion
CharArray getVersion()
Definition: XMLStreamReaderImpl.java:1350
javolution.text.CharArray.array
char[] array()
Definition: CharArray.java:86
javolution.xml.internal.stream.XMLStreamReaderImpl._qName
CharArray _qName
Definition: XMLStreamReaderImpl.java:87
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxELEM_NAME_READ
static final int STATE_OPEN_TAGxELEM_NAME_READ
Definition: XMLStreamReaderImpl.java:788
javolution.text.CharArray.indexOf
final int indexOf(java.lang.CharSequence csq)
Definition: CharArray.java:132
javolution.xml.internal.stream.XMLStreamReaderImpl._seqsIndex
int _seqsIndex
Definition: XMLStreamReaderImpl.java:1043
javolution.xml.internal.stream.XMLStreamReaderImpl.getLocation
Location getLocation()
Definition: XMLStreamReaderImpl.java:1254
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceURI
CharArray getNamespaceURI()
Definition: XMLStreamReaderImpl.java:1290
javolution.xml.internal.stream.XMLStreamReaderImpl._encoding
String _encoding
Definition: XMLStreamReaderImpl.java:178
javolution.xml.internal.stream.XMLStreamReaderImpl.isWhiteSpace
boolean isWhiteSpace()
Definition: XMLStreamReaderImpl.java:1400
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributes
Attributes getAttributes()
Definition: XMLStreamReaderImpl.java:342
javolution.xml.internal.stream.XMLStreamReaderImpl.processEndTag
void processEndTag()
Definition: XMLStreamReaderImpl.java:970
javolution.xml.sax.Attributes
Definition: Attributes.java:27
javolution.xml.internal.stream.NamespacesImpl._namespaces
CharArray[] _namespaces
Definition: NamespacesImpl.java:59
javolution.xml.internal.stream.AttributesImpl.getLocalName
CharArray getLocalName(int index)
Definition: AttributesImpl.java:108
javolution.xml.internal.stream.XMLStreamReaderImpl.readPrologAttribute
final CharArray readPrologAttribute(CharSequence name)
Definition: XMLStreamReaderImpl.java:1477
javolution.xml.internal.stream.XMLStreamReaderImpl.getPIData
CharArray getPIData()
Definition: XMLStreamReaderImpl.java:1305
javolution.xml.internal.stream.XMLStreamReaderImpl.ENCODING
static final CharArray ENCODING
Definition: XMLStreamReaderImpl.java:1233
javolution.xml.internal.stream.XMLStreamReaderImpl.getPrefix
CharArray getPrefix()
Definition: XMLStreamReaderImpl.java:1294
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespacePrefix
CharArray getNamespacePrefix(int index)
Definition: XMLStreamReaderImpl.java:1265
javolution.xml.internal.stream.XMLStreamReaderImpl._readIndex
int _readIndex
Definition: XMLStreamReaderImpl.java:62
javolution.xml.internal.stream.XMLStreamReaderImpl.STANDALONE
static final CharArray STANDALONE
Definition: XMLStreamReaderImpl.java:1365
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeCount
int getAttributeCount()
Definition: XMLStreamReaderImpl.java:1185
javolution.xml.internal.stream.XMLStreamReaderImpl.getNamespaceURI
CharArray getNamespaceURI(int index)
Definition: XMLStreamReaderImpl.java:1279
javolution.xml.internal.stream.XMLStreamReaderImpl._location
final LocationImpl _location
Definition: XMLStreamReaderImpl.java:158
javolution.xml.internal.stream.XMLStreamReaderImpl.detectEncoding
String detectEncoding(InputStream input)
Definition: XMLStreamReaderImpl.java:1437
javolution.text.CharArray.setArray
CharArray setArray(char[] array, int offset, int length)
Definition: CharArray.java:116
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxREAD_ATTR_VALUE_DOUBLE_QUOTE
static final int STATE_OPEN_TAGxREAD_ATTR_VALUE_DOUBLE_QUOTE
Definition: XMLStreamReaderImpl.java:798
javolution.xml.internal.stream.XMLStreamReaderImpl._factory
final XMLInputFactoryImpl _factory
Definition: XMLStreamReaderImpl.java:193
javolution.xml.stream.XMLStreamConstants.PROCESSING_INSTRUCTION
static final int PROCESSING_INSTRUCTION
Definition: XMLStreamConstants.java:34
javolution.xml.internal.stream.XMLStreamReaderImpl.require
void require(int type, CharSequence namespaceURI, CharSequence localName)
Definition: XMLStreamReaderImpl.java:1118
javolution.xml.internal.stream.XMLStreamReaderImpl.getTextLength
int getTextLength()
Definition: XMLStreamReaderImpl.java:1342
javolution.xml.internal.stream.XMLStreamReaderImpl._attrValue
CharArray _attrValue
Definition: XMLStreamReaderImpl.java:107
javolution.xml
Definition: DefaultXMLFormat.java:9
javolution.xml.internal.stream.XMLStreamReaderImpl._reader
Reader _reader
Definition: XMLStreamReaderImpl.java:142
javolution.xml.internal.stream.XMLStreamReaderImpl.VERSION
static final CharArray VERSION
Definition: XMLStreamReaderImpl.java:1354
javolution.xml.internal.stream.XMLStreamReaderImpl.newSeq
CharArray newSeq(int offset, int length)
Definition: XMLStreamReaderImpl.java:1016
javolution.xml.internal.stream.XMLStreamReaderImpl._attrQName
CharArray _attrQName
Definition: XMLStreamReaderImpl.java:97
javolution.xml.stream
Definition: Location.java:9
javolution.xml.internal.stream.XMLStreamReaderImpl._startOffset
int _startOffset
Definition: XMLStreamReaderImpl.java:153
javolution.xml.internal.stream.XMLStreamReaderImpl.isXMLNS
static boolean isXMLNS(CharArray chars)
Definition: XMLStreamReaderImpl.java:964
javolution.xml.internal.stream.NamespacesImpl.getNamespaceURINullAllowed
CharArray getNamespaceURINullAllowed(CharSequence prefix)
Definition: NamespacesImpl.java:101
javolution.xml.internal.stream.XMLStreamReaderImpl.getAttributeValue
CharArray getAttributeValue(int index)
Definition: XMLStreamReaderImpl.java:1223
javolution.xml.stream.XMLStreamConstants.START_DOCUMENT
static final int START_DOCUMENT
Definition: XMLStreamConstants.java:56
javolution.xml.internal.stream.XMLStreamReaderImpl.getCharacterEncodingScheme
CharArray getCharacterEncodingScheme()
Definition: XMLStreamReaderImpl.java:1229
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxREAD_ATTR_VALUE_SIMPLE_QUOTE
static final int STATE_OPEN_TAGxREAD_ATTR_VALUE_SIMPLE_QUOTE
Definition: XMLStreamReaderImpl.java:796
javolution.xml.internal.stream.NamespacesImpl.pop
void pop()
Definition: NamespacesImpl.java:202
javolution.xml.stream.XMLStreamConstants.DTD
static final int DTD
Definition: XMLStreamConstants.java:76
javolution.xml.internal.stream.AttributesImpl.getLength
int getLength()
Definition: AttributesImpl.java:103
javolution.xml.internal.stream.XMLStreamReaderImpl.LocationImpl.getColumnNumber
int getColumnNumber()
Definition: XMLStreamReaderImpl.java:1086
javolution.xml.internal.stream.XMLStreamReaderImpl.setEntities
void setEntities(Map< String, String > entities)
Definition: XMLStreamReaderImpl.java:365
javolution.xml.internal.stream.XMLStreamReaderImpl.getPITarget
CharArray getPITarget()
Definition: XMLStreamReaderImpl.java:1313
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_OPEN_TAGxEMPTY_TAG
static final int STATE_OPEN_TAGxEMPTY_TAG
Definition: XMLStreamReaderImpl.java:800
javolution.xml.internal.stream.XMLStreamReaderImpl._entities
final EntitiesImpl _entities
Definition: XMLStreamReaderImpl.java:183
javolution.xml.internal.stream.XMLStreamReaderImpl.STATE_DTD
static final int STATE_DTD
Definition: XMLStreamReaderImpl.java:806