Exemple #1
0
  @SuppressWarnings("unused")
  public static void createWithParser(SDK sdk, Parser parser) throws Exception {
    if (!parser.next("Add(")) return;

    String elementName = parser.skip(4).copyTo(',');
    if (elementName == null || elementName.equals(""))
      throw new Exception("Invalid scheme. Current = \"" + parser.getCurrent() + "\"");

    BaseElement element = createElement(elementName, sdk);
    element.id = Integer.valueOf(parser.copyTo(','));
    element.x = Integer.valueOf(parser.copyTo(','));
    element.y = Integer.valueOf(parser.copyTo(')'));

    parser.skip(5); // "\r\n{\r\n

    // Парсинг властивостей
    boolean hasProp;
    String propName, propValue;
    while (hasProp = parser.hasStringInLine("=")) {
      parser.skip(); // " "
      propName = parser.copyTo('=');
      propValue = parser.copyTo('\r');
      element.properties.get(propName).value = propValue;
      parser.skip(); // "\n"
    }

    // Парсинг прихованих точок, які показуються
    boolean hasPoint;
    String pointName;
    while (hasPoint = parser.next(" Point(")) {
      parser.skip(7); // " Point("
      pointName = parser.copyTo(')');
      parser.skip(2); // "\r\n"
      element.points.get(pointName).isShown = true;
    }

    // Парсинг зв'язків
    boolean hasLink;
    String fromPoint, toId, toPoint, bpX, bpY;
    ArrayList<android.graphics.Point> breakpoints = new ArrayList<android.graphics.Point>();
    @SuppressWarnings("unchecked")
    ArrayList<byte[]> links = (ArrayList<byte[]>) parser.getTag(0);
    while (hasLink = parser.next(" link(")) {
      parser.skip(6); // " link("
      fromPoint = parser.copyTo(',');
      toId = parser.copyTo(':');
      toPoint = parser.copyTo(',');
      parser.skip(); // "["

      boolean hasBP;
      while (hasBP = parser.next("(")) {
        parser.skip(); // "("
        bpX = parser.copyTo(',');
        bpY = parser.copyTo(')');
        breakpoints.add(new android.graphics.Point(Integer.valueOf(bpX), Integer.valueOf(bpY)));
      }
      parser.skip(4); // "])\r\n"

      Parcel parcel = Parcel.obtain();
      parcel.writeInt(element.id);
      parcel.writeString(fromPoint);
      parcel.writeInt(Integer.valueOf(toId));
      parcel.writeString(toPoint);
      parcel.writeList(breakpoints);
      links.add(parcel.marshall());
      parcel.recycle();
    }

    sdk.addElement(element);
    parser.skip(3); // "}\r\n"
  }