private void readNumber() { tokenStart = position; type = NUMBER; //noinspection UnnecessaryParentheses while (endOfInput() && isDigit()) { nextToken.append(input.charAt(position)); position++; } }
private Calendar parseTime(Calendar result) throws ParseException { int hour = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); int minute = 0; if (in(TIME_SEPARATOR)) { tokenizer.nextToken(); expectNumber(); minute = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); tokenizer.nextToken(); expectNumber(); second = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); tokenizer.nextToken(); } else if (in(PM)) { result.set(Calendar.HOUR, hour); result.set(Calendar.AM_PM, Calendar.PM); result.set(Calendar.HOUR, hour); tokenizer.nextToken(); } else { result.set(Calendar.HOUR_OF_DAY, hour);
private void expectKeyword(String... keywords) throws ParseException { if (!in(keywords)) { StringBuilder allKeywords = new StringBuilder(); Monoflop mf = Monoflop.create(); for (String keyword : keywords) { if (mf.successiveCall()) { allKeywords.append(", "); } allKeywords.append("'"); allKeywords.append(keyword); allKeywords.append("'"); } throw new ParseException(NLS.fmtr("AdvancedDateParser.errUnexpectedKeyword") .set("token", tokenizer.toString()) .set("keywords", allKeywords) .format(), tokenizer.getTokenStart()); } }
private Calendar parseFixPoint() throws ParseException { if (tokenizer.getType() == Tokenizer.NUMBER) { return parseDate(tokenizer); } if (tokenizer.getType() == Tokenizer.SPECIAL) { return now(); } if (tokenizer.getType() == Tokenizer.END_OF_INPUT) { return now(); } if (in(calendarWeek())) { tokenizer.nextToken(); expectNumber(); Calendar result = now(); result.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(tokenizer.getToken())); forceConversion(result); tokenizer.nextToken(); return result; } expectKeyword(nowToken()); tokenizer.nextToken(); return now(); }
private void parseEndModifier() throws ParseException { tokenizer.nextToken(); expectKeyword(join(of(), day(), week(), month(), year())); if (in(of())) { tokenizer.nextToken(); expectKeyword(join(day(), week(), month(), year())); } if (in(day())) { endOfDay = true; } if (in(week())) { endOfWeek = true; } if (in(month())) { endOfMonth = true; } if (in(year())) { endOfYear = true; } }
private void parseStartModifier() throws ParseException { tokenizer.nextToken(); expectKeyword(join(of(), day(), week(), month(), year())); if (in(of())) { tokenizer.nextToken(); expectKeyword(join(day(), week(), month(), year())); } if (in(day())) { startOfDay = true; } if (in(week())) { startOfWeek = true; } if (in(month())) { startOfMonth = true; } if (in(year())) { startOfYear = true; } }
private Calendar parseGermanDate(int day) throws ParseException { tokenizer.nextToken(); expectNumber(); int month = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); int year = now().get(Calendar.YEAR); if (in(GERMAN_DATE_SEPARATOR)) { tokenizer.nextToken(); if (tokenizer.getType() == Tokenizer.NUMBER) { year = Integer.parseInt(tokenizer.getToken()); year = fixYear(year); tokenizer.nextToken(); } } if (tokenizer.getType() == Tokenizer.NUMBER) { return parseTime(buildCalendar(day, month, year)); } return buildCalendar(day, month, year); }
void nextToken() { nextToken = new StringBuilder(); while (endOfInput()) { if (isDigit()) { readNumber(); return; } if (isLetter()) { readIdentifier(); return; } if (!isWhitespace()) { readSpecialChars(); return; } position++; } type = END_OF_INPUT; }
private Calendar parseEnglishDate(int month) throws ParseException { tokenizer.nextToken(); expectNumber(); int day = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); int year = now().get(Calendar.YEAR); if (in(ENGLISH_DATE_SEPARATOR)) { tokenizer.nextToken(); if (tokenizer.getType() == Tokenizer.NUMBER) { year = Integer.parseInt(tokenizer.getToken()); year = fixYear(year); tokenizer.nextToken(); } } if (tokenizer.getType() == Tokenizer.NUMBER) { return parseTime(buildCalendar(day, month, year)); } return buildCalendar(day, month, year); }
private Calendar parseDate(Tokenizer tokenizer) throws ParseException { expectNumber(); int firstNumber = Integer.parseInt(tokenizer.getToken()); tokenizer.nextToken(); if (!GERMAN_DATE_SEPARATOR.equals(tokenizer.getToken()) && !ENGLISH_DATE_SEPARATOR.equals(tokenizer.getToken())) { return parseYMExpression(firstNumber); } expectKeyword(GERMAN_DATE_SEPARATOR, ENGLISH_DATE_SEPARATOR); if (GERMAN_DATE_SEPARATOR.equals(tokenizer.getToken())) { return parseGermanDate(firstNumber); } else { return parseEnglishDate(firstNumber); } }
private boolean parseModifier() throws ParseException { if (tokenizer.getType() != Tokenizer.IDENTIFIER) { return false; } if (in(start())) { parseStartModifier(); return true; } if (in(end())) { parseEndModifier(); return true; } return false; }
private int parseDeltaAmount(Tokenizer tokenizer) throws ParseException { expectKeyword(POSITIVE_DELTA, NEGATIVE_DELTA); boolean subtract = NEGATIVE_DELTA.equals(tokenizer.getToken()); tokenizer.nextToken(); expectNumber(); int amount = Integer.parseInt(tokenizer.getToken()); if (subtract) { amount *= -1; } return amount; }
private void expectNumber() throws ParseException { if (tokenizer.getType() != Tokenizer.NUMBER) { throw new ParseException(NLS.fmtr("AdvancedDateParser.errInvalidToken") .set("token", tokenizer.toString()) .format(), tokenizer.getTokenStart()); } }
private void parseModifiers() throws ParseException { do { tokenizer.nextToken(); // ignore "," between modifiers //noinspection UnnecessaryParentheses,UnnecessaryParentheses if ((tokenizer.getType() == Tokenizer.SPECIAL) && in(MODIFIER_SEPARATOR)) { tokenizer.nextToken(); } } while (parseModifier()); }
private boolean in(String... keywords) { for (String keyword : keywords) { if (keyword.equals(tokenizer.getToken())) { return true; } } return false; }
private void readIdentifier() { tokenStart = position; type = IDENTIFIER; //noinspection UnnecessaryParentheses while (endOfInput() && isLetter()) { nextToken.append(input.charAt(position)); position++; } }