Skip to content

Commit c52ed0f

Browse files
authored
Merge branch 'Stypox:master' into de-de
2 parents e3e03f9 + 219cd77 commit c52ed0f

81 files changed

Lines changed: 4913 additions & 804 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

gradle.properties

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
# http://www.gradle.org/docs/current/userguide/build_environment.html
77
# Specifies the JVM arguments used for the daemon process.
88
# The setting is particularly useful for tweaking memory settings.
9-
org.gradle.jvmargs=-Xmx1536m
9+
org.gradle.jvmargs=-Xmx1536m -Dfile.encoding=UTF-8
1010
# When configured, Gradle will run in incubating parallel mode.
1111
# This option should only be used with decoupled projects. More details, visit
1212
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
1313
# org.gradle.parallel=true
14-
15-

notes.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
Modalità:
2+
- [x] durata relativa: fra due secondi, in mezz'ora, settimana scorsa, quest'anno (?)
3+
- [x] giorno/i relativo: giovedì prossimo, fra due lunedì
4+
- [x] mese relativo: settembre scorso, ad ottobre (non due settembri fa)
5+
- [x] giorno speciale: domani, l'altro ieri, ieri l'altro, dopo domani pomeriggio, oggi
6+
- [x] ora: alle 18, le sedici in punto, alle tre (solo num interi 0<=.<=24)
7+
- [x] ora speciale: mezzanotte, mezzogiorno
8+
- [x] momento giornata: mattino, di pomeriggio, alla sera, questa notte (anche "prossima notte"?)
9+
- [x] minuto: cinquantanove, e diciotto minuti
10+
- [x] minuto speciale: e mezza, un quarto
11+
- [x] secondo
12+
- [x] p.m. a.m.
13+
- [x] giorno settimana: sabato
14+
- [ ] giorno: 6, il sette (solo num interi 0<=.<=31)
15+
- [x] nome mese: gennaio, a novembre ...
16+
- [ ] mese: 12
17+
- [ ] anno: millenovecento, duemilasedici
18+
- [x] bc: avanti cristo, dopo cristo, ...
19+
20+
GIORNO? MESE|(mese prossimo|scorso)|(prossimo|scorso mese)? ANNO|(anno prossimo|scorso)|(prossimo|scorso anno)? <ora>? -- nel millenovecentosettantaquattro, il due maggio, a giugno 2021, a novembre dell'anno prossimo
21+
22+
23+
ora: alle|all? ORE :? MINUTI? (in punto)? (sera|mattina|am|pm)? (GIORNO_DELLA_SETTIMANA prossimo|scorso?)|(dopo? domani)|(altro? ieri)|(ieri altro) sera|mattina? -- alle diciassette e quarantacinque, alle sei di sera, 6:30 di domani mattina
24+
ora: mezzanotte|mezzogiorno|... --
25+
26+
27+
28+
Componenti:
29+
- anno -> nel 1976, fra due anni, anno prossimo
30+
- mese -> ad ottobre, in tre mesi, mese scorso
31+
- settimana -> settimana prossima, due settimane fa
32+
- giorno -> mercoledì, fra due giorni, ieri
33+
- momento della giornata -> di mattina, al pomeriggio, sera, notte
34+
- ora -> alle 18, a mezzogiorno, alle tre in punto, fra due ore
35+
- minuto -> :45 (dopo ora), e ventisei (dopo ora), due minuti fa, un quarto d'ora prima di
36+
- secondo -> in un paio di secondi, :19 (dopo minuto), e quattordici (dopo minuto)

numbers/src/main/java/org/dicio/numbers/NumberParserFormatter.java renamed to numbers/src/main/java/org/dicio/numbers/ParserFormatter.java

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,57 @@
11
package org.dicio.numbers;
22

3-
import org.dicio.numbers.formatter.NumberFormatter;
3+
import org.dicio.numbers.formatter.Formatter;
44
import org.dicio.numbers.formatter.param.NiceDateParameters;
55
import org.dicio.numbers.formatter.param.NiceDateTimeParameters;
66
import org.dicio.numbers.formatter.param.NiceDurationParameters;
77
import org.dicio.numbers.formatter.param.NiceNumberParameters;
88
import org.dicio.numbers.formatter.param.NiceTimeParameters;
99
import org.dicio.numbers.formatter.param.NiceYearParameters;
1010
import org.dicio.numbers.formatter.param.PronounceNumberParameters;
11-
import org.dicio.numbers.parser.NumberParser;
11+
import org.dicio.numbers.parser.Parser;
12+
import org.dicio.numbers.parser.lexer.TokenStream;
13+
import org.dicio.numbers.parser.param.ExtractDateTimeParams;
1214
import org.dicio.numbers.parser.param.ExtractDurationParams;
13-
import org.dicio.numbers.parser.param.ExtractNumbersParams;
14-
import org.dicio.numbers.util.MixedFraction;
15+
import org.dicio.numbers.parser.param.ExtractNumberParams;
16+
import org.dicio.numbers.unit.Duration;
17+
import org.dicio.numbers.unit.MixedFraction;
1518

16-
import java.time.Duration;
1719
import java.time.LocalDate;
1820
import java.time.LocalDateTime;
1921
import java.time.LocalTime;
2022
import java.util.Locale;
2123

2224
/**
23-
* A class that wraps a {@link NumberFormatter} and a {@link NumberParser} for a particular language
25+
* A class that wraps a {@link Formatter} and a {@link Parser} for a particular language
2426
* and provides convenience methods to call the available functions without having to provide all of
2527
* the default parameters.
2628
*/
27-
public final class NumberParserFormatter {
28-
private final NumberFormatter formatter;
29-
private final NumberParser parser;
29+
public final class ParserFormatter {
30+
private final Formatter formatter;
31+
private final Parser parser;
3032

3133
/**
32-
* Constructs a {@link NumberParserFormatter} that wraps the provided {@link NumberFormatter}
33-
* and {@link NumberParser}. Note: do not use this manually, prefer
34-
* {@link NumberParserFormatter}. This is mostly used for tests.
34+
* Constructs a {@link ParserFormatter} that wraps the provided {@link Formatter}
35+
* and {@link Parser}. Note: do not use this manually, prefer
36+
* {@link ParserFormatter}. This is mostly used for tests.
3537
*
3638
* @param formatter the formatter to wrap
3739
* @param parser the parser to wrap
3840
*/
39-
public NumberParserFormatter(final NumberFormatter formatter, final NumberParser parser) {
41+
public ParserFormatter(final Formatter formatter, final Parser parser) {
4042
this.formatter = formatter;
4143
this.parser = parser;
4244
}
4345

4446
/**
45-
* Constructs a {@link NumberParserFormatter} for the language of the provided locale.
47+
* Constructs a {@link ParserFormatter} for the language of the provided locale.
4648
*
4749
* @param locale the locale containing the language to use
4850
* @throws IllegalArgumentException if the provided locale is not supported
4951
*/
50-
public NumberParserFormatter(final Locale locale) throws IllegalArgumentException {
51-
final NumberParserFormatterBuilder.ParserFormatterPair parserFormatterPair
52-
= NumberParserFormatterBuilder.parserFormatterPairForLocale(locale);
52+
public ParserFormatter(final Locale locale) throws IllegalArgumentException {
53+
final ParserFormatterBuilder.ParserFormatterPair parserFormatterPair
54+
= ParserFormatterBuilder.parserFormatterPairForLocale(locale);
5355
this.formatter = parserFormatterPair.formatter;
5456
this.parser = parserFormatterPair.parser;
5557
}
@@ -62,10 +64,10 @@ public NumberParserFormatter(final Locale locale) throws IllegalArgumentExceptio
6264
*
6365
* @param number the number to format
6466
* @return an instance of a utility class that enables customizing various parameters before
65-
* calling {@link NumberFormatter#niceNumber(MixedFraction, boolean)}. See
67+
* calling {@link Formatter#niceNumber(MixedFraction, boolean)}. See
6668
* {@link NiceNumberParameters}.
6769
*/
68-
public final NiceNumberParameters niceNumber(final double number) {
70+
public NiceNumberParameters niceNumber(final double number) {
6971
return new NiceNumberParameters(formatter, number);
7072
}
7173

@@ -75,10 +77,10 @@ public final NiceNumberParameters niceNumber(final double number) {
7577
*
7678
* @param number the number to format
7779
* @return an instance of a utility class that enables customizing various parameters before
78-
* calling {@link NumberFormatter#pronounceNumber(double, int, boolean, boolean,
80+
* calling {@link Formatter#pronounceNumber(double, int, boolean, boolean,
7981
* boolean)}. See {@link PronounceNumberParameters}.
8082
*/
81-
public final PronounceNumberParameters pronounceNumber(final double number) {
83+
public PronounceNumberParameters pronounceNumber(final double number) {
8284
return new PronounceNumberParameters(formatter, number);
8385
}
8486

@@ -88,10 +90,10 @@ public final PronounceNumberParameters pronounceNumber(final double number) {
8890
*
8991
* @param date the date to format (assumes already in local timezone)
9092
* @return an instance of a utility class that enables customizing various parameters before
91-
* calling {@link NumberFormatter#niceDate(LocalDate, LocalDate)}. See {@link
93+
* calling {@link Formatter#niceDate(LocalDate, LocalDate)}. See {@link
9294
* NiceDateParameters}.
9395
*/
94-
public final NiceDateParameters niceDate(final LocalDate date) {
96+
public NiceDateParameters niceDate(final LocalDate date) {
9597
return new NiceDateParameters(formatter, date);
9698
}
9799

@@ -101,9 +103,9 @@ public final NiceDateParameters niceDate(final LocalDate date) {
101103
*
102104
* @param date the date containing the year to format (assumes already in local timezone)
103105
* @return an instance of a utility class that enables customizing various parameters before
104-
* calling {@link NumberFormatter#niceYear(LocalDate)}. See {@link NiceYearParameters}.
106+
* calling {@link Formatter#niceYear(LocalDate)}. See {@link NiceYearParameters}.
105107
*/
106-
public final NiceYearParameters niceYear(final LocalDate date) {
108+
public NiceYearParameters niceYear(final LocalDate date) {
107109
// note: useless encapsulation, since niceYear has only the mandatory date parameter, but
108110
// keep for consistency
109111
return new NiceYearParameters(formatter, date);
@@ -115,10 +117,10 @@ public final NiceYearParameters niceYear(final LocalDate date) {
115117
*
116118
* @param time the time to format (assumes already in local timezone)
117119
* @return an instance of a utility class that enables customizing various parameters before
118-
* calling {@link NumberFormatter#niceTime(LocalTime, boolean, boolean, boolean)}. See
120+
* calling {@link Formatter#niceTime(LocalTime, boolean, boolean, boolean)}. See
119121
* {@link NiceTimeParameters}.
120122
*/
121-
public final NiceTimeParameters niceTime(final LocalTime time) {
123+
public NiceTimeParameters niceTime(final LocalTime time) {
122124
return new NiceTimeParameters(formatter, time);
123125
}
124126

@@ -129,10 +131,10 @@ public final NiceTimeParameters niceTime(final LocalTime time) {
129131
*
130132
* @param dateTime the date time to format (assumes already in local timezone)
131133
* @return an instance of a utility class that enables customizing various parameters before
132-
* calling {@link NumberFormatter#niceDateTime(LocalDate, LocalDate, LocalTime, boolean,
134+
* calling {@link Formatter#niceDateTime(LocalDate, LocalDate, LocalTime, boolean,
133135
* boolean)}. See {@link NiceDateTimeParameters}.
134136
*/
135-
public final NiceDateTimeParameters niceDateTime(final LocalDateTime dateTime) {
137+
public NiceDateTimeParameters niceDateTime(final LocalDateTime dateTime) {
136138
return new NiceDateTimeParameters(formatter, dateTime);
137139
}
138140

@@ -142,10 +144,10 @@ public final NiceDateTimeParameters niceDateTime(final LocalDateTime dateTime) {
142144
*
143145
* @param duration the duration to format
144146
* @return an instance of a utility class that enables customizing various parameters before
145-
* calling {@link NumberFormatter#niceDuration(Duration, boolean)}. See {@link
147+
* calling {@link Formatter#niceDuration(Duration, boolean)}. See {@link
146148
* NiceDurationParameters}.
147149
*/
148-
public final NiceDurationParameters niceDuration(final Duration duration) {
150+
public NiceDurationParameters niceDuration(final Duration duration) {
149151
return new NiceDurationParameters(formatter, duration);
150152
}
151153

@@ -154,26 +156,37 @@ public final NiceDurationParameters niceDuration(final Duration duration) {
154156
* parsed as "I am ", 23, " years old".
155157
*
156158
* @param utterance the text to extract numbers from
157-
* @return an instance of a utility class that enables customizing various parameters before
158-
* calling {@link NumberParser#extractNumbers(String, boolean, boolean)}. See {@link
159-
* ExtractNumbersParams}.
159+
* @return an instance of a utility class that enables customizing various parameters and then
160+
* allows calling {@link Parser#extractNumber(TokenStream, boolean, boolean)} in
161+
* multiple ways. See {@link ExtractNumberParams}.
160162
*/
161-
public final ExtractNumbersParams extractNumbers(final String utterance) {
162-
return new ExtractNumbersParams(parser, utterance);
163+
public ExtractNumberParams extractNumber(final String utterance) {
164+
return new ExtractNumberParams(parser, utterance);
163165
}
164166

165167
/**
166168
* Used to extract a duration from a string. For example, "Set a timer for three minutes and
167-
* five seconds" would be parsed as 185 seconds. If the user said multiple durations not next to
168-
* one another inside the string, only the first one will be returned. For example, "400 days
169-
* are more than one year" would be parsed only as 365 days.
169+
* five seconds" would be parsed as "Set a timer for ", 185 seconds.
170170
*
171171
* @param utterance the text to extract a duration from
172-
* @return an instance of a utility class that enables customizing various parameters before
173-
* calling {@link NumberParser#extractDuration(String, boolean)}. See {@link
174-
* ExtractDurationParams}.
172+
* @return an instance of a utility class that enables customizing various parameters and then
173+
* allows calling {@link Parser#extractDuration(TokenStream, boolean)} in multiple
174+
* ways. See {@link ExtractDurationParams}.
175175
*/
176-
public final ExtractDurationParams extractDuration(final String utterance) {
176+
public ExtractDurationParams extractDuration(final String utterance) {
177177
return new ExtractDurationParams(parser, utterance);
178178
}
179+
180+
/**
181+
* Used to extract a date&time from a string. For example, "Set an alarm at five p.m." would be
182+
* parsed as "Set an alarm ", today at 5 PM.
183+
*
184+
* @param utterance the text to extract a date&time from
185+
* @return an instance of a utility class that enables customizing various parameters and then
186+
* allows calling {@link Parser#extractDateTime(TokenStream, LocalDateTime)} in
187+
* multiple ways. See {@link ExtractDateTimeParams}.
188+
*/
189+
public ExtractDateTimeParams extractDateTime(final String utterance) {
190+
return new ExtractDateTimeParams(parser, utterance);
191+
}
179192
}

numbers/src/main/java/org/dicio/numbers/NumberParserFormatterBuilder.java renamed to numbers/src/main/java/org/dicio/numbers/ParserFormatterBuilder.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
package org.dicio.numbers;
22

3-
import org.dicio.numbers.formatter.NumberFormatter;
3+
import org.dicio.numbers.formatter.Formatter;
44
import org.dicio.numbers.lang.en.EnglishFormatter;
55
import org.dicio.numbers.lang.en.EnglishParser;
66
import org.dicio.numbers.lang.it.ItalianFormatter;
77
import org.dicio.numbers.lang.it.ItalianParser;
8-
import org.dicio.numbers.parser.NumberParser;
8+
import org.dicio.numbers.parser.Parser;
99

1010
import java.util.Collection;
1111
import java.util.HashMap;
1212
import java.util.Locale;
1313
import java.util.Map;
1414

15-
class NumberParserFormatterBuilder {
15+
class ParserFormatterBuilder {
1616

1717
private static class ParserFormatterClasses {
18-
final Class<? extends NumberFormatter> formatter;
19-
final Class<? extends NumberParser> parser;
18+
final Class<? extends Formatter> formatter;
19+
final Class<? extends Parser> parser;
2020

21-
private ParserFormatterClasses(final Class<? extends NumberFormatter> formatter,
22-
final Class<? extends NumberParser> parser) {
21+
private ParserFormatterClasses(final Class<? extends Formatter> formatter,
22+
final Class<? extends Parser> parser) {
2323
this.parser = parser;
2424
this.formatter = formatter;
2525
}
2626
}
2727

2828
static class ParserFormatterPair {
29-
final NumberFormatter formatter;
30-
final NumberParser parser;
29+
final Formatter formatter;
30+
final Parser parser;
3131

32-
ParserFormatterPair(final NumberFormatter formatter, final NumberParser parser) {
32+
ParserFormatterPair(final Formatter formatter, final Parser parser) {
3333
this.parser = parser;
3434
this.formatter = formatter;
3535
}
@@ -42,7 +42,7 @@ static class ParserFormatterPair {
4242
}};
4343

4444

45-
private NumberParserFormatterBuilder() {
45+
private ParserFormatterBuilder() {
4646
}
4747

4848

numbers/src/main/java/org/dicio/numbers/formatter/NumberFormatter.java renamed to numbers/src/main/java/org/dicio/numbers/formatter/Formatter.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
import org.dicio.numbers.formatter.datetime.DateTimeConfig;
44
import org.dicio.numbers.formatter.datetime.FormatString;
55
import org.dicio.numbers.formatter.datetime.NiceYearSubstitutionTableBuilder;
6-
import org.dicio.numbers.util.MixedFraction;
6+
import org.dicio.numbers.unit.Duration;
7+
import org.dicio.numbers.unit.MixedFraction;
78
import org.dicio.numbers.util.Utils;
89

9-
import java.time.Duration;
1010
import java.time.LocalDate;
1111
import java.time.LocalTime;
1212
import java.time.Period;
1313
import java.util.HashMap;
1414
import java.util.Map;
1515

16-
public abstract class NumberFormatter {
16+
public abstract class Formatter {
1717

1818
protected final DateTimeConfig config;
1919

20-
protected NumberFormatter(final String configFolder) {
20+
protected Formatter(final String configFolder) {
2121
config = new DateTimeConfig(configFolder);
2222
}
2323

@@ -185,10 +185,11 @@ public String niceDateTime(final LocalDate date,
185185
* @return the formatted time span string
186186
*/
187187
public String niceDuration(final Duration duration, final boolean speech) {
188-
final long days = duration.toDays();
189-
final long hours = duration.toHours() % 24;
190-
final long minutes = duration.toMinutes() % 60;
191-
final long seconds = duration.getSeconds() % 60;
188+
final java.time.Duration javaDuration = duration.toJavaDuration();
189+
final long days = javaDuration.toDays();
190+
final long hours = javaDuration.toHours() % 24;
191+
final long minutes = javaDuration.toMinutes() % 60;
192+
final long seconds = javaDuration.getSeconds() % 60;
192193

193194
final StringBuilder result = new StringBuilder();
194195
if (speech) {
@@ -217,7 +218,7 @@ public String niceDuration(final Duration duration, final boolean speech) {
217218
}
218219

219220
// if the duration is zero also write "zero seconds"
220-
if (seconds > 0 || duration.getSeconds() == 0) {
221+
if (seconds > 0 || javaDuration.getSeconds() == 0) {
221222
if (result.length() != 0) {
222223
result.append(" ");
223224
}

0 commit comments

Comments
 (0)