code: private Transliterator getTransliterator(int source) {
          if (source == targetScript || source == UScript.INVALID_CODE) {
              if (isWide(targetScript)) {
                  return null;
              } else {
                  return widthFix;
              }
          }
  
          Integer key = Integer.valueOf(source);
          Transliterator t = cache.get(key);
          if (t == null) {
              String sourceName = UScript.getName(source);
              String id = sourceName + TARGET_SEP + target;
  
              try {
                  t = Transliterator.getInstance(id, FORWARD);
              } catch (RuntimeException e) { }
              if (t == null) {
  
                  // Try to pivot around Latin, our most common script
                  id = sourceName + LATIN_PIVOT + target;
                  try {
                      t = Transliterator.getInstance(id, FORWARD);
                  } catch (RuntimeException e) { }
              }
  
              if (t != null) {
                  if (!isWide(targetScript)) {
                      List<Transliterator> v = new ArrayList<Transliterator>();
                      v.add(widthFix);
                      v.add(t);
                      t = new CompoundTransliterator(v);
                  }
                  Transliterator prevCachedT = cache.putIfAbsent(key, t);
                  if (prevCachedT != null) {
                      t = prevCachedT;
                  }
              } else if (!isWide(targetScript)) {
                  return widthFix;
              }
          }
  
          return t;
      }
docs: Returns a transliterator from the given source to our target or
  target/variant.  Returns NULL if the source is the same as our
  target script, or if the source is USCRIPT_INVALID_CODE.
  Caches the result and returns the same transliterator the next
  time.  The caller does NOT own the result and must not delete
  it.