Recusive docs (#4023)

updates



updates



updates



updates



updates



updates



better



updates



array of



updates



updates



updates



updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2024-09-27 19:50:44 -07:00
committed by GitHub
parent 37bb696a30
commit 790af3842c
50 changed files with 474 additions and 263 deletions

View File

@ -17,7 +17,7 @@ arrayReduce(array: [u64], start: Sketch, reduce_fn: FunctionParam) -> Sketch
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `array` | [`[u64]`](/docs/kcl/types/[u64]) | | Yes |
| `array` | `[u64]` | | Yes |
| `start` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
| `reduce_fn` | `FunctionParam` | | Yes |

View File

@ -17,7 +17,7 @@ line(delta: [number], sketch: Sketch, tag?: TagDeclarator) -> Sketch
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `delta` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `delta` | `[number]` | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |

View File

@ -17,7 +17,7 @@ lineTo(to: [number], sketch: Sketch, tag?: TagDeclarator) -> Sketch
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `to` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `to` | `[number]` | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |

View File

@ -17,7 +17,7 @@ loft(sketches: [Sketch], data?: LoftData) -> Solid
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `sketches` | [`[Sketch]`](/docs/kcl/types/[Sketch]) | | Yes |
| `sketches` | [`[Sketch]`](/docs/kcl/types/Sketch) | | Yes |
| `data` | [`LoftData`](/docs/kcl/types/LoftData) | Data for a loft. | No |
### Returns

View File

@ -21,7 +21,7 @@ max(args: [number]) -> number
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `args` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `args` | `[number]` | | Yes |
### Returns

View File

@ -21,7 +21,7 @@ min(args: [number]) -> number
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `args` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `args` | `[number]` | | Yes |
### Returns

View File

@ -23,7 +23,7 @@ mirror2d(data: Mirror2dData, sketch_set: SketchSet) -> [Sketch]
### Returns
[`[Sketch]`](/docs/kcl/types/[Sketch])
[`[Sketch]`](/docs/kcl/types/Sketch)
### Examples

View File

@ -22,7 +22,7 @@ patternCircular2d(data: CircularPattern2dData, sketch_set: SketchSet) -> [Sketch
### Returns
[`[Sketch]`](/docs/kcl/types/[Sketch])
[`[Sketch]`](/docs/kcl/types/Sketch)
### Examples

View File

@ -22,7 +22,7 @@ patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid]
### Returns
[`[Solid]`](/docs/kcl/types/[Solid])
[`[Solid]`](/docs/kcl/types/Solid)
### Examples

View File

@ -22,7 +22,7 @@ patternLinear2d(data: LinearPattern2dData, sketch_set: SketchSet) -> [Sketch]
### Returns
[`[Sketch]`](/docs/kcl/types/[Sketch])
[`[Sketch]`](/docs/kcl/types/Sketch)
### Examples

View File

@ -22,7 +22,7 @@ patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet) -> [Solid]
### Returns
[`[Solid]`](/docs/kcl/types/[Solid])
[`[Solid]`](/docs/kcl/types/Solid)
### Examples

View File

@ -25,7 +25,7 @@ patternTransform(total_instances: u32, transform_function: FunctionParam, solid_
### Returns
[`[Solid]`](/docs/kcl/types/[Solid])
[`[Solid]`](/docs/kcl/types/Solid)
### Examples

View File

@ -21,7 +21,7 @@ polar(data: PolarCoordsData) -> [number]
### Returns
[`[number]`](/docs/kcl/types/[number])
`[number]`
### Examples

View File

@ -21,7 +21,7 @@ profileStart(sketch: Sketch) -> [number]
### Returns
[`[number]`](/docs/kcl/types/[number])
`[number]`
### Examples

View File

@ -17,7 +17,7 @@ startProfileAt(to: [number], sketch_surface: SketchSurface, tag?: TagDeclarator)
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `to` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `to` | `[number]` | | Yes |
| `sketch_surface` | [`SketchSurface`](/docs/kcl/types/SketchSurface) | A sketch type. | Yes |
| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |

View File

@ -17,7 +17,7 @@ startSketchAt(data: [number]) -> Sketch
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `data` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `data` | `[number]` | | Yes |
### Returns

View File

@ -17,7 +17,7 @@ tangentialArcTo(to: [number], sketch: Sketch, tag?: TagDeclarator) -> Sketch
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `to` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `to` | `[number]` | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |

View File

@ -17,7 +17,7 @@ tangentialArcToRelative(delta: [number], sketch: Sketch, tag?: TagDeclarator) ->
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `delta` | [`[number]`](/docs/kcl/types/[number]) | | Yes |
| `delta` | `[number]` | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | A sketch is a collection of paths. | Yes |
| `tag` | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |

View File

@ -13,17 +13,10 @@ Data to draw an angled line.
An angle and length with explicitly named parameters
**Type:** `object`
## Properties
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angle` |`number` (`double`)| The angle of the line (in degrees). | No |
| `length` |`number` (`double`)| The length of the line. | No |
----

View File

@ -16,8 +16,8 @@ Data for drawing an angled line that intersects with a given line.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angle` |`number` (`double`)| The angle of the line. | No |
| `intersectTag` |`object`| The tag of the line to intersect with. | No |
| `offset` |`number` (`double`)| The offset from the intersecting line. | No |
| `angle` |`number`| The angle of the line. | No |
| `intersectTag` |[`TagIdentifier`](/docs/kcl/types#tag-identifier)| The tag of the line to intersect with. | No |
| `offset` |`number`| The offset from the intersecting line. | No |

View File

@ -16,7 +16,7 @@ Data to draw an angled line to a point.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angle` |`number` (`double`)| The angle of the line. | No |
| `to` |`number` (`double`)| The point to draw to. | No |
| `angle` |`number`| The angle of the line. | No |
| `to` |`number`| The point to draw to. | No |

View File

@ -22,9 +22,9 @@ Angles and radius with an optional tag.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angleStart` |`number` (`double`)| The start angle. | No |
| `angleEnd` |`number` (`double`)| The end angle. | No |
| `radius` |`number` (`double`)| The radius. | No |
| `angleStart` |`number`| The start angle. | No |
| `angleEnd` |`number`| The end angle. | No |
| `radius` |`number`| The radius. | No |
----
@ -40,9 +40,9 @@ Center, to and radius with an optional tag.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `center` |`array`| The center. | No |
| `to` |`array`| The to point. | No |
| `radius` |`number` (`double`)| The radius. | No |
| `center` |`[number, number]`| The center. | No |
| `to` |`[number, number]`| The to point. | No |
| `radius` |`number`| The radius. | No |
----

View File

@ -16,8 +16,8 @@ Data to draw a bezier curve.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `to` |`array`| The to point. | No |
| `control1` |`array`| The first control point. | No |
| `control2` |`array`| The second control point. | No |
| `to` |`[number, number]`| The to point. | No |
| `control1` |`[number, number]`| The first control point. | No |
| `control2` |`[number, number]`| The second control point. | No |

View File

@ -16,7 +16,7 @@ Data for chamfers.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `length` |`number` (`double`)| The length of the chamfer. | No |
| `tags` |`array`| The tags of the paths you want to chamfer. | No |
| `length` |`number`| The length of the chamfer. | No |
| `tags` |`[` **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The tags of the paths you want to chamfer. | No |

View File

@ -16,7 +16,7 @@ Data for drawing an circle
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `center` |`array`| The center of the circle. | No |
| `radius` |`number` (`double`)| The circle radius | No |
| `center` |`[number, number]`| The center of the circle. | No |
| `radius` |`number`| The circle radius | No |

View File

@ -16,9 +16,9 @@ Data for a circular pattern on a 2D sketch.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `repetitions` |`integer` (`uint32`)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `center` |`array`| The center about which to make the pattern. This is a 2D vector. | No |
| `arcDegrees` |`number` (`double`)| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No |
| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `center` |`[number, number]`| The center about which to make the pattern. This is a 2D vector. | No |
| `arcDegrees` |`number`| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No |
| `rotateDuplicates` |`boolean`| Whether or not to rotate the duplicates as they are copied. | No |

View File

@ -16,10 +16,10 @@ Data for a circular pattern on a 3D model.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `repetitions` |`integer` (`uint32`)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `axis` |`array`| The axis around which to make the pattern. This is a 3D vector. | No |
| `center` |`array`| The center about which to make the pattern. This is a 3D vector. | No |
| `arcDegrees` |`number` (`double`)| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No |
| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `axis` |`[number, number, number]`| The axis around which to make the pattern. This is a 3D vector. | No |
| `center` |`[number, number, number]`| The center about which to make the pattern. This is a 3D vector. | No |
| `arcDegrees` |`number`| The arc angle (in degrees) to place the repetitions. Must be greater than 0. | No |
| `rotateDuplicates` |`boolean`| Whether or not to rotate the duplicates as they are copied. | No |

View File

@ -46,18 +46,10 @@ The end face after you extruded. This could also be known as the top face. But w
A tag for the face.
**Type:** `object`
## Properties
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `value` |`string`| | No |
| `info` |`object`| Engine information for a tag. | No |
| `__meta` |`array`| | No |
----

View File

@ -16,8 +16,8 @@ Data for fillets.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `radius` |`number` (`double`)| The radius of the fillet. | No |
| `tags` |`array`| The tags of the paths you want to fillet. | No |
| `tolerance` |`number` (`double`)| The tolerance for the fillet. | No |
| `radius` |`number`| The radius of the fillet. | No |
| `tags` |`[` **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The tags of the paths you want to fillet. | No |
| `tolerance` |`number`| The tolerance for the fillet. | No |

View File

@ -16,9 +16,9 @@ Data for helices.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `revolutions` |`number` (`double`)| Number of revolutions. | No |
| `angleStart` |`number` (`double`)| Start angle (in degrees). | No |
| `revolutions` |`number`| Number of revolutions. | No |
| `angleStart` |`number`| Start angle (in degrees). | No |
| `ccw` |`boolean`| Is the helix rotation counter clockwise? The default is &#x60;false&#x60;. | No |
| `length` |`number` (`double`)| Length of the helix. If this argument is not provided, the height of the solid is used. | No |
| `length` |`number`| Length of the helix. If this argument is not provided, the height of the solid is used. | No |

View File

@ -57,7 +57,7 @@ Wavefront OBJ format.
|----------|------|-------------|----------|
| `type` |enum: `obj`| | No |
| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No |
| `units` |`oneOf`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
----
@ -75,7 +75,7 @@ The PLY Polygon File Format.
|----------|------|-------------|----------|
| `type` |enum: `ply`| | No |
| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No |
| `units` |`oneOf`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
----
@ -125,7 +125,7 @@ ST**ereo**L**ithography format.
|----------|------|-------------|----------|
| `type` |enum: `stl`| | No |
| `coords` |`object`| Co-ordinate system of input data. Defaults to the [KittyCAD co-ordinate system. | No |
| `units` |`oneOf`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
| `units` |**oneOf:** enum: `cm` **OR** enum: `ft` **OR** enum: `in` **OR** enum: `m` **OR** enum: `mm` **OR** enum: `yd`| The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc. Defaults to millimeters. | No |
----

View File

@ -16,8 +16,8 @@ Data for an imported geometry.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `id` |`string` (`uuid`)| The ID of the imported geometry. | No |
| `value` |`array`| The original file paths. | No |
| `__meta` |`array`| | No |
| `id` |`string`| The ID of the imported geometry. | No |
| `value` |`[` `string` `]`| The original file paths. | No |
| `__meta` |`[` `object` `]`| | No |

View File

@ -16,8 +16,8 @@ Data for a linear pattern on a 2D sketch.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `repetitions` |`integer` (`uint32`)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `distance` |`number` (`double`)| The distance between each repetition. This can also be referred to as spacing. | No |
| `axis` |`array`| The axis of the pattern. This is a 2D vector. | No |
| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `distance` |`number`| The distance between each repetition. This can also be referred to as spacing. | No |
| `axis` |`[number, number]`| The axis of the pattern. This is a 2D vector. | No |

View File

@ -16,8 +16,8 @@ Data for a linear pattern on a 3D model.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `repetitions` |`integer` (`uint32`)| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `distance` |`number` (`double`)| The distance between each repetition. This can also be referred to as spacing. | No |
| `axis` |`array`| The axis of the pattern. | No |
| `repetitions` |`integer`| The number of repetitions. Must be greater than 0. This excludes the original entity. For example, if &#x60;repetitions&#x60; is 1, the original entity will be copied once. | No |
| `distance` |`number`| The distance between each repetition. This can also be referred to as spacing. | No |
| `axis` |`[number, number, number]`| The axis of the pattern. | No |

View File

@ -16,9 +16,9 @@ Data for a loft.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `vDegree` |`integer` (`uint32`)| Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified. | No |
| `vDegree` |`integer`| Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified. | No |
| `bezApproximateRational` |`boolean`| Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won&#x27;t be necessary. | No |
| `baseCurveIndex` |`integer` (`uint32`)| This can be set to override the automatically determined topological base curve, which is usually the first section encountered. | No |
| `tolerance` |`number` (`double`)| Tolerance for the loft operation. | No |
| `baseCurveIndex` |`integer`| This can be set to override the automatically determined topological base curve, which is usually the first section encountered. | No |
| `tolerance` |`number`| Tolerance for the loft operation. | No |

View File

@ -16,6 +16,6 @@ Data for a mirror.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `axis` |`anyOf`| Axis to use as mirror. | No |
| `axis` |**anyOf:** **oneOf:** enum: `X` **OR** enum: `Y` **OR** enum: `-X` **OR** enum: `-Y` **OR** `object` **OR** **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier)| Axis to use as mirror. | No |

View File

@ -16,7 +16,7 @@ Data for polar coordinates.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angle` |`number` (`double`)| The angle of the line (in degrees). | No |
| `length` |`number` (`double`)| The length of the line. | No |
| `angle` |`number`| The angle of the line (in degrees). | No |
| `length` |`number`| The length of the line. | No |

View File

@ -16,8 +16,8 @@ Data for revolution surfaces.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `angle` |`number` (`double`)| Angle to revolve (in degrees). Default is 360. | No |
| `axis` |`anyOf`| Axis of revolution. | No |
| `tolerance` |`number` (`double`)| Tolerance for the revolve operation. | No |
| `angle` |`number`| Angle to revolve (in degrees). Default is 360. | No |
| `axis` |**anyOf:** **oneOf:** enum: `X` **OR** enum: `Y` **OR** enum: `-X` **OR** enum: `-Y` **OR** `object` **OR** **anyOf:** `string` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier)| Axis of revolution. | No |
| `tolerance` |`number`| Tolerance for the revolve operation. | No |

View File

@ -16,7 +16,7 @@ Data for shells.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `thickness` |`number` (`double`)| The thickness of the shell. | No |
| `faces` |`array`| The faces you want removed. | No |
| `thickness` |`number`| The thickness of the shell. | No |
| `faces` |`[` **anyOf:** **oneOf:** enum: `start` **OR** enum: `end` **OR** [`TagIdentifier`](/docs/kcl/types#tag-identifier) `]`| The faces you want removed. | No |

View File

@ -16,11 +16,11 @@ A sketch is a collection of paths.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `id` |`string` (`uuid`)| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`array`| The paths in the sketch. | No |
| `on` |`oneOf`| What the sketch is on (can be a plane or a face). | No |
| `id` |`string`| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No |
| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No |
| `start` |`object`| The starting path. | No |
| `tags` |`object`| Tag identifiers that have been declared in this sketch. | No |
| `__meta` |`array`| Metadata. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |

View File

@ -15,90 +15,6 @@ Data for a plane.
**This schema accepts exactly one of the following:**
The XY plane.
**enum:** `XY`
----
The opposite side of the XY plane.
**enum:** `-XY`
----
The XZ plane.
**enum:** `XZ`
----
The opposite side of the XZ plane.
**enum:** `-XZ`
----
The YZ plane.
**enum:** `YZ`
----
The opposite side of the YZ plane.
**enum:** `-YZ`
----
A defined plane.
**Type:** `object`
## Properties
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `plane` |`object`| | No |
----
@ -116,14 +32,14 @@ An solid is a collection of extrude surfaces.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `id` |`string` (`uuid`)| The id of the solid. | No |
| `value` |`array`| The extrude surfaces. | No |
| `id` |`string`| The id of the solid. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No |
| `sketch` |`object`| The sketch. | No |
| `height` |`number` (`double`)| The height of the solid. | No |
| `startCapId` |`string` (`uuid`)| The id of the extrusion start cap | No |
| `endCapId` |`string` (`uuid`)| The id of the extrusion end cap | No |
| `edgeCuts` |`array`| Chamfers or fillets on this solid. | No |
| `__meta` |`array`| Metadata. | No |
| `height` |`number`| The height of the solid. | No |
| `startCapId` |`string`| The id of the extrusion start cap | No |
| `endCapId` |`string`| The id of the extrusion end cap | No |
| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |
----

View File

@ -30,13 +30,13 @@ A plane.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `plane`| | No |
| `id` |`string` (`uuid`)| The id of the plane. | No |
| `value` |`oneOf`| Type for a plane. | No |
| `id` |`string`| The id of the plane. | No |
| `value` |**oneOf:** enum: `XY`, `XZ`, `YZ` **OR** enum: `Custom`| Type for a plane. | No |
| `origin` |`object`| Origin of the plane. | No |
| `xAxis` |`object`| What should the planes X axis be? | No |
| `yAxis` |`object`| What should the planes Y axis be? | No |
| `zAxis` |`object`| The z-axis (normal). | No |
| `__meta` |`array`| | No |
| `__meta` |`[` `object` `]`| | No |
----
@ -53,13 +53,13 @@ A face.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `face`| | No |
| `id` |`string` (`uuid`)| The id of the face. | No |
| `id` |`string`| The id of the face. | No |
| `value` |`string`| The tag of the face. | No |
| `xAxis` |`object`| What should the faces X axis be? | No |
| `yAxis` |`object`| What should the faces Y axis be? | No |
| `zAxis` |`object`| The z-axis (normal). | No |
| `solid` |`object`| The solid the face is on. | No |
| `__meta` |`array`| | No |
| `__meta` |`[` `object` `]`| | No |
----
@ -80,12 +80,12 @@ A sketch is a collection of paths.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `id` |`string` (`uuid`)| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`array`| The paths in the sketch. | No |
| `on` |`oneOf`| What the sketch is on (can be a plane or a face). | No |
| `id` |`string`| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No |
| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No |
| `start` |`object`| The starting path. | No |
| `tags` |`object`| Tag identifiers that have been declared in this sketch. | No |
| `__meta` |`array`| Metadata. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |
----

View File

@ -24,12 +24,12 @@ A sketch is a collection of paths.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `sketch`| | No |
| `id` |`string` (`uuid`)| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`array`| The paths in the sketch. | No |
| `on` |`oneOf`| What the sketch is on (can be a plane or a face). | No |
| `id` |`string`| The id of the sketch (this will change when the engine&#x27;s reference to it changes. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The paths in the sketch. | No |
| `on` |**oneOf:** `object` **OR** `object`| What the sketch is on (can be a plane or a face). | No |
| `start` |`object`| The starting path. | No |
| `tags` |`object`| Tag identifiers that have been declared in this sketch. | No |
| `__meta` |`array`| Metadata. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |
----

View File

@ -24,13 +24,13 @@ A plane.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `plane`| | No |
| `id` |`string` (`uuid`)| The id of the plane. | No |
| `value` |`oneOf`| Type for a plane. | No |
| `id` |`string`| The id of the plane. | No |
| `value` |**oneOf:** enum: `XY`, `XZ`, `YZ` **OR** enum: `Custom`| Type for a plane. | No |
| `origin` |`object`| Origin of the plane. | No |
| `xAxis` |`object`| What should the planes X axis be? | No |
| `yAxis` |`object`| What should the planes Y axis be? | No |
| `zAxis` |`object`| The z-axis (normal). | No |
| `__meta` |`array`| | No |
| `__meta` |`[` `object` `]`| | No |
----
@ -47,13 +47,13 @@ A face.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `face`| | No |
| `id` |`string` (`uuid`)| The id of the face. | No |
| `id` |`string`| The id of the face. | No |
| `value` |`string`| The tag of the face. | No |
| `xAxis` |`object`| What should the faces X axis be? | No |
| `yAxis` |`object`| What should the faces Y axis be? | No |
| `zAxis` |`object`| The z-axis (normal). | No |
| `solid` |`object`| The solid the face is on. | No |
| `__meta` |`array`| | No |
| `__meta` |`[` `object` `]`| | No |
----

View File

@ -16,13 +16,13 @@ An solid is a collection of extrude surfaces.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `id` |`string` (`uuid`)| The id of the solid. | No |
| `value` |`array`| The extrude surfaces. | No |
| `id` |`string`| The id of the solid. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No |
| `sketch` |`object`| The sketch. | No |
| `height` |`number` (`double`)| The height of the solid. | No |
| `startCapId` |`string` (`uuid`)| The id of the extrusion start cap | No |
| `endCapId` |`string` (`uuid`)| The id of the extrusion end cap | No |
| `edgeCuts` |`array`| Chamfers or fillets on this solid. | No |
| `__meta` |`array`| Metadata. | No |
| `height` |`number`| The height of the solid. | No |
| `startCapId` |`string`| The id of the extrusion start cap | No |
| `endCapId` |`string`| The id of the extrusion end cap | No |
| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |

View File

@ -24,14 +24,14 @@ An solid is a collection of extrude surfaces.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `type` |enum: `solid`| | No |
| `id` |`string` (`uuid`)| The id of the solid. | No |
| `value` |`array`| The extrude surfaces. | No |
| `id` |`string`| The id of the solid. | No |
| `value` |`[` **oneOf:** `object` **OR** `object` **OR** `object` **OR** `object` `]`| The extrude surfaces. | No |
| `sketch` |`object`| The sketch. | No |
| `height` |`number` (`double`)| The height of the solid. | No |
| `startCapId` |`string` (`uuid`)| The id of the extrusion start cap | No |
| `endCapId` |`string` (`uuid`)| The id of the extrusion end cap | No |
| `edgeCuts` |`array`| Chamfers or fillets on this solid. | No |
| `__meta` |`array`| Metadata. | No |
| `height` |`number`| The height of the solid. | No |
| `startCapId` |`string`| The id of the extrusion start cap | No |
| `endCapId` |`string`| The id of the extrusion end cap | No |
| `edgeCuts` |`[` **oneOf:** `object` **OR** `object` `]`| Chamfers or fillets on this solid. | No |
| `__meta` |`[` `object` `]`| Metadata. | No |
----

View File

@ -21,8 +21,8 @@ Data to draw a tangential arc.
| Property | Type | Description | Required |
|----------|------|-------------|----------|
| `radius` |`number` (`double`)| Radius of the arc. Not to be confused with Raiders of the Lost Ark. | No |
| `offset` |`number` (`double`)| Offset of the arc, in degrees. | No |
| `radius` |`number`| Radius of the arc. Not to be confused with Raiders of the Lost Ark. | No |
| `offset` |`number`| Offset of the arc, in degrees. | No |
----

View File

@ -1,8 +1,9 @@
use std::collections::HashMap;
use std::collections::{BTreeMap, HashMap};
use anyhow::Result;
use base64::Engine;
use convert_case::Casing;
use handlebars::Renderable;
use itertools::Itertools;
use serde_json::json;
@ -34,7 +35,42 @@ fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
// Register the 'basename' helper
hbs.register_helper(
"basename",
"times",
Box::new(
|h: &handlebars::Helper,
hb: &handlebars::Handlebars,
ctx: &handlebars::Context,
rc: &mut handlebars::RenderContext,
out: &mut dyn handlebars::Output|
-> handlebars::HelperResult {
let n = h.param(0).and_then(|v| v.value().as_u64()).ok_or_else(|| {
handlebars::RenderErrorReason::Other(
"times helper expects an integer as first parameter".to_string(),
)
})?;
let template = h
.template()
.ok_or_else(|| handlebars::RenderErrorReason::Other("times helper expects a block".to_string()))?;
for i in 0..n {
let mut local_ctx = ctx.clone();
let mut rc = rc.clone();
let m = local_ctx.data_mut().as_object_mut().unwrap();
m.insert("@index".to_string(), handlebars::JsonValue::Number(i.into()));
if i == 0 {
m.insert("@first".to_string(), handlebars::JsonValue::Bool(true));
}
template.render(hb, &local_ctx, &mut rc, out)?;
}
Ok(())
},
),
);
hbs.register_helper(
"lte",
Box::new(
|h: &handlebars::Helper,
_: &handlebars::Handlebars,
@ -42,9 +78,47 @@ fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
_: &mut handlebars::RenderContext,
out: &mut dyn handlebars::Output|
-> handlebars::HelperResult {
let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or("");
let basename = param.split('/').last().unwrap_or("");
out.write(basename)?;
let a = h.param(0).and_then(|v| v.value().as_f64()).ok_or_else(|| {
handlebars::RenderErrorReason::Other("lte helper expects a number as first parameter".to_string())
})?;
let b = h.param(1).and_then(|v| v.value().as_f64()).ok_or_else(|| {
handlebars::RenderErrorReason::Other("lte helper expects a number as second parameter".to_string())
})?;
let result = a <= b;
out.write(if result { "true" } else { "false" })?;
Ok(())
},
),
);
hbs.register_helper(
"neq",
Box::new(
|h: &handlebars::Helper,
_: &handlebars::Handlebars,
_: &handlebars::Context,
_: &mut handlebars::RenderContext,
out: &mut dyn handlebars::Output|
-> handlebars::HelperResult {
let param1 = h
.param(0)
.ok_or_else(|| {
handlebars::RenderErrorReason::Other("neq helper expects two parameters".to_string())
})?
.value();
let param2 = h
.param(1)
.ok_or_else(|| {
handlebars::RenderErrorReason::Other("neq helper expects two parameters".to_string())
})?
.value();
let result = param1 != param2;
out.write(if result { "true" } else { "false" })?;
Ok(())
},
),
@ -94,6 +168,50 @@ fn init_handlebars() -> Result<handlebars::Handlebars<'static>> {
),
);
hbs.register_helper(
"pretty_enum",
Box::new(
|h: &handlebars::Helper,
_: &handlebars::Handlebars,
_: &handlebars::Context,
_: &mut handlebars::RenderContext,
out: &mut dyn handlebars::Output|
-> handlebars::HelperResult {
if let Some(enum_value) = h.param(0) {
if let Some(array) = enum_value.value().as_array() {
let pretty_options = array
.iter()
.filter_map(|v| v.as_str())
.map(|s| format!("`{}`", s))
.collect::<Vec<_>>()
.join(", ");
out.write(&pretty_options)?;
return Ok(());
}
}
out.write("Invalid enum")?;
Ok(())
},
),
);
hbs.register_helper(
"pretty_ref",
Box::new(
|h: &handlebars::Helper,
_: &handlebars::Handlebars,
_: &handlebars::Context,
_: &mut handlebars::RenderContext,
out: &mut dyn handlebars::Output|
-> handlebars::HelperResult {
let param = h.param(0).and_then(|v| v.value().as_str()).unwrap_or("");
let basename = param.split('/').last().unwrap_or("");
out.write(&format!("`{}`", basename))?;
Ok(())
},
),
);
// Register helper to remove newlines from a string.
hbs.register_helper(
"remove_newlines",
@ -157,11 +275,11 @@ fn generate_index(combined: &HashMap<String, Box<dyn StdLibFn>>) -> Result<()> {
Ok(())
}
fn generate_function(internal_fn: Box<dyn StdLibFn>) -> Result<()> {
fn generate_function(internal_fn: Box<dyn StdLibFn>) -> Result<BTreeMap<String, schemars::schema::Schema>> {
let hbs = init_handlebars()?;
if internal_fn.unpublished() {
return Ok(());
return Ok(BTreeMap::new());
}
let fn_name = internal_fn.name();
@ -194,23 +312,17 @@ fn generate_function(internal_fn: Box<dyn StdLibFn>) -> Result<()> {
.collect();
// Generate the type markdown files for each argument.
let mut types = Vec::new();
let mut types = BTreeMap::new();
for arg in internal_fn.args() {
if !arg.is_primitive()? {
generate_type(&arg.type_, &arg.schema)?;
if !types.contains(&arg.type_.to_string()) {
types.push(arg.type_.to_string());
}
add_to_types(&arg.type_, &arg.schema, &mut types)?;
}
}
// Generate the type markdown for the return value.
if let Some(ret) = internal_fn.return_value() {
if !ret.is_primitive()? {
generate_type(&ret.type_, &ret.schema)?;
if !types.contains(&ret.type_.to_string()) {
types.push(ret.type_.to_string());
}
add_to_types(&ret.type_, &ret.schema, &mut types)?;
}
}
@ -240,28 +352,102 @@ fn generate_function(internal_fn: Box<dyn StdLibFn>) -> Result<()> {
});
let mut output = hbs.render("function", &data)?;
// Fix the links to the types.
output = cleanup_type_links(&output, types.keys().cloned().collect());
expectorate::assert_contents(format!("../../../docs/kcl/{}.md", fn_name), &output);
Ok(types)
}
fn cleanup_static_links(output: &str) -> String {
let mut cleaned_output = output.to_string();
// Fix the links to the types.
let link = format!("[`{}`](/docs/kcl/types#tag-declaration)", "TagDeclarator");
cleaned_output = cleaned_output.replace("`TagDeclarator`", &link);
let link = format!("[`{}`](/docs/kcl/types#tag-identifier)", "TagIdentifier");
cleaned_output = cleaned_output.replace("`TagIdentifier`", &link);
cleaned_output
}
// Fix the links to the types.
fn cleanup_type_links(output: &str, types: Vec<String>) -> String {
let mut cleaned_output = output.to_string();
// Fix the links to the types.
for type_name in types {
let formatted_type_name = format!("`{}`", type_name);
if type_name == "TagDeclarator" {
let link = format!("[`{}`](/docs/kcl/types#tag-declaration)", "TagDeclarator");
output = output.replace(&formatted_type_name, &link);
} else if type_name == "TagIdentifier" {
let link = format!("[`{}`](/docs/kcl/types#tag-identifier)", "TagIdentifier");
output = output.replace(&formatted_type_name, &link);
if type_name == "TagDeclarator" || type_name == "TagIdentifier" {
continue;
} else {
let link = format!("[`{}`](/docs/kcl/types/{})", type_name, type_name);
output = output.replace(&formatted_type_name, &link);
let link = format!("(/docs/kcl/types/{})", type_name);
cleaned_output =
cleaned_output.replace(&format!("`{}`", type_name), &format!("[`{}`]{}", type_name, &link));
// Do the same for the type with brackets.
cleaned_output =
cleaned_output.replace(&format!("`[{}]`", type_name), &format!("[`[{}]`]{}", type_name, link));
}
}
expectorate::assert_contents(format!("../../../docs/kcl/{}.md", fn_name), &output);
// Cleanup our weird number arrays.
// TODO: This is a hack for the handlebars template being too complex.
cleaned_output = cleaned_output.replace("`[, `number`, `number`]`", "`[number, number]`");
cleaned_output = cleaned_output.replace("`[, `number`, `number`, `number`]`", "`[number, number, number]`");
cleanup_static_links(&cleaned_output)
}
fn add_to_types(
name: &str,
schema: &schemars::schema::Schema,
types: &mut BTreeMap<String, schemars::schema::Schema>,
) -> Result<()> {
if name.is_empty() {
return Err(anyhow::anyhow!("Empty type name"));
}
let schemars::schema::Schema::Object(o) = schema else {
return Err(anyhow::anyhow!(
"Failed to get object schema, should have not been a primitive"
));
};
// If we have an array we want to generate the type markdown files for each item in the
// array.
if let Some(array) = &o.array {
// Recursively generate the type markdown files for each item in the array.
if let Some(items) = &array.items {
match items {
schemars::schema::SingleOrVec::Single(item) => {
if is_primitive(item)?.is_some() {
return Ok(());
}
return add_to_types(name.trim_start_matches('[').trim_end_matches(']'), item, types);
}
schemars::schema::SingleOrVec::Vec(items) => {
for item in items {
if is_primitive(item)?.is_some() {
continue;
}
add_to_types(name.trim_start_matches('[').trim_end_matches(']'), item, types)?;
}
return Ok(());
}
}
} else {
return Err(anyhow::anyhow!("Failed to get array items"));
}
}
types.insert(name.to_string(), schema.clone());
Ok(())
}
fn generate_type(name: &str, schema: &schemars::schema::Schema) -> Result<()> {
fn generate_type(
name: &str,
schema: &schemars::schema::Schema,
types: &BTreeMap<String, schemars::schema::Schema>,
) -> Result<()> {
if name.is_empty() {
return Err(anyhow::anyhow!("Empty type name"));
}
@ -287,14 +473,14 @@ fn generate_type(name: &str, schema: &schemars::schema::Schema) -> Result<()> {
if is_primitive(item)?.is_some() {
return Ok(());
}
return generate_type(name.trim_start_matches('[').trim_end_matches(']'), item);
return generate_type(name.trim_start_matches('[').trim_end_matches(']'), item, types);
}
schemars::schema::SingleOrVec::Vec(items) => {
for item in items {
if is_primitive(item)?.is_some() {
continue;
}
generate_type(name.trim_start_matches('[').trim_end_matches(']'), item)?;
generate_type(name.trim_start_matches('[').trim_end_matches(']'), item, types)?;
}
return Ok(());
}
@ -315,8 +501,12 @@ fn generate_type(name: &str, schema: &schemars::schema::Schema) -> Result<()> {
return Err(anyhow::anyhow!("Type name is not pascal cased: {}", name));
}
// Make sure the types directory exists.
std::fs::create_dir_all(TYPES_DIR)?;
let new_schema = recurse_and_create_references(name, schema, types)?;
let schemars::schema::Schema::Object(o) = new_schema else {
return Err(anyhow::anyhow!(
"Failed to get object schema, should have not been a primitive"
));
};
let hbs = init_handlebars()?;
@ -333,8 +523,10 @@ fn generate_type(name: &str, schema: &schemars::schema::Schema) -> Result<()> {
let data = json!(schemars::schema::Schema::Object(object));
let output = hbs.render("type", &data)?;
std::fs::write(format!("{}/{}.md", TYPES_DIR, name), output)?;
let mut output = hbs.render("type", &data)?;
// Fix the links to the types.
output = cleanup_type_links(&output, types.keys().cloned().collect());
expectorate::assert_contents(format!("{}/{}.md", TYPES_DIR, name), &output);
Ok(())
}
@ -370,20 +562,130 @@ fn clean_function_name(name: &str) -> String {
fn_name
}
/// Check if a schema is the same as another schema, but don't check the description.
fn is_same_schema(sa: &schemars::schema::Schema, sb: &schemars::schema::Schema) -> bool {
let schemars::schema::Schema::Object(a) = sa else {
return sa == sb;
};
let schemars::schema::Schema::Object(b) = sb else {
return sa == sb;
};
let mut a = a.clone();
a.metadata = None;
let mut b = b.clone();
b.metadata = None;
a == b
}
/// Recursively create references for types we already know about.
fn recurse_and_create_references(
name: &str,
schema: &schemars::schema::Schema,
types: &BTreeMap<String, schemars::schema::Schema>,
) -> Result<schemars::schema::Schema> {
let schemars::schema::Schema::Object(o) = schema else {
return Err(anyhow::anyhow!(
"Failed to get object schema, should have not been a primitive"
));
};
// Check if this is the type we already know about.
for (n, s) in types {
if is_same_schema(schema, s) && name != n && !n.starts_with("[") {
// Return a reference to the type.
let sref = schemars::schema::Schema::new_ref(n.to_string());
// Add the existing metadata to the reference.
let schemars::schema::Schema::Object(ro) = sref else {
return Err(anyhow::anyhow!(
"Failed to get object schema, should have not been a primitive"
));
};
let mut ro = ro.clone();
ro.metadata = o.metadata.clone();
return Ok(schemars::schema::Schema::Object(ro));
}
}
let mut obj = o.clone();
// If we have an object iterate over the properties and recursively create references.
if let Some(object) = &mut obj.object {
for (_, value) in object.properties.iter_mut() {
let new_value = recurse_and_create_references(name, value, types)?;
*value = new_value;
}
}
// If we have an array iterate over the items and recursively create references.
if let Some(array) = &mut obj.array {
if let Some(items) = &mut array.items {
match items {
schemars::schema::SingleOrVec::Single(item) => {
let new_item = recurse_and_create_references(name, item, types)?;
*item = Box::new(new_item);
}
schemars::schema::SingleOrVec::Vec(items) => {
for item in items {
let new_item = recurse_and_create_references(name, item, types)?;
*item = new_item;
}
}
}
}
}
// If we have subschemas iterate over them and recursively create references.
if let Some(subschema) = &mut obj.subschemas {
// Do anyOf.
if let Some(any_of) = &mut subschema.any_of {
for item in any_of {
let new_item = recurse_and_create_references(name, item, types)?;
*item = new_item;
}
}
// Do allOf.
if let Some(all_of) = &mut subschema.all_of {
for item in all_of {
let new_item = recurse_and_create_references(name, item, types)?;
*item = new_item;
}
}
// Do oneOf.
if let Some(one_of) = &mut subschema.one_of {
for item in one_of {
let new_item = recurse_and_create_references(name, item, types)?;
*item = new_item;
}
}
}
Ok(schemars::schema::Schema::Object(obj.clone()))
}
#[test]
fn test_generate_stdlib_markdown_docs() {
// Clean the old files.
std::fs::remove_dir_all(TYPES_DIR).unwrap_or_default();
let stdlib = StdLib::new();
let combined = stdlib.combined();
// Generate the index which is the table of contents.
generate_index(&combined).unwrap();
let mut types = BTreeMap::new();
for key in combined.keys().sorted() {
let internal_fn = combined.get(key).unwrap();
generate_function(internal_fn.clone()).unwrap();
let fn_types = generate_function(internal_fn.clone()).unwrap();
types.extend(fn_types);
}
// Generate the type markdown files.
for (name, schema) in &types {
generate_type(name, schema, &types).unwrap();
}
}

View File

@ -1,7 +1,17 @@
{{~ #if $ref ~}}
[{{basename $ref}}](#{{lowercase (basename $ref)}}){{else if anyOf ~}}
`anyOf`{{else if oneOf ~}}
`oneOf`{{else if allOf ~}}
`allOf`{{else if enum ~}}
enum: {{pretty_enum enum}}{{else ~}}
`{{type}}`{{#if format}} (`{{format}}`){{/if}}{{~/if~}}
{{pretty_ref $ref}}{{else if anyOf ~}}
**anyOf:** {{#each anyOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if oneOf ~}}
**oneOf:** {{#each oneOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if allOf ~}}
**allOf:** {{#each allOf}}{{> propertyType this}}{{#unless @last}} **OR** {{/unless}}{{/each}}{{else if enum ~}}
enum: {{pretty_enum enum}}{{else if items ~}}
{{~ #if maxItems ~}}
{{~ #if (lte maxItems 3) ~}}
`[{{#times maxItems ~}}
{{~ #if @first ~}}{{else ~}}, {{/if ~}}{{> propertyType ../items}}{{/times}}]`{{else ~}}
`[` {{ > propertyType items }} `]`
{{~ /if ~}}{{else ~}}`[` {{ > propertyType items }} `]`
{{~ /if ~}}{{else ~}}
`{{type}}{{~ #if format }}{{#if neq format "double" }} ({{format}}){{/if}}
{{~ /if ~}}`
{{~/if~}}

View File

@ -1,7 +1,5 @@
{{
#if
$ref}}
[{{basename $ref}}](#{{lowercase (basename $ref)}})
{{#if $ref}}
{{pretty_ref $ref}}
{{else if anyOf}}
**anyOf**
{{else if oneOf}}