diff --git a/example.kn b/example.kn
index 68b4a93605756688c72a32b75b1e4298af0187e7..b8aa6de179768c55f2cc377366e0e12270b8a8f3 100644
--- a/example.kn
+++ b/example.kn
@@ -2,22 +2,34 @@ # Lorem ipsum.
 
 Lorem ipsum dolor sit amet adipiscing.
 
-%%
+|||
 2+2
-%%
+|||
 
-Lorem ipsum dolor sit amet adipiscing.
+Lorem ipsum |||3+3||| dolor sit amet adipiscing.
 
-%%
+|||
 x:3+4;x
-%%
+|||
 
-Lorem ipsum dolor sit amet adipiscing.
+Lorem |||z:3%%3||| ipsum dolor sit z=|||z||| amet adipiscing.
 
-%%
+|||
 y:x-2
-z:x+2
+
+3%%3
+%%4
+(|!10)+|!10
+
 "x: ",$x,", y: ",$y,", z: ",$z
-%%
+|||
 
 Lorem ipsum dolor sit amet adipiscing.
+
+|||%%4||| is less than |||3%%3|||.
+
+Is |!10 the digits 9-0?  ||||!10||| is the answer.
+
+||||!10||| is the digits 9-0, which we got from |!10.
+
+If we're lucky, |||(|!10)+|!10||| might be equal to 18.
diff --git a/index.kn b/index.kn
index 82c1a045320cb8993cc38af948d22212b5cdba30..5a120e3af7664f16a11dbb75ffc6b35851c506df 100644
--- a/index.kn
+++ b/index.kn
@@ -12,6 +12,8 @@ => /git/kral View the kral Git repository
 
 kral exclusively uses the Gemini protocol and the K programming language.  When run as a CGI script, kral will parse .kn notebooks and evaluate embedded K code.  It then outputs Gemtext with the results embedded into the page.
 
+K code is delimited by three pipes (|||).  These can be on their own lines, enclosing a block of code, or inline.  It's not the prettiest or tersest delimiter, but given that K not only uses but overloads every ASCII character, it was quite hard to find something suitably unlikely to appear in the code being evaluated.  ||| was chosen as it is equivalent to | in both the monadic and dyadic cases (I think), so it is unlikely to be used in K code.  I'm also fairly sure that | can't occur at the end of a K expression (other than in a comment), so it should be easy to distinguish the ending delimiter from the code preceding it.
+
 Gemini is a lightweight alternative to HTTP, but not quite as lightweight as Gopher.  But if you're viewing this, you probably already knew that.
 
 => gemini://gemini.circumlunar.space The Gemini protocol
diff --git a/kral.k b/kral.k
index 15380af4a5ed6c2afd4b4d2d477135acaa3aa87d..c2ec0b26b4d39a4f6cfc413ac63d986a88441576 100755
--- a/kral.k
+++ b/kral.k
@@ -34,26 +34,31 @@ cgi:~"  "~`env[`"SCRIPT_PATH"]@!2
 d:$[cgi;"/"/|1_|"/"\`env[`"SCRIPT_PATH"];`env[`PWD]]
 argv:"\/"\`env[`"PATH_INFO"]
 f:$[cgi;*argv;`argv[2]]
-f:$["  "~f@!2;"index.kn";f]
+f:$["  "~f@!2;"example.kn";f]
 p:.[{(,"20 text/gemini"),0:d,"/",f};0N;,"51 text/gemini"]
 
-/process document
+/process cells
 put:{?[x;1+(y;y);,z]}
 out:{$[0=#y;x;o[put[x;*y;*z];1+1_y;1_z]]}
 
-/TODO: inline code
-
-/process cells
-cb:&{x~"%%"}'p
-$[~0=2!#cb;`err "unmatched%%";]
+cl:&'{3{x~"|||"}':x}'[p]
+cl:{x[&~2>1_{(x-y)*x-y}':-2,x]}'cl
+cb:&{1=#x}'cl
+/cb:&{x~"|||"}'p
+$[~0=2!#cb;`err "|||";]
 cb:(_0.5*#cb;2)#cb
-ci:{(*x)+1_!-/|x}'cb
-r:{"  :> ",x}'str',//'{x[&~`u=@'x]}'.''p[ci]
-p[*'cb]:(#cb)#,"```K source code"
-p[*'|'cb]:(#cb)#,"```"
-p:out[p;*'|'cb;r]
-p:out[p;&{"  :> "~x[!5]}'p;(#&{"  :> "~x[!5]}'p)#,"```"]
-p:out[p;-1+&{"  :> "~x[!5]}'p;(#&{"  :> "~x[!5]}'p)#,"```K output"]
-p:out[p;&{x~"```K output"}'p;(#&{x~"```K output"}'p)#""]
+ci:&{(0<#*x)&1<#x}'cl
+g:{$[~0=2!#x;`err "|||";]}'cl[ci] /garbage
+cl[ci]:{(_0.5*#x;2)#x}'cl[ci]
+/ci:{(*x)+1_!-/|x}'cb
+/il:&3<{+/"|"=x}'[p] /inlines
+/ci:(ci,,'il)@<*'ci,il
+/r:{"::> ",x}'str',//'{x[&~`u=@'x]}'.''p[ci]
+/p[*'cb]:(#cb)#,"```K source code"
+/p[*'|'cb]:(#cb)#,"```"
+/p:out[p;*'|'cb;r]
+/p:out[p;&{"::> "~x[!4]}'p;(#&{"::> "~x[!4]}'p)#,"```"]
+/p:out[p;-1+&{"::> "~x[!4]}'p;(#&{"::> "~x[!4]}'p)#,"```K output"]
+/p:out[p;&{x~"```K output"}'p;(#&{x~"```K output"}'p)#""]
 
-w[{x,"\r"}'[p]]
+/w[{x,"\r"}'[p]]
