You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2010/05/21 19:53:29 UTC
svn commit: r947097 - in /pdfbox/trunk/pdfbox/src/main:
java/org/apache/pdfbox/encoding/Encoding.java
resources/Resources/additional_glyphlist.txt
Author: lehmi
Date: Fri May 21 17:53:29 2010
New Revision: 947097
URL: http://svn.apache.org/viewvc?rev=947097&view=rev
Log:
PDFBOX-728: added some more mappings and improved the character encoding used by tex/latex
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
pdfbox/trunk/pdfbox/src/main/resources/Resources/additional_glyphlist.txt
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java?rev=947097&r1=947096&r2=947097&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java Fri May 21 17:53:29 2010
@@ -275,76 +275,76 @@ public abstract class Encoding implement
*/
public static String getCharacter( String name )
{
- String baseName = name;
- String character = NAME_TO_CHARACTER.get( baseName );
+ String character = NAME_TO_CHARACTER.get( name );
if( character == null )
{
- String nameStr = baseName;
+ // test if we have a suffix and if so remove it
+ if ( name.indexOf('.') > 0 )
+ {
+ character = getCharacter(name.substring( 0, name.indexOf('.') ));
+ }
// test for Unicode name
// (uniXXXX - XXXX must be a multiple of four;
// each representing a hexadecimal Unicode code point)
- if ( nameStr.startsWith( "uni" ) )
+ else if ( name.startsWith( "uni" ) )
{
+ int nameLength = name.length();
StringBuilder uniStr = new StringBuilder();
-
- for ( int chPos = 3; chPos + 4 <= nameStr.length(); chPos += 4 )
+ try
{
- try
+ for ( int chPos = 3; chPos + 4 <= nameLength; chPos += 4 )
{
- int characterCode = Integer.parseInt( nameStr.substring( chPos, chPos + 4), 16 );
+ int characterCode = Integer.parseInt( name.substring( chPos, chPos + 4), 16 );
if ( ( characterCode > 0xD7FF ) && ( characterCode < 0xE000 ) )
{
- log.warn( "Unicode character name with not allowed code area: " + nameStr );
+ log.warn( "Unicode character name with not allowed code area: " + name );
}
else
{
uniStr.append( (char) characterCode );
}
}
- catch (NumberFormatException nfe)
- {
- log.warn( "Not a number in Unicode character name: " + nameStr );
- }
- }
- character = uniStr.toString();
- NAME_TO_CHARACTER.put(name, character);
- }
- // this hexadecimal encoding is used in pdfs generated by TeX/LateX
- else if (nameStr.startsWith("x"))
- {
- try {
- int value = Integer.parseInt(nameStr.substring(1), 16);
- character = ""+(char)value;
+ character = uniStr.toString();
NAME_TO_CHARACTER.put(name, character);
}
- catch(NumberFormatException exception) {
- log.warn( "Not a number in hexadecimal character name: " + nameStr );
+ catch (NumberFormatException nfe)
+ {
+ log.warn( "Not a number in Unicode character name: " + name );
+ character = name;
}
}
- // this decimal encoding is used in pdfs generated by TeX/LateX
- else if (nameStr.startsWith("a"))
+ // this encoding is used in pdfs generated with TeX/LateX
+ else if (name.length() <= 4 && (name.startsWith("x") || name.startsWith("a")) )
{
- try {
- int value = Integer.parseInt(nameStr.substring(1));
- character = ""+(char)value;
+ try
+ {
+ int value = Integer.parseInt(name.substring(1), (name.startsWith("x") ? 16 : 10));
+ // add some additional mapping for values < 32 and = 127
+ if (value >=0 && value <= 9)
+ {
+ value += 161;
+ }
+ else if (value >= 10 && value < 32)
+ {
+ value += 163;
+ }
+ else if ( value == 127)
+ {
+ value = 196;
+ }
+ character = Character.toString((char)value);
NAME_TO_CHARACTER.put(name, character);
}
- catch(NumberFormatException exception) {
- log.warn( "Not a number in dezimal character name: " + nameStr );
+ catch(NumberFormatException exception)
+ {
+ log.warn( "Not a number in character name: " + name );
+ character = name;
}
}
else
{
- // test if we have a suffix and if so remove it
- if ( nameStr.indexOf('.') > 0 )
- {
- nameStr = nameStr.substring( 0, nameStr.indexOf('.') );
- baseName = nameStr;
- getCharacter(baseName);
- }
-
- character = nameStr;
+ character = name;
}
}
return character;
Modified: pdfbox/trunk/pdfbox/src/main/resources/Resources/additional_glyphlist.txt
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/resources/Resources/additional_glyphlist.txt?rev=947097&r1=947096&r2=947097&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/resources/Resources/additional_glyphlist.txt (original)
+++ pdfbox/trunk/pdfbox/src/main/resources/Resources/additional_glyphlist.txt Fri May 21 17:53:29 2010
@@ -25,7 +25,7 @@ angbracketright;3009
circlecopyrt;00A9
controlNULL;0000
#
-# TeX-related mappings
+# TeX-related mappings using named values
#
angbracketleftbig;2329
angbracketleftBig;2329
@@ -35,6 +35,16 @@ angbracketrightBig;232A
angbracketrightbig;232A
angbracketrightBigg;232A
angbracketrightbigg;232A
+arrowhookleft;21AA
+arrowhookright;21A9
+arrowlefttophalf;21BC
+arrowleftbothalf;21BD
+arrownortheast;2197
+arrownorthwest;2196
+arrowrighttophalf;21C0
+arrowrightbothalf;21C1
+arrowsoutheast;2198
+arrowsouthwest;2199
backslashbig;2216
backslashBig;2216
backslashBigg;2216
@@ -89,6 +99,7 @@ floorrightbigg;230B
hatwide;0302
hatwider;0302
hatwidest;0302
+intercal;1D40
integraldisplay;222B
integraltext;222B
intersectiondisplay;22C2
@@ -132,3 +143,18 @@ unionsqtext;2294
uniontext;22C3
vextenddouble;2225
vextendsingle;2223
+#
+# TeX-related mappings using hexadecimal or decimal values
+#
+x1b;FB00
+x1c;FB01
+x1d;FB02
+x1e;FB03
+x8a;0141
+xff;00DF
+a27;FB00
+a28;FB01
+a29;FB02
+a30;FB03
+a138;0141
+a255;00DF
\ No newline at end of file