f84f4ea07153528a12d96ce39cccef38031e1065
kent
  Fri Aug 23 21:08:18 2019 -0700
Adding 'not' operation and renaming split to word and separate to chop to help distinguish it a bit from python since the split doesn't quite work like python's

diff --git src/lib/tokenizer.c src/lib/tokenizer.c
index 875cd59..2a55077 100644
--- src/lib/tokenizer.c
+++ src/lib/tokenizer.c
@@ -180,37 +180,37 @@
 void tokenizerErrAbort(struct tokenizer *tkz, char *format, ...)
 /* Print error message followed by file and line number and
  * abort. */
 {
 va_list args;
 va_start(args, format);
 vaWarn(format, args);
 errAbort("line %d of %s:\n%s", 
 	tokenizerLineCount(tkz), tokenizerFileName(tkz), tkz->curLine);
 }
 
 void tokenizerNotEnd(struct tokenizer *tkz)
 /* Squawk if at end. */
 {
 if (tkz->eof)
-    errAbort("Unexpected end of input %s", tkz->lf->fileName);
+    errAbort("Unexpected end of input line %d of %s", tkz->lf->lineIx, tkz->lf->fileName);
 }
 
 char *tokenizerMustHaveNext(struct tokenizer *tkz)
 /* Get next token, which must be there. */
 {
 char *s = tokenizerNext(tkz);
 if (s == NULL)
-    errAbort("Unexpected end of input %s", tkz->lf->fileName);
+    errAbort("Unexpected end of input line %d of %s", tkz->lf->lineIx, tkz->lf->fileName);
 return s;
 }
 
 void tokenizerMustMatch(struct tokenizer *tkz, char *string)
 /* Require next token to match string.  Return next token
  * if it does, otherwise abort. */
 {
 if (sameWord(tkz->string, string))
     tokenizerMustHaveNext(tkz);
 else
     tokenizerErrAbort(tkz, "Expecting %s got %s", string, tkz->string);
 }