| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 |
- /**
- * Simple Creation API, mainly designed for use in the ECMAScript console.
- */
- /**
- * Sets the current color for newly added entities
- * \ingroup ecma_simple
- *
- * \code
- * setCurrentColor(new RColor(255, 255, 255))
- * setCurrentColor(new RColor("white"))
- * setCurrentColor(255, 255, 255)
- * \endcode
- */
- function setCurrentColor(color) {
- var di = getTransactionDocumentInterface();
- if (isNull(di)) {
- di = getTransactionDocument();
- }
- if (isNull(di)) {
- qWarning("no document interface or document");
- return;
- }
- // r, g, b:
- if (arguments.length===3) {
- setCurrentColor(new RColor(arguments[0], arguments[1], arguments[2]));
- return;
- }
- di.setCurrentColor(color);
- }
- /**
- * Checks if the given layer exists.
- * \ingroup ecma_simple
- *
- * \code
- * hasLayer("MyLayer1")
- * \endcode
- */
- function hasLayer(name) {
- var doc = getTransactionDocument();
- if (isNull(doc)) {
- return false;
- }
- return doc.hasLayer(name);
- }
- /**
- * Adds a layer to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addLayer("MyLayer1")
- * addLayer("MyLayer2", "white", "CONTINUOUS", RLineweight.Weight025)
- * \endcode
- */
- function addLayer(name, colorName, linetypeName, lineWeight) {
- var doc = getTransactionDocument();
- if (isNull(doc)) {
- return undefined;
- }
- if (isNull(colorName)) {
- colorName = "white";
- }
- if (isNull(linetypeName)) {
- linetypeName = "CONTINUOUS";
- }
- if (isNull(lineWeight)) {
- lineWeight = RLineweight.Weight000;
- }
- if (doc.hasLayer(name)) {
- return undefined;
- }
- var layer = new RLayer(
- doc, name, false, false,
- new RColor(colorName),
- doc.getLinetypeId(linetypeName),
- lineWeight, false
- );
- return addObject(layer);
- }
- /**
- * Sets the current layer to the given layer.
- * \ingroup ecma_simple
- *
- * \param layerName Layer name or ID.
- */
- function setCurrentLayer(layerName) {
- var di = getTransactionDocumentInterface();
- if (isNull(di)) {
- return false;
- }
- di.setCurrentLayer(layerName);
- }
- /**
- * Adds a point to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addPoint(x,y)
- * addPoint([x,y])
- * addPoint(new RVector(x,y))
- * \endcode
- */
- function addPoint(position) {
- if (arguments.length===2) {
- return addPoint(new RVector(arguments[0], arguments[1]));
- }
- if (isArray(position)) {
- return addPoint(new RVector(position));
- }
- return addShape(new RPoint(position));
- }
- /**
- * Adds a line to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addLine(x1,y1, x2,y2)
- * addLine([x1,y1], [x2,y2])
- * addLine(new RVector(x1,y1), new RVector(x2,y2))
- * \endcode
- */
- function addLine(startPoint, endPoint) {
- if (arguments.length===4) {
- return addLine(new RVector(arguments[0], arguments[1]), new RVector(arguments[2], arguments[3]));
- }
- if (isArray(startPoint)) {
- startPoint = new RVector(startPoint);
- }
- if (isArray(endPoint)) {
- endPoint = new RVector(endPoint);
- }
- return addShape(new RLine(startPoint, endPoint));
- }
- /**
- * Adds an infinite line to the drawing.
- * The two vectors are the base point and the direction vector
- * (point relative to base point)
- * \ingroup ecma_simple
- *
- * \code
- * addXLine(x1,y1, dx,dy)
- * addXLine([x1,y1], [dx,dy])
- * addXLine(new RVector(x1,y1), new RVector(dx,dy))
- * \endcode
- */
- function addXLine(startPoint, directionVector) {
- if (arguments.length===4) {
- return addXLine(new RVector(arguments[0], arguments[1]), new RVector(arguments[2], arguments[3]));
- }
- if (isArray(startPoint)) {
- startPoint = new RVector(startPoint);
- }
- if (isArray(directionVector)) {
- directionVector = new RVector(directionVector);
- }
- return addShape(new RXLine(startPoint, directionVector));
- }
- /**
- * Adds an arc to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addArc(cx,cy, radius, startAngle, endAngle, reversed)
- * addArc([cx,cy], radius, startAngle, endAngle, reversed)
- * addArc(new RVector(cx,cy), radius, startAngle, endAngle, reversed)
- * \endcode
- */
- function addArc(center, radius, startAngle, endAngle, reversed) {
- if (arguments.length===6) {
- return addArc(new RVector(arguments[0], arguments[1]), arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- if (isArray(center)) {
- center = new RVector(center);
- }
- if (!isVector(center)) {
- qWarning("invalid center");
- throw("invalid center");
- }
- return addShape(new RArc(center, radius, deg2rad(startAngle), deg2rad(endAngle), reversed));
- }
- /**
- * Adds a circle to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addCircle(cx,cy, radius)
- * addCircle([cx,cy], radius)
- * addCircle(new RVector(cx,cy), radius)
- * \endcode
- */
- function addCircle(center, radius) {
- if (arguments.length===3) {
- return addCircle(new RVector(arguments[0], arguments[1]), arguments[2]);
- }
- if (isArray(center)) {
- center = new RVector(center);
- }
- return addShape(new RCircle(center, radius));
- }
- /**
- * Adds a polyline to the drawing.
- * \ingroup ecma_simple
- * \author Andrew Mustun
- * \author tukuyomi
- *
- * \param p Array of type [ [ x, y, bulge, relative ], ..., [ ... ] ]
- * or [ [ vector, bulge, relative ], ..., [ ... ] ]
- * Where:
- * x: X coordinate
- * y: Y coordinate
- * vector: RVector with position of vertex
- * bulge: Bulge for next segment after vertex, defaults to 0.0.
- * relative: True if this vector's coordinates are relative to the previous coordinates,
- * defaults to false.
- *
- * \param closed True for an implicitly closed polyline. Default is false.
- * \param relative True to treat all coordinates as relative.
- * The first coordinate is always absolute. Default is false.
- *
- * \code
- * addPolyline([[x1,y1],[x2,y2],[x3,y3]], false)
- * addPolyline([ [ 100 , 0 ], [ 20 , -10 , 1 ], [ 0 , 40 , 0 , true ], [ -20 , -10 , 1 , true ] ])
- * addPolyline([new RVector(x1,y1),new RVector(x2,y2),new RVector(x3,y3)], closed, relative)
- * addPolyline([[new RVector(x1,y1),bulge1,rel1],[new RVector(x2,y2),bulge2,rel2],[new RVector(x3,y3),bulge3,rel3]], closed, relative)
- * \endcode
- */
- function addPolyline(points, closed, relative) {
- if (isNull(closed)) {
- closed = false;
- }
- if (isNull(relative)) {
- relative = false;
- }
- var pl = new RPolyline();
- pl.setClosed(closed);
- var v = new RVector(0,0);
- for (var i=0; i<points.length; i++) {
- var v0 = undefined;
- var b = 0.0;
- var rel = relative;
- if (isVector(points[i])) {
- v0 = points[i];
- }
- // first item in vertex tuple is RVector or x,y pair:
- else if (isArray(points[i])) {
- if (isVector(points[i][0])) {
- v0 = points[i][0];
- if (!isNull(points[i][1])) {
- b = points[i][1];
- }
- if (!isNull(points[i][2])) {
- rel = points[i][2];
- }
- }
- else {
- v0 = new RVector(points[i][0], points[i][1]);
- if (!isNull(points[i][2])) {
- b = points[i][2];
- }
- if (!isNull(points[i][3])) {
- rel = points[i][3];
- }
- }
- }
- // custom objects with .x, .y (, .z, .b) members:
- else if (isNumber(points[i].x) && isNumber(points[i].y)) {
- if (isNumber(points[i].z)) {
- v0 = new RVector(points[i].x, points[i].y, points[i].z);
- }
- else {
- v0 = new RVector(points[i].x, points[i].y);
- }
- if (isNumber(points[i].b)) {
- b = points[i].b;
- }
- }
- // relative or absolute vertex position:
- if (relative) {
- v = v.operator_add(v0);
- }
- else {
- v = v0;
- }
- pl.appendVertex(v, b);
- }
- return addShape(pl);
- }
- /**
- * Adds a spline to the drawing.
- * \ingroup ecma_simple
- *
- * \param fitPoints Array of RVector or [x,y] tuples.
- * \param closed True for a closed, periodic spline.
- *
- * \code
- * addSpline([[x1,y1],[x2,y2],[x3,y3]], false)
- * addSpline([new RVector(x1,y1),new RVector(x2,y2),new RVector(x3,y3)], false)
- * \endcode
- */
- function addSpline(points, closed) {
- if (isNull(closed)) {
- closed = false;
- }
- var sp = new RSpline();
- sp.setPeriodic(closed);
- for (var i=0; i<points.length; i++) {
- if (isVector(points[i])) {
- sp.appendFitPoint(points[i]);
- }
- else {
- sp.appendFitPoint(new RVector(points[i][0], points[i][1]));
- }
- }
- return addShape(sp);
- }
- /**
- * Adds a simple text to the drawing.
- * \ingroup ecma_simple
- *
- * \param text Text string.
- * \param position position
- * \param height Text height (defaults to 1)
- * \param angle Text angle (defaults to 0)
- * \param font Font (defaults to "standard")
- * \param vAlign Vertical alignment (defaults to RS.VAlignTop)
- * \param hAlign Horizontal alignment (defaults to RS.HAlignLeft)
- * \param bold True for bold text (TTF fonts only)
- * \param italic True for italic text (TTF fonts only)
- *
- * \code
- * addSimpleText(text, x, y, height, angle, font, vAlign, hAlign, bold, italic)
- * addSimpleText(text, [x, y], height, angle, font, vAlign, hAlign, bold, italic)
- * addSimpleText(text, new RVector(x, y), height, angle, font, vAlign, hAlign, bold, italic)
- * \endcode
- */
- function addSimpleText(text, position, height, angle, font, vAlign, hAlign, bold, italic) {
- if (arguments.length===10) {
- return addSimpleText(arguments[0], new RVector(arguments[1], arguments[2]), arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9]);
- }
- if (arguments.length===3 && isNumber(position)) {
- // addSimpleText("text", x, y)
- return addSimpleText(arguments[0], new RVector(arguments[1], arguments[2]));
- }
- var doc = getTransactionDocument();
- if (isNull(doc)) {
- return undefined;
- }
- if (isNull(height)) height = 10.0;
- if (isNull(angle)) angle = 0.0;
- if (isNull(font)) font = "Standard";
- if (isNull(vAlign)) vAlign = RS.VAlignTop;
- if (isNull(hAlign)) hAlign = RS.HAlignLeft;
- if (isNull(bold)) bold = false;
- if (isNull(italic)) italic = false;
- if (isArray(position)) {
- position = new RVector(position);
- }
- var entity = new RTextEntity(
- doc,
- new RTextData(
- position,
- position,
- height,
- 0.0,
- vAlign,
- hAlign,
- RS.LeftToRight,
- RS.Exact,
- 1.0,
- text,
- font,
- bold,
- italic,
- deg2rad(angle),
- true
- )
- );
- return addEntity(entity);
- }
- /**
- * Adds the given RShapes to the drawing as new entities using current layer and attributes.
- * \ingroup ecma_simple
- *
- * \return The added entities. The entities do not yet have valid IDs if they were added within a
- * transaction.
- */
- function addShapes(shapes) {
- for (var i=0; i<shapes.length; i++) {
- addShape(shapes[i]);
- }
- }
- /**
- * Adds the given RShape to the drawing as a new entity using current layer and attributes.
- * \ingroup ecma_simple
- *
- * \return The added entity. The entity does not yet have a valid ID if it was added within a
- * transaction.
- *
- * \code
- * addShape(shape)
- * addShape(shape, new RColor(255,0,0), "CONTINUOUS", 0.05)
- * \endcode
- */
- function addShape(shape, color, linetype, lineweight) {
- var doc = getTransactionDocument();
- if (isNull(doc)) {
- return undefined;
- }
- var entity = shapeToEntity(doc, shape);
- if (!isNull(color)) {
- entity.setColor(color);
- }
- if (isNumber(linetype)) {
- entity.setLinetypeId(linetype);
- }
- if (isString(linetype)) {
- entity.setLinetypeId(doc.getLinetypeId(linetype));
- }
- if (isNumber(lineweight)) {
- entity.setLineweight(lineweight);
- }
- return addEntity(entity);
- }
- /**
- * Adds the given REntity to the drawing using layer and attributes as set by the entity.
- * \ingroup ecma_simple
- *
- * \return The added entity. The entity does not yet have a valid ID if it was added within a
- * transaction.
- */
- function addEntity(entity) {
- return addObject(entity);
- }
- /**
- * Adds the given RObject to the drawing.
- * \ingroup ecma_simple
- *
- * \return The added object. The object does not yet have a valid ID if it was added within a
- * transaction.
- */
- function addObject(obj) {
- if (isFunction(obj.data)) {
- return addObject(obj.data().clone());
- }
- if (__simpleUseOp===true) {
- if (isNull(__simpleOp)) {
- __simpleOp = new RAddObjectsOperation();
- }
- __simpleOp.addObject(obj, false);
- return obj.clone();
- }
- else {
- var di = getDocumentInterface();
- di.applyOperation(new RAddObjectOperation(obj, false));
- return obj.clone();
- }
- }
- /**
- * Deletes the given RObject from the drawing.
- * \ingroup ecma_simple
- *
- * \return The added object. The object does not yet have a valid ID if it was added within a
- * transaction.
- */
- function deleteObject(obj) {
- if (isFunction(obj.data)) {
- deleteObject(obj.data().clone());
- }
- if (__simpleUseOp===true) {
- if (isNull(__simpleOp)) {
- __simpleOp = new RAddObjectsOperation();
- }
- __simpleOp.deleteObject(obj);
- }
- else {
- var di = getDocumentInterface();
- di.applyOperation(new RDeleteObjectOperation(obj));
- }
- }
- function addPolylinetoView(points, closed, relative, filetype,linecolor) {
- if (isNull(closed)) {
- closed = false;
- }
- if (isNull(relative)) {
- relative = false;
- }
- var pl = new RPolyline();
- pl.setClosed(closed);
- var v = new RVector(0, 0);
- for (var i = 0; i < points.length; i++) {
- var v0 = undefined;
- var b = 0.0;
- var rel = relative;
- if (isVector(points[i])) {
- v0 = points[i];
- }
- // first item in vertex tuple is RVector or x,y pair:
- else if (isArray(points[i])) {
- if (isVector(points[i][0])) {
- v0 = points[i][0];
- if (!isNull(points[i][1])) {
- b = points[i][1];
- }
- if (!isNull(points[i][2])) {
- rel = points[i][2];
- }
- }
- else {
- v0 = new RVector(points[i][0], points[i][1]);
- if (!isNull(points[i][2])) {
- b = points[i][2];
- }
- if (!isNull(points[i][3])) {
- rel = points[i][3];
- }
- }
- }
- // custom objects with .x, .y (, .z, .b) members:
- else if (isNumber(points[i].x) && isNumber(points[i].y)) {
- if (isNumber(points[i].z)) {
- v0 = new RVector(points[i].x, points[i].y, points[i].z);
- }
- else {
- v0 = new RVector(points[i].x, points[i].y);
- }
- if (isNumber(points[i].b)) {
- b = points[i].b;
- }
- }
- // relative or absolute vertex position:
- if (relative) {
- v = v.operator_add(v0);
- }
- else {
- v = v0;
- }
- pl.appendVertex(v, b);
- }
- return addShapetoView(filetype, pl, linecolor);
- }
- function addShapetoView(filetype, shape, color, linetype, lineweight) {
- var doc = getAssignTransactionDocument(filetype);
- if (isNull(doc)) {
- return undefined;
- }
- var entity = shapeToEntity(doc, shape);
- if (!isNull(color)) {
- entity.setColor(color);
- }
- if (isNumber(linetype)) {
- entity.setLinetypeId(linetype);
- }
- if (isString(linetype)) {
- entity.setLinetypeId(doc.getLinetypeId(linetype));
- }
- if (isNumber(lineweight)) {
- entity.setLineweight(lineweight);
- }
- return addObjecttoView(entity,filetype);
- }
- function addObjecttoView(obj, filetype) {
- if (isFunction(obj.data)) {
- return addObjecttoView(obj.data().clone(), filetype);
- }
- if (__simpleUseOp === true) {
- if (isNull(__simpleOp)) {
- __simpleOp = new RAddObjectsOperation();
- }
- __simpleOp.addObject(obj, false);
- return obj.clone();
- }
- else {
- var di = getAssignDocumentInterface(filetype);
- di.applyOperation(new RAddObjectOperation(obj, false));
- return obj.clone();
- }
- }
- /**
- * Adds an arc to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addArc(cx,cy, radius, startAngle, endAngle, reversed)
- * addArc([cx,cy], radius, startAngle, endAngle, reversed)
- * addArc(new RVector(cx,cy), radius, startAngle, endAngle, reversed)
- * \endcode
- */
- function addArctoView(center, radius, startAngle, endAngle, reversed, filetype, linecolor) {
- if (arguments.length == 8) {
- return addArctoView(new RVector(arguments[0], arguments[1]), arguments[2], arguments[3], arguments[4], arguments[5], arguments[6], arguments[7]);
- }
- if (isArray(center)) {
- center = new RVector(center);
- }
- if (!isVector(center)) {
- qWarning("invalid center");
- throw ("invalid center");
- }
- return addShapetoView(filetype, new RArc(center, radius, deg2rad(startAngle), deg2rad(endAngle), reversed), linecolor);
- }
- /**
- * Adds a circle to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addCircle(cx,cy, radius)
- * addCircle([cx,cy], radius)
- * addCircle(new RVector(cx,cy), radius)
- * \endcode
- */
- function addCircleToView(center, radius, filetype,linecolor) {
- if (arguments.length === 5) {
- return addCircleToView(new RVector(arguments[0], arguments[1]), arguments[2], arguments[3], arguments[4]);
- }
- if (isArray(center)) {
- center = new RVector(center);
- }
- return addShapetoView(filetype, new RCircle(center, radius), linecolor);
- }
- function addLayerToView(name, colorName, linetypeName, lineWeight, filetype) {
- var doc = getAssignTransactionDocument(filetype);
- if (isNull(doc)) {
- return undefined;
- }
- if (isNull(colorName)) {
- colorName = "white";
- }
- if (isNull(linetypeName)) {
- linetypeName = "CONTINUOUS";
- }
- if (isNull(lineWeight)) {
- lineWeight = RLineweight.Weight000;
- }
- if (doc.hasLayer(name)) {
- return undefined;
- }
- var layer = new RLayer(
- doc, name, false, false,
- new RColor(colorName),
- doc.getLinetypeId(linetypeName),
- lineWeight, false
- );
- addObjecttoView(layer, filetype);
- }
- /**
- * Adds a point to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addPoint(x,y)
- * addPoint([x,y])
- * addPoint(new RVector(x,y))
- * \endcode
- */
- function addPointToView(position, filetype) {
- if (arguments.length === 3) {
- return addPointToView(new RVector(arguments[0], arguments[1]), arguments[2]);
- }
- if (isArray(position)) {
- return addPointToView(new RVector(position));
- }
- return addShapetoView(filetype, new RPoint(position));
- }
- /**
- * Adds a line to the drawing.
- * \ingroup ecma_simple
- *
- * \code
- * addLine(x1,y1, x2,y2)
- * addLine([x1,y1], [x2,y2])
- * addLine(new RVector(x1,y1), new RVector(x2,y2))
- * \endcode
- */
- function addLineToView(startPoint, endPoint, filetype) {
- if (arguments.length === 5) {
- return addLineToView(new RVector(arguments[0], arguments[1]), new RVector(arguments[2], arguments[3]), arguments[4]);
- }
- if (isArray(startPoint)) {
- startPoint = new RVector(startPoint);
- }
- if (isArray(endPoint)) {
- endPoint = new RVector(endPoint);
- }
- return addShapetoView(filetype, new RLine(startPoint, endPoint));
- }
- /**
- * Adds a simple text to the drawing.
- * \ingroup ecma_simple
- *
- * \param text Text string.
- * \param position position
- * \param height Text height (defaults to 1)
- * \param angle Text angle (defaults to 0)
- * \param font Font (defaults to "standard")
- * \param vAlign Vertical alignment (defaults to RS.VAlignTop)
- * \param hAlign Horizontal alignment (defaults to RS.HAlignLeft)
- * \param bold True for bold text (TTF fonts only)
- * \param italic True for italic text (TTF fonts only)
- *
- * \code
- * addSimpleText(text, x, y, height, angle, font, vAlign, hAlign, bold, italic)
- * addSimpleText(text, [x, y], height, angle, font, vAlign, hAlign, bold, italic)
- * addSimpleText(text, new RVector(x, y), height, angle, font, vAlign, hAlign, bold, italic)
- * \endcode
- */
- function addSimpleTextToView(text, position, height, angle, font, vAlign, hAlign, bold, italic, filetype) {
- if (arguments.length === 11) {
- return addSimpleTextToView(arguments[0], new RVector(arguments[1], arguments[2]), arguments[3], arguments[4], arguments[5], arguments[6], arguments[7], arguments[8], arguments[9], arguments[10]);
- }
- var doc = getAssignTransactionDocument(filetype);
- if (isNull(doc)) {
- return undefined;
- }
- if (isNull(height)) height = 1.0;
- if (isNull(angle)) angle = 0.0;
- if (isNull(font)) font = "Standard";
- if (isNull(vAlign)) vAlign = RS.VAlignTop;
- if (isNull(hAlign)) hAlign = RS.HAlignLeft;
- if (isNull(bold)) bold = false;
- if (isNull(italic)) italic = false;
- if (isArray(position)) {
- position = new RVector(position);
- }
- var entity = new RTextEntity(
- doc,
- new RTextData(
- position,
- position,
- height,
- 0.0,
- vAlign,
- hAlign,
- RS.LeftToRight,
- RS.Exact,
- 1.0,
- text,
- font,
- bold,
- italic,
- deg2rad(angle),
- true
- )
- );
- // return addEntity(entity);
- return addObjecttoView(entity, filetype);
- }
|