code: private List getIncludedGlyphs(FontFileReader in, int glyphOffset,
                                       Integer glyphIdx) throws IOException {
          List ret = new ArrayList();
          ret.add(glyphIdx);
          int offset = glyphOffset + (int)mtxTab[glyphIdx.intValue()].getOffset() + 10;
          Integer compositeIdx = null;
          int flags = 0;
          boolean moreComposites = true;
          while (moreComposites) {
              flags = in.readTTFUShort(offset);
              compositeIdx = new Integer(in.readTTFUShort(offset + 2));
              ret.add(compositeIdx);
  
              offset += 4;
              if ((flags & 1) > 0) {
                  // ARG_1_AND_ARG_2_ARE_WORDS
                  offset += 4;
              } else {
                  offset += 2;
              }
  
              if ((flags & 8) > 0) {
                  offset += 2;    // WE_HAVE_A_SCALE
              } else if ((flags & 64) > 0) {
                  offset += 4;    // WE_HAVE_AN_X_AND_Y_SCALE
              } else if ((flags & 128) > 0) {
                  offset += 8;    // WE_HAVE_A_TWO_BY_TWO
              }
  
              if ((flags & 32) > 0) {
                  moreComposites = true;
              } else {
                  moreComposites = false;
              }
          }
  
          return ret;
      }
docs: Returns a List containing the glyph itself plus all glyphs
  that this composite glyph uses
  
  @param in The input from which to determine the included glyphs
  @param glyphOffset The offset the glyph
  @param glyphIdx The index of the base glyph
  @return The list of glyphs building the composite
  @throws IOException Indicates a failure to read from the font file