diff options
author | Simon Steiner <ssteiner@apache.org> | 2018-11-20 12:35:21 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2018-11-20 12:35:21 +0000 |
commit | 5c6ec4d9a8d11e2ef2c6b91f52c9cfee71e88646 (patch) | |
tree | cad34bff09fa2c5c320dc8dff573cbceac381bfd /fop-core/src/test | |
parent | b2cdec0119b0778fbaf7b53ab39d25dee284384d (diff) | |
download | xmlgraphics-fop-5c6ec4d9a8d11e2ef2c6b91f52c9cfee71e88646.tar.gz xmlgraphics-fop-5c6ec4d9a8d11e2ef2c6b91f52c9cfee71e88646.zip |
FOP-2827: Add support for Khmer complex script
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1846994 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'fop-core/src/test')
-rw-r--r-- | fop-core/src/test/java/org/apache/fop/complexscripts/scripts/KhmerTestCase.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/KhmerTestCase.java b/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/KhmerTestCase.java new file mode 100644 index 000000000..2268fee30 --- /dev/null +++ b/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/KhmerTestCase.java @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +/* $Id$ */ +package org.apache.fop.complexscripts.scripts; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +import org.apache.fop.complexscripts.fonts.GlyphCoverageTable; +import org.apache.fop.complexscripts.fonts.GlyphPositioningTable; +import org.apache.fop.complexscripts.fonts.GlyphSubtable; +import org.apache.fop.complexscripts.fonts.GlyphTable; +import org.apache.fop.complexscripts.fonts.OTFLanguage; +import org.apache.fop.complexscripts.fonts.OTFScript; +import org.apache.fop.complexscripts.util.CharScript; +import org.apache.fop.complexscripts.util.GlyphSequence; +import org.apache.fop.fonts.MultiByteFont; + +public class KhmerTestCase { + @Test + public void testProcessor() { + String in = "\u179b\u17c1\u1781\u179a\u17c0\u1784\u17b7\u179c\u17d2\u1780\u1780\u1799\u1794\u17d2\u178f\u179a"; + String out = + "\u17c1\u179b\u1781\u17c1\u179a\u17c0\u1784\u17b7\u179c\u17d2\u1780\u1780\u1799\u1794\u17d2\u178f\u179a"; + assertEquals( + new KhmerScriptProcessor(OTFScript.KHMER).preProcess(in, new MultiByteFont(null, null), null), out); + } + + @Test + public void testPositioning() { + GlyphSubtable subtable5 = GlyphPositioningTable.createSubtable(5, "lu1", 0, 0, 1, + GlyphCoverageTable.createCoverageTable(Collections.singletonList(0)), + Arrays.asList( + GlyphCoverageTable.createCoverageTable(Collections.singletonList(0)), + 0, + 1, + new GlyphPositioningTable.MarkAnchor[] { + new GlyphPositioningTable.MarkAnchor(0, new GlyphPositioningTable.Anchor(0, 0)) + }, + new GlyphPositioningTable.Anchor[][][] { + new GlyphPositioningTable.Anchor[][] { + new GlyphPositioningTable.Anchor[] { + new GlyphPositioningTable.Anchor(12, 0) + } + } + } + )); + Map<GlyphTable.LookupSpec, List> lookups = new HashMap<GlyphTable.LookupSpec, List>(); + lookups.put(new GlyphTable.LookupSpec(OTFScript.KHMER, OTFLanguage.DEFAULT, "abvm"), + Collections.singletonList("lu1")); + Map<String, ScriptProcessor> processors = new HashMap<String, ScriptProcessor>(); + processors.put(OTFScript.KHMER, new KhmerScriptProcessor(OTFScript.KHMER)); + GlyphPositioningTable gpt = + new GlyphPositioningTable(null, lookups, Collections.singletonList(subtable5), processors); + + ScriptProcessor scriptProcessor = ScriptProcessor.getInstance(OTFScript.KHMER, processors); + MultiByteFont multiByteFont = new MultiByteFont(null, null); + GlyphSequence glyphSequence = multiByteFont.charSequenceToGlyphSequence("test", null); + scriptProcessor.preProcess("test", multiByteFont, null); + scriptProcessor.substitute( + glyphSequence, OTFScript.KHMER, OTFLanguage.DEFAULT, new GlyphTable.UseSpec[0], null); + int[][] adjustments = new int[4][1]; + gpt.position(glyphSequence, OTFScript.KHMER, OTFLanguage.DEFAULT, 0, null, adjustments); + Assert.assertArrayEquals(adjustments[1], new int[]{12}); + } + + @Test + public void testMakeProcessor() { + Assert.assertTrue(IndicScriptProcessor.makeProcessor(OTFScript.KHMER) instanceof KhmerScriptProcessor); + Assert.assertTrue(CharScript.isIndicScript(OTFScript.KHMER)); + } + + @Test + public void testKhmerRenderer() { + KhmerRenderer khmerRenderer = new KhmerRenderer(); + StringBuilder stringBuilder = new StringBuilder(); + int khmerStart = 6016; + for (int i = khmerStart; i < khmerStart + 128; i++) { + stringBuilder.append((char)i); + } + String allKhmerChars = stringBuilder.toString(); + String expected = khmerRenderer.render(allKhmerChars); + assertEquals(expected.length(), 133); + + StringBuilder diff = new StringBuilder(); + for (int i = 0; i < allKhmerChars.length(); i++) { + if (allKhmerChars.charAt(i) != expected.charAt(i)) { + diff.append(expected.charAt(i)); + } + } + assertEquals(diff.length(), 66); + assertEquals(diff.charAt(0), (char) 6081); + } +} |