@doenet/doenetml 0.6.0-alpha1
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.
- package/.prettierrc +3 -0
- package/LICENSE +661 -0
- package/README.md +146 -0
- package/cypress/e2e/ActivityViewer/activityVariants.cy.js +1770 -0
- package/cypress/e2e/ActivityViewer/compiledActivity.cy.js +83 -0
- package/cypress/e2e/ActivityViewer/relationshipsAmongPages.cy.js +697 -0
- package/cypress/e2e/answerValidation/errorinnumbers.cy.js +2125 -0
- package/cypress/e2e/answerValidation/factoring.cy.js +1945 -0
- package/cypress/e2e/answerValidation/factoringOldAlgorithm.cy.js +892 -0
- package/cypress/e2e/answerValidation/functionanswers.cy.js +314 -0
- package/cypress/e2e/answerValidation/matchingpatterns.cy.js +287 -0
- package/cypress/e2e/answerValidation/matchpartial.cy.js +6711 -0
- package/cypress/e2e/answerValidation/pointlocation.cy.js +3989 -0
- package/cypress/e2e/answerValidation/symbolicequality.cy.js +1893 -0
- package/cypress/e2e/answerValidation/videoProgress.cy.js +210 -0
- package/cypress/e2e/assignNames/basiccopy.cy.js +2376 -0
- package/cypress/e2e/assignNames/collections.cy.js +9247 -0
- package/cypress/e2e/assignNames/selects.cy.js +105 -0
- package/cypress/e2e/assignNames/sequences.cy.js +1964 -0
- package/cypress/e2e/baseComponent/basecomponentproperties.cy.js +999 -0
- package/cypress/e2e/baseComponent/doenetMLtext.cy.js +427 -0
- package/cypress/e2e/chemistry/atom.cy.js +201 -0
- package/cypress/e2e/chemistry/ion.cy.js +608 -0
- package/cypress/e2e/chemistry/ioniccompound.cy.js +133 -0
- package/cypress/e2e/dynamicalsystem/cobwebpolyline.cy.js +2653 -0
- package/cypress/e2e/dynamicalsystem/equilibriumcurve.cy.js +311 -0
- package/cypress/e2e/dynamicalsystem/equilibriumline.cy.js +279 -0
- package/cypress/e2e/dynamicalsystem/equilibriumpoint.cy.js +283 -0
- package/cypress/e2e/dynamicalsystem/odesystem.cy.js +1834 -0
- package/cypress/e2e/equality/mathexpressions.cy.js +948 -0
- package/cypress/e2e/graphing/graphreferences.cy.js +978 -0
- package/cypress/e2e/graphing/graphreferences2.cy.js +615 -0
- package/cypress/e2e/linearAlgebra/eigenDecomposition.cy.js +401 -0
- package/cypress/e2e/tagSpecific/angle.cy.js +3898 -0
- package/cypress/e2e/tagSpecific/animatefromsequence.cy.js +2306 -0
- package/cypress/e2e/tagSpecific/answer.cy.js +31647 -0
- package/cypress/e2e/tagSpecific/bestfitline.cy.js +612 -0
- package/cypress/e2e/tagSpecific/blockquote.cy.js +30 -0
- package/cypress/e2e/tagSpecific/boolean.cy.js +742 -0
- package/cypress/e2e/tagSpecific/booleaninput.cy.js +1283 -0
- package/cypress/e2e/tagSpecific/booleanlist.cy.js +588 -0
- package/cypress/e2e/tagSpecific/booleanoperators.cy.js +596 -0
- package/cypress/e2e/tagSpecific/booleanoperatorsonmath.cy.js +498 -0
- package/cypress/e2e/tagSpecific/callaction.cy.js +2835 -0
- package/cypress/e2e/tagSpecific/choiceinput.cy.js +3205 -0
- package/cypress/e2e/tagSpecific/circle.cy.js +22036 -0
- package/cypress/e2e/tagSpecific/codeeditor.cy.js +1995 -0
- package/cypress/e2e/tagSpecific/collect.cy.js +5035 -0
- package/cypress/e2e/tagSpecific/componentsize.cy.js +502 -0
- package/cypress/e2e/tagSpecific/conditionalcontent.cy.js +3495 -0
- package/cypress/e2e/tagSpecific/contentBrowser.cy.js +335 -0
- package/cypress/e2e/tagSpecific/contentpicker.cy.js +261 -0
- package/cypress/e2e/tagSpecific/copy.cy.js +12627 -0
- package/cypress/e2e/tagSpecific/copy2.cy.js +5698 -0
- package/cypress/e2e/tagSpecific/curve.bezier.cy.js +12440 -0
- package/cypress/e2e/tagSpecific/curve.cy.js +1716 -0
- package/cypress/e2e/tagSpecific/curve.function.cy.js +1471 -0
- package/cypress/e2e/tagSpecific/curve.parametrized.cy.js +920 -0
- package/cypress/e2e/tagSpecific/document.cy.js +234 -0
- package/cypress/e2e/tagSpecific/endpoint.cy.js +197 -0
- package/cypress/e2e/tagSpecific/evaluate.cy.js +8895 -0
- package/cypress/e2e/tagSpecific/extract.cy.js +2282 -0
- package/cypress/e2e/tagSpecific/feedback.cy.js +2941 -0
- package/cypress/e2e/tagSpecific/function.cy.js +9450 -0
- package/cypress/e2e/tagSpecific/functioniterates.cy.js +1178 -0
- package/cypress/e2e/tagSpecific/functionoperators.cy.js +4047 -0
- package/cypress/e2e/tagSpecific/graph.cy.js +2491 -0
- package/cypress/e2e/tagSpecific/group.cy.js +683 -0
- package/cypress/e2e/tagSpecific/hint.cy.js +204 -0
- package/cypress/e2e/tagSpecific/image.cy.js +770 -0
- package/cypress/e2e/tagSpecific/integer.cy.js +206 -0
- package/cypress/e2e/tagSpecific/label.cy.js +800 -0
- package/cypress/e2e/tagSpecific/legend.cy.js +1001 -0
- package/cypress/e2e/tagSpecific/line.cy.js +12167 -0
- package/cypress/e2e/tagSpecific/linesegment.cy.js +4749 -0
- package/cypress/e2e/tagSpecific/lorem.cy.js +289 -0
- package/cypress/e2e/tagSpecific/map.cy.js +4476 -0
- package/cypress/e2e/tagSpecific/matchespattern.cy.js +693 -0
- package/cypress/e2e/tagSpecific/math.cy.js +10990 -0
- package/cypress/e2e/tagSpecific/mathdisplay.cy.js +2689 -0
- package/cypress/e2e/tagSpecific/mathinput.cy.js +15628 -0
- package/cypress/e2e/tagSpecific/mathinputgraph.cy.js +566 -0
- package/cypress/e2e/tagSpecific/mathlist.cy.js +4073 -0
- package/cypress/e2e/tagSpecific/mathoperators.cy.js +13851 -0
- package/cypress/e2e/tagSpecific/matrix.cy.js +8825 -0
- package/cypress/e2e/tagSpecific/matrixinput.cy.js +16277 -0
- package/cypress/e2e/tagSpecific/module.cy.js +1771 -0
- package/cypress/e2e/tagSpecific/number.cy.js +2221 -0
- package/cypress/e2e/tagSpecific/numberlist.cy.js +1285 -0
- package/cypress/e2e/tagSpecific/p.cy.js +72 -0
- package/cypress/e2e/tagSpecific/paginator.cy.js +2983 -0
- package/cypress/e2e/tagSpecific/parabola.cy.js +14331 -0
- package/cypress/e2e/tagSpecific/paragraphmarkup.cy.js +104 -0
- package/cypress/e2e/tagSpecific/periodicset.cy.js +1439 -0
- package/cypress/e2e/tagSpecific/piecewisefunction.cy.js +1055 -0
- package/cypress/e2e/tagSpecific/pluralize.cy.js +274 -0
- package/cypress/e2e/tagSpecific/point.cy.js +8895 -0
- package/cypress/e2e/tagSpecific/point2.cy.js +10259 -0
- package/cypress/e2e/tagSpecific/polygon.cy.js +5039 -0
- package/cypress/e2e/tagSpecific/polyline.cy.js +4704 -0
- package/cypress/e2e/tagSpecific/problem.cy.js +2768 -0
- package/cypress/e2e/tagSpecific/ray.cy.js +10770 -0
- package/cypress/e2e/tagSpecific/rectangle.cy.js +2143 -0
- package/cypress/e2e/tagSpecific/ref.cy.js +420 -0
- package/cypress/e2e/tagSpecific/regularPolygon.cy.js +1006 -0
- package/cypress/e2e/tagSpecific/regularPolygon2.cy.js +100 -0
- package/cypress/e2e/tagSpecific/regularPolygon3.cy.js +777 -0
- package/cypress/e2e/tagSpecific/samplerandomnumbers.cy.js +3619 -0
- package/cypress/e2e/tagSpecific/sectioning.cy.js +3530 -0
- package/cypress/e2e/tagSpecific/select.cy.js +5376 -0
- package/cypress/e2e/tagSpecific/selectfromsequence.cy.js +3846 -0
- package/cypress/e2e/tagSpecific/selectrandomnumbers.cy.js +2914 -0
- package/cypress/e2e/tagSpecific/sequence.cy.js +2093 -0
- package/cypress/e2e/tagSpecific/shuffle.cy.js +490 -0
- package/cypress/e2e/tagSpecific/sidebyside.cy.js +8057 -0
- package/cypress/e2e/tagSpecific/singlecharactercomponents.cy.js +72 -0
- package/cypress/e2e/tagSpecific/slider.cy.js +914 -0
- package/cypress/e2e/tagSpecific/solution.cy.js +109 -0
- package/cypress/e2e/tagSpecific/solveequations.cy.js +1026 -0
- package/cypress/e2e/tagSpecific/sort.cy.js +1685 -0
- package/cypress/e2e/tagSpecific/spreadsheet.cy.js +5971 -0
- package/cypress/e2e/tagSpecific/subsetofreals.cy.js +2725 -0
- package/cypress/e2e/tagSpecific/substitute.cy.js +2646 -0
- package/cypress/e2e/tagSpecific/tabular.cy.js +36 -0
- package/cypress/e2e/tagSpecific/text.cy.js +975 -0
- package/cypress/e2e/tagSpecific/textinput.cy.js +2177 -0
- package/cypress/e2e/tagSpecific/textlist.cy.js +369 -0
- package/cypress/e2e/tagSpecific/triangle.cy.js +1936 -0
- package/cypress/e2e/tagSpecific/triggerset.cy.js +2023 -0
- package/cypress/e2e/tagSpecific/updatevalue.cy.js +3288 -0
- package/cypress/e2e/tagSpecific/vector.cy.js +20183 -0
- package/cypress/e2e/tagSpecific/video.cy.js +612 -0
- package/cypress/e2e/tagSpecific/when.cy.js +202 -0
- package/cypress/e2e/variants/specifysinglevariant.cy.js +6726 -0
- package/cypress/e2e/variants/uniquevariants.cy.js +4846 -0
- package/cypress/fixtures/example.json +5 -0
- package/cypress/support/commands.js +32 -0
- package/cypress/support/e2e.js +31 -0
- package/cypress.config.js +18 -0
- package/docs/codeSnippet.jsx +11 -0
- package/docs/index.html +133 -0
- package/docs/index.jsx +138 -0
- package/docs/prism.css +3 -0
- package/index.html +14 -0
- package/index.js +21 -0
- package/media/answer_example.png +0 -0
- package/media/graph_example.png +0 -0
- package/media/graph_markup_example.png +0 -0
- package/package.json +83 -0
- package/public/favicon.ico +0 -0
- package/public/fonts/files/open-sans-v18-latin-700.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-light.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
- package/public/fonts/files/open-sans-v18-latin-regular.woff +0 -0
- package/public/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
- package/src/Core/ComponentTypes.js +426 -0
- package/src/Core/Core.js +11852 -0
- package/src/Core/CoreWorker.js +127 -0
- package/src/Core/Dependencies.js +8226 -0
- package/src/Core/Numerics.js +473 -0
- package/src/Core/ParameterStack.js +36 -0
- package/src/Core/ReadOnlyProxyHandler.js +41 -0
- package/src/Core/StateProxyHandler.js +88 -0
- package/src/Core/components/Aliases.js +67 -0
- package/src/Core/components/Angle.js +758 -0
- package/src/Core/components/AnimateFromSequence.js +922 -0
- package/src/Core/components/Answer.js +2087 -0
- package/src/Core/components/AsList.js +83 -0
- package/src/Core/components/AttractTo.js +245 -0
- package/src/Core/components/AttractToAngles.js +262 -0
- package/src/Core/components/AttractToConstraint.js +104 -0
- package/src/Core/components/AttractToGrid.js +315 -0
- package/src/Core/components/Award.js +906 -0
- package/src/Core/components/BestFitLine.js +318 -0
- package/src/Core/components/BezierControls.js +719 -0
- package/src/Core/components/BlockQuote.js +35 -0
- package/src/Core/components/Boolean.js +500 -0
- package/src/Core/components/BooleanInput.js +330 -0
- package/src/Core/components/BooleanList.js +396 -0
- package/src/Core/components/BooleanOperators.js +35 -0
- package/src/Core/components/BooleanOperatorsOfMath.js +148 -0
- package/src/Core/components/CallAction.js +261 -0
- package/src/Core/components/Caption.js +73 -0
- package/src/Core/components/Case.js +56 -0
- package/src/Core/components/Cell.js +439 -0
- package/src/Core/components/CellBlock.js +64 -0
- package/src/Core/components/Chart.js +795 -0
- package/src/Core/components/Choice.js +266 -0
- package/src/Core/components/ChoiceInput.js +1407 -0
- package/src/Core/components/Circle.js +2884 -0
- package/src/Core/components/CodeEditor.js +647 -0
- package/src/Core/components/CodeViewer.js +294 -0
- package/src/Core/components/CollaborateGroupSetup.js +46 -0
- package/src/Core/components/CollaborateGroups.js +119 -0
- package/src/Core/components/Collect.js +850 -0
- package/src/Core/components/Column.js +608 -0
- package/src/Core/components/ConditionalContent.js +468 -0
- package/src/Core/components/ConsiderAsResponses.js +49 -0
- package/src/Core/components/ConstrainTo.js +161 -0
- package/src/Core/components/ConstrainToAngles.js +244 -0
- package/src/Core/components/ConstrainToGraph.js +142 -0
- package/src/Core/components/ConstrainToGrid.js +175 -0
- package/src/Core/components/ConstraintUnion.js +119 -0
- package/src/Core/components/Constraints.js +497 -0
- package/src/Core/components/ContentBrowser.js +441 -0
- package/src/Core/components/ContentPicker.js +263 -0
- package/src/Core/components/ControlVectors.js +25 -0
- package/src/Core/components/Coords.js +63 -0
- package/src/Core/components/Copy.js +3412 -0
- package/src/Core/components/Curve.js +4130 -0
- package/src/Core/components/CustomAttribute.js +175 -0
- package/src/Core/components/DataFrame.js +357 -0
- package/src/Core/components/DiscreteSimulationResultList.js +342 -0
- package/src/Core/components/DiscreteSimulationResultPolyline.js +581 -0
- package/src/Core/components/Divisions.js +55 -0
- package/src/Core/components/Document.js +888 -0
- package/src/Core/components/Embed.js +65 -0
- package/src/Core/components/Endpoint.js +62 -0
- package/src/Core/components/Evaluate.js +321 -0
- package/src/Core/components/Extract.js +656 -0
- package/src/Core/components/Extrema.js +556 -0
- package/src/Core/components/Feedback.js +200 -0
- package/src/Core/components/FeedbackDefinitions.js +97 -0
- package/src/Core/components/Figure.js +148 -0
- package/src/Core/components/Footnote.js +73 -0
- package/src/Core/components/Function.js +5344 -0
- package/src/Core/components/FunctionIterates.js +306 -0
- package/src/Core/components/FunctionOperators.js +702 -0
- package/src/Core/components/Graph.js +1679 -0
- package/src/Core/components/Group.js +7 -0
- package/src/Core/components/HasSameFactoring.js +407 -0
- package/src/Core/components/Hint.js +241 -0
- package/src/Core/components/Image.js +524 -0
- package/src/Core/components/Indexing.js +79 -0
- package/src/Core/components/IntComma.js +64 -0
- package/src/Core/components/Integer.js +81 -0
- package/src/Core/components/Intersection.js +328 -0
- package/src/Core/components/Interval.js +29 -0
- package/src/Core/components/Label.js +492 -0
- package/src/Core/components/Latex.js +104 -0
- package/src/Core/components/Legend.js +329 -0
- package/src/Core/components/Line.js +2040 -0
- package/src/Core/components/LineSegment.js +882 -0
- package/src/Core/components/Lists.js +180 -0
- package/src/Core/components/Lorem.js +249 -0
- package/src/Core/components/MMeMen.js +377 -0
- package/src/Core/components/Map.js +873 -0
- package/src/Core/components/Markers.js +101 -0
- package/src/Core/components/MatchesPattern.js +339 -0
- package/src/Core/components/Math.js +2552 -0
- package/src/Core/components/MathInput.js +948 -0
- package/src/Core/components/MathList.js +828 -0
- package/src/Core/components/MathOperators.js +1286 -0
- package/src/Core/components/Matrix.js +497 -0
- package/src/Core/components/MatrixInput.js +3157 -0
- package/src/Core/components/MdMdnMrow.js +394 -0
- package/src/Core/components/Module.js +16 -0
- package/src/Core/components/Number.js +1031 -0
- package/src/Core/components/NumberList.js +550 -0
- package/src/Core/components/Option.js +24 -0
- package/src/Core/components/P.js +71 -0
- package/src/Core/components/Paginator.js +338 -0
- package/src/Core/components/Panel.js +126 -0
- package/src/Core/components/Parabola.js +1561 -0
- package/src/Core/components/ParagraphMarkup.js +59 -0
- package/src/Core/components/Pegboard.js +43 -0
- package/src/Core/components/PeriodicSet.js +291 -0
- package/src/Core/components/PiecewiseFunction.js +832 -0
- package/src/Core/components/Pluralize.js +198 -0
- package/src/Core/components/Point.js +1295 -0
- package/src/Core/components/Polygon.js +408 -0
- package/src/Core/components/Polyline.js +841 -0
- package/src/Core/components/RandomizedTextList.js +225 -0
- package/src/Core/components/Ray.js +1737 -0
- package/src/Core/components/Rectangle.js +1535 -0
- package/src/Core/components/Ref.js +350 -0
- package/src/Core/components/RegionBetweenCurveXAxis.js +124 -0
- package/src/Core/components/RegionHalfPlane.js +107 -0
- package/src/Core/components/RegularPolygon.js +2118 -0
- package/src/Core/components/RenderDoenetML.js +181 -0
- package/src/Core/components/Row.js +780 -0
- package/src/Core/components/SampleRandomNumbers.js +653 -0
- package/src/Core/components/Sectioning.js +303 -0
- package/src/Core/components/Select.js +947 -0
- package/src/Core/components/SelectFromSequence.js +1242 -0
- package/src/Core/components/SelectRandomNumbers.js +225 -0
- package/src/Core/components/Sequence.js +444 -0
- package/src/Core/components/Setup.js +53 -0
- package/src/Core/components/Shuffle.js +470 -0
- package/src/Core/components/SideBySide.js +2130 -0
- package/src/Core/components/SingleCharacterComponents.js +41 -0
- package/src/Core/components/Slider.js +819 -0
- package/src/Core/components/SolutionContainer.js +67 -0
- package/src/Core/components/Solutions.js +334 -0
- package/src/Core/components/SolveEquations.js +568 -0
- package/src/Core/components/Sort.js +398 -0
- package/src/Core/components/Sources.js +108 -0
- package/src/Core/components/Split.js +205 -0
- package/src/Core/components/Spreadsheet.js +1507 -0
- package/src/Core/components/StyleDefinitions.js +111 -0
- package/src/Core/components/SubsetOfReals.js +348 -0
- package/src/Core/components/SubsetOfRealsInput.js +1474 -0
- package/src/Core/components/Substitute.js +496 -0
- package/src/Core/components/SummaryStatistics.js +652 -0
- package/src/Core/components/Table.js +145 -0
- package/src/Core/components/Tabular.js +384 -0
- package/src/Core/components/Template.js +360 -0
- package/src/Core/components/Text.js +341 -0
- package/src/Core/components/TextInput.js +566 -0
- package/src/Core/components/TextList.js +442 -0
- package/src/Core/components/TextListFromString.js +137 -0
- package/src/Core/components/TextOperatorsOfMath.js +21 -0
- package/src/Core/components/Triangle.js +280 -0
- package/src/Core/components/TriggerSet.js +189 -0
- package/src/Core/components/TupleList.js +43 -0
- package/src/Core/components/UpdateValue.js +435 -0
- package/src/Core/components/VariantControl.js +36 -0
- package/src/Core/components/Vector.js +2478 -0
- package/src/Core/components/Verbatim.js +125 -0
- package/src/Core/components/Video.js +673 -0
- package/src/Core/components/When.js +198 -0
- package/src/Core/components/abstract/AngleListComponent.js +140 -0
- package/src/Core/components/abstract/BaseComponent.js +1496 -0
- package/src/Core/components/abstract/BlockComponent.js +5 -0
- package/src/Core/components/abstract/BooleanBaseOperator.js +88 -0
- package/src/Core/components/abstract/BooleanBaseOperatorOfMath.js +100 -0
- package/src/Core/components/abstract/BooleanBaseOperatorOneInput.js +44 -0
- package/src/Core/components/abstract/ComponentSize.js +789 -0
- package/src/Core/components/abstract/ComponentWithSelectableType.js +537 -0
- package/src/Core/components/abstract/CompositeComponent.js +142 -0
- package/src/Core/components/abstract/ConstraintComponent.js +19 -0
- package/src/Core/components/abstract/FunctionBaseOperator.js +680 -0
- package/src/Core/components/abstract/GraphicalComponent.js +56 -0
- package/src/Core/components/abstract/InlineComponent.js +5 -0
- package/src/Core/components/abstract/InlineRenderInlineChildren.js +63 -0
- package/src/Core/components/abstract/Input.js +192 -0
- package/src/Core/components/abstract/IntervalListComponent.js +218 -0
- package/src/Core/components/abstract/LineListComponent.js +114 -0
- package/src/Core/components/abstract/MathBaseOperator.js +631 -0
- package/src/Core/components/abstract/MathBaseOperatorOneInput.js +112 -0
- package/src/Core/components/abstract/PointListComponent.js +238 -0
- package/src/Core/components/abstract/SectioningComponent.js +1262 -0
- package/src/Core/components/abstract/SingleCharacterInline.js +23 -0
- package/src/Core/components/abstract/TextBaseOperatorOfMath.js +47 -0
- package/src/Core/components/abstract/TextOrInline.js +66 -0
- package/src/Core/components/abstract/VariableName.js +31 -0
- package/src/Core/components/abstract/VariableNameList.js +83 -0
- package/src/Core/components/abstract/VectorListComponent.js +235 -0
- package/src/Core/components/chemistry/Atom.js +910 -0
- package/src/Core/components/chemistry/ElectronConfiguration.js +36 -0
- package/src/Core/components/chemistry/Ion.js +684 -0
- package/src/Core/components/chemistry/IonicCompound.js +189 -0
- package/src/Core/components/chemistry/OrbitalDiagram.js +175 -0
- package/src/Core/components/chemistry/OrbitalDiagramInput.js +753 -0
- package/src/Core/components/chemistry/index.js +6 -0
- package/src/Core/components/commonsugar/breakstrings.js +627 -0
- package/src/Core/components/commonsugar/lists.js +177 -0
- package/src/Core/components/dynamicalSystems/CobwebPolyline.js +913 -0
- package/src/Core/components/dynamicalSystems/EquilibriumCurve.js +95 -0
- package/src/Core/components/dynamicalSystems/EquilibriumLine.js +93 -0
- package/src/Core/components/dynamicalSystems/EquilibriumPoint.js +93 -0
- package/src/Core/components/dynamicalSystems/ODESystem.js +943 -0
- package/src/Core/components/dynamicalSystems/index.js +5 -0
- package/src/Core/components/linearAlgebra/EigenDecomposition.js +294 -0
- package/src/Core/utils/array.js +30 -0
- package/src/Core/utils/booleanLogic.js +965 -0
- package/src/Core/utils/checkEquality.js +818 -0
- package/src/Core/utils/cid.js +29 -0
- package/src/Core/utils/componentInfoObjects.js +100 -0
- package/src/Core/utils/constraints.js +23 -0
- package/src/Core/utils/copy.js +572 -0
- package/src/Core/utils/deepFunctions.js +173 -0
- package/src/Core/utils/descendants.js +252 -0
- package/src/Core/utils/enumeration.js +234 -0
- package/src/Core/utils/feedback.js +84 -0
- package/src/Core/utils/function.js +1343 -0
- package/src/Core/utils/graphical.js +196 -0
- package/src/Core/utils/label.js +396 -0
- package/src/Core/utils/math.js +1056 -0
- package/src/Core/utils/naming.js +45 -0
- package/src/Core/utils/periodicSetEquality.js +403 -0
- package/src/Core/utils/randomNumbers.js +70 -0
- package/src/Core/utils/retrieveMedia.js +98 -0
- package/src/Core/utils/retrieveTextFile.js +140 -0
- package/src/Core/utils/returnAllPossibleVariants.js +73 -0
- package/src/Core/utils/rounding.js +316 -0
- package/src/Core/utils/sequence.js +754 -0
- package/src/Core/utils/serializedStateProcessing.js +4049 -0
- package/src/Core/utils/size.js +22 -0
- package/src/Core/utils/stateVariables.js +138 -0
- package/src/Core/utils/style.js +535 -0
- package/src/Core/utils/subset-of-reals.js +796 -0
- package/src/Core/utils/table.js +41 -0
- package/src/Core/utils/text.js +16 -0
- package/src/Core/utils/triggering.js +167 -0
- package/src/Core/utils/variants.js +477 -0
- package/src/DoenetML.css +308 -0
- package/src/DoenetML.jsx +201 -0
- package/src/Parser/doenet.grammar +90 -0
- package/src/Parser/doenet.js +33 -0
- package/src/Parser/doenet.terms.js +20 -0
- package/src/Parser/parser.js +266 -0
- package/src/Parser/tokens.js +129 -0
- package/src/Tools/CodeMirror.jsx +440 -0
- package/src/Tools/DarkmodeController.jsx +21 -0
- package/src/Tools/Footers/MathInputSelector.jsx +34 -0
- package/src/Tools/Footers/VirtualKeyboard.jsx +751 -0
- package/src/Tools/cypressTest/CypressTest.jsx +341 -0
- package/src/Tools/cypressTest/index.html +102 -0
- package/src/Tools/cypressTest/index.jsx +40 -0
- package/src/Viewer/ActivityViewer.jsx +1461 -0
- package/src/Viewer/PageViewer.jsx +1329 -0
- package/src/Viewer/renderers/alert.jsx +17 -0
- package/src/Viewer/renderers/angle.jsx +209 -0
- package/src/Viewer/renderers/answer.jsx +206 -0
- package/src/Viewer/renderers/asList.jsx +25 -0
- package/src/Viewer/renderers/blockQuote.jsx +41 -0
- package/src/Viewer/renderers/boolean.jsx +17 -0
- package/src/Viewer/renderers/booleanInput.css +105 -0
- package/src/Viewer/renderers/booleanInput.jsx +636 -0
- package/src/Viewer/renderers/button.jsx +369 -0
- package/src/Viewer/renderers/c.jsx +17 -0
- package/src/Viewer/renderers/callAction.jsx +18 -0
- package/src/Viewer/renderers/cell.jsx +59 -0
- package/src/Viewer/renderers/chart.jsx +83 -0
- package/src/Viewer/renderers/choiceInput.css +223 -0
- package/src/Viewer/renderers/choiceInput.jsx +535 -0
- package/src/Viewer/renderers/circle.jsx +990 -0
- package/src/Viewer/renderers/cobwebPolyline.jsx +442 -0
- package/src/Viewer/renderers/codeEditor.jsx +248 -0
- package/src/Viewer/renderers/codeViewer.jsx +105 -0
- package/src/Viewer/renderers/containerBlock.jsx +41 -0
- package/src/Viewer/renderers/containerInline.jsx +17 -0
- package/src/Viewer/renderers/contentBrowser.jsx +159 -0
- package/src/Viewer/renderers/contentPicker.jsx +160 -0
- package/src/Viewer/renderers/curve.jsx +1072 -0
- package/src/Viewer/renderers/ellipsis.jsx +17 -0
- package/src/Viewer/renderers/em.jsx +17 -0
- package/src/Viewer/renderers/embed.jsx +110 -0
- package/src/Viewer/renderers/feedback.jsx +74 -0
- package/src/Viewer/renderers/figure.jsx +131 -0
- package/src/Viewer/renderers/footnote.jsx +52 -0
- package/src/Viewer/renderers/graph.jsx +925 -0
- package/src/Viewer/renderers/hint.jsx +142 -0
- package/src/Viewer/renderers/image.jsx +581 -0
- package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs +2 -0
- package/src/Viewer/renderers/jsxgraph-distrib/jsxgraphcore.mjs.map +1 -0
- package/src/Viewer/renderers/label.jsx +470 -0
- package/src/Viewer/renderers/legend.jsx +306 -0
- package/src/Viewer/renderers/line.jsx +511 -0
- package/src/Viewer/renderers/lineSegment.jsx +754 -0
- package/src/Viewer/renderers/list.jsx +111 -0
- package/src/Viewer/renderers/lq.jsx +12 -0
- package/src/Viewer/renderers/lsq.jsx +12 -0
- package/src/Viewer/renderers/math.jsx +582 -0
- package/src/Viewer/renderers/mathInput.css +10 -0
- package/src/Viewer/renderers/mathInput.jsx +425 -0
- package/src/Viewer/renderers/mathInputog.jsx +534 -0
- package/src/Viewer/renderers/mathList.jsx +39 -0
- package/src/Viewer/renderers/matrixInput.jsx +317 -0
- package/src/Viewer/renderers/mdash.jsx +12 -0
- package/src/Viewer/renderers/nbsp.jsx +12 -0
- package/src/Viewer/renderers/ndash.jsx +12 -0
- package/src/Viewer/renderers/number.jsx +454 -0
- package/src/Viewer/renderers/numberList.jsx +35 -0
- package/src/Viewer/renderers/orbitalDiagram.jsx +247 -0
- package/src/Viewer/renderers/orbitalDiagramInput.jsx +450 -0
- package/src/Viewer/renderers/p.jsx +38 -0
- package/src/Viewer/renderers/paginatorControls.jsx +41 -0
- package/src/Viewer/renderers/pegboard.jsx +239 -0
- package/src/Viewer/renderers/point.jsx +649 -0
- package/src/Viewer/renderers/polygon.jsx +612 -0
- package/src/Viewer/renderers/polyline.jsx +608 -0
- package/src/Viewer/renderers/pre.jsx +34 -0
- package/src/Viewer/renderers/q.jsx +17 -0
- package/src/Viewer/renderers/ray.jsx +410 -0
- package/src/Viewer/renderers/ref.jsx +149 -0
- package/src/Viewer/renderers/regionBetweenCurveXAxis.jsx +182 -0
- package/src/Viewer/renderers/renderDoenetML.jsx +56 -0
- package/src/Viewer/renderers/row.jsx +31 -0
- package/src/Viewer/renderers/rq.jsx +12 -0
- package/src/Viewer/renderers/rsq.jsx +12 -0
- package/src/Viewer/renderers/section.jsx +427 -0
- package/src/Viewer/renderers/sideBySide.jsx +80 -0
- package/src/Viewer/renderers/slider.jsx +800 -0
- package/src/Viewer/renderers/solution.jsx +134 -0
- package/src/Viewer/renderers/spreadsheet.jsx +83 -0
- package/src/Viewer/renderers/sq.jsx +17 -0
- package/src/Viewer/renderers/styles/global.css +14 -0
- package/src/Viewer/renderers/subsetOfRealsInput.jsx +392 -0
- package/src/Viewer/renderers/summaryStatistics.jsx +83 -0
- package/src/Viewer/renderers/table.jsx +78 -0
- package/src/Viewer/renderers/tabular.jsx +58 -0
- package/src/Viewer/renderers/tag.jsx +26 -0
- package/src/Viewer/renderers/text.jsx +439 -0
- package/src/Viewer/renderers/textInput.jsx +774 -0
- package/src/Viewer/renderers/textList.jsx +30 -0
- package/src/Viewer/renderers/triggerSet.jsx +52 -0
- package/src/Viewer/renderers/updateValue.jsx +30 -0
- package/src/Viewer/renderers/utils/css.js +13 -0
- package/src/Viewer/renderers/utils/graph.js +159 -0
- package/src/Viewer/renderers/utils/offGraphIndicators.js +91 -0
- package/src/Viewer/renderers/vector.jsx +678 -0
- package/src/Viewer/renderers/video.jsx +494 -0
- package/src/Viewer/useDoenetRenderer.jsx +128 -0
- package/src/main.jsx +16 -0
- package/src/media/fonts/files/open-sans-v18-latin-700.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-700italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light-italic.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-light.woff2 +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-regular.woff +0 -0
- package/src/media/fonts/files/open-sans-v18-latin-regular.woff2 +0 -0
- package/src/test/testCode.doenet +26 -0
- package/src/test/testViewer.jsx +158 -0
- package/src/uiComponents/ActionButton.jsx +157 -0
- package/src/uiComponents/ActionButtonGroup.jsx +93 -0
- package/src/uiComponents/Button.jsx +160 -0
- package/src/uiComponents/ButtonGroup.jsx +56 -0
- package/src/uiComponents/ToggleButton.jsx +194 -0
- package/src/uiComponents/ToggleButtonGroup.jsx +77 -0
- package/src/utils/activityUtils.js +713 -0
- package/src/utils/array.js +17 -0
- package/src/utils/cid.js +34 -0
- package/src/utils/componentInfoObjects.js +89 -0
- package/src/utils/deepFunctions.js +165 -0
- package/src/utils/enumeration.js +226 -0
- package/src/utils/math.js +624 -0
- package/src/utils/naming.js +44 -0
- package/src/utils/retrieveTextFile.js +156 -0
- package/src/utils/returnAllPossibleVariants.js +81 -0
- package/src/utils/sequence.js +715 -0
- package/src/utils/serialize.js +29 -0
- package/src/utils/serializedStateProcessing.js +2587 -0
- package/src/utils/subset-of-reals.js +783 -0
- package/src/utils/url.js +19 -0
- package/vite.config.js +14 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Atom } from "./Atom";
|
|
2
|
+
export { default as Ion } from "./Ion";
|
|
3
|
+
export { default as IonicCompound } from "./IonicCompound";
|
|
4
|
+
export { default as ElectronConfiguration } from "./ElectronConfiguration";
|
|
5
|
+
export { default as OrbitalDiagram } from "./OrbitalDiagram";
|
|
6
|
+
export { default as OrbitalDiagramInput } from "./OrbitalDiagramInput";
|
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
export function breakStringsAndOthersIntoComponentsByStringCommas(e) {
|
|
2
|
+
return null;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
// function: returnBreakStringsSugarFunction
|
|
6
|
+
//
|
|
7
|
+
// returns a sugar replacement function that
|
|
8
|
+
// - expects string and other children,
|
|
9
|
+
// - breaks the children by commas in strings not enclosed in parenthesis,
|
|
10
|
+
// (optionally stripping off outer most parentheses first)
|
|
11
|
+
// - returns an array of components created by mapping the childrenToComponentFunction
|
|
12
|
+
// function onto each of the pieces
|
|
13
|
+
// - other children are not examined or altered, so they could be anything
|
|
14
|
+
//
|
|
15
|
+
// For example, to take the dependency "stringAndMathChildren"
|
|
16
|
+
// and create points with coordinates determined by the pieces
|
|
17
|
+
// one could use the sugar replacement function
|
|
18
|
+
// let childrenToComponentFunction = x => ({
|
|
19
|
+
// componentType: "point", children: [{
|
|
20
|
+
// componentType: "coords", children: x}]
|
|
21
|
+
// })
|
|
22
|
+
// returnBreakStringsSugarFunction({
|
|
23
|
+
// childrenToComponentFunction,
|
|
24
|
+
// dependencyNameWithChildren: "stringAndMathChildren"
|
|
25
|
+
// })
|
|
26
|
+
|
|
27
|
+
export function returnBreakStringsSugarFunction({
|
|
28
|
+
childrenToComponentFunction,
|
|
29
|
+
mustStripOffOuterParentheses = false,
|
|
30
|
+
}) {
|
|
31
|
+
return function ({ matchedChildren }) {
|
|
32
|
+
let Nparens = 0;
|
|
33
|
+
let pieces = [];
|
|
34
|
+
let currentPiece = [];
|
|
35
|
+
let strippedParens = false;
|
|
36
|
+
|
|
37
|
+
let numChildren = matchedChildren.length;
|
|
38
|
+
|
|
39
|
+
if (mustStripOffOuterParentheses) {
|
|
40
|
+
let firstComponent = matchedChildren[0];
|
|
41
|
+
if (
|
|
42
|
+
typeof firstComponent !== "string" ||
|
|
43
|
+
firstComponent.trimLeft()[0] !== "("
|
|
44
|
+
) {
|
|
45
|
+
return { success: false };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
for (let [compInd, component] of matchedChildren.entries()) {
|
|
50
|
+
if (typeof component !== "string") {
|
|
51
|
+
currentPiece.push(component);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let s = component.trim();
|
|
56
|
+
|
|
57
|
+
if (compInd === 0 && mustStripOffOuterParentheses && s[0] === "(") {
|
|
58
|
+
// found beginning paren, now check if there is an ending parens
|
|
59
|
+
let lastChild = matchedChildren[numChildren - 1];
|
|
60
|
+
if (typeof lastChild === "string") {
|
|
61
|
+
let sLast = lastChild.trimRight();
|
|
62
|
+
if (sLast[sLast.length - 1] === ")") {
|
|
63
|
+
// found ending paren, so we'll strip off first paren
|
|
64
|
+
strippedParens = true;
|
|
65
|
+
s = s.substring(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let beginInd = 0;
|
|
71
|
+
|
|
72
|
+
for (let ind = 0; ind < s.length; ind++) {
|
|
73
|
+
let char = s[ind];
|
|
74
|
+
if (char === "(") {
|
|
75
|
+
Nparens++;
|
|
76
|
+
}
|
|
77
|
+
if (char === ")") {
|
|
78
|
+
if (Nparens === 0) {
|
|
79
|
+
// parens didn't match
|
|
80
|
+
|
|
81
|
+
// check if stripped off initial paren and we're at the end
|
|
82
|
+
if (
|
|
83
|
+
strippedParens &&
|
|
84
|
+
compInd === numChildren - 1 &&
|
|
85
|
+
ind === s.length - 1
|
|
86
|
+
) {
|
|
87
|
+
// strip off last parens
|
|
88
|
+
s = s.substring(0, s.length - 1);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
// return failure due to non-matching parens
|
|
92
|
+
return { success: false };
|
|
93
|
+
}
|
|
94
|
+
Nparens--;
|
|
95
|
+
}
|
|
96
|
+
if (char === "," && Nparens === 0) {
|
|
97
|
+
if (ind > beginInd) {
|
|
98
|
+
currentPiece.push(s.substring(beginInd, ind));
|
|
99
|
+
}
|
|
100
|
+
pieces.push(currentPiece);
|
|
101
|
+
currentPiece = [];
|
|
102
|
+
beginInd = ind + 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (s.length > beginInd) {
|
|
107
|
+
currentPiece.push(s.substring(beginInd, s.length));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// parens didn't match, so return failure
|
|
112
|
+
if (Nparens !== 0) {
|
|
113
|
+
return { success: false };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
pieces.push(currentPiece);
|
|
117
|
+
|
|
118
|
+
let newChildren = pieces.map(childrenToComponentFunction);
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
success: true,
|
|
122
|
+
newChildren: newChildren,
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// function: breakEmbeddedStringByCommas
|
|
128
|
+
//
|
|
129
|
+
// Utility function that can be used at the beginning of a sugar replacement function.
|
|
130
|
+
// It breaks children by commas not enclosed in parentheses.
|
|
131
|
+
// Remaining components are kept embedded in the pieces
|
|
132
|
+
|
|
133
|
+
// Returns
|
|
134
|
+
// - success: true if successed to break pieces
|
|
135
|
+
// - pieces: array of pieces that were broken apart by commas
|
|
136
|
+
// Each piece is an array of components.
|
|
137
|
+
|
|
138
|
+
export function breakEmbeddedStringByCommas({ childrenList }) {
|
|
139
|
+
let Nparens = 0;
|
|
140
|
+
let pieces = [];
|
|
141
|
+
let currentPiece = [];
|
|
142
|
+
|
|
143
|
+
for (let component of childrenList) {
|
|
144
|
+
if (typeof component !== "string") {
|
|
145
|
+
currentPiece.push(component);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
let s = component.trim();
|
|
150
|
+
let beginInd = 0;
|
|
151
|
+
|
|
152
|
+
for (let ind = 0; ind < s.length; ind++) {
|
|
153
|
+
let char = s[ind];
|
|
154
|
+
if (char === "(") {
|
|
155
|
+
Nparens++;
|
|
156
|
+
}
|
|
157
|
+
if (char === ")") {
|
|
158
|
+
if (Nparens === 0) {
|
|
159
|
+
// parens didn't match, so return failure
|
|
160
|
+
return { success: false };
|
|
161
|
+
}
|
|
162
|
+
Nparens--;
|
|
163
|
+
}
|
|
164
|
+
if (char === "," && Nparens === 0) {
|
|
165
|
+
if (ind > beginInd) {
|
|
166
|
+
let newString = s.substring(beginInd, ind).trim();
|
|
167
|
+
currentPiece.push(newString);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
pieces.push(currentPiece);
|
|
171
|
+
currentPiece = [];
|
|
172
|
+
beginInd = ind + 1;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (s.length > beginInd) {
|
|
177
|
+
let newString = s.substring(beginInd, s.length).trim();
|
|
178
|
+
currentPiece.push(newString);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// parens didn't match, so return failure
|
|
183
|
+
if (Nparens !== 0) {
|
|
184
|
+
return { success: false };
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
pieces.push(currentPiece);
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
success: true,
|
|
191
|
+
pieces: pieces,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function breakEmbeddedStringsIntoParensPieces({
|
|
196
|
+
componentList,
|
|
197
|
+
removeParens = false,
|
|
198
|
+
}) {
|
|
199
|
+
let Nparens = 0;
|
|
200
|
+
let pieces = [];
|
|
201
|
+
let currentPiece = [];
|
|
202
|
+
|
|
203
|
+
for (let component of componentList) {
|
|
204
|
+
if (typeof component !== "string") {
|
|
205
|
+
if (Nparens === 0) {
|
|
206
|
+
// if not in a parenthesis, just add as a separate piece
|
|
207
|
+
pieces.push([component]);
|
|
208
|
+
} else {
|
|
209
|
+
currentPiece.push(component);
|
|
210
|
+
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
let s = component;
|
|
215
|
+
|
|
216
|
+
let beginInd = 0;
|
|
217
|
+
|
|
218
|
+
for (let ind = 0; ind < s.length; ind++) {
|
|
219
|
+
let char = s[ind];
|
|
220
|
+
|
|
221
|
+
if (char === "(") {
|
|
222
|
+
if (Nparens === 0 && removeParens) {
|
|
223
|
+
beginInd = ind + 1;
|
|
224
|
+
}
|
|
225
|
+
Nparens++;
|
|
226
|
+
} else if (char === ")") {
|
|
227
|
+
if (Nparens === 0) {
|
|
228
|
+
// parens didn't match, so return failure
|
|
229
|
+
return { success: false };
|
|
230
|
+
}
|
|
231
|
+
if (Nparens === 1) {
|
|
232
|
+
// found end of piece in parens
|
|
233
|
+
if (ind + 1 > beginInd) {
|
|
234
|
+
let lastInd = removeParens ? ind : ind + 1;
|
|
235
|
+
let newString = s.substring(beginInd, lastInd);
|
|
236
|
+
if (newString.length > 0) {
|
|
237
|
+
currentPiece.push(newString);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
pieces.push(currentPiece);
|
|
242
|
+
currentPiece = [];
|
|
243
|
+
beginInd = ind + 1;
|
|
244
|
+
}
|
|
245
|
+
Nparens--;
|
|
246
|
+
} else if (Nparens === 0 && !char.match(/\s/)) {
|
|
247
|
+
// starting a new piece
|
|
248
|
+
// each piece must begin with parens
|
|
249
|
+
return { success: false };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (s.length > beginInd) {
|
|
254
|
+
let newString = s.substring(beginInd, s.length);
|
|
255
|
+
currentPiece.push(newString);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// parens didn't match, so return failure
|
|
260
|
+
if (Nparens !== 0) {
|
|
261
|
+
return { success: false };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (currentPiece.length > 0) {
|
|
265
|
+
pieces.push(currentPiece);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
success: true,
|
|
270
|
+
pieces: pieces,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export function breakIntoPiecesBySpacesOutsideParens({ componentList }) {
|
|
275
|
+
let Nparens = 0;
|
|
276
|
+
let pieces = [];
|
|
277
|
+
let currentPiece = [];
|
|
278
|
+
|
|
279
|
+
for (let component of componentList) {
|
|
280
|
+
if (typeof component !== "string") {
|
|
281
|
+
currentPiece.push(component);
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
let s = component;
|
|
286
|
+
|
|
287
|
+
let beginInd = 0;
|
|
288
|
+
|
|
289
|
+
for (let ind = 0; ind < s.length; ind++) {
|
|
290
|
+
let char = s[ind];
|
|
291
|
+
|
|
292
|
+
if (char === "(") {
|
|
293
|
+
Nparens++;
|
|
294
|
+
} else if (char === ")") {
|
|
295
|
+
if (Nparens === 0) {
|
|
296
|
+
// parens didn't match, so return failure
|
|
297
|
+
return { success: false };
|
|
298
|
+
}
|
|
299
|
+
Nparens--;
|
|
300
|
+
} else if (Nparens === 0 && char.match(/\s/)) {
|
|
301
|
+
// found a space outside parens
|
|
302
|
+
|
|
303
|
+
if (ind > beginInd) {
|
|
304
|
+
currentPiece.push(s.substring(beginInd, ind));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (currentPiece.length > 0) {
|
|
308
|
+
pieces.push(currentPiece);
|
|
309
|
+
currentPiece = [];
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
beginInd = ind + 1;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (s.length > beginInd) {
|
|
317
|
+
let newString = s.substring(beginInd, s.length).trim();
|
|
318
|
+
currentPiece.push(newString);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// parens didn't match, so return failure
|
|
323
|
+
if (Nparens !== 0) {
|
|
324
|
+
return { success: false };
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (currentPiece.length > 0) {
|
|
328
|
+
pieces.push(currentPiece);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return {
|
|
332
|
+
success: true,
|
|
333
|
+
pieces,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// function: breakIntoVectorComponents
|
|
338
|
+
//
|
|
339
|
+
// Utility function that attempts to break an array of components (compList) into components of a vector
|
|
340
|
+
// To be considered a vector, compList must
|
|
341
|
+
// -start with a string beginning with (
|
|
342
|
+
// -end with a string ending with )
|
|
343
|
+
// Moreover, once those parens are removed, the remainder must be able to be broken by commas not in parens
|
|
344
|
+
// (If not, then either compList didn't obey math rules of paren or the parens removed didn't match each other
|
|
345
|
+
//
|
|
346
|
+
// Returns:
|
|
347
|
+
// - foundVector: true if succeded
|
|
348
|
+
// - vectorComponents: array whose components are arrays representing the vector components
|
|
349
|
+
|
|
350
|
+
export function breakIntoVectorComponents(compList) {
|
|
351
|
+
if (compList.length === 0) {
|
|
352
|
+
return { foundVector: false };
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (typeof compList[0] !== "string") {
|
|
356
|
+
return { foundVector: false };
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
let sFirst = compList[0];
|
|
360
|
+
let charFirst = sFirst.trim()[0];
|
|
361
|
+
if (charFirst !== "(") {
|
|
362
|
+
return { foundVector: false };
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if (typeof compList[compList.length - 1] !== "string") {
|
|
366
|
+
return { foundVector: false };
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
let sLast = compList[compList.length - 1];
|
|
370
|
+
let charLast = sLast.trim().slice(-1);
|
|
371
|
+
if (charLast !== ")") {
|
|
372
|
+
return { foundVector: false };
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
let newCompList = [];
|
|
376
|
+
if (compList.length === 1) {
|
|
377
|
+
let snew = sFirst.trim().slice(1, -1).trim();
|
|
378
|
+
if (snew.length > 0) {
|
|
379
|
+
newCompList.push(snew);
|
|
380
|
+
}
|
|
381
|
+
} else {
|
|
382
|
+
let snew = sFirst.trim().slice(1).trim();
|
|
383
|
+
if (snew.length > 0) {
|
|
384
|
+
newCompList.push(snew);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
newCompList.push(...compList.slice(1, -1));
|
|
388
|
+
|
|
389
|
+
snew = sLast.trim().slice(0, -1).trim();
|
|
390
|
+
if (snew.length > 0) {
|
|
391
|
+
newCompList.push(snew);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
let Nparens = 0;
|
|
395
|
+
let pieces = [];
|
|
396
|
+
let currentPiece = [];
|
|
397
|
+
|
|
398
|
+
for (let comp of newCompList) {
|
|
399
|
+
if (typeof comp !== "string") {
|
|
400
|
+
currentPiece.push(comp);
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
let s = comp.trim();
|
|
405
|
+
|
|
406
|
+
let beginInd = 0;
|
|
407
|
+
let brokeString = false;
|
|
408
|
+
|
|
409
|
+
for (let ind = 0; ind < s.length; ind++) {
|
|
410
|
+
let char = s[ind];
|
|
411
|
+
if (char === "(") {
|
|
412
|
+
Nparens++;
|
|
413
|
+
}
|
|
414
|
+
if (char === ")") {
|
|
415
|
+
if (Nparens === 0) {
|
|
416
|
+
// parens didn't match, so it wasn't a vector
|
|
417
|
+
return { foundVector: false };
|
|
418
|
+
}
|
|
419
|
+
Nparens--;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if (char === "," && Nparens === 0) {
|
|
423
|
+
if (ind > beginInd) {
|
|
424
|
+
let snew = s.substring(beginInd, ind).trim();
|
|
425
|
+
currentPiece.push(snew);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
pieces.push(currentPiece);
|
|
429
|
+
currentPiece = [];
|
|
430
|
+
beginInd = ind + 1;
|
|
431
|
+
brokeString = true;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (brokeString) {
|
|
436
|
+
if (s.length > beginInd) {
|
|
437
|
+
let snew = s.substring(beginInd, s.length).trim();
|
|
438
|
+
currentPiece.push(snew);
|
|
439
|
+
}
|
|
440
|
+
} else {
|
|
441
|
+
currentPiece.push(comp);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// parens didn't match, so it wasn't a vector
|
|
446
|
+
if (Nparens !== 0) {
|
|
447
|
+
return { foundVector: false };
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
pieces.push(currentPiece);
|
|
451
|
+
|
|
452
|
+
return {
|
|
453
|
+
foundVector: true,
|
|
454
|
+
vectorComponents: pieces,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// function: breakPiecesByEquals
|
|
459
|
+
//
|
|
460
|
+
// We break each piece into lhs and rhs separated by an equal sign.
|
|
461
|
+
// If no piece contains an equal sign, then rhs's will be empty
|
|
462
|
+
// If some pieces contain an equal sign but not others, return failure
|
|
463
|
+
// If a pieced contains two equal signs, return failure
|
|
464
|
+
//
|
|
465
|
+
// If parseVectorEquality is true and there is a single piece
|
|
466
|
+
// with an equal sign, then attempt to parse both lhs and rhs as vectors.
|
|
467
|
+
// If both are vectors of the same size, put the components individually
|
|
468
|
+
// into lhs and rhs pieces (i.e., treat the same as if had separate pieces
|
|
469
|
+
// with an equal sign for each component)
|
|
470
|
+
// If one side but not the other is a vector or if they have different sizes,
|
|
471
|
+
// then return failure
|
|
472
|
+
// If neither side is a vector, keep lhs and rhs as they were
|
|
473
|
+
//
|
|
474
|
+
// Returns:
|
|
475
|
+
// - success: true if didn't run into troubles described above
|
|
476
|
+
// - lhsByPiece: array of lhs of each piece
|
|
477
|
+
// - rhsByPiece: array of rhs of each piece
|
|
478
|
+
// - toDelete: strings that were broken apart and hence must be deleted
|
|
479
|
+
//
|
|
480
|
+
// Note: all punctuation (equal sign as well as comma and parens for vectors)
|
|
481
|
+
// are recognized only inside strings
|
|
482
|
+
//
|
|
483
|
+
// Note 2: we assume pieces have already been processed by breakEmbeddedStringByCommas
|
|
484
|
+
// so that strings can be idenified by the _string property
|
|
485
|
+
|
|
486
|
+
// TODO: this no longer works, as we don't add _string property,
|
|
487
|
+
// but this code isn't currently being called anywhere
|
|
488
|
+
|
|
489
|
+
// export function breakPiecesByEquals(pieces, parseVectorEquality = false) {
|
|
490
|
+
|
|
491
|
+
// let lhsByPiece = [];
|
|
492
|
+
// let rhsByPiece = [];
|
|
493
|
+
// let toDelete = [];
|
|
494
|
+
|
|
495
|
+
// let foundEqualSignInAPiece;
|
|
496
|
+
// let re_equal = /^([^=]*)(=([^=]*))?$/;
|
|
497
|
+
|
|
498
|
+
// for (let ind = 0; ind < pieces.length; ind++) {
|
|
499
|
+
// let piece = pieces[ind];
|
|
500
|
+
|
|
501
|
+
// let lhs = [];
|
|
502
|
+
// let rhs = [];
|
|
503
|
+
// let foundEqualSign = false;
|
|
504
|
+
// for (let comp of piece) {
|
|
505
|
+
|
|
506
|
+
// let s = comp._string;
|
|
507
|
+
// if (s === undefined) {
|
|
508
|
+
// if (foundEqualSign) {
|
|
509
|
+
// rhs.push(comp);
|
|
510
|
+
// } else {
|
|
511
|
+
// lhs.push(comp);
|
|
512
|
+
// }
|
|
513
|
+
// continue;
|
|
514
|
+
// }
|
|
515
|
+
|
|
516
|
+
// // we have a string s
|
|
517
|
+
// let result = s.match(re_equal);
|
|
518
|
+
// if (result === null) {
|
|
519
|
+
// // found more than one = sign in the single string
|
|
520
|
+
// return { success: false };
|
|
521
|
+
// }
|
|
522
|
+
// if (result[2] === undefined) {
|
|
523
|
+
// // no equal sign, so just add to lhs or rhs
|
|
524
|
+
// if (foundEqualSign) {
|
|
525
|
+
// rhs.push(comp);
|
|
526
|
+
// } else {
|
|
527
|
+
// lhs.push(comp);
|
|
528
|
+
// }
|
|
529
|
+
// } else {
|
|
530
|
+
|
|
531
|
+
// // found one equal sign
|
|
532
|
+
// if (foundEqualSign) {
|
|
533
|
+
// // found second equal sign
|
|
534
|
+
// return { success: false };
|
|
535
|
+
// }
|
|
536
|
+
// foundEqualSign = true;
|
|
537
|
+
// let l = result[1];
|
|
538
|
+
// let r = result[3];
|
|
539
|
+
// if (l.length > 0) {
|
|
540
|
+
// lhs.push({
|
|
541
|
+
// componentType: "string",
|
|
542
|
+
// state: { value: l },
|
|
543
|
+
// _string: l,
|
|
544
|
+
// })
|
|
545
|
+
// }
|
|
546
|
+
// if (r.length > 0) {
|
|
547
|
+
// rhs.push({
|
|
548
|
+
// componentType: "string",
|
|
549
|
+
// state: { value: r },
|
|
550
|
+
// _string: r,
|
|
551
|
+
// })
|
|
552
|
+
// }
|
|
553
|
+
// if (comp.createdComponent === true) {
|
|
554
|
+
// // broke up an original string
|
|
555
|
+
// // need to make original string as to be deleted
|
|
556
|
+
// toDelete.push(comp.componentName);
|
|
557
|
+
// }
|
|
558
|
+
// }
|
|
559
|
+
// }
|
|
560
|
+
|
|
561
|
+
// if (ind === 0) {
|
|
562
|
+
// foundEqualSignInAPiece = foundEqualSign;
|
|
563
|
+
// } else {
|
|
564
|
+
// if (foundEqualSign !== foundEqualSignInAPiece) {
|
|
565
|
+
// // inconsistent pieces, some with and without equal signs
|
|
566
|
+
// // sugar fails
|
|
567
|
+
// return { success: false };
|
|
568
|
+
// }
|
|
569
|
+
// }
|
|
570
|
+
|
|
571
|
+
// if (foundEqualSign) {
|
|
572
|
+
|
|
573
|
+
// if (pieces.length === 1 && parseVectorEquality) {
|
|
574
|
+
// // check if lhs and rhs are vectors
|
|
575
|
+
// let lhsResult = breakIntoVectorComponents(lhs);
|
|
576
|
+
// if (lhsResult.foundVector === true) {
|
|
577
|
+
// let rhsResult = breakIntoVectorComponents(rhs);
|
|
578
|
+
// if (rhsResult.foundVector !== true) {
|
|
579
|
+
// // on side is vector, the other isn't
|
|
580
|
+
// return { success: false }
|
|
581
|
+
// }
|
|
582
|
+
// if (lhsResult.vectorComponents.length !== rhsResult.vectorComponents.length) {
|
|
583
|
+
// // have different vector lengths
|
|
584
|
+
// return { success: false }
|
|
585
|
+
// }
|
|
586
|
+
|
|
587
|
+
// // found two vectors of the same length
|
|
588
|
+
// // should treat the same as separate equalities
|
|
589
|
+
// for (let i = 0; i < lhsResult.vectorComponents.length; i++) {
|
|
590
|
+
// lhsByPiece.push(lhsResult.vectorComponents[i]);
|
|
591
|
+
// rhsByPiece.push(rhsResult.vectorComponents[i]);
|
|
592
|
+
// }
|
|
593
|
+
// // add any more strings to delete
|
|
594
|
+
// toDelete = [...toDelete, ...lhsResult.toDelete, ...rhsResult.toDelete]
|
|
595
|
+
|
|
596
|
+
// return {
|
|
597
|
+
// success: true,
|
|
598
|
+
// lhsByPiece: lhsByPiece,
|
|
599
|
+
// rhsByPiece: rhsByPiece,
|
|
600
|
+
// toDelete: toDelete,
|
|
601
|
+
// }
|
|
602
|
+
|
|
603
|
+
// } else {
|
|
604
|
+
// // didn't find vector in lhs
|
|
605
|
+
// // just make sure isn't a vector in rhs
|
|
606
|
+
// let rhsResult = breakIntoVectorComponents(rhs, true);
|
|
607
|
+
// if (rhsResult.success === true) {
|
|
608
|
+
// return { success: false };
|
|
609
|
+
// }
|
|
610
|
+
// }
|
|
611
|
+
// }
|
|
612
|
+
// lhsByPiece.push(lhs);
|
|
613
|
+
// rhsByPiece.push(rhs);
|
|
614
|
+
// } else {
|
|
615
|
+
// // no equal sign, so we just have lhs
|
|
616
|
+
// lhsByPiece.push(lhs);
|
|
617
|
+
// }
|
|
618
|
+
// }
|
|
619
|
+
|
|
620
|
+
// return {
|
|
621
|
+
// success: true,
|
|
622
|
+
// lhsByPiece: lhsByPiece,
|
|
623
|
+
// rhsByPiece: rhsByPiece,
|
|
624
|
+
// toDelete: toDelete,
|
|
625
|
+
|
|
626
|
+
// }
|
|
627
|
+
// }
|