diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
index 3d0d8e93b8..593b86a942 100644
--- a/.github/workflows/CI.yml
+++ b/.github/workflows/CI.yml
@@ -79,3 +79,35 @@ jobs:
run: |
java -jar ./deploy/mmt.jar lmh install ${{ env.MMT_ARCHIVE }}@${{ env.MMT_ARCHIVE_VERSION }}
java -jar ./deploy/mmt.jar :file ${{ env.MMT_ARCHIVE_ROOT }}/${{ env.MMT_ARCHIVE }}/build.msl
+
+ - name: Test '${{ env.MMT_ARCHIVE }}'
+ if: always() && steps.setup.outcome == 'success'
+ env:
+ MMT_ARCHIVE: 'MMT/LFX'
+ run: |
+ java -jar ./deploy/mmt.jar lmh install ${{ env.MMT_ARCHIVE }}@${{ env.MMT_ARCHIVE_VERSION }}
+ java -jar ./deploy/mmt.jar :file ${{ env.MMT_ARCHIVE_ROOT }}/${{ env.MMT_ARCHIVE }}/build.msl
+
+ - name: Test '${{ env.MMT_ARCHIVE }}'
+ if: always() && steps.setup.outcome == 'success'
+ env:
+ MMT_ARCHIVE: 'Test/General'
+ run: |
+ java -jar ./deploy/mmt.jar lmh install ${{ env.MMT_ARCHIVE }}@${{ env.MMT_ARCHIVE_VERSION }}
+ java -jar ./deploy/mmt.jar :file ${{ env.MMT_ARCHIVE_ROOT }}/${{ env.MMT_ARCHIVE }}/build.msl
+
+ - name: Test '${{ env.MMT_ARCHIVE }}'
+ if: always() && steps.setup.outcome == 'success'
+ env:
+ MMT_ARCHIVE: 'MitM/Foundation'
+ run: |
+ java -jar ./deploy/mmt.jar lmh install ${{ env.MMT_ARCHIVE }}@${{ env.MMT_ARCHIVE_VERSION }}
+ java -jar ./deploy/mmt.jar :file ${{ env.MMT_ARCHIVE_ROOT }}/${{ env.MMT_ARCHIVE }}/build.msl
+
+ - name: Test '${{ env.MMT_ARCHIVE }}'
+ if: always() && steps.setup.outcome == 'success'
+ env:
+ MMT_ARCHIVE: 'MitM/Core'
+ run: |
+ java -jar ./deploy/mmt.jar lmh install ${{ env.MMT_ARCHIVE }}@${{ env.MMT_ARCHIVE_VERSION }}
+ java -jar ./deploy/mmt.jar :file ${{ env.MMT_ARCHIVE_ROOT }}/${{ env.MMT_ARCHIVE }}/build.msl
diff --git a/src/intellij-mmt/src/info/kwarc/mmt/intellij/checking/Checker.scala b/src/intellij-mmt/src/info/kwarc/mmt/intellij/checking/Checker.scala
index c1b45d4086..1a1451895b 100644
--- a/src/intellij-mmt/src/info/kwarc/mmt/intellij/checking/Checker.scala
+++ b/src/intellij-mmt/src/info/kwarc/mmt/intellij/checking/Checker.scala
@@ -70,7 +70,7 @@ class Checker(controller: Controller,ev : ErrorViewer) {
e match {
case s: SourceError =>
- (s.ref.region, s.mainMessage, s.extraMessages, s.level == Level.Warning)
+ (s.ref.region, s.mainMessage, s.extraMessages, s.level == Level.Warning || e.excuse.isDefined)
case e: Invalid =>
var mainMessage = e.shortMsg
var extraMessages: List[String] = e.extraMessage.split("\n").toList
@@ -106,9 +106,9 @@ class Checker(controller: Controller,ev : ErrorViewer) {
mainMessage = "error with unknown location: " + mainMessage
SourceRef(utils.FileURI(file), SourceRegion(SourcePosition(0, 0, 0), SourcePosition(0, 0, 0)))
}
- (ref.region, mainMessage, extraMessages.filter(_.trim != ""),e.level == Level.Warning)
+ (ref.region, mainMessage, extraMessages.filter(_.trim != ""),e.level == Level.Warning || e.excuse.isDefined)
case e: Error =>
- (SourceRegion.none, "error with unknown location: " + e.getMessage, e.extraMessage.split("\n").toList,e.level==Level.Warning)
+ (SourceRegion.none, "error with unknown location: " + e.getMessage, e.extraMessage.split("\n").toList,e.level==Level.Warning || e.excuse.isDefined)
}
}
}
diff --git a/src/mmt-api/resources/mmt-web/stex/htmlfragments/header.xml b/src/mmt-api/resources/mmt-web/stex/htmlfragments/header.xml
index 8016541b67..39637a35b4 100644
--- a/src/mmt-api/resources/mmt-web/stex/htmlfragments/header.xml
+++ b/src/mmt-api/resources/mmt-web/stex/htmlfragments/header.xml
@@ -5,7 +5,6 @@
-
\ No newline at end of file
diff --git a/src/mmt-api/resources/mmt-web/stex/htmlfragments/highlights.css b/src/mmt-api/resources/mmt-web/stex/htmlfragments/highlights.css
index 3db186e112..20e3b1db48 100644
--- a/src/mmt-api/resources/mmt-web/stex/htmlfragments/highlights.css
+++ b/src/mmt-api/resources/mmt-web/stex/htmlfragments/highlights.css
@@ -1,5 +1,5 @@
.definiendum {
- color: #00FF00;
+ color: #00BB00;
font-weight: bold;
}
.varcomp {
diff --git a/src/mmt-api/resources/mmt-web/vollki/guidedtours.html b/src/mmt-api/resources/mmt-web/vollki/guidedtours.html
index 484620c05f..106010a44e 100644
--- a/src/mmt-api/resources/mmt-web/vollki/guidedtours.html
+++ b/src/mmt-api/resources/mmt-web/vollki/guidedtours.html
@@ -21,10 +21,10 @@
var edoc = document.getElementById("entrydoc");
var user = document.getElementById("usermodel");
var lang = document.getElementById("language");
- xhr.open("GET","/:vollki/tour?path=" + edoc.options[edoc.selectedIndex].text + "&user=" + user.options[user.selectedIndex].text + "&lang=" + lang.options[lang.selectedIndex].value, true);
+ xhr.open("GET","/:vollki/tour?path=" + edoc.options[edoc.selectedIndex].value + "&user=" + user.options[user.selectedIndex].value + "&lang=" + lang.options[lang.selectedIndex].value, true);
xhr.setRequestHeader('Content-type', 'text/html');
xhr.onreadystatechange = function(e) {
- if(xhr.readyState == 4 && xhr.status == 200) {
+ if(xhr.readyState == 4 && xhr.status == 200) {
con.innerHTML = xhr.responseText;
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
}
@@ -40,10 +40,10 @@
var lang = document.getElementById("language");
var elem = document.getElementById(id + '-collapse');
var xhr = new XMLHttpRequest();
- xhr.open("GET","/:vollki/frag?path=" + id + "&lang=" + lang.options[lang.selectedIndex].value, true);
+ xhr.open("GET","/:vollki/frag?path=" + id + "&lang=" + lang.options[lang.selectedIndex].value, true);
xhr.setRequestHeader('Content-type', 'text/html');
xhr.onreadystatechange = function(e) {
- if(xhr.readyState == 4 && xhr.status == 200) {
+ if(xhr.readyState == 4 && xhr.status == 200) {
elem.innerHTML = xhr.responseText;
elem.style.display = 'flex';
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
diff --git a/src/mmt-api/resources/versioning/system.txt b/src/mmt-api/resources/versioning/system.txt
index fb5b513039..1d975bef24 100644
--- a/src/mmt-api/resources/versioning/system.txt
+++ b/src/mmt-api/resources/versioning/system.txt
@@ -1 +1 @@
-21.0.0
+22.0.0
diff --git a/src/mmt-api/src/main/info/kwarc/mmt/api/archives/Archive.scala b/src/mmt-api/src/main/info/kwarc/mmt/api/archives/Archive.scala
index e390c02364..db85fc3a6a 100644
--- a/src/mmt-api/src/main/info/kwarc/mmt/api/archives/Archive.scala
+++ b/src/mmt-api/src/main/info/kwarc/mmt/api/archives/Archive.scala
@@ -117,6 +117,10 @@ class Archive(val root: File, val properties: mutable.Map[String, String], val r
val TraverseMode(filter, filterDir, parallel) = mode
def recurse(n: String): List[A] =
traverse(dim, in / n, mode, sendLog)(onFile, onDir).toList
+
+ lazy val reg = properties.get("ignore").map(_.replace(".","\\.").replace("*",".*").r)
+ // if (reg.exists(_.matches("/" + inPath.toString))
+ def regfilter(f : File) : Boolean = !reg.exists(_.matches("/" + (this / source).relativize(f).toString))
val inFile = this / dim / in
val inFileName = inFile.getName
if (inFile.isDirectory) {
@@ -128,7 +132,7 @@ class Archive(val root: File, val properties: mutable.Map[String, String], val r
if (sendLog) log("leaving " + inFile)
Some(result)
} else None
- } else if (filter(inFileName) && filterDir(inFile.up.getName)) {
+ } else if (filter(inFileName) && regfilter(inFile) && filterDir(inFile.up.getName)) {
if (!forClean && !inFile.existsCompressed) {
throw ArchiveError(id, "file does not exist: " + inFile)
} else
diff --git a/src/mmt-api/src/main/info/kwarc/mmt/api/objects/ModuleOperators.scala b/src/mmt-api/src/main/info/kwarc/mmt/api/objects/ModuleOperators.scala
index 67f22baa1e..381f81c8d8 100644
--- a/src/mmt-api/src/main/info/kwarc/mmt/api/objects/ModuleOperators.scala
+++ b/src/mmt-api/src/main/info/kwarc/mmt/api/objects/ModuleOperators.scala
@@ -327,7 +327,7 @@ object TheoryExp {
* @param all if false, stop after the first meta-theory, true by default
*/
def metas(thy: Term, all: Boolean = true)(implicit lib: Lookup): List[MPath] = thy match {
- case OMMOD(p) =>
+ case OMPMOD(p,_) =>
val t = lib.getAs(classOf[AbstractTheory],p)
t.meta match {
case None =>
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/FragmentExtension.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/FragmentExtension.scala
index fc6c16f189..9bd456c4bc 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/FragmentExtension.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/FragmentExtension.scala
@@ -7,7 +7,8 @@ import info.kwarc.mmt.api.ontology.{Binary, CustomBinary, RelationalElement, Rel
import info.kwarc.mmt.api.parser.SourceRef
import info.kwarc.mmt.api.symbols.{Constant, DerivedDeclaration}
import info.kwarc.mmt.api.utils.{MMTSystem, XMLEscaping}
-import info.kwarc.mmt.api.web.{ServerRequest, ServerResponse}
+import info.kwarc.mmt.api.web.{ServerExtension, ServerRequest, ServerResponse}
+import info.kwarc.mmt.stex.vollki.FullsTeXGraph
import info.kwarc.mmt.stex.xhtml.HTMLParser.ParsingState
import info.kwarc.mmt.stex.xhtml.{HTMLParser, OMDocHTML}
//import info.kwarc.mmt.stex.xhtml.{HTMLConstant, HTMLParser, HTMLRule, HTMLTheory, HasLanguage, OMDocHTML}
@@ -67,11 +68,14 @@ object FragmentExtension extends STeXExtension {
body.attributes((HTMLParser.ns_html,"style")) = "background-color:white"
stripMargins(doc)
val border = body.add(
)
- def space = scala.xml.Text(" ")
border.add(Symbol )
- border.add(space)
- border.add({XMLEscaping(c.path.toString)})
+ border.add(" ")
+ border.add({XMLEscaping(c.path.toString)})
border.add(
)
+ if (controller.extman.get(classOf[ServerExtension]).contains(FullsTeXGraph)) {
+ border.add({"> Guided Tour"})
+ border.add(
)
+ }
border.add(
Macro | Presentation | Type | |
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/OMDocExtension.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/OMDocExtension.scala
index 0a740df3da..e9c2b836e7 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/OMDocExtension.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/Extensions/OMDocExtension.scala
@@ -1,12 +1,14 @@
package info.kwarc.mmt.stex.Extensions
+import info.kwarc.mmt.api.documents.Document
import info.kwarc.mmt.api.modules.Theory
+import info.kwarc.mmt.api.objects.OMFOREIGN
import info.kwarc.mmt.api.ontology.{Binary, CustomBinary, RelationalElement, RelationalExtractor, Unary}
import info.kwarc.mmt.api.symbols.Constant
import info.kwarc.mmt.api.{NamespaceMap, Path, StructuralElement}
import info.kwarc.mmt.stex.STeX
import info.kwarc.mmt.stex.rules.MathStructureFeature
-import info.kwarc.mmt.stex.xhtml.{CustomHTMLNode, HTMLAliasComponent, HTMLArg, HTMLArgMarker, HTMLArityComponent, HTMLAssoctypeComponent, HTMLBindTypeComponent, HTMLComp, HTMLComplexAssignment, HTMLConclusionComponent, HTMLCopyModule, HTMLDefComponent, HTMLDefiniendum, HTMLDomainComponent, HTMLDonotcopy, HTMLFrame, HTMLFromComponent, HTMLImport, HTMLIncludeproblem, HTMLInputref, HTMLLanguageComponent, HTMLMMTRule, HTMLMacroNameComponent, HTMLMetatheoryComponent, HTMLNotation, HTMLNotationComponent, HTMLNotationFragment, HTMLNotationPrec, HTMLOMA, HTMLOMBIND, HTMLOMID, HTMLOMV, HTMLParser, HTMLProblem, HTMLRealization, HTMLReorderComponent, HTMLRule, HTMLSAssertion, HTMLSDefinition, HTMLSExample, HTMLSParagraph, HTMLSProof, HTMLSProofsketch, HTMLSProofstep, HTMLSignatureComponent, HTMLSimpleAssignment, HTMLSpfcase, HTMLSpfeq, HTMLStatementNameComponent, HTMLStructuralFeature, HTMLStructureFeature, HTMLSubproof, HTMLSymbol, HTMLTheory, HTMLTheoryHeader, HTMLToComponent, HTMLTopLevelTerm, HTMLTypeComponent, HTMLTypeStringComponent, HTMLUseModule, HTMLVarComp, HTMLVarDecl, HTMLVarSeqDecl, HTMLVarStructDecl, HasHead, MathMLNode, OMDocHTML, SemanticState, SimpleHTMLRule}
+import info.kwarc.mmt.stex.xhtml.{CustomHTMLNode, HTMLAliasComponent, HTMLArg, HTMLArgMarker, HTMLArityComponent, HTMLAssoctypeComponent, HTMLBindTypeComponent, HTMLComp, HTMLComplexAssignment, HTMLConclusionComponent, HTMLCopyModule, HTMLDefComponent, HTMLDefiniendum, HTMLDoctitle, HTMLDomainComponent, HTMLDonotcopy, HTMLFrame, HTMLFromComponent, HTMLImport, HTMLIncludeproblem, HTMLInputref, HTMLLanguageComponent, HTMLMMTRule, HTMLMacroNameComponent, HTMLMetatheoryComponent, HTMLNotation, HTMLNotationComponent, HTMLNotationFragment, HTMLNotationPrec, HTMLOMA, HTMLOMBIND, HTMLOMID, HTMLOMV, HTMLParser, HTMLProblem, HTMLRealization, HTMLReorderComponent, HTMLRule, HTMLSAssertion, HTMLSDefinition, HTMLSExample, HTMLSParagraph, HTMLSProof, HTMLSProofsketch, HTMLSProofstep, HTMLSignatureComponent, HTMLSimpleAssignment, HTMLSpfcase, HTMLSpfeq, HTMLStatementNameComponent, HTMLStructuralFeature, HTMLStructureFeature, HTMLSubproof, HTMLSymbol, HTMLTheory, HTMLTheoryHeader, HTMLToComponent, HTMLTopLevelTerm, HTMLTypeComponent, HTMLTypeStringComponent, HTMLUseModule, HTMLVarComp, HTMLVarDecl, HTMLVarSeqDecl, HTMLVarStructDecl, HasHead, MathMLNode, OMDocHTML, SemanticState, SimpleHTMLRule}
object OMDocExtension extends DocumentExtension {
@@ -86,6 +88,7 @@ object OMDocExtension extends DocumentExtension {
SimpleHTMLRule("macroname",HTMLMacroNameComponent),
SimpleHTMLRule("assoctype",HTMLAssoctypeComponent),
SimpleHTMLRule("reorderargs",HTMLReorderComponent),
+ SimpleHTMLRule("doctitle",HTMLDoctitle),
SimpleHTMLRule("import",HTMLImport),
SimpleHTMLRule("usemodule",HTMLUseModule),
SimpleHTMLRule("copymodule",HTMLCopyModule(_,false)),
@@ -144,6 +147,24 @@ object OMDocExtension extends DocumentExtension {
import DocumentExtension._
override lazy val documentRules = List(
+ {case iref : HTMLInputref =>
+ val dp = Path.parseD(iref.resource + ".omdoc",NamespaceMap.empty)
+ controller.getO(dp) match {
+ case Some(d:Document) =>
+ controller.backend.resolveLogical(d.path.uri) match {
+ case Some((a,ls)) =>
+ val path = ls.init.mkString("/") + "/" + ls.last.dropRight(5) + "xhtml"
+ iref.parent.foreach(_.addAfter(,iref))
+ case _ =>
+ }
+ case _ =>
+ }
+ },
{case thm: HTMLTheory =>
sidebar(thm, Theory: {thm.name.toString} :: Nil)
},
@@ -159,8 +180,8 @@ object OMDocExtension extends DocumentExtension {
if (t.resource.startsWith("var://") || t.resource.startsWith("varseq://")) {
// TODO
} else {
- overlay(t, "/:" + server.pathPrefix + "/fragment?" + t.head.toString + "&language=" + getLanguage(t),
- "/:" + server.pathPrefix + "/declaration?" + t.head.toString + "&language=" + getLanguage(t))
+ overlay(t, "/:" + server.pathPrefix + "/fragment?" + t.head.toString + "&language=" + getLanguage(t),
+ "/:" + server.pathPrefix + "/declaration?" + t.head.toString + "&language=" + getLanguage(t))
}
},
)
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/rules/Sequences.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/rules/Sequences.scala
index d1404ce54f..d0ab166eaf 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/rules/Sequences.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/rules/Sequences.scala
@@ -10,6 +10,13 @@ import info.kwarc.mmt.stex.{SCtx, SOMB, STeX, STerm}
trait SeqRule {
val seqexprpath : GlobalName
val seqtppath : GlobalName
+ object SeqLike {
+ def apply(tm : Term) = tm match {
+ case STeX.flatseq(_) => true
+ case OMV(_) if tm.metadata.get(STeX.flatseq.sym).nonEmpty => true
+ case _ => false
+ }
+ }
object Seqtype {
def unapply(tp : Term) = tp match {
case OMA(OMS(`seqtppath`),List(t)) =>
@@ -47,6 +54,9 @@ case class SeqInfTypeRule(seqtppath : GlobalName,seqexprpath : GlobalName) exten
solver.check(Typing(stack, tm, tpA))
}
(tp, Some(true))
+ case Some(Seqexpr(tps)) =>
+ // TODO ?
+ (tp,Some(true))
case _ =>
solver.inferType(h) match {
case None => (None, None)
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/sTeX.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/sTeX.scala
index 1808d77ec4..2e08c325ed 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/sTeX.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/sTeX.scala
@@ -232,4 +232,6 @@ object STeX {
val meta_quantification = mmtmeta_path ? "quantification"
val meta_qforall = mmtmeta_path ? "universal"
val meta_qexists = mmtmeta_path ? "existential"
+
+ val meta_doctitle = mmtmeta_path ? "doctitle"
}
\ No newline at end of file
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/vollki/GraphExtensions.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/vollki/GraphExtensions.scala
index 828807dd2c..224908e34e 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/vollki/GraphExtensions.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/vollki/GraphExtensions.scala
@@ -4,16 +4,18 @@ import info.kwarc.mmt.api.{DPath, MPath, NamespaceMap, Path, StructuralElement}
import info.kwarc.mmt.api.documents.{DRef, Document, MRef}
import info.kwarc.mmt.api.frontend.{Controller, Extension}
import info.kwarc.mmt.api.modules.{Theory, View}
+import info.kwarc.mmt.api.objects.OMFOREIGN
import info.kwarc.mmt.api.ontology.{Declares, IsDocument, IsTheory}
import info.kwarc.mmt.api.symbols.DerivedDeclaration
import info.kwarc.mmt.api.utils.{File, JSON, JSONArray, JSONObject, MMTSystem}
import info.kwarc.mmt.api.web.{GraphSolverExtension, JGraphBuilder, JGraphEdge, JGraphExporter, JGraphNode, JGraphSelector, ServerExtension, ServerRequest, ServerResponse, StandardBuilder}
import info.kwarc.mmt.stex.Extensions.DocumentExtension
import info.kwarc.mmt.stex.xhtml.HTMLParser
-import info.kwarc.mmt.stex.xhtml.HTMLParser.HTMLNode
+import info.kwarc.mmt.stex.xhtml.HTMLParser.{HTMLNode, empty}
import info.kwarc.mmt.stex.{STeX, STeXServer}
import scala.collection.{Set, mutable}
+import scala.xml.{Elem, Node, XML}
class STeXGraphPopulator extends Extension {
override def start(args: List[String]): Unit = {
@@ -54,9 +56,9 @@ object FullsTeXGraph extends ServerExtension("vollki") {
})
allobjects.foreach{ n =>
if (path.contains(n))
- entrydoc.add()
+ entrydoc.add()
else
- entrydoc.add()
+ entrydoc.add()
}
ServerResponse(doc.toString,"application/xhtml+xml")
case Some("frag") =>
@@ -92,7 +94,7 @@ object FullsTeXGraph extends ServerExtension("vollki") {
nodes.foreach { node =>
body.add(
- {"> " + node.id}
+ {"> "}{node.getTitle(language)}
|
)
@@ -139,23 +141,37 @@ object FullsTeXGraph extends ServerExtension("vollki") {
trait sTeXNode {
val id : String
def selectTopo : List[sTeXNode]
- lazy val topologicalSort : List[sTeXNode] = {
+ def topologicalSort : List[sTeXNode] = {
(selectTopo.flatMap(_.topologicalSort) ::: List(this)).distinct
}
- def getDocument(language : String) : Option[Document]
+ private def getDocumentDefinitely(language : String) = getDocument(language) match {
+ case Some(d) => Some(d)
+ case _ => getDocument("en") match {
+ case Some(d) => Some(d)
+ case _ => getDocument("")
+ }
+ }
+ def getTitle(language: String) : Node = getDocumentDefinitely(language).flatMap(
+ _.metadata.get(STeX.meta_doctitle).headOption.map(_.value match {
+ case OMFOREIGN(node) => node
+ case _ => {id}
+ })
+ ).getOrElse({id})
+ val parents = mutable.HashSet.empty[sTeXNode]
+ val keys = mutable.HashSet.empty[Path]
+ protected[FullsTeXGraph] val _documents = mutable.HashMap.empty[String,DPath]
+ def getDocument(language : String) : Option[Document] = _documents.get(language).flatMap(controller.getAsO(classOf[Document],_))
}
class sTeXDocument(val id : String) extends sTeXNode {
private[FullsTeXGraph] var _children : List[sTeXNode] = Nil
def children = _children
private[FullsTeXGraph] var _languages : List[String] = Nil
def languages = _languages
- private[FullsTeXGraph] val _documents = mutable.HashMap.empty[String,Document]
- def getDocument(language : String) : Option[Document] = _documents.get(language)
override def selectTopo: List[sTeXNode] = _children.reverse
}
- class sTeXTheory(val sig: Theory) extends sTeXNode {
- val path : MPath = sig.path
+ class sTeXTheory(val sig: MPath) extends sTeXNode {
+ val path : MPath = sig
val id = path.toString
private[FullsTeXGraph] var _includes : List[sTeXTheory] = Nil
def includes = _includes
@@ -164,8 +180,6 @@ object FullsTeXGraph extends ServerExtension("vollki") {
private[FullsTeXGraph] var _languages : List[String] = Nil
def languages = _languages
def getLanguageModule(language : String) : Option[Theory] = controller.getAsO(classOf[Theory],path.toDPath ? language)
- private[FullsTeXGraph] val _documents = mutable.HashMap.empty[String,Document]
- def getDocument(language : String) : Option[Document] = _documents.get(language)
override def selectTopo: List[sTeXNode] = _includes.reverse
}
@@ -188,14 +202,16 @@ object FullsTeXGraph extends ServerExtension("vollki") {
val node = new sTeXDocument(id)
allobjects ::= node
objects(Path.parse(id)) = node
+ node.keys.add(Path.parse(id))
if (lang == "") {
- node._documents("") = d
+ node._documents("") = d.path
objects(d.path) = node
+ node.keys.add(d.path)
d.getDeclarations.foreach {
case mr : MRef =>
- getO(mr.target).foreach(node._children ::= _)
+ getO(mr.target).foreach{c => node._children ::= c; c.parents.add(node)}
case dr : DRef =>
- getO(dr.target).foreach(node._children ::= _)
+ getO(dr.target).foreach{c => node._children ::= c; c.parents.add(node)}
case _ =>
}
} else {
@@ -203,13 +219,14 @@ object FullsTeXGraph extends ServerExtension("vollki") {
controller.getO(Path.parseD(id + "." + l + ".omdoc",NamespaceMap.empty)) match {
case Some(d : Document) =>
objects(d.path) = node
- node._documents(l) = d
+ node.keys.add(d.path)
+ node._documents(l) = d.path
node._languages ::= l
d.getDeclarations.foreach {
case mr : MRef =>
- getO(mr.target).foreach(node._children ::= _)
+ getO(mr.target).foreach{c => node._children ::= c; c.parents.add(node)}
case dr : DRef =>
- getO(dr.target).foreach(node._children ::= _)
+ getO(dr.target).foreach{c => node._children ::= c; c.parents.add(node)}
case _ =>
}
case _ =>
@@ -229,19 +246,23 @@ object FullsTeXGraph extends ServerExtension("vollki") {
val ls = pathstr.split('.')
(ls.init.mkString("."),ls.last)
} else (pathstr,"")
- val node = new sTeXTheory(th)
+ val node = new sTeXTheory(th.path)
allobjects ::= node
objects(Path.parse(id)) = node
objects(th.path) = node
+ node.keys.add(Path.parse(id))
+ node.keys.add(th.path)
if (lang == "") {
- node._documents("") = d
+ node._documents("") = d.path
objects(d.path) = node
+ node.keys.add(d.path)
} else {
all_languages.foreach {l =>
controller.getO(Path.parseD(id + "." + l + ".omdoc",NamespaceMap.empty)) match {
case Some(d : Document) =>
objects(d.path) = node
- node._documents(l) = d
+ node.keys.add(d.path)
+ node._documents(l) = d.path
node._languages ::= l
case _ =>
}
@@ -257,6 +278,7 @@ object FullsTeXGraph extends ServerExtension("vollki") {
case Some(t: Theory) =>
node._languages ::= s
objects(t.path) = node
+ node.keys.add(t.path)
t.getAllIncludesWithoutMeta.flatMap(i => getO(i.from)).filter(_ != node).foreach { case ch : sTeXTheory =>
node._uses ::= ch
}
@@ -266,6 +288,7 @@ object FullsTeXGraph extends ServerExtension("vollki") {
node._uses = node._uses.distinct
th.getAllIncludesWithoutMeta.flatMap(i => getO(i.from)).foreach{ case ch : sTeXTheory =>
node._includes ::= ch
+ ch.parents.add(node)
}
}
@@ -319,9 +342,10 @@ object FullsTeXGraph extends ServerExtension("vollki") {
case Some(d: Document) => checkDoc(d) match {
case Some(_) => doThDoc(th, d)
case _ =>
- val st = new sTeXTheory(th)
+ val st = new sTeXTheory(th.path)
allobjects ::= st
objects(p) = st
+ st.keys.add(p)
getO(d.path).foreach {
case doc: sTeXDocument =>
doc._documents.foreach { case (k, v) => st._documents(k) = v }
@@ -333,7 +357,7 @@ object FullsTeXGraph extends ServerExtension("vollki") {
None
}
case _ =>
- ???
+ None
}
case List(_) if all_languages.contains(th.name.toString) =>
getO(th.path.parent.toMPath)
@@ -380,7 +404,7 @@ object STeXGraph extends JGraphExporter("stexgraph") {
override val id: String = th.id
override val style: String = "theory"
override val label: Option[String] = Some(th.sig.name.toString)
- override val uri: Option[String] = Some(th.sig.path.toString)
+ override val uri: Option[String] = Some(th.sig.toString)
}
case doc : FullsTeXGraph.sTeXDocument =>
doc.children.foreach{n =>
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTML.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTML.scala
index b54c1b6291..b42fee71dc 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTML.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTML.scala
@@ -203,7 +203,7 @@ object HTMLParser {
elem
}
- private[HTMLParser] def present(n : HTMLNode,indent : Int = 0) : String = {
+ private[HTMLParser] def present(n : HTMLNode,indent : Int = 0,forcenamespace : Boolean = false) : String = {
{if (_top.contains(n)) header else ""} +
{
if (n.startswithWS) "\n" + {if (indent>0) (0 until indent).map(_ => " ").mkString else ""} else ""
@@ -212,7 +212,7 @@ object HTMLParser {
t.toString() + {if(t.endswithWS) "\n" else ""}
case _ =>
"<" + n.label + {
- if (!n._parent.exists(_.namespace == n.namespace)) " xmlns=\"" + n.namespace + "\"" else ""
+ if (!n._parent.exists(_.namespace == n.namespace) || forcenamespace) " xmlns=\"" + n.namespace + "\"" else ""
} + {
if (_top.contains(n)) namespaces.toList.map {
case (p,v) => " xmlns:" + p + "=\"" + v + "\""
@@ -223,7 +223,7 @@ object HTMLParser {
else if (namespaces.values.toList.contains(ns))
" " + namespaces.toList.collectFirst{case p if p._2 == ns => p._1}.get + ":"
else " " + ns + ":"
- } + key + "=\"" + XMLEscaping(value) + "\""
+ } + key + "=\"" + value.replace("\"","\'") + "\""
}.mkString + {
if (n._sourceref.isDefined && !n._parent.exists(_._sourceref == n._sourceref)) " " + "stex:sourceref=\"" + n._sourceref.get.toString + "\"" else ""
} + {
@@ -240,7 +240,7 @@ object HTMLParser {
}
}
- class HTMLNode(var state : ParsingState, val namespace : String, val label : String) {
+ class HTMLNode(var state : ParsingState, val namespace : String, var label : String) {
override def toString: String = state.present(this)
val attributes = mutable.Map.empty[(String, String), String]
@@ -255,6 +255,14 @@ object HTMLParser {
ret
}
+ def plaincopy: HTMLNode = {
+ val ret = new HTMLNode(state, namespace, label)
+ ret.classes = classes
+ attributes.foreach(e => ret.attributes(e._1) = e._2)
+ children.foreach(c => ret.add(c.plaincopy))
+ ret
+ }
+
def parent = _parent
private[HTMLParser] var _children: List[HTMLNode] = Nil
@@ -414,7 +422,7 @@ object HTMLParser {
}
def node = try {
- XML.loadString(this.toString.trim)
+ XML.loadString(state.present(this,forcenamespace=true).trim)
} catch {
case o =>
println(o.toString)
@@ -424,12 +432,15 @@ object HTMLParser {
}
class HTMLText(state : ParsingState, val text : String) extends HTMLNode(state,"","") {
- override def toString() = text.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll("\"",""")
+ override def toString() = text//.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll("\"",""")
override def isEmpty = toString() == "" || toString() == empty.toString
override def copy : HTMLText = {
new HTMLText(state,text)
}
+ override def plaincopy : HTMLText = {
+ new HTMLText(state,text)
+ }
}
object HTMLNode {
@@ -536,10 +547,10 @@ object HTMLParser {
case c =>
var txt = c + in.takeWhileSafe(_ != '<')
val endWS = txt.lastOption.exists(_.isWhitespace)
- txt = if (txt.trim == empty.toString) empty.toString else Try(XMLEscaping.unapply(txt.trim)).toOption.getOrElse({
+ txt = if (txt.trim == empty.toString) empty.toString else txt.trim/*Try(XMLEscaping.unapply(txt.trim)).toOption.getOrElse({
print("")
txt.trim
- })
+ })*/
if (txt.nonEmpty) {
val n = new HTMLText(state, txt)
n.startswithWS = startWS
diff --git a/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTMLOMDoc.scala b/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTMLOMDoc.scala
index c8c991f643..918849340c 100644
--- a/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTMLOMDoc.scala
+++ b/src/mmt-stex/src/info/kwarc/mmt/stex/xhtml/XHTMLOMDoc.scala
@@ -6,7 +6,7 @@ import info.kwarc.mmt.api.metadata.MetaDatum
import info.kwarc.mmt.api.modules.{AbstractTheory, Theory}
import info.kwarc.mmt.api.notations.NotationContainer
import info.kwarc.mmt.api.{AddError, ComplexStep, ContentPath, DPath, GeneratedDRef, GlobalName, LocalName, MPath, NamespaceMap, Path, Rule, RuleSet, StructuralElement}
-import info.kwarc.mmt.api.objects.{Context, OMA, OMAorAny, OMBIND, OMBINDC, OMID, OMIDENT, OMMOD, OMS, OMV, Obj, Term, VarDecl}
+import info.kwarc.mmt.api.objects.{Context, OMA, OMAorAny, OMBIND, OMBINDC, OMFOREIGN, OMID, OMIDENT, OMMOD, OMS, OMV, Obj, Term, VarDecl}
import info.kwarc.mmt.api.parser.SourceRef
import info.kwarc.mmt.api.symbols.{Constant, DerivedDeclaration, Include, NestedModule, PlainInclude, RuleConstant, Structure, TermContainer}
import info.kwarc.mmt.stex.Extensions.NotationExtractor
@@ -376,8 +376,12 @@ case class HTMLDefComponent(orig:HTMLParser.HTMLNode) extends OMDocHTML(orig) {
hd.df = findTerm
true
case hd : HasDefinientia =>
- val gn = Path.parseS(resource)
- findTerm.foreach(hd.dfs(gn) = _)
+ resource.split(',').foreach {r =>
+ if (r.nonEmpty) {
+ val gn = Path.parseS(r)
+ findTerm.foreach(hd.dfs(gn) = _)
+ }
+ }
true
}
}
@@ -881,7 +885,7 @@ case class HTMLArg(orig : HTMLParser.HTMLNode) extends OMDocHTML(orig) {
}
}
-case class HTMLTopLevelTerm(orig : OMDocHTML) extends OMDocHTML(orig) with HTMLConstant {
+final case class HTMLTopLevelTerm(orig : OMDocHTML) extends OMDocHTML(orig) with HTMLConstant {
assert(sstate.forall(!_.in_term))
sstate.foreach(_.in_term = true)
@@ -1000,6 +1004,22 @@ case class HTMLSParagraph(orig : HTMLParser.HTMLNode) extends OMDocHTML(orig) wi
if (typestrings.contains("symdoc")) addSymbolDoc(fors)
}
}
+
+case class HTMLDoctitle(orig : HTMLParser.HTMLNode) extends OMDocHTML(orig) {
+ override def onAdd = {
+ super.onAdd
+ collectAncestor {
+ case d : HTMLDocument => d
+ }.foreach { d =>
+ val nnode = this.plaincopy
+ nnode.label = "span"
+ nnode.classes = Nil
+ nnode.attributes.clear()
+ d.doc.metadata.update(STeX.meta_doctitle,OMFOREIGN(nnode.node))
+ }
+ }
+}
+
case class HTMLSAssertion(orig : HTMLParser.HTMLNode) extends OMDocHTML(orig) with HTMLStatement {
var conc : Option[Term] = None
override def onAdd = {sstate.foreach{ state => if (name.nonEmpty) { collectAncestor {
diff --git a/src/project/build.properties b/src/project/build.properties
index 0837f7a132..c8fcab543a 100644
--- a/src/project/build.properties
+++ b/src/project/build.properties
@@ -1 +1 @@
-sbt.version=1.3.13
+sbt.version=1.6.2