├── .github └── workflows │ └── CI.yml ├── .gitignore ├── .larabot.conf ├── LICENSE ├── README.md ├── benchmark ├── antlr │ ├── JSON.g4 │ ├── JSON.interp │ ├── JSON.tokens │ ├── JSONBaseListener.java │ ├── JSONLexer.interp │ ├── JSONLexer.java │ ├── JSONLexer.tokens │ ├── JSONListener.java │ └── JSONParser.java ├── lib │ ├── ANTLRParser.jar │ └── antlr-runtime-4.7.2.jar ├── resources │ ├── failing-scp.json │ ├── largest-pwd.json │ ├── normal-100k.json │ ├── normal-10M.json │ ├── normal-10k.json │ ├── normal-1M.json │ ├── normal-200k.json │ ├── normal-300k.json │ ├── normal-400k.json │ ├── normal-500k.json │ ├── normal-600k.json │ ├── normal-700k.json │ ├── normal-800k.json │ ├── normal-900k.json │ └── too-large-for-pwd.json └── src │ ├── Benchmarks.scala │ ├── Crashes.scala │ ├── Data.scala │ ├── json │ ├── Commons.scala │ ├── ParsebackParser.scala │ ├── ScalaParser.scala │ └── ScallionParser.scala │ └── scallion │ └── simplell1 │ └── Parsing.scala ├── build.sbt ├── docs ├── favicon.ico ├── fonts │ ├── FiraCode-Regular.ttf │ ├── Inter-Bold.ttf │ ├── Inter-Medium.ttf │ ├── Inter-Regular.ttf │ ├── Inter-SemiBold.ttf │ ├── dotty-icons.ttf │ └── dotty-icons.woff ├── hljs │ ├── LICENSE │ └── highlight.pack.js ├── images │ ├── banner-icons │ │ ├── error.svg │ │ ├── info.svg │ │ ├── neutral.svg │ │ ├── success.svg │ │ └── warning.svg │ ├── bulb │ │ ├── dark │ │ │ └── default.svg │ │ └── light │ │ │ └── default.svg │ ├── class-big.svg │ ├── class-dark-big.svg │ ├── class-dark.svg │ ├── class.svg │ ├── class_comp.svg │ ├── def-big.svg │ ├── def-dark-big.svg │ ├── discord-icon-black.png │ ├── discord-icon-white.png │ ├── enum-big.svg │ ├── enum-dark-big.svg │ ├── enum-dark.svg │ ├── enum.svg │ ├── enum_comp.svg │ ├── footer-icon │ │ ├── dark │ │ │ └── default.svg │ │ └── light │ │ │ └── default.svg │ ├── github-icon-black.png │ ├── github-icon-white.png │ ├── gitter-icon-black.png │ ├── gitter-icon-white.png │ ├── given-big.svg │ ├── given-dark-big.svg │ ├── given-dark.svg │ ├── given.svg │ ├── icon-buttons │ │ ├── arrow-down │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── arrow-right │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── close │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── copy │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── discord │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── gh │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── gitter │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── hamburger │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── link │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── menu-animated-open │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── menu-animated │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── minus │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── moon │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── plus │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── search │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ ├── sun │ │ │ ├── dark │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ │ └── light │ │ │ │ ├── active.svg │ │ │ │ ├── default.svg │ │ │ │ ├── disabled.svg │ │ │ │ ├── focus.svg │ │ │ │ ├── hover.svg │ │ │ │ └── selected.svg │ │ └── twitter │ │ │ ├── dark │ │ │ ├── active.svg │ │ │ ├── default.svg │ │ │ ├── disabled.svg │ │ │ ├── focus.svg │ │ │ ├── hover.svg │ │ │ └── selected.svg │ │ │ └── light │ │ │ ├── active.svg │ │ │ ├── default.svg │ │ │ ├── disabled.svg │ │ │ ├── focus.svg │ │ │ ├── hover.svg │ │ │ └── selected.svg │ ├── info │ │ ├── dark │ │ │ └── default.svg │ │ └── light │ │ │ └── default.svg │ ├── inkuire.svg │ ├── method-big.svg │ ├── method-dark-big.svg │ ├── method-dark.svg │ ├── method.svg │ ├── no-results-icon.svg │ ├── object-big.svg │ ├── object-dark-big.svg │ ├── object-dark.svg │ ├── object.svg │ ├── object_comp.svg │ ├── package-big.svg │ ├── package-dark-big.svg │ ├── package-dark.svg │ ├── package.svg │ ├── scaladoc_logo.svg │ ├── scaladoc_logo_dark.svg │ ├── static-big.svg │ ├── static-dark-big.svg │ ├── static-dark.svg │ ├── static.svg │ ├── thick-dark.svg │ ├── thick.svg │ ├── trait-big.svg │ ├── trait-dark-big.svg │ ├── trait-dark.svg │ ├── trait.svg │ ├── trait_comp.svg │ ├── twitter-icon-black.png │ ├── twitter-icon-white.png │ ├── type-big.svg │ ├── type-dark-big.svg │ ├── type-dark.svg │ ├── type.svg │ ├── val-big.svg │ ├── val-dark-big.svg │ ├── val-dark.svg │ └── val.svg ├── index.html ├── scaladoc.version ├── scallion.html ├── scallion │ ├── $tilde$.html │ ├── Debug.html │ ├── Enumeration$Enumerator$.html │ ├── Enumeration.html │ ├── Operators$Associativity.html │ ├── Operators$LeftAssociative$.html │ ├── Operators$Level.html │ ├── Operators$LevelDecorator.html │ ├── Operators$RightAssociative$.html │ ├── Operators.html │ ├── PairDecorator.html │ ├── Parsers.html │ ├── Parsing$Conflict$$FirstConflict.html │ ├── Parsing$Conflict$$FollowConflict.html │ ├── Parsing$Conflict$$NullableConflict.html │ ├── Parsing$Conflict$.html │ ├── Parsing$Conflict.html │ ├── Parsing$ConflictException.html │ ├── Parsing$ParseResult.html │ ├── Parsing$Parsed.html │ ├── Parsing$Parser$.html │ ├── Parsing$Parser.html │ ├── Parsing$Properties.html │ ├── Parsing$UnexpectedEnd.html │ ├── Parsing$UnexpectedToken.html │ ├── Parsing.html │ ├── PrettyPrinting$PrettyPrinter$.html │ ├── PrettyPrinting$PrettyPrinter.html │ ├── PrettyPrinting.html │ ├── Syntaxes$Implicits$.html │ ├── Syntaxes$SafeImplicits$.html │ ├── Syntaxes$Skip.html │ ├── Syntaxes$Syntax$$Binary.html │ ├── Syntaxes$Syntax$$Disjunction.html │ ├── Syntaxes$Syntax$$Elem.html │ ├── Syntaxes$Syntax$$Failure.html │ ├── Syntaxes$Syntax$$Marked.html │ ├── Syntaxes$Syntax$$Recursive$.html │ ├── Syntaxes$Syntax$$Recursive.html │ ├── Syntaxes$Syntax$$Sequence.html │ ├── Syntaxes$Syntax$$Success.html │ ├── Syntaxes$Syntax$$Transform.html │ ├── Syntaxes$Syntax$$Unary.html │ ├── Syntaxes$Syntax$.html │ ├── Syntaxes$Syntax.html │ ├── Syntaxes$Uninteresting.html │ ├── Syntaxes$UnsafeImplicits.html │ ├── Syntaxes.html │ ├── util.html │ ├── util │ │ └── Unfolds$.html │ ├── visualization.html │ └── visualization │ │ ├── Grammars$grammars$$Epsilon$.html │ │ ├── Grammars$grammars$$Grammar.html │ │ ├── Grammars$grammars$$NonTerminal.html │ │ ├── Grammars$grammars$$Rule.html │ │ ├── Grammars$grammars$$Symbol.html │ │ ├── Grammars$grammars$$Terminal.html │ │ ├── Grammars$grammars$.html │ │ ├── Grammars.html │ │ ├── Graphs$graphs$.html │ │ └── Graphs.html ├── scripts │ ├── common │ │ ├── component.js │ │ └── utils.js │ ├── components │ │ ├── DocumentableList.js │ │ ├── Filter.js │ │ ├── FilterBar.js │ │ ├── FilterGroup.js │ │ └── Input.js │ ├── contributors.js │ ├── data.js │ ├── hljs-scala3.js │ ├── inkuire-worker.js │ ├── inkuire.js │ ├── scaladoc-scalajs.js │ ├── scastieConfiguration.js │ ├── searchData.js │ ├── theme.js │ └── ux.js ├── styles │ ├── apistyles.css │ ├── code-snippets.css │ ├── content-contributors.css │ ├── dotty-icons.css │ ├── filter-bar.css │ ├── fontawesome.css │ ├── nord-light.css │ ├── searchbar.css │ ├── social-links.css │ ├── staticsitestyles.css │ ├── theme │ │ ├── bundle.css │ │ ├── components │ │ │ ├── bundle.css │ │ │ └── button │ │ │ │ └── bundle.css │ │ └── layout │ │ │ └── bundle.css │ └── versions-dropdown.css └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── example ├── calculator │ └── Calculator.scala ├── json │ └── JSON.scala ├── lambda │ └── Lambda.scala └── roman │ └── Roman.scala ├── images └── scallion.png ├── paper └── PLDI20_ZippyLL1PWD.pdf ├── project ├── build.properties ├── plugins.sbt └── root-doc.txt └── src ├── main └── scala │ └── scallion │ ├── Debug.scala │ ├── Enumeration.scala │ ├── Operators.scala │ ├── Parsing.scala │ ├── PrettyPrinting.scala │ ├── Syntaxes.scala │ ├── package.scala │ ├── util │ ├── Unfolds.scala │ └── internal │ │ ├── Enums.scala │ │ └── Propagators.scala │ └── visualization │ ├── Grammars.scala │ └── Graphs.scala └── test └── scala └── scallion ├── LL1ParserTests.scala ├── json ├── JSON.scala └── JSONParserTests.scala └── roman ├── Roman.scala └── RomanSyntaxTests.scala /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: Compile and run sbt test 2 | on: 3 | pull_request: 4 | push: 5 | branches: 6 | - main 7 | jobs: 8 | tests: 9 | if: github.event.pull_request.draft == false 10 | runs-on: [self-hosted, linux] 11 | env: 12 | # define Java options for both official sbt and sbt-extras 13 | JAVA_OPTS: -Xss64M -Xms1024M -Xmx8G 14 | JVM_OPTS: -Xss64M -Xms1024M -Xmx8G 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v4 18 | with: 19 | submodules: recursive 20 | - name: Setup JDK 21 | uses: actions/setup-java@v4 22 | with: 23 | distribution: temurin 24 | java-version: 17 25 | - name: Install and unpack sbt 26 | run: | 27 | wget https://github.com/sbt/sbt/releases/download/v1.10.1/sbt-1.10.1.tgz 28 | tar xfz sbt-1.10.1.tgz 29 | echo "PATH=./sbt/bin/:$PATH" >> "$GITHUB_ENV" 30 | - name: Run Tests 31 | run: sbt -Dtest-parallelism=4 -batch test 32 | fail_if_pull_request_is_draft: 33 | if: github.event.pull_request.draft == true 34 | runs-on: [self-hosted, linux] 35 | steps: 36 | - name: Fails in order to indicate that pull request needs to be marked as ready to review and tests workflows need to pass. 37 | run: exit 1 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | project/target/ 3 | example/target/ 4 | .bsp 5 | -------------------------------------------------------------------------------- /.larabot.conf: -------------------------------------------------------------------------------- 1 | commands = [ 2 | "sbt -batch ++2.12.8 test" 3 | "sbt -batch ++2.13.1 test" 4 | ] 5 | 6 | trusted = [ 7 | "colder" 8 | "larsrh" 9 | "mantognini" 10 | "manoskouk" 11 | "MikaelMayer" 12 | "ravimad" 13 | "regb" 14 | "romac" 15 | "samarion" 16 | "vkuncak" 17 | "redelmann" 18 | "jad-hamza" 19 | "gsps" 20 | ] 21 | 22 | notify { 23 | master = [ 24 | "leon-dev@googlegroups.com" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Compile and run sbt test](https://github.com/epfl-lara/scallion/actions/workflows/CI.yml/badge.svg)](https://github.com/epfl-lara/scallion/actions/workflows/CI.yml) 2 | 3 |

4 | SCALL1ON 5 |

6 | 7 | # Overview 8 | 9 | Scallion is a library for writing parsers and pretty printers for LL(1) languages in Scala. 10 | 11 | # Documentation 12 | 13 | A comprehensive Scaladoc API is [available online](https://epfl-lara.github.io/scallion/). 14 | 15 | # Parsing Algorithm 16 | 17 | Scallion uses a novel parsing algorithm that we have described in the PLDI'20 paper: [Zippy LL(1) Parsing with Derivatives](paper/PLDI20_ZippyLL1PWD.pdf). 18 | The algorithm has been [formally proven correct in Coq](https://github.com/epfl-lara/scallion-proofs/). 19 | 20 | # Examples 21 | 22 | * [JSON](example/json/JSON.scala): This example showcases how to build a basic JSON parser using Scallion. 23 | * [Lambda Calculus](example/lambda/Lambda.scala): This example shows how to get a pretty printer *almost for free* alongside your parser. 24 | * [Calculator](example/calculator/Calculator.scala): This example shows how to use the `operators` combinator to easily handle operators with various associativities and priorities. 25 | * [Roman Numerals](example/roman/Roman.scala): This example presents a simple parser and pretty printer for roman numerals. 26 | 27 | -------------------------------------------------------------------------------- /benchmark/antlr/JSON.g4: -------------------------------------------------------------------------------- 1 | 2 | /** Taken from "The Definitive ANTLR 4 Reference" by Terence Parr */ 3 | 4 | // Derived from http://json.org 5 | grammar JSON; 6 | 7 | json 8 | : value 9 | ; 10 | 11 | obj 12 | : '{' pair (',' pair)* '}' 13 | | '{' '}' 14 | ; 15 | 16 | pair 17 | : STRING ':' value 18 | ; 19 | 20 | array 21 | : '[' value (',' value)* ']' 22 | | '[' ']' 23 | ; 24 | 25 | value 26 | : STRING 27 | | NUMBER 28 | | obj 29 | | array 30 | | 'true' 31 | | 'false' 32 | | 'null' 33 | ; 34 | 35 | 36 | STRING 37 | : '"' (ESC | SAFECODEPOINT)* '"' 38 | ; 39 | 40 | 41 | fragment ESC 42 | : '\\' (["\\/bfnrt] | UNICODE) 43 | ; 44 | 45 | 46 | fragment UNICODE 47 | : 'u' HEX HEX HEX HEX 48 | ; 49 | 50 | 51 | fragment HEX 52 | : [0-9a-fA-F] 53 | ; 54 | 55 | 56 | fragment SAFECODEPOINT 57 | : ~ ["\\\u0000-\u001F] 58 | ; 59 | 60 | 61 | NUMBER 62 | : '-'? INT ('.' [0-9] +)? EXP? 63 | ; 64 | 65 | 66 | fragment INT 67 | : '0' | [1-9] [0-9]* 68 | ; 69 | 70 | // no leading zeros 71 | 72 | fragment EXP 73 | : [Ee] [+\-]? INT 74 | ; 75 | 76 | // \- since - means "range" inside [...] 77 | 78 | WS 79 | : [ \t\n\r] + -> skip 80 | ; 81 | -------------------------------------------------------------------------------- /benchmark/antlr/JSON.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | T__2=3 4 | T__3=4 5 | T__4=5 6 | T__5=6 7 | T__6=7 8 | T__7=8 9 | T__8=9 10 | STRING=10 11 | NUMBER=11 12 | WS=12 13 | '{'=1 14 | ','=2 15 | '}'=3 16 | ':'=4 17 | '['=5 18 | ']'=6 19 | 'true'=7 20 | 'false'=8 21 | 'null'=9 22 | -------------------------------------------------------------------------------- /benchmark/antlr/JSONLexer.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | T__1=2 3 | T__2=3 4 | T__3=4 5 | T__4=5 6 | T__5=6 7 | T__6=7 8 | T__7=8 9 | T__8=9 10 | STRING=10 11 | NUMBER=11 12 | WS=12 13 | '{'=1 14 | ','=2 15 | '}'=3 16 | ':'=4 17 | '['=5 18 | ']'=6 19 | 'true'=7 20 | 'false'=8 21 | 'null'=9 22 | -------------------------------------------------------------------------------- /benchmark/lib/ANTLRParser.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/benchmark/lib/ANTLRParser.jar -------------------------------------------------------------------------------- /benchmark/lib/antlr-runtime-4.7.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/benchmark/lib/antlr-runtime-4.7.2.jar -------------------------------------------------------------------------------- /benchmark/resources/largest-pwd.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "_id": "5dd6c20fd06594bad16b3185", 4 | "index": 0, 5 | "guid": "24b4a7d8-272a-4eca-a9e5-0693fa8078a4", 6 | "isActive": false, 7 | "balance": "$1,720.68", 8 | "picture": "http://placehold.it/32x32", 9 | "age": 33, 10 | "eyeColor": "brown", 11 | "name": "Victoria Ford", 12 | "gender": "female", 13 | "company": "ANIVET", 14 | "email": "victoriaford@anivet.com", 15 | "phone": "+1 (963) 413-3498", 16 | "address": "675 Remsen Avenue, Hasty, Washington, 1710", 17 | "about": "Minim dolore labore laboris ea velit sit nulla. Amet ex ut eiusmod sunt reprehenderit voluptate. Laborum dolor nisi non pariatur sunt officia quis ut eu. Et magna enim esse anim proident. Irure incididunt reprehenderit ut esse cupidatat culpa enim ullamco duis consectetur. Mollit consequat ex qui cupidatat amet eu cillum elit occaecat eu.\r\n", 18 | "registered": "2015-07-23T04:51:25 -02:00", 19 | "latitude": -84.227777, 20 | "longitude": -28.672767, 21 | "tags": [ 22 | "veniam", 23 | "amet", 24 | "officia", 25 | "exercitation", 26 | "do", 27 | "labore", 28 | "pariatur" 29 | ], 30 | "friends": [ 31 | { 32 | "id": 0, 33 | "name": "Roseann Patton" 34 | }, 35 | { 36 | "id": 1, 37 | "name": "Henson Wilkins" 38 | }, 39 | { 40 | "id": 2, 41 | "name": "Mable Marks" 42 | } 43 | ], 44 | "greeting": "Hello, Victoria Ford! You have 1 unread messages.", 45 | "favoriteFruit": "banana" 46 | } 47 | ] -------------------------------------------------------------------------------- /benchmark/src/Crashes.scala: -------------------------------------------------------------------------------- 1 | 2 | import json._ 3 | 4 | object Crashes { 5 | 6 | def main(args: Array[String]) { 7 | 8 | println("Making Scala Parser Combinators crash.") 9 | try { 10 | val tokens = JSONLexer(io.Source.fromFile("benchmark/resources/failing-scp.json")) 11 | val parser = new ScalaParser 12 | parser(tokens) 13 | println("No crash.") 14 | } 15 | catch { 16 | case e: Throwable => 17 | println("Crashed...") 18 | println(e) 19 | } 20 | 21 | println("Making Parseback crash.") 22 | try { 23 | val parser = new ParsebackParser 24 | parser(scala.io.Source.fromFile("benchmark/resources/too-large-for-pwd.json").getLines().toSeq) 25 | println("No crash.") 26 | } 27 | catch { 28 | case e: Throwable => 29 | println("Crashed...") 30 | println(e) 31 | } 32 | 33 | println("Trying to show that Parseback doesn't simply always crash.") 34 | try { 35 | val parser = new ParsebackParser 36 | parser(scala.io.Source.fromFile("benchmark/resources/largest-pwd.json").getLines().toSeq) 37 | println("No crash, as desired.") 38 | } 39 | catch { 40 | case e: Throwable => 41 | println("Unexpectedly crashed.") 42 | println(e) 43 | } 44 | 45 | println("Making simple (non-zippy) LL(1) parsing with derivatives crash. (Warning: May take several minutes.)") 46 | try { 47 | val tokens = JSONLexer(io.Source.fromFile("benchmark/resources/normal-10M.json")) 48 | val parser = new ScallionParser 49 | parser.simpleApply(tokens) 50 | println("No crash.") 51 | } 52 | catch { 53 | case e: Throwable => 54 | println("Crashed...") 55 | println(e) 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /benchmark/src/Data.scala: -------------------------------------------------------------------------------- 1 | 2 | import json._ 3 | 4 | /** Prints token counts for the various JSON files. */ 5 | object Data { 6 | def main(args: Array[String]): Unit = { 7 | val files = Seq( 8 | "failing-scp", "largest-pwd", "too-large-for-pwd", 9 | "normal-100k", "normal-200k", "normal-300k", "normal-400k", 10 | "normal-500k", "normal-600k", "normal-700k", "normal-800k", 11 | "normal-900k", "normal-1M", "normal-10M") 12 | 13 | for (file <- files) { 14 | val ts = JSONLexer(io.Source.fromFile("benchmark/resources/" + file + ".json")).toArray 15 | println(file + ": " + ts.size + " tokens.") 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /benchmark/src/json/ParsebackParser.scala: -------------------------------------------------------------------------------- 1 | package json 2 | 3 | import parseback._ 4 | import parseback.compat.cats._ 5 | 6 | class ParsebackParser { 7 | import parseback.LineStream 8 | 9 | import cats.Eval 10 | 11 | lazy val number: Parser[Value] = regex("""\d+""".r) ^^ { (_, n) => NumberValue(n.toDouble, (0, 0)) } 12 | 13 | lazy val string: Parser[StringValue] = regex(""""[^"]*"""".r) ^^ { (_, cs) => StringValue(cs.substring(1, cs.length - 1), (0, 0)) } 14 | 15 | lazy val nul: Parser[Value] = "null" ^^^ NullValue((0, 0)) 16 | 17 | lazy val bool: Parser[Value] = "true" ^^^ BooleanValue(true, (0, 0)) | "false" ^^^ BooleanValue(false, (0, 0)) 18 | 19 | lazy val binding: Parser[(StringValue, Value)] = (string <~ space <~ ":" <~ space) ~ value 20 | 21 | lazy val array: Parser[Value] = "[" ~> space ~> values <~ space <~ "]" ^^ { (_, vs) => ArrayValue(vs, (0, 0)) } 22 | 23 | lazy val values: Parser[Seq[Value]] = (value ~ (space ~> "," ~> space ~> values | () ^^^ List.empty[Value])) ^^ { (_, v, vs) => v +: vs } | () ^^^ List.empty[Value] 24 | 25 | lazy val space: Parser[String] = regex("""\s+""".r) | "" 26 | 27 | lazy val value: Parser[Value] = number | array | nul | bool | string | objekt 28 | 29 | lazy val bindings: Parser[Seq[(StringValue, Value)]] = (binding ~ (space ~> "," ~> space ~> bindings | () ^^^ List.empty[(StringValue, Value)])) ^^ { (_, k, v, vs) => (k, v) +: vs } | () ^^^ List.empty[(StringValue, Value)] 30 | 31 | lazy val objekt: Parser[Value] = "{" ~> space ~> bindings <~ space <~ "]" ^^ { (_, vs) => ObjectValue(vs, (0, 0)) } 32 | 33 | def apply(lines: Seq[String]) = { 34 | val input: LineStream[Eval] = LineStream(lines) 35 | value(input).value 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/favicon.ico -------------------------------------------------------------------------------- /docs/fonts/FiraCode-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/FiraCode-Regular.ttf -------------------------------------------------------------------------------- /docs/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /docs/fonts/Inter-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/Inter-Medium.ttf -------------------------------------------------------------------------------- /docs/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /docs/fonts/Inter-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/Inter-SemiBold.ttf -------------------------------------------------------------------------------- /docs/fonts/dotty-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/dotty-icons.ttf -------------------------------------------------------------------------------- /docs/fonts/dotty-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/fonts/dotty-icons.woff -------------------------------------------------------------------------------- /docs/hljs/LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2006, Ivan Sagalaev. 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /docs/images/banner-icons/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/banner-icons/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/banner-icons/neutral.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/banner-icons/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/banner-icons/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/class-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/class-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/class-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/def-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/def-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/discord-icon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/discord-icon-black.png -------------------------------------------------------------------------------- /docs/images/discord-icon-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/discord-icon-white.png -------------------------------------------------------------------------------- /docs/images/enum-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/enum-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/enum-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/github-icon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/github-icon-black.png -------------------------------------------------------------------------------- /docs/images/github-icon-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/github-icon-white.png -------------------------------------------------------------------------------- /docs/images/gitter-icon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/gitter-icon-black.png -------------------------------------------------------------------------------- /docs/images/gitter-icon-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/gitter-icon-white.png -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-down/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/arrow-right/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/close/light/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/copy/light/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gh/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/gitter/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/hamburger/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/link/light/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated-open/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/menu-animated/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/minus/light/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/moon/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/active.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/default.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/focus.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/hover.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/plus/light/selected.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/search/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/dark/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/focus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/icon-buttons/twitter/light/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/info/dark/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/info/light/default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/method-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/method-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/method-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/method.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/no-results-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/images/object-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/object-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/object-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/package-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/package-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/package-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/package.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/scaladoc_logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/scaladoc_logo_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/images/static-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/static-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/static-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/static.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/thick-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/images/thick.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/trait-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/trait-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/trait-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/trait.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/twitter-icon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/twitter-icon-black.png -------------------------------------------------------------------------------- /docs/images/twitter-icon-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/images/twitter-icon-white.png -------------------------------------------------------------------------------- /docs/images/type-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/type-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/type-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/type.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/val-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/val-dark-big.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/images/val-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/images/val.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/scaladoc.version: -------------------------------------------------------------------------------- 1 | 3.5.0 -------------------------------------------------------------------------------- /docs/scripts/common/component.js: -------------------------------------------------------------------------------- 1 | class Component { 2 | constructor(props = {}) { 3 | this.props = props; 4 | this.prevProps = {}; 5 | this.state = {}; 6 | } 7 | 8 | setState(nextState, cb = () => {}) { 9 | if (typeof nextState === "function") { 10 | this.state = { 11 | ...this.state, 12 | ...nextState(this.state), 13 | }; 14 | } else { 15 | this.state = { 16 | ...this.state, 17 | ...nextState, 18 | }; 19 | } 20 | 21 | cb(); 22 | 23 | if (this.render) { 24 | this.render(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /docs/scripts/common/utils.js: -------------------------------------------------------------------------------- 1 | const findRef = (searchBy, element = document) => 2 | element.querySelector(searchBy); 3 | 4 | const findRefs = (searchBy, element = document) => 5 | element ? [...element.querySelectorAll(searchBy)] : []; 6 | 7 | const withEvent = (element, listener, callback) => { 8 | element && element.addEventListener(listener, callback); 9 | return () => element && element.removeEventListener(listener, callback); 10 | }; 11 | 12 | const attachDOM = (element, html) => { 13 | if (element) { 14 | element.innerHTML = htmlToString(html); 15 | } 16 | }; 17 | 18 | const htmlToString = (html) => { 19 | if (Array.isArray(html)) { 20 | return html.join(""); 21 | } 22 | return html; 23 | }; 24 | 25 | const isFilterData = key => key.startsWith("f") 26 | 27 | const getFilterKey = key => `f${key.charAt(0).toUpperCase()}${key.slice(1)}` 28 | 29 | const attachListeners = (elementsRefs, type, callback) => 30 | elementsRefs.map((elRef) => withEvent(elRef, type, callback)); 31 | 32 | const getElementTextContent = (element) => (element ? element.textContent : ""); 33 | 34 | const getElementDescription = (elementRef) => 35 | findRef(".documentableBrief", elementRef); 36 | 37 | const getElementNameRef = (elementRef) => 38 | findRef(".documentableName", elementRef); 39 | -------------------------------------------------------------------------------- /docs/scripts/components/Input.js: -------------------------------------------------------------------------------- 1 | class Input extends Component { 2 | constructor(props) { 3 | super(props); 4 | 5 | this.inputRef = findRef(".filterableInput"); 6 | this.onChangeFn = withEvent(this.inputRef, "input", this.onInputChange); 7 | this.onKeydownFn = withEvent(this.inputRef, "keydown", this.onKeydown); 8 | } 9 | 10 | onInputChange = ({ currentTarget: { value } }) => { 11 | setTimeout(this.props.onInputChange(value), 300); 12 | }; 13 | 14 | onKeydown = (e) => { 15 | // if the user hits Escape while typing in the filter input, 16 | // clear the filter and un-focus the input 17 | if (e.keyCode == 27) { 18 | this.inputRef.value = ''; 19 | this.onInputChange(e); 20 | setTimeout(() => this.inputRef.blur(), 1); 21 | } 22 | } 23 | 24 | componentWillUnmount() { 25 | if (this.onChangeFn) { 26 | this.onChangeFn(); 27 | this.onKeydownFn(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /docs/scripts/data.js: -------------------------------------------------------------------------------- 1 | var scaladocData = {"filterDefaults":{"inherited":"Not inherited","implicitly":"Explicit method","keywords":"no keywords","visibility":"public","extension":"Standard member"}} -------------------------------------------------------------------------------- /docs/scripts/inkuire-worker.js: -------------------------------------------------------------------------------- 1 | importScripts("inkuire.js"); 2 | WorkerMain.main(); 3 | -------------------------------------------------------------------------------- /docs/scripts/scastieConfiguration.js: -------------------------------------------------------------------------------- 1 | scastieConfiguration = "" -------------------------------------------------------------------------------- /docs/styles/apistyles.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/styles/apistyles.css -------------------------------------------------------------------------------- /docs/styles/content-contributors.css: -------------------------------------------------------------------------------- 1 | .content-contributors.hidden { 2 | display: none; 3 | } 4 | 5 | .content-contributors .contributors-container div a { 6 | vertical-align: middle; 7 | padding: 3px; 8 | text-decoration: none; 9 | } 10 | 11 | .content-contributors { 12 | background-color: var(--background-neutral); 13 | padding: calc(3 * var(--base-spacing)); 14 | border-radius: 4px; 15 | } 16 | 17 | .content-contributors .contributors-container { 18 | display: flex; 19 | flex-wrap: wrap; 20 | align-items: center; 21 | padding-bottom: 25px; 22 | row-gap: calc(3 * var(--base-spacing)); 23 | column-gap: calc(4 * var(--base-spacing)); 24 | } 25 | 26 | .content-contributors h1 { 27 | color: var(--text-primary); 28 | padding-bottom: calc(3 * var(--base-spacing)); 29 | } 30 | 31 | .content-contributors .contributors-container div img { 32 | vertical-align: middle; 33 | width: 35px; 34 | height: 35px; 35 | margin-bottom: 0; 36 | border-radius: 50%; 37 | margin-right: calc(1.5 * var(--base-spacing)); 38 | } 39 | 40 | #content .content-contributors .contributors-container div a { 41 | text-decoration: none; 42 | border-bottom: none; 43 | } 44 | 45 | .content-contributors .contributors-container { 46 | padding: 0; 47 | } 48 | 49 | .content-contributors .github-edit-button { 50 | padding-top: calc(2 * var(--base-spacing)); 51 | } 52 | -------------------------------------------------------------------------------- /docs/styles/dotty-icons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'dotty-icons'; 3 | src: 4 | url('../fonts/dotty-icons.woff?kefi7x') format('woff'), 5 | url('../fonts/dotty-icons.ttf?kefi7x') format('truetype'); 6 | font-weight: normal; 7 | font-style: normal; 8 | font-display: block; 9 | } 10 | 11 | [class^="icon-"], [class*=" icon-"] { 12 | /* use !important to prevent issues with browser extensions that change fonts */ 13 | font-family: 'dotty-icons' !important; 14 | speak: never; 15 | font-style: normal; 16 | font-weight: normal; 17 | font-variant: normal; 18 | text-transform: none; 19 | line-height: 1; 20 | 21 | /* Better Font Rendering */ 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | } 25 | 26 | .icon-git:before { 27 | content: "\e908"; 28 | } 29 | .icon-clear:before { 30 | content: "\e900"; 31 | } 32 | .icon-content_copy:before { 33 | content: "\e90b"; 34 | } 35 | .icon-create:before { 36 | content: "\e907"; 37 | } 38 | .icon-link:before { 39 | content: "\e901"; 40 | } 41 | .icon-vertical_align_top:before { 42 | content: "\e902"; 43 | } 44 | .icon-keyboard_arrow_down:before { 45 | content: "\e903"; 46 | } 47 | .icon-keyboard_arrow_right:before { 48 | content: "\e904"; 49 | } 50 | .icon-keyboard_arrow_up:before { 51 | content: "\e905"; 52 | } 53 | .icon-menu:before { 54 | content: "\e90a"; 55 | } 56 | .icon-check_circle:before { 57 | content: "\e909"; 58 | } 59 | .icon-search:before { 60 | content: "\e906"; 61 | } 62 | -------------------------------------------------------------------------------- /docs/styles/social-links.css: -------------------------------------------------------------------------------- 1 | .theme-dark footer .social-icon { 2 | /* "Poor man's dark mode" for images. 3 | * This works great with black images, 4 | * and just-okay with colored images. 5 | */ 6 | filter: invert(100%) hue-rotate(180deg); 7 | } 8 | 9 | .social-icon { 10 | padding-right: 5px; 11 | padding-left: 5px; 12 | } 13 | 14 | .social-icon img { 15 | height: 20px; 16 | width: 20px; 17 | } 18 | -------------------------------------------------------------------------------- /docs/styles/staticsitestyles.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/styles/staticsitestyles.css -------------------------------------------------------------------------------- /docs/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /docs/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /docs/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /docs/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /docs/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /docs/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /docs/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /docs/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /docs/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /docs/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /docs/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /docs/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/docs/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /images/scallion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/images/scallion.png -------------------------------------------------------------------------------- /paper/PLDI20_ZippyLL1PWD.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/epfl-lara/scallion/cb08e9f1ceed80c9918ae516947f87903ddc1a92/paper/PLDI20_ZippyLL1PWD.pdf -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=1.10.1 2 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.4") 2 | addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0") -------------------------------------------------------------------------------- /project/root-doc.txt: -------------------------------------------------------------------------------- 1 | ==Overview== 2 | 3 | Scallion is a library for easily writing LL(1) parsers in Scala, with support for pretty printing. 4 | See the package [[scallion]] for more information. --------------------------------------------------------------------------------