Browse Source

update

main
wangshaoping 10 months ago
parent
commit
61987ff527
  1. 2
      app.platform/build.gradle
  2. 2
      app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties
  3. 99
      app.platform/src/main/resources/mathml3/mathml3-common.xsd
  4. 684
      app.platform/src/main/resources/mathml3/mathml3-content.xsd
  5. 2151
      app.platform/src/main/resources/mathml3/mathml3-presentation.xsd
  6. 186
      app.platform/src/main/resources/mathml3/mathml3-strict-content.xsd
  7. 9
      app.platform/src/main/resources/mathml3/mathml3.xsd
  8. 2
      erm.frontend/package.json
  9. 29
      erm.frontend/util-components-generator.cjs
  10. 2
      gradle.properties
  11. 2
      io.sc.engine.mv.frontend/package.json
  12. 29
      io.sc.engine.mv.frontend/util-components-generator.cjs
  13. 2
      io.sc.engine.rule.frontend/package.json
  14. 29
      io.sc.engine.rule.frontend/util-components-generator.cjs
  15. 2
      io.sc.engine.st.frontend/package.json
  16. 6
      io.sc.engine.st.frontend/src/i18n/messages.json
  17. 6
      io.sc.engine.st.frontend/src/i18n/messages_tw_CN.json
  18. 6
      io.sc.engine.st.frontend/src/i18n/messages_zh_CN.json
  19. 12
      io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactor.vue
  20. 64
      io.sc.engine.st.frontend/src/views/Scenario/PercentDialog.vue
  21. 102
      io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactor.vue
  22. 29
      io.sc.engine.st.frontend/util-components-generator.cjs
  23. 2
      io.sc.engine.st/src/main/java/io/sc/engine/st/controller/IndepFactorWebController.java
  24. 2
      io.sc.engine.st/src/main/java/io/sc/engine/st/service/IndepFactorService.java
  25. 60
      io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/IndepFactorServiceImpl.java
  26. 53
      io.sc.engine.st/src/main/java/io/sc/engine/st/support/PercentWrapper.java
  27. 33
      io.sc.platform.core.frontend/public/index.html
  28. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2
  29. 40
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Asana/mathfonts.css
  30. 56
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css
  31. 51
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css
  32. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2
  33. 21
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css
  34. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2
  35. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2
  36. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2
  37. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2
  38. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2
  39. 50
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css
  40. 47
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css
  41. 47
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css
  42. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2
  43. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2
  44. 35
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css
  45. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2
  46. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2
  47. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2
  48. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2
  49. 53
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css
  50. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2
  51. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2
  52. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2
  53. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2
  54. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2
  55. 61
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css
  56. 58
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css
  57. 37
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css
  58. 34
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css
  59. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2
  60. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2
  61. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2
  62. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2
  63. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2
  64. 69
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css
  65. 62
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css
  66. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2
  67. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2
  68. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2
  69. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2
  70. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2
  71. 63
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css
  72. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2
  73. 61
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css
  74. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2
  75. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2
  76. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2
  77. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2
  78. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2
  79. 60
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css
  80. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2
  81. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2
  82. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2
  83. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2
  84. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2
  85. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2
  86. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2
  87. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2
  88. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2
  89. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2
  90. BIN
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2
  91. 69
      io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css
  92. 2
      io.sc.platform.core.frontend/src/components/index.ts
  93. 2
      io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json
  94. 8
      io.sc.platform.core.frontend/src/platform/components/echarts/WEcharts.vue
  95. 188
      io.sc.platform.core.frontend/src/platform/components/expression/WExpression.vue
  96. 33
      io.sc.platform.core.frontend/src/platform/components/expression/dialog/XmlDialog.vue
  97. 66
      io.sc.platform.core.frontend/src/platform/components/expression/editor/Editor.vue
  98. 139
      io.sc.platform.core.frontend/src/platform/components/expression/toolbar/Toolbar.vue
  99. 10
      io.sc.platform.core.frontend/src/platform/components/expression/toolbar/actions/Redo.vue
  100. 10
      io.sc.platform.core.frontend/src/platform/components/expression/toolbar/actions/Undo.vue

2
app.platform/build.gradle

@ -31,7 +31,7 @@ dependencies {
project(":erm"),
project(":erm.frontend"),
// project(":io.sc.platform.scheduler.manager"),
project(":io.sc.platform.scheduler.manager"),
)
}

2
app.platform/src/main/resources/app/platform/i18n/messages_zh_CN.properties

@ -1,3 +1,3 @@
application.title=\u98CE\u9669\u7BA1\u7406\u5E73\u53F0
application.title=\u5B87\u4FE1\u79D1\u6280-\u98CE\u9669\u7BA1\u7406\u5E73\u53F0
application.version=$version
application.copyright=Copyright \u00A9 2019\u20132022

99
app.platform/src/main/resources/mathml3/mathml3-common.xsd

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://www.w3.org/1998/Math/MathML"
elementFormDefault="qualified"
targetNamespace="http://www.w3.org/1998/Math/MathML">
<xs:element name="math">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:MathExpression"/>
<xs:attributeGroup ref="m:math.attributes"/>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="CommonDeprecatedAtt">
<xs:attribute name="other"/>
</xs:attributeGroup>
<xs:attributeGroup name="CommonAtt">
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="xref"/>
<xs:attribute name="class" type="xs:NMTOKENS"/>
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="href" type="xs:anyURI"/>
<xs:attributeGroup ref="m:CommonDeprecatedAtt"/>
<xs:anyAttribute namespace="##other" processContents="skip"/>
</xs:attributeGroup>
<xs:attributeGroup name="math.deprecatedattributes">
<xs:attribute name="mode" type="xs:string"/>
<xs:attribute name="macros" type="xs:string"/>
</xs:attributeGroup>
<xs:attributeGroup name="name">
<xs:attribute name="name" use="required" type="xs:NCName"/>
</xs:attributeGroup>
<xs:attributeGroup name="cd">
<xs:attribute name="cd" use="required" type="xs:NCName"/>
</xs:attributeGroup>
<xs:attributeGroup name="src">
<xs:attribute name="src" type="xs:anyURI"/>
</xs:attributeGroup>
<xs:element name="annotation">
<xs:complexType mixed="true">
<xs:attributeGroup ref="m:annotation.attributes"/>
</xs:complexType>
</xs:element>
<xs:complexType name="annotation-xml.model"><!--content model altered for libxml (annotation-xml)--><xs:sequence>
<xs:any processContents="lax"/>
</xs:sequence>
</xs:complexType>
<xs:group name="anyElement">
<xs:choice>
<xs:any namespace="##other" processContents="skip"/>
<xs:any namespace="##local" processContents="skip"/>
</xs:choice>
</xs:group>
<xs:element name="annotation-xml">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:annotation-xml.model">
<xs:attributeGroup ref="m:annotation.attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="annotation.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attribute name="cd" type="xs:NCName"/>
<xs:attribute name="name" type="xs:NCName"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attributeGroup ref="m:src"/>
</xs:attributeGroup>
<xs:attributeGroup name="DefEncAtt">
<xs:attribute name="encoding" type="xs:string"/>
<xs:attribute name="definitionURL" type="xs:anyURI"/>
</xs:attributeGroup>
<xs:group name="semantics">
<xs:sequence>
<xs:element name="semantics">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:MathExpression"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:annotation"/>
<xs:element ref="m:annotation-xml"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="m:semantics.attributes"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="semantics.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="cd" type="xs:NCName"/>
<xs:attribute name="name" type="xs:NCName"/>
</xs:attributeGroup>
<xs:simpleType name="length">
<xs:restriction base="xs:string">
<xs:pattern value="\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(e[mx]|in|cm|mm|p[xtc]|%)?)|(negative)?((very){0,2}thi(n|ck)|medium)mathspace)\s*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

684
app.platform/src/main/resources/mathml3/mathml3-content.xsd

@ -0,0 +1,684 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://www.w3.org/1998/Math/MathML"
elementFormDefault="qualified"
targetNamespace="http://www.w3.org/1998/Math/MathML">
<xs:include schemaLocation="mathml3-strict-content.xsd"/>
<xs:complexType name="cn.content" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:mglyph"/>
<xs:element ref="m:sep"/>
<xs:element ref="m:PresentationExpression"/>
</xs:choice>
</xs:complexType>
<xs:attributeGroup name="cn.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="type"/>
<xs:attribute name="base"/>
</xs:attributeGroup>
<xs:attributeGroup name="ci.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="type"/>
</xs:attributeGroup>
<xs:attributeGroup name="ci.type">
<xs:attribute name="type" use="required"/>
</xs:attributeGroup>
<xs:complexType name="ci.content" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:mglyph"/>
<xs:element ref="m:PresentationExpression"/>
</xs:choice>
</xs:complexType>
<xs:attributeGroup name="csymbol.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="type"/>
<xs:attribute name="cd" type="xs:NCName"/>
</xs:attributeGroup>
<xs:complexType name="csymbol.content" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:mglyph"/>
<xs:element ref="m:PresentationExpression"/>
</xs:choice>
</xs:complexType>
<xs:element name="bvar">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:choice>
<xs:element ref="m:ci"/>
<xs:group ref="m:semantics-ci"/>
</xs:choice>
<xs:element ref="m:degree"/>
</xs:choice>
<xs:attributeGroup ref="m:CommonAtt"/>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="cbytes.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:attributeGroup>
<xs:attributeGroup name="cs.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:attributeGroup>
<!--Ambiguous content model altered (apply.content)-->
<xs:complexType name="apply.content">
<xs:sequence>
<xs:group ref="m:ContExp"/>
<xs:group ref="m:BvarQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:Qualifier"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="bind.content">
<xs:complexContent>
<xs:extension base="m:apply.content"/>
</xs:complexContent>
</xs:complexType>
<xs:attributeGroup name="base">
<xs:attribute name="base" use="required"/>
</xs:attributeGroup>
<xs:element name="sep">
<xs:complexType/>
</xs:element>
<xs:element name="PresentationExpression" abstract="true"/>
<xs:group name="DomainQ">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:domainofapplication"/>
<xs:element ref="m:condition"/>
<!--Ambiguous content model altered (interval)--><xs:sequence>
<xs:element ref="m:lowlimit"/>
<xs:element minOccurs="0" ref="m:uplimit"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:element name="domainofapplication">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="condition">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="uplimit">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="lowlimit">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:group name="Qualifier">
<xs:choice>
<xs:group ref="m:DomainQ"/>
<xs:element ref="m:degree"/>
<xs:element ref="m:momentabout"/>
<xs:element ref="m:logbase"/>
</xs:choice>
</xs:group>
<xs:element name="degree">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="momentabout">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="logbase">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="type">
<xs:attribute name="type" use="required"/>
</xs:attributeGroup>
<xs:attributeGroup name="order">
<xs:attribute name="order" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="numeric"/>
<xs:enumeration value="lexicographic"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="closure">
<xs:attribute name="closure" use="required"/>
</xs:attributeGroup>
<xs:element name="piecewise">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:piece"/>
<xs:element ref="m:otherwise"/>
</xs:choice>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="piece">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:ContExp"/>
<xs:group ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="otherwise">
<xs:complexType>
<xs:group ref="m:ContExp"/>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="DeprecatedContExp" abstract="true"/>
<xs:element name="reln" substitutionGroup="m:DeprecatedContExp">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="fn" substitutionGroup="m:DeprecatedContExp">
<xs:complexType>
<xs:group ref="m:ContExp"/>
</xs:complexType>
</xs:element>
<xs:element name="declare" substitutionGroup="m:DeprecatedContExp">
<xs:complexType>
<xs:group maxOccurs="unbounded" ref="m:ContExp"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="scope" type="xs:string"/>
<xs:attribute name="nargs" type="xs:nonNegativeInteger"/>
<xs:attribute name="occurrence">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="prefix"/>
<xs:enumeration value="infix"/>
<xs:enumeration value="function-model"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="interval.class" abstract="true">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:ContExp"/>
<xs:group ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="closure"/>
</xs:complexType>
</xs:element>
<xs:element name="interval" substitutionGroup="m:interval.class"/>
<xs:element name="unary-functional.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="inverse" substitutionGroup="m:unary-functional.class"/>
<xs:element name="ident" substitutionGroup="m:unary-functional.class"/>
<xs:element name="domain" substitutionGroup="m:unary-functional.class"/>
<xs:element name="codomain" substitutionGroup="m:unary-functional.class"/>
<xs:element name="image" substitutionGroup="m:unary-functional.class"/>
<xs:element name="ln" substitutionGroup="m:unary-functional.class"/>
<xs:element name="log" substitutionGroup="m:unary-functional.class"/>
<xs:element name="moment" substitutionGroup="m:unary-functional.class"/>
<xs:element name="lambda.class" abstract="true">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:BvarQ"/>
<xs:group ref="m:DomainQ"/>
<xs:group ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="lambda" substitutionGroup="m:lambda.class"/>
<xs:element name="nary-functional.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="compose" substitutionGroup="m:nary-functional.class"/>
<xs:group name="binary-arith.class">
<xs:choice>
<xs:element ref="m:quotient"/>
<xs:element ref="m:divide"/>
<xs:element ref="m:minus"/>
<xs:element ref="m:power"/>
<xs:element ref="m:rem"/>
<xs:element ref="m:root"/>
</xs:choice>
</xs:group>
<xs:element name="quotient">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="divide">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="minus">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="power">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="rem">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="root">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:group name="unary-arith.class">
<xs:choice>
<xs:element ref="m:factorial"/>
<!--Ambiguous content model altered (minus)--><!--Ambiguous content model altered (root)--><xs:element ref="m:abs"/>
<xs:element ref="m:conjugate"/>
<xs:element ref="m:arg"/>
<xs:element ref="m:real"/>
<xs:element ref="m:imaginary"/>
<xs:element ref="m:floor"/>
<xs:element ref="m:ceiling"/>
<xs:element ref="m:exp"/>
</xs:choice>
</xs:group>
<xs:element name="factorial">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="abs">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="conjugate">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="arg">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="real">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="imaginary">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="floor">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="ceiling">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="exp">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="nary-minmax.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="max" substitutionGroup="m:nary-minmax.class"/>
<xs:element name="min" substitutionGroup="m:nary-minmax.class"/>
<xs:element name="nary-arith.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="plus" substitutionGroup="m:nary-arith.class"/>
<xs:element name="times" substitutionGroup="m:nary-arith.class"/>
<xs:element name="gcd" substitutionGroup="m:nary-arith.class"/>
<xs:element name="lcm" substitutionGroup="m:nary-arith.class"/>
<xs:element name="nary-logical.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="and" substitutionGroup="m:nary-logical.class"/>
<xs:element name="or" substitutionGroup="m:nary-logical.class"/>
<xs:element name="xor" substitutionGroup="m:nary-logical.class"/>
<xs:element name="unary-logical.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="not" substitutionGroup="m:unary-logical.class"/>
<xs:element name="binary-logical.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="implies" substitutionGroup="m:binary-logical.class"/>
<xs:element name="equivalent" substitutionGroup="m:binary-logical.class"/>
<xs:element name="quantifier.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="forall" substitutionGroup="m:quantifier.class"/>
<xs:element name="exists" substitutionGroup="m:quantifier.class"/>
<xs:element name="nary-reln.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="eq" substitutionGroup="m:nary-reln.class"/>
<xs:element name="gt" substitutionGroup="m:nary-reln.class"/>
<xs:element name="lt" substitutionGroup="m:nary-reln.class"/>
<xs:element name="geq" substitutionGroup="m:nary-reln.class"/>
<xs:element name="leq" substitutionGroup="m:nary-reln.class"/>
<xs:element name="binary-reln.class" abstract="true"/>
<xs:element name="neq" substitutionGroup="m:binary-reln.class">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="approx" substitutionGroup="m:binary-reln.class">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="factorof" substitutionGroup="m:binary-reln.class">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="tendsto" substitutionGroup="m:binary-reln.class">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="type"/>
</xs:complexType>
</xs:element>
<xs:element name="int.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="int" substitutionGroup="m:int.class"/>
<xs:element name="Differential-Operator.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="diff" substitutionGroup="m:Differential-Operator.class"/>
<xs:element name="partialdiff.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="partialdiff" substitutionGroup="m:partialdiff.class"/>
<xs:element name="unary-veccalc.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="divergence" substitutionGroup="m:unary-veccalc.class"/>
<xs:element name="grad" substitutionGroup="m:unary-veccalc.class"/>
<xs:element name="curl" substitutionGroup="m:unary-veccalc.class"/>
<xs:element name="laplacian" substitutionGroup="m:unary-veccalc.class"/>
<xs:element name="nary-setlist-constructor.class" abstract="true"/>
<xs:element name="set" substitutionGroup="m:nary-setlist-constructor.class">
<xs:complexType>
<xs:sequence>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:BvarQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:DomainQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="type"/>
</xs:complexType>
</xs:element>
<xs:element name="list" substitutionGroup="m:nary-setlist-constructor.class">
<xs:complexType>
<xs:sequence>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:BvarQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:DomainQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
<xs:attribute name="order">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="numeric"/>
<xs:enumeration value="lexicographic"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="nary-set.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="union" substitutionGroup="m:nary-set.class"/>
<xs:element name="intersect" substitutionGroup="m:nary-set.class"/>
<xs:element name="cartesianproduct" substitutionGroup="m:nary-set.class"/>
<xs:element name="binary-set.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="in" substitutionGroup="m:binary-set.class"/>
<xs:element name="notin" substitutionGroup="m:binary-set.class"/>
<xs:element name="notsubset" substitutionGroup="m:binary-set.class"/>
<xs:element name="notprsubset" substitutionGroup="m:binary-set.class"/>
<xs:element name="setdiff" substitutionGroup="m:binary-set.class"/>
<xs:element name="nary-set-reln.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="subset" substitutionGroup="m:nary-set-reln.class"/>
<xs:element name="prsubset" substitutionGroup="m:nary-set-reln.class"/>
<xs:element name="unary-set.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="card" substitutionGroup="m:unary-set.class"/>
<xs:element name="sum.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="sum" substitutionGroup="m:sum.class"/>
<xs:element name="product.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="product" substitutionGroup="m:product.class"/>
<xs:element name="limit.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="limit" substitutionGroup="m:limit.class"/>
<xs:element name="unary-elementary.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="sin" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="cos" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="tan" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="sec" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="csc" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="cot" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="sinh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="cosh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="tanh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="sech" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="csch" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="coth" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arcsin" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccos" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arctan" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccosh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccot" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccoth" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccsc" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arccsch" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arcsec" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arcsech" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arcsinh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="arctanh" substitutionGroup="m:unary-elementary.class"/>
<xs:element name="nary-stats.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="mean" substitutionGroup="m:nary-stats.class"/>
<xs:element name="sdev" substitutionGroup="m:nary-stats.class"/>
<xs:element name="variance" substitutionGroup="m:nary-stats.class"/>
<xs:element name="median" substitutionGroup="m:nary-stats.class"/>
<xs:element name="mode" substitutionGroup="m:nary-stats.class"/>
<xs:element name="nary-constructor.class" abstract="true">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:BvarQ"/>
<xs:group ref="m:DomainQ"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="vector" substitutionGroup="m:nary-constructor.class"/>
<xs:element name="matrix" substitutionGroup="m:nary-constructor.class"/>
<xs:element name="matrixrow" substitutionGroup="m:nary-constructor.class"/>
<xs:element name="unary-linalg.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="determinant" substitutionGroup="m:unary-linalg.class"/>
<xs:element name="transpose" substitutionGroup="m:unary-linalg.class"/>
<xs:element name="nary-linalg.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="selector" substitutionGroup="m:nary-linalg.class"/>
<xs:element name="binary-linalg.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="vectorproduct" substitutionGroup="m:binary-linalg.class"/>
<xs:element name="scalarproduct" substitutionGroup="m:binary-linalg.class"/>
<xs:element name="outerproduct" substitutionGroup="m:binary-linalg.class"/>
<xs:element name="constant-set.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="integers" substitutionGroup="m:constant-set.class"/>
<xs:element name="reals" substitutionGroup="m:constant-set.class"/>
<xs:element name="rationals" substitutionGroup="m:constant-set.class"/>
<xs:element name="naturalnumbers" substitutionGroup="m:constant-set.class"/>
<xs:element name="complexes" substitutionGroup="m:constant-set.class"/>
<xs:element name="primes" substitutionGroup="m:constant-set.class"/>
<xs:element name="emptyset" substitutionGroup="m:constant-set.class"/>
<xs:element name="constant-arith.class" abstract="true">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:DefEncAtt"/>
</xs:complexType>
</xs:element>
<xs:element name="exponentiale" substitutionGroup="m:constant-arith.class"/>
<xs:element name="imaginaryi" substitutionGroup="m:constant-arith.class"/>
<xs:element name="notanumber" substitutionGroup="m:constant-arith.class"/>
<xs:element name="true" substitutionGroup="m:constant-arith.class"/>
<xs:element name="false" substitutionGroup="m:constant-arith.class"/>
<xs:element name="pi" substitutionGroup="m:constant-arith.class"/>
<xs:element name="eulergamma" substitutionGroup="m:constant-arith.class"/>
<xs:element name="infinity" substitutionGroup="m:constant-arith.class"/>
</xs:schema>

2151
app.platform/src/main/resources/mathml3/mathml3-presentation.xsd

File diff suppressed because it is too large

186
app.platform/src/main/resources/mathml3/mathml3-strict-content.xsd

@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://www.w3.org/1998/Math/MathML"
elementFormDefault="qualified"
targetNamespace="http://www.w3.org/1998/Math/MathML">
<xs:group name="ContExp">
<xs:choice>
<!--Ambiguous content model altered (ContExp)-->
<xs:element ref="m:apply"/>
<xs:element ref="m:bind"/>
<xs:element ref="m:ci"/>
<xs:element ref="m:cn"/>
<xs:element ref="m:csymbol"/>
<xs:element ref="m:cbytes"/>
<xs:element ref="m:cerror"/>
<xs:element ref="m:cs"/>
<xs:element ref="m:share"/>
<xs:element ref="m:piecewise"/>
<xs:element ref="m:DeprecatedContExp"/>
<xs:element ref="m:interval.class"/>
<xs:element ref="m:unary-functional.class"/>
<xs:element ref="m:lambda.class"/>
<xs:element ref="m:nary-functional.class"/>
<xs:group ref="m:binary-arith.class"/>
<xs:group ref="m:unary-arith.class"/>
<xs:element ref="m:nary-minmax.class"/>
<xs:element ref="m:nary-arith.class"/>
<xs:element ref="m:nary-logical.class"/>
<xs:element ref="m:unary-logical.class"/>
<xs:element ref="m:binary-logical.class"/>
<xs:element ref="m:quantifier.class"/>
<xs:element ref="m:nary-reln.class"/>
<xs:element ref="m:binary-reln.class"/>
<xs:element ref="m:int.class"/>
<xs:element ref="m:Differential-Operator.class"/>
<xs:element ref="m:partialdiff.class"/>
<xs:element ref="m:unary-veccalc.class"/>
<xs:element ref="m:nary-setlist-constructor.class"/>
<xs:element ref="m:nary-set.class"/>
<xs:element ref="m:binary-set.class"/>
<xs:element ref="m:nary-set-reln.class"/>
<xs:element ref="m:unary-set.class"/>
<xs:element ref="m:sum.class"/>
<xs:element ref="m:product.class"/>
<xs:element ref="m:limit.class"/>
<xs:element ref="m:unary-elementary.class"/>
<xs:element ref="m:nary-stats.class"/>
<xs:element ref="m:nary-constructor.class"/>
<xs:element ref="m:unary-linalg.class"/>
<xs:element ref="m:nary-linalg.class"/>
<xs:element ref="m:binary-linalg.class"/>
<xs:element ref="m:constant-set.class"/>
<xs:element ref="m:constant-arith.class"/>
</xs:choice>
</xs:group>
<xs:element name="cn">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:cn.content">
<xs:attributeGroup ref="m:cn.attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:group name="semantics-ci">
<xs:sequence>
<xs:element name="semantics">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="m:ci"/>
<xs:group ref="m:semantics-ci"/>
</xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:annotation"/>
<xs:element ref="m:annotation-xml"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="m:semantics.attributes"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="semantics-contexp">
<xs:sequence>
<xs:element name="semantics">
<xs:complexType>
<xs:sequence>
<xs:group ref="m:ContExp"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="m:annotation"/>
<xs:element ref="m:annotation-xml"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="m:semantics.attributes"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="ci">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:ci.content">
<xs:attributeGroup ref="m:ci.attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="csymbol">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:csymbol.content">
<xs:attributeGroup ref="m:csymbol.attributes"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="SymbolName">
<xs:restriction base="xs:NCName"/>
</xs:simpleType>
<xs:group name="BvarQ">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="m:bvar"/>
</xs:sequence>
</xs:group>
<xs:element name="apply">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:apply.content">
<xs:attributeGroup ref="m:CommonAtt"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="bind">
<xs:complexType>
<xs:complexContent>
<xs:extension base="m:bind.content">
<xs:attributeGroup ref="m:CommonAtt"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="share">
<xs:complexType>
<xs:attributeGroup ref="m:CommonAtt"/>
<xs:attributeGroup ref="m:src"/>
</xs:complexType>
</xs:element>
<xs:element name="cerror">
<xs:complexType>
<xs:sequence>
<xs:element ref="m:csymbol"/>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="m:ContExp"/>
</xs:sequence>
<xs:attributeGroup ref="m:cerror.attributes"/>
</xs:complexType>
</xs:element>
<xs:attributeGroup name="cerror.attributes">
<xs:attributeGroup ref="m:CommonAtt"/>
</xs:attributeGroup>
<xs:element name="cbytes">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="m:base64">
<xs:attributeGroup ref="m:cbytes.attributes"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="base64">
<xs:restriction base="xs:base64Binary"/>
</xs:simpleType>
<xs:element name="cs">
<xs:complexType mixed="true">
<xs:attributeGroup ref="m:cs.attributes"/>
</xs:complexType>
</xs:element>
<xs:group name="MathExpression">
<xs:choice>
<xs:group ref="m:ContExp"/>
<xs:element ref="m:PresentationExpression"/>
<xs:group ref="m:semantics"/>
</xs:choice>
</xs:group>
</xs:schema>

9
app.platform/src/main/resources/mathml3/mathml3.xsd

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://www.w3.org/1998/Math/MathML"
elementFormDefault="qualified"
targetNamespace="http://www.w3.org/1998/Math/MathML">
<xs:include schemaLocation="mathml3-content.xsd"/>
<xs:include schemaLocation="mathml3-presentation.xsd"/>
<xs:include schemaLocation="mathml3-common.xsd"/>
</xs:schema>

2
erm.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.196",
"platform-core": "8.1.203",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

29
erm.frontend/util-components-generator.cjs

@ -13,16 +13,13 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
generateImportComonents(route);
}
content +='\n';
content +='const localComponents = { \n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
generateComonents(route);
}
content +='}\n\n';
content +='export default localComponents;\n';
@ -30,3 +27,25 @@ content +='export default localComponents;\n';
fs.writeFileSync('./src/components/index.ts', content);
console.info('components generated!');
function generateImportComonents(route){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateImportComonents(child);
}
}
}
function generateComonents(route){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateComonents(child);
}
}
}

2
gradle.properties

@ -38,7 +38,7 @@ application_version=1.0.0
platform_group=io.sc
platform_version=8.1.40
platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.196
platform_core_frontend_version=8.1.203
###########################################################
# dependencies version

2
io.sc.engine.mv.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.196",
"platform-core": "8.1.203",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

29
io.sc.engine.mv.frontend/util-components-generator.cjs

@ -13,16 +13,13 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
generateImportComonents(route);
}
content +='\n';
content +='const localComponents = { \n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
generateComonents(route);
}
content +='}\n\n';
content +='export default localComponents;\n';
@ -30,3 +27,25 @@ content +='export default localComponents;\n';
fs.writeFileSync('./src/components/index.ts', content);
console.info('components generated!');
function generateImportComonents(route){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateImportComonents(child);
}
}
}
function generateComonents(route){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateComonents(child);
}
}
}

2
io.sc.engine.rule.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.196",
"platform-core": "8.1.203",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

29
io.sc.engine.rule.frontend/util-components-generator.cjs

@ -13,16 +13,13 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
generateImportComonents(route);
}
content +='\n';
content +='const localComponents = { \n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
generateComonents(route);
}
content +='}\n\n';
content +='export default localComponents;\n';
@ -30,3 +27,25 @@ content +='export default localComponents;\n';
fs.writeFileSync('./src/components/index.ts', content);
console.info('components generated!');
function generateImportComonents(route){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateImportComonents(child);
}
}
}
function generateComonents(route){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateComonents(child);
}
}
}

2
io.sc.engine.st.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.196",
"platform-core": "8.1.203",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

6
io.sc.engine.st.frontend/src/i18n/messages.json

@ -51,7 +51,9 @@
"engine.st.model.analysisFactor.grid.entity.coefficientSe": "SE of Coefficient",
"engine.st.model.analysisFactor.grid.entity.t": "t",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "Percentile Fill",
"engine.st.scenario.scenarioFactor.grid.toolbar.fill": "Fill",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "Percentile",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithIncreasePercent": "Increase Percent",
"engine.st.scenario.scenarioFactor.grid.entity.valueLow": "Low Grade",
"engine.st.scenario.scenarioFactor.grid.entity.valueMid": "Mid Grade",
"engine.st.scenario.scenarioFactor.grid.entity.valueHigh": "High Grade",
@ -62,6 +64,8 @@
"engine.st.scenario.percentileDialog.entity.mid": "Mid Grade",
"engine.st.scenario.percentileDialog.entity.high": "High Grade",
"engine.st.scenario.increasePercentDialog.title": "Increase Percent Setting",
"engine.st.testCase.grid.title": "Test Case",
"engine.st.testCase.grid.entity.model": "Stress Test Model",
"engine.st.testCase.grid.toolbar.test": "Test",

6
io.sc.engine.st.frontend/src/i18n/messages_tw_CN.json

@ -51,7 +51,9 @@
"engine.st.model.analysisFactor.grid.entity.coefficientSe": "回歸係數標準誤差",
"engine.st.model.analysisFactor.grid.entity.t": "t檢驗",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "分位數填充",
"engine.st.scenario.scenarioFactor.grid.toolbar.fill": "填充",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "分位數",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithIncreasePercent": "增長百分比",
"engine.st.scenario.scenarioFactor.grid.entity.valueLow": "輕度",
"engine.st.scenario.scenarioFactor.grid.entity.valueMid": "中度",
"engine.st.scenario.scenarioFactor.grid.entity.valueHigh": "重度",
@ -62,6 +64,8 @@
"engine.st.scenario.percentileDialog.entity.mid": "中度",
"engine.st.scenario.percentileDialog.entity.high": "重度",
"engine.st.scenario.increasePercentDialog.title": "設置增長百分比參數",
"engine.st.testCase.grid.title": "測試用例",
"engine.st.testCase.grid.entity.model": "壓力測試傳導模型",
"engine.st.testCase.grid.toolbar.test": "測試",

6
io.sc.engine.st.frontend/src/i18n/messages_zh_CN.json

@ -51,7 +51,9 @@
"engine.st.model.analysisFactor.grid.entity.coefficientSe": "回归系数标准误差",
"engine.st.model.analysisFactor.grid.entity.t": "t检验",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "分位数填充",
"engine.st.scenario.scenarioFactor.grid.toolbar.fill": "填充",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile": "分位数",
"engine.st.scenario.scenarioFactor.grid.toolbar.fillWithIncreasePercent": "增长百分比",
"engine.st.scenario.scenarioFactor.grid.entity.valueLow": "轻度",
"engine.st.scenario.scenarioFactor.grid.entity.valueMid": "中度",
"engine.st.scenario.scenarioFactor.grid.entity.valueHigh": "重度",
@ -62,6 +64,8 @@
"engine.st.scenario.percentileDialog.entity.mid": "中度",
"engine.st.scenario.percentileDialog.entity.high": "重度",
"engine.st.scenario.increasePercentDialog.title": "设置增长百分比参数",
"engine.st.testCase.grid.title": "测试用例",
"engine.st.testCase.grid.entity.model": "压力测试传导模型",
"engine.st.testCase.grid.toolbar.test": "测试",

12
io.sc.engine.st.frontend/src/views/IndepFactor/IndepFactor.vue

@ -49,7 +49,7 @@
{ width: 60, name: 'year', label: t('year'), align: 'right' },
{ width: 60, name: 'quarter', label: t('quarter'), align: 'right' },
{ width: 60, name: 'month', label: t('month'), align: 'right' },
{ width: 150, name: 'value', label: t('value') },
{ width: 100, name: 'value', label: t('value') },
]"
:editor="{
dialog: {
@ -128,8 +128,15 @@
echartsOptionRef = {
title: {
text: factorDefine.name,
left: 'center',
align: 'left',
textStyle: {
fontSize: 14,
},
},
tooltip: {
trigger: 'axis',
},
legend: { right: 'left' },
xAxis: {
type: 'category',
name: $t('period'),
@ -147,6 +154,7 @@
},
],
};
console.log(echartsOptionRef);
}
"
></w-grid>

64
io.sc.engine.st.frontend/src/views/Scenario/PercentDialog.vue

@ -0,0 +1,64 @@
<template>
<w-dialog
ref="dialogRef"
:title="$t('engine.st.scenario.increasePercentDialog.title')"
width="400px"
:can-maximize="false"
:buttons="[
{
label: $t('confirm'),
click: () => {
emit('afterSetting', formRef.getData());
},
},
]"
>
<w-form
ref="formRef"
:cols-num="1"
:fields="[
{
name: 'low',
label: $t('engine.st.scenario.percentileDialog.entity.low'),
type: 'number',
defaultValue: 100,
},
{
name: 'mid',
label: $t('engine.st.scenario.percentileDialog.entity.mid'),
type: 'number',
defaultValue: 100,
},
{
name: 'high',
label: $t('engine.st.scenario.percentileDialog.entity.high'),
type: 'number',
defaultValue: 100,
},
]"
></w-form>
</w-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const emit = defineEmits<{
(e: 'afterSetting', settings: object, dialogComponent: any): void;
}>();
const dialogRef = ref();
const formRef = ref();
const open = () => {
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
defineExpose({
open,
close,
});
</script>

102
io.sc.engine.st.frontend/src/views/Scenario/ScenarioFactor.vue

@ -1,5 +1,7 @@
<template>
<div style="height: 100%">
<div class="pl-1" style="height: 100%">
<q-splitter :model-value="70" horizontal class="w-full" style="height: 100%">
<template #before>
<w-grid
ref="gridRef"
:title="$t('data')"
@ -20,19 +22,43 @@
return factorDefine.type === 'ORIGINAL';
},
},
[
{
name: 'fill',
label: $t('engine.st.scenario.scenarioFactor.grid.toolbar.fill'),
icon: 'bi-brush',
enableIf: (arg) => {
return arg.ticked;
},
click: undefined,
},
{
name: 'fillWithPercentile',
label: $t('engine.st.scenario.scenarioFactor.grid.toolbar.fillWithPercentile'),
icon: 'bi-brush',
icon: 'bi-peace',
enableIf: (arg) => {
return arg.ticked;
},
click: (arg) => {
if (arg.ticked) {
percentileDialogRef.open();
}
},
},
{
name: 'fillWithIncreasePercent',
label: $t('engine.st.scenario.scenarioFactor.grid.toolbar.fillWithIncreasePercent'),
icon: 'bi-percent',
enableIf: (arg) => {
return arg.selected;
return arg.ticked;
},
click: (arg) => {
if (arg.selected) {
dialogRef.open();
if (arg.ticked) {
increasePercentDialogRef.open();
}
},
},
],
{
extend: 'clone',
enableIf: () => {
@ -60,9 +86,9 @@
{ width: 60, name: 'year', label: t('year'), align: 'right' },
{ width: 60, name: 'quarter', label: t('quarter'), align: 'right' },
{ width: 60, name: 'month', label: t('month'), align: 'right' },
{ width: 100, name: 'valueLow', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueLow') },
{ width: 100, name: 'valueMid', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueMid') },
{ width: 100, name: 'valueHigh', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueHigh') },
{ width: 80, name: 'valueLow', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueLow') },
{ width: 80, name: 'valueMid', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueMid') },
{ width: 80, name: 'valueHigh', label: t('engine.st.scenario.scenarioFactor.grid.entity.valueHigh') },
]"
:editor="{
dialog: {
@ -135,16 +161,26 @@
() => {
const rows = gridRef.getRows();
const xAxisData = [];
const seriesData = [];
const valueLows = [];
const valueMids = [];
const valueHighs = [];
for (const row of rows) {
xAxisData.push(row.year + (row.month ? '-' + row.month : ''));
seriesData.push(row.valueLow);
valueLows.push(row.valueLow);
valueMids.push(row.valueMid);
valueHighs.push(row.valueHigh);
}
echartsOptionRef = {
title: {
text: factorDefine.name,
left: 'center',
textStyle: {
fontSize: 14,
},
},
tooltip: {
trigger: 'axis',
},
legend: { right: 'left' },
xAxis: {
type: 'category',
name: $t('period'),
@ -156,7 +192,20 @@
},
series: [
{
data: seriesData,
name: $t('engine.st.scenario.scenarioFactor.grid.entity.valueLow'),
data: valueLows,
type: 'line',
smooth: true,
},
{
name: $t('engine.st.scenario.scenarioFactor.grid.entity.valueMid'),
data: valueMids,
type: 'line',
smooth: true,
},
{
name: $t('engine.st.scenario.scenarioFactor.grid.entity.valueHigh'),
data: valueHighs,
type: 'line',
smooth: true,
},
@ -165,14 +214,21 @@
}
"
></w-grid>
<PercentileDialog ref="dialogRef" @after-setting="fillWithPercentile"></PercentileDialog>
<PercentileDialog ref="percentileDialogRef" @after-setting="fillWithPercentile"></PercentileDialog>
<PercentDialog ref="increasePercentDialogRef" @after-setting="fillWithIncreasePercent"></PercentDialog>
</template>
<template #after>
<w-echarts ref="factorEcharts" style="width: 100%; height: 100%" :option="echartsOptionRef"></w-echarts>
</template>
</q-splitter>
</div>
</template>
<script setup lang="ts">
import { ref, computed, onUpdated } from 'vue';
import { useI18n } from 'vue-i18n';
import { axios, Environment, Formater } from 'platform-core';
import { axios, Environment, Formater, Tools } from 'platform-core';
import PercentileDialog from './PercentileDialog.vue';
import PercentDialog from './PercentDialog.vue';
const props = defineProps({
factorDefine: {
@ -186,7 +242,8 @@ const props = defineProps({
const { t } = useI18n();
const gridRef = ref();
const echartsOptionRef = ref();
const dialogRef = ref();
const percentileDialogRef = ref();
const increasePercentDialogRef = ref();
const getFactorColumns = computed(() => {
let result = [{ width: 60, name: 'year', label: t('year'), align: 'right' }];
@ -202,11 +259,18 @@ const getFactorColumns = computed(() => {
});
const fillWithPercentile = (settings) => {
axios
.post(Environment.apiContextPath('/api/st/scenarioFactor/fillWithPercentile?scenarioFactorId=' + gridRef.value.getSelectedRow().id), settings)
.then(() => {
settings.ids = Tools.extractProperties(gridRef.value.getTickedRows(), 'id');
axios.post(Environment.apiContextPath('/api/st/scenarioFactor/fillWithPercentile'), settings).then(() => {
refresh();
percentileDialogRef.value.close();
});
};
const fillWithIncreasePercent = (settings) => {
settings.ids = Tools.extractProperties(gridRef.value.getTickedRows(), 'id');
axios.post(Environment.apiContextPath('/api/st/scenarioFactor/fillWithIncreasePercent'), settings).then(() => {
refresh();
dialogRef.value.close();
increasePercentDialogRef.value.close();
});
};

29
io.sc.engine.st.frontend/util-components-generator.cjs

@ -13,16 +13,13 @@ content +='/**\n';
content +=' * 此文件为自动生成文件,请勿修改\n';
content +=' */\n\n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
generateImportComonents(route);
}
content +='\n';
content +='const localComponents = { \n';
for(const route of routesJson){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
generateComonents(route);
}
content +='}\n\n';
content +='export default localComponents;\n';
@ -30,3 +27,25 @@ content +='export default localComponents;\n';
fs.writeFileSync('./src/components/index.ts', content);
console.info('components generated!');
function generateImportComonents(route){
const componentName =route.component.replaceAll('.','_');
const componentPath =route.componentPath;
content +=`import ${componentName} from '${componentPath}';\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateImportComonents(child);
}
}
}
function generateComonents(route){
const componentName =route.component.replaceAll('.','_');
content +=`'${route.component}': ${componentName},\n`;
if(route.children && route.children.length){
for(const child of route.children){
generateComonents(child);
}
}
}

2
io.sc.engine.st/src/main/java/io/sc/engine/st/controller/IndepFactorWebController.java

@ -24,6 +24,6 @@ public class IndepFactorWebController extends RestCrudController<IndepFactorVo,
@Override
protected Page<IndepFactorVo> query(HttpServletRequest request, HttpServletResponse response, QueryParameter queryParameter) throws Exception {
String defineId =request.getParameter("defineId");
return QueryResult.page(service.findByFactorDefineId(defineId));
return QueryResult.page(service.findByDefineId(defineId));
}
}

2
io.sc.engine.st/src/main/java/io/sc/engine/st/service/IndepFactorService.java

@ -10,5 +10,5 @@ import java.text.ParseException;
import java.util.List;
public interface IndepFactorService extends DaoService<IndepFactorEntity, String, IndepFactorRepository>{
public List<IndepFactorVo> findByFactorDefineId(@RequestParam("defineId") String defineId) throws Exception;
public List<IndepFactorVo> findByDefineId(@RequestParam("defineId") String defineId) throws Exception;
}

60
io.sc.engine.st/src/main/java/io/sc/engine/st/service/impl/IndepFactorServiceImpl.java

@ -35,29 +35,29 @@ public class IndepFactorServiceImpl extends DaoServiceImpl<IndepFactorEntity, St
@Autowired private IndepFactorDefineService indepFactorDefineService;
@Override
public List<IndepFactorVo> findByFactorDefineId(String defineId) throws Exception {
public List<IndepFactorVo> findByDefineId(String defineId) throws Exception {
if(!StringUtils.hasText(defineId)){
return Collections.emptyList();
}
IndepFactorDefineEntity factorDefineEntity =indepFactorDefineService.findById(defineId);
if(factorDefineEntity==null){
IndepFactorDefineEntity entity =indepFactorDefineService.findById(defineId);
if(entity==null){
return Collections.emptyList();
}
if(FactorDefineType.FOLDER.equals(factorDefineEntity.getType())){
if(FactorDefineType.FOLDER.equals(entity.getType())){
return Collections.emptyList();
}
if(FactorDefineType.ORIGINAL.equals(factorDefineEntity.getType())){
if(FactorDefineType.ORIGINAL.equals(entity.getType())){
return EntityVoUtil.toVo(repository.findByDefineId(defineId));
}
if(factorDefineEntity instanceof IndepArithmeticFactorDefineEntity){
IndepArithmeticFactorDefineEntity arithmeticFactorDefineEntity =(IndepArithmeticFactorDefineEntity)factorDefineEntity;
if(entity instanceof IndepArithmeticFactorDefineEntity){
IndepArithmeticFactorDefineEntity arithmeticFactorDefineEntity =(IndepArithmeticFactorDefineEntity)entity;
return cal(arithmeticFactorDefineEntity);
}else if(factorDefineEntity instanceof IndepDelayFactorDefineEntity){
IndepDelayFactorDefineEntity delayFactorDefineEntity =(IndepDelayFactorDefineEntity)factorDefineEntity;
}else if(entity instanceof IndepDelayFactorDefineEntity){
IndepDelayFactorDefineEntity delayFactorDefineEntity =(IndepDelayFactorDefineEntity)entity;
return cal(delayFactorDefineEntity);
}else if(factorDefineEntity instanceof IndepDifferentialFactorDefineEntity){
IndepDifferentialFactorDefineEntity differentialFactorDefineEntity =(IndepDifferentialFactorDefineEntity)factorDefineEntity;
}else if(entity instanceof IndepDifferentialFactorDefineEntity){
IndepDifferentialFactorDefineEntity differentialFactorDefineEntity =(IndepDifferentialFactorDefineEntity)entity;
return cal(differentialFactorDefineEntity);
}
return Collections.emptyList();
@ -81,11 +81,11 @@ public class IndepFactorServiceImpl extends DaoServiceImpl<IndepFactorEntity, St
Map<String,Map<PeriodWrapper,Object>> variableValueMap =new HashMap<>();
for(IndepFactorDefineEntity defineEntity : referenceEntities){
Map<PeriodWrapper,Object> records =new HashMap<>();
List<IndepFactorEntity> factorEntities =repository.findByDefineId(defineEntity.getId());
if(factorEntities!=null){
for(IndepFactorEntity factorEntity : factorEntities){
rowKeys.add(new PeriodWrapper(factorEntity.getYear(),factorEntity.getQuarter(),factorEntity.getMonth()));
records.put(factorEntity.calUniqueKey(),defineEntity.convertValue(factorEntity.getValue()));
List<IndepFactorVo> vos =this.findByDefineId(defineEntity.getId());
if(vos!=null){
for(IndepFactorVo vo : vos){
rowKeys.add(new PeriodWrapper(vo.getYear(),vo.getQuarter(),vo.getMonth()));
records.put(vo.calUniqueKey(),defineEntity.convertValue(vo.getValue()));
}
}
variableValueMap.put(defineEntity.getCode(),records);
@ -113,24 +113,24 @@ public class IndepFactorServiceImpl extends DaoServiceImpl<IndepFactorEntity, St
private List<IndepFactorVo> cal(IndepDelayFactorDefineEntity selfEntity) throws Exception {
// 获取滞后自变量定义引用的自变量定义实体
IndepFactorDefineEntity referenceEntity =selfEntity.getDelayFactorDefine();
if(referenceEntity==null){
IndepFactorDefineEntity defineEntity =selfEntity.getDelayFactorDefine();
if(defineEntity==null){
return Collections.emptyList();
}
// 滞后自变量定义和引用的自变量定义实体的周期是否相同
if(!referenceEntity.getPeriod().equals(selfEntity.getPeriod())){
if(!defineEntity.getPeriod().equals(selfEntity.getPeriod())){
throw new FactorDefinePeroidNotSameException();
}
List<IndepFactorEntity> factorEntities =repository.findByDefineId(referenceEntity.getId());
if(factorEntities==null || factorEntities.isEmpty()){
List<IndepFactorVo> vos =this.findByDefineId(defineEntity.getId());
if(vos==null || vos.isEmpty()){
return Collections.emptyList();
}
Map<PeriodWrapper,Object> recordCache =new LinkedHashMap<>();
for(IndepFactorEntity factorEntity : factorEntities){
recordCache.put(factorEntity.calUniqueKey(),selfEntity.convertValue(factorEntity.getValue()));
for(IndepFactorVo vo : vos){
recordCache.put(vo.calUniqueKey(),selfEntity.convertValue(vo.getValue()));
}
// 结果集
@ -149,24 +149,24 @@ public class IndepFactorServiceImpl extends DaoServiceImpl<IndepFactorEntity, St
private List<IndepFactorVo> cal(IndepDifferentialFactorDefineEntity selfEntity) throws Exception {
// 获取差分自变量定义引用的自变量定义实体
IndepFactorDefineEntity referenceEntity =selfEntity.getDifferentialFactorDefine();
if(referenceEntity==null){
IndepFactorDefineEntity defineEntity =selfEntity.getDifferentialFactorDefine();
if(defineEntity==null){
return Collections.emptyList();
}
// 滞后自变量定义和引用的自变量定义实体的周期是否相同
if(!referenceEntity.getPeriod().equals(selfEntity.getPeriod())){
if(!defineEntity.getPeriod().equals(selfEntity.getPeriod())){
throw new FactorDefinePeroidNotSameException();
}
List<IndepFactorEntity> factorEntities =repository.findByDefineId(referenceEntity.getId());
if(factorEntities==null || factorEntities.isEmpty()){
List<IndepFactorVo> vos =this.findByDefineId(defineEntity.getId());
if(vos==null || vos.isEmpty()){
return Collections.emptyList();
}
Map<PeriodWrapper,Object> recordCache =new LinkedHashMap<>();
for(IndepFactorEntity factorEntity : factorEntities){
recordCache.put(factorEntity.calUniqueKey(),selfEntity.convertValue(factorEntity.getValue()));
for(IndepFactorVo vo : vos){
recordCache.put(vo.calUniqueKey(),selfEntity.convertValue(vo.getValue()));
}
for(int i=0;i<selfEntity.getDifferentialDegree();i++) {

53
io.sc.engine.st/src/main/java/io/sc/engine/st/support/PercentWrapper.java

@ -0,0 +1,53 @@
package io.sc.engine.st.support;
import java.util.HashSet;
import java.util.Set;
public class PercentWrapper {
private Set<String> ids =new HashSet<>();
private Double low =100d;
private Double mid =100d;
private Double high =100d;
public Set<String> getIds() {
return ids;
}
public void setIds(Set<String> ids) {
this.ids = ids;
}
public Double getLow() {
return low;
}
public void setLow(Double low) {
this.low = low;
}
public Double getMid() {
return mid;
}
public void setMid(Double mid) {
this.mid = mid;
}
public Double getHigh() {
return high;
}
public void setHigh(Double high) {
this.high = high;
}
@Override
public String toString() {
return "PercentWrapper{" +
"ids=" + ids +
", low=" + low +
", mid=" + mid +
", high=" + high +
'}';
}
}

33
io.sc.platform.core.frontend/public/index.html

@ -1,15 +1,22 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- luckysheet css -->
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/plugins/css/pluginsCss.css" th:href="@{/webjars/luckysheet/2.1.13/plugins/css/pluginsCss.css}"/>
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/plugins/plugins.css" th:href="@{/webjars/luckysheet/2.1.13/plugins/plugins.css}"/>
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/css/luckysheet.css" th:href="@{/webjars/luckysheet/2.1.13/css/luckysheet.css}"/>
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/assets/iconfont/iconfont.css" th:href="@{/webjars/luckysheet/2.1.13/assets/iconfont/iconfont.css}"/>
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/plugins/css/pluginsCss.css" th:href="@{/webjars/luckysheet/2.1.13/plugins/css/pluginsCss.css}" />
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/plugins/plugins.css" th:href="@{/webjars/luckysheet/2.1.13/plugins/plugins.css}" />
<link rel="stylesheet" href="/webjars/luckysheet/2.1.13/css/luckysheet.css" th:href="@{/webjars/luckysheet/2.1.13/css/luckysheet.css}" />
<link
rel="stylesheet"
href="/webjars/luckysheet/2.1.13/assets/iconfont/iconfont.css"
th:href="@{/webjars/luckysheet/2.1.13/assets/iconfont/iconfont.css}"
/>
<!-- math font css -->
<link rel="stylesheet" href="/webjars/mathfonts/1.0.0/Asana/mathfonts.css" th:href="@{/webjars/mathfonts/1.0.0/Asana/mathfonts.css}" />
<!-- luckysheet js -->
<script src="/webjars/luckysheet/2.1.13/plugins/js/plugin.js" th:src="@{/webjars/luckysheet/2.1.13/plugins/js/plugin.js}"></script>
@ -26,9 +33,11 @@
</noscript>
<!--加载 js 时,-->
<div id="appInitializer" style="height: 100vh; display: grid; place-items: center;"><!--全屏高度,grid布局,子元素垂直方向位于屏幕中间-->
<div style="display: grid; justify-items: center;"><!--grid布局, 子元素水平方向位于屏幕中间-->
<svg style="color: #14234a;" width="48px" height="48px" stroke="currentColor" fill="currentColor" viewBox="0 0 64 64">
<div id="appInitializer" style="height: 100vh; display: grid; place-items: center">
<!--全屏高度,grid布局,子元素垂直方向位于屏幕中间-->
<div style="display: grid; justify-items: center">
<!--grid布局, 子元素水平方向位于屏幕中间-->
<svg style="color: #14234a" width="48px" height="48px" stroke="currentColor" fill="currentColor" viewBox="0 0 64 64">
<g stroke-width="4" stroke-linecap="round">
<line y1="17" y2="29" transform="translate(32,32) rotate(180)">
<animate attributeName="stroke-opacity" dur="750ms" values="1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1" repeatCount="indefinite"></animate>
@ -68,7 +77,7 @@
</line>
</g>
</svg>
<div style="padding: 10px;" th:text="#{pageLoading}">正在加载, 请稍后......</div>
<div style="padding: 10px" th:text="#{pageLoading}">正在加载, 请稍后......</div>
<div id="appInitializerStatus"></div>
</div>
</div>

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Asana/Asana-Math.woff2

Binary file not shown.

40
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Asana/mathfonts.css

@ -0,0 +1,40 @@
/*
Asana Math is released under the SIL Open Font License. See the files in this
directory for details. The font can be obtained from several TeX distributions
or package managers. The font does not seem to have a corresponding "non-MATH"
font, it is recommended to use a Palatino-like font for the surrounding text.
The WOFF fonts have been obtained from
http://mirrors.ctan.org/fonts/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: Asana Math;
src: local('Asana Math'), local('Asana-Math'),
url('Asana-Math.woff2'), url('Asana-Math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: Asana Math;
}
m|math {
font-family: Asana Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
@font-feature-values Asana Math { @stylistic { calligraphic: 1; } }
m|*.calligraphic {
font-variant-alternates: stylistic(calligraphic); /* Recommended syntax */
font-feature-settings: 'salt'; /* OpenType feature syntax */
-moz-font-feature-settings: 'salt'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'salt'; /* Blink syntax */
}

56
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Cambria/mathfonts.css

@ -0,0 +1,56 @@
/*
The proprietary Cambria fonts are installed by default on Microsoft Windows 7
and higher and are provided with some other Microsoft products such as Office.
Some Web services may also provide them as Web fonts. For details, see
http://www.microsoft.com/typography/fonts/family.aspx?FID=291
http://www.microsoft.com/typography/fonts/family.aspx?FID=360
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
/* Uncomment and complete the URLs if you wish to use Web fonts */
/*
@font-face {
font-family: Cambria;
src: local('Cambria'), url('...');
}
@font-face {
font-family: Cambria;
src: local('Cambria Bold'), url('...');
font-weight: bold;
}
@font-face {
font-family: Cambria;
src: local('Cambria Italic'), url('...');
font-style: italic;
}
@font-face {
font-family: Cambria;
src: local('Cambria Bold Italic'), url('...');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: Cambria Math;
src: local('Cambria Math'), url('...');
}
*/
.htmlmathparagraph, m|mtext {
font-family: Cambria;
}
m|math {
font-family: Cambria Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* TODO: verify whether calligraphic letters are available in this font */
m|*.calligraphic {
}

51
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/DejaVu/mathfonts.css

@ -0,0 +1,51 @@
/*
Deja Vu is released under a Free License. See the files in this directory
for details. This fonts is available on most Linux distributions.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: DejaVu Math TeX Gyre;
src: url('DejaVuMathTeXGyre.woff2'), url('DejaVuMathTeXGyre.woff');
}
@font-face {
font-family: DejaVu Serif;
src: url('DejaVuSerif.woff2'), url('DejaVuSerif.woff');
}
@font-face {
font-family: DejaVu Serif;
src: url('DejaVuSerif-Bold.woff2'), url('DejaVuSerif-Bold.woff');
font-weight: bold;
}
@font-face {
font-family: DejaVu Serif;
src: url('DejaVuSerif-Italic.woff2'), url('DejaVuSerif-Italic.woff');
font-style: italic;
}
@font-face {
font-family: DejaVu Serif;
src: url('DejaVuSerif-BoldItalic.woff2'),
url('DejaVuSerif-BoldItalic.woff');
font-weight: bold;
font-style: italic;
}
.htmlmathparagraph, m|mtext {
font-family: DejaVu Serif;
}
m|math {
font-family: DejaVu Math TeX Gyre;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/FiraMath/FiraMath-Regular.woff2

Binary file not shown.

21
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/FiraMath/mathfonts.css

@ -0,0 +1,21 @@
/*
The FiraMath font is released under the SIL Open Font License. See the files in
this directory for details.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: Fira Math;
src: local('Fira Math'), local('FiraMath-Regular'),
url('FiraMath-Regular.woff2'), url('FiraMath-Regular.woff');
}
.htmlmathparagraph, m|mtext {
/* TODO: use FiraGO instead? */
font-family: Fira Math;
}
m|math {
font-family: Fira Math;
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicBoldIt.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicIt.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/GFSNeohellenicMath.woff2

Binary file not shown.

50
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GFS_NeoHellenic/mathfonts.css

@ -0,0 +1,50 @@
/*
The GFS Neohellenic fonts are released under the SIL Open Font License. See the
files in this directory for details.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: GFS Neohellenic;
src: local('GFSNeohellenic-Regular'),
url('GFSNeohellenic.woff2'),
url('GFSNeohellenic.woff');
}
@font-face {
font-family: GFS Neohellenic;
src: local('GFSNeohellenic-Bold'),
url('GFSNeohellenic-Bold.woff2'),
url('GFSNeohellenic-Bold.woff');
font-weight: bold;
}
@font-face {
font-family: GFS Neohellenic;
src: local('GFSNeohellenic-Italic'),
url('GFSNeohellenic-It.woff2'),
url('GFSNeohellenic-It.woff');
font-style: italic;
}
@font-face {
font-family: GFS Neohellenic;
src: local('GFSNeohellenic-BoldItalic'),
url('GFSNeohellenic-BoldIt.woff2'),
url('GFSNeohellenic-BoldIt.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: GFS Neohellenic Math;
src: local('GFSNeohellenicMath'),
url('GFSNeohellenicMath.woff2'),
url('GFSNeohellenicMath.woff');
}
.htmlmathparagraph, m|mtext {
font-family: GFS Neohellenic;
}
m|math {
font-family: GFS Neohellenic Math;
}

47
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSans/mathfonts.css

@ -0,0 +1,47 @@
/*
GNU FreeSans is released under the GNU General Public License. See the files in
this directory for details. OpenType MATH support is only available in the
development version.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: FreeSans;
src: url('FreeSans.woff2'), url('FreeSans.woff');
}
@font-face {
font-family: FreeSans;
src: url('FreeSansBold.woff2'), url('FreeSansBold.woff');
font-weight: bold;
}
@font-face {
font-family: FreeSans;
src: url('FreeSansOblique.woff2'), url('FreeSansOblique.woff');
font-style: oblique;
}
@font-face {
font-family: FreeSans;
src: url('FreeSansBoldOblique.woff2'), url('FreeSansBoldOblique.woff');
font-weight: bold;
font-style: oblique;
}
.htmlmathparagraph, m|mtext {
font-family: FreeSans;
}
m|math {
font-family: FreeSans;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

47
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/GNUFreeSerif/mathfonts.css

@ -0,0 +1,47 @@
/*
GNU FreeSerif is released under the GNU General Public License. See the files in
this directory for details. OpenType MATH support is only available in the
development version.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: FreeSerif;
src: url('FreeSerif.woff2'), url('FreeSerif.woff');
}
@font-face {
font-family: FreeSerif;
src: url('FreeSerifBold.woff2'), url('FreeSerifBold.woff');
font-weight: bold;
}
@font-face {
font-family: FreeSerif;
src: url('FreeSerifItalic.woff2'), url('FreeSerifItalic.woff');
font-style: italic;
}
@font-face {
font-family: FreeSerif;
src: url('FreeSerifBoldItalic.woff2'), url('FreeSerifBoldItalic.woff');
font-weight: bold;
font-style: italic;
}
.htmlmathparagraph, m|mtext {
font-family: FreeSerif;
}
m|math {
font-family: FreeSerif;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/EBGaramond12-Regular.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/Garamond-Math.woff2

Binary file not shown.

35
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Garamond/mathfonts.css

@ -0,0 +1,35 @@
/*
The Garamond fonts are released under the SIL Open Font License. See the files
in this directory for details.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: EB Garamond;
src: local('EBGaramond12-Regular'),
url('EBGaramond12-Regular.woff2'),
url('EBGaramond12-Regular.woff');
}
@font-face {
font-family: EB Garamond;
src: local('EBGaramond12-Italic'),
url('EBGaramond12-Italic.woff2'),
url('EBGaramond12-Italic.woff');
font-style: italic;
}
@font-face {
font-family: Garamond Math;
src: local('Garamond-Math'),
url('Garamond-Math.woff2'),
url('Garamond-Math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: EB Garamond;
}
m|math {
font-family: Garamond Math;
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/latinmodern-math.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/lmroman12-regular.woff2

Binary file not shown.

53
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LatinModern/mathfonts.css

@ -0,0 +1,53 @@
/*
The Latin Modern fonts are released under the GUST font license, which is
legally equivalent to the LaTeX Project Public License. See the files in this
directory for details. The fonts can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://www.gust.org.pl/projects/e-foundry/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
/* Latin Modern Roman has various sizes. We use the generic name
"Latin Modern Roman" for the local versions and "LMRoman12" for the Web font.
*/
@font-face {
font-family: LMRoman12;
src: url('lmroman12-regular.woff2'), url('lmroman12-regular.woff');
}
@font-face {
font-family: LMRoman12;
src: url('lmroman12-bold.woff2'), url('lmroman12-bold.woff');
font-weight: bold;
}
@font-face {
font-family: LMRoman12;
src: url('lmroman12-italic.woff2'), url('lmroman12-italic.woff');
font-style: italic;
}
@font-face {
font-family: Latin Modern Math;
src: local('Latin Modern Math'), local('LatinModernMath-Regular'),
url('latinmodern-math.woff2'), url('latinmodern-math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: Latin Modern Roman, LMRoman12;
}
m|math {
font-family: Latin Modern Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusmath-regular.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-bolditalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/libertinusserif-regular.woff2

Binary file not shown.

61
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Libertinus/mathfonts.css

@ -0,0 +1,61 @@
/*
The Libertinus fonts are released under the SIL Open Font and GPL Licenses. See
the files in this directory for details.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: Libertinus Serif;
src: local('Libertinus Serif'), local('LibertinusSerif'),
url('libertinusserif-regular.woff2'),
url('libertinusserif-regular.woff');
}
@font-face {
font-family: Libertinus Serif;
src: local('Libertinus Serif Bold'), local('LibertinusSerif-Bold'),
url('libertinusserif-bold.woff2'),
url('libertinusserif-bold.woff');
font-weight: bold;
}
@font-face {
font-family: Libertinus Serif;
src: local('Libertinus Serif Italic'), local('LibertinusSerif-Italic'),
url('libertinusserif-italic.woff2'),
url('libertinusserif-italic.woff');
font-style: italic;
}
@font-face {
font-family: Libertinus Serif;
src: local('Libertinus Serif Bold Italic'),
local('LibertinusSerif-BoldItalic'),
url('libertinusserif-bolditalic.woff2'),
url('libertinusserif-bolditalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: Libertinus Math;
src: local('Libertinus Math'), local('LibertinusMath'),
url('libertinusmath-regular.woff2'),
url('libertinusmath-regular.woff');
}
.htmlmathparagraph, m|mtext {
font-family: Libertinus Serif;
}
m|math {
font-family: Libertinus Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* No math script */
m|*.calligraphic {
}

58
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/LucidaBright/mathfonts.css

@ -0,0 +1,58 @@
/*
The commercial Lucida Bright fonts can be obtained from
http://tug.org/store/lucida/opentype.html and some Web services might
provide them as Web fonts. See also
http://www.microsoft.com/typography/fonts/family.aspx?FID=186
http://www.microsoft.com/typography/fonts/family.aspx?FID=217
Warning: The CSS rules below have not been tested.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
/* Uncomment and complete the URLs if you wish to use Web fonts */
/*
@font-face {
font-family: Lucida Bright;
src: local('Lucida Bright'), url('...');
}
@font-face {
font-family: Lucida Bright;
src: local('Lucida Bright Demibold'), url('...');
font-weight: bolder;
}
@font-face {
font-family: Lucida Bright;
src: local('Lucida Bright Italic'), url('...');
font-style: italic;
}
@font-face {
font-family: Lucida Bright;
src: local('Lucida Bright Demibold Italic'), url('...');
font-weight: bolder;
font-style: italic;
}
@font-face {
font-family: Lucida Bright Math;
src: local('Lucida Bright Math'), url('...');
}
*/
.htmlmathparagraph, m|mtext {
font-family: Lucida Bright;
}
m|math {
font-family: Lucida Bright Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* TODO: verify whether calligraphic letters are available in this font */
m|*.calligraphic {
}

37
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/Minion/mathfonts.css

@ -0,0 +1,37 @@
/*
The commercial Minion Math fonts and can be obtained from
http://www.typoma.com/en/fonts.html and some Web services might provide them as
Web fonts.
Warning: The CSS rules below have not been tested. More rules should probably
be added to make this work correctly.
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
/* Uncomment and complete the URLs if you wish to use Web fonts */
/*
@font-face {
font-family: Minion Math;
src: local('Minion Math'), url('...');
}
*/
.htmlmathparagraph, m|mtext {
font-family: Minion Math;
}
m|math {
font-family: Minion Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* TODO: verify whether calligraphic letters are available in this font */
m|*.calligraphic {
}

34
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/NeoEuler/mathfonts.css

@ -0,0 +1,34 @@
/*
Neo Euler is released under the SIL Open Font License. See the files in this
directory for details. The font is still in development. The font does not seem
to have a corresponding "non-MATH" font.
The WOFF fonts have been obtained from
https://github.com/khaledhosny/euler-otf/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: Neo Euler;
src: local('Neo Euler'), url('euler.woff2'), url('euler.woff');
}
.htmlmathparagraph, m|mtext {
font-family: Neo Euler;
}
m|math {
font-family: Neo Euler;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoMath-Regular.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-BoldItalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/STIXTwoText-Regular.woff2

Binary file not shown.

69
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/STIX/mathfonts.css

@ -0,0 +1,69 @@
/*
The STIX fonts are released under the SIL Open Font License. See the files in
this directory for details. The font can be obtained from several TeX
distributions or package managers.
The WOFF fonts have been obtained from
http://downloads.sourceforge.net/project/stixfonts/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: STIX Two Text;
src: local('STIXTwoText'),
url('STIXTwoText-Regular.woff2'),
url('STIXTwoText-Regular.woff');
}
@font-face {
font-family: STIX Two Text;
src: local('STIXTwoText-Bold'),
url('STIXTwoText-Bold.woff2'),
url('STIXTwoText-Bold.woff');
font-weight: bold;
}
@font-face {
font-family: STIX Two Text;
src: local('STIXTwoText-Italic'),
url('STIXTwoText-Italic.woff2'),
url('STIXTwoText-Italic.woff');
font-style: italic;
}
@font-face {
font-family: STIX Two Text;
src: local('STIXTwoText-BoldItalic'),
url('STIXTwoText-BoldItalic.woff2'),
url('STIXTwoText-BoldItalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: STIX Two Math;
src: local('STIXTwoMath-Regular'),
url('STIXTwoMath-Regular.woff2'),
url('STIXTwoMath-Regular.woff');
}
.htmlmathparagraph, m|mtext {
font-family: STIX Two Text;
}
m|math {
font-family: STIX Two Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
@font-feature-values STIX Two Math { @styleset { calligraphic: 1; } }
m|*.calligraphic {
font-variant-alternates: styleset(calligraphic); /* Recommended syntax */
font-feature-settings: 'ss01'; /* OpenType feature syntax */
-moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'ss01'; /* Blink syntax */
}

62
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/mathfonts.css

@ -0,0 +1,62 @@
/*
The TeX Gyre Bonum fonts are released under the GUST font license, which is
legally equivalent to the LaTeX Project Public License. See the files in this
directory for details. The fonts can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://www.gust.org.pl/projects/e-foundry/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: TeX Gyre Bonum;
src: local('TeXGyreBonum-Regular'),
url('texgyrebonum-regular.woff2'), url('texgyrebonum-regular.woff');
}
@font-face {
font-family: TeX Gyre Bonum;
src: local('TeXGyreBonum-Bold'),
url('texgyrebonum-bold.woff2'), url('texgyrebonum-bold.woff');
font-weight: bold;
}
@font-face {
font-family: TeX Gyre Bonum;
src: local('TeXGyreBonum-Italic'),
url('texgyrebonum-italic.woff2'), url('texgyrebonum-italic.woff');
font-style: italic;
}
@font-face {
font-family: TeX Gyre Bonum;
src: local('TeXGyreBonum-BoldItalic'),
url('texgyrebonum-bolditalic.woff2'),
url('texgyrebonum-bolditalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: TeX Gyre Bonum Math;
src: local('TeX Gyre Bonum Math'), local('TeXGyreBonumMath-Regular'),
url('texgyrebonum-math.woff2'),
url('texgyrebonum-math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: TeX Gyre Bonum;
}
m|math {
font-family: TeX Gyre Bonum Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-bolditalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-math.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreBonum/texgyrebonum-regular.woff2

Binary file not shown.

63
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/mathfonts.css

@ -0,0 +1,63 @@
/*
The TeX Gyre Pagella fonts are released under the GUST font license, which is
legally equivalent to the LaTeX Project Public License. See the files in this
directory for details. The fonts can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://www.gust.org.pl/projects/e-foundry/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: TeX Gyre Pagella;
src: local('TeXGyrePagella-Regular'),
url('texgyrepagella-regular.woff2'),
url('texgyrepagella-regular.woff');
}
@font-face {
font-family: TeX Gyre Pagella;
src: local('TeXGyrePagella-Bold'),
url('texgyrepagella-bold.woff2'), url('texgyrepagella-bold.woff');
font-weight: bold;
}
@font-face {
font-family: TeX Gyre Pagella;
src: local('TeXGyrePagella-Italic'),
url('texgyrepagella-italic.woff2'), url('texgyrepagella-italic.woff');
font-style: italic;
}
@font-face {
font-family: TeX Gyre Pagella;
src: local('TeXGyrePagella-BoldItalic'),
url('texgyrepagella-bolditalic.woff2'),
url('texgyrepagella-bolditalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: TeX Gyre Pagella Math;
src: local('TeX Gyre Pagella Math'), local('TeXGyrePagellaMath-Regular'),
url('texgyrepagella-math.woff2'),
url('texgyrepagella-math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: TeX Gyre Pagella;
}
m|math {
font-family: TeX Gyre Pagella Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyrePagella/texgyrepagella-math.woff2

Binary file not shown.

61
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/mathfonts.css

@ -0,0 +1,61 @@
/*
The TeX Gyre Schola fonts are released under the GUST font license, which is
legally equivalent to the LaTeX Project Public License. See the files in this
directory for details. The fonts can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://www.gust.org.pl/projects/e-foundry/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: TeX Gyre Schola;
src: local('TeXGyreSchola-Regular'),
url('texgyreschola-regular.woff2'), url('texgyreschola-regular.woff');
}
@font-face {
font-family: TeX Gyre Schola;
src: local('TeXGyreSchola-Bold'),
url('texgyreschola-bold.woff2'), url('texgyreschola-bold.woff');
font-weight: bold;
}
@font-face {
font-family: TeX Gyre Schola;
src: local('TeXGyreSchola-Italic'),
url('texgyreschola-italic.woff2'), url('texgyreschola-italic.woff');
font-style: italic;
}
@font-face {
font-family: TeX Gyre Schola;
src: local('TeXGyreSchola-BoldItalic'),
url('texgyreschola-bolditalic.woff2'),
url('texgyreschola-bolditalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: TeX Gyre Schola Math;
src: local('TeX Gyre Schola Math'), local('TeXGyreScholaMath-Regular'),
url('texgyreschola-math.woff2'), url('texgyreschola-math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: TeX Gyre Schola;
}
m|math {
font-family: TeX Gyre Schola Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-bolditalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-math.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreSchola/texgyreschola-regular.woff2

Binary file not shown.

60
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/mathfonts.css

@ -0,0 +1,60 @@
/*
The TeX Gyre Termes fonts are released under the GUST font license, which is
legally equivalent to the LaTeX Project Public License. See the files in this
directory for details. The fonts can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://www.gust.org.pl/projects/e-foundry/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: TeX Gyre Termes;
src: local('TeXGyreTermes-Regular'),
url('texgyretermes-regular.woff2'), url('texgyretermes-regular.woff');
}
@font-face {
font-family: TeX Gyre Termes;
src: local('TeXGyreTermes-Bold'),
url('texgyretermes-bold.woff2'), url('texgyretermes-bold.woff');
font-weight: bold;
}
@font-face {
font-family: TeX Gyre Termes;
src: local('TeXGyreTermes-Italic'),
url('texgyretermes-italic.woff2'), url('texgyretermes-italic.woff');
font-style: italic;
}
@font-face {
font-family: TeX Gyre Termes;
src: local('TeXGyreTermes-BoldItalic'),
url('texgyretermes-bolditalic.woff2'), url('texgyretermes-bolditalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: TeX Gyre Termes Math;
src: local('TeX Gyre Termes Math'), local('TeXGyreTermesMath-Regular'),
url('texgyretermes-math.woff2'), url('texgyretermes-math.woff');
}
.htmlmathparagraph, m|mtext {
font-family: TeX Gyre Termes;
}
m|math {
font-family: TeX Gyre Termes Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
/* Calligraphic letters do not seem to be available */
m|*.calligraphic {
}

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-bolditalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-math.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/TeXGyreTermes/texgyretermes-regular.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-BoldItalic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Italic.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITS-Regular.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Bold.woff2

Binary file not shown.

BIN
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/XITSMath-Regular.woff2

Binary file not shown.

69
io.sc.platform.core.frontend/public/webjars/mathfonts/1.0.0/XITS/mathfonts.css

@ -0,0 +1,69 @@
/*
XITS is released under the SIL Open Font License. See the files in this
directory for details. The font can be obtained from several TeX distributions
or package managers.
The WOFF fonts have been obtained from
http://mirrors.ctan.org/fonts/
*/
@namespace url('http://www.w3.org/1999/xhtml');
@namespace m url('http://www.w3.org/1998/Math/MathML');
@font-face {
font-family: XITS;
src: local('XITS'),
url('XITS-Regular.woff2'), url('XITS-Regular.woff');
}
@font-face {
font-family: XITS;
src: local('XITS Bold'), local('XITS-Bold'),
url('XITS-Bold.woff2'), url('XITS-Bold.woff');
font-weight: bold;
}
@font-face {
font-family: XITS;
src: local('XITS Italic'), local('XITS-Italic'),
url('XITS-Italic.woff2'), url('XITS-Italic.woff');
font-style: italic;
}
@font-face {
font-family: XITS;
src: local('XITS Bold Italic'), local('XITS-BoldItalic'),
url('XITS-BoldItalic.woff2'), url('XITS-BoldItalic.woff');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: XITS Math;
src: local('XITS Math'), local('XITSMath-Regular'),
url('XITSMath-Regular.woff2'), url('XITSMath-Regular.woff');
}
@font-face {
font-family: XITS Math;
src: local('XITS Math Bold'), local('XITSMath-Bold'),
url('XITSMath-Bold.woff2'), url('XITSMathBold.woff');
font-weight: bold;
}
.htmlmathparagraph, m|mtext {
font-family: XITS;
}
m|math {
font-family: XITS Math;
}
.oldstylenumbers {
font-variant-numeric: oldstyle-nums; /* Recommended syntax */
font-feature-settings: 'onum'; /* OpenType feature syntax */
-moz-font-feature-settings: 'onum'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'onum'; /* Blink syntax */
}
@font-feature-values XITS Math { @styleset { calligraphic: 1; } }
m|*.calligraphic {
font-variant-alternates: styleset(calligraphic); /* Recommended syntax */
font-feature-settings: 'ss01'; /* OpenType feature syntax */
-moz-font-feature-settings: 'ss01'; /* Gecko <= 33 syntax */
-webkit-font-feature-settings: 'ss01'; /* Blink syntax */
}

2
io.sc.platform.core.frontend/src/components/index.ts

@ -3,7 +3,6 @@
*/
import component_testcase_formElements from '@/views/FormElements.vue';
import component_testcase_xxx from '@/views/likm/xxx.vue';
import component_testcase_likmDialog from '@/views/likm/Dialog.vue';
import component_testcase_likmDrawer from '@/views/likm/Drawer.vue';
import component_testcase_likmForm from '@/views/likm/Form.vue';
@ -16,7 +15,6 @@ import component_testcase_likmTreeGrid from '@/views/likm/TreeGrid.vue';
const localComponents = {
'component.testcase.formElements': component_testcase_formElements,
'component.testcase.xxx': component_testcase_xxx,
'component.testcase.likmDialog': component_testcase_likmDialog,
'component.testcase.likmDrawer': component_testcase_likmDrawer,
'component.testcase.likmForm': component_testcase_likmForm,

2
io.sc.platform.core.frontend/src/i18n/messages_zh_CN.json

@ -1,4 +1,4 @@
{
"menu.testcase": "测试用例",
"menu.testcase.formElements": "表单控件"
"menu.testcase.formElements": "表单控件",
}

8
io.sc.platform.core.frontend/src/platform/components/echarts/WEcharts.vue

@ -44,27 +44,32 @@ const getSize = () => {
* 初始化 Echarts
*/
const initEcharts = () => {
console.log('echarts initEcharts');
const size = getSize();
const dom: HTMLElement | null = echartsRef.value;
echartsObject = echarts.init(dom, null, size);
};
const setOption = (option) => {
console.log('echarts setOption');
echartsOption = option;
echartsObject.setOption(echartsOption);
};
const setOptionFromUrl = () => {
console.log('echarts setOptionFromUrl');
axios.get(props.optionUrl).then((response) => {
setOption(response.data);
});
};
const resize = (size) => {
console.log('echarts resized');
echartsObject?.resize(size);
};
onMounted(() => {
console.log('echarts onMounted');
initEcharts();
if (props.optionUrl) {
setOptionFromUrl();
@ -74,6 +79,7 @@ onMounted(() => {
});
onUpdated(() => {
console.log('echarts onUpdated');
if (props.optionUrl) {
setOptionFromUrl();
} else {
@ -85,6 +91,7 @@ onUpdated(() => {
* 语言改变事件
*/
eventBus.on('onLocaleChanged', (local) => {
console.log('echarts onLocaleChanged');
echartsObject?.setOption(echartsOption);
echartsObject?.resize();
});
@ -93,6 +100,7 @@ eventBus.on('onLocaleChanged', (local) => {
* 窗口大小发生变化
*/
const onResize = (size) => {
console.log('echarts onResize');
resize(size);
};

188
io.sc.platform.core.frontend/src/platform/components/expression/WExpression.vue

@ -0,0 +1,188 @@
<template>
<div class="border border-gray-200" style="min-width: 600px">
<div v-if="!readOnly" class="row q-gutter-sm py-1 border-b border-b-gray-200">
<Toolbar :container="instance" :zoom="zoom"></Toolbar>
</div>
<div style="overflow: auto">
<math
ref="mathEditorRef"
display="inline"
:class="`p-2 select-none text-${zoom}`"
@contextmenu="contextmenu"
@mouseover="mouseover"
@mouseout="mouseout"
@dblclick="dblclick"
@dragover="dragover"
@dragleave="dragleave"
@drop="drop"
>
</math>
<ContextMenu ref="contextMenuRef"></ContextMenu>
<Editor ref="editorRef"></Editor>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import { dom } from 'quasar';
import { ZoomLevels } from '@/platform/components/expression/utils/ZoomLevels';
import { VueTools } from '@/platform';
import Toolbar from './toolbar/Toolbar.vue';
import ContextMenu from './context-menu/ContextMenu.vue';
import Editor from './editor/Editor.vue';
import { getCurrentInstance } from 'vue';
import { onUpdated } from 'vue';
const props = defineProps({
modelValue: { type: String, default: '' },
zoom: { type: String, default: ZoomLevels.defaultName },
readOnly: { type: Boolean, default: false },
required: { type: Boolean, default: false },
restore: { type: Boolean, default: false },
form: { type: Object, default: undefined },
onChange: {
type: Function,
default: () => {},
},
showIf: {
type: Function,
default: () => {
return true;
},
},
requiredIf: {
type: Function,
default: undefined,
},
readOnlyIf: {
type: Function,
default: () => {
return false;
},
},
disableIf: {
type: Function,
default: () => {
return false;
},
},
});
const emit = defineEmits(['update:modelValue', 'change']);
const { height } = dom;
const mathEditorRef = ref();
const contextMenuRef = ref();
const editorRef = ref();
const highLightBgColor = 'bg-orange-500';
const contextmenu = (event) => {
event.preventDefault();
contextMenuRef.value.show(event.srcElement);
};
const dblclick = (event) => {
editorRef.value.show(event.srcElement);
};
const mouseover = (event) => {
event.preventDefault();
const tagName = event.target.tagName.toLowerCase();
if (tagName === 'math' || tagName === 'mspace') {
return;
}
event.target.className = highLightBgColor;
};
const mouseout = (event) => {
event.preventDefault();
const tagName = event.target.tagName.toLowerCase();
if (tagName === 'math' || tagName === 'mspace') {
return;
}
event.target.className = '';
};
const dragover = (event) => {
event.preventDefault();
const tagName = event.target.tagName.toLowerCase();
if (tagName === 'mspace') {
event.target.className = 'bg-red-900';
}
};
const dragleave = (event) => {
event.preventDefault();
const tagName = event.target.tagName.toLowerCase();
if (tagName === 'math') {
return;
}
event.target.className = '';
};
const drop = (event) => {
event.preventDefault();
const tagName = event.target.tagName.toLowerCase();
if (tagName === 'math') {
return;
}
event.target.outerHTML = event.target.outerHTML + event.dataTransfer.getData('math');
event.target.className = '';
setTimeout(refresh, 100);
};
const init = () => {
if (props.modelValue) {
mathEditorRef.value.innerHTML = '<mspace postion="left"></mspace>' + props.modelValue + '<mspace postion="right"></mspace>';
} else {
mathEditorRef.value.innerHTML = '<mspace postion="left"></mspace>';
}
refresh();
};
const refresh = () => {
setTimeout(() => {
//zoomLevel = Tools.isEmpty(zoomLevel) ? ZoomLevelMap[props.zoom] : zoomLevel;
//const w = zoomLevel > 10 ? 10 : zoomLevel > 8 ? 8 : zoomLevel > 6 ? 6 : zoomLevel > 4 ? 4 : 2;
const w = 2;
const mspaces = mathEditorRef.value.getElementsByTagName('mspace');
for (const mspace of mspaces) {
let h = 30;
let element = null;
const position = mspace.getAttribute('position');
if (position === 'left') {
element = mspace.nextElementSibling;
} else if (position === 'right') {
element = mspace.previousElementSibling;
}
if (element) {
h = window.Math.ceil(height(element));
}
h = h > 20 ? h : 20;
mspace.className = highLightBgColor;
mspace.setAttribute('width', w + 'px');
mspace.setAttribute('height', h + 'px');
}
}, 0);
};
const getEditor = () => {
return mathEditorRef.value;
};
onMounted(() => {
init();
});
onUpdated(() => {
init();
});
defineExpose({
refresh,
getEditor,
});
const instance = getCurrentInstance();
VueTools.expose2Instance(instance);
</script>

33
io.sc.platform.core.frontend/src/platform/components/expression/dialog/XmlDialog.vue

@ -0,0 +1,33 @@
<template>
<w-dialog ref="dialogRef" :title="$t('xml')" width="800px" :can-maximize="false">
<div class="py-1"></div>
<w-code-mirror v-model="xml" outlined :rows="20" lang="xml" />
</w-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const dialogRef = ref();
const xml = ref();
const open = (container) => {
const parser = new DOMParser();
const mathElementClone = parser.parseFromString(container.getMathElement().outerHTML, 'text/xml');
const elements = mathElementClone.querySelectorAll('*');
for (const element of elements) {
const names = element.getAttributeNames();
for (const name of names) {
if (name !== 'position') {
element.removeAttribute(name);
}
}
}
const serializer = new XMLSerializer();
let content = serializer.serializeToString(mathElementClone);
xml.value = content;
dialogRef.value.show();
};
defineExpose({
open,
});
</script>

66
io.sc.platform.core.frontend/src/platform/components/expression/editor/Editor.vue

@ -0,0 +1,66 @@
<template>
<Teleport to="body">
<div ref="editorRef" class="absolute bg-white z-max text-center border-dashed text-nowrap" contenteditable="true" @blur="blur" @keydown="keydown"></div>
</Teleport>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { dom } from 'quasar';
const { offset, height, width } = dom;
const editorRef = ref();
let targetElement = null;
const show = (element) => {
targetElement = element;
editorRef.value.innerHTML = element.innerHTML;
editorRef.value.style.display = '';
const position = offset(element);
const minWidth = 50;
const minHeight = 20;
let w = width(element);
let h = height(element);
let l = position.left;
let t = position.top;
if (w < minWidth) {
l = l - (minWidth - w) / 2;
w = minWidth;
}
if (h < minHeight) {
t = t - (minHeight - h) / 2;
h = minHeight;
}
editorRef.value.style.left = l + 'px';
editorRef.value.style.top = t + 'px';
editorRef.value.style.minWidth = w + 'px';
editorRef.value.style.height = h + 'px';
editorRef.value.style.lineHeight = h + 'px';
editorRef.value.style.fontSize = h - 5 + 'px';
//
editorRef.value.focus();
const range = document.createRange();
range.setStart(editorRef.value, 1);
const selection = getSelection();
selection.removeAllRanges();
selection.addRange(range);
};
const blur = () => {
targetElement.innerHTML = editorRef.value.innerHTML;
editorRef.value.style.display = 'none';
};
const keydown = (event) => {
if (event.key === 'Enter') {
event.preventDefault();
event.stopPropagation();
targetElement.innerHTML = editorRef.value.innerHTML;
editorRef.value.style.display = 'none';
}
};
defineExpose({
show,
});
</script>

139
io.sc.platform.core.frontend/src/platform/components/expression/toolbar/Toolbar.vue

@ -0,0 +1,139 @@
<template>
<q-toolbar style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px">
<!-- 操作 -->
<Xml :container="container"></Xml>
<Clean :container="container"></Clean>
<q-separator vertical />
<ZoomIn :container="container" :zoom="zoomName" @zoomed="zoomed"></ZoomIn>
<ZoomOut :container="container" :zoom="zoomName" @zoomed="zoomed"></ZoomOut>
<q-separator vertical />
<Undo :container="container"></Undo>
<Redo :container="container"></Redo>
<q-separator vertical />
<!-- 基本 -->
<Variable :container="container"></Variable>
<Addition :container="container"></Addition>
<Subtraction :container="container"></Subtraction>
<Multiply :container="container"></Multiply>
<Division :container="container"></Division>
<LeftParenthesis :container="container"></LeftParenthesis>
<RightParenthesis :container="container"></RightParenthesis>
<q-separator vertical />
<!-- 逻辑 -->
<And :container="container"></And>
<Or :container="container"></Or>
<Not :container="container"></Not>
<q-separator vertical />
<!-- 比较 -->
<Equals :container="container"></Equals>
<Gt :container="container"></Gt>
<Ge :container="container"></Ge>
<Lt :container="container"></Lt>
<Le :container="container"></Le>
<q-separator vertical />
<!-- 数学 -->
<q-btn :label="$t('math.toolbar.math')" stretch flat dense padding="0px 10px" icon-right="arrow_drop_down">
<q-menu>
<q-list>
<q-item clickable>
<q-item-section><Power :container="container"></Power></q-item-section>
</q-item>
<q-item clickable>
<q-item-section><Extracting :container="container"></Extracting></q-item-section>
</q-item>
<q-item clickable>
<q-item-section><Logarithm :container="container"></Logarithm></q-item-section>
</q-item>
<q-item clickable>
<q-item-section><Pi :container="container"></Pi></q-item-section>
</q-item>
<q-item clickable>
<q-item-section><E :container="container"></E></q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
<!-- 函数 -->
<q-btn :label="$t('math.toolbar.functions')" stretch flat dense padding="0px 10px" icon-right="arrow_drop_down">
<q-menu>
<q-list>
<!-- 数值处理函数 -->
<Number></Number>
<q-separator inset spaced />
<!-- 字符串处理函数 -->
<StringVue></StringVue>
<q-separator inset spaced />
<!-- 日期处理函数 -->
<Date></Date>
<q-separator inset spaced />
<!-- 三角函数 -->
<Trigonometric></Trigonometric>
<q-separator inset spaced />
<!-- 概率函数 -->
<Probability></Probability>
<q-separator inset spaced />
<!-- 格式化函数 -->
<Formater></Formater>
</q-list>
</q-menu>
</q-btn>
</q-toolbar>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { ZoomLevels } from '@/platform/components/expression/utils/ZoomLevels';
import Xml from './actions/Xml.vue';
import Clean from './actions/Clean.vue';
import ZoomIn from './actions/ZoomIn.vue';
import ZoomOut from './actions/ZoomOut.vue';
import Undo from './actions/Undo.vue';
import Redo from './actions/Redo.vue';
import Variable from './base/Variable.vue';
import Addition from './base/Addition.vue';
import Subtraction from './base/Subtraction.vue';
import Multiply from './base/Multiply.vue';
import Division from './base/Division.vue';
import LeftParenthesis from './base/LeftParenthesis.vue';
import RightParenthesis from './base/RightParenthesis.vue';
import And from './base/And.vue';
import Or from './base/Or.vue';
import Not from './base/Not.vue';
import Equals from './base/Equals.vue';
import Gt from './base/Gt.vue';
import Lt from './base/Lt.vue';
import Ge from './base/Ge.vue';
import Le from './base/Le.vue';
import E from './math/E.vue';
import Extracting from './math/Extracting.vue';
import Logarithm from './math/Logarithm.vue';
import Pi from './math/Pi.vue';
import Power from './math/Power.vue';
import Number from './functions/Number.vue';
import StringVue from './functions/String.vue';
import Date from './functions/Date.vue';
import Trigonometric from './functions/Trigonometric.vue';
import Probability from './functions/Probability.vue';
import Formater from './functions/Formater.vue';
const props = defineProps({
container: { type: Object, default: undefined },
zoom: { type: String, default: ZoomLevels.defaultName },
});
const zoomName = ref(props.zoom);
const zoomed = (name) => {
zoomName.value = name;
};
</script>

10
io.sc.platform.core.frontend/src/platform/components/expression/toolbar/actions/Redo.vue

@ -0,0 +1,10 @@
<template>
<q-btn :title="$t('math.toolbar.actions.redo')" stretch flat no-caps icon="redo" padding="4px 10px" @click="redo"></q-btn>
</template>
<script setup lang="ts">
const props = defineProps({
container: { type: Object, default: undefined },
});
const redo = () => {};
</script>

10
io.sc.platform.core.frontend/src/platform/components/expression/toolbar/actions/Undo.vue

@ -0,0 +1,10 @@
<template>
<q-btn :title="$t('math.toolbar.actions.undo')" stretch flat no-caps icon="undo" padding="4px 10px" @click="undo"></q-btn>
</template>
<script setup lang="ts">
const props = defineProps({
container: { type: Object, default: undefined },
});
const undo = () => {};
</script>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save