Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenquotes.git
M build.gradle
13 13
dependencies {
14 14
  // Command-line parsing
15
  implementation 'info.picocli:picocli:4.6.3'
15
  implementation 'info.picocli:picocli:4.7.4'
16 16
17 17
  testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
M src/main/java/com/whitemagicsoftware/keenquotes/parser/Contractions.java
420 420
    // them|letter m|em-dash|Emily
421 421
    "em",
422
    // her|utterance
423
    "er",
422 424
    // here|earlier
423 425
    "ere",
M src/main/java/com/whitemagicsoftware/keenquotes/parser/Curler.java
15 15
 * Resolves straight quotes into curly quotes throughout a document.
16 16
 */
17
@SuppressWarnings( "unused" )
18 17
public class Curler implements Function<String, String> {
19 18
M src/main/java/com/whitemagicsoftware/keenquotes/parser/Token.java
5 5
import com.whitemagicsoftware.keenquotes.lex.LexemeGlyph;
6 6
7
import java.util.EnumMap;
7 8
import java.util.Map;
8 9
9 10
import static com.whitemagicsoftware.keenquotes.lex.LexemeGlyph.*;
10 11
import static com.whitemagicsoftware.keenquotes.parser.TokenType.*;
11
import static java.util.Map.entry;
12
import static java.util.Map.ofEntries;
13 12
14 13
/**
15 14
 * Represents a high-level token read from a text document.
16 15
 */
17 16
final class Token implements Comparable<Token>, Stem {
18 17
  /**
19 18
   * Provides an entity-based set of {@link Token} replacements.
20 19
   */
21
  private static final Map<TokenType, String> ENTITIES = ofEntries(
22
    entry( QUOTE_OPENING_SINGLE, "&lsquo;" ),
23
    entry( QUOTE_CLOSING_SINGLE, "&rsquo;" ),
24
    entry( QUOTE_OPENING_DOUBLE, "&ldquo;" ),
25
    entry( QUOTE_CLOSING_DOUBLE, "&rdquo;" ),
26
    entry( QUOTE_STRAIGHT_SINGLE, "'" ),
27
    entry( QUOTE_STRAIGHT_DOUBLE, "\"" ),
28
    entry( QUOTE_APOSTROPHE, "&apos;" ),
29
    entry( QUOTE_PRIME_SINGLE, "&prime;" ),
30
    entry( QUOTE_PRIME_DOUBLE, "&Prime;" ),
31
    entry( QUOTE_PRIME_TRIPLE, "&tprime;" ),
32
    entry( QUOTE_PRIME_QUADRUPLE, "&qprime;" )
33
  );
20
  private static final Map<TokenType, String> ENTITIES =
21
    new EnumMap<>( TokenType.class );
22
23
  static {
24
    ENTITIES.put( QUOTE_OPENING_SINGLE, "&lsquo;" );
25
    ENTITIES.put( QUOTE_CLOSING_SINGLE, "&rsquo;" );
26
    ENTITIES.put( QUOTE_OPENING_DOUBLE, "&ldquo;" );
27
    ENTITIES.put( QUOTE_CLOSING_DOUBLE, "&rdquo;" );
28
    ENTITIES.put( QUOTE_STRAIGHT_SINGLE, "'" );
29
    ENTITIES.put( QUOTE_STRAIGHT_DOUBLE, "\"" );
30
    ENTITIES.put( QUOTE_APOSTROPHE, "&apos;" );
31
    ENTITIES.put( QUOTE_PRIME_SINGLE, "&prime;" );
32
    ENTITIES.put( QUOTE_PRIME_DOUBLE, "&Prime;" );
33
    ENTITIES.put( QUOTE_PRIME_TRIPLE, "&tprime;" );
34
    ENTITIES.put( QUOTE_PRIME_QUADRUPLE, "&qprime;" );
35
  }
34 36
35 37
  /**
36 38
   * Provides a character-based set of {@link Token} replacements.
37 39
   */
38
  private static final Map<TokenType, String> CHARS = ofEntries(
39
    entry( QUOTE_OPENING_SINGLE, "‘" ),
40
    entry( QUOTE_CLOSING_SINGLE, "’" ),
41
    entry( QUOTE_OPENING_DOUBLE, "“" ),
42
    entry( QUOTE_CLOSING_DOUBLE, "”" ),
43
    entry( QUOTE_STRAIGHT_SINGLE, "'" ),
44
    entry( QUOTE_STRAIGHT_DOUBLE, "\"" ),
45
    entry( QUOTE_APOSTROPHE, "’" ),
46
    entry( QUOTE_PRIME_SINGLE, "′" ),
47
    entry( QUOTE_PRIME_DOUBLE, "″" ),
48
    entry( QUOTE_PRIME_TRIPLE, "‴" ),
49
    entry( QUOTE_PRIME_QUADRUPLE, "⁗" )
50
  );
40
  private static final Map<TokenType, String> CHARS =
41
    new EnumMap<>( TokenType.class );
42
43
  static {
44
    CHARS.put( QUOTE_OPENING_SINGLE, "‘" );
45
    CHARS.put( QUOTE_CLOSING_SINGLE, "’" );
46
    CHARS.put( QUOTE_OPENING_DOUBLE, "“" );
47
    CHARS.put( QUOTE_CLOSING_DOUBLE, "”" );
48
    CHARS.put( QUOTE_STRAIGHT_SINGLE, "'" );
49
    CHARS.put( QUOTE_STRAIGHT_DOUBLE, "\"" );
50
    CHARS.put( QUOTE_APOSTROPHE, "’" );
51
    CHARS.put( QUOTE_PRIME_SINGLE, "′" );
52
    CHARS.put( QUOTE_PRIME_DOUBLE, "″" );
53
    CHARS.put( QUOTE_PRIME_TRIPLE, "‴" );
54
    CHARS.put( QUOTE_PRIME_QUADRUPLE, "⁗" );
55
  }
51 56
52 57
  /**
53 58
   * Glyphs not found in the table will use the document's glyph.
54 59
   */
55
  private static final Map<LexemeGlyph, String> I18N_ENTITIES = ofEntries(
56
    entry( LEX_DOUBLE_QUOTE_OPENING_LOW, "&ldquor;" ),
57
    entry( LEX_DOUBLE_CHEVRON_LEFT, "&laquo;" ),
58
    entry( LEX_DOUBLE_CHEVRON_RIGHT, "&raquo;" ),
59
    entry( LEX_SINGLE_CHEVRON_LEFT, "&lsaquo;" ),
60
    entry( LEX_SINGLE_CHEVRON_RIGHT, "&rsaquo;" )
61
  );
60
  private static final Map<LexemeGlyph, String> I18N_ENTITIES =
61
    new EnumMap<>( LexemeGlyph.class );
62
63
  static {
64
    I18N_ENTITIES.put( LEX_DOUBLE_QUOTE_OPENING_LOW, "&ldquor;" );
65
    I18N_ENTITIES.put( LEX_DOUBLE_CHEVRON_LEFT, "&laquo;" );
66
    I18N_ENTITIES.put( LEX_DOUBLE_CHEVRON_RIGHT, "&raquo;" );
67
    I18N_ENTITIES.put( LEX_SINGLE_CHEVRON_LEFT, "&lsaquo;" );
68
    I18N_ENTITIES.put( LEX_SINGLE_CHEVRON_RIGHT, "&rsaquo;" );
69
  }
62 70
63 71
  /**
M src/main/java/com/whitemagicsoftware/keenquotes/parser/Tree.java
27 27
   * Subtrees and {@link Token}s.
28 28
   */
29
  private final Collection<Stem> mStems = new LinkedHashSet<>( 128 );
29
  private final Set<Stem> mStems = new LinkedHashSet<>( 128 );
30 30
31 31
  /**