/** Writes the definition part of this list level */
 public void writeDefinition(final OutputStream result) throws IOException {
   result.write(OPEN_GROUP);
   result.write(LIST_LEVEL);
   result.write(LIST_LEVEL_TYPE);
   switch (this.listType) {
     case LIST_TYPE_BULLET:
       result.write(intToByteArray(23));
       break;
     case LIST_TYPE_NUMBERED:
       result.write(intToByteArray(0));
       break;
     case LIST_TYPE_UPPER_LETTERS:
       result.write(intToByteArray(3));
       break;
     case LIST_TYPE_LOWER_LETTERS:
       result.write(intToByteArray(4));
       break;
     case LIST_TYPE_UPPER_ROMAN:
       result.write(intToByteArray(1));
       break;
     case LIST_TYPE_LOWER_ROMAN:
       result.write(intToByteArray(2));
       break;
   }
   result.write(LIST_LEVEL_TYPE_NEW);
   switch (this.listType) {
     case LIST_TYPE_BULLET:
       result.write(intToByteArray(23));
       break;
     case LIST_TYPE_NUMBERED:
       result.write(intToByteArray(0));
       break;
     case LIST_TYPE_UPPER_LETTERS:
       result.write(intToByteArray(3));
       break;
     case LIST_TYPE_LOWER_LETTERS:
       result.write(intToByteArray(4));
       break;
     case LIST_TYPE_UPPER_ROMAN:
       result.write(intToByteArray(1));
       break;
     case LIST_TYPE_LOWER_ROMAN:
       result.write(intToByteArray(2));
       break;
   }
   result.write(LIST_LEVEL_ALIGNMENT);
   result.write(intToByteArray(0));
   result.write(LIST_LEVEL_ALIGNMENT_NEW);
   result.write(intToByteArray(0));
   result.write(LIST_LEVEL_START_AT);
   result.write(intToByteArray(1));
   result.write(OPEN_GROUP);
   result.write(LIST_LEVEL_TEXT);
   if (this.listType != LIST_TYPE_BULLET) {
     result.write(LIST_LEVEL_STYLE_NUMBERED_BEGIN);
     if (listLevel < 10) {
       result.write(intToByteArray(0));
     }
     result.write(intToByteArray(listLevel));
     result.write(LIST_LEVEL_STYLE_NUMBERED_END);
   } else {
     result.write(LIST_LEVEL_STYLE_BULLETED_BEGIN);
     this.document.filterSpecialChar(result, this.bulletCharacter, false, false);
     result.write(LIST_LEVEL_STYLE_BULLETED_END);
   }
   result.write(CLOSE_GROUP);
   result.write(OPEN_GROUP);
   result.write(LIST_LEVEL_NUMBERS_BEGIN);
   if (this.listType != LIST_TYPE_BULLET) {
     result.write(LIST_LEVEL_NUMBERS_NUMBERED);
   }
   result.write(LIST_LEVEL_NUMBERS_END);
   result.write(CLOSE_GROUP);
   result.write(RtfFontList.FONT_NUMBER);
   if (this.listType != LIST_TYPE_BULLET) {
     result.write(intToByteArray(fontNumber.getFontNumber()));
   } else {
     result.write(intToByteArray(fontBullet.getFontNumber()));
   }
   // .result.write(writeIndentations());
   writeIndentations(result);
   result.write(LIST_LEVEL_SYMBOL_INDENT);
   result.write(intToByteArray(this.leftIndent));
   result.write(CLOSE_GROUP);
   result.write("\n".getBytes());
   for (int i = 0; i < items.size(); i++) {
     RtfElement rtfElement = (RtfElement) items.get(i);
     if (rtfElement instanceof RtfList) {
       RtfList rl = (RtfList) rtfElement;
       // .result.write(((RtfList) rtfElement).writeDefinition());
       rl.writeDefinition(result);
       break;
     } else if (rtfElement instanceof RtfListItem) {
       RtfListItem rli = (RtfListItem) rtfElement;
       // .byte[] data = rli.writeDefinition();
       // .if(data.length > 0) {
       // .    result.write(data);
       // .    break;
       // .}
       if (rli.writeDefinition(result)) break;
     }
   }
 }
  /**
   * Constructs a new RtfList for the specified List.
   *
   * @param doc The RtfDocument this RtfList belongs to
   * @param list The List this RtfList is based on
   */
  public RtfList(RtfDocument doc, List list) {
    super(doc);

    this.listNumber = document.getDocumentHeader().getListNumber(this);

    this.items = new ArrayList();
    if (list.getSymbolIndent() > 0 && list.getIndentationLeft() > 0) {
      this.firstIndent = (int) (list.getSymbolIndent() * RtfElement.TWIPS_FACTOR * -1);
      this.leftIndent =
          (int) ((list.getIndentationLeft() + list.getSymbolIndent()) * RtfElement.TWIPS_FACTOR);
    } else if (list.getSymbolIndent() > 0) {
      this.firstIndent = (int) (list.getSymbolIndent() * RtfElement.TWIPS_FACTOR * -1);
      this.leftIndent = (int) (list.getSymbolIndent() * RtfElement.TWIPS_FACTOR);
    } else if (list.getIndentationLeft() > 0) {
      this.firstIndent = 0;
      this.leftIndent = (int) (list.getIndentationLeft() * RtfElement.TWIPS_FACTOR);
    } else {
      this.firstIndent = 0;
      this.leftIndent = 0;
    }
    this.rightIndent = (int) (list.getIndentationRight() * RtfElement.TWIPS_FACTOR);
    this.symbolIndent =
        (int) ((list.getSymbolIndent() + list.getIndentationLeft()) * RtfElement.TWIPS_FACTOR);

    if (list instanceof RomanList) {
      if (list.isLowercase()) {
        this.listType = LIST_TYPE_LOWER_ROMAN;
      } else {
        this.listType = LIST_TYPE_UPPER_ROMAN;
      }
    } else if (list.isNumbered()) {
      this.listType = LIST_TYPE_NUMBERED;
    } else if (list.isLettered()) {
      if (list.isLowercase()) {
        this.listType = LIST_TYPE_LOWER_LETTERS;
      } else {
        this.listType = LIST_TYPE_UPPER_LETTERS;
      }
    }

    for (int i = 0; i < list.getItems().size(); i++) {
      try {
        Element element = (Element) list.getItems().get(i);
        if (element.type() == Element.CHUNK) {
          element = new ListItem((Chunk) element);
        }
        if (element instanceof ListItem) {
          this.alignment = ((ListItem) element).getAlignment();
        }
        RtfBasicElement rtfElement = doc.getMapper().mapElement(element);
        if (rtfElement instanceof RtfList) {
          ((RtfList) rtfElement).setListNumber(listNumber);
          ((RtfList) rtfElement).setListLevel(listLevel + 1);
          ((RtfList) rtfElement).setParent(this);
        } else if (rtfElement instanceof RtfListItem) {
          ((RtfListItem) rtfElement).setParent(this);
          ((RtfListItem) rtfElement).inheritListSettings(listNumber, listLevel + 1);
        }
        items.add(rtfElement);
      } catch (DocumentException de) {
        de.printStackTrace();
      }
    }

    if (this.listLevel == 0) {
      correctIndentation();
    }

    fontNumber =
        new RtfFont(document, new Font(Font.TIMES_ROMAN, 10, Font.NORMAL, new Color(0, 0, 0)));
    if (list.getSymbol() != null
        && list.getSymbol().getFont() != null
        && !list.getSymbol().getContent().startsWith("-")
        && list.getSymbol().getContent().length() > 0) {
      // only set this to bullet symbol is not default
      this.fontBullet = new RtfFont(document, list.getSymbol().getFont());
      this.bulletCharacter = list.getSymbol().getContent().substring(0, 1);
    } else {
      this.fontBullet =
          new RtfFont(document, new Font(Font.SYMBOL, 10, Font.NORMAL, new Color(0, 0, 0)));
    }
  }