@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" }