Skip to content

Commit

Permalink
Merge pull request #41 from InkApplications/codeblocks
Browse files Browse the repository at this point in the history
Add Code highlighting
  • Loading branch information
ReneeVandervelde authored Sep 21, 2024
2 parents 2e5f18e + e4c6384 commit dfecbfd
Show file tree
Hide file tree
Showing 11 changed files with 288 additions and 2 deletions.
10 changes: 8 additions & 2 deletions render-static-html/api/render-static-html.api
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
public final class ink/ui/render/statichtml/HtmlRenderer {
public fun <init> (Ljava/lang/String;[Link/ui/render/statichtml/renderer/ElementRenderer;)V
public synthetic fun <init> (Ljava/lang/String;[Link/ui/render/statichtml/renderer/ElementRenderer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun renderDocument (Ljava/lang/String;Ljava/util/List;Ljava/util/List;ZLjava/util/List;Ljava/util/List;ZZ)Ljava/lang/String;
public static synthetic fun renderDocument$default (Link/ui/render/statichtml/HtmlRenderer;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ZLjava/util/List;Ljava/util/List;ZZILjava/lang/Object;)Ljava/lang/String;
public final fun renderDocument (Ljava/lang/String;Ljava/util/List;Ljava/util/List;ZLjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ZZ)Ljava/lang/String;
public static synthetic fun renderDocument$default (Link/ui/render/statichtml/HtmlRenderer;Ljava/lang/String;Ljava/util/List;Ljava/util/List;ZLjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ZZILjava/lang/Object;)Ljava/lang/String;
public final fun renderElement (Link/ui/structures/elements/UiElement;)Lkotlin/jvm/functions/Function1;
public final fun renderLayout (Link/ui/structures/layouts/UiLayout;)Lkotlin/jvm/functions/Function1;
public final fun withRenderer (Link/ui/render/statichtml/renderer/ElementRenderer;)Link/ui/render/statichtml/HtmlRenderer;
Expand Down Expand Up @@ -36,12 +36,14 @@ public abstract class ink/ui/render/statichtml/InkUiScript : ink/ui/render/stati
public fun addPageHeader (Lkotlin/jvm/functions/Function1;)V
public fun addStyle (Ljava/lang/String;)V
public fun elementRenderer (Link/ui/render/statichtml/renderer/ElementRenderer;)V
public final fun getCodeBlocks ()Z
public final fun getContentBreak ()Z
public final fun getInkFooter ()Z
public final fun getResourceBaseUrl ()Ljava/lang/String;
public final fun getSectioned ()Z
public final fun getTitle ()Ljava/lang/String;
public fun include (Ljava/lang/String;)V
public final fun setCodeBlocks (Z)V
public final fun setContentBreak (Z)V
public final fun setInkFooter (Z)V
public final fun setResourceBaseUrl (Ljava/lang/String;)V
Expand Down Expand Up @@ -74,6 +76,10 @@ public final class ink/ui/render/statichtml/renderer/BreadcrumbRendererKt {
public static final fun getBreadcrumbRenderer ()Link/ui/render/statichtml/renderer/ElementRenderer;
}

public final class ink/ui/render/statichtml/renderer/CodeBlockRendererKt {
public static final fun getCodeBlockRenderer ()Link/ui/render/statichtml/renderer/ElementRenderer;
}

public final class ink/ui/render/statichtml/renderer/DividerRendererKt {
public static final fun getDividerRenderer ()Link/ui/render/statichtml/renderer/ElementRenderer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class HtmlRenderer(
*customRenderers,
ListRenderer,
TextRenderer,
CodeBlockRenderer,
DividerRenderer,
FormattedTextRenderer,
BreadcrumbRenderer,
Expand Down Expand Up @@ -93,6 +94,8 @@ class HtmlRenderer(
inkFooter: Boolean,
bodies: List<TagConsumer<*>.() -> Unit>,
stylesheets: List<String>,
scripts: List<String>,
jsInit: String?,
sectioned: Boolean = false,
contentBreak: Boolean = false
): String {
Expand All @@ -103,6 +106,11 @@ class HtmlRenderer(
styleLink(it)
}
meta(name = "viewport", content = "width=device-width, initial-scale=1.0")

scripts.forEach {
script(src = it) {}
}

title { +pageTitle }
}
val bodyClasses = listOfNotNull(
Expand Down Expand Up @@ -138,6 +146,11 @@ class HtmlRenderer(
}
}
}
if (jsInit != null) {
script {
+jsInit
}
}
}
}.serialize(prettyPrint = true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ abstract class InkUiScript(
private var pageFooters: MutableList<TagConsumer<*>.() -> Unit> = mutableListOf()
private var bodies: MutableList<TagConsumer<*>.() -> Unit> = mutableListOf()
private var styles: MutableList<String> = mutableListOf()
private var scripts: MutableList<String> = mutableListOf()
private val document = createHTMLDocument()
var title: String? = null
var sectioned: Boolean = false
var contentBreak: Boolean = false
var inkFooter: Boolean = false
var codeBlocks: Boolean = false
final override var resourceBaseUrl: String = "https://ui.inkapplications.com/res"
set(value) {
field = value
Expand Down Expand Up @@ -86,6 +88,11 @@ abstract class InkUiScript(
inkFooter = inkFooter,
bodies = bodies,
stylesheets = getStyles(),
scripts = listOfNotNull(
*scripts.toTypedArray(),
"$resourceBaseUrl/js/highlight.pack.js".takeIf { codeBlocks },
),
jsInit = "hljs.initHighlightingOnLoad();".takeIf { codeBlocks },
sectioned = sectioned,
contentBreak = contentBreak,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ink.ui.render.statichtml.renderer

import ink.ui.render.web.elements.CodeBlock
import ink.ui.render.web.elements.CodeBlock.Language.*
import kotlinx.html.*

val CodeBlockRenderer = renderer<CodeBlock> { element ->
pre(when (element.language) {
Bash -> "bash"
Kotlin -> "kotlin"
Shell -> "shell"
null -> null
}) {
code {
+element.code
}
}
}
24 changes: 24 additions & 0 deletions render-web-common/api/render-web-common.api
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,30 @@ public final class ink/ui/render/web/SymbolsKt {
public static final fun getSvgSrc-TN8vZ0Q (Ljava/lang/String;)Ljava/lang/String;
}

public final class ink/ui/render/web/elements/CodeBlock : ink/ui/structures/elements/UiElement$Static {
public static final field $stable I
public fun <init> (Ljava/lang/String;Link/ui/render/web/elements/CodeBlock$Language;)V
public synthetic fun <init> (Ljava/lang/String;Link/ui/render/web/elements/CodeBlock$Language;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Link/ui/render/web/elements/CodeBlock$Language;
public final fun copy (Ljava/lang/String;Link/ui/render/web/elements/CodeBlock$Language;)Link/ui/render/web/elements/CodeBlock;
public static synthetic fun copy$default (Link/ui/render/web/elements/CodeBlock;Ljava/lang/String;Link/ui/render/web/elements/CodeBlock$Language;ILjava/lang/Object;)Link/ui/render/web/elements/CodeBlock;
public fun equals (Ljava/lang/Object;)Z
public final fun getCode ()Ljava/lang/String;
public final fun getLanguage ()Link/ui/render/web/elements/CodeBlock$Language;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class ink/ui/render/web/elements/CodeBlock$Language : java/lang/Enum {
public static final field Bash Link/ui/render/web/elements/CodeBlock$Language;
public static final field Kotlin Link/ui/render/web/elements/CodeBlock$Language;
public static final field Shell Link/ui/render/web/elements/CodeBlock$Language;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Link/ui/render/web/elements/CodeBlock$Language;
public static fun values ()[Link/ui/render/web/elements/CodeBlock$Language;
}

public final class ink/ui/render/web/elements/LinkButtonElement : ink/ui/structures/elements/UiElement$Interactive {
public static final field $stable I
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Link/ui/structures/Sentiment;ZZLjava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
Atom One Dark by Daniel Gamage
Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
base: #282c34
mono-1: #abb2bf
mono-2: #818896
mono-3: #5c6370
hue-1: #56b6c2
hue-2: #61aeee
hue-3: #c678dd
hue-4: #98c379
hue-5: #e06c75
hue-5-2: #be5046
hue-6: #d19a66
hue-6-2: #e6c07b
*/

.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #abb2bf;
background: #282c34;
}

.hljs-comment,
.hljs-quote {
color: #5c6370;
font-style: italic;
}

.hljs-doctag,
.hljs-keyword,
.hljs-formula {
color: #c678dd;
}

.hljs-section,
.hljs-name,
.hljs-selector-tag,
.hljs-deletion,
.hljs-subst {
color: #e06c75;
}

.hljs-literal {
color: #56b6c2;
}

.hljs-string,
.hljs-regexp,
.hljs-addition,
.hljs-attribute,
.hljs-meta-string {
color: #98c379;
}

.hljs-built_in,
.hljs-class .hljs-title {
color: #e6c07b;
}

.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-type,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-number {
color: #d19a66;
}

.hljs-symbol,
.hljs-bullet,
.hljs-link,
.hljs-meta,
.hljs-selector-id,
.hljs-title {
color: #61aeee;
}

.hljs-emphasis {
font-style: italic;
}

.hljs-strong {
font-weight: bold;
}

.hljs-link {
text-decoration: underline;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
Atom One Light by Daniel Gamage
Original One Light Syntax theme from https://github.com/atom/one-light-syntax
base: #fafafa
mono-1: #383a42
mono-2: #686b77
mono-3: #a0a1a7
hue-1: #0184bb
hue-2: #4078f2
hue-3: #a626a4
hue-4: #50a14f
hue-5: #e45649
hue-5-2: #c91243
hue-6: #986801
hue-6-2: #c18401
*/

.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #383a42;
background: #fafafa;
}

.hljs-comment,
.hljs-quote {
color: #a0a1a7;
font-style: italic;
}

.hljs-doctag,
.hljs-keyword,
.hljs-formula {
color: #a626a4;
}

.hljs-section,
.hljs-name,
.hljs-selector-tag,
.hljs-deletion,
.hljs-subst {
color: #e45649;
}

.hljs-literal {
color: #0184bb;
}

.hljs-string,
.hljs-regexp,
.hljs-addition,
.hljs-attribute,
.hljs-meta-string {
color: #50a14f;
}

.hljs-built_in,
.hljs-class .hljs-title {
color: #c18401;
}

.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-type,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-number {
color: #986801;
}

.hljs-symbol,
.hljs-bullet,
.hljs-link,
.hljs-meta,
.hljs-selector-id,
.hljs-title {
color: #4078f2;
}

.hljs-emphasis {
font-style: italic;
}

.hljs-strong {
font-weight: bold;
}

.hljs-link {
text-decoration: underline;
}
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ ul > li::before
pre
{
text-align: start;
width: 100%;
}
hr
{
Expand Down
Loading

0 comments on commit dfecbfd

Please sign in to comment.