9.2 Unicode Filter

Non-ASCII characters are translated into unicode hexadecimal entities. The same holds for ascii characters listed within the filter.

<..XtpipesUni.java..>
 /* XtpipesUni.java (2014-05-24-12:32), generated from xtpipes.tex
    Copyright (C) 2009-2010 TeX Users Group
    Copyright (C) 2002-2009 Eitan M. Gurari
 <.TeX4ht copyright.> */
 package xtpipes;
 public class XtpipesUni{
    <.String toUni( char[], start, length, filter ).>
    <.String toUni( String, filter ).>
 }
 -_-_-

<..String toUni( char[], start, length, filter )..>
 private static int D800 = Integer.parseInt("D800", 16);
 private static int DFFF = Integer.parseInt("DFFF", 16);
 private static int DC00 = Integer.parseInt("DC00", 16);
 private static int X400 = Integer.parseInt("400",16);
 private static int X10000 = Integer.parseInt("10000",16);
 
 
 public static String toUni( char[] ch, int start, int length,
                                            String filter ){
    StringBuffer buf = new StringBuffer(length);
    for (int i = 0; i < length; i++) {
        int chr = ch[ start + i ];
        boolean ascii =  (chr == ’\n’)
                         || (chr > 31) && (chr < 127) ;
        if( filter.indexOf(chr) > -1 ){ ascii = false; }
 
        if( (chr >= D800) && (chr<= DFFF) ){
           chr = ((ch[i] - D800) * X400 + (ch[++i] - DC00)) + X10000;
        }
 
 
        buf.append(
          ascii ? Character.toString((char) chr)
                : ("&#x"
                  + Integer.toHexString(chr).toUpperCase()
                  + ";" ) );
    }
    return new String(buf);
 }
 -_-_-

<..String toUni( String, filter )..>
 public static String toUni( String s, String filter ){
    char [] ch = s.toCharArray();
    int length = ch.length;
    return toUni(ch, 0, length, filter);
 }
 -_-_-