mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
Starts implementing SimpleDateFormat
This commit is contained in:
parent
f71f847411
commit
5fd0c47970
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Copyright 2014 Alexey Andreev.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.teavm.classlib.java.text;
|
||||
|
||||
import org.teavm.classlib.java.util.TCalendar;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
abstract class DateFormatElement {
|
||||
public abstract void format(TCalendar date, StringBuffer buffer);
|
||||
|
||||
public abstract void parse(String text, TCalendar date, TParsePosition position);
|
||||
|
||||
static boolean matches(String text, int position, String pattern) {
|
||||
if (pattern.length() + position > text.length()) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < pattern.length(); ++i) {
|
||||
if (Character.toLowerCase(pattern.charAt(i)) != Character.toLowerCase(text.charAt(position++))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int whichMatches(String text, TParsePosition position, String[] patterns) {
|
||||
for (int i = 0; i < patterns.length; ++i) {
|
||||
if (matches(text, position.getIndex(), patterns[i])) {
|
||||
position.setIndex(position.getIndex() + patterns[i].length());
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static class MonthText extends DateFormatElement {
|
||||
String[] months;
|
||||
String[] shortMonths;
|
||||
boolean abbreviated;
|
||||
|
||||
public MonthText(TDateFormatSymbols symbols, boolean abbreviated) {
|
||||
months = symbols.getMonths();
|
||||
shortMonths = symbols.getShortMonths();
|
||||
this.abbreviated = abbreviated;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void format(TCalendar date, StringBuffer buffer) {
|
||||
int month = date.get(TCalendar.MONTH);
|
||||
buffer.append(abbreviated ? shortMonths[month] : months[month]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(String text, TCalendar date, TParsePosition position) {
|
||||
int month = whichMatches(text, position, months);
|
||||
if (month < 0) {
|
||||
month = whichMatches(text, position, shortMonths);
|
||||
}
|
||||
if (month < 0) {
|
||||
position.setErrorIndex(position.getIndex());
|
||||
} else {
|
||||
date.set(TCalendar.MONTH, month);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class WeekdayText extends DateFormatElement {
|
||||
String[] weeks;
|
||||
String[] shortWeeks;
|
||||
boolean abbreviated;
|
||||
|
||||
public WeekdayText(TDateFormatSymbols symbols, boolean abbreviated) {
|
||||
weeks = symbols.getWeekdays();
|
||||
shortWeeks = symbols.getShortWeekdays();
|
||||
this.abbreviated = abbreviated;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void format(TCalendar date, StringBuffer buffer) {
|
||||
int weekday = date.get(TCalendar.DAY_OF_WEEK);
|
||||
buffer.append(abbreviated ? shortWeeks[weekday] : weeks[weekday]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(String text, TCalendar date, TParsePosition position) {
|
||||
int weekday = whichMatches(text, position, weeks);
|
||||
if (weekday < 0) {
|
||||
weekday = whichMatches(text, position, shortWeeks);
|
||||
}
|
||||
if (weekday < 0) {
|
||||
position.setErrorIndex(position.getIndex());
|
||||
} else {
|
||||
date.set(TCalendar.WEEK_OF_MONTH, weekday + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class EraText extends DateFormatElement {
|
||||
String[] eras;
|
||||
|
||||
public EraText(TDateFormatSymbols symbols) {
|
||||
eras = symbols.getEras();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void format(TCalendar date, StringBuffer buffer) {
|
||||
int era = date.get(TCalendar.ERA);
|
||||
buffer.append(eras[era]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(String text, TCalendar date, TParsePosition position) {
|
||||
int era = whichMatches(text, position, eras);
|
||||
if (era < 0) {
|
||||
position.setErrorIndex(position.getIndex());
|
||||
} else {
|
||||
date.set(TCalendar.ERA, era);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class AmPmText extends DateFormatElement {
|
||||
String[] ampms;
|
||||
|
||||
public AmPmText(TDateFormatSymbols symbols) {
|
||||
ampms = symbols.getAmPmStrings();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void format(TCalendar date, StringBuffer buffer) {
|
||||
int ampm = date.get(TCalendar.AM_PM);
|
||||
buffer.append(ampms[ampm]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(String text, TCalendar date, TParsePosition position) {
|
||||
int ampm = whichMatches(text, position, ampms);
|
||||
if (ampm < 0) {
|
||||
position.setErrorIndex(position.getIndex());
|
||||
} else {
|
||||
date.set(TCalendar.AM_PM, ampm);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user