GithubHelp home page GithubHelp logo

commondoc / scriba Goto Github PK

View Code? Open in Web Editor NEW
18.0 18.0 5.0 49 KB

A markup language with Scribe syntax

Home Page: http://commondoc.github.io/scriba/docs/overview.html

Common Lisp 88.17% Emacs Lisp 11.83%

scriba's People

Contributors

eudoxia0 avatar scymtym avatar svetlyak40wt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

scriba's Issues

Make error messages more friendly

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.

Scriba is unable to parse nested lists

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"

Scriba dislikes smiles

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?")

Scriba tries to parse content of the code block and sometimes fails

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

Parsed code-blocks might contain multiple TEXT and CONTENT nodes

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
>

Seems tests on Travis are not running for 6 years

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:

Screen Shot 2022-03-02 at 10 45 00

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.