@@ -103,8 +103,8 @@ public abstract class PrologParser implements Iterable<PrologTerm>, AutoCloseabl
103103 protected final ParserContext context ;
104104 protected final int parserFlags ;
105105 private final Tokenizer tokenizer ;
106- private boolean autoCloseReaderFlag ;
107106 private final List <TokenizedCommentListener > commentTokenListeners ;
107+ private PrologTermReadResult deferredReadTerm ;
108108
109109 protected PrologParser (
110110 final Reader source ,
@@ -149,17 +149,18 @@ public static Koi7CharOpMap findMetaOps() {
149149 return Koi7CharOpMap .copyOf (META_OP_MAP );
150150 }
151151
152+ private static boolean isComment (final TokenizerResult tokenizerResult ) {
153+ return tokenizerResult != null
154+ && tokenizerResult .getResult ().getType () == TermType .ATOM
155+ && (tokenizerResult .getResult ().getQuotation () == Quotation .COMMENT_LINE
156+ || tokenizerResult .getResult ().getQuotation () == Quotation .COMMENT_BLOCK );
157+ }
158+
152159 /**
153- * Set flag to close provided reader automatically during close .
160+ * Access to the internal tokenizer, it is mainly for test purposes because parser makes reading into internal buffers .
154161 *
155- * @return the parser instance
156- * @see PrologParser#close()
162+ * @return the internal tokenizer in use by the parser
157163 */
158- public PrologParser autoCloseReader () {
159- this .autoCloseReaderFlag = true ;
160- return this ;
161- }
162-
163164 public Tokenizer getInternalTokenizer () {
164165 return this .tokenizer ;
165166 }
@@ -180,15 +181,6 @@ public ParserContext getContext() {
180181 return context ;
181182 }
182183
183- private PrologTermReadResult deferredReadTerm ;
184-
185- private static boolean isComment (final TokenizerResult tokenizerResult ) {
186- return tokenizerResult != null
187- && tokenizerResult .getResult ().getType () == TermType .ATOM
188- && (tokenizerResult .getResult ().getQuotation () == Quotation .COMMENT_LINE
189- || tokenizerResult .getResult ().getQuotation () == Quotation .COMMENT_BLOCK );
190- }
191-
192184 private void notifyCommentTokenListeners (final TokenizerResult commentToken ) {
193185 for (final TokenizedCommentListener listener : this .commentTokenListeners ) {
194186 listener .onCommentToken (this , commentToken );
@@ -688,7 +680,18 @@ private void checkForNull(final Object obj, final String message,
688680 @ Override
689681 public void close () throws IOException {
690682 this .deferredReadTerm = null ;
691- this .tokenizer .close (this .autoCloseReaderFlag );
683+ this .tokenizer .close (this .isCloseReader ());
684+ }
685+
686+ /**
687+ * Returns flag to close the base reader. By default the reader will be closed.
688+ *
689+ * @return true if close base reader during its close, false to not close reader
690+ * @see PrologParser#close()
691+ * @since 2.2.0
692+ */
693+ protected boolean isCloseReader () {
694+ return true ;
692695 }
693696
694697 @ Override
0 commit comments