From 09a8accade501138683fc3c63a1aba7fbf7993d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Tue, 25 Jun 2019 14:29:19 +0200 Subject: [PATCH 1/9] add contracted braille translation table for swedish words --- ...v_SE-single-character-contracted-words.xml | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml b/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml new file mode 100644 index 0000000..3f9b1db --- /dev/null +++ b/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml @@ -0,0 +1,177 @@ + + + + Braille translation table for Swedish short script words. + + a + b + c + d + e + f + g + h + j + k + l + m + n + p + q + r + s + t + u + v + w + x + y + z + ä + + ê + î + û + § + ë + ü + ô + è + \\ + à + + + + aa + aas + ad + ag + at + atë + at( + at(s + aw + aws + + + bj + bjn + bjns + bjr + bjt + bjô + bl + br + bv + + cs + ds + dsa + dsas + + ea + ee + ees + emd + eml + emt + fof + + gg + ggs + ggar + ggars + ggarna + ggarnas + ggê + ggês + ggû + ggûs + ggûna + ggûnas + + hs + hn + + + ia + ias + + iês + + i§s + ibl + iêt( + ig + + ka + kma + kmû + kmt + kn + knt + + ls + + md + mg + mgs + ml + + + + nn + nns + nnt( + nt + ntv + nw + nws + + ol + oo + o( + rd + + sd + sj + sja + sjt + sk + sl + sn + sna + snt + + + t + ts + tb + vka + vkas + vkê + vkês + vk§ + vk§s + vl + vle + + xat + zs + äu + + ëe + ër + ëra + ëst + ësta + èta + ètas + \\na + \\nas + àa + àit + àaw + àaws + + From af79c8fa33200899aa4a8e94c59be5351baeb65f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Tue, 25 Jun 2019 14:29:48 +0200 Subject: [PATCH 2/9] add swedish contracted braille filter class --- .../impl/sv_SE/SwedishBrailleFilter.java | 3 + .../sv_SE/SwedishContractedBrailleFilter.java | 89 +++++++++++++++++++ .../SwedishContractedBrailleFilterTest.java | 70 +++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java create mode 100644 test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java index 3232eca..b6066fe 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java @@ -42,6 +42,7 @@ public SwedishBrailleFilter(String locale, boolean strict) { filters.add(new CapitalizationMarkers()); Locale l = FilterLocale.parse(locale).toLocale(); + // Text to braille, Pas 1 filters.add(new UCharFilter(getResource("sv_SE-pas1.xml"), l)); // Text to braille, Pas 2 @@ -52,6 +53,8 @@ public SwedishBrailleFilter(String locale, boolean strict) { if (strict) { filters.add(new StrictFilter()); } + + } @Override diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java new file mode 100644 index 0000000..750628e --- /dev/null +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java @@ -0,0 +1,89 @@ +package org.daisy.dotify.translator.impl.sv_SE; + +import org.daisy.dotify.common.text.StringFilter; + +import java.io.IOException; +import java.net.URL; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + */ +public class SwedishContractedBrailleFilter implements StringFilter { + + private HashMap contractedBrailleMap; + private static final String CONTRACTED_BRAILLE_TABLE_PATH = "sv_SE-single-character-contracted-words.xml"; + + public static final String CAPITAL_CHAR_MARKER = "\\u2820"; + public static final String SOFT_HYPHEN = "\\u2820"; + + /** + * Todo: add support for different grades of contraction. + * For now only single character contracted words is supported + */ + public SwedishContractedBrailleFilter() { + this.contractedBrailleMap = new HashMap<>(); + this.loadTable(); + } + + /** + * Search and replace with contracted braille. + * First split the string on space character and go through all words and look for a match in the contractin table. + * + * @param str - The string that should be filterd + * @return the filtered string + */ + @Override + public String filter(String str) { + + String[] words = str.split("\\s"); + // Handle Edge case with no words. + if (words.length == 0) { + return str; + } + // Strip string from + Pattern pattern = Pattern.compile(CAPITAL_CHAR_MARKER + "*([\\p{javaUpperCase}\\p{javaLowerCase}" + SOFT_HYPHEN + "]+)"); + StringBuilder sb = new StringBuilder(); + String key, replace; + + for (String word: words) { + Matcher matcher = pattern.matcher(word); + if (matcher.find()) { + key = matcher.group(1).toLowerCase(); + if (this.contractedBrailleMap.containsKey(key)) { + replace = this.contractedBrailleMap.get(key); + word = word.substring(0, matcher.start(1)) + replace + word.substring(matcher.end(1)); + } + } + sb.append(word); + sb.append(" "); + } + str = sb.toString().trim(); + return str; + } + + /** + * Loads a table using the Properties class. + */ + private void loadTable() { + URL tableURL = this.getClass().getResource(CONTRACTED_BRAILLE_TABLE_PATH); + Properties props = new Properties(); + try { + props.loadFromXML(tableURL.openStream()); + } catch (IOException e) { + e.printStackTrace(); + return; + } + Set keys = props.keySet(); + for (Iterator it = keys.iterator(); it.hasNext(); ) { + String key = (String) it.next(); + contractedBrailleMap.put(key, props.getProperty(key)); + } + } +} \ No newline at end of file diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java new file mode 100644 index 0000000..313eb37 --- /dev/null +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java @@ -0,0 +1,70 @@ +package org.daisy.dotify.translator.impl.sv_SE; + +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +import java.net.URL; + +public class SwedishContractedBrailleFilterTest { + + private final SwedishContractedBrailleFilter filter; + + public SwedishContractedBrailleFilterTest() { + + filter = new SwedishContractedBrailleFilter(); + } + + @Test + public void testFilter() { + String text = "jag gillar att dansa men inte att sjunga"; + String filteredString = this.filter.filter(text); + assertEquals("j gillar a dansa mê ü a sjunga", filteredString); + } + + @Test + public void testFilterWithFirstCharacterCapitalMarker() { + String text = "⠠Test ⠠Testson ⠠Ett livs berättelse om saker som berör många"; + String filteredString = this.filter.filter(text); + assertEquals("⠠Test ⠠Testson ⠠§ livs berättelse om saker s berör mg", filteredString); + } + + @Test + public void testFilterWithEmptyString() { + String text = ""; + String filteredString = this.filter.filter(text); + assertEquals("", filteredString); + } + + @Test + public void testFilterWithOnlySpace() { + String text = " "; + String filteredString = this.filter.filter(text); + assertEquals(" ", filteredString); + + // Test multiple spaces + text = " "; + filteredString = this.filter.filter(text); + assertEquals(" ", filteredString); + } + + @Test + public void testFilterWithWordCapitalMarker() { + String test = "⠠⠠JAG börjar att sjunga"; + String filteredString = this.filter.filter(test); + assertEquals("⠠⠠j bjr a sjunga", filteredString); + } + + @Test + public void testFilterWithDoubleBackSlashCharacter() { + String test = "Kan du ge mig den där"; + String filteredString = this.filter.filter(test); + assertEquals("k du ge mig \\\\ d", filteredString); + } + + @Test + public void testFilterWhenSequentialCapitalWordsExists() { + String test = "⠠⠠⠠JAG SAKNAR HONOM⠱"; + String filteredString = this.filter.filter(test); + assertEquals("⠠⠠⠠j SAKNAR oo⠱", filteredString); + } +} \ No newline at end of file From 2367c81e48831ae73a02deafd4df16409c4052c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Thu, 27 Jun 2019 10:55:38 +0200 Subject: [PATCH 3/9] add contracted braille filter to braillefilter class --- .../impl/sv_SE/SwedishBrailleFilter.java | 20 +++++++++- .../impl/sv_SE/SwedishBrailleFilterTest.java | 40 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java index b6066fe..0e1f4df 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java @@ -24,13 +24,25 @@ public SwedishBrailleFilter(String locale) { this(locale, false); } + /** + * Creates a new Swedish braille filter. + * @param locale the locale + * @param strict if true the result is braille only, if false the result + * contains break point characters such as space, dash and soft hyphen. + */ + public SwedishBrailleFilter(String locale, boolean strict) { + this(locale, strict, false); + } + /** * Creates a new Swedish braille filter with the specified mode. * @param locale the locale * @param strict if true the result is braille only, if false the result * contains break point characters such as space, dash and soft hyphen. + * @param useContractedBraille Whether or not the string should be translated to contracted braille. + * */ - public SwedishBrailleFilter(String locale, boolean strict) { + public SwedishBrailleFilter(String locale, boolean strict, boolean useContractedBraille) { filters = new CombinationFilter(); // Remove zero width space filters.add(new RegexFilter("\\u200B", "")); @@ -43,6 +55,12 @@ public SwedishBrailleFilter(String locale, boolean strict) { Locale l = FilterLocale.parse(locale).toLocale(); + + if (useContractedBraille) { + // Text to braille, shorthand format + filters.add(new SwedishContractedBrailleFilter()); + } + // Text to braille, Pas 1 filters.add(new UCharFilter(getResource("sv_SE-pas1.xml"), l)); // Text to braille, Pas 2 diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java index ecf66e9..c6d92f2 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java @@ -237,4 +237,44 @@ public void testFractions_001() { public void testCapitalIWithDot() { assertEquals("⠠⠈⠊", filter.filter("İ")); } + + @Test + public void testFilterAppliesContractedBrailleFilterCorrectly(){ + SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); + String test_string = "jag vet att"; + String filtered_string = filter_1.filter(test_string); + assertEquals("⠚ ⠧⠑⠞ ⠁", filtered_string); + } + + @Test + public void testFilterAppliesContractedBrailleFilterCorrectlyWithCharCapitalization() { + SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); + String test_string = "Hon hade många husdjur"; + String filtered_string = filter_1.filter(test_string); + assertEquals("⠠⠓⠝ ⠓⠈⠕ ⠍⠛ ⠓⠥⠎⠙⠚⠥⠗", filtered_string); + } + + @Test + public void testFilterDoesNotCrashWhensContractedBrailleFilterIsAppliedForEmptyStrings() { + SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); + String test_string = ""; + String filtered_string = filter_1.filter(test_string); + assertEquals("", filtered_string); + } + + @Test + public void testFilterAppliesContractedBrailleFilterCorrectlyWithWordCapitalization(){ + SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); + String test_string = "HEY jag heter java"; + String filtered_string = filter_1.filter(test_string); + assertEquals("⠠⠠⠓⠑⠽ ⠚ ⠓⠑⠞⠑⠗ ⠚⠁⠧⠁", filtered_string); + } + + @Test + public void testFilterAppliesContractedBrailleFilterCorrectlyWithContractionWithSequentialCaptalLetters(){ + SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); + String test_string = "JAG SAKNAR HONOM"; + String filtered_string = filter_1.filter(test_string); + assertEquals("⠠⠠⠠⠚ ⠎⠁⠅⠝⠁⠗ ⠕⠕⠱", filtered_string); + } } From f5ac111c07f7471987d8cb01c24cd072c4f18460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Thu, 27 Jun 2019 10:57:53 +0200 Subject: [PATCH 4/9] implement support for swedish contracted braille step 1 --- .../sv_SE/SwedishBrailleFilterFactory.java | 13 +++++++- .../SwedishBrailleFilterFactoryService.java | 30 +++++++++++++++---- .../SwedishBrailleTranslatorFactory.java | 13 ++++++++ ...wedishBrailleTranslatorFactoryService.java | 12 ++++++++ .../sv_SE/SwedishMarkerProcessorFactory.java | 2 +- .../translator/impl/sv_SE/messages.properties | 4 ++- 6 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java index dd83668..0b06cc2 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java @@ -22,10 +22,12 @@ public SwedishBrailleFilterFactory(HyphenatorFactoryMakerService hyphenatorServi @Override public BrailleFilter newFilter(String locale, String mode) throws TranslatorConfigurationException { + if (hyphenatorService == null) { throw new SwedishFilterConfigurationException("HyphenatorFactoryMakerService not set."); } Optional loc = getSupportedLocale(locale); + if (loc.isPresent() && mode.equals(TranslatorType.UNCONTRACTED.toString())) { DefaultMarkerProcessor sap; @@ -35,7 +37,16 @@ public BrailleFilter newFilter(String locale, String mode) throws TranslatorConf throw new SwedishFilterConfigurationException(e); } return new DefaultBrailleFilter(new SwedishBrailleFilter(loc.get(), true), loc.get(), sap, hyphenatorService); - } + } else if (loc.isPresent() && mode.equals(TranslatorType.CONTRACTED.toString())) { + + DefaultMarkerProcessor sap; + try { + sap = new SwedishMarkerProcessorFactory().newMarkerProcessor(loc.get(), mode); + } catch (SwedishMarkerProcessorConfigurationException e) { + throw new SwedishFilterConfigurationException(e); + } + return new DefaultBrailleFilter(new SwedishBrailleFilter(loc.get(), true, true), loc.get(), sap, hyphenatorService); + } throw new SwedishFilterConfigurationException("Factory does not support " + locale + "/" + mode); } diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactoryService.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactoryService.java index 141a092..0ed0ed4 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactoryService.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactoryService.java @@ -36,6 +36,8 @@ public SwedishBrailleFilterFactoryService() { this.specs = new ArrayList<>(); String displayName = RESOURCE_BUNDLE.getString("uncontracted-6-dot"); String desc = RESOURCE_BUNDLE.getString("uncontracted-description"); + String contractedDisplayName = RESOURCE_BUNDLE.getString("contracted-6-dot"); + String contractedDesc = RESOURCE_BUNDLE.getString("contracted-description"); specs.add(new TranslatorSpecification("sv", TranslatorMode.Builder .withType(TranslatorType.UNCONTRACTED) .displayName(displayName) @@ -46,11 +48,27 @@ public SwedishBrailleFilterFactoryService() { .displayName(displayName) .description(desc) .build())); - } - - @Override - public boolean supportsSpecification(String locale, String mode) { - return ("sv".equalsIgnoreCase(locale) || "sv-SE".equalsIgnoreCase(locale)) && mode.equals(TranslatorType.UNCONTRACTED.toString()); + specs.add(new TranslatorSpecification("sv", TranslatorMode.Builder + .withType(TranslatorType.CONTRACTED) + .displayName(contractedDisplayName) + .description(contractedDesc) + .build())); + specs.add(new TranslatorSpecification("sv-SE", TranslatorMode.Builder + .withType(TranslatorType.CONTRACTED) + .displayName(contractedDisplayName) + .description(contractedDesc) + .build())); + } + + @Override + public boolean supportsSpecification(String locale, String mode) { + if (("sv".equalsIgnoreCase(locale) || "sv-SE".equalsIgnoreCase(locale)) && mode.equals(TranslatorType.UNCONTRACTED.toString())) { + return true; + } else if (("sv".equalsIgnoreCase(locale) || "sv-SE".equalsIgnoreCase(locale)) && mode.equals(TranslatorType.CONTRACTED.toString())) { + return true; + } else { + return false; + } } @Override @@ -74,7 +92,7 @@ public void setHyphenator(HyphenatorFactoryMakerService hyphenator) { public void unsetHyphenator(HyphenatorFactoryMakerService hyphenator) { this.hyphenator = null; } - + @Override public Collection listSpecifications() { return specs; diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java index 6e45443..7b113db 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java @@ -25,6 +25,7 @@ public SwedishBrailleTranslatorFactory(HyphenatorFactoryMakerService hyphenatorS @Override public BrailleTranslator newTranslator(String locale, String mode) throws TranslatorConfigurationException { + if (hyphenatorService == null) { throw new SwedishTranslatorConfigurationException("HyphenatorFactoryMakerService not set."); } @@ -41,6 +42,18 @@ public BrailleTranslator newTranslator(String locale, String mode) throws Transl return new SimpleBrailleTranslator( new DefaultBrailleFilter(new SwedishBrailleFilter(loc.get()), loc.get(), sap, hyphenatorService), new DefaultBrailleFinalizer(), mode); + } else if (loc.isPresent() && mode.equals(TranslatorType.CONTRACTED.toString())) { + + DefaultMarkerProcessor sap; + try { + sap = new SwedishMarkerProcessorFactory().newMarkerProcessor(loc.get(), mode); + } catch (SwedishMarkerProcessorConfigurationException e) { + throw new SwedishTranslatorConfigurationException(e); + } + + return new SimpleBrailleTranslator( + new DefaultBrailleFilter(new SwedishBrailleFilter(loc.get(), false, true), loc.get(), sap, hyphenatorService), + new DefaultBrailleFinalizer(), mode); } else if (loc.isPresent() && mode.equals(TranslatorType.PRE_TRANSLATED.toString())) { return new SimpleBrailleTranslator( new PreTranslatedBrailleFilter(), diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactoryService.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactoryService.java index c097c59..98db11d 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactoryService.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactoryService.java @@ -35,14 +35,21 @@ public class SwedishBrailleTranslatorFactoryService implements public SwedishBrailleTranslatorFactoryService() { this.specs = new ArrayList<>(); String uncontracted = RESOURCE_BUNDLE.getString("uncontracted-6-dot"); + String contracted = RESOURCE_BUNDLE.getString("contracted-6-dot"); String preTranslated = RESOURCE_BUNDLE.getString("pre-translated"); String descUncontracted = RESOURCE_BUNDLE.getString("uncontracted-description"); + String descContracted = RESOURCE_BUNDLE.getString("contracted-description"); String descPreTranslated = RESOURCE_BUNDLE.getString("pre-translated-description"); specs.add(new TranslatorSpecification("sv", TranslatorMode.Builder .withType(TranslatorType.UNCONTRACTED) .displayName(uncontracted) .description(descUncontracted) .build())); + specs.add(new TranslatorSpecification("sv", TranslatorMode.Builder + .withType(TranslatorType.CONTRACTED) + .displayName(contracted) + .description(descContracted) + .build())); specs.add(new TranslatorSpecification("sv", TranslatorMode.Builder .withType(TranslatorType.PRE_TRANSLATED) .displayName(preTranslated) @@ -53,6 +60,11 @@ public SwedishBrailleTranslatorFactoryService() { .displayName(uncontracted) .description(descUncontracted) .build())); + specs.add(new TranslatorSpecification("sv-SE", TranslatorMode.Builder + .withType(TranslatorType.CONTRACTED) + .displayName(contracted) + .description(descContracted) + .build())); specs.add(new TranslatorSpecification("sv-SE", TranslatorMode.Builder .withType(TranslatorType.PRE_TRANSLATED) .displayName(preTranslated) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishMarkerProcessorFactory.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishMarkerProcessorFactory.java index aa7d07c..0d6c378 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishMarkerProcessorFactory.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishMarkerProcessorFactory.java @@ -18,7 +18,7 @@ class SwedishMarkerProcessorFactory { public DefaultMarkerProcessor newMarkerProcessor(String locale, String mode) throws SwedishMarkerProcessorConfigurationException { if (FilterLocale.parse(locale).equals(sv)||FilterLocale.parse(locale).equals(sv_SE)) { - if (mode.equals(TranslatorType.UNCONTRACTED.toString())) { + if (mode.equals(TranslatorType.UNCONTRACTED.toString()) || mode.equals(TranslatorType.CONTRACTED.toString())) { // Svenska skrivregler för punktskrift 2009, page 34 RegexMarkerDictionary strong = new RegexMarkerDictionary.Builder(). diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/messages.properties b/src/org/daisy/dotify/translator/impl/sv_SE/messages.properties index b851dd6..91533b1 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/messages.properties +++ b/src/org/daisy/dotify/translator/impl/sv_SE/messages.properties @@ -1,4 +1,6 @@ -uncontracted-6-dot=Uncontracted (6-dot) +uncontracted-6-dot=Uncontracted (6-dot) uncontracted-description=Uncontracted Swedish braille +contracted-6-dot=Contracted (6-dot) +contracted-description=Contracted Swedish braille pre-translated=Pre-translated pre-translated-description=Pre-translated braille \ No newline at end of file From 14e80bd0ec6fca9a05f4a95586224b63944df8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Thu, 27 Jun 2019 13:04:56 +0200 Subject: [PATCH 5/9] style fixes --- .../dotify/translator/impl/sv_SE/SwedishBrailleFilter.java | 3 --- .../translator/impl/sv_SE/SwedishBrailleFilterFactory.java | 2 -- .../translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java | 1 - .../impl/sv_SE/SwedishContractedBrailleFilterTest.java | 2 +- 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java index 0e1f4df..4aadde9 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilter.java @@ -55,7 +55,6 @@ public SwedishBrailleFilter(String locale, boolean strict, boolean useContracted Locale l = FilterLocale.parse(locale).toLocale(); - if (useContractedBraille) { // Text to braille, shorthand format filters.add(new SwedishContractedBrailleFilter()); @@ -71,8 +70,6 @@ public SwedishBrailleFilter(String locale, boolean strict, boolean useContracted if (strict) { filters.add(new StrictFilter()); } - - } @Override diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java index 0b06cc2..72ef71b 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterFactory.java @@ -22,12 +22,10 @@ public SwedishBrailleFilterFactory(HyphenatorFactoryMakerService hyphenatorServi @Override public BrailleFilter newFilter(String locale, String mode) throws TranslatorConfigurationException { - if (hyphenatorService == null) { throw new SwedishFilterConfigurationException("HyphenatorFactoryMakerService not set."); } Optional loc = getSupportedLocale(locale); - if (loc.isPresent() && mode.equals(TranslatorType.UNCONTRACTED.toString())) { DefaultMarkerProcessor sap; diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java index 7b113db..380863c 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleTranslatorFactory.java @@ -25,7 +25,6 @@ public SwedishBrailleTranslatorFactory(HyphenatorFactoryMakerService hyphenatorS @Override public BrailleTranslator newTranslator(String locale, String mode) throws TranslatorConfigurationException { - if (hyphenatorService == null) { throw new SwedishTranslatorConfigurationException("HyphenatorFactoryMakerService not set."); } diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java index 313eb37..cd1a7a5 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java @@ -67,4 +67,4 @@ public void testFilterWhenSequentialCapitalWordsExists() { String filteredString = this.filter.filter(test); assertEquals("⠠⠠⠠j SAKNAR oo⠱", filteredString); } -} \ No newline at end of file +} From 97215aa73574e10ac725873207176a7a765b391c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Thu, 27 Jun 2019 14:22:43 +0200 Subject: [PATCH 6/9] add failing test for soft hyphens --- .../impl/sv_SE/SwedishContractedBrailleFilterTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java index cd1a7a5..a6e9a3e 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java @@ -67,4 +67,12 @@ public void testFilterWhenSequentialCapitalWordsExists() { String filteredString = this.filter.filter(test); assertEquals("⠠⠠⠠j SAKNAR oo⠱", filteredString); } + + @Test + public void testFilterWhenStringContainsSoftHyphen() { + String test = "den här texten inne\u00ADhåller ord med och ut\u00ADan soft hyphen"; + String filteredString = this.filter.filter(test); + System.out.println(filteredString); + assertEquals("\\\\ här texten inne\u00ADhåller ord î c u soft hyphen", filteredString); + } } From 90e85e5e99e902a1c875c9d01b5eeab57aa08364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Thu, 27 Jun 2019 14:27:17 +0200 Subject: [PATCH 7/9] handle soft hyphens --- .../impl/sv_SE/SwedishContractedBrailleFilter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java index 750628e..b6096f4 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java +++ b/src/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilter.java @@ -20,8 +20,8 @@ public class SwedishContractedBrailleFilter implements StringFilter { private HashMap contractedBrailleMap; private static final String CONTRACTED_BRAILLE_TABLE_PATH = "sv_SE-single-character-contracted-words.xml"; - public static final String CAPITAL_CHAR_MARKER = "\\u2820"; - public static final String SOFT_HYPHEN = "\\u2820"; + public static final String CAPITAL_CHAR_MARKER = "\u2820"; + public static final String SOFT_HYPHEN = "\u00AD"; /** * Todo: add support for different grades of contraction. @@ -48,14 +48,14 @@ public String filter(String str) { return str; } // Strip string from - Pattern pattern = Pattern.compile(CAPITAL_CHAR_MARKER + "*([\\p{javaUpperCase}\\p{javaLowerCase}" + SOFT_HYPHEN + "]+)"); + Pattern pattern = Pattern.compile(CAPITAL_CHAR_MARKER + "*([\\p{javaUpperCase}\\p{javaLowerCase}"+SOFT_HYPHEN+"]+)"); StringBuilder sb = new StringBuilder(); String key, replace; for (String word: words) { Matcher matcher = pattern.matcher(word); if (matcher.find()) { - key = matcher.group(1).toLowerCase(); + key = matcher.group(1).toLowerCase().replace(SOFT_HYPHEN, ""); if (this.contractedBrailleMap.containsKey(key)) { replace = this.contractedBrailleMap.get(key); word = word.substring(0, matcher.start(1)) + replace + word.substring(matcher.end(1)); From 6327cad0753200a58791e1a83925ff6e35eafc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Fri, 28 Jun 2019 08:24:10 +0200 Subject: [PATCH 8/9] update swedish contracted braille list with only one char translations --- ...v_SE-single-character-contracted-words.xml | 139 +----------------- .../impl/sv_SE/SwedishBrailleFilterTest.java | 6 +- .../SwedishContractedBrailleFilterTest.java | 14 +- 3 files changed, 12 insertions(+), 147 deletions(-) diff --git a/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml b/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml index 3f9b1db..c0bc393 100644 --- a/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml +++ b/src/org/daisy/dotify/translator/impl/sv_SE/sv_SE-single-character-contracted-words.xml @@ -37,141 +37,6 @@ ü ô è - \\ + \ à - - - - aa - aas - ad - ag - at - atë - at( - at(s - aw - aws - - - bj - bjn - bjns - bjr - bjt - bjô - bl - br - bv - - cs - ds - dsa - dsas - - ea - ee - ees - emd - eml - emt - fof - - gg - ggs - ggar - ggars - ggarna - ggarnas - ggê - ggês - ggû - ggûs - ggûna - ggûnas - - hs - hn - - - ia - ias - - iês - - i§s - ibl - iêt( - ig - - ka - kma - kmû - kmt - kn - knt - - ls - - md - mg - mgs - ml - - - - nn - nns - nnt( - nt - ntv - nw - nws - - ol - oo - o( - rd - - sd - sj - sja - sjt - sk - sl - sn - sna - snt - - - t - ts - tb - vka - vkas - vkê - vkês - vk§ - vk§s - vl - vle - - xat - zs - äu - - ëe - ër - ëra - ëst - ësta - èta - ètas - \\na - \\nas - àa - àit - àaw - àaws - - + \ No newline at end of file diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java index c6d92f2..4673ec9 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishBrailleFilterTest.java @@ -251,7 +251,7 @@ public void testFilterAppliesContractedBrailleFilterCorrectlyWithCharCapitalizat SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); String test_string = "Hon hade många husdjur"; String filtered_string = filter_1.filter(test_string); - assertEquals("⠠⠓⠝ ⠓⠈⠕ ⠍⠛ ⠓⠥⠎⠙⠚⠥⠗", filtered_string); + assertEquals("⠠⠓⠕⠝ ⠓⠁⠙⠑ ⠍⠡⠝⠛⠁ ⠓⠥⠎⠙⠚⠥⠗", filtered_string); } @Test @@ -273,8 +273,8 @@ public void testFilterAppliesContractedBrailleFilterCorrectlyWithWordCapitalizat @Test public void testFilterAppliesContractedBrailleFilterCorrectlyWithContractionWithSequentialCaptalLetters(){ SwedishBrailleFilter filter_1 = new SwedishBrailleFilter("sv-SE", false, true); - String test_string = "JAG SAKNAR HONOM"; + String test_string = "JAG SAKNAR HONOM MYCKET"; String filtered_string = filter_1.filter(test_string); - assertEquals("⠠⠠⠠⠚ ⠎⠁⠅⠝⠁⠗ ⠕⠕⠱", filtered_string); + assertEquals("⠠⠠⠠⠚ ⠎⠁⠅⠝⠁⠗ ⠓⠕⠝⠕⠍ ⠽⠱", filtered_string); } } diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java index a6e9a3e..a410c93 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java @@ -18,14 +18,14 @@ public SwedishContractedBrailleFilterTest() { public void testFilter() { String text = "jag gillar att dansa men inte att sjunga"; String filteredString = this.filter.filter(text); - assertEquals("j gillar a dansa mê ü a sjunga", filteredString); + assertEquals("j gillar a dansa men ü a sjunga", filteredString); } @Test public void testFilterWithFirstCharacterCapitalMarker() { String text = "⠠Test ⠠Testson ⠠Ett livs berättelse om saker som berör många"; String filteredString = this.filter.filter(text); - assertEquals("⠠Test ⠠Testson ⠠§ livs berättelse om saker s berör mg", filteredString); + assertEquals("⠠Test ⠠Testson ⠠§ livs berättelse om saker s berör många", filteredString); } @Test @@ -51,21 +51,21 @@ public void testFilterWithOnlySpace() { public void testFilterWithWordCapitalMarker() { String test = "⠠⠠JAG börjar att sjunga"; String filteredString = this.filter.filter(test); - assertEquals("⠠⠠j bjr a sjunga", filteredString); + assertEquals("⠠⠠j börjar a sjunga", filteredString); } @Test public void testFilterWithDoubleBackSlashCharacter() { String test = "Kan du ge mig den där"; String filteredString = this.filter.filter(test); - assertEquals("k du ge mig \\\\ d", filteredString); + assertEquals("k du ge mig \\ d", filteredString); } @Test public void testFilterWhenSequentialCapitalWordsExists() { - String test = "⠠⠠⠠JAG SAKNAR HONOM⠱"; + String test = "⠠⠠⠠JAG SAKNAR HONOM MYCKET⠱"; String filteredString = this.filter.filter(test); - assertEquals("⠠⠠⠠j SAKNAR oo⠱", filteredString); + assertEquals("⠠⠠⠠j SAKNAR HONOM y⠱", filteredString); } @Test @@ -73,6 +73,6 @@ public void testFilterWhenStringContainsSoftHyphen() { String test = "den här texten inne\u00ADhåller ord med och ut\u00ADan soft hyphen"; String filteredString = this.filter.filter(test); System.out.println(filteredString); - assertEquals("\\\\ här texten inne\u00ADhåller ord î c u soft hyphen", filteredString); + assertEquals("\\ här texten inne\u00ADhåller ord î c u soft hyphen", filteredString); } } From 8e50cc749e49b06917bf0f94565bcb1254b76a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20W=C3=A5linder?= Date: Fri, 28 Jun 2019 08:26:34 +0200 Subject: [PATCH 9/9] remove debug print --- .../impl/sv_SE/SwedishContractedBrailleFilterTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java index a410c93..e85403c 100644 --- a/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java +++ b/test/org/daisy/dotify/translator/impl/sv_SE/SwedishContractedBrailleFilterTest.java @@ -72,7 +72,6 @@ public void testFilterWhenSequentialCapitalWordsExists() { public void testFilterWhenStringContainsSoftHyphen() { String test = "den här texten inne\u00ADhåller ord med och ut\u00ADan soft hyphen"; String filteredString = this.filter.filter(test); - System.out.println(filteredString); assertEquals("\\ här texten inne\u00ADhåller ord î c u soft hyphen", filteredString); } }