diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml index 0d41dd0143..3ccb714770 100644 --- a/config/checkstyle/suppressions.xml +++ b/config/checkstyle/suppressions.xml @@ -139,8 +139,8 @@ lines="90,91,92,96,100,104,105,107,264,275,276,284,286,293,294,308,309,359,361,449,495,605,674,710"/> - - + + diff --git a/src/org/omegat/Bundle.properties b/src/org/omegat/Bundle.properties index 19327348bb..f6d12d3c0a 100644 --- a/src/org/omegat/Bundle.properties +++ b/src/org/omegat/Bundle.properties @@ -2947,3 +2947,8 @@ DICTIONARY_LOAD_FILE=Loaded dictionary from '{0}': {1} ms DICTIONARY_LOAD_ERROR=Error load dictionary from '{0}': {1} DICTIONARY_MANAGER_ERROR_SAVE_IGNORE=Error saving ignore words" EDITOR_CONTROLLER_EXCEPTION=bad location exception when changing case + +MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_TM=External TM +MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_FILES=Source Files +MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_MEMORY=Project +MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_SUBSEGMENTS=Sub-segmented match diff --git a/src/org/omegat/core/matching/NearString.java b/src/org/omegat/core/matching/NearString.java index 827da2f4e5..bdaef735fa 100644 --- a/src/org/omegat/core/matching/NearString.java +++ b/src/org/omegat/core/matching/NearString.java @@ -49,37 +49,81 @@ */ public class NearString { public enum MATCH_SOURCE { - MEMORY, TM, FILES - }; + /** From project memory */ + MEMORY, + /** From external TM in project tm/ folder */ + TM, + /** From source files */ + FILES, + /** From sub-segmented match */ + SUBSEGMENTS + } public enum SORT_KEY { - SCORE, SCORE_NO_STEM, ADJUSTED_SCORE + /** normal score */ + SCORE, + /** score without stemming */ + SCORE_NO_STEM, + /** adjusted score */ + ADJUSTED_SCORE } - public NearString(EntryKey key, ITMXEntry entry, MATCH_SOURCE comesFrom, boolean fuzzyMark, - Scores scores, byte[] nearData, String projName) { - this(key, entry.getSourceText(), entry.getTranslationText(), comesFrom, fuzzyMark, scores, - nearData, projName, entry.getCreator(), entry.getCreationDate(), entry.getChanger(), + /** + * Constructor. + * + * @param key + * entry key + * @param entry + * the TMX entry that has source text, translation text, creator, + * creation date, changer, change date and properties. + * @param comesFrom + * origin + * @param fuzzyMark + * fuzzy or not + * @param scores + * score values + * @param nearData + * similarity data. + * @param projName + * project name. + */ + public NearString(EntryKey key, ITMXEntry entry, MATCH_SOURCE comesFrom, boolean fuzzyMark, Scores scores, + byte[] nearData, String projName) { + this(key, entry.getSourceText(), entry.getTranslationText(), comesFrom, fuzzyMark, scores, nearData, + projName, entry.getCreator(), entry.getCreationDate(), entry.getChanger(), entry.getChangeDate(), entry.getProperties()); } /** * Constructor, backward compatible. - * @param key entry key - * @param source source text - * @param translation translation text - * @param comesFrom origin - * @param fuzzyMark fuzzy or not + * + * @param key + * entry key + * @param source + * source text + * @param translation + * translation text + * @param comesFrom + * origin + * @param fuzzyMark + * fuzzy or not * @param nearScore * @param nearScoreNoStem * @param adjustedScore - * @param nearData similarity data. - * @param projName project name. - * @param creator creator name - * @param creationDate creation date - * @param changer changer name - * @param changedDate changer date - * @param props properties of entry. + * @param nearData + * similarity data. + * @param projName + * project name. + * @param creator + * creator name + * @param creationDate + * creation date + * @param changer + * changer name + * @param changedDate + * changer date + * @param props + * properties of entry. */ @Deprecated public NearString(EntryKey key, String source, String translation, MATCH_SOURCE comesFrom, @@ -110,14 +154,23 @@ private NearString(EntryKey key, String source, String translation, MATCH_SOURCE /** * Merge NearString object. - * @param ns NearString to merge. - * @param key entry key. - * @param entry TMXEntry entry - * @param comesFrom origin - * @param fuzzyMark fuzzy or not - * @param scores similarity score - * @param nearData similarity data - * @param projName project name + * + * @param ns + * NearString to merge. + * @param key + * entry key. + * @param entry + * TMXEntry entry + * @param comesFrom + * origin + * @param fuzzyMark + * fuzzy or not + * @param scores + * similarity score + * @param nearData + * similarity data + * @param projName + * project name * @return NearString merged. */ public static NearString merge(NearString ns, EntryKey key, ITMXEntry entry, MATCH_SOURCE comesFrom, diff --git a/src/org/omegat/core/statistics/FindMatches.java b/src/org/omegat/core/statistics/FindMatches.java index 614cb2c8f4..9074d5c3ef 100644 --- a/src/org/omegat/core/statistics/FindMatches.java +++ b/src/org/omegat/core/statistics/FindMatches.java @@ -265,8 +265,8 @@ public List search(String searchText, boolean requiresTranslation, b for (ITMXEntry tmen : en.getValue().getEntries()) { checkStopped(stop); if (tmen.getSourceText() == null) { - // Not all TMX entries have a source; in that case there can - // be no meaningful match, so skip. + // Not all TMX entries have a source; skip it in + // the case, because of no meaningful. continue; } if (requiresTranslation && tmen.getTranslationText() == null) { @@ -279,6 +279,7 @@ public List search(String searchText, boolean requiresTranslation, b processEntry(null, tmen, en.getKey(), NearString.MATCH_SOURCE.TM, false, tmenPenalty); } } + // travel by all entries for check source file translations for (SourceTextEntry ste : project.getAllEntries()) { checkStopped(stop); diff --git a/src/org/omegat/gui/matches/MatchesVarExpansion.java b/src/org/omegat/gui/matches/MatchesVarExpansion.java index 850daf5272..ca473351b1 100644 --- a/src/org/omegat/gui/matches/MatchesVarExpansion.java +++ b/src/org/omegat/gui/matches/MatchesVarExpansion.java @@ -90,11 +90,13 @@ public class MatchesVarExpansion extends VarExpansion { public static final String VAR_DIFF_REVERSED = "${diffReversed}"; public static final String VAR_SOURCE_LANGUAGE = "${sourceLanguage}"; public static final String VAR_TARGET_LANGUAGE = "${targetLanguage}"; + public static final String VAR_MATCH_SOURCE = "${matchSource}"; private static final String[] MATCHES_VARIABLES = { VAR_ID, VAR_SOURCE_TEXT, VAR_DIFF, VAR_DIFF_REVERSED, VAR_TARGET_TEXT, VAR_SCORE_BASE, VAR_SCORE_NOSTEM, VAR_SCORE_ADJUSTED, VAR_FILE_NAME_ONLY, VAR_FILE_PATH, VAR_FILE_SHORT_PATH, VAR_INITIAL_CREATION_ID, VAR_INITIAL_CREATION_DATE, - VAR_CHANGED_ID, VAR_CHANGED_DATE, VAR_FUZZY_FLAG, VAR_SOURCE_LANGUAGE, VAR_TARGET_LANGUAGE }; + VAR_CHANGED_ID, VAR_CHANGED_DATE, VAR_FUZZY_FLAG, VAR_SOURCE_LANGUAGE, VAR_TARGET_LANGUAGE, + VAR_MATCH_SOURCE }; public static List getMatchesVariables() { return Collections.unmodifiableList(Arrays.asList(MATCHES_VARIABLES)); @@ -102,7 +104,7 @@ public static List getMatchesVariables() { public static final String DEFAULT_TEMPLATE = VAR_ID + ". " + VAR_FUZZY_FLAG + VAR_SOURCE_TEXT + "\n" + VAR_TARGET_TEXT + "\n" + "<" + VAR_SCORE_BASE + "/" + VAR_SCORE_NOSTEM + "/" - + VAR_SCORE_ADJUSTED + "% " + VAR_FILE_PATH + ">"; + + VAR_SCORE_ADJUSTED + "%" + VAR_MATCH_SOURCE + VAR_FILE_PATH + ">"; public static final Pattern PATTERN_SINGLE_PROPERTY = Pattern.compile("@\\{(.+?)\\}"); public static final Pattern PATTERN_PROPERTY_GROUP = Pattern @@ -222,6 +224,22 @@ private String getPropValue(List props, String type) { return null; } + private String expandMatchSource(String localTemplate, NearString.MATCH_SOURCE comesFrom) { + switch (comesFrom) { + case TM: + return localTemplate.replace(VAR_MATCH_SOURCE, OStrings.getString("MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_TM") + " "); + case FILES: + return localTemplate.replace(VAR_MATCH_SOURCE, OStrings.getString("MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_FILES")); + case MEMORY: + return localTemplate.replace(VAR_MATCH_SOURCE, OStrings.getString("MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_MEMORY")); + case SUBSEGMENTS: + return localTemplate.replace(VAR_MATCH_SOURCE, OStrings.getString( + "MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_SUBSEGMENTS") + " "); + default: + return localTemplate.replace(VAR_MATCH_SOURCE, ""); + } + } + @Override public String expandVariables(NearString match) { // do not modify template directly, so that we can reuse for another @@ -285,6 +303,9 @@ public String expandVariables(NearString match) { } else { localTemplate = localTemplate.replace(VAR_TARGET_TEXT, match.translation); } + + localTemplate = expandMatchSource(localTemplate, match.comesFrom); + return localTemplate; } diff --git a/test-acceptance/src/org/omegat/gui/matches/MatchesTextAreaTest.java b/test-acceptance/src/org/omegat/gui/matches/MatchesTextAreaTest.java index 252a7db7d9..76754584d0 100644 --- a/test-acceptance/src/org/omegat/gui/matches/MatchesTextAreaTest.java +++ b/test-acceptance/src/org/omegat/gui/matches/MatchesTextAreaTest.java @@ -53,7 +53,8 @@ public void testFuzzyMatches() throws Exception { window.textBox("matches_pane").requireNotEditable(); Pattern pattern = Pattern.compile("1. Error while reading MT results\\n" + "Erreur lors de la lecture des résultats de TA\\n" - + "<\\d+/\\d+/\\d+%\\s*>"); + + "<\\d+/\\d+/\\d+%\\s*" + OStrings.getString( + "MATCHES_VAR_EXPANSION_MATCH_COMES_FROM_MEMORY") + "\\s*>"); window.textBox("matches_pane").requireText(pattern); closeProject(); } diff --git a/test/src/org/omegat/gui/matches/MatchesVarExpansionTest.java b/test/src/org/omegat/gui/matches/MatchesVarExpansionTest.java index 8a552c120e..48ead68b18 100644 --- a/test/src/org/omegat/gui/matches/MatchesVarExpansionTest.java +++ b/test/src/org/omegat/gui/matches/MatchesVarExpansionTest.java @@ -45,6 +45,7 @@ import org.omegat.core.data.ProjectProperties; import org.omegat.core.data.SourceTextEntry; import org.omegat.core.matching.NearString; +import org.omegat.core.matching.NearString.MATCH_SOURCE; import org.omegat.gui.editor.IEditor; import org.omegat.gui.editor.IEditorFilter; import org.omegat.gui.editor.IEditorSettings; @@ -208,7 +209,7 @@ public NearString getMockNearString() { entry.changeDate = 20020523; entry.otherProperties = testProps; NearString.Scores scores = new NearString.Scores(20, 40, 60); - return new NearString(null, entry, null, false, scores, null, "mock testing project"); + return new NearString(null, entry, MATCH_SOURCE.TM, false, scores, null, "mock testing project"); }; private void setupProject(Language sourceLanguage, Language targetLanguage) {