Add ref resolution to basic page features

This commit is contained in:
Alexander Nozik 2022-06-26 12:32:22 +03:00
parent bf884732c1
commit d3a6ab658a
No known key found for this signature in database
GPG Key ID: F7FCF2DD25C71357
3 changed files with 25 additions and 9 deletions

View File

@ -1,7 +1,7 @@
--- ---
type: page type: page
title: Consulting title: Consulting
transformation: snark.replaceLinks transformation: snark.basic
language: en language: en
--- ---
@ -21,7 +21,7 @@ Our research, which primarily includes open source projects, has already been ap
<img src="images/pic03.jpg" alt="" /> <img src="images/pic03.jpg" alt="" />
</span> </span>
<header class="major"> <header class="major">
<h3><a href="${homeRef}/consulting/research" class="link">Research</a></h3> <h3><a href="${resolvePageRef("consulting.research")}" class="link">Research</a></h3>
<p>Analytics, prototyping and research for fundamental science and industry.</p> <p>Analytics, prototyping and research for fundamental science and industry.</p>
</header> </header>
</article> </article>
@ -30,7 +30,7 @@ Our research, which primarily includes open source projects, has already been ap
<img src="images/pic04.jpg" alt="" /> <img src="images/pic04.jpg" alt="" />
</span> </span>
<header class="major"> <header class="major">
<h3><a href="${homeRef}/consulting/expert" class="link">Expert activity</a></h3> <h3><a href="${resolvePageRef("consulting.expert")}" class="link">Expert activity</a></h3>
<p>Analysis and improvement of existing scientific software and projects.</p> <p>Analysis and improvement of existing scientific software and projects.</p>
</header> </header>
</article> </article>
@ -39,7 +39,7 @@ Our research, which primarily includes open source projects, has already been ap
<img src="images/pic05.jpg" alt="" /> <img src="images/pic05.jpg" alt="" />
</span> </span>
<header class="major"> <header class="major">
<h3><a href="${homeRef}/consulting/architecture" class="link">Architecture</a></h3> <h3><a href="${resolvePageRef("consulting.architecture")}" class="link">Architecture</a></h3>
<p>Design the architecture for scientific and technological applications.</p> <p>Design the architecture for scientific and technological applications.</p>
</header> </header>
</article> </article>
@ -48,7 +48,7 @@ Our research, which primarily includes open source projects, has already been ap
<img src="images/pic06.jpg" alt="" /> <img src="images/pic06.jpg" alt="" />
</span> </span>
<header class="major"> <header class="major">
<h3><a href="${homeRef}/consulting/development" class="link">Development</a></h3> <h3><a href="${resolvePageRef("consulting.development")}" class="link">Development</a></h3>
<p>The development and support of open-source and in-house solutions( libraries, frameworks and end-user application).</p> <p>The development and support of open-source and in-house solutions( libraries, frameworks and end-user application).</p>
</header> </header>
</article> </article>

View File

@ -126,7 +126,7 @@ class SnarkPlugin : AbstractPlugin() {
"gif".asName() to SnarkParser(ImageIOReader, "gif"), "gif".asName() to SnarkParser(ImageIOReader, "gif"),
) )
TextTransformation.TYPE -> mapOf( TextTransformation.TYPE -> mapOf(
"replaceLinks".asName() to TextTransformation.replaceLinks "basic".asName() to BasicTextTransformation
) )
else -> super.content(target) else -> super.content(target)
} }

View File

@ -10,10 +10,26 @@ fun interface TextTransformation {
companion object { companion object {
const val TYPE = "snark.textTransformation" const val TYPE = "snark.textTransformation"
val TEXT_TRANSFORMATION_KEY = NameToken("transformation") val TEXT_TRANSFORMATION_KEY = NameToken("transformation")
}
}
object BasicTextTransformation : TextTransformation {
private val regex = "\\\$\\{(\\w*)(?>\\(\"(.*)\"\\))?\\}".toRegex()
val replaceLinks: TextTransformation = object : TextTransformation {
context(PageBuilder) override fun transform(text: String): String { context(PageBuilder) override fun transform(text: String): String {
return text.replace("\${homeRef}", homeRef) return text.replace(regex) { match ->
when (match.groups[1]!!.value) {
"homeRef" -> homeRef
"resolveRef" -> {
val refString = match.groups[2]?.value ?: error("resolveRef requires a string (quoted) argument")
resolveRef(refString)
}
"resolvePageRef" -> {
val refString = match.groups[2]?.value ?: error("resolvePageRef requires a string (quoted) argument")
resolvePageRef(refString)
}
else -> match.value
} }
} }
} }