1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
//! ruststep is a crate for reading and writing ASCII encoding of exchange structure,
//! a.k.a. STEP file, and for mapping them into Rust structs generated by [espr](../espr/index.html) compiler.
//!
//! This crate also contains generated code as sub-modules for following schemas:
//!
//! - [ISO 10303-201 "Part 201: Application protocol: Explicit draughting"](https://www.iso.org/standard/20595.html)
//! - [ISO 10303-203 "Part 203: Application protocol: Configuration controlled 3D design of mechanical parts and assemblies"](https://www.iso.org/standard/44305.html)
//!
//! They are compiled only when the `features` are enabled in cargo to keep compile faster:
//!
//! ```toml
//! [dependencies]
//! ruststep = { version: "*", features = ["ap201", "ap203"] }
//! ```
//!
//! These features are not default.
//!
//! ASCII encoding of exchange structure
//! -------------------------------------
//!
//! ASCII encoding of exchange structure is defined in
//! [ISO-10303-21 "Part 21: Implementation methods: Clear text encoding of the exchange structure"](https://www.iso.org/standard/63141.html).
//! This ISO document contains an example in section Annex H "Example of a complete exchange structure":
//!
//! ```text
//! ISO-10303-21; /* start exchange structure */
//!
//! HEADER; /* start header section */
//!
//! FILE_DESCRIPTION(
//! ('THIS FILE CONTAINS A SMALL SAMPLE STEP MODEL'),
//! '3;1'
//! );
//!
//! FILE_NAME(
//! 'EXAMPLE STEP FILE #1',
//! '2013-02-11T15:30:00',
//! ('JOHN DOE', 'ACME INC.', 'METROPOLIS USA'),
//! ('ACME INC. A SUBSIDIARY OF GIANT INDUSTRIES', 'METROPOLIS USA'),
//! 'CIM/STEP VERSION2',
//! 'SUPER CIM SYSTEM RELEASE 4.0',
//! 'APPROVED BY JOE BLOGGS'
//! );
//!
//! FILE_SCHEMA(('EXAMPLE_GEOMETRY'));
//!
//! ENDSEC; /* end header section */
//!
//! DATA; /* start data section */
//!
//! /* The following 13 entities represent a triangular edge loop */
//!
//! /* cartesian point entity */
//! #1 = CPT(0.0, 0.0, 0.0);
//! #2 = CPT(0.0, 1.0, 0.0);
//! #3 = CPT(1.0, 0.0, 0.0);
//!
//! /* vertex entity */
//! #11 = VX(#1);
//! #12 = VX(#2);
//! #13 = VX(#3);
//!
//! /* edge entity */
//! #16 = ED(#11, #12);
//! #17 = ED(#11, #13);
//! #18 = ED(#13, #12);
//!
//! /* edge logical structure entity */
//! #21 = ED_STRC(#17, .F.);
//! #22 = ED_STRC(#18, .F.);
//! #23 = ED_STRC(#16, .T.);
//!
//! /* edge loop entity */
//! #24 = ED_LOOP((#21, #22, #23));
//!
//! ENDSEC; /* end data section */
//!
//! END-ISO-10303-21; /* end exchange structure */
//! ```
//!
//! Spaces, indent, and comments are modified for better understanding.
//! This tells us what consists of exchange structure:
//!
//! - It starts with `ISO-10303-21;` and ends with `END-ISO-10303-21;`.
//! - It contains `HEADER` and `DATA` sections.
//! - `HEADER` section has three components `FILE_DESCRIPTION`, `FILE_NAME`, and `FILE_SCHEMA`.
//! - See [header] module document for detail.
//! - Each data is in form `TYPE_NAME(parameter1, ...)`.
//! - This is called "Record".
//! - Each records is bounded by a number.
//! - Parameter can be
//! - Floating number, e.g. `0.0`
//! - String, e.g. `'EXAMPLE STRING'`
//! - List, e.g. `(1.0, 2.0)`
//! - Enum value, e.g. `.T.` (means true), `.F.` (means false)
//! - Reference, e.g. `#1`
//! - Actual data, triangular geometry in this example, is stored in `DATA` section.
//!
//! See the module document of [parser] for detail.
//!
//! XML interoperation
//! -------------------
//! STEP implementation using XML(eXtensible Markup Language) is defined in
//! [ISO-10303-28](https://www.iso.org/standard/40646.html).
//!
//! Not supported yet. See [tracking issue](https://github.com/ricosjp/ruststep/issues/215).
//!
#![deny(rustdoc::broken_intra_doc_links)]
pub mod ast;
pub mod error;
pub mod header;
pub mod parser;
pub mod primitive;
pub mod tables;
// To work generated code by ruststep-derive only with ruststep
pub use derive_more;
pub use itertools;
pub use serde;
pub use ruststep_derive::*;
// Automatically generated codes
#[cfg(feature = "ap201")]
pub mod ap201;
#[cfg(feature = "ap203")]
pub mod ap203;