sysmlpy 0.27.2__tar.gz → 0.27.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/PKG-INFO +1 -1
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/pyproject.toml +2 -2
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/__init__.py +1 -1
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr_parser.py +22 -4
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr_visitor.py +69 -79
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/definition.py +4 -5
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/classes.py +387 -3
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/usage.py +111 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/LICENSE +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/README.md +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/__main__.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/README.md +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/examples/attribute_values.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/examples/part_attributes.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/examples/tuples_sequences.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/formatting.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/README.md +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/LICENSE +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/README.md +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/__init__.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Base.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Links.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Actions.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Cases.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Connections.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Flows.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Items.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Parts.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Ports.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/States.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/SysML.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/library/systems/Views.sysml +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/navigate.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/plantuml.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/project.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/semantic.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/store.py +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/us_customary_units.txt +0 -0
- {sysmlpy-0.27.2 → sysmlpy-0.27.4}/src/sysmlpy/validator.py +0 -0
|
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "sysmlpy"
|
|
9
|
-
version = "0.27.
|
|
9
|
+
version = "0.27.4"
|
|
10
10
|
description = "SysML v2.0 Parser"
|
|
11
11
|
authors = [
|
|
12
12
|
{ name="Jon R. Fox (mycr0ft)", email="jon.fox@drfox.com" },
|
|
@@ -114,7 +114,7 @@ build_command = "pip install poetry && poetry build"
|
|
|
114
114
|
|
|
115
115
|
[tool.poetry]
|
|
116
116
|
name = "sysmlpy"
|
|
117
|
-
version = "0.27.
|
|
117
|
+
version = "0.27.4"
|
|
118
118
|
description = ""
|
|
119
119
|
authors = ["Jon R. Fox (mycr0ft) <jon.fox@drfox.com>"]
|
|
120
120
|
readme = "README.md"
|
|
@@ -19,7 +19,7 @@ __all__ = [
|
|
|
19
19
|
"analyze", "SemanticIssue", "SemanticAnalyzer",
|
|
20
20
|
]
|
|
21
21
|
__author__ = "Jon Fox"
|
|
22
|
-
__version__ = "0.27.
|
|
22
|
+
__version__ = "0.27.4"
|
|
23
23
|
|
|
24
24
|
from sysmlpy.usage import (
|
|
25
25
|
Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
|
|
@@ -59,16 +59,34 @@ def parse(source, library=None):
|
|
|
59
59
|
SysMLSyntaxError
|
|
60
60
|
If the source contains syntax errors.
|
|
61
61
|
"""
|
|
62
|
+
from pathlib import Path
|
|
63
|
+
|
|
62
64
|
# Handle string or file input
|
|
63
65
|
if hasattr(source, 'read'):
|
|
64
66
|
content = source.read()
|
|
65
67
|
else:
|
|
66
68
|
content = source
|
|
67
69
|
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
# Load library files if library path is provided
|
|
71
|
+
if library is not None:
|
|
72
|
+
library_paths = [library] if isinstance(library, (str, Path)) else library
|
|
73
|
+
library_content = []
|
|
74
|
+
|
|
75
|
+
for lib_path in library_paths:
|
|
76
|
+
lib_path = Path(lib_path)
|
|
77
|
+
if lib_path.exists() and lib_path.is_dir():
|
|
78
|
+
# Load all .sysml and .kerml files from library directory
|
|
79
|
+
for ext in ['*.sysml', '*.kerml']:
|
|
80
|
+
for lib_file in lib_path.glob(f'**/{ext}'):
|
|
81
|
+
try:
|
|
82
|
+
lib_content = lib_file.read_text(encoding='utf-8')
|
|
83
|
+
library_content.append(lib_content)
|
|
84
|
+
except Exception:
|
|
85
|
+
pass # Skip files that can't be read
|
|
86
|
+
|
|
87
|
+
# Prepend library content to main content
|
|
88
|
+
if library_content:
|
|
89
|
+
content = '\n\n'.join(library_content) + '\n\n' + content
|
|
72
90
|
|
|
73
91
|
# Create input stream
|
|
74
92
|
input_stream = InputStream(content)
|
|
@@ -18,6 +18,46 @@ def _extract_name_shortname(name_text):
|
|
|
18
18
|
return name_text, None
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
def _extract_name_from_ident(ident):
|
|
22
|
+
"""Extract (name, shortname) from an Identification context.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
ident : antlr4 ParserRuleContext
|
|
27
|
+
Identification context from ANTLR parser.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
tuple
|
|
32
|
+
(name, shortname) tuple. Returns (None, None) if no name found.
|
|
33
|
+
|
|
34
|
+
Handles:
|
|
35
|
+
- `name` → (name, None)
|
|
36
|
+
- `<shortname> name` → (name, shortname)
|
|
37
|
+
"""
|
|
38
|
+
name = None
|
|
39
|
+
shortname = None
|
|
40
|
+
if ident is None:
|
|
41
|
+
return name, shortname
|
|
42
|
+
|
|
43
|
+
if hasattr(ident, 'name'):
|
|
44
|
+
name_list = ident.name()
|
|
45
|
+
if name_list and isinstance(name_list, list):
|
|
46
|
+
if len(name_list) == 2:
|
|
47
|
+
# <shortname> name pattern
|
|
48
|
+
shortname = name_list[0].getText()
|
|
49
|
+
name = name_list[1].getText()
|
|
50
|
+
elif len(name_list) == 1:
|
|
51
|
+
name_text = name_list[0].getText()
|
|
52
|
+
# Check for explicit angle brackets: <name> → shortname only
|
|
53
|
+
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
54
|
+
shortname = name_text
|
|
55
|
+
else:
|
|
56
|
+
name = name_text
|
|
57
|
+
|
|
58
|
+
return name, shortname
|
|
59
|
+
|
|
60
|
+
|
|
21
61
|
def _get_usage_identification(ctx):
|
|
22
62
|
"""Extract (name, shortname) from a usage context by navigating to usageDeclaration().identification().
|
|
23
63
|
|
|
@@ -40,18 +80,7 @@ def _get_usage_identification(ctx):
|
|
|
40
80
|
|
|
41
81
|
if usage_decl and hasattr(usage_decl, 'identification') and usage_decl.identification():
|
|
42
82
|
ident = usage_decl.identification()
|
|
43
|
-
|
|
44
|
-
name_list = ident.name()
|
|
45
|
-
if name_list and isinstance(name_list, list):
|
|
46
|
-
if len(name_list) == 2:
|
|
47
|
-
shortname = name_list[0].getText()
|
|
48
|
-
name = name_list[1].getText()
|
|
49
|
-
elif len(name_list) == 1:
|
|
50
|
-
name_text = name_list[0].getText()
|
|
51
|
-
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
52
|
-
shortname = name_text
|
|
53
|
-
else:
|
|
54
|
-
name = name_text
|
|
83
|
+
name, shortname = _extract_name_from_ident(ident)
|
|
55
84
|
|
|
56
85
|
return name, shortname
|
|
57
86
|
|
|
@@ -127,19 +156,7 @@ def _get_definition_identification(ctx):
|
|
|
127
156
|
|
|
128
157
|
if dd and hasattr(dd, 'identification') and dd.identification():
|
|
129
158
|
ident = dd.identification()
|
|
130
|
-
|
|
131
|
-
name_list = ident.name()
|
|
132
|
-
if name_list and isinstance(name_list, list):
|
|
133
|
-
if len(name_list) == 2:
|
|
134
|
-
# LT name GT name: first is short name, second is long name
|
|
135
|
-
shortname = name_list[0].getText()
|
|
136
|
-
name = name_list[1].getText()
|
|
137
|
-
elif len(name_list) == 1:
|
|
138
|
-
name_text = name_list[0].getText()
|
|
139
|
-
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
140
|
-
shortname = name_text
|
|
141
|
-
else:
|
|
142
|
-
name = name_text
|
|
159
|
+
name, shortname = _extract_name_from_ident(ident)
|
|
143
160
|
|
|
144
161
|
return name, shortname
|
|
145
162
|
|
|
@@ -157,20 +174,7 @@ def _build_identification_dict(ident_ctx):
|
|
|
157
174
|
shortname = None
|
|
158
175
|
|
|
159
176
|
if hasattr(ident_ctx, 'name'):
|
|
160
|
-
|
|
161
|
-
if name_list and isinstance(name_list, list):
|
|
162
|
-
if len(name_list) == 2:
|
|
163
|
-
# LT name GT name: first is short name, second is long name
|
|
164
|
-
shortname = name_list[0].getText()
|
|
165
|
-
name = name_list[1].getText()
|
|
166
|
-
elif len(name_list) == 1:
|
|
167
|
-
name_text = name_list[0].getText()
|
|
168
|
-
# Check for explicit angle brackets: <name> → shortname only
|
|
169
|
-
has_lt = hasattr(ident_ctx, 'LT') and ident_ctx.LT() is not None
|
|
170
|
-
if has_lt:
|
|
171
|
-
shortname = name_text
|
|
172
|
-
else:
|
|
173
|
-
name = name_text
|
|
177
|
+
name, shortname = _extract_name_from_ident(ident_ctx)
|
|
174
178
|
|
|
175
179
|
if name is None and shortname is None:
|
|
176
180
|
return None
|
|
@@ -314,21 +318,7 @@ def _visit_package_dict(tree):
|
|
|
314
318
|
ident = decl.identification()
|
|
315
319
|
if ident:
|
|
316
320
|
# Handle identification: LT name GT name | LT name GT | name
|
|
317
|
-
|
|
318
|
-
name_list = ident.name()
|
|
319
|
-
if name_list and isinstance(name_list, list):
|
|
320
|
-
if len(name_list) == 2:
|
|
321
|
-
# LT name GT name: first is short name, second is long name
|
|
322
|
-
pkg_shortname = name_list[0].getText()
|
|
323
|
-
pkg_name = name_list[1].getText()
|
|
324
|
-
elif len(name_list) == 1:
|
|
325
|
-
name_text = name_list[0].getText()
|
|
326
|
-
# Check for explicit < > angle brackets
|
|
327
|
-
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
328
|
-
pkg_shortname = name_text
|
|
329
|
-
else:
|
|
330
|
-
pkg_name = name_text
|
|
331
|
-
# If len(name_list) == 0, leave both as None
|
|
321
|
+
pkg_name, pkg_shortname = _extract_name_from_ident(ident)
|
|
332
322
|
|
|
333
323
|
# Build package body elements
|
|
334
324
|
body_elements = []
|
|
@@ -828,19 +818,8 @@ def _make_nested_package_dict(ctx, prefix=None):
|
|
|
828
818
|
decl = ctx.packageDeclaration()
|
|
829
819
|
if hasattr(decl, 'identification'):
|
|
830
820
|
ident = decl.identification()
|
|
831
|
-
if ident
|
|
832
|
-
|
|
833
|
-
if name_list and isinstance(name_list, list):
|
|
834
|
-
if len(name_list) == 2:
|
|
835
|
-
pkg_shortname = name_list[0].getText()
|
|
836
|
-
pkg_name = name_list[1].getText()
|
|
837
|
-
elif len(name_list) == 1:
|
|
838
|
-
name_text = name_list[0].getText()
|
|
839
|
-
# Explicit angle brackets <name> → shortname; bare name → declaredName
|
|
840
|
-
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
841
|
-
pkg_shortname = name_text
|
|
842
|
-
else:
|
|
843
|
-
pkg_name = name_text
|
|
821
|
+
if ident:
|
|
822
|
+
pkg_name, pkg_shortname = _extract_name_from_ident(ident)
|
|
844
823
|
|
|
845
824
|
# Process body elements
|
|
846
825
|
body_elements = []
|
|
@@ -2497,6 +2476,28 @@ def _visit_send_node(ctx):
|
|
|
2497
2476
|
"specialization": None
|
|
2498
2477
|
}
|
|
2499
2478
|
}
|
|
2479
|
+
elif hasattr(ctx, 'actionUsageDeclaration') and ctx.actionUsageDeclaration():
|
|
2480
|
+
aud = ctx.actionUsageDeclaration()
|
|
2481
|
+
action_node_decl = {
|
|
2482
|
+
"name": "ActionNodeUsageDeclaration",
|
|
2483
|
+
"declaration": None
|
|
2484
|
+
}
|
|
2485
|
+
if hasattr(aud, 'usageDeclaration') and aud.usageDeclaration():
|
|
2486
|
+
ud = aud.usageDeclaration()
|
|
2487
|
+
if ud:
|
|
2488
|
+
name, shortname = _get_usage_identification_from_ud(ud)
|
|
2489
|
+
action_node_decl["declaration"] = {
|
|
2490
|
+
"name": "UsageDeclaration",
|
|
2491
|
+
"declaration": {
|
|
2492
|
+
"name": "FeatureDeclaration",
|
|
2493
|
+
"identification": {
|
|
2494
|
+
"name": "Identification",
|
|
2495
|
+
"declaredShortName": shortname,
|
|
2496
|
+
"declaredName": name
|
|
2497
|
+
},
|
|
2498
|
+
"specialization": None
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2500
2501
|
|
|
2501
2502
|
node_param = None
|
|
2502
2503
|
if hasattr(ctx, 'nodeParameterMember') and ctx.nodeParameterMember():
|
|
@@ -4055,18 +4056,7 @@ def _get_usage_identification_from_ud(ud):
|
|
|
4055
4056
|
shortname = None
|
|
4056
4057
|
if ud and hasattr(ud, 'identification') and ud.identification():
|
|
4057
4058
|
ident = ud.identification()
|
|
4058
|
-
|
|
4059
|
-
name_list = ident.name()
|
|
4060
|
-
if name_list and isinstance(name_list, list):
|
|
4061
|
-
if len(name_list) == 2:
|
|
4062
|
-
shortname = name_list[0].getText()
|
|
4063
|
-
name = name_list[1].getText()
|
|
4064
|
-
elif len(name_list) == 1:
|
|
4065
|
-
name_text = name_list[0].getText()
|
|
4066
|
-
if hasattr(ident, 'LT') and ident.LT() is not None:
|
|
4067
|
-
shortname = name_text
|
|
4068
|
-
else:
|
|
4069
|
-
name = name_text
|
|
4059
|
+
name, shortname = _extract_name_from_ident(ident)
|
|
4070
4060
|
return name, shortname
|
|
4071
4061
|
|
|
4072
4062
|
|
|
@@ -559,10 +559,10 @@ class Package(Searchable):
|
|
|
559
559
|
"prefix": None,
|
|
560
560
|
}
|
|
561
561
|
|
|
562
|
-
#
|
|
562
|
+
# Packages cannot be typed; they should import from other packages.
|
|
563
|
+
# If typedby is set, print a warning and ignore it.
|
|
563
564
|
if self.typedby is not None:
|
|
564
|
-
|
|
565
|
-
raise NotImplementedError
|
|
565
|
+
print(f"[Package] Warning: Packages cannot be typed. Ignoring typedby '{self.typedby.name}'. Use imports instead.") # pragma: no cover
|
|
566
566
|
|
|
567
567
|
return package
|
|
568
568
|
|
|
@@ -1221,8 +1221,7 @@ class Package(Searchable):
|
|
|
1221
1221
|
r.parent = self
|
|
1222
1222
|
self.children.append(r)
|
|
1223
1223
|
else:
|
|
1224
|
-
print(f"Unknown class: {inner_class}")
|
|
1225
|
-
raise NotImplementedError
|
|
1224
|
+
print(f"[Package.load_from_grammar] Unknown class: {inner_class} - skipping") # pragma: no cover
|
|
1226
1225
|
|
|
1227
1226
|
return self
|
|
1228
1227
|
|