commondoc / scriba Goto Github PK
View Code? Open in Web Editor NEWA markup language with Scribe syntax
Home Page: http://commondoc.github.io/scriba/docs/overview.html
A markup language with Scribe syntax
Home Page: http://commondoc.github.io/scriba/docs/overview.html
For example, if I write this in my document:
@link[url="http://commondoc.github.io/docs/overview.html"](CommonDoc)
Then this error pops up during rendering documentation:
NIL fell through ETYPECASE expression.
Wanted one of (SIMPLE-STRING QURI.PARSER::SIMPLE-BYTE-VECTOR
STRING).
[Condition of type SB-KERNEL:CASE-FAILURE]
Restarts:
0: [RETRY] Retry SLY mREPL evaluation request.
1: [*ABORT] Return to SLY's top level.
2: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING {1003504E33}>)
Backtrace:
0: (QURI.PARSER:PARSE-URI NIL :START 0 :END NIL)
1: (QURI.URI:URI NIL :START 0 :END NIL)
2: ((LAMBDA (COMMON-DOC-PLUMP.PARSER::ATTRIBUTES COMMON-DOC:CHILDREN) :IN "/Users/art/projects/lisp/cl-doc-systems/codex/.qlot/dists/ultralisp/software/CommonDoc-common-doc-plump-20190319083635/src/parse..
3: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT link {100677D823}>) [fast-method]
4: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (LIST)) (#<PLUMP-DOM:TEXT-NODE {100677C5B3}> #<PLUMP-DOM:TEXT-NODE {100677C953}> #<PLUMP-DOM:ELEMENT list {100677CC13}> #<PLUMP-DOM:TEXT-NODE {100677D543}> #<PL..
5: ((LAMBDA (COMMON-DOC-PLUMP.PARSER::ATTRIBUTES COMMON-DOC:CHILDREN) :IN "/Users/art/projects/lisp/cl-doc-systems/codex/.qlot/dists/ultralisp/software/CommonDoc-common-doc-plump-20190319083635/src/parse..
6: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT section {100677C553}>) [fast-method]
7: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (LIST)) (#<PLUMP-DOM:TEXT-NODE {100677BEE3}> #<PLUMP-DOM:TEXT-NODE {100677C293}> #<PLUMP-DOM:ELEMENT section {100677C553}> #<PLUMP-DOM:TEXT-NODE {100677DA03}> #..
8: ((LAMBDA (COMMON-DOC-PLUMP.PARSER::ATTRIBUTES COMMON-DOC:CHILDREN) :IN "/Users/art/projects/lisp/cl-doc-systems/codex/.qlot/dists/ultralisp/software/CommonDoc-common-doc-plump-20190319083635/src/parse..
9: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT section {100677BE53}>) [fast-method]
10: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (LIST)) (#<PLUMP-DOM:ELEMENT section {100677A583}> #<PLUMP-DOM:TEXT-NODE {100677BBA3}> #<PLUMP-DOM:ELEMENT section {100677BE53}> #<PLUMP-DOM:TEXT-NODE {100677EA..
11: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ROOT)) #<PLUMP-DOM:ROOT {100677EA53}>) [fast-method]
12: (COMMON-DOC-PLUMP.PARSER:PARSE-DOCUMENT #<PLUMP-DOM:ROOT {100677EA53}>)
13: (SCRIBA::STRING-TO-COMMON-DOC "@begin(section) ..)
It is especially hard to notice the problem in the source document because uri
and url
are really similar.
It would be nice to teach Scriba to tell me that parameter url
is not supported for the link
node and to list supported parameters.
And section title highlighting in the sidebar does not work for this section.
Example of this problem:
https://cl-doc-systems.github.io/codex/pros-&-cons-of-codex.html
For example, this code fails with error "No node with name begin":
CL-USER> (common-doc.format:parse-document
(make-instance 'scriba:scriba)
"
@begin(list)
@item(First item)
@item(Second item
@begin(list)
@item(Item of a nested list)
@end(list)
)
@end(list)
")
; Debugger entered on #<SIMPLE-ERROR "No node with name ~A" {70096C5C73}>
Full backtrace:
Backtrace:
0: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT begin {70098237B3}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::NODE = #<PLUMP-DOM:ELEMENT begin {70098237B3}>
1: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (VECTOR)) #(#<PLUMP-DOM:TEXT-NODE {7009823643}> #<PLUMP-DOM:ELEMENT begin {70098237B3}> #<PLUMP-DOM:TEXT-NODE {70098238A3}> #<PLUMP-DOM:ELEMENT item {7009823A23..
Locals:
COMMON-DOC-PLUMP.PARSER::VEC = #(#<PLUMP-DOM:TEXT-NODE {7009823643}> #<PLUMP-DOM:ELEMENT begin {70098237B3}> #<PLUMP-DOM:TEXT-NODE {70098238A3}> #<PLUMP-DOM:ELEMENT item {7009823A23}> #<PLUMP-DOM:TEXT-NODE {7009823B03}> ..)
2: ((LAMBDA (COMMON-DOC-PLUMP.PARSER::ATTRS COMMON-DOC:CHILDREN) :IN "/Users/art/projects/lisp/hypernot/.qlot/dists/ultralisp/software/CommonDoc-common-doc-plump-20190319083635/src/parser.lisp") #<unused..
Locals:
COMMON-DOC:CHILDREN = #(#<PLUMP-DOM:TEXT-NODE {70098231F3}> #<PLUMP-DOM:ELEMENT item {7009823363}> #<PLUMP-DOM:TEXT-NODE {7009823453}> #<PLUMP-DOM:ELEMENT item {70098235D3}> #<PLUMP-DOM:TEXT-NODE {7009823DC3}>)
3: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT list {7009823173}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::NODE = #<PLUMP-DOM:ELEMENT list {7009823173}>
4: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (LIST)) (#<PLUMP-DOM:TEXT-NODE {7009823003}> #<PLUMP-DOM:ELEMENT list {7009823173}> #<PLUMP-DOM:TEXT-NODE {7009823E63}>)) [fast-method]
Locals:
LIST = (#<PLUMP-DOM:TEXT-NODE {7009823003}> #<PLUMP-DOM:ELEMENT list {7009823173}> #<PLUMP-DOM:TEXT-NODE {7009823E63}>)
5: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ROOT)) #<PLUMP-DOM:ROOT {7009823EC3}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::ROOT = #<PLUMP-DOM:ROOT {7009823EC3}>
6: (COMMON-DOC-PLUMP.PARSER:PARSE-DOCUMENT #<PLUMP-DOM:ROOT {7009823EC3}>)
Locals:
NODE = #<PLUMP-DOM:ROOT {7009823EC3}>
TITLE = NIL
7: (SCRIBA::STRING-TO-COMMON-DOC " ..)
Locals:
STRING = "\n@begin(list)\n @item(First item)\n @item(Second item\n\n @begin(list)\n @item(Item of a nested list)\n @end(list)\n )\n@end(list)\n"
It unable to parse document with a smile. Here is a few examples:
CL-USER> (scriba::string-to-common-doc "Scriba breaks on smile :( why?")
CL-USER> (scriba::string-to-common-doc "Scriba breaks on smile :)")
They lead to errors like this:
At end of input
Scriba breaks on smile :( why?
^ (Line 1, Column 30, Position 30)
In context TAG-BODY:
While parsing TAG-BODY. Expected:
the character ( (LEFT_PARENTHESIS)
or the character ) (RIGHT_PARENTHESIS)
or the character @ (COMMERCIAL_AT)
or <end of input>
or anything but the character ( (LEFT_PARENTHESIS)
and the character ) (RIGHT_PARENTHESIS)
and the character @ (COMMERCIAL_AT)
[Condition of type ESRAP:ESRAP-PARSE-ERROR]
Restarts:
0: [RETRY] Retry SLY mREPL evaluation request.
1: [*ABORT] Return to SLY's top level.
2: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING {10036BD7C3}>)
Backtrace:
0: (ESRAP:ESRAP-PARSE-ERROR "Scriba breaks on smile :( why?" #<ESRAP::SUCCESSFUL-PARSE SCRIBA.PARSER:DOCUMENT @24>)
1: (SCRIBA.PARSER:PARSE-STRING "Scriba breaks on smile :( why?")
2: (SCRIBA.PLUMP:PARSE "Scriba breaks on smile :( why?")
3: (SCRIBA::STRING-TO-COMMON-DOC "Scriba breaks on smile :( why?")
I can't find any documentation of the full scriba format anywhere.
For example, it can fail if the code snippet contains a document in Scriba syntax with unknown tags.
Here is a minimal code to reproduce this problem:
CL-USER> (scriba::string-to-common-doc "
@begin[lang=lisp](code)
This is an example of Scriba markup:
@twitter(Bob)
@end(code)
")
The result is the error:
No node with name twitter
[Condition of type SIMPLE-ERROR]
Restarts:
0: [RETRY] Retry SLY mREPL evaluation request.
1: [*ABORT] Return to SLY's top level.
2: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING {10036BD7C3}>)
Backtrace:
0: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT twitter {10070BAE73}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::NODE = #<PLUMP-DOM:ELEMENT twitter {10070BAE73}>
1: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (VECTOR)) #(#<PLUMP-DOM:TEXT-NODE {10070BABC3}> #<PLUMP-DOM:ELEMENT twitter {10070BAE73}> #<PLUMP-DOM:TEXT-NODE {10070BAF63}>)) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::VEC = #(#<PLUMP-DOM:TEXT-NODE {10070BABC3}> #<PLUMP-DOM:ELEMENT twitter {10070BAE73}> #<PLUMP-DOM:TEXT-NODE {10070BAF63}>)
2: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ELEMENT)) #<PLUMP-DOM:ELEMENT code {10070BAAA3}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::ATTRIBUTES = #<HASH-TABLE :TEST EQUALP :COUNT 1 {10070BA9E3}>
COMMON-DOC-PLUMP.PARSER::NODE = #<PLUMP-DOM:ELEMENT code {10070BAAA3}>
3: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (LIST)) (#<PLUMP-DOM:TEXT-NODE {10070BA7F3}> #<PLUMP-DOM:ELEMENT code {10070BAAA3}> #<PLUMP-DOM:TEXT-NODE {10070BAFE3}>)) [fast-method]
Locals:
LIST = (#<PLUMP-DOM:TEXT-NODE {10070BA7F3}> #<PLUMP-DOM:ELEMENT code {10070BAAA3}> #<PLUMP-DOM:TEXT-NODE {10070BAFE3}>)
4: ((:METHOD COMMON-DOC-PLUMP.PARSER:PARSE (PLUMP-DOM:ROOT)) #<PLUMP-DOM:ROOT {10070BB043}>) [fast-method]
Locals:
COMMON-DOC-PLUMP.PARSER::ROOT = #<PLUMP-DOM:ROOT {10070BB043}>
5: (COMMON-DOC-PLUMP.PARSER:PARSE-DOCUMENT #<PLUMP-DOM:ROOT {10070BB043}>)
6: (SCRIBA::STRING-TO-COMMON-DOC " ..)
7: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SCRIBA::STRING-TO-COMMON-DOC " ..)
8: (EVAL (SCRIBA::STRING-TO-COMMON-DOC " ..)
if we call the scriba.parser:parse-string
, it will return @twitter(Bob
as parsed entity, not ass part of the code block:
CL-USER> (scriba.parser:parse-string "
@begin[lang=lisp](code)
This is an example of Scriba markup:
@twitter(Bob)
@end(code)
")
(:DOCUMENT "
"
(:NAME "begin" :ATTRS (("lang" . "lisp")) :BODY ("code")) "
This is an example of scriba markup:
"
(:NAME "twitter" :ATTRS NIL :BODY ("Bob")) "
"
(:NAME "end" :ATTRS NIL :BODY ("code")) "
")
NIL
T
I get some failures when running the tests, e.g. thsi one:
(test tag
(test-equal "@test()"
"<test/>")
(test-equal "@test(a)"
"<test>a</test>"))
It gets "<test></test">" rather than "<test/>" for the first form. I checked in plump, and theanswer is that to get the shorter string you need to bind plump:*tag-dispatchers*..
Shinmera/plump#37
Please consider adding :description, :author and :license information to your ASDF system. This will greatly help Quicklisp users and make it easier for them to report bugs.
More information:
http://blog.quicklisp.org/2015/05/looking-for-more-metadata.html
https://www.quicklisp.org
I just want to clarify if this is an expected and desired behaviour.
Personally I'm expecting CODE-BLOCK nodes always have only a single TEXT-NODE child node (or probably even just keep it's content in a slot instead of having CHILDREN slot.
Here is a demo of a simple case, when parsing will lead to a multiple nodes. Pay attention, however STRONG markup does not parsed:
CL-USER> (common-doc.format:parse-document
(make-instance 'scriba:scriba)
"@begin(code)
*Some*
(code)
block
@end(code)")
#<COMMON-DOC:DOCUMENT "">
CL-USER> (reblocks-text-editor/utils/common-doc:print-tree *)
#<CODE-BLOCK children: TEXT-NODE, CONTENT-NODE, TEXT-NODE>
#<TEXT-NODE text: *Some*
>
#<CONTENT-NODE children: TEXT-NODE, TEXT-NODE, TEXT-NODE>
#<TEXT-NODE text: (>
#<TEXT-NODE text: code>
#<TEXT-NODE text: )>
#<TEXT-NODE text:
block
>
Some tests are failing when I'm running them on my machine, but Travis badge is green and Travis says this test suite was run 6 years ago:
Here is what I've got on my machine:
PLUMP> (ql:quickload :scriba-test)
To load "scriba-test":
Load 1 ASDF system:
scriba-test
; Loading "scriba-test"
[package scriba-test.plump].......................
[package scriba-test.emitter].....................
[package scriba-test]
Running test suite PARSER
Running test UNQUOTED-STRING ......
Running test QUOTED-STRING ..........
Running test GENERAL-STRING ..
Running test TAG-NAME .....
Running test TAG-ATTRIBUTE ...
Running test TAG-ATTRIBUTES-LIST ..........
Running test TAG-BODY .........
Running test TAGS .......
Running test EMPTY-TAGS ...
Running test NESTED-TAGS ..
Running test DOCUMENT ..
Running test PARSE-STRING .
Did 60 checks.
Pass: 60 (100%)
Skip: 0 ( 0%)
Fail: 0 ( 0%)
Running test suite PLUMP
Running test TEXT ..
Running test TAG f.
Running test NESTED-TAGS ffff
Running test BEGIN-END-BLOCKS .
Running test NESTED-LISTS- .
Running test ATTRIBUTES f
Did 11 checks.
Pass: 5 (45%)
Skip: 0 ( 0%)
Fail: 6 (54%)
Failure Details:
--------------------------------
ATTRIBUTES in PLUMP []:
"<node attr=\"val\"/>"
evaluated to
"<node attr=\"val\"/>"
which is not
EQUAL
to
"<node attr=\"val\"></node>"
--------------------------------
--------------------------------
NESTED-TAGS in PLUMP []:
"<a><b/></a>"
evaluated to
"<a><b/></a>"
which is not
EQUAL
to
"<a><b></b></a>"
--------------------------------
--------------------------------
NESTED-TAGS in PLUMP []:
"<a><b/></a>"
evaluated to
"<a><b/></a>"
which is not
EQUAL
to
"<a><b></b></a>"
--------------------------------
--------------------------------
NESTED-TAGS in PLUMP []:
"<a><b><c/></b></a>"
evaluated to
"<a><b><c/></b></a>"
which is not
EQUAL
to
"<a><b><c></c></b></a>"
--------------------------------
--------------------------------
NESTED-TAGS in PLUMP []:
"<a><b/><c/></a>"
evaluated to
"<a><b/><c/></a>"
which is not
EQUAL
to
"<a><b></b><c></c></a>"
--------------------------------
--------------------------------
TAG in PLUMP []:
"<test/>"
evaluated to
"<test/>"
which is not
EQUAL
to
"<test></test>"
--------------------------------
Running test suite EMITTER
Running test MARKUP .......
Running test PARAGRAPH .
Running test CODE-BLOCK .
Running test QUOTES ..
Running test LISTS ....
Running test IMAGES .
Running test TABLES .
Running test SECTION .
Running test WEB-LINK-1 .
Running test WEB-LINK-2 .
Running test REF-LINK-1 .
Running test REF-LINK-2 .
Running test REF-LINK-3 .
Running test REF-LINK-4 .
Running test REF-LINK-5 .
Did 25 checks.
Pass: 25 (100%)
Skip: 0 ( 0%)
Fail: 0 ( 0%)
(:SCRIBA-TEST)
I can help you to set up GitHub workflow, using 40ANTS-CI workflow generator.
What do you think, @eudoxia0?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.