pax_global_header00006660000000000000000000000064146134136270014521gustar00rootroot0000000000000052 comment=1e983e734d1c03b5d614250822984e0d62d0d654 chroma-2.14.0/000077500000000000000000000000001461341362700130565ustar00rootroot00000000000000chroma-2.14.0/.editorconfig000066400000000000000000000003721461341362700155350ustar00rootroot00000000000000root = true [*] indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.xml] indent_style = space indent_size = 2 insert_final_newline = false [*.yml] indent_style = space indent_size = 2 chroma-2.14.0/.github/000077500000000000000000000000001461341362700144165ustar00rootroot00000000000000chroma-2.14.0/.github/FUNDING.yml000066400000000000000000000000251461341362700162300ustar00rootroot00000000000000github: [alecthomas] chroma-2.14.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001461341362700166015ustar00rootroot00000000000000chroma-2.14.0/.github/ISSUE_TEMPLATE/bug_report.yaml000066400000000000000000000025721461341362700216430ustar00rootroot00000000000000name: 🐞 Bug description: File a bug/issue title: "" labels: ["bug"] body: - type: checkboxes attributes: label: Is there an existing issue for this? description: Please search to see if an issue already exists for the bug you encountered. options: - label: I have searched the existing issues required: true - type: textarea attributes: label: Describe the bug description: | A clear and concise description of what the bug is. Screenshots are often helpful here. Do *NOT* just paste a link to other issues on GitHub. validations: required: true - type: textarea attributes: label: To Reproduce description: | 1. Reproduce your issue in the [Chroma Playground](https://swapoff.org/chroma/playground/), then click the _copy_ icon to copy a shareable link for your issue. Consider using `[markdown links](URL)` to minimise the visual noise of the links. 2. Provide input text and a command-line invocation of `chroma` that reproduces your problem. eg. For Hugo this might be something like `chroma -s monokailight --html --html-lines --html-lines-table --html-inline-styles <source>` Do *NOT* provide configuration for another tool (eg. Hugo, Gitea). My time is limited and if you want me to fix your issue, help me help you. validations: required: true ��������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.github/ISSUE_TEMPLATE/feature_request.yaml�������������������������������������������0000664�0000000�0000000�00000001701�14613413627�0022667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Feature request description: Suggest an idea for this project title: "<title>" labels: ["feature request"] body: - type: checkboxes attributes: label: Is there an existing issue for this? description: Please search to see if an issue already exists for the feature you're requesting. options: - label: I have searched the existing issues required: true - type: textarea attributes: label: What problem does this feature solve? description: | Please check the Chroma [README](https://github.com/alecthomas/chroma) and command-line tool to ensure this isn't an already solved problem. validations: required: true - type: textarea attributes: label: What feature do you propose? description: | The feature should describe a change to Chroma's code, not lexers. For lexers, fill out the "Lexer request" form. validations: required: true ���������������������������������������������������������������chroma-2.14.0/.github/ISSUE_TEMPLATE/lexer_request.yaml���������������������������������������������0000664�0000000�0000000�00000002146�14613413627�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Lexer request description: Suggest the addition of a lexer title: "<title>" labels: ["help wanted", "lexer missing"] body: - type: checkboxes attributes: label: Is there an existing issue for this? description: Please search to see if an issue already exists for the lexer you're requesting. options: - label: I have searched the existing issues required: true - type: textarea attributes: label: What is the missing lexer? description: | Please note that lexers are contributed by the community. Your best option is to contribute this yourself. Lexers are defined in XML (see the [existing lexers](https://github.com/alecthomas/chroma/tree/master/lexers/embedded) for examples). You can test your lexer with the Chroma command-line, `chroma --lexer=my-lexer.xml example-file.lang` validations: required: true - type: textarea attributes: label: Links to existing syntax definitions description: | Provide links to existing syntax definitions in Textmate, etc. validations: required: true ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.github/workflows/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0016453�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.github/workflows/ci.yml��������������������������������������������������������������0000664�0000000�0000000�00000001073�14613413627�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������on: push: branches: - master pull_request: name: CI jobs: test: name: Test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Init Hermit run: ./bin/hermit env -r >> $GITHUB_ENV - name: Test run: go test ./... lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Init Hermit run: ./bin/hermit env -r >> $GITHUB_ENV - name: golangci-lint run: golangci-lint run ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.github/workflows/release.yml���������������������������������������������������������0000664�0000000�0000000�00000000511�14613413627�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Release on: push: tags: - 'v*' jobs: release: name: Release runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - run: ./bin/hermit env --raw >> $GITHUB_ENV - run: goreleaser release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.gitignore����������������������������������������������������������������������������0000664�0000000�0000000�00000000546�14613413627�0015053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Binaries for programs and plugins .git .idea .vscode .hermit *.exe *.dll *.so *.dylib /cmd/chroma/chroma # Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.out # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 .glide/ _models/ _examples/ *.min.* build/ ����������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.golangci.yml�������������������������������������������������������������������������0000664�0000000�0000000�00000004043�14613413627�0015443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������run: tests: true skip-dirs: - _examples output: print-issued-lines: false linters: enable-all: true disable: - maligned - megacheck - lll - gocyclo - dupl - gochecknoglobals - funlen - godox - wsl - gomnd - gocognit - goerr113 - nolintlint - testpackage - godot - nestif - paralleltest - nlreturn - cyclop - exhaustivestruct - gci - gofumpt - errorlint - exhaustive - ifshort - wrapcheck - stylecheck - thelper - nonamedreturns - revive - dupword - exhaustruct - varnamelen - forcetypeassert - ireturn - maintidx - govet - nosnakecase - testableexamples - musttag - depguard - goconst linters-settings: govet: check-shadowing: true gocyclo: min-complexity: 10 dupl: threshold: 100 goconst: min-len: 8 min-occurrences: 3 forbidigo: #forbid: # - (Must)?NewLexer$ exclude_godoc_examples: false issues: max-per-linter: 0 max-same: 0 exclude-use-default: false exclude: # Captured by errcheck. - '^(G104|G204):' # Very commonly not checked. - 'Error return value of .(.*\.Help|.*\.MarkFlagRequired|(os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked' - 'exported method (.*\.MarshalJSON|.*\.UnmarshalJSON|.*\.EntityURN|.*\.GoString|.*\.Pos) should have comment or be unexported' - 'composite literal uses unkeyed fields' - 'declaration of "err" shadows declaration' - 'should not use dot imports' - 'Potential file inclusion via variable' - 'should have comment or be unexported' - 'comment on exported var .* should be of the form' - 'at least one file in a package should have a package comment' - 'string literal contains the Unicode' - 'methods on the same type should have the same receiver name' - '_TokenType_name should be _TokenTypeName' - '`_TokenType_map` should be `_TokenTypeMap`' - 'rewrite if-else to switch statement' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/.goreleaser.yml�����������������������������������������������������������������������0000664�0000000�0000000�00000001322�14613413627�0016005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������project_name: chroma release: github: owner: alecthomas name: chroma brews: - install: bin.install "chroma" env: - CGO_ENABLED=0 builds: - goos: - linux - darwin - windows goarch: - arm64 - amd64 - "386" goarm: - "6" dir: ./cmd/chroma main: . ldflags: -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} binary: chroma archives: - format: tar.gz name_template: '{{ .Binary }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' files: - COPYING - README* snapshot: name_template: SNAPSHOT-{{ .Commit }} checksum: name_template: '{{ .ProjectName }}-{{ .Version }}-checksums.txt' ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/Bitfile�������������������������������������������������������������������������������0000664�0000000�0000000�00000001262�14613413627�0014360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������VERSION = %(git describe --tags --dirty --always)% export CGOENABLED = 0 tokentype_enumer.go: types.go build: go generate # Regenerate the list of lexers in the README README.md: lexers/*.go lexers/*/*.xml table.py build: ./table.py -clean implicit %{1}%{2}.min.%{3}: **/*.{css,js} build: esbuild --bundle %{IN} --minify --outfile=%{OUT} implicit build/%{1}: cmd/* cd cmd/%{1} inputs: cmd/%{1}/**/* **/*.go build: go build -ldflags="-X 'main.version=%{VERSION}'" -o ../../build/%{1} . #upload: chromad # build: # scp chromad root@swapoff.org: # ssh root@swapoff.org 'install -m755 ./chromad /srv/http/swapoff.org/bin && service chromad restart' # touch upload ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/COPYING�������������������������������������������������������������������������������0000664�0000000�0000000�00000002037�14613413627�0014113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Copyright (C) 2017 Alec Thomas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/Makefile������������������������������������������������������������������������������0000664�0000000�0000000�00000001362�14613413627�0014520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.PHONY: chromad upload all VERSION ?= $(shell git describe --tags --dirty --always) export GOOS ?= linux export GOARCH ?= amd64 all: README.md tokentype_string.go README.md: lexers/*/*.go ./table.py tokentype_string.go: types.go go generate chromad: rm -rf build esbuild --bundle cmd/chromad/static/index.js --minify --outfile=cmd/chromad/static/index.min.js esbuild --bundle cmd/chromad/static/index.css --minify --outfile=cmd/chromad/static/index.min.css (export CGOENABLED=0 ; cd ./cmd/chromad && go build -ldflags="-X 'main.version=$(VERSION)'" -o ../../build/chromad .) upload: build/chromad scp build/chromad root@swapoff.org: && \ ssh root@swapoff.org 'install -m755 ./chromad /srv/http/swapoff.org/bin && service chromad restart' ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/README.md�����������������������������������������������������������������������������0000664�0000000�0000000�00000040200�14613413627�0014331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Chroma — A general purpose syntax highlighter in pure Go [![Golang Documentation](https://godoc.org/github.com/alecthomas/chroma?status.svg)](https://godoc.org/github.com/alecthomas/chroma) [![CI](https://github.com/alecthomas/chroma/actions/workflows/ci.yml/badge.svg)](https://github.com/alecthomas/chroma/actions/workflows/ci.yml) [![Slack chat](https://img.shields.io/static/v1?logo=slack&style=flat&label=slack&color=green&message=gophers)](https://invite.slack.golangbridge.org/) Chroma takes source code and other structured text and converts it into syntax highlighted HTML, ANSI-coloured text, etc. Chroma is based heavily on [Pygments](http://pygments.org/), and includes translators for Pygments lexers and styles. ## Table of Contents <!-- TOC --> 1. [Supported languages](#supported-languages) 2. [Try it](#try-it) 3. [Using the library](#using-the-library) 1. [Quick start](#quick-start) 2. [Identifying the language](#identifying-the-language) 3. [Formatting the output](#formatting-the-output) 4. [The HTML formatter](#the-html-formatter) 4. [More detail](#more-detail) 1. [Lexers](#lexers) 2. [Formatters](#formatters) 3. [Styles](#styles) 5. [Command-line interface](#command-line-interface) 6. [Testing lexers](#testing-lexers) 7. [What's missing compared to Pygments?](#whats-missing-compared-to-pygments) <!-- /TOC --> ## Supported languages | Prefix | Language | | :----: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Agda, AL, Alloy, Angular2, ANTLR, ApacheConf, APL, AppleScript, ArangoDB AQL, Arduino, ArmAsm, AutoHotkey, AutoIt, Awk | | B | Ballerina, Bash, Bash Session, Batchfile, BibTeX, Bicep, BlitzBasic, BNF, BQN, Brainfuck | | C | C, C#, C++, Caddyfile, Caddyfile Directives, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Chapel, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Crystal, CSS, Cython | | D | D, Dart, Dax, Desktop Entry, Diff, Django/Jinja, dns, Docker, DTD, Dylan | | E | EBNF, Elixir, Elm, EmacsLisp, Erlang | | F | Factor, Fennel, Fish, Forth, Fortran, FortranFixed, FSharp | | G | GAS, GDScript, Genshi, Genshi HTML, Genshi Text, Gherkin, GLSL, Gnuplot, Go, Go HTML Template, Go Text Template, GraphQL, Groff, Groovy | | H | Handlebars, Hare, Haskell, Haxe, HCL, Hexdump, HLB, HLSL, HolyC, HTML, HTTP, Hy | | I | Idris, Igor, INI, Io, ISCdhcpd | | J | J, Java, JavaScript, JSON, Julia, Jungle | | K | Kotlin | | L | Lighttpd configuration file, LLVM, Lua | | M | Makefile, Mako, markdown, Mason, Materialize SQL dialect, Mathematica, Matlab, mcfunction, Meson, Metal, MiniZinc, MLIR, Modula-2, MonkeyC, MorrowindScript, Myghty, MySQL | | N | NASM, Natural, Newspeak, Nginx configuration file, Nim, Nix | | O | Objective-C, OCaml, Octave, Odin, OnesEnterprise, OpenEdge ABL, OpenSCAD, Org Mode | | P | PacmanConf, Perl, PHP, PHTML, Pig, PkgConfig, PL/pgSQL, plaintext, Plutus Core, Pony, PostgreSQL SQL dialect, PostScript, POVRay, PowerQuery, PowerShell, Prolog, PromQL, Promela, properties, Protocol Buffer, PRQL, PSL, Puppet, Python, Python 2 | | Q | QBasic, QML | | R | R, Racket, Ragel, Raku, react, ReasonML, reg, Rego, reStructuredText, Rexx, RPMSpec, Ruby, Rust | | S | SAS, Sass, Scala, Scheme, Scilab, SCSS, Sed, Sieve, Smali, Smalltalk, Smarty, Snobol, Solidity, SourcePawn, SPARQL, SQL, SquidConf, Standard ML, stas, Stylus, Svelte, Swift, SYSTEMD, systemverilog | | T | TableGen, Tal, TASM, Tcl, Tcsh, Termcap, Terminfo, Terraform, TeX, Thrift, TOML, TradingView, Transact-SQL, Turing, Turtle, Twig, TypeScript, TypoScript, TypoScriptCssData, TypoScriptHtmlData | | V | V, V shell, Vala, VB.net, verilog, VHDL, VHS, VimL, vue | | W | WDTE, WebGPU Shading Language, Whiley | | X | XML, Xorg | | Y | YAML, YANG | | Z | Z80 Assembly, Zed, Zig | _I will attempt to keep this section up to date, but an authoritative list can be displayed with `chroma --list`._ ## Try it Try out various languages and styles on the [Chroma Playground](https://swapoff.org/chroma/playground/). ## Using the library This is version 2 of Chroma, use the import path: ```go import "github.com/alecthomas/chroma/v2" ``` Chroma, like Pygments, has the concepts of [lexers](https://github.com/alecthomas/chroma/tree/master/lexers), [formatters](https://github.com/alecthomas/chroma/tree/master/formatters) and [styles](https://github.com/alecthomas/chroma/tree/master/styles). Lexers convert source text into a stream of tokens, styles specify how token types are mapped to colours, and formatters convert tokens and styles into formatted output. A package exists for each of these, containing a global `Registry` variable with all of the registered implementations. There are also helper functions for using the registry in each package, such as looking up lexers by name or matching filenames, etc. In all cases, if a lexer, formatter or style can not be determined, `nil` will be returned. In this situation you may want to default to the `Fallback` value in each respective package, which provides sane defaults. ### Quick start A convenience function exists that can be used to simply format some source text, without any effort: ```go err := quick.Highlight(os.Stdout, someSourceCode, "go", "html", "monokai") ``` ### Identifying the language To highlight code, you'll first have to identify what language the code is written in. There are three primary ways to do that: 1. Detect the language from its filename. ```go lexer := lexers.Match("foo.go") ``` 2. Explicitly specify the language by its Chroma syntax ID (a full list is available from `lexers.Names()`). ```go lexer := lexers.Get("go") ``` 3. Detect the language from its content. ```go lexer := lexers.Analyse("package main\n\nfunc main()\n{\n}\n") ``` In all cases, `nil` will be returned if the language can not be identified. ```go if lexer == nil { lexer = lexers.Fallback } ``` At this point, it should be noted that some lexers can be extremely chatty. To mitigate this, you can use the coalescing lexer to coalesce runs of identical token types into a single token: ```go lexer = chroma.Coalesce(lexer) ``` ### Formatting the output Once a language is identified you will need to pick a formatter and a style (theme). ```go style := styles.Get("swapoff") if style == nil { style = styles.Fallback } formatter := formatters.Get("html") if formatter == nil { formatter = formatters.Fallback } ``` Then obtain an iterator over the tokens: ```go contents, err := ioutil.ReadAll(r) iterator, err := lexer.Tokenise(nil, string(contents)) ``` And finally, format the tokens from the iterator: ```go err := formatter.Format(w, style, iterator) ``` ### The HTML formatter By default the `html` registered formatter generates standalone HTML with embedded CSS. More flexibility is available through the `formatters/html` package. Firstly, the output generated by the formatter can be customised with the following constructor options: - `Standalone()` - generate standalone HTML with embedded CSS. - `WithClasses()` - use classes rather than inlined style attributes. - `ClassPrefix(prefix)` - prefix each generated CSS class. - `TabWidth(width)` - Set the rendered tab width, in characters. - `WithLineNumbers()` - Render line numbers (style with `LineNumbers`). - `WithLinkableLineNumbers()` - Make the line numbers linkable and be a link to themselves. - `HighlightLines(ranges)` - Highlight lines in these ranges (style with `LineHighlight`). - `LineNumbersInTable()` - Use a table for formatting line numbers and code, rather than spans. If `WithClasses()` is used, the corresponding CSS can be obtained from the formatter with: ```go formatter := html.New(html.WithClasses(true)) err := formatter.WriteCSS(w, style) ``` ## More detail ### Lexers See the [Pygments documentation](http://pygments.org/docs/lexerdevelopment/) for details on implementing lexers. Most concepts apply directly to Chroma, but see existing lexer implementations for real examples. In many cases lexers can be automatically converted directly from Pygments by using the included Python 3 script `pygments2chroma_xml.py`. I use something like the following: ```sh python3 _tools/pygments2chroma_xml.py \ pygments.lexers.jvm.KotlinLexer \ > lexers/embedded/kotlin.xml ``` See notes in [pygments-lexers.txt](https://github.com/alecthomas/chroma/blob/master/pygments-lexers.txt) for a list of lexers, and notes on some of the issues importing them. ### Formatters Chroma supports HTML output, as well as terminal output in 8 colour, 256 colour, and true-colour. A `noop` formatter is included that outputs the token text only, and a `tokens` formatter outputs raw tokens. The latter is useful for debugging lexers. ### Styles Chroma styles are defined in XML. The style entries use the [same syntax](http://pygments.org/docs/styles/) as Pygments. All Pygments styles have been converted to Chroma using the `_tools/style.py` script. When you work with one of [Chroma's styles](https://github.com/alecthomas/chroma/tree/master/styles), know that the `Background` token type provides the default style for tokens. It does so by defining a foreground color and background color. For example, this gives each token name not defined in the style a default color of `#f8f8f8` and uses `#000000` for the highlighted code block's background: ```xml <entry type="Background" style="#f8f8f2 bg:#000000"/> ``` Also, token types in a style file are hierarchical. For instance, when `CommentSpecial` is not defined, Chroma uses the token style from `Comment`. So when several comment tokens use the same color, you'll only need to define `Comment` and override the one that has a different color. For a quick overview of the available styles and how they look, check out the [Chroma Style Gallery](https://xyproto.github.io/splash/docs/). ## Command-line interface A command-line interface to Chroma is included. Binaries are available to install from [the releases page](https://github.com/alecthomas/chroma/releases). The CLI can be used as a preprocessor to colorise output of `less(1)`, see documentation for the `LESSOPEN` environment variable. The `--fail` flag can be used to suppress output and return with exit status 1 to facilitate falling back to some other preprocessor in case chroma does not resolve a specific lexer to use for the given file. For example: ```shell export LESSOPEN='| p() { chroma --fail "$1" || cat "$1"; }; p "%s"' ``` Replace `cat` with your favourite fallback preprocessor. When invoked as `.lessfilter`, the `--fail` flag is automatically turned on under the hood for easy integration with [lesspipe shipping with Debian and derivatives](https://manpages.debian.org/lesspipe#USER_DEFINED_FILTERS); for that setup the `chroma` executable can be just symlinked to `~/.lessfilter`. ## Testing lexers If you edit some lexers and want to try it, open a shell in `cmd/chromad` and run: ```shell go run . ``` A Link will be printed. Open it in your Browser. Now you can test on the Playground with your local changes. If you want to run the tests and the lexers, open a shell in the root directory and run: ```shell go test ./lexers ``` When updating or adding a lexer, please add tests. See [lexers/README.md](lexers/README.md) for more. ## What's missing compared to Pygments? - Quite a few lexers, for various reasons (pull-requests welcome): - Pygments lexers for complex languages often include custom code to handle certain aspects, such as Raku's ability to nest code inside regular expressions. These require time and effort to convert. - I mostly only converted languages I had heard of, to reduce the porting cost. - Some more esoteric features of Pygments are omitted for simplicity. - Though the Chroma API supports content detection, very few languages support them. I have plans to implement a statistical analyser at some point, but not enough time. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0014355�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/css2style/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0016310�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/css2style/main.go��������������������������������������������������������������0000664�0000000�0000000�00000013303�14613413627�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������package main import ( "io/ioutil" "os" "strings" "text/template" "github.com/aymerick/douceur/css" "github.com/aymerick/douceur/parser" "gopkg.in/alecthomas/kingpin.v3-unstable" "github.com/alecthomas/chroma/v2" ) const ( outputTemplate = `package styles import ( "github.com/alecthomas/chroma/v2" ) // {{.Name}} style. var {{.Name}} = Register(chroma.MustNewStyle("{{.Name|Lower}}", chroma.StyleEntries{ {{- range .Rules}} {{- if .Prelude|TokenType}} chroma.{{.Prelude|TokenType}}: "{{.Declarations|TranslateDecls}}", {{- end}} {{- end}} })) ` ) var ( typeByClass = map[string]chroma.TokenType{ ".hll": chroma.Background, } cssNamedColours = map[string]string{ "black": "#000000", "silver": "#c0c0c0", "gray": "#808080", "white": "#ffffff", "maroon": "#800000", "red": "#ff0000", "purple": "#800080", "fuchsia": "#ff00ff", "green": "#008000", "lime": "#00ff00", "olive": "#808000", "yellow": "#ffff00", "navy": "#000080", "blue": "#0000ff", "teal": "#008080", "aqua": "#00ffff", "orange": "#ffa500", "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "blanchedalmond": "#ffebcd", "blueviolet": "#8a2be2", "brown": "#a52a2a", "burlywood": "#deb887", "cadetblue": "#5f9ea0", "chartreuse": "#7fff00", "chocolate": "#d2691e", "coral": "#ff7f50", "cornflowerblue": "#6495ed", "cornsilk": "#fff8dc", "crimson": "#dc143c", "cyan": "#00ffff", "darkblue": "#00008b", "darkcyan": "#008b8b", "darkgoldenrod": "#b8860b", "darkgray": "#a9a9a9", "darkgreen": "#006400", "darkgrey": "#a9a9a9", "darkkhaki": "#bdb76b", "darkmagenta": "#8b008b", "darkolivegreen": "#556b2f", "darkorange": "#ff8c00", "darkorchid": "#9932cc", "darkred": "#8b0000", "darksalmon": "#e9967a", "darkseagreen": "#8fbc8f", "darkslateblue": "#483d8b", "darkslategray": "#2f4f4f", "darkslategrey": "#2f4f4f", "darkturquoise": "#00ced1", "darkviolet": "#9400d3", "deeppink": "#ff1493", "deepskyblue": "#00bfff", "dimgray": "#696969", "dimgrey": "#696969", "dodgerblue": "#1e90ff", "firebrick": "#b22222", "floralwhite": "#fffaf0", "forestgreen": "#228b22", "gainsboro": "#dcdcdc", "ghostwhite": "#f8f8ff", "gold": "#ffd700", "goldenrod": "#daa520", "greenyellow": "#adff2f", "grey": "#808080", "honeydew": "#f0fff0", "hotpink": "#ff69b4", "indianred": "#cd5c5c", "indigo": "#4b0082", "ivory": "#fffff0", "khaki": "#f0e68c", "lavender": "#e6e6fa", "lavenderblush": "#fff0f5", "lawngreen": "#7cfc00", "lemonchiffon": "#fffacd", "lightblue": "#add8e6", "lightcoral": "#f08080", "lightcyan": "#e0ffff", "lightgoldenrodyellow": "#fafad2", "lightgray": "#d3d3d3", "lightgreen": "#90ee90", "lightgrey": "#d3d3d3", "lightpink": "#ffb6c1", "lightsalmon": "#ffa07a", "lightseagreen": "#20b2aa", "lightskyblue": "#87cefa", "lightslategray": "#778899", "lightslategrey": "#778899", "lightsteelblue": "#b0c4de", "lightyellow": "#ffffe0", "limegreen": "#32cd32", "linen": "#faf0e6", "magenta": "#ff00ff", "mediumaquamarine": "#66cdaa", "mediumblue": "#0000cd", "mediumorchid": "#ba55d3", "mediumpurple": "#9370db", "mediumseagreen": "#3cb371", "mediumslateblue": "#7b68ee", "mediumspringgreen": "#00fa9a", "mediumturquoise": "#48d1cc", "mediumvioletred": "#c71585", "midnightblue": "#191970", "mintcream": "#f5fffa", "mistyrose": "#ffe4e1", "moccasin": "#ffe4b5", "navajowhite": "#ffdead", "oldlace": "#fdf5e6", "olivedrab": "#6b8e23", "orangered": "#ff4500", "orchid": "#da70d6", "palegoldenrod": "#eee8aa", "palegreen": "#98fb98", "paleturquoise": "#afeeee", "palevioletred": "#db7093", "papayawhip": "#ffefd5", "peachpuff": "#ffdab9", "peru": "#cd853f", "pink": "#ffc0cb", "plum": "#dda0dd", "powderblue": "#b0e0e6", "rosybrown": "#bc8f8f", "royalblue": "#4169e1", "saddlebrown": "#8b4513", "salmon": "#fa8072", "sandybrown": "#f4a460", "seagreen": "#2e8b57", "seashell": "#fff5ee", "sienna": "#a0522d", "skyblue": "#87ceeb", "slateblue": "#6a5acd", "slategray": "#708090", "slategrey": "#708090", "snow": "#fffafa", "springgreen": "#00ff7f", "steelblue": "#4682b4", "tan": "#d2b48c", "thistle": "#d8bfd8", "tomato": "#ff6347", "turquoise": "#40e0d0", "violet": "#ee82ee", "wheat": "#f5deb3", "whitesmoke": "#f5f5f5", "yellowgreen": "#9acd32", "rebeccapurple": "#663399", } nameArg = kingpin.Arg("name", "Name of output style.").Required().String() fileArg = kingpin.Arg("stylesheets", ".css file to import").Required().ExistingFile() ) func init() { for tt, str := range chroma.StandardTypes { typeByClass["."+str] = tt } } func translateDecls(decls []*css.Declaration) string { out := []string{} for _, decl := range decls { switch decl.Property { case "color": clr := decl.Value if c, ok := cssNamedColours[clr]; ok { clr = c } out = append(out, clr) case "background-color": out = append(out, "bg:"+decl.Value) case "font-style": if strings.Contains(decl.Value, "italic") { out = append(out, "italic") } case "font-weight": if strings.Contains(decl.Value, "bold") { out = append(out, "bold") } case "text-decoration": if strings.Contains(decl.Value, "underline") { out = append(out, "underline") } } } return strings.Join(out, " ") } func main() { kingpin.Parse() source, err := ioutil.ReadFile(*fileArg) kingpin.FatalIfError(err, "") css, err := parser.Parse(string(source)) kingpin.FatalIfError(err, "") context := map[string]interface{}{ "Name": *nameArg, "Rules": css.Rules, } tmpl := template.Must(template.New("style").Funcs(template.FuncMap{ "Lower": strings.ToLower, "TranslateDecls": translateDecls, "TokenType": func(s string) chroma.TokenType { return typeByClass[s] }, }).Parse(outputTemplate)) err = tmpl.Execute(os.Stdout, context) kingpin.FatalIfError(err, "") } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/exercise/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0016164�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/exercise/main.go���������������������������������������������������������������0000664�0000000�0000000�00000001771�14613413627�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������package main import ( "fmt" "io/ioutil" "os" "github.com/alecthomas/chroma/v2/formatters" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" "gopkg.in/alecthomas/kingpin.v3-unstable" ) var ( filesArgs = kingpin.Arg("file", "Files to use to exercise lexers.").Required().ExistingFiles() ) func main() { kingpin.CommandLine.Help = "Exercise linters against a list of files." kingpin.Parse() for _, file := range *filesArgs { lexer := lexers.Match(file) if lexer == nil { fmt.Printf("warning: could not find lexer for %q\n", file) continue } fmt.Printf("%s: ", file) os.Stdout.Sync() text, err := ioutil.ReadFile(file) kingpin.FatalIfError(err, "") it, err := lexer.Tokenise(nil, string(text)) kingpin.FatalIfError(err, "%s failed to tokenise %q", lexer.Config().Name, file) err = formatters.NoOp.Format(ioutil.Discard, styles.SwapOff, it) kingpin.FatalIfError(err, "%s failed to format %q", lexer.Config().Name, file) fmt.Printf("ok\n") } } �������chroma-2.14.0/_tools/pygments2chroma.hlb������������������������������������������������������������0000664�0000000�0000000�00000001360�14613413627�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������fs default() { gofmt fs { chromaLexer "pygments.lexers.hlb.HlbLexer"; } } fs script() { local "." with option { includePatterns "pygments2chroma.py" } } fs runChromaPython(string package) { image "python:alpine" with option { resolve; } run "apk add -U git" run "pip install -U pystache" run "pip install -U -e git+https://github.com/hinshun/pygments.git@hlb-lexer#egg=pygments" run string { format "python pygments2chroma.py %s > /out/lexer.go" package; } with option { dir "/chroma" mount script "/chroma" mount fs { scratch; } "/out" as chromaLexer } } fs runGoFormat(fs goFiles) { image "golang:alpine" with option { resolve; } run "gofmt -s -w /gofmt/*.go" with option { dir "/gofmt" mount goFiles "/gofmt" as gofmt } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/pygments2chroma_xml.py���������������������������������������������������������0000775�0000000�0000000�00000014027�14613413627�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 import functools import importlib import json import os import re import sys import types import html import pystache from pygments import lexer as pygments_lexer from pygments.token import _TokenType TEMPLATE = r''' <lexer> <config> <name>{{name}}</name> {{#aliases}} <alias>{{alias}}</alias> {{/aliases}} {{#filenames}} <filename>{{filename}}</filename> {{/filenames}} {{#mimetypes}} <mime_type>{{mimetype}}</mime_type> {{/mimetypes}} {{#re_ignorecase}} <case_insensitive>true</case_insensitive> {{/re_ignorecase}} {{#re_dotall}} <dot_all>true</dot_all> {{/re_dotall}} {{#re_not_multiline}} <not_multiline>true</not_multiline> {{/re_not_multiline}} </config> <rules> {{#tokens}} <state name="{{state}}"> {{#rules}} {{{.}}} {{/rules}} </state> {{/tokens}} </rules> </lexer> ''' def xml_regex(s): return xml_string(s) def xml_string(s): s = html.escape(s) return '"' + s + '"' def to_camel_case(snake_str): components = snake_str.split('_') return ''.join(x.title() for x in components) def warning(message): print('warning: ' + message, file=sys.stderr) def resolve_emitter(emitter): if isinstance(emitter, types.FunctionType): if repr(emitter).startswith('<function bygroups.'): args = emitter.__closure__[0].cell_contents emitter = '<bygroups>%s</bygroups>' % ''.join(resolve_emitter(e) for e in args) elif repr(emitter).startswith('<function using.'): args = emitter.__closure__[0].cell_contents if isinstance(args, dict): state = 'root' if 'stack' in args: state = args['stack'][1] args.pop('stack') assert args == {}, args emitter = '<usingself state="%s"/>' % state elif issubclass(args, pygments_lexer.Lexer): name = args.__name__ if name.endswith('Lexer'): name = name[:-5] emitter = '<using lexer="%s"/>' % state else: raise ValueError('only support "using" with lexer classes, not %r' % args) else: warning('unsupported emitter function %r' % emitter) emitter = '?? %r ??' % emitter elif isinstance(emitter, _TokenType): emitter = '<token type="%s"/>' % str(emitter).replace('.', '')[5:] elif emitter is None: return 'None' else: raise ValueError('unsupported emitter type %r' % emitter) assert isinstance(emitter, str) return emitter def process_state_action(action): if isinstance(action, tuple): return functools.reduce(lambda a, b: a + b, (process_state_action(a) for a in action)) if action.startswith('#'): action = action[1:] if action== 'pop': action = '<pop depth="1"/>' elif action.startswith('pop:'): action = '<pop depth="%s"/>' % action[4:] elif action == 'push': action = '<push/>' elif action.startswith('push:'): action = '<push state="%s"/>' % action[5:] else: raise ValueError('unsupported action %r' % (action,)) else: action = '<push state="%s"/>' % action return (action,) def translate_rules(rules): out = [] for rule in rules: if isinstance(rule, tuple): regex = rule[0] if isinstance(regex, str): regex = xml_regex(regex) elif isinstance(regex, pygments_lexer.words): regex = xml_string('%s(%s)%s' % (regex.prefix, '|'.join(w for w in regex.words), regex.suffix)) else: raise ValueError('expected regex string but got %r' % regex) emitter = resolve_emitter(rule[1]) if len(rule) == 2: modifier = '' elif type(rule[2]) is str: modifier = process_state_action(rule[2])[0] elif isinstance(rule[2], pygments_lexer.combined): modifier = '<combined state="%s"/>' % '" state="'.join(rule[2]) elif type(rule[2]) is tuple: modifier = '<push state="%s"/>' % '" state="'.join(rule[2]) else: raise ValueError('unsupported modifier %r' % (rule[2],)) out.append('<rule pattern={}>{}{}</rule>'.format(regex, emitter, modifier)) elif isinstance(rule, pygments_lexer.include): out.append('<rule><include state="{}"/></rule>'.format(rule)) elif isinstance(rule, pygments_lexer.default): process_state_action(rule.state) out.append('<rule>{}</rule>'.format(''.join(process_state_action(rule.state)))) else: raise ValueError('unsupported rule %r' % (rule,)) return out class TemplateView(object): def __init__(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) def re_not_multiline(self): return not (self.regex_flags & re.MULTILINE) def re_dotall(self): return self.regex_flags & re.DOTALL def re_ignorecase(self): return self.regex_flags & re.IGNORECASE def main(): package_name, symbol_name = sys.argv[1].rsplit(sep=".", maxsplit=1) package = importlib.import_module(package_name) lexer_cls = getattr(package, symbol_name) assert issubclass(lexer_cls, pygments_lexer.RegexLexer), 'can only translate from RegexLexer' print(pystache.render(TEMPLATE, TemplateView( name=lexer_cls.name, regex_flags=lexer_cls.flags, aliases=[{'alias': alias} for alias in lexer_cls.aliases], filenames=[{'filename': filename} for filename in lexer_cls.filenames], mimetypes=[{'mimetype': mimetype} for mimetype in lexer_cls.mimetypes], tokens=[{'state': state, 'rules': translate_rules(rules)} for (state, rules) in lexer_cls.get_tokendefs().items()], ))) if __name__ == '__main__': main() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/_tools/style.py�����������������������������������������������������������������������0000775�0000000�0000000�00000002551�14613413627�0016075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python3 import importlib import sys import pystache from pygments.style import Style from pygments.token import Token TEMPLATE = r''' package styles import ( "github.com/alecthomas/chroma/v2" ) // {{upper_name}} style. var {{upper_name}} = Register(chroma.MustNewStyle("{{name}}", chroma.StyleEntries{ {{#styles}} chroma.{{type}}: "{{style}}", {{/styles}} })) ''' def to_camel_case(snake_str): components = snake_str.split('_') return ''.join(x.title() for x in components) def translate_token_type(t): if t == Token: t = Token.Background return "".join(map(str, t)) def main(): name = sys.argv[1] package_name, symbol_name = sys.argv[2].rsplit(sep=".", maxsplit=1) package = importlib.import_module(package_name) style_cls = getattr(package, symbol_name) assert issubclass(style_cls, Style), 'can only translate from Style subclass' styles = dict(style_cls.styles) bg = "bg:" + style_cls.background_color if Token in styles: styles[Token] += " " + bg else: styles[Token] = bg context = { 'upper_name': style_cls.__name__[:-5], 'name': name, 'styles': [{'type': translate_token_type(t), 'style': s} for t, s in styles.items() if s], } print(pystache.render(TEMPLATE, context)) if __name__ == '__main__': main()�������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0013626�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.bit-0.5.2.pkg��������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017033�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.enumer-1.5.9.pkg�����������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017560�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.esbuild-0.20.2.pkg���������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017761�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.go-1.22.1.pkg��������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016741�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.golangci-lint-1.55.2.pkg���������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0021072�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.goreleaser-1.24.0.pkg������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020465�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.hlb-0.4.0.pkg��������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017017�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.hyperfine-1.18.0.pkg�������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020331�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.python3-3.12.2.pkg���������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017742�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.reflex-0.3.1.pkg�����������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017537�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.svu-1.12.0.pkg�������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017147�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/.watchexec-1.25.1.pkg�������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020312�2hermit����������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/README.hermit.md������������������������������������������������������������������0000664�0000000�0000000�00000000416�14613413627�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Hermit environment This is a [Hermit](https://github.com/cashapp/hermit) bin directory. The symlinks in this directory are managed by Hermit and will automatically download and install Hermit itself as well as packages. These packages are local to this environment. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/activate-hermit�������������������������������������������������������������������0000775�0000000�0000000�00000001062�14613413627�0016641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash # This file must be used with "source bin/activate-hermit" from bash or zsh. # You cannot run it directly if [ "${BASH_SOURCE-}" = "$0" ]; then echo "You must source this script: \$ source $0" >&2 exit 33 fi BIN_DIR="$(dirname "${BASH_SOURCE[0]:-${(%):-%x}}")" if "${BIN_DIR}/hermit" noop > /dev/null; then eval "$("${BIN_DIR}/hermit" activate "${BIN_DIR}/..")" if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ]; then hash -r 2>/dev/null fi echo "Hermit environment $("${HERMIT_ENV}"/bin/hermit env HERMIT_ENV) activated" fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/bit�������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016321�2.bit-0.5.2.pkg��������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/chroma����������������������������������������������������������������������������0000775�0000000�0000000�00000000153�14613413627�0015024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash set -euo pipefail (cd cmd/chroma ; go build -o $TMPDIR/chroma .) && exec $TMPDIR/chroma "$@" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/chromad���������������������������������������������������������������������������0000775�0000000�0000000�00000000156�14613413627�0015173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash set -euo pipefail (cd cmd/chromad ; go build -o $TMPDIR/chromad .) && exec $TMPDIR/chromad "$@" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/enumer����������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017563�2.enumer-1.5.9.pkg�����������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/esbuild���������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020120�2.esbuild-0.20.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/go��������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016056�2.go-1.22.1.pkg��������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/gofmt�����������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016565�2.go-1.22.1.pkg��������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/golangci-lint���������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0022331�2.golangci-lint-1.55.2.pkg���������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/goreleaser������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0021325�2.goreleaser-1.24.0.pkg������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/hermit����������������������������������������������������������������������������0000775�0000000�0000000�00000001361�14613413627�0015045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/bash set -eo pipefail if [ -z "${HERMIT_STATE_DIR}" ]; then case "$(uname -s)" in Darwin) export HERMIT_STATE_DIR="${HOME}/Library/Caches/hermit" ;; Linux) export HERMIT_STATE_DIR="${XDG_CACHE_HOME:-${HOME}/.cache}/hermit" ;; esac fi export HERMIT_DIST_URL="${HERMIT_DIST_URL:-https://github.com/cashapp/hermit/releases/download/stable}" HERMIT_CHANNEL="$(basename "${HERMIT_DIST_URL}")" export HERMIT_CHANNEL export HERMIT_EXE=${HERMIT_EXE:-${HERMIT_STATE_DIR}/pkg/hermit@${HERMIT_CHANNEL}/hermit} if [ ! -x "${HERMIT_EXE}" ]; then echo "Bootstrapping ${HERMIT_EXE} from ${HERMIT_DIST_URL}" 1>&2 curl -fsSL "${HERMIT_DIST_URL}/install.sh" | /bin/bash 1>&2 fi exec "${HERMIT_EXE}" --level=fatal exec "$0" -- "$@" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/hermit.hcl������������������������������������������������������������������������0000664�0000000�0000000�00000000000�14613413627�0015574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/hlb�������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016274�2.hlb-0.4.0.pkg��������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/hyperfine�������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0021032�2.hyperfine-1.18.0.pkg�������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/pip�������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017242�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/pip3������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017325�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/pip3.12���������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017546�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/pydoc3����������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017653�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/pydoc3.12�������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020074�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/python����������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017773�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/python3���������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020056�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/python3-config��������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0021321�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/python3.12������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020277�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/python3.12-config�����������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0021542�2.python3-3.12.2.pkg���������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/reflex����������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0017534�2.reflex-0.3.1.pkg�����������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/svu�������������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0016474�2.svu-1.12.0.pkg�������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/bin/watchexec�������������������������������������������������������������������������0000777�0000000�0000000�00000000000�14613413627�0020775�2.watchexec-1.25.1.pkg�������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/����������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0013621�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chroma/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0015072�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chroma/go.mod���������������������������������������������������������������������0000664�0000000�0000000�00000000564�14613413627�0016205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module github.com/alecthomas/chroma/v2/cmd/chroma go 1.19 replace github.com/alecthomas/chroma/v2 => ../../ require ( github.com/alecthomas/chroma/v2 v2.13.0 github.com/alecthomas/kong v0.9.0 github.com/mattn/go-colorable v0.1.13 github.com/mattn/go-isatty v0.0.20 ) require ( github.com/dlclark/regexp2 v1.11.0 // indirect golang.org/x/sys v0.6.0 // indirect ) ��������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chroma/go.sum���������������������������������������������������������������������0000664�0000000�0000000�00000003701�14613413627�0016226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������github.com/alecthomas/assert/v2 v2.2.1 h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink= github.com/alecthomas/kong v0.8.0 h1:ryDCzutfIqJPnNn0omnrgHLbAggDQM2VWHikE1xqK7s= github.com/alecthomas/kong v0.8.0/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY= github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= github.com/alecthomas/kong v0.9.0/go.mod h1:Y47y5gKfHp1hDc7CH7OeXgLIpp+Q2m1Ni0L5s3bI8Os= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= ���������������������������������������������������������������chroma-2.14.0/cmd/chroma/main.go��������������������������������������������������������������������0000664�0000000�0000000�00000031207�14613413627�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������package main import ( "bufio" "errors" "fmt" "io" "io/ioutil" "os" "os/signal" "path" "path/filepath" "regexp" "runtime" "runtime/pprof" "sort" "strconv" "strings" "github.com/alecthomas/kong" colorable "github.com/mattn/go-colorable" isatty "github.com/mattn/go-isatty" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" ) var ( // Populated by goreleaser. version = "?" commit = "?" date = "?" description = ` Chroma is a general purpose syntax highlighting library and corresponding command, for Go. ` cli struct { Version kong.VersionFlag `help:"Show version."` Profile string `hidden:"" help:"Enable profiling to file."` List bool `help:"List lexers, styles and formatters."` Unbuffered bool `help:"Do not buffer output."` Trace bool `help:"Trace lexer states as they are traversed."` Check bool `help:"Do not format, check for tokenisation errors instead."` Filename string `help:"Filename to use for selecting a lexer when reading from stdin."` Fail bool `help:"Exit silently with status 1 if no specific lexer was found."` XML string `hidden:"" help:"Generate XML lexer definitions." type:"existingdir" placeholder:"DIR"` Lexer string `group:"select" help:"Lexer to use when formatting or path to an XML file to load." default:"autodetect" short:"l"` Style string `group:"select" help:"Style to use for formatting or path to an XML file to load." default:"swapoff" short:"s"` Formatter string `group:"format" help:"Formatter to use." default:"terminal" short:"f" enum:"${formatters}"` JSON bool `group:"format" help:"Convenience flag to use JSON formatter."` HTML bool `group:"format" help:"Convenience flag to use HTML formatter."` SVG bool `group:"format" help:"Convenience flag to use SVG formatter."` HTMLPrefix string `group:"html" help:"HTML CSS class prefix." placeholder:"PREFIX"` HTMLStyles bool `group:"html" help:"Output HTML CSS styles."` HTMLAllStyles bool `group:"html" help:"Output all HTML CSS styles, including redundant ones."` HTMLOnly bool `group:"html" help:"Output HTML fragment."` HTMLInlineStyles bool `group:"html" help:"Output HTML with inline styles (no classes)."` HTMLTabWidth int `group:"html" help:"Set the HTML tab width." default:"8"` HTMLLines bool `group:"html" help:"Include line numbers in output."` HTMLLinesTable bool `group:"html" help:"Split line numbers and code in a HTML table"` HTMLLinesStyle string `group:"html" help:"Style for line numbers."` HTMLHighlight string `group:"html" help:"Highlight these lines." placeholder:"N[:M][,...]"` HTMLHighlightStyle string `group:"html" help:"Style used for highlighting lines."` HTMLBaseLine int `group:"html" help:"Base line number." default:"1"` HTMLPreventSurroundingPre bool `group:"html" help:"Prevent the surrounding pre tag."` HTMLLinkableLines bool `group:"html" help:"Make the line numbers linkable and be a link to themselves."` Files []string `arg:"" optional:"" help:"Files to highlight." type:"existingfile"` } ) type flushableWriter interface { io.Writer Flush() error } type nopFlushableWriter struct{ io.Writer } func (n *nopFlushableWriter) Flush() error { return nil } // prepareLenient prepares contents and lexer for input, using fallback lexer if no specific one is available for it. func prepareLenient(r io.Reader, filename string) (string, chroma.Lexer, error) { data, err := ioutil.ReadAll(r) if err != nil { return "", nil, err } contents := string(data) lexer, err := selexer(filename, contents) if err != nil { return "", nil, err } if lexer == nil { lexer = lexers.Fallback } return contents, lexer, nil } // prepareSpecific prepares contents and lexer for input, exiting if there is no specific lexer available for it. // Input is consumed only up to peekSize for lexer selection. With fullSize -1, consume r until EOF. func prepareSpecific(ctx *kong.Context, r io.Reader, filename string, peekSize, fullSize int) (string, chroma.Lexer) { data := make([]byte, peekSize) n, err := io.ReadFull(r, data) if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) { ctx.FatalIfErrorf(err) } lexer, err := selexer(filename, string(data[:n])) if err != nil { ctx.FatalIfErrorf(err) } if lexer == nil { ctx.Exit(1) } if n < peekSize { return string(data[:n]), lexer } var ndata []byte if fullSize == -1 { rest, err := io.ReadAll(r) ctx.FatalIfErrorf(err) ndata = make([]byte, n+len(rest)) copy(ndata, data[:n]) copy(ndata[n:], rest) } else { ndata = make([]byte, fullSize) copy(ndata, data[:n]) _, err = io.ReadFull(r, ndata[n:]) ctx.FatalIfErrorf(err) } return string(ndata), lexer } func main() { ctx := kong.Parse(&cli, kong.Description(description), kong.Vars{ "version": fmt.Sprintf("%s-%s-%s", version, commit, date), "lexers": "autodetect," + strings.Join(lexers.Names(true), ","), "styles": strings.Join(styles.Names(), ","), "formatters": strings.Join(formatters.Names(), ","), }, kong.Groups{ "format": "Output format:", "select": "Select lexer and style:", "html": "HTML formatter options:", }) if cli.XML != "" { err := dumpXMLLexerDefinitions(cli.XML) ctx.FatalIfErrorf(err) return } if cli.List { listAll() return } if cli.Profile != "" { f, err := os.Create(cli.Profile) ctx.FatalIfErrorf(err) err = pprof.StartCPUProfile(f) ctx.FatalIfErrorf(err) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt) go func() { <-signals pprof.StopCPUProfile() os.Exit(128 + 3) }() defer pprof.StopCPUProfile() } if path.Base(os.Args[0]) == ".lessfilter" { // https://manpages.debian.org/lesspipe#USER_DEFINED_FILTERS cli.Fail = true } var out io.Writer = os.Stdout if runtime.GOOS == "windows" && isatty.IsTerminal(os.Stdout.Fd()) { out = colorable.NewColorableStdout() } var w flushableWriter if cli.Unbuffered { w = &nopFlushableWriter{out} } else { w = bufio.NewWriterSize(out, 16384) } defer w.Flush() // nolint: errcheck switch { case cli.JSON: cli.Formatter = "json" case cli.HTML: cli.Formatter = "html" case cli.SVG: cli.Formatter = "svg" } // Retrieve user-specified style, clone it, and add some overrides. selectedStyle, err := selectStyle() ctx.FatalIfErrorf(err) builder := selectedStyle.Builder() if cli.HTMLHighlightStyle != "" { builder.Add(chroma.LineHighlight, cli.HTMLHighlightStyle) } if cli.HTMLLinesStyle != "" { builder.Add(chroma.LineNumbers, cli.HTMLLinesStyle) } style, err := builder.Build() ctx.FatalIfErrorf(err) if cli.Formatter == "html" { configureHTMLFormatter(ctx) } // Dump styles. if cli.HTMLStyles { formatter := formatters.Get("html").(*html.Formatter) err = formatter.WriteCSS(w, style) ctx.FatalIfErrorf(err) return } if len(cli.Files) == 0 { var contents string var lexer chroma.Lexer if cli.Fail { contents, lexer = prepareSpecific(ctx, os.Stdin, cli.Filename, 1024, -1) } else { contents, lexer, err = prepareLenient(os.Stdin, cli.Filename) ctx.FatalIfErrorf(err) } format(ctx, w, style, lex(ctx, lexer, contents)) } else { for _, filename := range cli.Files { file, err := os.Open(filename) ctx.FatalIfErrorf(err) if cli.Check { contents, lexer, err := prepareLenient(file, filename) ctx.FatalIfErrorf(err) check(filename, lex(ctx, lexer, contents)) } else { var contents string var lexer chroma.Lexer if cli.Fail { fi, err := file.Stat() ctx.FatalIfErrorf(err) contents, lexer = prepareSpecific(ctx, file, filename, 1024, int(fi.Size())) } else { contents, lexer, err = prepareLenient(file, filename) ctx.FatalIfErrorf(err) } format(ctx, w, style, lex(ctx, lexer, contents)) } err = file.Close() ctx.FatalIfErrorf(err) } } } func selectStyle() (*chroma.Style, error) { style, ok := styles.Registry[cli.Style] if ok { return style, nil } r, err := os.Open(cli.Style) if err != nil { return nil, err } defer r.Close() return chroma.NewXMLStyle(r) } func configureHTMLFormatter(ctx *kong.Context) { options := []html.Option{ html.TabWidth(cli.HTMLTabWidth), html.BaseLineNumber(cli.HTMLBaseLine), html.ClassPrefix(cli.HTMLPrefix), html.WithAllClasses(cli.HTMLAllStyles), html.WithClasses(!cli.HTMLInlineStyles), html.Standalone(!cli.HTMLOnly), html.WithLineNumbers(cli.HTMLLines), html.LineNumbersInTable(cli.HTMLLinesTable), html.PreventSurroundingPre(cli.HTMLPreventSurroundingPre), html.WithLinkableLineNumbers(cli.HTMLLinkableLines, "L"), } if len(cli.HTMLHighlight) > 0 { ranges := [][2]int{} for _, span := range strings.Split(cli.HTMLHighlight, ",") { parts := strings.Split(span, ":") if len(parts) > 2 { ctx.Fatalf("range should be N[:M], not %q", span) } start, err := strconv.ParseInt(parts[0], 10, 64) ctx.FatalIfErrorf(err, "min value of range should be integer not %q", parts[0]) end := start if len(parts) == 2 { end, err = strconv.ParseInt(parts[1], 10, 64) ctx.FatalIfErrorf(err, "max value of range should be integer not %q", parts[1]) } ranges = append(ranges, [2]int{int(start), int(end)}) } options = append(options, html.HighlightLines(ranges)) } formatters.Register("html", html.New(options...)) } func listAll() { fmt.Println("lexers:") sort.Sort(lexers.GlobalLexerRegistry.Lexers) for _, l := range lexers.GlobalLexerRegistry.Lexers { config := l.Config() fmt.Printf(" %s\n", config.Name) filenames := []string{} filenames = append(filenames, config.Filenames...) filenames = append(filenames, config.AliasFilenames...) if len(config.Aliases) > 0 { fmt.Printf(" aliases: %s\n", strings.Join(config.Aliases, " ")) } if len(filenames) > 0 { fmt.Printf(" filenames: %s\n", strings.Join(filenames, " ")) } if len(config.MimeTypes) > 0 { fmt.Printf(" mimetypes: %s\n", strings.Join(config.MimeTypes, " ")) } } fmt.Println() fmt.Printf("styles:") for _, name := range styles.Names() { fmt.Printf(" %s", name) } fmt.Println() fmt.Printf("formatters:") for _, name := range formatters.Names() { fmt.Printf(" %s", name) } fmt.Println() } func lex(ctx *kong.Context, lexer chroma.Lexer, contents string) chroma.Iterator { if rel, ok := lexer.(*chroma.RegexLexer); ok { rel.Trace(cli.Trace) } lexer = chroma.Coalesce(lexer) it, err := lexer.Tokenise(nil, contents) ctx.FatalIfErrorf(err) return it } func selexer(path, contents string) (lexer chroma.Lexer, err error) { if cli.Lexer == "autodetect" { if path != "" { lexer := lexers.Match(path) if lexer != nil { return lexer, nil } } return lexers.Analyse(contents), nil } if _, err := os.Stat(cli.Lexer); err == nil { cwd, err := os.Getwd() if err != nil { return nil, err } absPath, err := filepath.Abs(cli.Lexer) if err != nil { return nil, err } path, err := filepath.Rel(cwd, absPath) if err != nil { return nil, err } return chroma.NewXMLLexer(os.DirFS("."), path) } return lexers.Get(cli.Lexer), nil } func format(ctx *kong.Context, w io.Writer, style *chroma.Style, it chroma.Iterator) { formatter := formatters.Get(cli.Formatter) err := formatter.Format(w, style, it) ctx.FatalIfErrorf(err) } func check(filename string, it chroma.Iterator) { line, col := 1, 0 for token := it(); token != chroma.EOF; token = it() { if token.Type == chroma.Error { fmt.Printf("%s:%d:%d %q\n", filename, line, col, token.String()) } for _, c := range token.String() { col++ if c == '\n' { line, col = line+1, 0 } } } } var nameCleanRe = regexp.MustCompile(`[^A-Za-z0-9_#+-]`) func dumpXMLLexerDefinitions(dir string) error { for _, name := range lexers.Names(false) { lex := lexers.Get(name) if rlex, ok := lex.(*chroma.RegexLexer); ok { data, err := chroma.Marshal(rlex) if err != nil { if errors.Is(err, chroma.ErrNotSerialisable) { fmt.Fprintf(os.Stderr, "warning: %q: %s\n", name, err) continue } return err } name := strings.ToLower(nameCleanRe.ReplaceAllString(lex.Config().Name, "_")) filename := filepath.Join(dir, name) + ".xml" // fmt.Println(name) _, err = os.Stat(filename) if err == nil { fmt.Fprintf(os.Stderr, "warning: %s already exists\n", filename) continue } err = os.WriteFile(filename, data, 0600) if err != nil { return err } } } return nil } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0015236�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/go.mod��������������������������������������������������������������������0000664�0000000�0000000�00000001113�14613413627�0016340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module github.com/alecthomas/chroma/v2/cmd/chromad go 1.19 require ( github.com/alecthomas/chroma/v2 v2.13.0 github.com/alecthomas/kong v0.9.0 github.com/alecthomas/kong-hcl v1.0.1 github.com/gorilla/csrf v1.7.2 github.com/gorilla/handlers v1.5.2 github.com/gorilla/mux v1.8.1 ) require ( github.com/dlclark/regexp2 v1.11.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/pkg/errors v0.9.1 // indirect ) replace github.com/alecthomas/chroma/v2 => ../../ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/go.sum��������������������������������������������������������������������0000664�0000000�0000000�00000007674�14613413627�0016407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������github.com/alecthomas/assert/v2 v2.2.1 h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink= github.com/alecthomas/kong v0.2.16/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= github.com/alecthomas/kong v0.8.0 h1:ryDCzutfIqJPnNn0omnrgHLbAggDQM2VWHikE1xqK7s= github.com/alecthomas/kong v0.8.0/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY= github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= github.com/alecthomas/kong v0.9.0/go.mod h1:Y47y5gKfHp1hDc7CH7OeXgLIpp+Q2m1Ni0L5s3bI8Os= github.com/alecthomas/kong-hcl v1.0.1 h1:f4svdFpEoNUwlpZj57CvfhzSnSfP/KBzMDETlwamd/s= github.com/alecthomas/kong-hcl v1.0.1/go.mod h1:6Y+MaMTZ/KQe9Qme6aSlKtql65FJE0/1O+Mu56C6UgQ= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/gorilla/csrf v1.7.1 h1:Ir3o2c1/Uzj6FBxMlAUB6SivgVMy1ONXwYgXn+/aHPE= github.com/gorilla/csrf v1.7.1/go.mod h1:+a/4tCmqhG6/w4oafeAZ9pEa3/NZOWYVbD9fV0FwIQA= github.com/gorilla/csrf v1.7.2 h1:oTUjx0vyf2T+wkrx09Trsev1TE+/EbDAeHtSTbtC2eI= github.com/gorilla/csrf v1.7.2/go.mod h1:F1Fj3KG23WYHE6gozCmBAezKookxbIvUJT+121wTuLk= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= ��������������������������������������������������������������������chroma-2.14.0/cmd/chromad/main.go�������������������������������������������������������������������0000664�0000000�0000000�00000012100�14613413627�0016503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������package main import ( "embed" "encoding/json" "html/template" "log" "mime" "net/http" "sort" "strings" "github.com/alecthomas/kong" konghcl "github.com/alecthomas/kong-hcl" "github.com/gorilla/csrf" "github.com/gorilla/handlers" "github.com/gorilla/mux" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" ) var ( version = "devel" //go:embed templates/index.html.tmpl indexTemplate string //go:embed static staticFiles embed.FS htmlTemplate = template.Must(template.New("html"). Funcs(template.FuncMap{ "JS": func(filename string) template.JS { if version == "devel" { return template.JS(`import "./static/` + filename + "\";\n") } content, err := staticFiles.ReadFile("static/" + strings.TrimSuffix(filename, ".js") + ".min.js") if err != nil { panic(err) } return template.JS(content) }, "CSS": func(filename string) template.CSS { if version == "devel" { return template.CSS(`@import url("./static/` + filename + "\");") } content, err := staticFiles.ReadFile("static/" + strings.TrimSuffix(filename, ".css") + ".min.css") if err != nil { panic(err) } return template.CSS(content) }, }).Parse(indexTemplate)) ) type context struct { Background template.CSS SelectedLanguage string Languages []string SelectedStyle string Styles []string CSRFField template.HTML Version string } func index(w http.ResponseWriter, r *http.Request) { ctx := newContext(r) err := htmlTemplate.Execute(w, &ctx) if err != nil { panic(err) } } type renderRequest struct { Language string `json:"language"` Style string `json:"style"` Text string `json:"text"` Classes bool `json:"classes"` } type renderResponse struct { Error string `json:"error,omitempty"` HTML string `json:"html,omitempty"` Language string `json:"language,omitempty"` Background string `json:"background,omitempty"` } func renderHandler(w http.ResponseWriter, r *http.Request) { req := &renderRequest{} err := json.NewDecoder(r.Body).Decode(&req) var rep *renderResponse if err != nil { rep = &renderResponse{Error: err.Error()} } else { rep, err = render(req) if err != nil { rep = &renderResponse{Error: err.Error()} } } w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(rep) } func render(req *renderRequest) (*renderResponse, error) { language := lexers.Get(req.Language) if language == nil { language = lexers.Analyse(req.Text) if language != nil { req.Language = language.Config().Name } } if language == nil { language = lexers.Fallback } tokens, err := chroma.Coalesce(language).Tokenise(nil, req.Text) if err != nil { return nil, err } style := styles.Get(req.Style) if style == nil { style = styles.Fallback } buf := &strings.Builder{} options := []html.Option{} if req.Classes { options = append(options, html.WithClasses(true), html.Standalone(true)) } formatter := html.New(options...) err = formatter.Format(buf, style, tokens) if err != nil { return nil, err } lang := language.Config().Name if language == lexers.Fallback { lang = "" } return &renderResponse{ Language: lang, HTML: buf.String(), Background: html.StyleEntryToCSS(style.Get(chroma.Background)), }, nil } func newContext(r *http.Request) context { ctx := context{ SelectedStyle: "monokailight", CSRFField: csrf.TemplateField(r), Version: version, } style := styles.Get(ctx.SelectedStyle) if style == nil { style = styles.Fallback } ctx.Background = template.CSS(html.StyleEntryToCSS(style.Get(chroma.Background))) if ctx.SelectedStyle == "" { ctx.SelectedStyle = "monokailight" } for _, lexer := range lexers.GlobalLexerRegistry.Lexers { ctx.Languages = append(ctx.Languages, lexer.Config().Name) } sort.Strings(ctx.Languages) for _, style := range styles.Registry { ctx.Styles = append(ctx.Styles, style.Name) } sort.Strings(ctx.Styles) return ctx } func main() { var cli struct { Version kong.VersionFlag `help:"Show version."` Config kong.ConfigFlag `help:"Load configuration." placeholder:"FILE"` Bind string `help:"HTTP bind address." default:"127.0.0.1:8080"` CSRFKey string `help:"CSRF key." default:""` } ctx := kong.Parse(&cli, kong.Configuration(konghcl.Loader), kong.Vars{"version": version}) log.Printf("Starting chromad %s on http://%s\n", version, cli.Bind) mime.AddExtensionType(".js", "application/javascript") router := mux.NewRouter() router.Handle("/", http.HandlerFunc(index)).Methods("GET") router.Handle("/api/render", http.HandlerFunc(renderHandler)).Methods("POST") router.Handle("/static/{file:.*}", http.FileServer(http.FS(staticFiles))).Methods("GET") options := []csrf.Option{} if cli.CSRFKey == "" { options = append(options, csrf.Secure(false)) } root := handlers.CORS()(csrf.Protect([]byte(cli.CSRFKey), options...)(router)) err := http.ListenAndServe(cli.Bind, root) ctx.FatalIfErrorf(err) } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/reflex.conf���������������������������������������������������������������0000664�0000000�0000000�00000000031�14613413627�0017364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-sr '.*' -- \ go run . �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/static/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0016525�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/static/base64.js����������������������������������������������������������0000664�0000000�0000000�00000024166�14613413627�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * base64.ts * * Licensed under the BSD 3-Clause License. * http://opensource.org/licenses/BSD-3-Clause * * References: * http://en.wikipedia.org/wiki/Base64 * * @author Dan Kogai (https://github.com/dankogai) */ const version = '3.7.4'; /** * @deprecated use lowercase `version`. */ const VERSION = version; const _hasatob = typeof atob === 'function'; const _hasbtoa = typeof btoa === 'function'; const _hasBuffer = typeof Buffer === 'function'; const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined; const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined; const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; const b64chs = Array.prototype.slice.call(b64ch); const b64tab = ((a) => { let tab = {}; a.forEach((c, i) => tab[c] = i); return tab; })(b64chs); const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; const _fromCC = String.fromCharCode.bind(String); const _U8Afrom = typeof Uint8Array.from === 'function' ? Uint8Array.from.bind(Uint8Array) : (it, fn = (x) => x) => new Uint8Array(Array.prototype.slice.call(it, 0).map(fn)); const _mkUriSafe = (src) => src .replace(/=/g, '').replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_'); const _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\+\/]/g, ''); /** * polyfill version of `btoa` */ const btoaPolyfill = (bin) => { // console.log('polyfilled'); let u32, c0, c1, c2, asc = ''; const pad = bin.length % 3; for (let i = 0; i < bin.length;) { if ((c0 = bin.charCodeAt(i++)) > 255 || (c1 = bin.charCodeAt(i++)) > 255 || (c2 = bin.charCodeAt(i++)) > 255) throw new TypeError('invalid character found'); u32 = (c0 << 16) | (c1 << 8) | c2; asc += b64chs[u32 >> 18 & 63] + b64chs[u32 >> 12 & 63] + b64chs[u32 >> 6 & 63] + b64chs[u32 & 63]; } return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc; }; /** * does what `window.btoa` of web browsers do. * @param {String} bin binary string * @returns {string} Base64-encoded string */ const _btoa = _hasbtoa ? (bin) => btoa(bin) : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64') : btoaPolyfill; const _fromUint8Array = _hasBuffer ? (u8a) => Buffer.from(u8a).toString('base64') : (u8a) => { // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326 const maxargs = 0x1000; let strs = []; for (let i = 0, l = u8a.length; i < l; i += maxargs) { strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs))); } return _btoa(strs.join('')); }; /** * converts a Uint8Array to a Base64 string. * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 * @returns {string} Base64 string */ const fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); // This trick is found broken https://github.com/dankogai/js-base64/issues/130 // const utob = (src: string) => unescape(encodeURIComponent(src)); // reverting good old fationed regexp const cb_utob = (c) => { if (c.length < 2) { var cc = c.charCodeAt(0); return cc < 0x80 ? c : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6)) + _fromCC(0x80 | (cc & 0x3f))) : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f)) + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + _fromCC(0x80 | (cc & 0x3f))); } else { var cc = 0x10000 + (c.charCodeAt(0) - 0xD800) * 0x400 + (c.charCodeAt(1) - 0xDC00); return (_fromCC(0xf0 | ((cc >>> 18) & 0x07)) + _fromCC(0x80 | ((cc >>> 12) & 0x3f)) + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + _fromCC(0x80 | (cc & 0x3f))); } }; const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; /** * @deprecated should have been internal use only. * @param {string} src UTF-8 string * @returns {string} UTF-16 string */ const utob = (u) => u.replace(re_utob, cb_utob); // const _encode = _hasBuffer ? (s) => Buffer.from(s, 'utf8').toString('base64') : _TE ? (s) => _fromUint8Array(_TE.encode(s)) : (s) => _btoa(utob(s)); /** * converts a UTF-8-encoded string to a Base64 string. * @param {boolean} [urlsafe] if `true` make the result URL-safe * @returns {string} Base64 string */ const encode = (src, urlsafe = false) => urlsafe ? _mkUriSafe(_encode(src)) : _encode(src); /** * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. * @returns {string} Base64 string */ const encodeURI = (src) => encode(src, true); // This trick is found broken https://github.com/dankogai/js-base64/issues/130 // const btou = (src: string) => decodeURIComponent(escape(src)); // reverting good old fationed regexp const re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; const cb_btou = (cccc) => { switch (cccc.length) { case 4: var cp = ((0x07 & cccc.charCodeAt(0)) << 18) | ((0x3f & cccc.charCodeAt(1)) << 12) | ((0x3f & cccc.charCodeAt(2)) << 6) | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; return (_fromCC((offset >>> 10) + 0xD800) + _fromCC((offset & 0x3FF) + 0xDC00)); case 3: return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12) | ((0x3f & cccc.charCodeAt(1)) << 6) | (0x3f & cccc.charCodeAt(2))); default: return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6) | (0x3f & cccc.charCodeAt(1))); } }; /** * @deprecated should have been internal use only. * @param {string} src UTF-16 string * @returns {string} UTF-8 string */ const btou = (b) => b.replace(re_btou, cb_btou); /** * polyfill version of `atob` */ const atobPolyfill = (asc) => { // console.log('polyfilled'); asc = asc.replace(/\s+/g, ''); if (!b64re.test(asc)) throw new TypeError('malformed base64.'); asc += '=='.slice(2 - (asc.length & 3)); let u24, bin = '', r1, r2; for (let i = 0; i < asc.length;) { u24 = b64tab[asc.charAt(i++)] << 18 | b64tab[asc.charAt(i++)] << 12 | (r1 = b64tab[asc.charAt(i++)]) << 6 | (r2 = b64tab[asc.charAt(i++)]); bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); } return bin; }; /** * does what `window.atob` of web browsers do. * @param {String} asc Base64-encoded string * @returns {string} binary string */ const _atob = _hasatob ? (asc) => atob(_tidyB64(asc)) : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary') : atobPolyfill; // const _toUint8Array = _hasBuffer ? (a) => _U8Afrom(Buffer.from(a, 'base64')) : (a) => _U8Afrom(_atob(a), c => c.charCodeAt(0)); /** * converts a Base64 string to a Uint8Array. */ const toUint8Array = (a) => _toUint8Array(_unURI(a)); // const _decode = _hasBuffer ? (a) => Buffer.from(a, 'base64').toString('utf8') : _TD ? (a) => _TD.decode(_toUint8Array(a)) : (a) => btou(_atob(a)); const _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/')); /** * converts a Base64 string to a UTF-8 string. * @param {String} src Base64 string. Both normal and URL-safe are supported * @returns {string} UTF-8 string */ const decode = (src) => _decode(_unURI(src)); /** * check if a value is a valid Base64 string * @param {String} src a value to check */ const isValid = (src) => { if (typeof src !== 'string') return false; const s = src.replace(/\s+/g, '').replace(/={0,2}$/, ''); return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s); }; // const _noEnum = (v) => { return { value: v, enumerable: false, writable: true, configurable: true }; }; /** * extend String.prototype with relevant methods */ const extendString = function () { const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body)); _add('fromBase64', function () { return decode(this); }); _add('toBase64', function (urlsafe) { return encode(this, urlsafe); }); _add('toBase64URI', function () { return encode(this, true); }); _add('toBase64URL', function () { return encode(this, true); }); _add('toUint8Array', function () { return toUint8Array(this); }); }; /** * extend Uint8Array.prototype with relevant methods */ const extendUint8Array = function () { const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); }); _add('toBase64URI', function () { return fromUint8Array(this, true); }); _add('toBase64URL', function () { return fromUint8Array(this, true); }); }; /** * extend Builtin prototypes with relevant methods */ const extendBuiltins = () => { extendString(); extendUint8Array(); }; const gBase64 = { version: version, VERSION: VERSION, atob: _atob, atobPolyfill: atobPolyfill, btoa: _btoa, btoaPolyfill: btoaPolyfill, fromBase64: decode, toBase64: encode, encode: encode, encodeURI: encodeURI, encodeURL: encodeURI, utob: utob, btou: btou, decode: decode, isValid: isValid, fromUint8Array: fromUint8Array, toUint8Array: toUint8Array, extendString: extendString, extendUint8Array: extendUint8Array, extendBuiltins: extendBuiltins, }; // makecjs:CUT // export { version }; export { VERSION }; export { _atob as atob }; export { atobPolyfill }; export { _btoa as btoa }; export { btoaPolyfill }; export { decode as fromBase64 }; export { encode as toBase64 }; export { utob }; export { encode }; export { encodeURI }; export { encodeURI as encodeURL }; export { btou }; export { decode }; export { isValid }; export { fromUint8Array }; export { toUint8Array }; export { extendString }; export { extendUint8Array }; export { extendBuiltins }; // and finally, export { gBase64 as Base64 }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/static/bulma-0.7.5.css����������������������������������������������������0000664�0000000�0000000�00000670011�14613413627�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! bulma.io v0.7.5 | MIT License | github.com/jgthms/bulma */ @-webkit-keyframes spinAround { from { -webkit-transform: rotate(0deg); transform: rotate(0deg); } to { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes spinAround { from { -webkit-transform: rotate(0deg); transform: rotate(0deg); } to { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .delete, .modal-close, .is-unselectable, .button, .file, .breadcrumb, .pagination-previous, .pagination-next, .pagination-link, .pagination-ellipsis, .tabs { -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after { border: 3px solid transparent; border-radius: 2px; border-right: 0; border-top: 0; content: " "; display: block; height: 0.625em; margin-top: -0.4375em; pointer-events: none; position: absolute; top: 50%; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); -webkit-transform-origin: center; transform-origin: center; width: 0.625em; } .box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child), .subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .list:not(:last-child), .message:not(:last-child), .tabs:not(:last-child) { margin-bottom: 1.5rem; } .delete, .modal-close { -moz-appearance: none; -webkit-appearance: none; background-color: rgba(10, 10, 10, 0.2); border: none; border-radius: 290486px; cursor: pointer; pointer-events: auto; display: inline-block; flex-grow: 0; flex-shrink: 0; font-size: 0; height: 20px; max-height: 20px; max-width: 20px; min-height: 20px; min-width: 20px; outline: none; position: relative; vertical-align: top; width: 20px; } .delete::before, .modal-close::before, .delete::after, .modal-close::after { background-color: white; content: ""; display: block; left: 50%; position: absolute; top: 50%; -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg); transform: translateX(-50%) translateY(-50%) rotate(45deg); -webkit-transform-origin: center center; transform-origin: center center; } .delete::before, .modal-close::before { height: 2px; width: 50%; } .delete::after, .modal-close::after { height: 50%; width: 2px; } .delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus { background-color: rgba(10, 10, 10, 0.3); } .delete:active, .modal-close:active { background-color: rgba(10, 10, 10, 0.4); } .is-small.delete, .is-small.modal-close { height: 16px; max-height: 16px; max-width: 16px; min-height: 16px; min-width: 16px; width: 16px; } .is-medium.delete, .is-medium.modal-close { height: 24px; max-height: 24px; max-width: 24px; min-height: 24px; min-width: 24px; width: 24px; } .is-large.delete, .is-large.modal-close { height: 32px; max-height: 32px; max-width: 32px; min-height: 32px; min-width: 32px; width: 32px; } .button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after { -webkit-animation: spinAround 500ms infinite linear; animation: spinAround 500ms infinite linear; border: 2px solid #dbdbdb; border-radius: 290486px; border-right-color: transparent; border-top-color: transparent; content: ""; display: block; height: 1em; position: relative; width: 1em; } .is-overlay, .image.is-square img, .image.is-square .has-ratio, .image.is-1by1 img, .image.is-1by1 .has-ratio, .image.is-5by4 img, .image.is-5by4 .has-ratio, .image.is-4by3 img, .image.is-4by3 .has-ratio, .image.is-3by2 img, .image.is-3by2 .has-ratio, .image.is-5by3 img, .image.is-5by3 .has-ratio, .image.is-16by9 img, .image.is-16by9 .has-ratio, .image.is-2by1 img, .image.is-2by1 .has-ratio, .image.is-3by1 img, .image.is-3by1 .has-ratio, .image.is-4by5 img, .image.is-4by5 .has-ratio, .image.is-3by4 img, .image.is-3by4 .has-ratio, .image.is-2by3 img, .image.is-2by3 .has-ratio, .image.is-3by5 img, .image.is-3by5 .has-ratio, .image.is-9by16 img, .image.is-9by16 .has-ratio, .image.is-1by2 img, .image.is-1by2 .has-ratio, .image.is-1by3 img, .image.is-1by3 .has-ratio, .modal, .modal-background, .hero-video { bottom: 0; left: 0; position: absolute; right: 0; top: 0; } .button, .input, .textarea, .select select, .file-cta, .file-name, .pagination-previous, .pagination-next, .pagination-link, .pagination-ellipsis { -moz-appearance: none; -webkit-appearance: none; align-items: center; border: 1px solid transparent; border-radius: 4px; box-shadow: none; display: inline-flex; font-size: 1rem; height: 2.25em; justify-content: flex-start; line-height: 1.5; padding-bottom: calc(0.375em - 1px); padding-left: calc(0.625em - 1px); padding-right: calc(0.625em - 1px); padding-top: calc(0.375em - 1px); position: relative; vertical-align: top; } .button:focus, .input:focus, .textarea:focus, .select select:focus, .file-cta:focus, .file-name:focus, .pagination-previous:focus, .pagination-next:focus, .pagination-link:focus, .pagination-ellipsis:focus, .is-focused.button, .is-focused.input, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta, .is-focused.file-name, .is-focused.pagination-previous, .is-focused.pagination-next, .is-focused.pagination-link, .is-focused.pagination-ellipsis, .button:active, .input:active, .textarea:active, .select select:active, .file-cta:active, .file-name:active, .pagination-previous:active, .pagination-next:active, .pagination-link:active, .pagination-ellipsis:active, .is-active.button, .is-active.input, .is-active.textarea, .select select.is-active, .is-active.file-cta, .is-active.file-name, .is-active.pagination-previous, .is-active.pagination-next, .is-active.pagination-link, .is-active.pagination-ellipsis { outline: none; } .button[disabled], .input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled], .file-name[disabled], .pagination-previous[disabled], .pagination-next[disabled], .pagination-link[disabled], .pagination-ellipsis[disabled], fieldset[disabled] .button, fieldset[disabled] .input, fieldset[disabled] .textarea, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .file-cta, fieldset[disabled] .file-name, fieldset[disabled] .pagination-previous, fieldset[disabled] .pagination-next, fieldset[disabled] .pagination-link, fieldset[disabled] .pagination-ellipsis { cursor: not-allowed; } /*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */ html, body, p, ol, ul, li, dl, dt, dd, blockquote, figure, fieldset, legend, textarea, pre, iframe, hr, h1, h2, h3, h4, h5, h6 { margin: 0; padding: 0; } h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; } ul { list-style: none; } button, input, select, textarea { margin: 0; } html { box-sizing: border-box; } *, *::before, *::after { box-sizing: inherit; } img, embed, iframe, object, video { height: auto; max-width: 100%; } audio { max-width: 100%; } iframe { border: 0; } table { border-collapse: collapse; border-spacing: 0; } td, th { padding: 0; } td:not([align]), th:not([align]) { text-align: left; } html { background-color: white; font-size: 16px; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; min-width: 300px; overflow-x: hidden; overflow-y: scroll; text-rendering: optimizeLegibility; -webkit-text-size-adjust: 100%; -moz-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-size-adjust: 100%; } article, aside, figure, footer, header, hgroup, section { display: block; } body, button, input, select, textarea { font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } code, pre { -moz-osx-font-smoothing: auto; -webkit-font-smoothing: auto; font-family: monospace; } body { color: #4a4a4a; font-size: 1em; font-weight: 400; line-height: 1.5; } a { color: #3273dc; cursor: pointer; text-decoration: none; } a strong { color: currentColor; } a:hover { color: #363636; } code { background-color: whitesmoke; color: #ff3860; font-size: 0.875em; font-weight: normal; padding: 0.25em 0.5em 0.25em; } hr { background-color: whitesmoke; border: none; display: block; height: 2px; margin: 1.5rem 0; } img { height: auto; max-width: 100%; } input[type="checkbox"], input[type="radio"] { vertical-align: baseline; } small { font-size: 0.875em; } span { font-style: inherit; font-weight: inherit; } strong { color: #363636; font-weight: 700; } fieldset { border: none; } pre { -webkit-overflow-scrolling: touch; background-color: whitesmoke; color: #4a4a4a; font-size: 0.875em; overflow-x: auto; padding: 1.25rem 1.5rem; white-space: pre; word-wrap: normal; } pre code { background-color: transparent; color: currentColor; font-size: 1em; padding: 0; } table td, table th { vertical-align: top; } table td:not([align]), table th:not([align]) { text-align: left; } table th { color: #363636; } .is-clearfix::after { clear: both; content: " "; display: table; } .is-pulled-left { float: left !important; } .is-pulled-right { float: right !important; } .is-clipped { overflow: hidden !important; } .is-size-1 { font-size: 3rem !important; } .is-size-2 { font-size: 2.5rem !important; } .is-size-3 { font-size: 2rem !important; } .is-size-4 { font-size: 1.5rem !important; } .is-size-5 { font-size: 1.25rem !important; } .is-size-6 { font-size: 1rem !important; } .is-size-7 { font-size: 0.75rem !important; } @media screen and (max-width: 768px) { .is-size-1-mobile { font-size: 3rem !important; } .is-size-2-mobile { font-size: 2.5rem !important; } .is-size-3-mobile { font-size: 2rem !important; } .is-size-4-mobile { font-size: 1.5rem !important; } .is-size-5-mobile { font-size: 1.25rem !important; } .is-size-6-mobile { font-size: 1rem !important; } .is-size-7-mobile { font-size: 0.75rem !important; } } @media screen and (min-width: 769px), print { .is-size-1-tablet { font-size: 3rem !important; } .is-size-2-tablet { font-size: 2.5rem !important; } .is-size-3-tablet { font-size: 2rem !important; } .is-size-4-tablet { font-size: 1.5rem !important; } .is-size-5-tablet { font-size: 1.25rem !important; } .is-size-6-tablet { font-size: 1rem !important; } .is-size-7-tablet { font-size: 0.75rem !important; } } @media screen and (max-width: 1023px) { .is-size-1-touch { font-size: 3rem !important; } .is-size-2-touch { font-size: 2.5rem !important; } .is-size-3-touch { font-size: 2rem !important; } .is-size-4-touch { font-size: 1.5rem !important; } .is-size-5-touch { font-size: 1.25rem !important; } .is-size-6-touch { font-size: 1rem !important; } .is-size-7-touch { font-size: 0.75rem !important; } } @media screen and (min-width: 1024px) { .is-size-1-desktop { font-size: 3rem !important; } .is-size-2-desktop { font-size: 2.5rem !important; } .is-size-3-desktop { font-size: 2rem !important; } .is-size-4-desktop { font-size: 1.5rem !important; } .is-size-5-desktop { font-size: 1.25rem !important; } .is-size-6-desktop { font-size: 1rem !important; } .is-size-7-desktop { font-size: 0.75rem !important; } } @media screen and (min-width: 1216px) { .is-size-1-widescreen { font-size: 3rem !important; } .is-size-2-widescreen { font-size: 2.5rem !important; } .is-size-3-widescreen { font-size: 2rem !important; } .is-size-4-widescreen { font-size: 1.5rem !important; } .is-size-5-widescreen { font-size: 1.25rem !important; } .is-size-6-widescreen { font-size: 1rem !important; } .is-size-7-widescreen { font-size: 0.75rem !important; } } @media screen and (min-width: 1408px) { .is-size-1-fullhd { font-size: 3rem !important; } .is-size-2-fullhd { font-size: 2.5rem !important; } .is-size-3-fullhd { font-size: 2rem !important; } .is-size-4-fullhd { font-size: 1.5rem !important; } .is-size-5-fullhd { font-size: 1.25rem !important; } .is-size-6-fullhd { font-size: 1rem !important; } .is-size-7-fullhd { font-size: 0.75rem !important; } } .has-text-centered { text-align: center !important; } .has-text-justified { text-align: justify !important; } .has-text-left { text-align: left !important; } .has-text-right { text-align: right !important; } @media screen and (max-width: 768px) { .has-text-centered-mobile { text-align: center !important; } } @media screen and (min-width: 769px), print { .has-text-centered-tablet { text-align: center !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .has-text-centered-tablet-only { text-align: center !important; } } @media screen and (max-width: 1023px) { .has-text-centered-touch { text-align: center !important; } } @media screen and (min-width: 1024px) { .has-text-centered-desktop { text-align: center !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .has-text-centered-desktop-only { text-align: center !important; } } @media screen and (min-width: 1216px) { .has-text-centered-widescreen { text-align: center !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .has-text-centered-widescreen-only { text-align: center !important; } } @media screen and (min-width: 1408px) { .has-text-centered-fullhd { text-align: center !important; } } @media screen and (max-width: 768px) { .has-text-justified-mobile { text-align: justify !important; } } @media screen and (min-width: 769px), print { .has-text-justified-tablet { text-align: justify !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .has-text-justified-tablet-only { text-align: justify !important; } } @media screen and (max-width: 1023px) { .has-text-justified-touch { text-align: justify !important; } } @media screen and (min-width: 1024px) { .has-text-justified-desktop { text-align: justify !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .has-text-justified-desktop-only { text-align: justify !important; } } @media screen and (min-width: 1216px) { .has-text-justified-widescreen { text-align: justify !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .has-text-justified-widescreen-only { text-align: justify !important; } } @media screen and (min-width: 1408px) { .has-text-justified-fullhd { text-align: justify !important; } } @media screen and (max-width: 768px) { .has-text-left-mobile { text-align: left !important; } } @media screen and (min-width: 769px), print { .has-text-left-tablet { text-align: left !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .has-text-left-tablet-only { text-align: left !important; } } @media screen and (max-width: 1023px) { .has-text-left-touch { text-align: left !important; } } @media screen and (min-width: 1024px) { .has-text-left-desktop { text-align: left !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .has-text-left-desktop-only { text-align: left !important; } } @media screen and (min-width: 1216px) { .has-text-left-widescreen { text-align: left !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .has-text-left-widescreen-only { text-align: left !important; } } @media screen and (min-width: 1408px) { .has-text-left-fullhd { text-align: left !important; } } @media screen and (max-width: 768px) { .has-text-right-mobile { text-align: right !important; } } @media screen and (min-width: 769px), print { .has-text-right-tablet { text-align: right !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .has-text-right-tablet-only { text-align: right !important; } } @media screen and (max-width: 1023px) { .has-text-right-touch { text-align: right !important; } } @media screen and (min-width: 1024px) { .has-text-right-desktop { text-align: right !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .has-text-right-desktop-only { text-align: right !important; } } @media screen and (min-width: 1216px) { .has-text-right-widescreen { text-align: right !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .has-text-right-widescreen-only { text-align: right !important; } } @media screen and (min-width: 1408px) { .has-text-right-fullhd { text-align: right !important; } } .is-capitalized { text-transform: capitalize !important; } .is-lowercase { text-transform: lowercase !important; } .is-uppercase { text-transform: uppercase !important; } .is-italic { font-style: italic !important; } .has-text-white { color: white !important; } a.has-text-white:hover, a.has-text-white:focus { color: #e6e6e6 !important; } .has-background-white { background-color: white !important; } .has-text-black { color: #0a0a0a !important; } a.has-text-black:hover, a.has-text-black:focus { color: black !important; } .has-background-black { background-color: #0a0a0a !important; } .has-text-light { color: whitesmoke !important; } a.has-text-light:hover, a.has-text-light:focus { color: #dbdbdb !important; } .has-background-light { background-color: whitesmoke !important; } .has-text-dark { color: #363636 !important; } a.has-text-dark:hover, a.has-text-dark:focus { color: #1c1c1c !important; } .has-background-dark { background-color: #363636 !important; } .has-text-primary { color: #00d1b2 !important; } a.has-text-primary:hover, a.has-text-primary:focus { color: #009e86 !important; } .has-background-primary { background-color: #00d1b2 !important; } .has-text-link { color: #3273dc !important; } a.has-text-link:hover, a.has-text-link:focus { color: #205bbc !important; } .has-background-link { background-color: #3273dc !important; } .has-text-info { color: #209cee !important; } a.has-text-info:hover, a.has-text-info:focus { color: #0f81cc !important; } .has-background-info { background-color: #209cee !important; } .has-text-success { color: #23d160 !important; } a.has-text-success:hover, a.has-text-success:focus { color: #1ca64c !important; } .has-background-success { background-color: #23d160 !important; } .has-text-warning { color: #ffdd57 !important; } a.has-text-warning:hover, a.has-text-warning:focus { color: #ffd324 !important; } .has-background-warning { background-color: #ffdd57 !important; } .has-text-danger { color: #ff3860 !important; } a.has-text-danger:hover, a.has-text-danger:focus { color: #ff0537 !important; } .has-background-danger { background-color: #ff3860 !important; } .has-text-black-bis { color: #121212 !important; } .has-background-black-bis { background-color: #121212 !important; } .has-text-black-ter { color: #242424 !important; } .has-background-black-ter { background-color: #242424 !important; } .has-text-grey-darker { color: #363636 !important; } .has-background-grey-darker { background-color: #363636 !important; } .has-text-grey-dark { color: #4a4a4a !important; } .has-background-grey-dark { background-color: #4a4a4a !important; } .has-text-grey { color: #7a7a7a !important; } .has-background-grey { background-color: #7a7a7a !important; } .has-text-grey-light { color: #b5b5b5 !important; } .has-background-grey-light { background-color: #b5b5b5 !important; } .has-text-grey-lighter { color: #dbdbdb !important; } .has-background-grey-lighter { background-color: #dbdbdb !important; } .has-text-white-ter { color: whitesmoke !important; } .has-background-white-ter { background-color: whitesmoke !important; } .has-text-white-bis { color: #fafafa !important; } .has-background-white-bis { background-color: #fafafa !important; } .has-text-weight-light { font-weight: 300 !important; } .has-text-weight-normal { font-weight: 400 !important; } .has-text-weight-medium { font-weight: 500 !important; } .has-text-weight-semibold { font-weight: 600 !important; } .has-text-weight-bold { font-weight: 700 !important; } .is-family-primary { font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } .is-family-secondary { font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } .is-family-sans-serif { font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } .is-family-monospace { font-family: monospace !important; } .is-family-code { font-family: monospace !important; } .is-block { display: block !important; } @media screen and (max-width: 768px) { .is-block-mobile { display: block !important; } } @media screen and (min-width: 769px), print { .is-block-tablet { display: block !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-block-tablet-only { display: block !important; } } @media screen and (max-width: 1023px) { .is-block-touch { display: block !important; } } @media screen and (min-width: 1024px) { .is-block-desktop { display: block !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-block-desktop-only { display: block !important; } } @media screen and (min-width: 1216px) { .is-block-widescreen { display: block !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-block-widescreen-only { display: block !important; } } @media screen and (min-width: 1408px) { .is-block-fullhd { display: block !important; } } .is-flex { display: flex !important; } @media screen and (max-width: 768px) { .is-flex-mobile { display: flex !important; } } @media screen and (min-width: 769px), print { .is-flex-tablet { display: flex !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-flex-tablet-only { display: flex !important; } } @media screen and (max-width: 1023px) { .is-flex-touch { display: flex !important; } } @media screen and (min-width: 1024px) { .is-flex-desktop { display: flex !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-flex-desktop-only { display: flex !important; } } @media screen and (min-width: 1216px) { .is-flex-widescreen { display: flex !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-flex-widescreen-only { display: flex !important; } } @media screen and (min-width: 1408px) { .is-flex-fullhd { display: flex !important; } } .is-inline { display: inline !important; } @media screen and (max-width: 768px) { .is-inline-mobile { display: inline !important; } } @media screen and (min-width: 769px), print { .is-inline-tablet { display: inline !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-inline-tablet-only { display: inline !important; } } @media screen and (max-width: 1023px) { .is-inline-touch { display: inline !important; } } @media screen and (min-width: 1024px) { .is-inline-desktop { display: inline !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-inline-desktop-only { display: inline !important; } } @media screen and (min-width: 1216px) { .is-inline-widescreen { display: inline !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-inline-widescreen-only { display: inline !important; } } @media screen and (min-width: 1408px) { .is-inline-fullhd { display: inline !important; } } .is-inline-block { display: inline-block !important; } @media screen and (max-width: 768px) { .is-inline-block-mobile { display: inline-block !important; } } @media screen and (min-width: 769px), print { .is-inline-block-tablet { display: inline-block !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-inline-block-tablet-only { display: inline-block !important; } } @media screen and (max-width: 1023px) { .is-inline-block-touch { display: inline-block !important; } } @media screen and (min-width: 1024px) { .is-inline-block-desktop { display: inline-block !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-inline-block-desktop-only { display: inline-block !important; } } @media screen and (min-width: 1216px) { .is-inline-block-widescreen { display: inline-block !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-inline-block-widescreen-only { display: inline-block !important; } } @media screen and (min-width: 1408px) { .is-inline-block-fullhd { display: inline-block !important; } } .is-inline-flex { display: inline-flex !important; } @media screen and (max-width: 768px) { .is-inline-flex-mobile { display: inline-flex !important; } } @media screen and (min-width: 769px), print { .is-inline-flex-tablet { display: inline-flex !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-inline-flex-tablet-only { display: inline-flex !important; } } @media screen and (max-width: 1023px) { .is-inline-flex-touch { display: inline-flex !important; } } @media screen and (min-width: 1024px) { .is-inline-flex-desktop { display: inline-flex !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-inline-flex-desktop-only { display: inline-flex !important; } } @media screen and (min-width: 1216px) { .is-inline-flex-widescreen { display: inline-flex !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-inline-flex-widescreen-only { display: inline-flex !important; } } @media screen and (min-width: 1408px) { .is-inline-flex-fullhd { display: inline-flex !important; } } .is-hidden { display: none !important; } .is-sr-only { border: none !important; clip: rect(0, 0, 0, 0) !important; height: 0.01em !important; overflow: hidden !important; padding: 0 !important; position: absolute !important; white-space: nowrap !important; width: 0.01em !important; } @media screen and (max-width: 768px) { .is-hidden-mobile { display: none !important; } } @media screen and (min-width: 769px), print { .is-hidden-tablet { display: none !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-hidden-tablet-only { display: none !important; } } @media screen and (max-width: 1023px) { .is-hidden-touch { display: none !important; } } @media screen and (min-width: 1024px) { .is-hidden-desktop { display: none !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-hidden-desktop-only { display: none !important; } } @media screen and (min-width: 1216px) { .is-hidden-widescreen { display: none !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-hidden-widescreen-only { display: none !important; } } @media screen and (min-width: 1408px) { .is-hidden-fullhd { display: none !important; } } .is-invisible { visibility: hidden !important; } @media screen and (max-width: 768px) { .is-invisible-mobile { visibility: hidden !important; } } @media screen and (min-width: 769px), print { .is-invisible-tablet { visibility: hidden !important; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .is-invisible-tablet-only { visibility: hidden !important; } } @media screen and (max-width: 1023px) { .is-invisible-touch { visibility: hidden !important; } } @media screen and (min-width: 1024px) { .is-invisible-desktop { visibility: hidden !important; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .is-invisible-desktop-only { visibility: hidden !important; } } @media screen and (min-width: 1216px) { .is-invisible-widescreen { visibility: hidden !important; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .is-invisible-widescreen-only { visibility: hidden !important; } } @media screen and (min-width: 1408px) { .is-invisible-fullhd { visibility: hidden !important; } } .is-marginless { margin: 0 !important; } .is-paddingless { padding: 0 !important; } .is-radiusless { border-radius: 0 !important; } .is-shadowless { box-shadow: none !important; } .is-relative { position: relative !important; } .box { background-color: white; border-radius: 6px; box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); color: #4a4a4a; display: block; padding: 1.25rem; } a.box:hover, a.box:focus { box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc; } a.box:active { box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc; } .button { background-color: white; border-color: #dbdbdb; border-width: 1px; color: #363636; cursor: pointer; justify-content: center; padding-bottom: calc(0.375em - 1px); padding-left: 0.75em; padding-right: 0.75em; padding-top: calc(0.375em - 1px); text-align: center; white-space: nowrap; } .button strong { color: inherit; } .button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large { height: 1.5em; width: 1.5em; } .button .icon:first-child:not(:last-child) { margin-left: calc(-0.375em - 1px); margin-right: 0.1875em; } .button .icon:last-child:not(:first-child) { margin-left: 0.1875em; margin-right: calc(-0.375em - 1px); } .button .icon:first-child:last-child { margin-left: calc(-0.375em - 1px); margin-right: calc(-0.375em - 1px); } .button:hover, .button.is-hovered { border-color: #b5b5b5; color: #363636; } .button:focus, .button.is-focused { border-color: #3273dc; color: #363636; } .button:focus:not(:active), .button.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); } .button:active, .button.is-active { border-color: #4a4a4a; color: #363636; } .button.is-text { background-color: transparent; border-color: transparent; color: #4a4a4a; text-decoration: underline; } .button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused { background-color: whitesmoke; color: #363636; } .button.is-text:active, .button.is-text.is-active { background-color: #e8e8e8; color: #363636; } .button.is-text[disabled], fieldset[disabled] .button.is-text { background-color: transparent; border-color: transparent; box-shadow: none; } .button.is-white { background-color: white; border-color: transparent; color: #0a0a0a; } .button.is-white:hover, .button.is-white.is-hovered { background-color: #f9f9f9; border-color: transparent; color: #0a0a0a; } .button.is-white:focus, .button.is-white.is-focused { border-color: transparent; color: #0a0a0a; } .button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } .button.is-white:active, .button.is-white.is-active { background-color: #f2f2f2; border-color: transparent; color: #0a0a0a; } .button.is-white[disabled], fieldset[disabled] .button.is-white { background-color: white; border-color: transparent; box-shadow: none; } .button.is-white.is-inverted { background-color: #0a0a0a; color: white; } .button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered { background-color: black; } .button.is-white.is-inverted[disabled], fieldset[disabled] .button.is-white.is-inverted { background-color: #0a0a0a; border-color: transparent; box-shadow: none; color: white; } .button.is-white.is-loading::after { border-color: transparent transparent #0a0a0a #0a0a0a !important; } .button.is-white.is-outlined { background-color: transparent; border-color: white; color: white; } .button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused { background-color: white; border-color: white; color: #0a0a0a; } .button.is-white.is-outlined.is-loading::after { border-color: transparent transparent white white !important; } .button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #0a0a0a #0a0a0a !important; } .button.is-white.is-outlined[disabled], fieldset[disabled] .button.is-white.is-outlined { background-color: transparent; border-color: white; box-shadow: none; color: white; } .button.is-white.is-inverted.is-outlined { background-color: transparent; border-color: #0a0a0a; color: #0a0a0a; } .button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused { background-color: #0a0a0a; color: white; } .button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent white white !important; } .button.is-white.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-white.is-inverted.is-outlined { background-color: transparent; border-color: #0a0a0a; box-shadow: none; color: #0a0a0a; } .button.is-black { background-color: #0a0a0a; border-color: transparent; color: white; } .button.is-black:hover, .button.is-black.is-hovered { background-color: #040404; border-color: transparent; color: white; } .button.is-black:focus, .button.is-black.is-focused { border-color: transparent; color: white; } .button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } .button.is-black:active, .button.is-black.is-active { background-color: black; border-color: transparent; color: white; } .button.is-black[disabled], fieldset[disabled] .button.is-black { background-color: #0a0a0a; border-color: transparent; box-shadow: none; } .button.is-black.is-inverted { background-color: white; color: #0a0a0a; } .button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-black.is-inverted[disabled], fieldset[disabled] .button.is-black.is-inverted { background-color: white; border-color: transparent; box-shadow: none; color: #0a0a0a; } .button.is-black.is-loading::after { border-color: transparent transparent white white !important; } .button.is-black.is-outlined { background-color: transparent; border-color: #0a0a0a; color: #0a0a0a; } .button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused { background-color: #0a0a0a; border-color: #0a0a0a; color: white; } .button.is-black.is-outlined.is-loading::after { border-color: transparent transparent #0a0a0a #0a0a0a !important; } .button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after { border-color: transparent transparent white white !important; } .button.is-black.is-outlined[disabled], fieldset[disabled] .button.is-black.is-outlined { background-color: transparent; border-color: #0a0a0a; box-shadow: none; color: #0a0a0a; } .button.is-black.is-inverted.is-outlined { background-color: transparent; border-color: white; color: white; } .button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused { background-color: white; color: #0a0a0a; } .button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #0a0a0a #0a0a0a !important; } .button.is-black.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-black.is-inverted.is-outlined { background-color: transparent; border-color: white; box-shadow: none; color: white; } .button.is-light { background-color: whitesmoke; border-color: transparent; color: #363636; } .button.is-light:hover, .button.is-light.is-hovered { background-color: #eeeeee; border-color: transparent; color: #363636; } .button.is-light:focus, .button.is-light.is-focused { border-color: transparent; color: #363636; } .button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } .button.is-light:active, .button.is-light.is-active { background-color: #e8e8e8; border-color: transparent; color: #363636; } .button.is-light[disabled], fieldset[disabled] .button.is-light { background-color: whitesmoke; border-color: transparent; box-shadow: none; } .button.is-light.is-inverted { background-color: #363636; color: whitesmoke; } .button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered { background-color: #292929; } .button.is-light.is-inverted[disabled], fieldset[disabled] .button.is-light.is-inverted { background-color: #363636; border-color: transparent; box-shadow: none; color: whitesmoke; } .button.is-light.is-loading::after { border-color: transparent transparent #363636 #363636 !important; } .button.is-light.is-outlined { background-color: transparent; border-color: whitesmoke; color: whitesmoke; } .button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused { background-color: whitesmoke; border-color: whitesmoke; color: #363636; } .button.is-light.is-outlined.is-loading::after { border-color: transparent transparent whitesmoke whitesmoke !important; } .button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #363636 #363636 !important; } .button.is-light.is-outlined[disabled], fieldset[disabled] .button.is-light.is-outlined { background-color: transparent; border-color: whitesmoke; box-shadow: none; color: whitesmoke; } .button.is-light.is-inverted.is-outlined { background-color: transparent; border-color: #363636; color: #363636; } .button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused { background-color: #363636; color: whitesmoke; } .button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent whitesmoke whitesmoke !important; } .button.is-light.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-light.is-inverted.is-outlined { background-color: transparent; border-color: #363636; box-shadow: none; color: #363636; } .button.is-dark { background-color: #363636; border-color: transparent; color: whitesmoke; } .button.is-dark:hover, .button.is-dark.is-hovered { background-color: #2f2f2f; border-color: transparent; color: whitesmoke; } .button.is-dark:focus, .button.is-dark.is-focused { border-color: transparent; color: whitesmoke; } .button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } .button.is-dark:active, .button.is-dark.is-active { background-color: #292929; border-color: transparent; color: whitesmoke; } .button.is-dark[disabled], fieldset[disabled] .button.is-dark { background-color: #363636; border-color: transparent; box-shadow: none; } .button.is-dark.is-inverted { background-color: whitesmoke; color: #363636; } .button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered { background-color: #e8e8e8; } .button.is-dark.is-inverted[disabled], fieldset[disabled] .button.is-dark.is-inverted { background-color: whitesmoke; border-color: transparent; box-shadow: none; color: #363636; } .button.is-dark.is-loading::after { border-color: transparent transparent whitesmoke whitesmoke !important; } .button.is-dark.is-outlined { background-color: transparent; border-color: #363636; color: #363636; } .button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused { background-color: #363636; border-color: #363636; color: whitesmoke; } .button.is-dark.is-outlined.is-loading::after { border-color: transparent transparent #363636 #363636 !important; } .button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after { border-color: transparent transparent whitesmoke whitesmoke !important; } .button.is-dark.is-outlined[disabled], fieldset[disabled] .button.is-dark.is-outlined { background-color: transparent; border-color: #363636; box-shadow: none; color: #363636; } .button.is-dark.is-inverted.is-outlined { background-color: transparent; border-color: whitesmoke; color: whitesmoke; } .button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused { background-color: whitesmoke; color: #363636; } .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #363636 #363636 !important; } .button.is-dark.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-dark.is-inverted.is-outlined { background-color: transparent; border-color: whitesmoke; box-shadow: none; color: whitesmoke; } .button.is-primary { background-color: #00d1b2; border-color: transparent; color: #fff; } .button.is-primary:hover, .button.is-primary.is-hovered { background-color: #00c4a7; border-color: transparent; color: #fff; } .button.is-primary:focus, .button.is-primary.is-focused { border-color: transparent; color: #fff; } .button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); } .button.is-primary:active, .button.is-primary.is-active { background-color: #00b89c; border-color: transparent; color: #fff; } .button.is-primary[disabled], fieldset[disabled] .button.is-primary { background-color: #00d1b2; border-color: transparent; box-shadow: none; } .button.is-primary.is-inverted { background-color: #fff; color: #00d1b2; } .button.is-primary.is-inverted:hover, .button.is-primary.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-primary.is-inverted[disabled], fieldset[disabled] .button.is-primary.is-inverted { background-color: #fff; border-color: transparent; box-shadow: none; color: #00d1b2; } .button.is-primary.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-primary.is-outlined { background-color: transparent; border-color: #00d1b2; color: #00d1b2; } .button.is-primary.is-outlined:hover, .button.is-primary.is-outlined.is-hovered, .button.is-primary.is-outlined:focus, .button.is-primary.is-outlined.is-focused { background-color: #00d1b2; border-color: #00d1b2; color: #fff; } .button.is-primary.is-outlined.is-loading::after { border-color: transparent transparent #00d1b2 #00d1b2 !important; } .button.is-primary.is-outlined.is-loading:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-outlined.is-loading:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-primary.is-outlined[disabled], fieldset[disabled] .button.is-primary.is-outlined { background-color: transparent; border-color: #00d1b2; box-shadow: none; color: #00d1b2; } .button.is-primary.is-inverted.is-outlined { background-color: transparent; border-color: #fff; color: #fff; } .button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .button.is-primary.is-inverted.is-outlined:focus, .button.is-primary.is-inverted.is-outlined.is-focused { background-color: #fff; color: #00d1b2; } .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #00d1b2 #00d1b2 !important; } .button.is-primary.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-primary.is-inverted.is-outlined { background-color: transparent; border-color: #fff; box-shadow: none; color: #fff; } .button.is-link { background-color: #3273dc; border-color: transparent; color: #fff; } .button.is-link:hover, .button.is-link.is-hovered { background-color: #276cda; border-color: transparent; color: #fff; } .button.is-link:focus, .button.is-link.is-focused { border-color: transparent; color: #fff; } .button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); } .button.is-link:active, .button.is-link.is-active { background-color: #2366d1; border-color: transparent; color: #fff; } .button.is-link[disabled], fieldset[disabled] .button.is-link { background-color: #3273dc; border-color: transparent; box-shadow: none; } .button.is-link.is-inverted { background-color: #fff; color: #3273dc; } .button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-link.is-inverted[disabled], fieldset[disabled] .button.is-link.is-inverted { background-color: #fff; border-color: transparent; box-shadow: none; color: #3273dc; } .button.is-link.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-link.is-outlined { background-color: transparent; border-color: #3273dc; color: #3273dc; } .button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused { background-color: #3273dc; border-color: #3273dc; color: #fff; } .button.is-link.is-outlined.is-loading::after { border-color: transparent transparent #3273dc #3273dc !important; } .button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-link.is-outlined[disabled], fieldset[disabled] .button.is-link.is-outlined { background-color: transparent; border-color: #3273dc; box-shadow: none; color: #3273dc; } .button.is-link.is-inverted.is-outlined { background-color: transparent; border-color: #fff; color: #fff; } .button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused { background-color: #fff; color: #3273dc; } .button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #3273dc #3273dc !important; } .button.is-link.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-link.is-inverted.is-outlined { background-color: transparent; border-color: #fff; box-shadow: none; color: #fff; } .button.is-info { background-color: #209cee; border-color: transparent; color: #fff; } .button.is-info:hover, .button.is-info.is-hovered { background-color: #1496ed; border-color: transparent; color: #fff; } .button.is-info:focus, .button.is-info.is-focused { border-color: transparent; color: #fff; } .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } .button.is-info:active, .button.is-info.is-active { background-color: #118fe4; border-color: transparent; color: #fff; } .button.is-info[disabled], fieldset[disabled] .button.is-info { background-color: #209cee; border-color: transparent; box-shadow: none; } .button.is-info.is-inverted { background-color: #fff; color: #209cee; } .button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-info.is-inverted[disabled], fieldset[disabled] .button.is-info.is-inverted { background-color: #fff; border-color: transparent; box-shadow: none; color: #209cee; } .button.is-info.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-info.is-outlined { background-color: transparent; border-color: #209cee; color: #209cee; } .button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused { background-color: #209cee; border-color: #209cee; color: #fff; } .button.is-info.is-outlined.is-loading::after { border-color: transparent transparent #209cee #209cee !important; } .button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-info.is-outlined[disabled], fieldset[disabled] .button.is-info.is-outlined { background-color: transparent; border-color: #209cee; box-shadow: none; color: #209cee; } .button.is-info.is-inverted.is-outlined { background-color: transparent; border-color: #fff; color: #fff; } .button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused { background-color: #fff; color: #209cee; } .button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #209cee #209cee !important; } .button.is-info.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-info.is-inverted.is-outlined { background-color: transparent; border-color: #fff; box-shadow: none; color: #fff; } .button.is-success { background-color: #23d160; border-color: transparent; color: #fff; } .button.is-success:hover, .button.is-success.is-hovered { background-color: #22c65b; border-color: transparent; color: #fff; } .button.is-success:focus, .button.is-success.is-focused { border-color: transparent; color: #fff; } .button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); } .button.is-success:active, .button.is-success.is-active { background-color: #20bc56; border-color: transparent; color: #fff; } .button.is-success[disabled], fieldset[disabled] .button.is-success { background-color: #23d160; border-color: transparent; box-shadow: none; } .button.is-success.is-inverted { background-color: #fff; color: #23d160; } .button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-success.is-inverted[disabled], fieldset[disabled] .button.is-success.is-inverted { background-color: #fff; border-color: transparent; box-shadow: none; color: #23d160; } .button.is-success.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-success.is-outlined { background-color: transparent; border-color: #23d160; color: #23d160; } .button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused { background-color: #23d160; border-color: #23d160; color: #fff; } .button.is-success.is-outlined.is-loading::after { border-color: transparent transparent #23d160 #23d160 !important; } .button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-success.is-outlined[disabled], fieldset[disabled] .button.is-success.is-outlined { background-color: transparent; border-color: #23d160; box-shadow: none; color: #23d160; } .button.is-success.is-inverted.is-outlined { background-color: transparent; border-color: #fff; color: #fff; } .button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused { background-color: #fff; color: #23d160; } .button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #23d160 #23d160 !important; } .button.is-success.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-success.is-inverted.is-outlined { background-color: transparent; border-color: #fff; box-shadow: none; color: #fff; } .button.is-warning { background-color: #ffdd57; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .button.is-warning:hover, .button.is-warning.is-hovered { background-color: #ffdb4a; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .button.is-warning:focus, .button.is-warning.is-focused { border-color: transparent; color: rgba(0, 0, 0, 0.7); } .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } .button.is-warning:active, .button.is-warning.is-active { background-color: #ffd83d; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .button.is-warning[disabled], fieldset[disabled] .button.is-warning { background-color: #ffdd57; border-color: transparent; box-shadow: none; } .button.is-warning.is-inverted { background-color: rgba(0, 0, 0, 0.7); color: #ffdd57; } .button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered { background-color: rgba(0, 0, 0, 0.7); } .button.is-warning.is-inverted[disabled], fieldset[disabled] .button.is-warning.is-inverted { background-color: rgba(0, 0, 0, 0.7); border-color: transparent; box-shadow: none; color: #ffdd57; } .button.is-warning.is-loading::after { border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } .button.is-warning.is-outlined { background-color: transparent; border-color: #ffdd57; color: #ffdd57; } .button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused { background-color: #ffdd57; border-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .button.is-warning.is-outlined.is-loading::after { border-color: transparent transparent #ffdd57 #ffdd57 !important; } .button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after { border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; } .button.is-warning.is-outlined[disabled], fieldset[disabled] .button.is-warning.is-outlined { background-color: transparent; border-color: #ffdd57; box-shadow: none; color: #ffdd57; } .button.is-warning.is-inverted.is-outlined { background-color: transparent; border-color: rgba(0, 0, 0, 0.7); color: rgba(0, 0, 0, 0.7); } .button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused { background-color: rgba(0, 0, 0, 0.7); color: #ffdd57; } .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #ffdd57 #ffdd57 !important; } .button.is-warning.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-warning.is-inverted.is-outlined { background-color: transparent; border-color: rgba(0, 0, 0, 0.7); box-shadow: none; color: rgba(0, 0, 0, 0.7); } .button.is-danger { background-color: #ff3860; border-color: transparent; color: #fff; } .button.is-danger:hover, .button.is-danger.is-hovered { background-color: #ff2b56; border-color: transparent; color: #fff; } .button.is-danger:focus, .button.is-danger.is-focused { border-color: transparent; color: #fff; } .button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) { box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); } .button.is-danger:active, .button.is-danger.is-active { background-color: #ff1f4b; border-color: transparent; color: #fff; } .button.is-danger[disabled], fieldset[disabled] .button.is-danger { background-color: #ff3860; border-color: transparent; box-shadow: none; } .button.is-danger.is-inverted { background-color: #fff; color: #ff3860; } .button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered { background-color: #f2f2f2; } .button.is-danger.is-inverted[disabled], fieldset[disabled] .button.is-danger.is-inverted { background-color: #fff; border-color: transparent; box-shadow: none; color: #ff3860; } .button.is-danger.is-loading::after { border-color: transparent transparent #fff #fff !important; } .button.is-danger.is-outlined { background-color: transparent; border-color: #ff3860; color: #ff3860; } .button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused { background-color: #ff3860; border-color: #ff3860; color: #fff; } .button.is-danger.is-outlined.is-loading::after { border-color: transparent transparent #ff3860 #ff3860 !important; } .button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #fff #fff !important; } .button.is-danger.is-outlined[disabled], fieldset[disabled] .button.is-danger.is-outlined { background-color: transparent; border-color: #ff3860; box-shadow: none; color: #ff3860; } .button.is-danger.is-inverted.is-outlined { background-color: transparent; border-color: #fff; color: #fff; } .button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused { background-color: #fff; color: #ff3860; } .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after { border-color: transparent transparent #ff3860 #ff3860 !important; } .button.is-danger.is-inverted.is-outlined[disabled], fieldset[disabled] .button.is-danger.is-inverted.is-outlined { background-color: transparent; border-color: #fff; box-shadow: none; color: #fff; } .button.is-small { border-radius: 2px; font-size: 0.75rem; } .button.is-normal { font-size: 1rem; } .button.is-medium { font-size: 1.25rem; } .button.is-large { font-size: 1.5rem; } .button[disabled], fieldset[disabled] .button { background-color: white; border-color: #dbdbdb; box-shadow: none; opacity: 0.5; } .button.is-fullwidth { display: flex; width: 100%; } .button.is-loading { color: transparent !important; pointer-events: none; } .button.is-loading::after { position: absolute; left: calc(50% - (1em / 2)); top: calc(50% - (1em / 2)); position: absolute !important; } .button.is-static { background-color: whitesmoke; border-color: #dbdbdb; color: #7a7a7a; box-shadow: none; pointer-events: none; } .button.is-rounded { border-radius: 290486px; padding-left: 1em; padding-right: 1em; } .buttons { align-items: center; display: flex; flex-wrap: wrap; justify-content: flex-start; } .buttons .button { margin-bottom: 0.5rem; } .buttons .button:not(:last-child):not(.is-fullwidth) { margin-right: 0.5rem; } .buttons:last-child { margin-bottom: -0.5rem; } .buttons:not(:last-child) { margin-bottom: 1rem; } .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) { border-radius: 2px; font-size: 0.75rem; } .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) { font-size: 1.25rem; } .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) { font-size: 1.5rem; } .buttons.has-addons .button:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } .buttons.has-addons .button:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; margin-right: -1px; } .buttons.has-addons .button:last-child { margin-right: 0; } .buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered { z-index: 2; } .buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected { z-index: 3; } .buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover { z-index: 4; } .buttons.has-addons .button.is-expanded { flex-grow: 1; flex-shrink: 1; } .buttons.is-centered { justify-content: center; } .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) { margin-left: 0.25rem; margin-right: 0.25rem; } .buttons.is-right { justify-content: flex-end; } .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) { margin-left: 0.25rem; margin-right: 0.25rem; } .container { flex-grow: 1; margin: 0 auto; position: relative; width: auto; } @media screen and (min-width: 1024px) { .container { max-width: 960px; } .container.is-fluid { margin-left: 32px; margin-right: 32px; max-width: none; } } @media screen and (max-width: 1215px) { .container.is-widescreen { max-width: 1152px; } } @media screen and (max-width: 1407px) { .container.is-fullhd { max-width: 1344px; } } @media screen and (min-width: 1216px) { .container { max-width: 1152px; } } @media screen and (min-width: 1408px) { .container { max-width: 1344px; } } .content li + li { margin-top: 0.25em; } .content p:not(:last-child), .content dl:not(:last-child), .content ol:not(:last-child), .content ul:not(:last-child), .content blockquote:not(:last-child), .content pre:not(:last-child), .content table:not(:last-child) { margin-bottom: 1em; } .content h1, .content h2, .content h3, .content h4, .content h5, .content h6 { color: #363636; font-weight: 600; line-height: 1.125; } .content h1 { font-size: 2em; margin-bottom: 0.5em; } .content h1:not(:first-child) { margin-top: 1em; } .content h2 { font-size: 1.75em; margin-bottom: 0.5714em; } .content h2:not(:first-child) { margin-top: 1.1428em; } .content h3 { font-size: 1.5em; margin-bottom: 0.6666em; } .content h3:not(:first-child) { margin-top: 1.3333em; } .content h4 { font-size: 1.25em; margin-bottom: 0.8em; } .content h5 { font-size: 1.125em; margin-bottom: 0.8888em; } .content h6 { font-size: 1em; margin-bottom: 1em; } .content blockquote { background-color: whitesmoke; border-left: 5px solid #dbdbdb; padding: 1.25em 1.5em; } .content ol { list-style-position: outside; margin-left: 2em; margin-top: 1em; } .content ol:not([type]) { list-style-type: decimal; } .content ol:not([type]).is-lower-alpha { list-style-type: lower-alpha; } .content ol:not([type]).is-lower-roman { list-style-type: lower-roman; } .content ol:not([type]).is-upper-alpha { list-style-type: upper-alpha; } .content ol:not([type]).is-upper-roman { list-style-type: upper-roman; } .content ul { list-style: disc outside; margin-left: 2em; margin-top: 1em; } .content ul ul { list-style-type: circle; margin-top: 0.5em; } .content ul ul ul { list-style-type: square; } .content dd { margin-left: 2em; } .content figure { margin-left: 2em; margin-right: 2em; text-align: center; } .content figure:not(:first-child) { margin-top: 2em; } .content figure:not(:last-child) { margin-bottom: 2em; } .content figure img { display: inline-block; } .content figure figcaption { font-style: italic; } .content pre { -webkit-overflow-scrolling: touch; overflow-x: auto; padding: 1.25em 1.5em; white-space: pre; word-wrap: normal; } .content sup, .content sub { font-size: 75%; } .content table { width: 100%; } .content table td, .content table th { border: 1px solid #dbdbdb; border-width: 0 0 1px; padding: 0.5em 0.75em; vertical-align: top; } .content table th { color: #363636; } .content table th:not([align]) { text-align: left; } .content table thead td, .content table thead th { border-width: 0 0 2px; color: #363636; } .content table tfoot td, .content table tfoot th { border-width: 2px 0 0; color: #363636; } .content table tbody tr:last-child td, .content table tbody tr:last-child th { border-bottom-width: 0; } .content .tabs li + li { margin-top: 0; } .content.is-small { font-size: 0.75rem; } .content.is-medium { font-size: 1.25rem; } .content.is-large { font-size: 1.5rem; } .icon { align-items: center; display: inline-flex; justify-content: center; height: 1.5rem; width: 1.5rem; } .icon.is-small { height: 1rem; width: 1rem; } .icon.is-medium { height: 2rem; width: 2rem; } .icon.is-large { height: 3rem; width: 3rem; } .image { display: block; position: relative; } .image img { display: block; height: auto; width: 100%; } .image img.is-rounded { border-radius: 290486px; } .image.is-square img, .image.is-square .has-ratio, .image.is-1by1 img, .image.is-1by1 .has-ratio, .image.is-5by4 img, .image.is-5by4 .has-ratio, .image.is-4by3 img, .image.is-4by3 .has-ratio, .image.is-3by2 img, .image.is-3by2 .has-ratio, .image.is-5by3 img, .image.is-5by3 .has-ratio, .image.is-16by9 img, .image.is-16by9 .has-ratio, .image.is-2by1 img, .image.is-2by1 .has-ratio, .image.is-3by1 img, .image.is-3by1 .has-ratio, .image.is-4by5 img, .image.is-4by5 .has-ratio, .image.is-3by4 img, .image.is-3by4 .has-ratio, .image.is-2by3 img, .image.is-2by3 .has-ratio, .image.is-3by5 img, .image.is-3by5 .has-ratio, .image.is-9by16 img, .image.is-9by16 .has-ratio, .image.is-1by2 img, .image.is-1by2 .has-ratio, .image.is-1by3 img, .image.is-1by3 .has-ratio { height: 100%; width: 100%; } .image.is-square, .image.is-1by1 { padding-top: 100%; } .image.is-5by4 { padding-top: 80%; } .image.is-4by3 { padding-top: 75%; } .image.is-3by2 { padding-top: 66.6666%; } .image.is-5by3 { padding-top: 60%; } .image.is-16by9 { padding-top: 56.25%; } .image.is-2by1 { padding-top: 50%; } .image.is-3by1 { padding-top: 33.3333%; } .image.is-4by5 { padding-top: 125%; } .image.is-3by4 { padding-top: 133.3333%; } .image.is-2by3 { padding-top: 150%; } .image.is-3by5 { padding-top: 166.6666%; } .image.is-9by16 { padding-top: 177.7777%; } .image.is-1by2 { padding-top: 200%; } .image.is-1by3 { padding-top: 300%; } .image.is-16x16 { height: 16px; width: 16px; } .image.is-24x24 { height: 24px; width: 24px; } .image.is-32x32 { height: 32px; width: 32px; } .image.is-48x48 { height: 48px; width: 48px; } .image.is-64x64 { height: 64px; width: 64px; } .image.is-96x96 { height: 96px; width: 96px; } .image.is-128x128 { height: 128px; width: 128px; } .notification { background-color: whitesmoke; border-radius: 4px; padding: 1.25rem 2.5rem 1.25rem 1.5rem; position: relative; } .notification a:not(.button):not(.dropdown-item) { color: currentColor; text-decoration: underline; } .notification strong { color: currentColor; } .notification code, .notification pre { background: white; } .notification pre code { background: transparent; } .notification > .delete { position: absolute; right: 0.5rem; top: 0.5rem; } .notification .title, .notification .subtitle, .notification .content { color: currentColor; } .notification.is-white { background-color: white; color: #0a0a0a; } .notification.is-black { background-color: #0a0a0a; color: white; } .notification.is-light { background-color: whitesmoke; color: #363636; } .notification.is-dark { background-color: #363636; color: whitesmoke; } .notification.is-primary { background-color: #00d1b2; color: #fff; } .notification.is-link { background-color: #3273dc; color: #fff; } .notification.is-info { background-color: #209cee; color: #fff; } .notification.is-success { background-color: #23d160; color: #fff; } .notification.is-warning { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .notification.is-danger { background-color: #ff3860; color: #fff; } .progress { -moz-appearance: none; -webkit-appearance: none; border: none; border-radius: 290486px; display: block; height: 1rem; overflow: hidden; padding: 0; width: 100%; } .progress::-webkit-progress-bar { background-color: #dbdbdb; } .progress::-webkit-progress-value { background-color: #4a4a4a; } .progress::-moz-progress-bar { background-color: #4a4a4a; } .progress::-ms-fill { background-color: #4a4a4a; border: none; } .progress.is-white::-webkit-progress-value { background-color: white; } .progress.is-white::-moz-progress-bar { background-color: white; } .progress.is-white::-ms-fill { background-color: white; } .progress.is-white:indeterminate { background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); } .progress.is-black::-webkit-progress-value { background-color: #0a0a0a; } .progress.is-black::-moz-progress-bar { background-color: #0a0a0a; } .progress.is-black::-ms-fill { background-color: #0a0a0a; } .progress.is-black:indeterminate { background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); } .progress.is-light::-webkit-progress-value { background-color: whitesmoke; } .progress.is-light::-moz-progress-bar { background-color: whitesmoke; } .progress.is-light::-ms-fill { background-color: whitesmoke; } .progress.is-light:indeterminate { background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); } .progress.is-dark::-webkit-progress-value { background-color: #363636; } .progress.is-dark::-moz-progress-bar { background-color: #363636; } .progress.is-dark::-ms-fill { background-color: #363636; } .progress.is-dark:indeterminate { background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); } .progress.is-primary::-webkit-progress-value { background-color: #00d1b2; } .progress.is-primary::-moz-progress-bar { background-color: #00d1b2; } .progress.is-primary::-ms-fill { background-color: #00d1b2; } .progress.is-primary:indeterminate { background-image: linear-gradient(to right, #00d1b2 30%, #dbdbdb 30%); } .progress.is-link::-webkit-progress-value { background-color: #3273dc; } .progress.is-link::-moz-progress-bar { background-color: #3273dc; } .progress.is-link::-ms-fill { background-color: #3273dc; } .progress.is-link:indeterminate { background-image: linear-gradient(to right, #3273dc 30%, #dbdbdb 30%); } .progress.is-info::-webkit-progress-value { background-color: #209cee; } .progress.is-info::-moz-progress-bar { background-color: #209cee; } .progress.is-info::-ms-fill { background-color: #209cee; } .progress.is-info:indeterminate { background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); } .progress.is-success::-webkit-progress-value { background-color: #23d160; } .progress.is-success::-moz-progress-bar { background-color: #23d160; } .progress.is-success::-ms-fill { background-color: #23d160; } .progress.is-success:indeterminate { background-image: linear-gradient(to right, #23d160 30%, #dbdbdb 30%); } .progress.is-warning::-webkit-progress-value { background-color: #ffdd57; } .progress.is-warning::-moz-progress-bar { background-color: #ffdd57; } .progress.is-warning::-ms-fill { background-color: #ffdd57; } .progress.is-warning:indeterminate { background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); } .progress.is-danger::-webkit-progress-value { background-color: #ff3860; } .progress.is-danger::-moz-progress-bar { background-color: #ff3860; } .progress.is-danger::-ms-fill { background-color: #ff3860; } .progress.is-danger:indeterminate { background-image: linear-gradient(to right, #ff3860 30%, #dbdbdb 30%); } .progress:indeterminate { -webkit-animation-duration: 1.5s; animation-duration: 1.5s; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-animation-name: moveIndeterminate; animation-name: moveIndeterminate; -webkit-animation-timing-function: linear; animation-timing-function: linear; background-color: #dbdbdb; background-image: linear-gradient(to right, #4a4a4a 30%, #dbdbdb 30%); background-position: top left; background-repeat: no-repeat; background-size: 150% 150%; } .progress:indeterminate::-webkit-progress-bar { background-color: transparent; } .progress:indeterminate::-moz-progress-bar { background-color: transparent; } .progress.is-small { height: 0.75rem; } .progress.is-medium { height: 1.25rem; } .progress.is-large { height: 1.5rem; } @-webkit-keyframes moveIndeterminate { from { background-position: 200% 0; } to { background-position: -200% 0; } } @keyframes moveIndeterminate { from { background-position: 200% 0; } to { background-position: -200% 0; } } .table { background-color: white; color: #363636; } .table td, .table th { border: 1px solid #dbdbdb; border-width: 0 0 1px; padding: 0.5em 0.75em; vertical-align: top; } .table td.is-white, .table th.is-white { background-color: white; border-color: white; color: #0a0a0a; } .table td.is-black, .table th.is-black { background-color: #0a0a0a; border-color: #0a0a0a; color: white; } .table td.is-light, .table th.is-light { background-color: whitesmoke; border-color: whitesmoke; color: #363636; } .table td.is-dark, .table th.is-dark { background-color: #363636; border-color: #363636; color: whitesmoke; } .table td.is-primary, .table th.is-primary { background-color: #00d1b2; border-color: #00d1b2; color: #fff; } .table td.is-link, .table th.is-link { background-color: #3273dc; border-color: #3273dc; color: #fff; } .table td.is-info, .table th.is-info { background-color: #209cee; border-color: #209cee; color: #fff; } .table td.is-success, .table th.is-success { background-color: #23d160; border-color: #23d160; color: #fff; } .table td.is-warning, .table th.is-warning { background-color: #ffdd57; border-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .table td.is-danger, .table th.is-danger { background-color: #ff3860; border-color: #ff3860; color: #fff; } .table td.is-narrow, .table th.is-narrow { white-space: nowrap; width: 1%; } .table td.is-selected, .table th.is-selected { background-color: #00d1b2; color: #fff; } .table td.is-selected a, .table td.is-selected strong, .table th.is-selected a, .table th.is-selected strong { color: currentColor; } .table th { color: #363636; } .table th:not([align]) { text-align: left; } .table tr.is-selected { background-color: #00d1b2; color: #fff; } .table tr.is-selected a, .table tr.is-selected strong { color: currentColor; } .table tr.is-selected td, .table tr.is-selected th { border-color: #fff; color: currentColor; } .table thead { background-color: transparent; } .table thead td, .table thead th { border-width: 0 0 2px; color: #363636; } .table tfoot { background-color: transparent; } .table tfoot td, .table tfoot th { border-width: 2px 0 0; color: #363636; } .table tbody { background-color: transparent; } .table tbody tr:last-child td, .table tbody tr:last-child th { border-bottom-width: 0; } .table.is-bordered td, .table.is-bordered th { border-width: 1px; } .table.is-bordered tr:last-child td, .table.is-bordered tr:last-child th { border-bottom-width: 1px; } .table.is-fullwidth { width: 100%; } .table.is-hoverable tbody tr:not(.is-selected):hover { background-color: #fafafa; } .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover { background-color: #fafafa; } .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) { background-color: whitesmoke; } .table.is-narrow td, .table.is-narrow th { padding: 0.25em 0.5em; } .table.is-striped tbody tr:not(.is-selected):nth-child(even) { background-color: #fafafa; } .table-container { -webkit-overflow-scrolling: touch; overflow: auto; overflow-y: hidden; max-width: 100%; } .tags { align-items: center; display: flex; flex-wrap: wrap; justify-content: flex-start; } .tags .tag { margin-bottom: 0.5rem; } .tags .tag:not(:last-child) { margin-right: 0.5rem; } .tags:last-child { margin-bottom: -0.5rem; } .tags:not(:last-child) { margin-bottom: 1rem; } .tags.are-medium .tag:not(.is-normal):not(.is-large) { font-size: 1rem; } .tags.are-large .tag:not(.is-normal):not(.is-medium) { font-size: 1.25rem; } .tags.is-centered { justify-content: center; } .tags.is-centered .tag { margin-right: 0.25rem; margin-left: 0.25rem; } .tags.is-right { justify-content: flex-end; } .tags.is-right .tag:not(:first-child) { margin-left: 0.5rem; } .tags.is-right .tag:not(:last-child) { margin-right: 0; } .tags.has-addons .tag { margin-right: 0; } .tags.has-addons .tag:not(:first-child) { margin-left: 0; border-bottom-left-radius: 0; border-top-left-radius: 0; } .tags.has-addons .tag:not(:last-child) { border-bottom-right-radius: 0; border-top-right-radius: 0; } .tag:not(body) { align-items: center; background-color: whitesmoke; border-radius: 4px; color: #4a4a4a; display: inline-flex; font-size: 0.75rem; height: 2em; justify-content: center; line-height: 1.5; padding-left: 0.75em; padding-right: 0.75em; white-space: nowrap; } .tag:not(body) .delete { margin-left: 0.25rem; margin-right: -0.375rem; } .tag:not(body).is-white { background-color: white; color: #0a0a0a; } .tag:not(body).is-black { background-color: #0a0a0a; color: white; } .tag:not(body).is-light { background-color: whitesmoke; color: #363636; } .tag:not(body).is-dark { background-color: #363636; color: whitesmoke; } .tag:not(body).is-primary { background-color: #00d1b2; color: #fff; } .tag:not(body).is-link { background-color: #3273dc; color: #fff; } .tag:not(body).is-info { background-color: #209cee; color: #fff; } .tag:not(body).is-success { background-color: #23d160; color: #fff; } .tag:not(body).is-warning { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .tag:not(body).is-danger { background-color: #ff3860; color: #fff; } .tag:not(body).is-normal { font-size: 0.75rem; } .tag:not(body).is-medium { font-size: 1rem; } .tag:not(body).is-large { font-size: 1.25rem; } .tag:not(body) .icon:first-child:not(:last-child) { margin-left: -0.375em; margin-right: 0.1875em; } .tag:not(body) .icon:last-child:not(:first-child) { margin-left: 0.1875em; margin-right: -0.375em; } .tag:not(body) .icon:first-child:last-child { margin-left: -0.375em; margin-right: -0.375em; } .tag:not(body).is-delete { margin-left: 1px; padding: 0; position: relative; width: 2em; } .tag:not(body).is-delete::before, .tag:not(body).is-delete::after { background-color: currentColor; content: ""; display: block; left: 50%; position: absolute; top: 50%; -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg); transform: translateX(-50%) translateY(-50%) rotate(45deg); -webkit-transform-origin: center center; transform-origin: center center; } .tag:not(body).is-delete::before { height: 1px; width: 50%; } .tag:not(body).is-delete::after { height: 50%; width: 1px; } .tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus { background-color: #e8e8e8; } .tag:not(body).is-delete:active { background-color: #dbdbdb; } .tag:not(body).is-rounded { border-radius: 290486px; } a.tag:hover { text-decoration: underline; } .title, .subtitle { word-break: break-word; } .title em, .title span, .subtitle em, .subtitle span { font-weight: inherit; } .title sub, .subtitle sub { font-size: 0.75em; } .title sup, .subtitle sup { font-size: 0.75em; } .title .tag, .subtitle .tag { vertical-align: middle; } .title { color: #363636; font-size: 2rem; font-weight: 600; line-height: 1.125; } .title strong { color: inherit; font-weight: inherit; } .title + .highlight { margin-top: -0.75rem; } .title:not(.is-spaced) + .subtitle { margin-top: -1.25rem; } .title.is-1 { font-size: 3rem; } .title.is-2 { font-size: 2.5rem; } .title.is-3 { font-size: 2rem; } .title.is-4 { font-size: 1.5rem; } .title.is-5 { font-size: 1.25rem; } .title.is-6 { font-size: 1rem; } .title.is-7 { font-size: 0.75rem; } .subtitle { color: #4a4a4a; font-size: 1.25rem; font-weight: 400; line-height: 1.25; } .subtitle strong { color: #363636; font-weight: 600; } .subtitle:not(.is-spaced) + .title { margin-top: -1.25rem; } .subtitle.is-1 { font-size: 3rem; } .subtitle.is-2 { font-size: 2.5rem; } .subtitle.is-3 { font-size: 2rem; } .subtitle.is-4 { font-size: 1.5rem; } .subtitle.is-5 { font-size: 1.25rem; } .subtitle.is-6 { font-size: 1rem; } .subtitle.is-7 { font-size: 0.75rem; } .heading { display: block; font-size: 11px; letter-spacing: 1px; margin-bottom: 5px; text-transform: uppercase; } .highlight { font-weight: 400; max-width: 100%; overflow: hidden; padding: 0; } .highlight pre { overflow: auto; max-width: 100%; } .number { align-items: center; background-color: whitesmoke; border-radius: 290486px; display: inline-flex; font-size: 1.25rem; height: 2em; justify-content: center; margin-right: 1.5rem; min-width: 2.5em; padding: 0.25rem 0.5rem; text-align: center; vertical-align: top; } .input, .textarea, .select select { background-color: white; border-color: #dbdbdb; border-radius: 4px; color: #363636; } .input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder { color: rgba(54, 54, 54, 0.3); } .input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder { color: rgba(54, 54, 54, 0.3); } .input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder { color: rgba(54, 54, 54, 0.3); } .input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder { color: rgba(54, 54, 54, 0.3); } .input:hover, .textarea:hover, .select select:hover, .is-hovered.input, .is-hovered.textarea, .select select.is-hovered { border-color: #b5b5b5; } .input:focus, .textarea:focus, .select select:focus, .is-focused.input, .is-focused.textarea, .select select.is-focused, .input:active, .textarea:active, .select select:active, .is-active.input, .is-active.textarea, .select select.is-active { border-color: #3273dc; box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); } .input[disabled], .textarea[disabled], .select select[disabled], fieldset[disabled] .input, fieldset[disabled] .textarea, fieldset[disabled] .select select, .select fieldset[disabled] select { background-color: whitesmoke; border-color: whitesmoke; box-shadow: none; color: #7a7a7a; } .input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder { color: rgba(122, 122, 122, 0.3); } .input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder { color: rgba(122, 122, 122, 0.3); } .input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder { color: rgba(122, 122, 122, 0.3); } .input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder { color: rgba(122, 122, 122, 0.3); } .input, .textarea { box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); max-width: 100%; width: 100%; } .input[readonly], .textarea[readonly] { box-shadow: none; } .is-white.input, .is-white.textarea { border-color: white; } .is-white.input:focus, .is-white.textarea:focus, .is-white.is-focused.input, .is-white.is-focused.textarea, .is-white.input:active, .is-white.textarea:active, .is-white.is-active.input, .is-white.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } .is-black.input, .is-black.textarea { border-color: #0a0a0a; } .is-black.input:focus, .is-black.textarea:focus, .is-black.is-focused.input, .is-black.is-focused.textarea, .is-black.input:active, .is-black.textarea:active, .is-black.is-active.input, .is-black.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } .is-light.input, .is-light.textarea { border-color: whitesmoke; } .is-light.input:focus, .is-light.textarea:focus, .is-light.is-focused.input, .is-light.is-focused.textarea, .is-light.input:active, .is-light.textarea:active, .is-light.is-active.input, .is-light.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } .is-dark.input, .is-dark.textarea { border-color: #363636; } .is-dark.input:focus, .is-dark.textarea:focus, .is-dark.is-focused.input, .is-dark.is-focused.textarea, .is-dark.input:active, .is-dark.textarea:active, .is-dark.is-active.input, .is-dark.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } .is-primary.input, .is-primary.textarea { border-color: #00d1b2; } .is-primary.input:focus, .is-primary.textarea:focus, .is-primary.is-focused.input, .is-primary.is-focused.textarea, .is-primary.input:active, .is-primary.textarea:active, .is-primary.is-active.input, .is-primary.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); } .is-link.input, .is-link.textarea { border-color: #3273dc; } .is-link.input:focus, .is-link.textarea:focus, .is-link.is-focused.input, .is-link.is-focused.textarea, .is-link.input:active, .is-link.textarea:active, .is-link.is-active.input, .is-link.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); } .is-info.input, .is-info.textarea { border-color: #209cee; } .is-info.input:focus, .is-info.textarea:focus, .is-info.is-focused.input, .is-info.is-focused.textarea, .is-info.input:active, .is-info.textarea:active, .is-info.is-active.input, .is-info.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } .is-success.input, .is-success.textarea { border-color: #23d160; } .is-success.input:focus, .is-success.textarea:focus, .is-success.is-focused.input, .is-success.is-focused.textarea, .is-success.input:active, .is-success.textarea:active, .is-success.is-active.input, .is-success.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); } .is-warning.input, .is-warning.textarea { border-color: #ffdd57; } .is-warning.input:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, .is-warning.is-focused.textarea, .is-warning.input:active, .is-warning.textarea:active, .is-warning.is-active.input, .is-warning.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } .is-danger.input, .is-danger.textarea { border-color: #ff3860; } .is-danger.input:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, .is-danger.is-focused.textarea, .is-danger.input:active, .is-danger.textarea:active, .is-danger.is-active.input, .is-danger.is-active.textarea { box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); } .is-small.input, .is-small.textarea { border-radius: 2px; font-size: 0.75rem; } .is-medium.input, .is-medium.textarea { font-size: 1.25rem; } .is-large.input, .is-large.textarea { font-size: 1.5rem; } .is-fullwidth.input, .is-fullwidth.textarea { display: block; width: 100%; } .is-inline.input, .is-inline.textarea { display: inline; width: auto; } .input.is-rounded { border-radius: 290486px; padding-left: 1em; padding-right: 1em; } .input.is-static { background-color: transparent; border-color: transparent; box-shadow: none; padding-left: 0; padding-right: 0; } .textarea { display: block; max-width: 100%; min-width: 100%; padding: 0.625em; resize: vertical; } .textarea:not([rows]) { max-height: 600px; min-height: 120px; } .textarea[rows] { height: initial; } .textarea.has-fixed-size { resize: none; } .checkbox, .radio { cursor: pointer; display: inline-block; line-height: 1.25; position: relative; } .checkbox input, .radio input { cursor: pointer; } .checkbox:hover, .radio:hover { color: #363636; } .checkbox[disabled], .radio[disabled], fieldset[disabled] .checkbox, fieldset[disabled] .radio { color: #7a7a7a; cursor: not-allowed; } .radio + .radio { margin-left: 0.5em; } .select { display: inline-block; max-width: 100%; position: relative; vertical-align: top; } .select:not(.is-multiple) { height: 2.25em; } .select:not(.is-multiple):not(.is-loading)::after { border-color: #3273dc; right: 1.125em; z-index: 4; } .select.is-rounded select { border-radius: 290486px; padding-left: 1em; } .select select { cursor: pointer; display: block; font-size: 1em; max-width: 100%; outline: none; } .select select::-ms-expand { display: none; } .select select[disabled]:hover, fieldset[disabled] .select select:hover { border-color: whitesmoke; } .select select:not([multiple]) { padding-right: 2.5em; } .select select[multiple] { height: auto; padding: 0; } .select select[multiple] option { padding: 0.5em 1em; } .select:not(.is-multiple):not(.is-loading):hover::after { border-color: #363636; } .select.is-white:not(:hover)::after { border-color: white; } .select.is-white select { border-color: white; } .select.is-white select:hover, .select.is-white select.is-hovered { border-color: #f2f2f2; } .select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active { box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } .select.is-black:not(:hover)::after { border-color: #0a0a0a; } .select.is-black select { border-color: #0a0a0a; } .select.is-black select:hover, .select.is-black select.is-hovered { border-color: black; } .select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active { box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } .select.is-light:not(:hover)::after { border-color: whitesmoke; } .select.is-light select { border-color: whitesmoke; } .select.is-light select:hover, .select.is-light select.is-hovered { border-color: #e8e8e8; } .select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active { box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } .select.is-dark:not(:hover)::after { border-color: #363636; } .select.is-dark select { border-color: #363636; } .select.is-dark select:hover, .select.is-dark select.is-hovered { border-color: #292929; } .select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active { box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } .select.is-primary:not(:hover)::after { border-color: #00d1b2; } .select.is-primary select { border-color: #00d1b2; } .select.is-primary select:hover, .select.is-primary select.is-hovered { border-color: #00b89c; } .select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active { box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25); } .select.is-link:not(:hover)::after { border-color: #3273dc; } .select.is-link select { border-color: #3273dc; } .select.is-link select:hover, .select.is-link select.is-hovered { border-color: #2366d1; } .select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active { box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25); } .select.is-info:not(:hover)::after { border-color: #209cee; } .select.is-info select { border-color: #209cee; } .select.is-info select:hover, .select.is-info select.is-hovered { border-color: #118fe4; } .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } .select.is-success:not(:hover)::after { border-color: #23d160; } .select.is-success select { border-color: #23d160; } .select.is-success select:hover, .select.is-success select.is-hovered { border-color: #20bc56; } .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { box-shadow: 0 0 0 0.125em rgba(35, 209, 96, 0.25); } .select.is-warning:not(:hover)::after { border-color: #ffdd57; } .select.is-warning select { border-color: #ffdd57; } .select.is-warning select:hover, .select.is-warning select.is-hovered { border-color: #ffd83d; } .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } .select.is-danger:not(:hover)::after { border-color: #ff3860; } .select.is-danger select { border-color: #ff3860; } .select.is-danger select:hover, .select.is-danger select.is-hovered { border-color: #ff1f4b; } .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { box-shadow: 0 0 0 0.125em rgba(255, 56, 96, 0.25); } .select.is-small { border-radius: 2px; font-size: 0.75rem; } .select.is-medium { font-size: 1.25rem; } .select.is-large { font-size: 1.5rem; } .select.is-disabled::after { border-color: #7a7a7a; } .select.is-fullwidth { width: 100%; } .select.is-fullwidth select { width: 100%; } .select.is-loading::after { margin-top: 0; position: absolute; right: 0.625em; top: 0.625em; -webkit-transform: none; transform: none; } .select.is-loading.is-small:after { font-size: 0.75rem; } .select.is-loading.is-medium:after { font-size: 1.25rem; } .select.is-loading.is-large:after { font-size: 1.5rem; } .file { align-items: stretch; display: flex; justify-content: flex-start; position: relative; } .file.is-white .file-cta { background-color: white; border-color: transparent; color: #0a0a0a; } .file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta { background-color: #f9f9f9; border-color: transparent; color: #0a0a0a; } .file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25); color: #0a0a0a; } .file.is-white:active .file-cta, .file.is-white.is-active .file-cta { background-color: #f2f2f2; border-color: transparent; color: #0a0a0a; } .file.is-black .file-cta { background-color: #0a0a0a; border-color: transparent; color: white; } .file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta { background-color: #040404; border-color: transparent; color: white; } .file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25); color: white; } .file.is-black:active .file-cta, .file.is-black.is-active .file-cta { background-color: black; border-color: transparent; color: white; } .file.is-light .file-cta { background-color: whitesmoke; border-color: transparent; color: #363636; } .file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta { background-color: #eeeeee; border-color: transparent; color: #363636; } .file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25); color: #363636; } .file.is-light:active .file-cta, .file.is-light.is-active .file-cta { background-color: #e8e8e8; border-color: transparent; color: #363636; } .file.is-dark .file-cta { background-color: #363636; border-color: transparent; color: whitesmoke; } .file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta { background-color: #2f2f2f; border-color: transparent; color: whitesmoke; } .file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25); color: whitesmoke; } .file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta { background-color: #292929; border-color: transparent; color: whitesmoke; } .file.is-primary .file-cta { background-color: #00d1b2; border-color: transparent; color: #fff; } .file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta { background-color: #00c4a7; border-color: transparent; color: #fff; } .file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25); color: #fff; } .file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta { background-color: #00b89c; border-color: transparent; color: #fff; } .file.is-link .file-cta { background-color: #3273dc; border-color: transparent; color: #fff; } .file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta { background-color: #276cda; border-color: transparent; color: #fff; } .file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25); color: #fff; } .file.is-link:active .file-cta, .file.is-link.is-active .file-cta { background-color: #2366d1; border-color: transparent; color: #fff; } .file.is-info .file-cta { background-color: #209cee; border-color: transparent; color: #fff; } .file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta { background-color: #1496ed; border-color: transparent; color: #fff; } .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); color: #fff; } .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { background-color: #118fe4; border-color: transparent; color: #fff; } .file.is-success .file-cta { background-color: #23d160; border-color: transparent; color: #fff; } .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { background-color: #22c65b; border-color: transparent; color: #fff; } .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(35, 209, 96, 0.25); color: #fff; } .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { background-color: #20bc56; border-color: transparent; color: #fff; } .file.is-warning .file-cta { background-color: #ffdd57; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { background-color: #ffdb4a; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); color: rgba(0, 0, 0, 0.7); } .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { background-color: #ffd83d; border-color: transparent; color: rgba(0, 0, 0, 0.7); } .file.is-danger .file-cta { background-color: #ff3860; border-color: transparent; color: #fff; } .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { background-color: #ff2b56; border-color: transparent; color: #fff; } .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { border-color: transparent; box-shadow: 0 0 0.5em rgba(255, 56, 96, 0.25); color: #fff; } .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { background-color: #ff1f4b; border-color: transparent; color: #fff; } .file.is-small { font-size: 0.75rem; } .file.is-medium { font-size: 1.25rem; } .file.is-medium .file-icon .fa { font-size: 21px; } .file.is-large { font-size: 1.5rem; } .file.is-large .file-icon .fa { font-size: 28px; } .file.has-name .file-cta { border-bottom-right-radius: 0; border-top-right-radius: 0; } .file.has-name .file-name { border-bottom-left-radius: 0; border-top-left-radius: 0; } .file.has-name.is-empty .file-cta { border-radius: 4px; } .file.has-name.is-empty .file-name { display: none; } .file.is-boxed .file-label { flex-direction: column; } .file.is-boxed .file-cta { flex-direction: column; height: auto; padding: 1em 3em; } .file.is-boxed .file-name { border-width: 0 1px 1px; } .file.is-boxed .file-icon { height: 1.5em; width: 1.5em; } .file.is-boxed .file-icon .fa { font-size: 21px; } .file.is-boxed.is-small .file-icon .fa { font-size: 14px; } .file.is-boxed.is-medium .file-icon .fa { font-size: 28px; } .file.is-boxed.is-large .file-icon .fa { font-size: 35px; } .file.is-boxed.has-name .file-cta { border-radius: 4px 4px 0 0; } .file.is-boxed.has-name .file-name { border-radius: 0 0 4px 4px; border-width: 0 1px 1px; } .file.is-centered { justify-content: center; } .file.is-fullwidth .file-label { width: 100%; } .file.is-fullwidth .file-name { flex-grow: 1; max-width: none; } .file.is-right { justify-content: flex-end; } .file.is-right .file-cta { border-radius: 0 4px 4px 0; } .file.is-right .file-name { border-radius: 4px 0 0 4px; border-width: 1px 0 1px 1px; order: -1; } .file-label { align-items: stretch; display: flex; cursor: pointer; justify-content: flex-start; overflow: hidden; position: relative; } .file-label:hover .file-cta { background-color: #eeeeee; color: #363636; } .file-label:hover .file-name { border-color: #d5d5d5; } .file-label:active .file-cta { background-color: #e8e8e8; color: #363636; } .file-label:active .file-name { border-color: #cfcfcf; } .file-input { height: 100%; left: 0; opacity: 0; outline: none; position: absolute; top: 0; width: 100%; } .file-cta, .file-name { border-color: #dbdbdb; border-radius: 4px; font-size: 1em; padding-left: 1em; padding-right: 1em; white-space: nowrap; } .file-cta { background-color: whitesmoke; color: #4a4a4a; } .file-name { border-color: #dbdbdb; border-style: solid; border-width: 1px 1px 1px 0; display: block; max-width: 16em; overflow: hidden; text-align: left; text-overflow: ellipsis; } .file-icon { align-items: center; display: flex; height: 1em; justify-content: center; margin-right: 0.5em; width: 1em; } .file-icon .fa { font-size: 14px; } .label { color: #363636; display: block; font-size: 1rem; font-weight: 700; } .label:not(:last-child) { margin-bottom: 0.5em; } .label.is-small { font-size: 0.75rem; } .label.is-medium { font-size: 1.25rem; } .label.is-large { font-size: 1.5rem; } .help { display: block; font-size: 0.75rem; margin-top: 0.25rem; } .help.is-white { color: white; } .help.is-black { color: #0a0a0a; } .help.is-light { color: whitesmoke; } .help.is-dark { color: #363636; } .help.is-primary { color: #00d1b2; } .help.is-link { color: #3273dc; } .help.is-info { color: #209cee; } .help.is-success { color: #23d160; } .help.is-warning { color: #ffdd57; } .help.is-danger { color: #ff3860; } .field:not(:last-child) { margin-bottom: 0.75rem; } .field.has-addons { display: flex; justify-content: flex-start; } .field.has-addons .control:not(:last-child) { margin-right: -1px; } .field.has-addons .control:not(:first-child):not(:last-child) .button, .field.has-addons .control:not(:first-child):not(:last-child) .input, .field.has-addons .control:not(:first-child):not(:last-child) .select select { border-radius: 0; } .field.has-addons .control:first-child:not(:only-child) .button, .field.has-addons .control:first-child:not(:only-child) .input, .field.has-addons .control:first-child:not(:only-child) .select select { border-bottom-right-radius: 0; border-top-right-radius: 0; } .field.has-addons .control:last-child:not(:only-child) .button, .field.has-addons .control:last-child:not(:only-child) .input, .field.has-addons .control:last-child:not(:only-child) .select select { border-bottom-left-radius: 0; border-top-left-radius: 0; } .field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered, .field.has-addons .control .input:not([disabled]):hover, .field.has-addons .control .input:not([disabled]).is-hovered, .field.has-addons .control .select select:not([disabled]):hover, .field.has-addons .control .select select:not([disabled]).is-hovered { z-index: 2; } .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active, .field.has-addons .control .input:not([disabled]):focus, .field.has-addons .control .input:not([disabled]).is-focused, .field.has-addons .control .input:not([disabled]):active, .field.has-addons .control .input:not([disabled]).is-active, .field.has-addons .control .select select:not([disabled]):focus, .field.has-addons .control .select select:not([disabled]).is-focused, .field.has-addons .control .select select:not([disabled]):active, .field.has-addons .control .select select:not([disabled]).is-active { z-index: 3; } .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover, .field.has-addons .control .input:not([disabled]):focus:hover, .field.has-addons .control .input:not([disabled]).is-focused:hover, .field.has-addons .control .input:not([disabled]):active:hover, .field.has-addons .control .input:not([disabled]).is-active:hover, .field.has-addons .control .select select:not([disabled]):focus:hover, .field.has-addons .control .select select:not([disabled]).is-focused:hover, .field.has-addons .control .select select:not([disabled]):active:hover, .field.has-addons .control .select select:not([disabled]).is-active:hover { z-index: 4; } .field.has-addons .control.is-expanded { flex-grow: 1; flex-shrink: 1; } .field.has-addons.has-addons-centered { justify-content: center; } .field.has-addons.has-addons-right { justify-content: flex-end; } .field.has-addons.has-addons-fullwidth .control { flex-grow: 1; flex-shrink: 0; } .field.is-grouped { display: flex; justify-content: flex-start; } .field.is-grouped > .control { flex-shrink: 0; } .field.is-grouped > .control:not(:last-child) { margin-bottom: 0; margin-right: 0.75rem; } .field.is-grouped > .control.is-expanded { flex-grow: 1; flex-shrink: 1; } .field.is-grouped.is-grouped-centered { justify-content: center; } .field.is-grouped.is-grouped-right { justify-content: flex-end; } .field.is-grouped.is-grouped-multiline { flex-wrap: wrap; } .field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) { margin-bottom: 0.75rem; } .field.is-grouped.is-grouped-multiline:last-child { margin-bottom: -0.75rem; } .field.is-grouped.is-grouped-multiline:not(:last-child) { margin-bottom: 0; } @media screen and (min-width: 769px), print { .field.is-horizontal { display: flex; } } .field-label .label { font-size: inherit; } @media screen and (max-width: 768px) { .field-label { margin-bottom: 0.5rem; } } @media screen and (min-width: 769px), print { .field-label { flex-basis: 0; flex-grow: 1; flex-shrink: 0; margin-right: 1.5rem; text-align: right; } .field-label.is-small { font-size: 0.75rem; padding-top: 0.375em; } .field-label.is-normal { padding-top: 0.375em; } .field-label.is-medium { font-size: 1.25rem; padding-top: 0.375em; } .field-label.is-large { font-size: 1.5rem; padding-top: 0.375em; } } .field-body .field .field { margin-bottom: 0; } @media screen and (min-width: 769px), print { .field-body { display: flex; flex-basis: 0; flex-grow: 5; flex-shrink: 1; } .field-body .field { margin-bottom: 0; } .field-body > .field { flex-shrink: 1; } .field-body > .field:not(.is-narrow) { flex-grow: 1; } .field-body > .field:not(:last-child) { margin-right: 0.75rem; } } .control { box-sizing: border-box; clear: both; font-size: 1rem; position: relative; text-align: left; } .control.has-icons-left .input:focus ~ .icon, .control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon, .control.has-icons-right .select:focus ~ .icon { color: #7a7a7a; } .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right .select.is-small ~ .icon { font-size: 0.75rem; } .control.has-icons-left .input.is-medium ~ .icon, .control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon, .control.has-icons-right .select.is-medium ~ .icon { font-size: 1.25rem; } .control.has-icons-left .input.is-large ~ .icon, .control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon, .control.has-icons-right .select.is-large ~ .icon { font-size: 1.5rem; } .control.has-icons-left .icon, .control.has-icons-right .icon { color: #dbdbdb; height: 2.25em; pointer-events: none; position: absolute; top: 0; width: 2.25em; z-index: 4; } .control.has-icons-left .input, .control.has-icons-left .select select { padding-left: 2.25em; } .control.has-icons-left .icon.is-left { left: 0; } .control.has-icons-right .input, .control.has-icons-right .select select { padding-right: 2.25em; } .control.has-icons-right .icon.is-right { right: 0; } .control.is-loading::after { position: absolute !important; right: 0.625em; top: 0.625em; z-index: 4; } .control.is-loading.is-small:after { font-size: 0.75rem; } .control.is-loading.is-medium:after { font-size: 1.25rem; } .control.is-loading.is-large:after { font-size: 1.5rem; } .breadcrumb { font-size: 1rem; white-space: nowrap; } .breadcrumb a { align-items: center; color: #3273dc; display: flex; justify-content: center; padding: 0 0.75em; } .breadcrumb a:hover { color: #363636; } .breadcrumb li { align-items: center; display: flex; } .breadcrumb li:first-child a { padding-left: 0; } .breadcrumb li.is-active a { color: #363636; cursor: default; pointer-events: none; } .breadcrumb li + li::before { color: #b5b5b5; content: "\0002f"; } .breadcrumb ul, .breadcrumb ol { align-items: flex-start; display: flex; flex-wrap: wrap; justify-content: flex-start; } .breadcrumb .icon:first-child { margin-right: 0.5em; } .breadcrumb .icon:last-child { margin-left: 0.5em; } .breadcrumb.is-centered ol, .breadcrumb.is-centered ul { justify-content: center; } .breadcrumb.is-right ol, .breadcrumb.is-right ul { justify-content: flex-end; } .breadcrumb.is-small { font-size: 0.75rem; } .breadcrumb.is-medium { font-size: 1.25rem; } .breadcrumb.is-large { font-size: 1.5rem; } .breadcrumb.has-arrow-separator li + li::before { content: "\02192"; } .breadcrumb.has-bullet-separator li + li::before { content: "\02022"; } .breadcrumb.has-dot-separator li + li::before { content: "\000b7"; } .breadcrumb.has-succeeds-separator li + li::before { content: "\0227B"; } .card { background-color: white; box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); color: #4a4a4a; max-width: 100%; position: relative; } .card-header { background-color: transparent; align-items: stretch; box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1); display: flex; } .card-header-title { align-items: center; color: #363636; display: flex; flex-grow: 1; font-weight: 700; padding: 0.75rem; } .card-header-title.is-centered { justify-content: center; } .card-header-icon { align-items: center; cursor: pointer; display: flex; justify-content: center; padding: 0.75rem; } .card-image { display: block; position: relative; } .card-content { background-color: transparent; padding: 1.5rem; } .card-footer { background-color: transparent; border-top: 1px solid #dbdbdb; align-items: stretch; display: flex; } .card-footer-item { align-items: center; display: flex; flex-basis: 0; flex-grow: 1; flex-shrink: 0; justify-content: center; padding: 0.75rem; } .card-footer-item:not(:last-child) { border-right: 1px solid #dbdbdb; } .card .media:not(:last-child) { margin-bottom: 1.5rem; } .dropdown { display: inline-flex; position: relative; vertical-align: top; } .dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu { display: block; } .dropdown.is-right .dropdown-menu { left: auto; right: 0; } .dropdown.is-up .dropdown-menu { bottom: 100%; padding-bottom: 4px; padding-top: initial; top: auto; } .dropdown-menu { display: none; left: 0; min-width: 12rem; padding-top: 4px; position: absolute; top: 100%; z-index: 20; } .dropdown-content { background-color: white; border-radius: 4px; box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); padding-bottom: 0.5rem; padding-top: 0.5rem; } .dropdown-item { color: #4a4a4a; display: block; font-size: 0.875rem; line-height: 1.5; padding: 0.375rem 1rem; position: relative; } a.dropdown-item, button.dropdown-item { padding-right: 3rem; text-align: left; white-space: nowrap; width: 100%; } a.dropdown-item:hover, button.dropdown-item:hover { background-color: whitesmoke; color: #0a0a0a; } a.dropdown-item.is-active, button.dropdown-item.is-active { background-color: #3273dc; color: #fff; } .dropdown-divider { background-color: #dbdbdb; border: none; display: block; height: 1px; margin: 0.5rem 0; } .level { align-items: center; justify-content: space-between; } .level code { border-radius: 4px; } .level img { display: inline-block; vertical-align: top; } .level.is-mobile { display: flex; } .level.is-mobile .level-left, .level.is-mobile .level-right { display: flex; } .level.is-mobile .level-left + .level-right { margin-top: 0; } .level.is-mobile .level-item:not(:last-child) { margin-bottom: 0; margin-right: 0.75rem; } .level.is-mobile .level-item:not(.is-narrow) { flex-grow: 1; } @media screen and (min-width: 769px), print { .level { display: flex; } .level > .level-item:not(.is-narrow) { flex-grow: 1; } } .level-item { align-items: center; display: flex; flex-basis: auto; flex-grow: 0; flex-shrink: 0; justify-content: center; } .level-item .title, .level-item .subtitle { margin-bottom: 0; } @media screen and (max-width: 768px) { .level-item:not(:last-child) { margin-bottom: 0.75rem; } } .level-left, .level-right { flex-basis: auto; flex-grow: 0; flex-shrink: 0; } .level-left .level-item.is-flexible, .level-right .level-item.is-flexible { flex-grow: 1; } @media screen and (min-width: 769px), print { .level-left .level-item:not(:last-child), .level-right .level-item:not(:last-child) { margin-right: 0.75rem; } } .level-left { align-items: center; justify-content: flex-start; } @media screen and (max-width: 768px) { .level-left + .level-right { margin-top: 1.5rem; } } @media screen and (min-width: 769px), print { .level-left { display: flex; } } .level-right { align-items: center; justify-content: flex-end; } @media screen and (min-width: 769px), print { .level-right { display: flex; } } .list { background-color: white; border-radius: 4px; box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); } .list-item { display: block; padding: 0.5em 1em; } .list-item:not(a) { color: #4a4a4a; } .list-item:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px; } .list-item:last-child { border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; } .list-item:not(:last-child) { border-bottom: 1px solid #dbdbdb; } .list-item.is-active { background-color: #3273dc; color: #fff; } a.list-item { background-color: whitesmoke; cursor: pointer; } .media { align-items: flex-start; display: flex; text-align: left; } .media .content:not(:last-child) { margin-bottom: 0.75rem; } .media .media { border-top: 1px solid rgba(219, 219, 219, 0.5); display: flex; padding-top: 0.75rem; } .media .media .content:not(:last-child), .media .media .control:not(:last-child) { margin-bottom: 0.5rem; } .media .media .media { padding-top: 0.5rem; } .media .media .media + .media { margin-top: 0.5rem; } .media + .media { border-top: 1px solid rgba(219, 219, 219, 0.5); margin-top: 1rem; padding-top: 1rem; } .media.is-large + .media { margin-top: 1.5rem; padding-top: 1.5rem; } .media-left, .media-right { flex-basis: auto; flex-grow: 0; flex-shrink: 0; } .media-left { margin-right: 1rem; } .media-right { margin-left: 1rem; } .media-content { flex-basis: auto; flex-grow: 1; flex-shrink: 1; text-align: left; } @media screen and (max-width: 768px) { .media-content { overflow-x: auto; } } .menu { font-size: 1rem; } .menu.is-small { font-size: 0.75rem; } .menu.is-medium { font-size: 1.25rem; } .menu.is-large { font-size: 1.5rem; } .menu-list { line-height: 1.25; } .menu-list a { border-radius: 2px; color: #4a4a4a; display: block; padding: 0.5em 0.75em; } .menu-list a:hover { background-color: whitesmoke; color: #363636; } .menu-list a.is-active { background-color: #3273dc; color: #fff; } .menu-list li ul { border-left: 1px solid #dbdbdb; margin: 0.75em; padding-left: 0.75em; } .menu-label { color: #7a7a7a; font-size: 0.75em; letter-spacing: 0.1em; text-transform: uppercase; } .menu-label:not(:first-child) { margin-top: 1em; } .menu-label:not(:last-child) { margin-bottom: 1em; } .message { background-color: whitesmoke; border-radius: 4px; font-size: 1rem; } .message strong { color: currentColor; } .message a:not(.button):not(.tag):not(.dropdown-item) { color: currentColor; text-decoration: underline; } .message.is-small { font-size: 0.75rem; } .message.is-medium { font-size: 1.25rem; } .message.is-large { font-size: 1.5rem; } .message.is-white { background-color: white; } .message.is-white .message-header { background-color: white; color: #0a0a0a; } .message.is-white .message-body { border-color: white; color: #4d4d4d; } .message.is-black { background-color: #fafafa; } .message.is-black .message-header { background-color: #0a0a0a; color: white; } .message.is-black .message-body { border-color: #0a0a0a; color: #090909; } .message.is-light { background-color: #fafafa; } .message.is-light .message-header { background-color: whitesmoke; color: #363636; } .message.is-light .message-body { border-color: whitesmoke; color: #505050; } .message.is-dark { background-color: #fafafa; } .message.is-dark .message-header { background-color: #363636; color: whitesmoke; } .message.is-dark .message-body { border-color: #363636; color: #2a2a2a; } .message.is-primary { background-color: #f5fffd; } .message.is-primary .message-header { background-color: #00d1b2; color: #fff; } .message.is-primary .message-body { border-color: #00d1b2; color: #021310; } .message.is-link { background-color: #f6f9fe; } .message.is-link .message-header { background-color: #3273dc; color: #fff; } .message.is-link .message-body { border-color: #3273dc; color: #22509a; } .message.is-info { background-color: #f6fbfe; } .message.is-info .message-header { background-color: #209cee; color: #fff; } .message.is-info .message-body { border-color: #209cee; color: #12537e; } .message.is-success { background-color: #f6fef9; } .message.is-success .message-header { background-color: #23d160; color: #fff; } .message.is-success .message-body { border-color: #23d160; color: #0e301a; } .message.is-warning { background-color: #fffdf5; } .message.is-warning .message-header { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .message.is-warning .message-body { border-color: #ffdd57; color: #3b3108; } .message.is-danger { background-color: #fff5f7; } .message.is-danger .message-header { background-color: #ff3860; color: #fff; } .message.is-danger .message-body { border-color: #ff3860; color: #cd0930; } .message-header { align-items: center; background-color: #4a4a4a; border-radius: 4px 4px 0 0; color: #fff; display: flex; font-weight: 700; justify-content: space-between; line-height: 1.25; padding: 0.75em 1em; position: relative; } .message-header .delete { flex-grow: 0; flex-shrink: 0; margin-left: 0.75em; } .message-header + .message-body { border-width: 0; border-top-left-radius: 0; border-top-right-radius: 0; } .message-body { border-color: #dbdbdb; border-radius: 4px; border-style: solid; border-width: 0 0 0 4px; color: #4a4a4a; padding: 1.25em 1.5em; } .message-body code, .message-body pre { background-color: white; } .message-body pre code { background-color: transparent; } .modal { align-items: center; display: none; flex-direction: column; justify-content: center; overflow: hidden; position: fixed; z-index: 40; } .modal.is-active { display: flex; } .modal-background { background-color: rgba(10, 10, 10, 0.86); } .modal-content, .modal-card { margin: 0 20px; max-height: calc(100vh - 160px); overflow: auto; position: relative; width: 100%; } @media screen and (min-width: 769px), print { .modal-content, .modal-card { margin: 0 auto; max-height: calc(100vh - 40px); width: 640px; } } .modal-close { background: none; height: 40px; position: fixed; right: 20px; top: 20px; width: 40px; } .modal-card { display: flex; flex-direction: column; max-height: calc(100vh - 40px); overflow: hidden; -ms-overflow-y: visible; } .modal-card-head, .modal-card-foot { align-items: center; background-color: whitesmoke; display: flex; flex-shrink: 0; justify-content: flex-start; padding: 20px; position: relative; } .modal-card-head { border-bottom: 1px solid #dbdbdb; border-top-left-radius: 6px; border-top-right-radius: 6px; } .modal-card-title { color: #363636; flex-grow: 1; flex-shrink: 0; font-size: 1.5rem; line-height: 1; } .modal-card-foot { border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; border-top: 1px solid #dbdbdb; } .modal-card-foot .button:not(:last-child) { margin-right: 0.5em; } .modal-card-body { -webkit-overflow-scrolling: touch; background-color: white; flex-grow: 1; flex-shrink: 1; overflow: auto; padding: 20px; } .navbar { background-color: white; min-height: 3.25rem; position: relative; z-index: 30; } .navbar.is-white { background-color: white; color: #0a0a0a; } .navbar.is-white .navbar-brand > .navbar-item, .navbar.is-white .navbar-brand .navbar-link { color: #0a0a0a; } .navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active, .navbar.is-white .navbar-brand .navbar-link:focus, .navbar.is-white .navbar-brand .navbar-link:hover, .navbar.is-white .navbar-brand .navbar-link.is-active { background-color: #f2f2f2; color: #0a0a0a; } .navbar.is-white .navbar-brand .navbar-link::after { border-color: #0a0a0a; } .navbar.is-white .navbar-burger { color: #0a0a0a; } @media screen and (min-width: 1024px) { .navbar.is-white .navbar-start > .navbar-item, .navbar.is-white .navbar-start .navbar-link, .navbar.is-white .navbar-end > .navbar-item, .navbar.is-white .navbar-end .navbar-link { color: #0a0a0a; } .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active, .navbar.is-white .navbar-start .navbar-link:focus, .navbar.is-white .navbar-start .navbar-link:hover, .navbar.is-white .navbar-start .navbar-link.is-active, .navbar.is-white .navbar-end > a.navbar-item:focus, .navbar.is-white .navbar-end > a.navbar-item:hover, .navbar.is-white .navbar-end > a.navbar-item.is-active, .navbar.is-white .navbar-end .navbar-link:focus, .navbar.is-white .navbar-end .navbar-link:hover, .navbar.is-white .navbar-end .navbar-link.is-active { background-color: #f2f2f2; color: #0a0a0a; } .navbar.is-white .navbar-start .navbar-link::after, .navbar.is-white .navbar-end .navbar-link::after { border-color: #0a0a0a; } .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link { background-color: #f2f2f2; color: #0a0a0a; } .navbar.is-white .navbar-dropdown a.navbar-item.is-active { background-color: white; color: #0a0a0a; } } .navbar.is-black { background-color: #0a0a0a; color: white; } .navbar.is-black .navbar-brand > .navbar-item, .navbar.is-black .navbar-brand .navbar-link { color: white; } .navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active, .navbar.is-black .navbar-brand .navbar-link:focus, .navbar.is-black .navbar-brand .navbar-link:hover, .navbar.is-black .navbar-brand .navbar-link.is-active { background-color: black; color: white; } .navbar.is-black .navbar-brand .navbar-link::after { border-color: white; } .navbar.is-black .navbar-burger { color: white; } @media screen and (min-width: 1024px) { .navbar.is-black .navbar-start > .navbar-item, .navbar.is-black .navbar-start .navbar-link, .navbar.is-black .navbar-end > .navbar-item, .navbar.is-black .navbar-end .navbar-link { color: white; } .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active, .navbar.is-black .navbar-start .navbar-link:focus, .navbar.is-black .navbar-start .navbar-link:hover, .navbar.is-black .navbar-start .navbar-link.is-active, .navbar.is-black .navbar-end > a.navbar-item:focus, .navbar.is-black .navbar-end > a.navbar-item:hover, .navbar.is-black .navbar-end > a.navbar-item.is-active, .navbar.is-black .navbar-end .navbar-link:focus, .navbar.is-black .navbar-end .navbar-link:hover, .navbar.is-black .navbar-end .navbar-link.is-active { background-color: black; color: white; } .navbar.is-black .navbar-start .navbar-link::after, .navbar.is-black .navbar-end .navbar-link::after { border-color: white; } .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link { background-color: black; color: white; } .navbar.is-black .navbar-dropdown a.navbar-item.is-active { background-color: #0a0a0a; color: white; } } .navbar.is-light { background-color: whitesmoke; color: #363636; } .navbar.is-light .navbar-brand > .navbar-item, .navbar.is-light .navbar-brand .navbar-link { color: #363636; } .navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active, .navbar.is-light .navbar-brand .navbar-link:focus, .navbar.is-light .navbar-brand .navbar-link:hover, .navbar.is-light .navbar-brand .navbar-link.is-active { background-color: #e8e8e8; color: #363636; } .navbar.is-light .navbar-brand .navbar-link::after { border-color: #363636; } .navbar.is-light .navbar-burger { color: #363636; } @media screen and (min-width: 1024px) { .navbar.is-light .navbar-start > .navbar-item, .navbar.is-light .navbar-start .navbar-link, .navbar.is-light .navbar-end > .navbar-item, .navbar.is-light .navbar-end .navbar-link { color: #363636; } .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active, .navbar.is-light .navbar-start .navbar-link:focus, .navbar.is-light .navbar-start .navbar-link:hover, .navbar.is-light .navbar-start .navbar-link.is-active, .navbar.is-light .navbar-end > a.navbar-item:focus, .navbar.is-light .navbar-end > a.navbar-item:hover, .navbar.is-light .navbar-end > a.navbar-item.is-active, .navbar.is-light .navbar-end .navbar-link:focus, .navbar.is-light .navbar-end .navbar-link:hover, .navbar.is-light .navbar-end .navbar-link.is-active { background-color: #e8e8e8; color: #363636; } .navbar.is-light .navbar-start .navbar-link::after, .navbar.is-light .navbar-end .navbar-link::after { border-color: #363636; } .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link { background-color: #e8e8e8; color: #363636; } .navbar.is-light .navbar-dropdown a.navbar-item.is-active { background-color: whitesmoke; color: #363636; } } .navbar.is-dark { background-color: #363636; color: whitesmoke; } .navbar.is-dark .navbar-brand > .navbar-item, .navbar.is-dark .navbar-brand .navbar-link { color: whitesmoke; } .navbar.is-dark .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active, .navbar.is-dark .navbar-brand .navbar-link:focus, .navbar.is-dark .navbar-brand .navbar-link:hover, .navbar.is-dark .navbar-brand .navbar-link.is-active { background-color: #292929; color: whitesmoke; } .navbar.is-dark .navbar-brand .navbar-link::after { border-color: whitesmoke; } .navbar.is-dark .navbar-burger { color: whitesmoke; } @media screen and (min-width: 1024px) { .navbar.is-dark .navbar-start > .navbar-item, .navbar.is-dark .navbar-start .navbar-link, .navbar.is-dark .navbar-end > .navbar-item, .navbar.is-dark .navbar-end .navbar-link { color: whitesmoke; } .navbar.is-dark .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active, .navbar.is-dark .navbar-start .navbar-link:focus, .navbar.is-dark .navbar-start .navbar-link:hover, .navbar.is-dark .navbar-start .navbar-link.is-active, .navbar.is-dark .navbar-end > a.navbar-item:focus, .navbar.is-dark .navbar-end > a.navbar-item:hover, .navbar.is-dark .navbar-end > a.navbar-item.is-active, .navbar.is-dark .navbar-end .navbar-link:focus, .navbar.is-dark .navbar-end .navbar-link:hover, .navbar.is-dark .navbar-end .navbar-link.is-active { background-color: #292929; color: whitesmoke; } .navbar.is-dark .navbar-start .navbar-link::after, .navbar.is-dark .navbar-end .navbar-link::after { border-color: whitesmoke; } .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link { background-color: #292929; color: whitesmoke; } .navbar.is-dark .navbar-dropdown a.navbar-item.is-active { background-color: #363636; color: whitesmoke; } } .navbar.is-primary { background-color: #00d1b2; color: #fff; } .navbar.is-primary .navbar-brand > .navbar-item, .navbar.is-primary .navbar-brand .navbar-link { color: #fff; } .navbar.is-primary .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active, .navbar.is-primary .navbar-brand .navbar-link:focus, .navbar.is-primary .navbar-brand .navbar-link:hover, .navbar.is-primary .navbar-brand .navbar-link.is-active { background-color: #00b89c; color: #fff; } .navbar.is-primary .navbar-brand .navbar-link::after { border-color: #fff; } .navbar.is-primary .navbar-burger { color: #fff; } @media screen and (min-width: 1024px) { .navbar.is-primary .navbar-start > .navbar-item, .navbar.is-primary .navbar-start .navbar-link, .navbar.is-primary .navbar-end > .navbar-item, .navbar.is-primary .navbar-end .navbar-link { color: #fff; } .navbar.is-primary .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active, .navbar.is-primary .navbar-start .navbar-link:focus, .navbar.is-primary .navbar-start .navbar-link:hover, .navbar.is-primary .navbar-start .navbar-link.is-active, .navbar.is-primary .navbar-end > a.navbar-item:focus, .navbar.is-primary .navbar-end > a.navbar-item:hover, .navbar.is-primary .navbar-end > a.navbar-item.is-active, .navbar.is-primary .navbar-end .navbar-link:focus, .navbar.is-primary .navbar-end .navbar-link:hover, .navbar.is-primary .navbar-end .navbar-link.is-active { background-color: #00b89c; color: #fff; } .navbar.is-primary .navbar-start .navbar-link::after, .navbar.is-primary .navbar-end .navbar-link::after { border-color: #fff; } .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link { background-color: #00b89c; color: #fff; } .navbar.is-primary .navbar-dropdown a.navbar-item.is-active { background-color: #00d1b2; color: #fff; } } .navbar.is-link { background-color: #3273dc; color: #fff; } .navbar.is-link .navbar-brand > .navbar-item, .navbar.is-link .navbar-brand .navbar-link { color: #fff; } .navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active, .navbar.is-link .navbar-brand .navbar-link:focus, .navbar.is-link .navbar-brand .navbar-link:hover, .navbar.is-link .navbar-brand .navbar-link.is-active { background-color: #2366d1; color: #fff; } .navbar.is-link .navbar-brand .navbar-link::after { border-color: #fff; } .navbar.is-link .navbar-burger { color: #fff; } @media screen and (min-width: 1024px) { .navbar.is-link .navbar-start > .navbar-item, .navbar.is-link .navbar-start .navbar-link, .navbar.is-link .navbar-end > .navbar-item, .navbar.is-link .navbar-end .navbar-link { color: #fff; } .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active, .navbar.is-link .navbar-start .navbar-link:focus, .navbar.is-link .navbar-start .navbar-link:hover, .navbar.is-link .navbar-start .navbar-link.is-active, .navbar.is-link .navbar-end > a.navbar-item:focus, .navbar.is-link .navbar-end > a.navbar-item:hover, .navbar.is-link .navbar-end > a.navbar-item.is-active, .navbar.is-link .navbar-end .navbar-link:focus, .navbar.is-link .navbar-end .navbar-link:hover, .navbar.is-link .navbar-end .navbar-link.is-active { background-color: #2366d1; color: #fff; } .navbar.is-link .navbar-start .navbar-link::after, .navbar.is-link .navbar-end .navbar-link::after { border-color: #fff; } .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link { background-color: #2366d1; color: #fff; } .navbar.is-link .navbar-dropdown a.navbar-item.is-active { background-color: #3273dc; color: #fff; } } .navbar.is-info { background-color: #209cee; color: #fff; } .navbar.is-info .navbar-brand > .navbar-item, .navbar.is-info .navbar-brand .navbar-link { color: #fff; } .navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active, .navbar.is-info .navbar-brand .navbar-link:focus, .navbar.is-info .navbar-brand .navbar-link:hover, .navbar.is-info .navbar-brand .navbar-link.is-active { background-color: #118fe4; color: #fff; } .navbar.is-info .navbar-brand .navbar-link::after { border-color: #fff; } .navbar.is-info .navbar-burger { color: #fff; } @media screen and (min-width: 1024px) { .navbar.is-info .navbar-start > .navbar-item, .navbar.is-info .navbar-start .navbar-link, .navbar.is-info .navbar-end > .navbar-item, .navbar.is-info .navbar-end .navbar-link { color: #fff; } .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, .navbar.is-info .navbar-start .navbar-link:focus, .navbar.is-info .navbar-start .navbar-link:hover, .navbar.is-info .navbar-start .navbar-link.is-active, .navbar.is-info .navbar-end > a.navbar-item:focus, .navbar.is-info .navbar-end > a.navbar-item:hover, .navbar.is-info .navbar-end > a.navbar-item.is-active, .navbar.is-info .navbar-end .navbar-link:focus, .navbar.is-info .navbar-end .navbar-link:hover, .navbar.is-info .navbar-end .navbar-link.is-active { background-color: #118fe4; color: #fff; } .navbar.is-info .navbar-start .navbar-link::after, .navbar.is-info .navbar-end .navbar-link::after { border-color: #fff; } .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { background-color: #118fe4; color: #fff; } .navbar.is-info .navbar-dropdown a.navbar-item.is-active { background-color: #209cee; color: #fff; } } .navbar.is-success { background-color: #23d160; color: #fff; } .navbar.is-success .navbar-brand > .navbar-item, .navbar.is-success .navbar-brand .navbar-link { color: #fff; } .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, .navbar.is-success .navbar-brand .navbar-link:focus, .navbar.is-success .navbar-brand .navbar-link:hover, .navbar.is-success .navbar-brand .navbar-link.is-active { background-color: #20bc56; color: #fff; } .navbar.is-success .navbar-brand .navbar-link::after { border-color: #fff; } .navbar.is-success .navbar-burger { color: #fff; } @media screen and (min-width: 1024px) { .navbar.is-success .navbar-start > .navbar-item, .navbar.is-success .navbar-start .navbar-link, .navbar.is-success .navbar-end > .navbar-item, .navbar.is-success .navbar-end .navbar-link { color: #fff; } .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, .navbar.is-success .navbar-start .navbar-link:focus, .navbar.is-success .navbar-start .navbar-link:hover, .navbar.is-success .navbar-start .navbar-link.is-active, .navbar.is-success .navbar-end > a.navbar-item:focus, .navbar.is-success .navbar-end > a.navbar-item:hover, .navbar.is-success .navbar-end > a.navbar-item.is-active, .navbar.is-success .navbar-end .navbar-link:focus, .navbar.is-success .navbar-end .navbar-link:hover, .navbar.is-success .navbar-end .navbar-link.is-active { background-color: #20bc56; color: #fff; } .navbar.is-success .navbar-start .navbar-link::after, .navbar.is-success .navbar-end .navbar-link::after { border-color: #fff; } .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { background-color: #20bc56; color: #fff; } .navbar.is-success .navbar-dropdown a.navbar-item.is-active { background-color: #23d160; color: #fff; } } .navbar.is-warning { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-brand > .navbar-item, .navbar.is-warning .navbar-brand .navbar-link { color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, .navbar.is-warning .navbar-brand .navbar-link:focus, .navbar.is-warning .navbar-brand .navbar-link:hover, .navbar.is-warning .navbar-brand .navbar-link.is-active { background-color: #ffd83d; color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-brand .navbar-link::after { border-color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-burger { color: rgba(0, 0, 0, 0.7); } @media screen and (min-width: 1024px) { .navbar.is-warning .navbar-start > .navbar-item, .navbar.is-warning .navbar-start .navbar-link, .navbar.is-warning .navbar-end > .navbar-item, .navbar.is-warning .navbar-end .navbar-link { color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, .navbar.is-warning .navbar-start .navbar-link:focus, .navbar.is-warning .navbar-start .navbar-link:hover, .navbar.is-warning .navbar-start .navbar-link.is-active, .navbar.is-warning .navbar-end > a.navbar-item:focus, .navbar.is-warning .navbar-end > a.navbar-item:hover, .navbar.is-warning .navbar-end > a.navbar-item.is-active, .navbar.is-warning .navbar-end .navbar-link:focus, .navbar.is-warning .navbar-end .navbar-link:hover, .navbar.is-warning .navbar-end .navbar-link.is-active { background-color: #ffd83d; color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-start .navbar-link::after, .navbar.is-warning .navbar-end .navbar-link::after { border-color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { background-color: #ffd83d; color: rgba(0, 0, 0, 0.7); } .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } } .navbar.is-danger { background-color: #ff3860; color: #fff; } .navbar.is-danger .navbar-brand > .navbar-item, .navbar.is-danger .navbar-brand .navbar-link { color: #fff; } .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, .navbar.is-danger .navbar-brand .navbar-link:focus, .navbar.is-danger .navbar-brand .navbar-link:hover, .navbar.is-danger .navbar-brand .navbar-link.is-active { background-color: #ff1f4b; color: #fff; } .navbar.is-danger .navbar-brand .navbar-link::after { border-color: #fff; } .navbar.is-danger .navbar-burger { color: #fff; } @media screen and (min-width: 1024px) { .navbar.is-danger .navbar-start > .navbar-item, .navbar.is-danger .navbar-start .navbar-link, .navbar.is-danger .navbar-end > .navbar-item, .navbar.is-danger .navbar-end .navbar-link { color: #fff; } .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, .navbar.is-danger .navbar-start .navbar-link:focus, .navbar.is-danger .navbar-start .navbar-link:hover, .navbar.is-danger .navbar-start .navbar-link.is-active, .navbar.is-danger .navbar-end > a.navbar-item:focus, .navbar.is-danger .navbar-end > a.navbar-item:hover, .navbar.is-danger .navbar-end > a.navbar-item.is-active, .navbar.is-danger .navbar-end .navbar-link:focus, .navbar.is-danger .navbar-end .navbar-link:hover, .navbar.is-danger .navbar-end .navbar-link.is-active { background-color: #ff1f4b; color: #fff; } .navbar.is-danger .navbar-start .navbar-link::after, .navbar.is-danger .navbar-end .navbar-link::after { border-color: #fff; } .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { background-color: #ff1f4b; color: #fff; } .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { background-color: #ff3860; color: #fff; } } .navbar > .container { align-items: stretch; display: flex; min-height: 3.25rem; width: 100%; } .navbar.has-shadow { box-shadow: 0 2px 0 0 whitesmoke; } .navbar.is-fixed-bottom, .navbar.is-fixed-top { left: 0; position: fixed; right: 0; z-index: 30; } .navbar.is-fixed-bottom { bottom: 0; } .navbar.is-fixed-bottom.has-shadow { box-shadow: 0 -2px 0 0 whitesmoke; } .navbar.is-fixed-top { top: 0; } html.has-navbar-fixed-top, body.has-navbar-fixed-top { padding-top: 3.25rem; } html.has-navbar-fixed-bottom, body.has-navbar-fixed-bottom { padding-bottom: 3.25rem; } .navbar-brand, .navbar-tabs { align-items: stretch; display: flex; flex-shrink: 0; min-height: 3.25rem; } .navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover { background-color: transparent; } .navbar-tabs { -webkit-overflow-scrolling: touch; max-width: 100vw; overflow-x: auto; overflow-y: hidden; } .navbar-burger { color: #4a4a4a; cursor: pointer; display: block; height: 3.25rem; position: relative; width: 3.25rem; margin-left: auto; } .navbar-burger span { background-color: currentColor; display: block; height: 1px; left: calc(50% - 8px); position: absolute; -webkit-transform-origin: center; transform-origin: center; transition-duration: 86ms; transition-property: background-color, opacity, -webkit-transform; transition-property: background-color, opacity, transform; transition-property: background-color, opacity, transform, -webkit-transform; transition-timing-function: ease-out; width: 16px; } .navbar-burger span:nth-child(1) { top: calc(50% - 6px); } .navbar-burger span:nth-child(2) { top: calc(50% - 1px); } .navbar-burger span:nth-child(3) { top: calc(50% + 4px); } .navbar-burger:hover { background-color: rgba(0, 0, 0, 0.05); } .navbar-burger.is-active span:nth-child(1) { -webkit-transform: translateY(5px) rotate(45deg); transform: translateY(5px) rotate(45deg); } .navbar-burger.is-active span:nth-child(2) { opacity: 0; } .navbar-burger.is-active span:nth-child(3) { -webkit-transform: translateY(-5px) rotate(-45deg); transform: translateY(-5px) rotate(-45deg); } .navbar-menu { display: none; } .navbar-item, .navbar-link { color: #4a4a4a; display: block; line-height: 1.5; padding: 0.5rem 0.75rem; position: relative; } .navbar-item .icon:only-child, .navbar-link .icon:only-child { margin-left: -0.25rem; margin-right: -0.25rem; } a.navbar-item, .navbar-link { cursor: pointer; } a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active, .navbar-link:focus, .navbar-link:focus-within, .navbar-link:hover, .navbar-link.is-active { background-color: #fafafa; color: #3273dc; } .navbar-item { display: block; flex-grow: 0; flex-shrink: 0; } .navbar-item img { max-height: 1.75rem; } .navbar-item.has-dropdown { padding: 0; } .navbar-item.is-expanded { flex-grow: 1; flex-shrink: 1; } .navbar-item.is-tab { border-bottom: 1px solid transparent; min-height: 3.25rem; padding-bottom: calc(0.5rem - 1px); } .navbar-item.is-tab:focus, .navbar-item.is-tab:hover { background-color: transparent; border-bottom-color: #3273dc; } .navbar-item.is-tab.is-active { background-color: transparent; border-bottom-color: #3273dc; border-bottom-style: solid; border-bottom-width: 3px; color: #3273dc; padding-bottom: calc(0.5rem - 3px); } .navbar-content { flex-grow: 1; flex-shrink: 1; } .navbar-link:not(.is-arrowless) { padding-right: 2.5em; } .navbar-link:not(.is-arrowless)::after { border-color: #3273dc; margin-top: -0.375em; right: 1.125em; } .navbar-dropdown { font-size: 0.875rem; padding-bottom: 0.5rem; padding-top: 0.5rem; } .navbar-dropdown .navbar-item { padding-left: 1.5rem; padding-right: 1.5rem; } .navbar-divider { background-color: whitesmoke; border: none; display: none; height: 2px; margin: 0.5rem 0; } @media screen and (max-width: 1023px) { .navbar > .container { display: block; } .navbar-brand .navbar-item, .navbar-tabs .navbar-item { align-items: center; display: flex; } .navbar-link::after { display: none; } .navbar-menu { background-color: white; box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1); padding: 0.5rem 0; } .navbar-menu.is-active { display: block; } .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch { left: 0; position: fixed; right: 0; z-index: 30; } .navbar.is-fixed-bottom-touch { bottom: 0; } .navbar.is-fixed-bottom-touch.has-shadow { box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } .navbar.is-fixed-top-touch { top: 0; } .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu { -webkit-overflow-scrolling: touch; max-height: calc(100vh - 3.25rem); overflow: auto; } html.has-navbar-fixed-top-touch, body.has-navbar-fixed-top-touch { padding-top: 3.25rem; } html.has-navbar-fixed-bottom-touch, body.has-navbar-fixed-bottom-touch { padding-bottom: 3.25rem; } } @media screen and (min-width: 1024px) { .navbar, .navbar-menu, .navbar-start, .navbar-end { align-items: stretch; display: flex; } .navbar { min-height: 3.25rem; } .navbar.is-spaced { padding: 1rem 2rem; } .navbar.is-spaced .navbar-start, .navbar.is-spaced .navbar-end { align-items: center; } .navbar.is-spaced a.navbar-item, .navbar.is-spaced .navbar-link { border-radius: 4px; } .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active, .navbar.is-transparent .navbar-link:focus, .navbar.is-transparent .navbar-link:hover, .navbar.is-transparent .navbar-link.is-active { background-color: transparent !important; } .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link { background-color: transparent !important; } .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover { background-color: whitesmoke; color: #0a0a0a; } .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active { background-color: whitesmoke; color: #3273dc; } .navbar-burger { display: none; } .navbar-item, .navbar-link { align-items: center; display: flex; } .navbar-item { display: flex; } .navbar-item.has-dropdown { align-items: stretch; } .navbar-item.has-dropdown-up .navbar-link::after { -webkit-transform: rotate(135deg) translate(0.25em, -0.25em); transform: rotate(135deg) translate(0.25em, -0.25em); } .navbar-item.has-dropdown-up .navbar-dropdown { border-bottom: 2px solid #dbdbdb; border-radius: 6px 6px 0 0; border-top: none; bottom: 100%; box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1); top: auto; } .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown { display: block; } .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed { opacity: 1; pointer-events: auto; -webkit-transform: translateY(0); transform: translateY(0); } .navbar-menu { flex-grow: 1; flex-shrink: 0; } .navbar-start { justify-content: flex-start; margin-right: auto; } .navbar-end { justify-content: flex-end; margin-left: auto; } .navbar-dropdown { background-color: white; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; border-top: 2px solid #dbdbdb; box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1); display: none; font-size: 0.875rem; left: 0; min-width: 100%; position: absolute; top: 100%; z-index: 20; } .navbar-dropdown .navbar-item { padding: 0.375rem 1rem; white-space: nowrap; } .navbar-dropdown a.navbar-item { padding-right: 3rem; } .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover { background-color: whitesmoke; color: #0a0a0a; } .navbar-dropdown a.navbar-item.is-active { background-color: whitesmoke; color: #3273dc; } .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed { border-radius: 6px; border-top: none; box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); display: block; opacity: 0; pointer-events: none; top: calc(100% + (-4px)); -webkit-transform: translateY(-5px); transform: translateY(-5px); transition-duration: 86ms; transition-property: opacity, -webkit-transform; transition-property: opacity, transform; transition-property: opacity, transform, -webkit-transform; } .navbar-dropdown.is-right { left: auto; right: 0; } .navbar-divider { display: block; } .navbar > .container .navbar-brand, .container > .navbar .navbar-brand { margin-left: -.75rem; } .navbar > .container .navbar-menu, .container > .navbar .navbar-menu { margin-right: -.75rem; } .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop { left: 0; position: fixed; right: 0; z-index: 30; } .navbar.is-fixed-bottom-desktop { bottom: 0; } .navbar.is-fixed-bottom-desktop.has-shadow { box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); } .navbar.is-fixed-top-desktop { top: 0; } html.has-navbar-fixed-top-desktop, body.has-navbar-fixed-top-desktop { padding-top: 3.25rem; } html.has-navbar-fixed-bottom-desktop, body.has-navbar-fixed-bottom-desktop { padding-bottom: 3.25rem; } html.has-spaced-navbar-fixed-top, body.has-spaced-navbar-fixed-top { padding-top: 5.25rem; } html.has-spaced-navbar-fixed-bottom, body.has-spaced-navbar-fixed-bottom { padding-bottom: 5.25rem; } a.navbar-item.is-active, .navbar-link.is-active { color: #0a0a0a; } a.navbar-item.is-active:not(:focus):not(:hover), .navbar-link.is-active:not(:focus):not(:hover) { background-color: transparent; } .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link { background-color: #fafafa; } } .hero.is-fullheight-with-navbar { min-height: calc(100vh - 3.25rem); } .pagination { font-size: 1rem; margin: -0.25rem; } .pagination.is-small { font-size: 0.75rem; } .pagination.is-medium { font-size: 1.25rem; } .pagination.is-large { font-size: 1.5rem; } .pagination.is-rounded .pagination-previous, .pagination.is-rounded .pagination-next { padding-left: 1em; padding-right: 1em; border-radius: 290486px; } .pagination.is-rounded .pagination-link { border-radius: 290486px; } .pagination, .pagination-list { align-items: center; display: flex; justify-content: center; text-align: center; } .pagination-previous, .pagination-next, .pagination-link, .pagination-ellipsis { font-size: 1em; justify-content: center; margin: 0.25rem; padding-left: 0.5em; padding-right: 0.5em; text-align: center; } .pagination-previous, .pagination-next, .pagination-link { border-color: #dbdbdb; color: #363636; min-width: 2.25em; } .pagination-previous:hover, .pagination-next:hover, .pagination-link:hover { border-color: #b5b5b5; color: #363636; } .pagination-previous:focus, .pagination-next:focus, .pagination-link:focus { border-color: #3273dc; } .pagination-previous:active, .pagination-next:active, .pagination-link:active { box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } .pagination-previous[disabled], .pagination-next[disabled], .pagination-link[disabled] { background-color: #dbdbdb; border-color: #dbdbdb; box-shadow: none; color: #7a7a7a; opacity: 0.5; } .pagination-previous, .pagination-next { padding-left: 0.75em; padding-right: 0.75em; white-space: nowrap; } .pagination-link.is-current { background-color: #3273dc; border-color: #3273dc; color: #fff; } .pagination-ellipsis { color: #b5b5b5; pointer-events: none; } .pagination-list { flex-wrap: wrap; } @media screen and (max-width: 768px) { .pagination { flex-wrap: wrap; } .pagination-previous, .pagination-next { flex-grow: 1; flex-shrink: 1; } .pagination-list li { flex-grow: 1; flex-shrink: 1; } } @media screen and (min-width: 769px), print { .pagination-list { flex-grow: 1; flex-shrink: 1; justify-content: flex-start; order: 1; } .pagination-previous { order: 2; } .pagination-next { order: 3; } .pagination { justify-content: space-between; } .pagination.is-centered .pagination-previous { order: 1; } .pagination.is-centered .pagination-list { justify-content: center; order: 2; } .pagination.is-centered .pagination-next { order: 3; } .pagination.is-right .pagination-previous { order: 1; } .pagination.is-right .pagination-next { order: 2; } .pagination.is-right .pagination-list { justify-content: flex-end; order: 3; } } .panel { font-size: 1rem; } .panel:not(:last-child) { margin-bottom: 1.5rem; } .panel-heading, .panel-tabs, .panel-block { border-bottom: 1px solid #dbdbdb; border-left: 1px solid #dbdbdb; border-right: 1px solid #dbdbdb; } .panel-heading:first-child, .panel-tabs:first-child, .panel-block:first-child { border-top: 1px solid #dbdbdb; } .panel-heading { background-color: whitesmoke; border-radius: 4px 4px 0 0; color: #363636; font-size: 1.25em; font-weight: 300; line-height: 1.25; padding: 0.5em 0.75em; } .panel-tabs { align-items: flex-end; display: flex; font-size: 0.875em; justify-content: center; } .panel-tabs a { border-bottom: 1px solid #dbdbdb; margin-bottom: -1px; padding: 0.5em; } .panel-tabs a.is-active { border-bottom-color: #4a4a4a; color: #363636; } .panel-list a { color: #4a4a4a; } .panel-list a:hover { color: #3273dc; } .panel-block { align-items: center; color: #363636; display: flex; justify-content: flex-start; padding: 0.5em 0.75em; } .panel-block input[type="checkbox"] { margin-right: 0.75em; } .panel-block > .control { flex-grow: 1; flex-shrink: 1; width: 100%; } .panel-block.is-wrapped { flex-wrap: wrap; } .panel-block.is-active { border-left-color: #3273dc; color: #363636; } .panel-block.is-active .panel-icon { color: #3273dc; } a.panel-block, label.panel-block { cursor: pointer; } a.panel-block:hover, label.panel-block:hover { background-color: whitesmoke; } .panel-icon { display: inline-block; font-size: 14px; height: 1em; line-height: 1em; text-align: center; vertical-align: top; width: 1em; color: #7a7a7a; margin-right: 0.75em; } .panel-icon .fa { font-size: inherit; line-height: inherit; } .tabs { -webkit-overflow-scrolling: touch; align-items: stretch; display: flex; font-size: 1rem; justify-content: space-between; overflow: hidden; overflow-x: auto; white-space: nowrap; } .tabs a { align-items: center; border-bottom-color: #dbdbdb; border-bottom-style: solid; border-bottom-width: 1px; color: #4a4a4a; display: flex; justify-content: center; margin-bottom: -1px; padding: 0.5em 1em; vertical-align: top; } .tabs a:hover { border-bottom-color: #363636; color: #363636; } .tabs li { display: block; } .tabs li.is-active a { border-bottom-color: #3273dc; color: #3273dc; } .tabs ul { align-items: center; border-bottom-color: #dbdbdb; border-bottom-style: solid; border-bottom-width: 1px; display: flex; flex-grow: 1; flex-shrink: 0; justify-content: flex-start; } .tabs ul.is-left { padding-right: 0.75em; } .tabs ul.is-center { flex: none; justify-content: center; padding-left: 0.75em; padding-right: 0.75em; } .tabs ul.is-right { justify-content: flex-end; padding-left: 0.75em; } .tabs .icon:first-child { margin-right: 0.5em; } .tabs .icon:last-child { margin-left: 0.5em; } .tabs.is-centered ul { justify-content: center; } .tabs.is-right ul { justify-content: flex-end; } .tabs.is-boxed a { border: 1px solid transparent; border-radius: 4px 4px 0 0; } .tabs.is-boxed a:hover { background-color: whitesmoke; border-bottom-color: #dbdbdb; } .tabs.is-boxed li.is-active a { background-color: white; border-color: #dbdbdb; border-bottom-color: transparent !important; } .tabs.is-fullwidth li { flex-grow: 1; flex-shrink: 0; } .tabs.is-toggle a { border-color: #dbdbdb; border-style: solid; border-width: 1px; margin-bottom: 0; position: relative; } .tabs.is-toggle a:hover { background-color: whitesmoke; border-color: #b5b5b5; z-index: 2; } .tabs.is-toggle li + li { margin-left: -1px; } .tabs.is-toggle li:first-child a { border-radius: 4px 0 0 4px; } .tabs.is-toggle li:last-child a { border-radius: 0 4px 4px 0; } .tabs.is-toggle li.is-active a { background-color: #3273dc; border-color: #3273dc; color: #fff; z-index: 1; } .tabs.is-toggle ul { border-bottom: none; } .tabs.is-toggle.is-toggle-rounded li:first-child a { border-bottom-left-radius: 290486px; border-top-left-radius: 290486px; padding-left: 1.25em; } .tabs.is-toggle.is-toggle-rounded li:last-child a { border-bottom-right-radius: 290486px; border-top-right-radius: 290486px; padding-right: 1.25em; } .tabs.is-small { font-size: 0.75rem; } .tabs.is-medium { font-size: 1.25rem; } .tabs.is-large { font-size: 1.5rem; } .column { display: block; flex-basis: 0; flex-grow: 1; flex-shrink: 1; padding: 0.75rem; } .columns.is-mobile > .column.is-narrow { flex: none; } .columns.is-mobile > .column.is-full { flex: none; width: 100%; } .columns.is-mobile > .column.is-three-quarters { flex: none; width: 75%; } .columns.is-mobile > .column.is-two-thirds { flex: none; width: 66.6666%; } .columns.is-mobile > .column.is-half { flex: none; width: 50%; } .columns.is-mobile > .column.is-one-third { flex: none; width: 33.3333%; } .columns.is-mobile > .column.is-one-quarter { flex: none; width: 25%; } .columns.is-mobile > .column.is-one-fifth { flex: none; width: 20%; } .columns.is-mobile > .column.is-two-fifths { flex: none; width: 40%; } .columns.is-mobile > .column.is-three-fifths { flex: none; width: 60%; } .columns.is-mobile > .column.is-four-fifths { flex: none; width: 80%; } .columns.is-mobile > .column.is-offset-three-quarters { margin-left: 75%; } .columns.is-mobile > .column.is-offset-two-thirds { margin-left: 66.6666%; } .columns.is-mobile > .column.is-offset-half { margin-left: 50%; } .columns.is-mobile > .column.is-offset-one-third { margin-left: 33.3333%; } .columns.is-mobile > .column.is-offset-one-quarter { margin-left: 25%; } .columns.is-mobile > .column.is-offset-one-fifth { margin-left: 20%; } .columns.is-mobile > .column.is-offset-two-fifths { margin-left: 40%; } .columns.is-mobile > .column.is-offset-three-fifths { margin-left: 60%; } .columns.is-mobile > .column.is-offset-four-fifths { margin-left: 80%; } .columns.is-mobile > .column.is-0 { flex: none; width: 0%; } .columns.is-mobile > .column.is-offset-0 { margin-left: 0%; } .columns.is-mobile > .column.is-1 { flex: none; width: 8.33333%; } .columns.is-mobile > .column.is-offset-1 { margin-left: 8.33333%; } .columns.is-mobile > .column.is-2 { flex: none; width: 16.66667%; } .columns.is-mobile > .column.is-offset-2 { margin-left: 16.66667%; } .columns.is-mobile > .column.is-3 { flex: none; width: 25%; } .columns.is-mobile > .column.is-offset-3 { margin-left: 25%; } .columns.is-mobile > .column.is-4 { flex: none; width: 33.33333%; } .columns.is-mobile > .column.is-offset-4 { margin-left: 33.33333%; } .columns.is-mobile > .column.is-5 { flex: none; width: 41.66667%; } .columns.is-mobile > .column.is-offset-5 { margin-left: 41.66667%; } .columns.is-mobile > .column.is-6 { flex: none; width: 50%; } .columns.is-mobile > .column.is-offset-6 { margin-left: 50%; } .columns.is-mobile > .column.is-7 { flex: none; width: 58.33333%; } .columns.is-mobile > .column.is-offset-7 { margin-left: 58.33333%; } .columns.is-mobile > .column.is-8 { flex: none; width: 66.66667%; } .columns.is-mobile > .column.is-offset-8 { margin-left: 66.66667%; } .columns.is-mobile > .column.is-9 { flex: none; width: 75%; } .columns.is-mobile > .column.is-offset-9 { margin-left: 75%; } .columns.is-mobile > .column.is-10 { flex: none; width: 83.33333%; } .columns.is-mobile > .column.is-offset-10 { margin-left: 83.33333%; } .columns.is-mobile > .column.is-11 { flex: none; width: 91.66667%; } .columns.is-mobile > .column.is-offset-11 { margin-left: 91.66667%; } .columns.is-mobile > .column.is-12 { flex: none; width: 100%; } .columns.is-mobile > .column.is-offset-12 { margin-left: 100%; } @media screen and (max-width: 768px) { .column.is-narrow-mobile { flex: none; } .column.is-full-mobile { flex: none; width: 100%; } .column.is-three-quarters-mobile { flex: none; width: 75%; } .column.is-two-thirds-mobile { flex: none; width: 66.6666%; } .column.is-half-mobile { flex: none; width: 50%; } .column.is-one-third-mobile { flex: none; width: 33.3333%; } .column.is-one-quarter-mobile { flex: none; width: 25%; } .column.is-one-fifth-mobile { flex: none; width: 20%; } .column.is-two-fifths-mobile { flex: none; width: 40%; } .column.is-three-fifths-mobile { flex: none; width: 60%; } .column.is-four-fifths-mobile { flex: none; width: 80%; } .column.is-offset-three-quarters-mobile { margin-left: 75%; } .column.is-offset-two-thirds-mobile { margin-left: 66.6666%; } .column.is-offset-half-mobile { margin-left: 50%; } .column.is-offset-one-third-mobile { margin-left: 33.3333%; } .column.is-offset-one-quarter-mobile { margin-left: 25%; } .column.is-offset-one-fifth-mobile { margin-left: 20%; } .column.is-offset-two-fifths-mobile { margin-left: 40%; } .column.is-offset-three-fifths-mobile { margin-left: 60%; } .column.is-offset-four-fifths-mobile { margin-left: 80%; } .column.is-0-mobile { flex: none; width: 0%; } .column.is-offset-0-mobile { margin-left: 0%; } .column.is-1-mobile { flex: none; width: 8.33333%; } .column.is-offset-1-mobile { margin-left: 8.33333%; } .column.is-2-mobile { flex: none; width: 16.66667%; } .column.is-offset-2-mobile { margin-left: 16.66667%; } .column.is-3-mobile { flex: none; width: 25%; } .column.is-offset-3-mobile { margin-left: 25%; } .column.is-4-mobile { flex: none; width: 33.33333%; } .column.is-offset-4-mobile { margin-left: 33.33333%; } .column.is-5-mobile { flex: none; width: 41.66667%; } .column.is-offset-5-mobile { margin-left: 41.66667%; } .column.is-6-mobile { flex: none; width: 50%; } .column.is-offset-6-mobile { margin-left: 50%; } .column.is-7-mobile { flex: none; width: 58.33333%; } .column.is-offset-7-mobile { margin-left: 58.33333%; } .column.is-8-mobile { flex: none; width: 66.66667%; } .column.is-offset-8-mobile { margin-left: 66.66667%; } .column.is-9-mobile { flex: none; width: 75%; } .column.is-offset-9-mobile { margin-left: 75%; } .column.is-10-mobile { flex: none; width: 83.33333%; } .column.is-offset-10-mobile { margin-left: 83.33333%; } .column.is-11-mobile { flex: none; width: 91.66667%; } .column.is-offset-11-mobile { margin-left: 91.66667%; } .column.is-12-mobile { flex: none; width: 100%; } .column.is-offset-12-mobile { margin-left: 100%; } } @media screen and (min-width: 769px), print { .column.is-narrow, .column.is-narrow-tablet { flex: none; } .column.is-full, .column.is-full-tablet { flex: none; width: 100%; } .column.is-three-quarters, .column.is-three-quarters-tablet { flex: none; width: 75%; } .column.is-two-thirds, .column.is-two-thirds-tablet { flex: none; width: 66.6666%; } .column.is-half, .column.is-half-tablet { flex: none; width: 50%; } .column.is-one-third, .column.is-one-third-tablet { flex: none; width: 33.3333%; } .column.is-one-quarter, .column.is-one-quarter-tablet { flex: none; width: 25%; } .column.is-one-fifth, .column.is-one-fifth-tablet { flex: none; width: 20%; } .column.is-two-fifths, .column.is-two-fifths-tablet { flex: none; width: 40%; } .column.is-three-fifths, .column.is-three-fifths-tablet { flex: none; width: 60%; } .column.is-four-fifths, .column.is-four-fifths-tablet { flex: none; width: 80%; } .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet { margin-left: 75%; } .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet { margin-left: 66.6666%; } .column.is-offset-half, .column.is-offset-half-tablet { margin-left: 50%; } .column.is-offset-one-third, .column.is-offset-one-third-tablet { margin-left: 33.3333%; } .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet { margin-left: 25%; } .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet { margin-left: 20%; } .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet { margin-left: 40%; } .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet { margin-left: 60%; } .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet { margin-left: 80%; } .column.is-0, .column.is-0-tablet { flex: none; width: 0%; } .column.is-offset-0, .column.is-offset-0-tablet { margin-left: 0%; } .column.is-1, .column.is-1-tablet { flex: none; width: 8.33333%; } .column.is-offset-1, .column.is-offset-1-tablet { margin-left: 8.33333%; } .column.is-2, .column.is-2-tablet { flex: none; width: 16.66667%; } .column.is-offset-2, .column.is-offset-2-tablet { margin-left: 16.66667%; } .column.is-3, .column.is-3-tablet { flex: none; width: 25%; } .column.is-offset-3, .column.is-offset-3-tablet { margin-left: 25%; } .column.is-4, .column.is-4-tablet { flex: none; width: 33.33333%; } .column.is-offset-4, .column.is-offset-4-tablet { margin-left: 33.33333%; } .column.is-5, .column.is-5-tablet { flex: none; width: 41.66667%; } .column.is-offset-5, .column.is-offset-5-tablet { margin-left: 41.66667%; } .column.is-6, .column.is-6-tablet { flex: none; width: 50%; } .column.is-offset-6, .column.is-offset-6-tablet { margin-left: 50%; } .column.is-7, .column.is-7-tablet { flex: none; width: 58.33333%; } .column.is-offset-7, .column.is-offset-7-tablet { margin-left: 58.33333%; } .column.is-8, .column.is-8-tablet { flex: none; width: 66.66667%; } .column.is-offset-8, .column.is-offset-8-tablet { margin-left: 66.66667%; } .column.is-9, .column.is-9-tablet { flex: none; width: 75%; } .column.is-offset-9, .column.is-offset-9-tablet { margin-left: 75%; } .column.is-10, .column.is-10-tablet { flex: none; width: 83.33333%; } .column.is-offset-10, .column.is-offset-10-tablet { margin-left: 83.33333%; } .column.is-11, .column.is-11-tablet { flex: none; width: 91.66667%; } .column.is-offset-11, .column.is-offset-11-tablet { margin-left: 91.66667%; } .column.is-12, .column.is-12-tablet { flex: none; width: 100%; } .column.is-offset-12, .column.is-offset-12-tablet { margin-left: 100%; } } @media screen and (max-width: 1023px) { .column.is-narrow-touch { flex: none; } .column.is-full-touch { flex: none; width: 100%; } .column.is-three-quarters-touch { flex: none; width: 75%; } .column.is-two-thirds-touch { flex: none; width: 66.6666%; } .column.is-half-touch { flex: none; width: 50%; } .column.is-one-third-touch { flex: none; width: 33.3333%; } .column.is-one-quarter-touch { flex: none; width: 25%; } .column.is-one-fifth-touch { flex: none; width: 20%; } .column.is-two-fifths-touch { flex: none; width: 40%; } .column.is-three-fifths-touch { flex: none; width: 60%; } .column.is-four-fifths-touch { flex: none; width: 80%; } .column.is-offset-three-quarters-touch { margin-left: 75%; } .column.is-offset-two-thirds-touch { margin-left: 66.6666%; } .column.is-offset-half-touch { margin-left: 50%; } .column.is-offset-one-third-touch { margin-left: 33.3333%; } .column.is-offset-one-quarter-touch { margin-left: 25%; } .column.is-offset-one-fifth-touch { margin-left: 20%; } .column.is-offset-two-fifths-touch { margin-left: 40%; } .column.is-offset-three-fifths-touch { margin-left: 60%; } .column.is-offset-four-fifths-touch { margin-left: 80%; } .column.is-0-touch { flex: none; width: 0%; } .column.is-offset-0-touch { margin-left: 0%; } .column.is-1-touch { flex: none; width: 8.33333%; } .column.is-offset-1-touch { margin-left: 8.33333%; } .column.is-2-touch { flex: none; width: 16.66667%; } .column.is-offset-2-touch { margin-left: 16.66667%; } .column.is-3-touch { flex: none; width: 25%; } .column.is-offset-3-touch { margin-left: 25%; } .column.is-4-touch { flex: none; width: 33.33333%; } .column.is-offset-4-touch { margin-left: 33.33333%; } .column.is-5-touch { flex: none; width: 41.66667%; } .column.is-offset-5-touch { margin-left: 41.66667%; } .column.is-6-touch { flex: none; width: 50%; } .column.is-offset-6-touch { margin-left: 50%; } .column.is-7-touch { flex: none; width: 58.33333%; } .column.is-offset-7-touch { margin-left: 58.33333%; } .column.is-8-touch { flex: none; width: 66.66667%; } .column.is-offset-8-touch { margin-left: 66.66667%; } .column.is-9-touch { flex: none; width: 75%; } .column.is-offset-9-touch { margin-left: 75%; } .column.is-10-touch { flex: none; width: 83.33333%; } .column.is-offset-10-touch { margin-left: 83.33333%; } .column.is-11-touch { flex: none; width: 91.66667%; } .column.is-offset-11-touch { margin-left: 91.66667%; } .column.is-12-touch { flex: none; width: 100%; } .column.is-offset-12-touch { margin-left: 100%; } } @media screen and (min-width: 1024px) { .column.is-narrow-desktop { flex: none; } .column.is-full-desktop { flex: none; width: 100%; } .column.is-three-quarters-desktop { flex: none; width: 75%; } .column.is-two-thirds-desktop { flex: none; width: 66.6666%; } .column.is-half-desktop { flex: none; width: 50%; } .column.is-one-third-desktop { flex: none; width: 33.3333%; } .column.is-one-quarter-desktop { flex: none; width: 25%; } .column.is-one-fifth-desktop { flex: none; width: 20%; } .column.is-two-fifths-desktop { flex: none; width: 40%; } .column.is-three-fifths-desktop { flex: none; width: 60%; } .column.is-four-fifths-desktop { flex: none; width: 80%; } .column.is-offset-three-quarters-desktop { margin-left: 75%; } .column.is-offset-two-thirds-desktop { margin-left: 66.6666%; } .column.is-offset-half-desktop { margin-left: 50%; } .column.is-offset-one-third-desktop { margin-left: 33.3333%; } .column.is-offset-one-quarter-desktop { margin-left: 25%; } .column.is-offset-one-fifth-desktop { margin-left: 20%; } .column.is-offset-two-fifths-desktop { margin-left: 40%; } .column.is-offset-three-fifths-desktop { margin-left: 60%; } .column.is-offset-four-fifths-desktop { margin-left: 80%; } .column.is-0-desktop { flex: none; width: 0%; } .column.is-offset-0-desktop { margin-left: 0%; } .column.is-1-desktop { flex: none; width: 8.33333%; } .column.is-offset-1-desktop { margin-left: 8.33333%; } .column.is-2-desktop { flex: none; width: 16.66667%; } .column.is-offset-2-desktop { margin-left: 16.66667%; } .column.is-3-desktop { flex: none; width: 25%; } .column.is-offset-3-desktop { margin-left: 25%; } .column.is-4-desktop { flex: none; width: 33.33333%; } .column.is-offset-4-desktop { margin-left: 33.33333%; } .column.is-5-desktop { flex: none; width: 41.66667%; } .column.is-offset-5-desktop { margin-left: 41.66667%; } .column.is-6-desktop { flex: none; width: 50%; } .column.is-offset-6-desktop { margin-left: 50%; } .column.is-7-desktop { flex: none; width: 58.33333%; } .column.is-offset-7-desktop { margin-left: 58.33333%; } .column.is-8-desktop { flex: none; width: 66.66667%; } .column.is-offset-8-desktop { margin-left: 66.66667%; } .column.is-9-desktop { flex: none; width: 75%; } .column.is-offset-9-desktop { margin-left: 75%; } .column.is-10-desktop { flex: none; width: 83.33333%; } .column.is-offset-10-desktop { margin-left: 83.33333%; } .column.is-11-desktop { flex: none; width: 91.66667%; } .column.is-offset-11-desktop { margin-left: 91.66667%; } .column.is-12-desktop { flex: none; width: 100%; } .column.is-offset-12-desktop { margin-left: 100%; } } @media screen and (min-width: 1216px) { .column.is-narrow-widescreen { flex: none; } .column.is-full-widescreen { flex: none; width: 100%; } .column.is-three-quarters-widescreen { flex: none; width: 75%; } .column.is-two-thirds-widescreen { flex: none; width: 66.6666%; } .column.is-half-widescreen { flex: none; width: 50%; } .column.is-one-third-widescreen { flex: none; width: 33.3333%; } .column.is-one-quarter-widescreen { flex: none; width: 25%; } .column.is-one-fifth-widescreen { flex: none; width: 20%; } .column.is-two-fifths-widescreen { flex: none; width: 40%; } .column.is-three-fifths-widescreen { flex: none; width: 60%; } .column.is-four-fifths-widescreen { flex: none; width: 80%; } .column.is-offset-three-quarters-widescreen { margin-left: 75%; } .column.is-offset-two-thirds-widescreen { margin-left: 66.6666%; } .column.is-offset-half-widescreen { margin-left: 50%; } .column.is-offset-one-third-widescreen { margin-left: 33.3333%; } .column.is-offset-one-quarter-widescreen { margin-left: 25%; } .column.is-offset-one-fifth-widescreen { margin-left: 20%; } .column.is-offset-two-fifths-widescreen { margin-left: 40%; } .column.is-offset-three-fifths-widescreen { margin-left: 60%; } .column.is-offset-four-fifths-widescreen { margin-left: 80%; } .column.is-0-widescreen { flex: none; width: 0%; } .column.is-offset-0-widescreen { margin-left: 0%; } .column.is-1-widescreen { flex: none; width: 8.33333%; } .column.is-offset-1-widescreen { margin-left: 8.33333%; } .column.is-2-widescreen { flex: none; width: 16.66667%; } .column.is-offset-2-widescreen { margin-left: 16.66667%; } .column.is-3-widescreen { flex: none; width: 25%; } .column.is-offset-3-widescreen { margin-left: 25%; } .column.is-4-widescreen { flex: none; width: 33.33333%; } .column.is-offset-4-widescreen { margin-left: 33.33333%; } .column.is-5-widescreen { flex: none; width: 41.66667%; } .column.is-offset-5-widescreen { margin-left: 41.66667%; } .column.is-6-widescreen { flex: none; width: 50%; } .column.is-offset-6-widescreen { margin-left: 50%; } .column.is-7-widescreen { flex: none; width: 58.33333%; } .column.is-offset-7-widescreen { margin-left: 58.33333%; } .column.is-8-widescreen { flex: none; width: 66.66667%; } .column.is-offset-8-widescreen { margin-left: 66.66667%; } .column.is-9-widescreen { flex: none; width: 75%; } .column.is-offset-9-widescreen { margin-left: 75%; } .column.is-10-widescreen { flex: none; width: 83.33333%; } .column.is-offset-10-widescreen { margin-left: 83.33333%; } .column.is-11-widescreen { flex: none; width: 91.66667%; } .column.is-offset-11-widescreen { margin-left: 91.66667%; } .column.is-12-widescreen { flex: none; width: 100%; } .column.is-offset-12-widescreen { margin-left: 100%; } } @media screen and (min-width: 1408px) { .column.is-narrow-fullhd { flex: none; } .column.is-full-fullhd { flex: none; width: 100%; } .column.is-three-quarters-fullhd { flex: none; width: 75%; } .column.is-two-thirds-fullhd { flex: none; width: 66.6666%; } .column.is-half-fullhd { flex: none; width: 50%; } .column.is-one-third-fullhd { flex: none; width: 33.3333%; } .column.is-one-quarter-fullhd { flex: none; width: 25%; } .column.is-one-fifth-fullhd { flex: none; width: 20%; } .column.is-two-fifths-fullhd { flex: none; width: 40%; } .column.is-three-fifths-fullhd { flex: none; width: 60%; } .column.is-four-fifths-fullhd { flex: none; width: 80%; } .column.is-offset-three-quarters-fullhd { margin-left: 75%; } .column.is-offset-two-thirds-fullhd { margin-left: 66.6666%; } .column.is-offset-half-fullhd { margin-left: 50%; } .column.is-offset-one-third-fullhd { margin-left: 33.3333%; } .column.is-offset-one-quarter-fullhd { margin-left: 25%; } .column.is-offset-one-fifth-fullhd { margin-left: 20%; } .column.is-offset-two-fifths-fullhd { margin-left: 40%; } .column.is-offset-three-fifths-fullhd { margin-left: 60%; } .column.is-offset-four-fifths-fullhd { margin-left: 80%; } .column.is-0-fullhd { flex: none; width: 0%; } .column.is-offset-0-fullhd { margin-left: 0%; } .column.is-1-fullhd { flex: none; width: 8.33333%; } .column.is-offset-1-fullhd { margin-left: 8.33333%; } .column.is-2-fullhd { flex: none; width: 16.66667%; } .column.is-offset-2-fullhd { margin-left: 16.66667%; } .column.is-3-fullhd { flex: none; width: 25%; } .column.is-offset-3-fullhd { margin-left: 25%; } .column.is-4-fullhd { flex: none; width: 33.33333%; } .column.is-offset-4-fullhd { margin-left: 33.33333%; } .column.is-5-fullhd { flex: none; width: 41.66667%; } .column.is-offset-5-fullhd { margin-left: 41.66667%; } .column.is-6-fullhd { flex: none; width: 50%; } .column.is-offset-6-fullhd { margin-left: 50%; } .column.is-7-fullhd { flex: none; width: 58.33333%; } .column.is-offset-7-fullhd { margin-left: 58.33333%; } .column.is-8-fullhd { flex: none; width: 66.66667%; } .column.is-offset-8-fullhd { margin-left: 66.66667%; } .column.is-9-fullhd { flex: none; width: 75%; } .column.is-offset-9-fullhd { margin-left: 75%; } .column.is-10-fullhd { flex: none; width: 83.33333%; } .column.is-offset-10-fullhd { margin-left: 83.33333%; } .column.is-11-fullhd { flex: none; width: 91.66667%; } .column.is-offset-11-fullhd { margin-left: 91.66667%; } .column.is-12-fullhd { flex: none; width: 100%; } .column.is-offset-12-fullhd { margin-left: 100%; } } .columns { margin-left: -0.75rem; margin-right: -0.75rem; margin-top: -0.75rem; } .columns:last-child { margin-bottom: -0.75rem; } .columns:not(:last-child) { margin-bottom: calc(1.5rem - 0.75rem); } .columns.is-centered { justify-content: center; } .columns.is-gapless { margin-left: 0; margin-right: 0; margin-top: 0; } .columns.is-gapless > .column { margin: 0; padding: 0 !important; } .columns.is-gapless:not(:last-child) { margin-bottom: 1.5rem; } .columns.is-gapless:last-child { margin-bottom: 0; } .columns.is-mobile { display: flex; } .columns.is-multiline { flex-wrap: wrap; } .columns.is-vcentered { align-items: center; } @media screen and (min-width: 769px), print { .columns:not(.is-desktop) { display: flex; } } @media screen and (min-width: 1024px) { .columns.is-desktop { display: flex; } } .columns.is-variable { --columnGap: 0.75rem; margin-left: calc(-1 * var(--columnGap)); margin-right: calc(-1 * var(--columnGap)); } .columns.is-variable .column { padding-left: var(--columnGap); padding-right: var(--columnGap); } .columns.is-variable.is-0 { --columnGap: 0rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-0-mobile { --columnGap: 0rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-0-tablet { --columnGap: 0rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-0-tablet-only { --columnGap: 0rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-0-touch { --columnGap: 0rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-0-desktop { --columnGap: 0rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-0-desktop-only { --columnGap: 0rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-0-widescreen { --columnGap: 0rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-0-widescreen-only { --columnGap: 0rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-0-fullhd { --columnGap: 0rem; } } .columns.is-variable.is-1 { --columnGap: 0.25rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-1-mobile { --columnGap: 0.25rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-1-tablet { --columnGap: 0.25rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-1-tablet-only { --columnGap: 0.25rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-1-touch { --columnGap: 0.25rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-1-desktop { --columnGap: 0.25rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-1-desktop-only { --columnGap: 0.25rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-1-widescreen { --columnGap: 0.25rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-1-widescreen-only { --columnGap: 0.25rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-1-fullhd { --columnGap: 0.25rem; } } .columns.is-variable.is-2 { --columnGap: 0.5rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-2-mobile { --columnGap: 0.5rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-2-tablet { --columnGap: 0.5rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-2-tablet-only { --columnGap: 0.5rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-2-touch { --columnGap: 0.5rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-2-desktop { --columnGap: 0.5rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-2-desktop-only { --columnGap: 0.5rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-2-widescreen { --columnGap: 0.5rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-2-widescreen-only { --columnGap: 0.5rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-2-fullhd { --columnGap: 0.5rem; } } .columns.is-variable.is-3 { --columnGap: 0.75rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-3-mobile { --columnGap: 0.75rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-3-tablet { --columnGap: 0.75rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-3-tablet-only { --columnGap: 0.75rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-3-touch { --columnGap: 0.75rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-3-desktop { --columnGap: 0.75rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-3-desktop-only { --columnGap: 0.75rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-3-widescreen { --columnGap: 0.75rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-3-widescreen-only { --columnGap: 0.75rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-3-fullhd { --columnGap: 0.75rem; } } .columns.is-variable.is-4 { --columnGap: 1rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-4-mobile { --columnGap: 1rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-4-tablet { --columnGap: 1rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-4-tablet-only { --columnGap: 1rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-4-touch { --columnGap: 1rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-4-desktop { --columnGap: 1rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-4-desktop-only { --columnGap: 1rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-4-widescreen { --columnGap: 1rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-4-widescreen-only { --columnGap: 1rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-4-fullhd { --columnGap: 1rem; } } .columns.is-variable.is-5 { --columnGap: 1.25rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-5-mobile { --columnGap: 1.25rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-5-tablet { --columnGap: 1.25rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-5-tablet-only { --columnGap: 1.25rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-5-touch { --columnGap: 1.25rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-5-desktop { --columnGap: 1.25rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-5-desktop-only { --columnGap: 1.25rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-5-widescreen { --columnGap: 1.25rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-5-widescreen-only { --columnGap: 1.25rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-5-fullhd { --columnGap: 1.25rem; } } .columns.is-variable.is-6 { --columnGap: 1.5rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-6-mobile { --columnGap: 1.5rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-6-tablet { --columnGap: 1.5rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-6-tablet-only { --columnGap: 1.5rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-6-touch { --columnGap: 1.5rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-6-desktop { --columnGap: 1.5rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-6-desktop-only { --columnGap: 1.5rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-6-widescreen { --columnGap: 1.5rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-6-widescreen-only { --columnGap: 1.5rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-6-fullhd { --columnGap: 1.5rem; } } .columns.is-variable.is-7 { --columnGap: 1.75rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-7-mobile { --columnGap: 1.75rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-7-tablet { --columnGap: 1.75rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-7-tablet-only { --columnGap: 1.75rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-7-touch { --columnGap: 1.75rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-7-desktop { --columnGap: 1.75rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-7-desktop-only { --columnGap: 1.75rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-7-widescreen { --columnGap: 1.75rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-7-widescreen-only { --columnGap: 1.75rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-7-fullhd { --columnGap: 1.75rem; } } .columns.is-variable.is-8 { --columnGap: 2rem; } @media screen and (max-width: 768px) { .columns.is-variable.is-8-mobile { --columnGap: 2rem; } } @media screen and (min-width: 769px), print { .columns.is-variable.is-8-tablet { --columnGap: 2rem; } } @media screen and (min-width: 769px) and (max-width: 1023px) { .columns.is-variable.is-8-tablet-only { --columnGap: 2rem; } } @media screen and (max-width: 1023px) { .columns.is-variable.is-8-touch { --columnGap: 2rem; } } @media screen and (min-width: 1024px) { .columns.is-variable.is-8-desktop { --columnGap: 2rem; } } @media screen and (min-width: 1024px) and (max-width: 1215px) { .columns.is-variable.is-8-desktop-only { --columnGap: 2rem; } } @media screen and (min-width: 1216px) { .columns.is-variable.is-8-widescreen { --columnGap: 2rem; } } @media screen and (min-width: 1216px) and (max-width: 1407px) { .columns.is-variable.is-8-widescreen-only { --columnGap: 2rem; } } @media screen and (min-width: 1408px) { .columns.is-variable.is-8-fullhd { --columnGap: 2rem; } } .tile { align-items: stretch; display: block; flex-basis: 0; flex-grow: 1; flex-shrink: 1; min-height: -webkit-min-content; min-height: -moz-min-content; min-height: min-content; } .tile.is-ancestor { margin-left: -0.75rem; margin-right: -0.75rem; margin-top: -0.75rem; } .tile.is-ancestor:last-child { margin-bottom: -0.75rem; } .tile.is-ancestor:not(:last-child) { margin-bottom: 0.75rem; } .tile.is-child { margin: 0 !important; } .tile.is-parent { padding: 0.75rem; } .tile.is-vertical { flex-direction: column; } .tile.is-vertical > .tile.is-child:not(:last-child) { margin-bottom: 1.5rem !important; } @media screen and (min-width: 769px), print { .tile:not(.is-child) { display: flex; } .tile.is-1 { flex: none; width: 8.33333%; } .tile.is-2 { flex: none; width: 16.66667%; } .tile.is-3 { flex: none; width: 25%; } .tile.is-4 { flex: none; width: 33.33333%; } .tile.is-5 { flex: none; width: 41.66667%; } .tile.is-6 { flex: none; width: 50%; } .tile.is-7 { flex: none; width: 58.33333%; } .tile.is-8 { flex: none; width: 66.66667%; } .tile.is-9 { flex: none; width: 75%; } .tile.is-10 { flex: none; width: 83.33333%; } .tile.is-11 { flex: none; width: 91.66667%; } .tile.is-12 { flex: none; width: 100%; } } .hero { align-items: stretch; display: flex; flex-direction: column; justify-content: space-between; } .hero .navbar { background: none; } .hero .tabs ul { border-bottom: none; } .hero.is-white { background-color: white; color: #0a0a0a; } .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-white strong { color: inherit; } .hero.is-white .title { color: #0a0a0a; } .hero.is-white .subtitle { color: rgba(10, 10, 10, 0.9); } .hero.is-white .subtitle a:not(.button), .hero.is-white .subtitle strong { color: #0a0a0a; } @media screen and (max-width: 1023px) { .hero.is-white .navbar-menu { background-color: white; } } .hero.is-white .navbar-item, .hero.is-white .navbar-link { color: rgba(10, 10, 10, 0.7); } .hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active, .hero.is-white .navbar-link:hover, .hero.is-white .navbar-link.is-active { background-color: #f2f2f2; color: #0a0a0a; } .hero.is-white .tabs a { color: #0a0a0a; opacity: 0.9; } .hero.is-white .tabs a:hover { opacity: 1; } .hero.is-white .tabs li.is-active a { opacity: 1; } .hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a { color: #0a0a0a; } .hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover { background-color: #0a0a0a; border-color: #0a0a0a; color: white; } .hero.is-white.is-bold { background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } @media screen and (max-width: 768px) { .hero.is-white.is-bold .navbar-menu { background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } } .hero.is-black { background-color: #0a0a0a; color: white; } .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-black strong { color: inherit; } .hero.is-black .title { color: white; } .hero.is-black .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-black .subtitle a:not(.button), .hero.is-black .subtitle strong { color: white; } @media screen and (max-width: 1023px) { .hero.is-black .navbar-menu { background-color: #0a0a0a; } } .hero.is-black .navbar-item, .hero.is-black .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active, .hero.is-black .navbar-link:hover, .hero.is-black .navbar-link.is-active { background-color: black; color: white; } .hero.is-black .tabs a { color: white; opacity: 0.9; } .hero.is-black .tabs a:hover { opacity: 1; } .hero.is-black .tabs li.is-active a { opacity: 1; } .hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a { color: white; } .hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover { background-color: white; border-color: white; color: #0a0a0a; } .hero.is-black.is-bold { background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } @media screen and (max-width: 768px) { .hero.is-black.is-bold .navbar-menu { background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } } .hero.is-light { background-color: whitesmoke; color: #363636; } .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-light strong { color: inherit; } .hero.is-light .title { color: #363636; } .hero.is-light .subtitle { color: rgba(54, 54, 54, 0.9); } .hero.is-light .subtitle a:not(.button), .hero.is-light .subtitle strong { color: #363636; } @media screen and (max-width: 1023px) { .hero.is-light .navbar-menu { background-color: whitesmoke; } } .hero.is-light .navbar-item, .hero.is-light .navbar-link { color: rgba(54, 54, 54, 0.7); } .hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active, .hero.is-light .navbar-link:hover, .hero.is-light .navbar-link.is-active { background-color: #e8e8e8; color: #363636; } .hero.is-light .tabs a { color: #363636; opacity: 0.9; } .hero.is-light .tabs a:hover { opacity: 1; } .hero.is-light .tabs li.is-active a { opacity: 1; } .hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a { color: #363636; } .hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover { background-color: #363636; border-color: #363636; color: whitesmoke; } .hero.is-light.is-bold { background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } @media screen and (max-width: 768px) { .hero.is-light.is-bold .navbar-menu { background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } } .hero.is-dark { background-color: #363636; color: whitesmoke; } .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-dark strong { color: inherit; } .hero.is-dark .title { color: whitesmoke; } .hero.is-dark .subtitle { color: rgba(245, 245, 245, 0.9); } .hero.is-dark .subtitle a:not(.button), .hero.is-dark .subtitle strong { color: whitesmoke; } @media screen and (max-width: 1023px) { .hero.is-dark .navbar-menu { background-color: #363636; } } .hero.is-dark .navbar-item, .hero.is-dark .navbar-link { color: rgba(245, 245, 245, 0.7); } .hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active, .hero.is-dark .navbar-link:hover, .hero.is-dark .navbar-link.is-active { background-color: #292929; color: whitesmoke; } .hero.is-dark .tabs a { color: whitesmoke; opacity: 0.9; } .hero.is-dark .tabs a:hover { opacity: 1; } .hero.is-dark .tabs li.is-active a { opacity: 1; } .hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a { color: whitesmoke; } .hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { background-color: whitesmoke; border-color: whitesmoke; color: #363636; } .hero.is-dark.is-bold { background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } @media screen and (max-width: 768px) { .hero.is-dark.is-bold .navbar-menu { background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } } .hero.is-primary { background-color: #00d1b2; color: #fff; } .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-primary strong { color: inherit; } .hero.is-primary .title { color: #fff; } .hero.is-primary .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-primary .subtitle a:not(.button), .hero.is-primary .subtitle strong { color: #fff; } @media screen and (max-width: 1023px) { .hero.is-primary .navbar-menu { background-color: #00d1b2; } } .hero.is-primary .navbar-item, .hero.is-primary .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active, .hero.is-primary .navbar-link:hover, .hero.is-primary .navbar-link.is-active { background-color: #00b89c; color: #fff; } .hero.is-primary .tabs a { color: #fff; opacity: 0.9; } .hero.is-primary .tabs a:hover { opacity: 1; } .hero.is-primary .tabs li.is-active a { opacity: 1; } .hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a { color: #fff; } .hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; color: #00d1b2; } .hero.is-primary.is-bold { background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); } @media screen and (max-width: 768px) { .hero.is-primary.is-bold .navbar-menu { background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%); } } .hero.is-link { background-color: #3273dc; color: #fff; } .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-link strong { color: inherit; } .hero.is-link .title { color: #fff; } .hero.is-link .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-link .subtitle a:not(.button), .hero.is-link .subtitle strong { color: #fff; } @media screen and (max-width: 1023px) { .hero.is-link .navbar-menu { background-color: #3273dc; } } .hero.is-link .navbar-item, .hero.is-link .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, .hero.is-link .navbar-link:hover, .hero.is-link .navbar-link.is-active { background-color: #2366d1; color: #fff; } .hero.is-link .tabs a { color: #fff; opacity: 0.9; } .hero.is-link .tabs a:hover { opacity: 1; } .hero.is-link .tabs li.is-active a { opacity: 1; } .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { color: #fff; } .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; color: #3273dc; } .hero.is-link.is-bold { background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); } @media screen and (max-width: 768px) { .hero.is-link.is-bold .navbar-menu { background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%); } } .hero.is-info { background-color: #209cee; color: #fff; } .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-info strong { color: inherit; } .hero.is-info .title { color: #fff; } .hero.is-info .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-info .subtitle a:not(.button), .hero.is-info .subtitle strong { color: #fff; } @media screen and (max-width: 1023px) { .hero.is-info .navbar-menu { background-color: #209cee; } } .hero.is-info .navbar-item, .hero.is-info .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, .hero.is-info .navbar-link:hover, .hero.is-info .navbar-link.is-active { background-color: #118fe4; color: #fff; } .hero.is-info .tabs a { color: #fff; opacity: 0.9; } .hero.is-info .tabs a:hover { opacity: 1; } .hero.is-info .tabs li.is-active a { opacity: 1; } .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { color: #fff; } .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; color: #209cee; } .hero.is-info.is-bold { background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } @media screen and (max-width: 768px) { .hero.is-info.is-bold .navbar-menu { background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } } .hero.is-success { background-color: #23d160; color: #fff; } .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-success strong { color: inherit; } .hero.is-success .title { color: #fff; } .hero.is-success .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-success .subtitle a:not(.button), .hero.is-success .subtitle strong { color: #fff; } @media screen and (max-width: 1023px) { .hero.is-success .navbar-menu { background-color: #23d160; } } .hero.is-success .navbar-item, .hero.is-success .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, .hero.is-success .navbar-link:hover, .hero.is-success .navbar-link.is-active { background-color: #20bc56; color: #fff; } .hero.is-success .tabs a { color: #fff; opacity: 0.9; } .hero.is-success .tabs a:hover { opacity: 1; } .hero.is-success .tabs li.is-active a { opacity: 1; } .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { color: #fff; } .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; color: #23d160; } .hero.is-success.is-bold { background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); } @media screen and (max-width: 768px) { .hero.is-success.is-bold .navbar-menu { background-image: linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%); } } .hero.is-warning { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-warning strong { color: inherit; } .hero.is-warning .title { color: rgba(0, 0, 0, 0.7); } .hero.is-warning .subtitle { color: rgba(0, 0, 0, 0.9); } .hero.is-warning .subtitle a:not(.button), .hero.is-warning .subtitle strong { color: rgba(0, 0, 0, 0.7); } @media screen and (max-width: 1023px) { .hero.is-warning .navbar-menu { background-color: #ffdd57; } } .hero.is-warning .navbar-item, .hero.is-warning .navbar-link { color: rgba(0, 0, 0, 0.7); } .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, .hero.is-warning .navbar-link:hover, .hero.is-warning .navbar-link.is-active { background-color: #ffd83d; color: rgba(0, 0, 0, 0.7); } .hero.is-warning .tabs a { color: rgba(0, 0, 0, 0.7); opacity: 0.9; } .hero.is-warning .tabs a:hover { opacity: 1; } .hero.is-warning .tabs li.is-active a { opacity: 1; } .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { color: rgba(0, 0, 0, 0.7); } .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { background-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7); color: #ffdd57; } .hero.is-warning.is-bold { background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } @media screen and (max-width: 768px) { .hero.is-warning.is-bold .navbar-menu { background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } } .hero.is-danger { background-color: #ff3860; color: #fff; } .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), .hero.is-danger strong { color: inherit; } .hero.is-danger .title { color: #fff; } .hero.is-danger .subtitle { color: rgba(255, 255, 255, 0.9); } .hero.is-danger .subtitle a:not(.button), .hero.is-danger .subtitle strong { color: #fff; } @media screen and (max-width: 1023px) { .hero.is-danger .navbar-menu { background-color: #ff3860; } } .hero.is-danger .navbar-item, .hero.is-danger .navbar-link { color: rgba(255, 255, 255, 0.7); } .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, .hero.is-danger .navbar-link:hover, .hero.is-danger .navbar-link.is-active { background-color: #ff1f4b; color: #fff; } .hero.is-danger .tabs a { color: #fff; opacity: 0.9; } .hero.is-danger .tabs a:hover { opacity: 1; } .hero.is-danger .tabs li.is-active a { opacity: 1; } .hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a { color: #fff; } .hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover { background-color: rgba(10, 10, 10, 0.1); } .hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover { background-color: #fff; border-color: #fff; color: #ff3860; } .hero.is-danger.is-bold { background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); } @media screen and (max-width: 768px) { .hero.is-danger.is-bold .navbar-menu { background-image: linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%); } } .hero.is-small .hero-body { padding-bottom: 1.5rem; padding-top: 1.5rem; } @media screen and (min-width: 769px), print { .hero.is-medium .hero-body { padding-bottom: 9rem; padding-top: 9rem; } } @media screen and (min-width: 769px), print { .hero.is-large .hero-body { padding-bottom: 18rem; padding-top: 18rem; } } .hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body { align-items: center; display: flex; } .hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container { flex-grow: 1; flex-shrink: 1; } .hero.is-halfheight { min-height: 50vh; } .hero.is-fullheight { min-height: 100vh; } .hero-video { overflow: hidden; } .hero-video video { left: 50%; min-height: 100%; min-width: 100%; position: absolute; top: 50%; -webkit-transform: translate3d(-50%, -50%, 0); transform: translate3d(-50%, -50%, 0); } .hero-video.is-transparent { opacity: 0.3; } @media screen and (max-width: 768px) { .hero-video { display: none; } } .hero-buttons { margin-top: 1.5rem; } @media screen and (max-width: 768px) { .hero-buttons .button { display: flex; } .hero-buttons .button:not(:last-child) { margin-bottom: 0.75rem; } } @media screen and (min-width: 769px), print { .hero-buttons { display: flex; justify-content: center; } .hero-buttons .button:not(:last-child) { margin-right: 1.5rem; } } .hero-head, .hero-foot { flex-grow: 0; flex-shrink: 0; } .hero-body { flex-grow: 1; flex-shrink: 0; padding: 3rem 1.5rem; } .section { padding: 3rem 1.5rem; } @media screen and (min-width: 1024px) { .section.is-medium { padding: 9rem 1.5rem; } .section.is-large { padding: 18rem 1.5rem; } } .footer { background-color: #fafafa; padding: 3rem 1.5rem 6rem; } /*# sourceMappingURL=bulma.css.map */�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/static/index.css����������������������������������������������������������0000664�0000000�0000000�00000000324�14613413627�0020345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import url("./bulma-0.7.5.css"); textarea { font-family: Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace; } #output pre { padding: 0; }������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/static/index.js�����������������������������������������������������������0000664�0000000�0000000�00000012001�14613413627�0020164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import * as Base64 from "./base64.js"; document.addEventListener("DOMContentLoaded", function () { var style = document.createElement('style'); var ref = document.querySelector('script'); ref.parentNode.insertBefore(style, ref); var form = document.getElementById('chroma'); var textArea = form.elements["text"]; var styleSelect = form.elements["style"]; var languageSelect = form.elements["language"]; var copyButton = form.elements["copy"]; var csrfToken = form.elements["gorilla.csrf.Token"].value; var output = document.getElementById("output"); var htmlCheckbox = document.getElementById("html"); (document.querySelectorAll('.notification .delete') || []).forEach((el) => { const notification = el.parentNode; el.addEventListener('click', () => { notification.parentNode.removeChild(notification); }); }); // https://stackoverflow.com/a/37697925/7980 function handleTab(e) { var after, before, end, lastNewLine, changeLength, re, replace, selection, start, val; if ((e.charCode === 9 || e.keyCode === 9) && !e.altKey && !e.ctrlKey && !e.metaKey) { e.preventDefault(); start = this.selectionStart; end = this.selectionEnd; val = this.value; before = val.substring(0, start); after = val.substring(end); replace = true; if (start !== end) { selection = val.substring(start, end); if (~selection.indexOf('\n')) { replace = false; changeLength = 0; lastNewLine = before.lastIndexOf('\n'); if (!~lastNewLine) { selection = before + selection; changeLength = before.length; before = ''; } else { selection = before.substring(lastNewLine) + selection; changeLength = before.length - lastNewLine; before = before.substring(0, lastNewLine); } if (e.shiftKey) { re = /(\n|^)(\t|[ ]{1,8})/g; if (selection.match(re)) { start--; changeLength--; } selection = selection.replace(re, '$1'); } else { selection = selection.replace(/(\n|^)/g, '$1\t'); start++; changeLength++; } this.value = before + selection + after; this.selectionStart = start; this.selectionEnd = start + selection.length - changeLength; } } if (replace && !e.shiftKey) { this.value = before + '\t' + after; this.selectionStart = this.selectionEnd = start + 1; } } debouncedEventHandler(e); } function debounce(func, wait, immediate) { var timeout; return function () { var context = this, args = arguments; var later = function () { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } function getFormJSON() { return { "language": languageSelect.value, "style": styleSelect.value, "text": textArea.value, "classes": htmlCheckbox.checked, } } function update(event) { fetch("api/render", { method: 'POST', mode: 'cors', cache: 'no-cache', credentials: 'same-origin', headers: { 'X-CSRF-Token': csrfToken, 'Content-Type': 'application/json', }, redirect: 'follow', referrer: 'no-referrer', body: JSON.stringify(getFormJSON()), }).then(data => { data.json().then( value => { if (value.language) { languageSelect.value = value.language; } style.innerHTML = "#output { " + value.background + "}"; if (htmlCheckbox.checked) { output.innerText = value.html; } else { output.innerHTML = value.html; } } ); }).catch(reason => { console.log(reason); }); event.preventDefault(); } function share(event) { let data = JSON.stringify(getFormJSON()) data = Base64.encodeURI(data); location.hash = "#" + data; try { navigator.clipboard.writeText(location.href); } catch (e) { console.log(e); } event.preventDefault(); } if (location.hash) { let json = Base64.decode(location.hash.substring(1)) json = JSON.parse(json); textArea.value = json.text; languageSelect.value = json.language; styleSelect.value = json.style; htmlCheckbox.checked = json.classes; update(new Event('change')); } var eventHandler = (event) => update(event); var debouncedEventHandler = debounce(eventHandler, 250); languageSelect.addEventListener('change', eventHandler); styleSelect.addEventListener('change', eventHandler); htmlCheckbox.addEventListener('change', eventHandler); copyButton.addEventListener('click', share); textArea.addEventListener('keydown', handleTab); textArea.addEventListener('change', debouncedEventHandler); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/templates/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14613413627�0017234�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chroma-2.14.0/cmd/chromad/templates/index.html.tmpl�������������������������������������������������0000664�0000000�0000000�00000005574�14613413627�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!doctype html> <html> <head> <title>Chroma Playground ({{.Version}})

Chroma Playground ({{.Version}})

Chroma is a general purpose syntax highlighter in pure Go. It takes source code and other structured text and converts it into syntax highlighted HTML, ANSI-coloured text, etc. Chroma is based heavily on Pygments, and includes translators for Pygments lexers and styles.
{{ .CSRFField }}

chroma-2.14.0/coalesce.go000066400000000000000000000014141461341362700151630ustar00rootroot00000000000000package chroma // Coalesce is a Lexer interceptor that collapses runs of common types into a single token. func Coalesce(lexer Lexer) Lexer { return &coalescer{lexer} } type coalescer struct{ Lexer } func (d *coalescer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { var prev Token it, err := d.Lexer.Tokenise(options, text) if err != nil { return nil, err } return func() Token { for token := it(); token != (EOF); token = it() { if len(token.Value) == 0 { continue } if prev == EOF { prev = token } else { if prev.Type == token.Type && len(prev.Value) < 8192 { prev.Value += token.Value } else { out := prev prev = token return out } } } out := prev prev = EOF return out }, nil } chroma-2.14.0/coalesce_test.go000066400000000000000000000006211461341362700162210ustar00rootroot00000000000000package chroma import ( "testing" assert "github.com/alecthomas/assert/v2" ) func TestCoalesce(t *testing.T) { lexer := Coalesce(mustNewLexer(t, nil, Rules{ // nolint: forbidigo "root": []Rule{ {`[!@#$%^&*()]`, Punctuation, nil}, }, })) actual, err := Tokenise(lexer, nil, "!@#$") assert.NoError(t, err) expected := []Token{{Punctuation, "!@#$"}} assert.Equal(t, expected, actual) } chroma-2.14.0/colour.go000066400000000000000000000125571461341362700147220ustar00rootroot00000000000000package chroma import ( "fmt" "math" "strconv" "strings" ) // ANSI2RGB maps ANSI colour names, as supported by Chroma, to hex RGB values. var ANSI2RGB = map[string]string{ "#ansiblack": "000000", "#ansidarkred": "7f0000", "#ansidarkgreen": "007f00", "#ansibrown": "7f7fe0", "#ansidarkblue": "00007f", "#ansipurple": "7f007f", "#ansiteal": "007f7f", "#ansilightgray": "e5e5e5", // Normal "#ansidarkgray": "555555", "#ansired": "ff0000", "#ansigreen": "00ff00", "#ansiyellow": "ffff00", "#ansiblue": "0000ff", "#ansifuchsia": "ff00ff", "#ansiturquoise": "00ffff", "#ansiwhite": "ffffff", // Aliases without the "ansi" prefix, because...why? "#black": "000000", "#darkred": "7f0000", "#darkgreen": "007f00", "#brown": "7f7fe0", "#darkblue": "00007f", "#purple": "7f007f", "#teal": "007f7f", "#lightgray": "e5e5e5", // Normal "#darkgray": "555555", "#red": "ff0000", "#green": "00ff00", "#yellow": "ffff00", "#blue": "0000ff", "#fuchsia": "ff00ff", "#turquoise": "00ffff", "#white": "ffffff", } // Colour represents an RGB colour. type Colour int32 // NewColour creates a Colour directly from RGB values. func NewColour(r, g, b uint8) Colour { return ParseColour(fmt.Sprintf("%02x%02x%02x", r, g, b)) } // Distance between this colour and another. // // This uses the approach described here (https://www.compuphase.com/cmetric.htm). // This is not as accurate as LAB, et. al. but is *vastly* simpler and sufficient for our needs. func (c Colour) Distance(e2 Colour) float64 { ar, ag, ab := int64(c.Red()), int64(c.Green()), int64(c.Blue()) br, bg, bb := int64(e2.Red()), int64(e2.Green()), int64(e2.Blue()) rmean := (ar + br) / 2 r := ar - br g := ag - bg b := ab - bb return math.Sqrt(float64((((512 + rmean) * r * r) >> 8) + 4*g*g + (((767 - rmean) * b * b) >> 8))) } // Brighten returns a copy of this colour with its brightness adjusted. // // If factor is negative, the colour is darkened. // // Uses approach described here (http://www.pvladov.com/2012/09/make-color-lighter-or-darker.html). func (c Colour) Brighten(factor float64) Colour { r := float64(c.Red()) g := float64(c.Green()) b := float64(c.Blue()) if factor < 0 { factor++ r *= factor g *= factor b *= factor } else { r = (255-r)*factor + r g = (255-g)*factor + g b = (255-b)*factor + b } return NewColour(uint8(r), uint8(g), uint8(b)) } // BrightenOrDarken brightens a colour if it is < 0.5 brightness or darkens if > 0.5 brightness. func (c Colour) BrightenOrDarken(factor float64) Colour { if c.Brightness() < 0.5 { return c.Brighten(factor) } return c.Brighten(-factor) } // ClampBrightness returns a copy of this colour with its brightness adjusted such that // it falls within the range [min, max] (or very close to it due to rounding errors). // The supplied values use the same [0.0, 1.0] range as Brightness. func (c Colour) ClampBrightness(min, max float64) Colour { if !c.IsSet() { return c } min = math.Max(min, 0) max = math.Min(max, 1) current := c.Brightness() target := math.Min(math.Max(current, min), max) if current == target { return c } r := float64(c.Red()) g := float64(c.Green()) b := float64(c.Blue()) rgb := r + g + b if target > current { // Solve for x: target == ((255-r)*x + r + (255-g)*x + g + (255-b)*x + b) / 255 / 3 return c.Brighten((target*255*3 - rgb) / (255*3 - rgb)) } // Solve for x: target == (r*(x+1) + g*(x+1) + b*(x+1)) / 255 / 3 return c.Brighten((target*255*3)/rgb - 1) } // Brightness of the colour (roughly) in the range 0.0 to 1.0. func (c Colour) Brightness() float64 { return (float64(c.Red()) + float64(c.Green()) + float64(c.Blue())) / 255.0 / 3.0 } // ParseColour in the forms #rgb, #rrggbb, #ansi, or #. // Will return an "unset" colour if invalid. func ParseColour(colour string) Colour { colour = normaliseColour(colour) n, err := strconv.ParseUint(colour, 16, 32) if err != nil { return 0 } return Colour(n + 1) } // MustParseColour is like ParseColour except it panics if the colour is invalid. // // Will panic if colour is in an invalid format. func MustParseColour(colour string) Colour { parsed := ParseColour(colour) if !parsed.IsSet() { panic(fmt.Errorf("invalid colour %q", colour)) } return parsed } // IsSet returns true if the colour is set. func (c Colour) IsSet() bool { return c != 0 } func (c Colour) String() string { return fmt.Sprintf("#%06x", int(c-1)) } func (c Colour) GoString() string { return fmt.Sprintf("Colour(0x%06x)", int(c-1)) } // Red component of colour. func (c Colour) Red() uint8 { return uint8(((c - 1) >> 16) & 0xff) } // Green component of colour. func (c Colour) Green() uint8 { return uint8(((c - 1) >> 8) & 0xff) } // Blue component of colour. func (c Colour) Blue() uint8 { return uint8((c - 1) & 0xff) } // Colours is an orderable set of colours. type Colours []Colour func (c Colours) Len() int { return len(c) } func (c Colours) Swap(i, j int) { c[i], c[j] = c[j], c[i] } func (c Colours) Less(i, j int) bool { return c[i] < c[j] } // Convert colours to #rrggbb. func normaliseColour(colour string) string { if ansi, ok := ANSI2RGB[colour]; ok { return ansi } if strings.HasPrefix(colour, "#") { colour = colour[1:] if len(colour) == 3 { return colour[0:1] + colour[0:1] + colour[1:2] + colour[1:2] + colour[2:3] + colour[2:3] } } return colour } chroma-2.14.0/colour_test.go000066400000000000000000000052061461341362700157520ustar00rootroot00000000000000package chroma import ( "math" "testing" assert "github.com/alecthomas/assert/v2" ) func TestColourRGB(t *testing.T) { colour := ParseColour("#8913af") assert.Equal(t, uint8(0x89), colour.Red()) assert.Equal(t, uint8(0x13), colour.Green()) assert.Equal(t, uint8(0xaf), colour.Blue()) } func TestColourString(t *testing.T) { assert.Equal(t, "#8913af", ParseColour("#8913af").String()) } func distance(a, b uint8) uint8 { if a < b { return b - a } return a - b } func TestColourBrighten(t *testing.T) { actual := NewColour(128, 128, 128).Brighten(0.5) // Closeish to what we expect is fine. assert.True(t, distance(192, actual.Red()) <= 2) assert.True(t, distance(192, actual.Blue()) <= 2) assert.True(t, distance(192, actual.Green()) <= 2) actual = NewColour(128, 128, 128).Brighten(-0.5) assert.True(t, distance(65, actual.Red()) <= 2) assert.True(t, distance(65, actual.Blue()) <= 2) assert.True(t, distance(65, actual.Green()) <= 2) } func TestColourBrightess(t *testing.T) { actual := NewColour(128, 128, 128).Brightness() assert.True(t, distance(128, uint8(actual*255.0)) <= 2) } // hue returns c's hue. See https://stackoverflow.com/a/23094494. func hue(c Colour) float64 { r := float64(c.Red()) / 255 g := float64(c.Green()) / 255 b := float64(c.Blue()) / 255 min := math.Min(math.Min(r, g), b) max := math.Max(math.Max(r, g), b) switch { case r == min: return (g - b) / (max - min) case g == min: return 2 + (b-r)/(max-min) default: return 4 + (r-g)/(max-min) } } func TestColourClampBrightness(t *testing.T) { // Start with a colour with a brightness close to 0.5. initial := NewColour(0, 128, 255) br := initial.Brightness() assertInDelta(t, 0.5, br) // Passing a range that includes the colour's brightness should be a no-op. assert.Equal(t, initial.String(), initial.ClampBrightness(br-0.01, br+0.01).String()) // Clamping to [0, 0] or [1, 1] should produce black or white, respectively. assert.Equal(t, "#000000", initial.ClampBrightness(0, 0).String()) assert.Equal(t, "#ffffff", initial.ClampBrightness(1, 1).String()) // Clamping to a brighter or darker range should produce the requested // brightness while preserving the colour's hue. brighter := initial.ClampBrightness(0.75, 1) assertInDelta(t, 0.75, brighter.Brightness()) assertInDelta(t, hue(initial), hue(brighter)) darker := initial.ClampBrightness(0, 0.25) assertInDelta(t, 0.25, darker.Brightness()) assertInDelta(t, hue(initial), hue(darker)) } func assertInDelta(t *testing.T, expected, actual float64) { const delta = 0.01 // used for brightness and hue comparisons assert.True(t, actual > (expected-delta) && actual < (expected+delta)) } chroma-2.14.0/delegate.go000066400000000000000000000070631461341362700151650ustar00rootroot00000000000000package chroma import ( "bytes" ) type delegatingLexer struct { root Lexer language Lexer } // DelegatingLexer combines two lexers to handle the common case of a language embedded inside another, such as PHP // inside HTML or PHP inside plain text. // // It takes two lexer as arguments: a root lexer and a language lexer. First everything is scanned using the language // lexer, which must return "Other" for unrecognised tokens. Then all "Other" tokens are lexed using the root lexer. // Finally, these two sets of tokens are merged. // // The lexers from the template lexer package use this base lexer. func DelegatingLexer(root Lexer, language Lexer) Lexer { return &delegatingLexer{ root: root, language: language, } } func (d *delegatingLexer) AnalyseText(text string) float32 { return d.root.AnalyseText(text) } func (d *delegatingLexer) SetAnalyser(analyser func(text string) float32) Lexer { d.root.SetAnalyser(analyser) return d } func (d *delegatingLexer) SetRegistry(r *LexerRegistry) Lexer { d.root.SetRegistry(r) d.language.SetRegistry(r) return d } func (d *delegatingLexer) Config() *Config { return d.language.Config() } // An insertion is the character range where language tokens should be inserted. type insertion struct { start, end int tokens []Token } func (d *delegatingLexer) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { // nolint: gocognit tokens, err := Tokenise(Coalesce(d.language), options, text) if err != nil { return nil, err } // Compute insertions and gather "Other" tokens. others := &bytes.Buffer{} insertions := []*insertion{} var insert *insertion offset := 0 var last Token for _, t := range tokens { if t.Type == Other { if last != EOF && insert != nil && last.Type != Other { insert.end = offset } others.WriteString(t.Value) } else { if last == EOF || last.Type == Other { insert = &insertion{start: offset} insertions = append(insertions, insert) } insert.tokens = append(insert.tokens, t) } last = t offset += len(t.Value) } if len(insertions) == 0 { return d.root.Tokenise(options, text) } // Lex the other tokens. rootTokens, err := Tokenise(Coalesce(d.root), options, others.String()) if err != nil { return nil, err } // Interleave the two sets of tokens. var out []Token offset = 0 // Offset into text. tokenIndex := 0 nextToken := func() Token { if tokenIndex >= len(rootTokens) { return EOF } t := rootTokens[tokenIndex] tokenIndex++ return t } insertionIndex := 0 nextInsertion := func() *insertion { if insertionIndex >= len(insertions) { return nil } i := insertions[insertionIndex] insertionIndex++ return i } t := nextToken() i := nextInsertion() for t != EOF || i != nil { // fmt.Printf("%d->%d:%q %d->%d:%q\n", offset, offset+len(t.Value), t.Value, i.start, i.end, Stringify(i.tokens...)) if t == EOF || (i != nil && i.start < offset+len(t.Value)) { var l Token l, t = splitToken(t, i.start-offset) if l != EOF { out = append(out, l) offset += len(l.Value) } out = append(out, i.tokens...) offset += i.end - i.start if t == EOF { t = nextToken() } i = nextInsertion() } else { out = append(out, t) offset += len(t.Value) t = nextToken() } } return Literator(out...), nil } func splitToken(t Token, offset int) (l Token, r Token) { if t == EOF { return EOF, EOF } if offset == 0 { return EOF, t } if offset == len(t.Value) { return t, EOF } l = t.Clone() r = t.Clone() l.Value = l.Value[:offset] r.Value = r.Value[offset:] return } chroma-2.14.0/delegate_test.go000066400000000000000000000051231461341362700162170ustar00rootroot00000000000000package chroma import ( "testing" assert "github.com/alecthomas/assert/v2" ) func makeDelegationTestLexers(t *testing.T) (lang Lexer, root Lexer) { return mustNewLexer(t, nil, Rules{ // nolint: forbidigo "root": { {`\<\?`, CommentPreproc, Push("inside")}, {`.`, Other, nil}, }, "inside": { {`\?\>`, CommentPreproc, Pop(1)}, {`\bwhat\b`, Keyword, nil}, {`\s+`, Whitespace, nil}, }, }), mustNewLexer(t, nil, Rules{ // nolint: forbidigo "root": { {`\bhello\b`, Keyword, nil}, {`\b(world|there)\b`, Name, nil}, {`\s+`, Whitespace, nil}, }, }) } func TestDelegate(t *testing.T) { testdata := []struct { name string source string expected []Token }{ {"SourceInMiddle", `hello world there`, []Token{ {Keyword, "hello"}, {TextWhitespace, " "}, {Name, "world"}, {TextWhitespace, " "}, // lang {CommentPreproc, ""}, // /lang {TextWhitespace, " "}, {Name, "there"}, }}, {"SourceBeginning", ` hello world there`, []Token{ {CommentPreproc, ""}, {TextWhitespace, " "}, {Keyword, "hello"}, {TextWhitespace, " "}, {Name, "world"}, {TextWhitespace, " "}, {Name, "there"}, }}, {"SourceEnd", `hello world hello there hello", []Token{ {Keyword, "hello"}, {TextWhitespace, " "}, {Name, "world"}, {TextWhitespace, " "}, {CommentPreproc, ""}, {TextWhitespace, " "}, {Keyword, "hello"}, {TextWhitespace, " "}, {Name, "there"}, {TextWhitespace, " "}, {CommentPreproc, ""}, {TextWhitespace, " "}, {Keyword, "hello"}, }}, } lang, root := makeDelegationTestLexers(t) delegate := DelegatingLexer(root, lang) for _, test := range testdata { // nolint: scopelint t.Run(test.name, func(t *testing.T) { it, err := delegate.Tokenise(nil, test.source) assert.NoError(t, err) actual := it.Tokens() assert.Equal(t, test.expected, actual) }) } } chroma-2.14.0/doc.go000066400000000000000000000005061461341362700141530ustar00rootroot00000000000000// Package chroma takes source code and other structured text and converts it into syntax highlighted HTML, ANSI- // coloured text, etc. // // Chroma is based heavily on Pygments, and includes translators for Pygments lexers and styles. // // For more information, go here: https://github.com/alecthomas/chroma package chroma chroma-2.14.0/emitters.go000066400000000000000000000145461461341362700152530ustar00rootroot00000000000000package chroma import ( "fmt" ) // An Emitter takes group matches and returns tokens. type Emitter interface { // Emit tokens for the given regex groups. Emit(groups []string, state *LexerState) Iterator } // SerialisableEmitter is an Emitter that can be serialised and deserialised to/from JSON. type SerialisableEmitter interface { Emitter EmitterKind() string } // EmitterFunc is a function that is an Emitter. type EmitterFunc func(groups []string, state *LexerState) Iterator // Emit tokens for groups. func (e EmitterFunc) Emit(groups []string, state *LexerState) Iterator { return e(groups, state) } type Emitters []Emitter type byGroupsEmitter struct { Emitters } // ByGroups emits a token for each matching group in the rule's regex. func ByGroups(emitters ...Emitter) Emitter { return &byGroupsEmitter{Emitters: emitters} } func (b *byGroupsEmitter) EmitterKind() string { return "bygroups" } func (b *byGroupsEmitter) Emit(groups []string, state *LexerState) Iterator { iterators := make([]Iterator, 0, len(groups)-1) if len(b.Emitters) != len(groups)-1 { iterators = append(iterators, Error.Emit(groups, state)) // panic(errors.Errorf("number of groups %q does not match number of emitters %v", groups, emitters)) } else { for i, group := range groups[1:] { if b.Emitters[i] != nil { iterators = append(iterators, b.Emitters[i].Emit([]string{group}, state)) } } } return Concaterator(iterators...) } // ByGroupNames emits a token for each named matching group in the rule's regex. func ByGroupNames(emitters map[string]Emitter) Emitter { return EmitterFunc(func(groups []string, state *LexerState) Iterator { iterators := make([]Iterator, 0, len(state.NamedGroups)-1) if len(state.NamedGroups)-1 == 0 { if emitter, ok := emitters[`0`]; ok { iterators = append(iterators, emitter.Emit(groups, state)) } else { iterators = append(iterators, Error.Emit(groups, state)) } } else { ruleRegex := state.Rules[state.State][state.Rule].Regexp for i := 1; i < len(state.NamedGroups); i++ { groupName := ruleRegex.GroupNameFromNumber(i) group := state.NamedGroups[groupName] if emitter, ok := emitters[groupName]; ok { if emitter != nil { iterators = append(iterators, emitter.Emit([]string{group}, state)) } } else { iterators = append(iterators, Error.Emit([]string{group}, state)) } } } return Concaterator(iterators...) }) } // UsingByGroup emits tokens for the matched groups in the regex using a // sublexer. Used when lexing code blocks where the name of a sublexer is // contained within the block, for example on a Markdown text block or SQL // language block. // // An attempt to load the sublexer will be made using the captured value from // the text of the matched sublexerNameGroup. If a sublexer matching the // sublexerNameGroup is available, then tokens for the matched codeGroup will // be emitted using the sublexer. Otherwise, if no sublexer is available, then // tokens will be emitted from the passed emitter. // // Example: // // var Markdown = internal.Register(MustNewLexer( // &Config{ // Name: "markdown", // Aliases: []string{"md", "mkd"}, // Filenames: []string{"*.md", "*.mkd", "*.markdown"}, // MimeTypes: []string{"text/x-markdown"}, // }, // Rules{ // "root": { // {"^(```)(\\w+)(\\n)([\\w\\W]*?)(^```$)", // UsingByGroup( // 2, 4, // String, String, String, Text, String, // ), // nil, // }, // }, // }, // )) // // See the lexers/markdown.go for the complete example. // // Note: panic's if the number of emitters does not equal the number of matched // groups in the regex. func UsingByGroup(sublexerNameGroup, codeGroup int, emitters ...Emitter) Emitter { return &usingByGroup{ SublexerNameGroup: sublexerNameGroup, CodeGroup: codeGroup, Emitters: emitters, } } type usingByGroup struct { SublexerNameGroup int `xml:"sublexer_name_group"` CodeGroup int `xml:"code_group"` Emitters Emitters `xml:"emitters"` } func (u *usingByGroup) EmitterKind() string { return "usingbygroup" } func (u *usingByGroup) Emit(groups []string, state *LexerState) Iterator { // bounds check if len(u.Emitters) != len(groups)-1 { panic("UsingByGroup expects number of emitters to be the same as len(groups)-1") } // grab sublexer sublexer := state.Registry.Get(groups[u.SublexerNameGroup]) // build iterators iterators := make([]Iterator, len(groups)-1) for i, group := range groups[1:] { if i == u.CodeGroup-1 && sublexer != nil { var err error iterators[i], err = sublexer.Tokenise(nil, groups[u.CodeGroup]) if err != nil { panic(err) } } else if u.Emitters[i] != nil { iterators[i] = u.Emitters[i].Emit([]string{group}, state) } } return Concaterator(iterators...) } // UsingLexer returns an Emitter that uses a given Lexer for parsing and emitting. // // This Emitter is not serialisable. func UsingLexer(lexer Lexer) Emitter { return EmitterFunc(func(groups []string, _ *LexerState) Iterator { it, err := lexer.Tokenise(&TokeniseOptions{State: "root", Nested: true}, groups[0]) if err != nil { panic(err) } return it }) } type usingEmitter struct { Lexer string `xml:"lexer,attr"` } func (u *usingEmitter) EmitterKind() string { return "using" } func (u *usingEmitter) Emit(groups []string, state *LexerState) Iterator { if state.Registry == nil { panic(fmt.Sprintf("no LexerRegistry available for Using(%q)", u.Lexer)) } lexer := state.Registry.Get(u.Lexer) if lexer == nil { panic(fmt.Sprintf("no such lexer %q", u.Lexer)) } it, err := lexer.Tokenise(&TokeniseOptions{State: "root", Nested: true}, groups[0]) if err != nil { panic(err) } return it } // Using returns an Emitter that uses a given Lexer reference for parsing and emitting. // // The referenced lexer must be stored in the same LexerRegistry. func Using(lexer string) Emitter { return &usingEmitter{Lexer: lexer} } type usingSelfEmitter struct { State string `xml:"state,attr"` } func (u *usingSelfEmitter) EmitterKind() string { return "usingself" } func (u *usingSelfEmitter) Emit(groups []string, state *LexerState) Iterator { it, err := state.Lexer.Tokenise(&TokeniseOptions{State: u.State, Nested: true}, groups[0]) if err != nil { panic(err) } return it } // UsingSelf is like Using, but uses the current Lexer. func UsingSelf(stateName string) Emitter { return &usingSelfEmitter{stateName} } chroma-2.14.0/formatter.go000066400000000000000000000020521461341362700154070ustar00rootroot00000000000000package chroma import ( "io" ) // A Formatter for Chroma lexers. type Formatter interface { // Format returns a formatting function for tokens. // // If the iterator panics, the Formatter should recover. Format(w io.Writer, style *Style, iterator Iterator) error } // A FormatterFunc is a Formatter implemented as a function. // // Guards against iterator panics. type FormatterFunc func(w io.Writer, style *Style, iterator Iterator) error func (f FormatterFunc) Format(w io.Writer, s *Style, it Iterator) (err error) { // nolint defer func() { if perr := recover(); perr != nil { err = perr.(error) } }() return f(w, s, it) } type recoveringFormatter struct { Formatter } func (r recoveringFormatter) Format(w io.Writer, s *Style, it Iterator) (err error) { defer func() { if perr := recover(); perr != nil { err = perr.(error) } }() return r.Formatter.Format(w, s, it) } // RecoveringFormatter wraps a formatter with panic recovery. func RecoveringFormatter(formatter Formatter) Formatter { return recoveringFormatter{formatter} } chroma-2.14.0/formatters/000077500000000000000000000000001461341362700152445ustar00rootroot00000000000000chroma-2.14.0/formatters/api.go000066400000000000000000000025701461341362700163500ustar00rootroot00000000000000package formatters import ( "io" "sort" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/formatters/svg" ) var ( // NoOp formatter. NoOp = Register("noop", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, iterator chroma.Iterator) error { for t := iterator(); t != chroma.EOF; t = iterator() { if _, err := io.WriteString(w, t.Value); err != nil { return err } } return nil })) // Default HTML formatter outputs self-contained HTML. htmlFull = Register("html", html.New(html.Standalone(true), html.WithClasses(true))) // nolint SVG = Register("svg", svg.New(svg.EmbedFont("Liberation Mono", svg.FontLiberationMono, svg.WOFF))) ) // Fallback formatter. var Fallback = NoOp // Registry of Formatters. var Registry = map[string]chroma.Formatter{} // Names of registered formatters. func Names() []string { out := []string{} for name := range Registry { out = append(out, name) } sort.Strings(out) return out } // Get formatter by name. // // If the given formatter is not found, the Fallback formatter will be returned. func Get(name string) chroma.Formatter { if f, ok := Registry[name]; ok { return f } return Fallback } // Register a named formatter. func Register(name string, formatter chroma.Formatter) chroma.Formatter { Registry[name] = formatter return formatter } chroma-2.14.0/formatters/html/000077500000000000000000000000001461341362700162105ustar00rootroot00000000000000chroma-2.14.0/formatters/html/html.go000066400000000000000000000425101461341362700175050ustar00rootroot00000000000000package html import ( "fmt" "html" "io" "sort" "strconv" "strings" "sync" "github.com/alecthomas/chroma/v2" ) // Option sets an option of the HTML formatter. type Option func(f *Formatter) // Standalone configures the HTML formatter for generating a standalone HTML document. func Standalone(b bool) Option { return func(f *Formatter) { f.standalone = b } } // ClassPrefix sets the CSS class prefix. func ClassPrefix(prefix string) Option { return func(f *Formatter) { f.prefix = prefix } } // WithClasses emits HTML using CSS classes, rather than inline styles. func WithClasses(b bool) Option { return func(f *Formatter) { f.Classes = b } } // WithAllClasses disables an optimisation that omits redundant CSS classes. func WithAllClasses(b bool) Option { return func(f *Formatter) { f.allClasses = b } } // WithCustomCSS sets user's custom CSS styles. func WithCustomCSS(css map[chroma.TokenType]string) Option { return func(f *Formatter) { f.customCSS = css } } // TabWidth sets the number of characters for a tab. Defaults to 8. func TabWidth(width int) Option { return func(f *Formatter) { f.tabWidth = width } } // PreventSurroundingPre prevents the surrounding pre tags around the generated code. func PreventSurroundingPre(b bool) Option { return func(f *Formatter) { f.preventSurroundingPre = b if b { f.preWrapper = nopPreWrapper } else { f.preWrapper = defaultPreWrapper } } } // InlineCode creates inline code wrapped in a code tag. func InlineCode(b bool) Option { return func(f *Formatter) { f.inlineCode = b f.preWrapper = preWrapper{ start: func(code bool, styleAttr string) string { if code { return fmt.Sprintf(``, styleAttr) } return `` }, end: func(code bool) string { if code { return `` } return `` }, } } } // WithPreWrapper allows control of the surrounding pre tags. func WithPreWrapper(wrapper PreWrapper) Option { return func(f *Formatter) { f.preWrapper = wrapper } } // WrapLongLines wraps long lines. func WrapLongLines(b bool) Option { return func(f *Formatter) { f.wrapLongLines = b } } // WithLineNumbers formats output with line numbers. func WithLineNumbers(b bool) Option { return func(f *Formatter) { f.lineNumbers = b } } // LineNumbersInTable will, when combined with WithLineNumbers, separate the line numbers // and code in table td's, which make them copy-and-paste friendly. func LineNumbersInTable(b bool) Option { return func(f *Formatter) { f.lineNumbersInTable = b } } // WithLinkableLineNumbers decorates the line numbers HTML elements with an "id" // attribute so they can be linked. func WithLinkableLineNumbers(b bool, prefix string) Option { return func(f *Formatter) { f.linkableLineNumbers = b f.lineNumbersIDPrefix = prefix } } // HighlightLines higlights the given line ranges with the Highlight style. // // A range is the beginning and ending of a range as 1-based line numbers, inclusive. func HighlightLines(ranges [][2]int) Option { return func(f *Formatter) { f.highlightRanges = ranges sort.Sort(f.highlightRanges) } } // BaseLineNumber sets the initial number to start line numbering at. Defaults to 1. func BaseLineNumber(n int) Option { return func(f *Formatter) { f.baseLineNumber = n } } // New HTML formatter. func New(options ...Option) *Formatter { f := &Formatter{ baseLineNumber: 1, preWrapper: defaultPreWrapper, } f.styleCache = newStyleCache(f) for _, option := range options { option(f) } return f } // PreWrapper defines the operations supported in WithPreWrapper. type PreWrapper interface { // Start is called to write a start
 element.
	// The code flag tells whether this block surrounds
	// highlighted code. This will be false when surrounding
	// line numbers.
	Start(code bool, styleAttr string) string

	// End is called to write the end 
element. End(code bool) string } type preWrapper struct { start func(code bool, styleAttr string) string end func(code bool) string } func (p preWrapper) Start(code bool, styleAttr string) string { return p.start(code, styleAttr) } func (p preWrapper) End(code bool) string { return p.end(code) } var ( nopPreWrapper = preWrapper{ start: func(code bool, styleAttr string) string { return "" }, end: func(code bool) string { return "" }, } defaultPreWrapper = preWrapper{ start: func(code bool, styleAttr string) string { if code { return fmt.Sprintf(``, styleAttr) } return fmt.Sprintf(``, styleAttr) }, end: func(code bool) string { if code { return `` } return `` }, } ) // Formatter that generates HTML. type Formatter struct { styleCache *styleCache standalone bool prefix string Classes bool // Exported field to detect when classes are being used allClasses bool customCSS map[chroma.TokenType]string preWrapper PreWrapper inlineCode bool preventSurroundingPre bool tabWidth int wrapLongLines bool lineNumbers bool lineNumbersInTable bool linkableLineNumbers bool lineNumbersIDPrefix string highlightRanges highlightRanges baseLineNumber int } type highlightRanges [][2]int func (h highlightRanges) Len() int { return len(h) } func (h highlightRanges) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h highlightRanges) Less(i, j int) bool { return h[i][0] < h[j][0] } func (f *Formatter) Format(w io.Writer, style *chroma.Style, iterator chroma.Iterator) (err error) { return f.writeHTML(w, style, iterator.Tokens()) } // We deliberately don't use html/template here because it is two orders of magnitude slower (benchmarked). // // OTOH we need to be super careful about correct escaping... func (f *Formatter) writeHTML(w io.Writer, style *chroma.Style, tokens []chroma.Token) (err error) { // nolint: gocyclo css := f.styleCache.get(style, true) if f.standalone { fmt.Fprint(w, "\n") if f.Classes { fmt.Fprint(w, "") } fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.Background)) } wrapInTable := f.lineNumbers && f.lineNumbersInTable lines := chroma.SplitTokensIntoLines(tokens) lineDigits := len(strconv.Itoa(f.baseLineNumber + len(lines) - 1)) highlightIndex := 0 if wrapInTable { // List line numbers in its own fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.PreWrapper)) fmt.Fprintf(w, "", f.styleAttr(css, chroma.LineTable)) fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.LineTableTD)) fmt.Fprintf(w, "%s", f.preWrapper.Start(false, f.styleAttr(css, chroma.PreWrapper))) for index := range lines { line := f.baseLineNumber + index highlight, next := f.shouldHighlight(highlightIndex, line) if next { highlightIndex++ } if highlight { fmt.Fprintf(w, "", f.styleAttr(css, chroma.LineHighlight)) } fmt.Fprintf(w, "%s\n", f.styleAttr(css, chroma.LineNumbersTable), f.lineIDAttribute(line), f.lineTitleWithLinkIfNeeded(css, lineDigits, line)) if highlight { fmt.Fprintf(w, "") } } fmt.Fprint(w, f.preWrapper.End(false)) fmt.Fprint(w, "\n") fmt.Fprintf(w, "\n", f.styleAttr(css, chroma.LineTableTD, "width:100%")) } fmt.Fprintf(w, "%s", f.preWrapper.Start(true, f.styleAttr(css, chroma.PreWrapper))) highlightIndex = 0 for index, tokens := range lines { // 1-based line number. line := f.baseLineNumber + index highlight, next := f.shouldHighlight(highlightIndex, line) if next { highlightIndex++ } if !(f.preventSurroundingPre || f.inlineCode) { // Start of Line fmt.Fprint(w, ``) } else { fmt.Fprintf(w, "%s>", f.styleAttr(css, chroma.Line)) } // Line number if f.lineNumbers && !wrapInTable { fmt.Fprintf(w, "%s", f.styleAttr(css, chroma.LineNumbers), f.lineIDAttribute(line), f.lineTitleWithLinkIfNeeded(css, lineDigits, line)) } fmt.Fprintf(w, ``, f.styleAttr(css, chroma.CodeLine)) } for _, token := range tokens { html := html.EscapeString(token.String()) attr := f.styleAttr(css, token.Type) if attr != "" { html = fmt.Sprintf("%s", attr, html) } fmt.Fprint(w, html) } if !(f.preventSurroundingPre || f.inlineCode) { fmt.Fprint(w, ``) // End of CodeLine fmt.Fprint(w, ``) // End of Line } } fmt.Fprintf(w, "%s", f.preWrapper.End(true)) if wrapInTable { fmt.Fprint(w, "\n") fmt.Fprint(w, "\n") } if f.standalone { fmt.Fprint(w, "\n\n") fmt.Fprint(w, "\n") } return nil } func (f *Formatter) lineIDAttribute(line int) string { if !f.linkableLineNumbers { return "" } return fmt.Sprintf(" id=\"%s\"", f.lineID(line)) } func (f *Formatter) lineTitleWithLinkIfNeeded(css map[chroma.TokenType]string, lineDigits, line int) string { title := fmt.Sprintf("%*d", lineDigits, line) if !f.linkableLineNumbers { return title } return fmt.Sprintf("%s", f.styleAttr(css, chroma.LineLink), f.lineID(line), title) } func (f *Formatter) lineID(line int) string { return fmt.Sprintf("%s%d", f.lineNumbersIDPrefix, line) } func (f *Formatter) shouldHighlight(highlightIndex, line int) (bool, bool) { next := false for highlightIndex < len(f.highlightRanges) && line > f.highlightRanges[highlightIndex][1] { highlightIndex++ next = true } if highlightIndex < len(f.highlightRanges) { hrange := f.highlightRanges[highlightIndex] if line >= hrange[0] && line <= hrange[1] { return true, next } } return false, next } func (f *Formatter) class(t chroma.TokenType) string { for t != 0 { if cls, ok := chroma.StandardTypes[t]; ok { if cls != "" { return f.prefix + cls } return "" } t = t.Parent() } if cls := chroma.StandardTypes[t]; cls != "" { return f.prefix + cls } return "" } func (f *Formatter) styleAttr(styles map[chroma.TokenType]string, tt chroma.TokenType, extraCSS ...string) string { if f.Classes { cls := f.class(tt) if cls == "" { return "" } return fmt.Sprintf(` class="%s"`, cls) } if _, ok := styles[tt]; !ok { tt = tt.SubCategory() if _, ok := styles[tt]; !ok { tt = tt.Category() if _, ok := styles[tt]; !ok { return "" } } } css := []string{styles[tt]} css = append(css, extraCSS...) return fmt.Sprintf(` style="%s"`, strings.Join(css, ";")) } func (f *Formatter) tabWidthStyle() string { if f.tabWidth != 0 && f.tabWidth != 8 { return fmt.Sprintf("-moz-tab-size: %[1]d; -o-tab-size: %[1]d; tab-size: %[1]d;", f.tabWidth) } return "" } // WriteCSS writes CSS style definitions (without any surrounding HTML). func (f *Formatter) WriteCSS(w io.Writer, style *chroma.Style) error { css := f.styleCache.get(style, false) // Special-case background as it is mapped to the outer ".chroma" class. if _, err := fmt.Fprintf(w, "/* %s */ .%sbg { %s }\n", chroma.Background, f.prefix, css[chroma.Background]); err != nil { return err } // Special-case PreWrapper as it is the ".chroma" class. if _, err := fmt.Fprintf(w, "/* %s */ .%schroma { %s }\n", chroma.PreWrapper, f.prefix, css[chroma.PreWrapper]); err != nil { return err } // Special-case code column of table to expand width. if f.lineNumbers && f.lineNumbersInTable { if _, err := fmt.Fprintf(w, "/* %s */ .%schroma .%s:last-child { width: 100%%; }", chroma.LineTableTD, f.prefix, f.class(chroma.LineTableTD)); err != nil { return err } } // Special-case line number highlighting when targeted. if f.lineNumbers || f.lineNumbersInTable { targetedLineCSS := StyleEntryToCSS(style.Get(chroma.LineHighlight)) for _, tt := range []chroma.TokenType{chroma.LineNumbers, chroma.LineNumbersTable} { fmt.Fprintf(w, "/* %s targeted by URL anchor */ .%schroma .%s:target { %s }\n", tt, f.prefix, f.class(tt), targetedLineCSS) } } tts := []int{} for tt := range css { tts = append(tts, int(tt)) } sort.Ints(tts) for _, ti := range tts { tt := chroma.TokenType(ti) switch tt { case chroma.Background, chroma.PreWrapper: continue } class := f.class(tt) if class == "" { continue } styles := css[tt] if _, err := fmt.Fprintf(w, "/* %s */ .%schroma .%s { %s }\n", tt, f.prefix, class, styles); err != nil { return err } } return nil } func (f *Formatter) styleToCSS(style *chroma.Style) map[chroma.TokenType]string { classes := map[chroma.TokenType]string{} bg := style.Get(chroma.Background) // Convert the style. for t := range chroma.StandardTypes { entry := style.Get(t) if t != chroma.Background { entry = entry.Sub(bg) } // Inherit from custom CSS provided by user tokenCategory := t.Category() tokenSubCategory := t.SubCategory() if t != tokenCategory { if css, ok := f.customCSS[tokenCategory]; ok { classes[t] = css } } if tokenCategory != tokenSubCategory { if css, ok := f.customCSS[tokenSubCategory]; ok { classes[t] += css } } // Add custom CSS provided by user if css, ok := f.customCSS[t]; ok { classes[t] += css } if !f.allClasses && entry.IsZero() && classes[t] == `` { continue } styleEntryCSS := StyleEntryToCSS(entry) if styleEntryCSS != `` && classes[t] != `` { styleEntryCSS += `;` } classes[t] = styleEntryCSS + classes[t] } classes[chroma.Background] += `;` + f.tabWidthStyle() classes[chroma.PreWrapper] += classes[chroma.Background] // Make PreWrapper a grid to show highlight style with full width. if len(f.highlightRanges) > 0 && f.customCSS[chroma.PreWrapper] == `` { classes[chroma.PreWrapper] += `display: grid;` } // Make PreWrapper wrap long lines. if f.wrapLongLines { classes[chroma.PreWrapper] += `white-space: pre-wrap; word-break: break-word;` } lineNumbersStyle := `white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;` // All rules begin with default rules followed by user provided rules classes[chroma.Line] = `display: flex;` + classes[chroma.Line] classes[chroma.LineNumbers] = lineNumbersStyle + classes[chroma.LineNumbers] classes[chroma.LineNumbersTable] = lineNumbersStyle + classes[chroma.LineNumbersTable] classes[chroma.LineTable] = "border-spacing: 0; padding: 0; margin: 0; border: 0;" + classes[chroma.LineTable] classes[chroma.LineTableTD] = "vertical-align: top; padding: 0; margin: 0; border: 0;" + classes[chroma.LineTableTD] classes[chroma.LineLink] = "outline: none; text-decoration: none; color: inherit" + classes[chroma.LineLink] return classes } // StyleEntryToCSS converts a chroma.StyleEntry to CSS attributes. func StyleEntryToCSS(e chroma.StyleEntry) string { styles := []string{} if e.Colour.IsSet() { styles = append(styles, "color: "+e.Colour.String()) } if e.Background.IsSet() { styles = append(styles, "background-color: "+e.Background.String()) } if e.Bold == chroma.Yes { styles = append(styles, "font-weight: bold") } if e.Italic == chroma.Yes { styles = append(styles, "font-style: italic") } if e.Underline == chroma.Yes { styles = append(styles, "text-decoration: underline") } return strings.Join(styles, "; ") } // Compress CSS attributes - remove spaces, transform 6-digit colours to 3. func compressStyle(s string) string { parts := strings.Split(s, ";") out := []string{} for _, p := range parts { p = strings.Join(strings.Fields(p), " ") p = strings.Replace(p, ": ", ":", 1) if strings.Contains(p, "#") { c := p[len(p)-6:] if c[0] == c[1] && c[2] == c[3] && c[4] == c[5] { p = p[:len(p)-6] + c[0:1] + c[2:3] + c[4:5] } } out = append(out, p) } return strings.Join(out, ";") } const styleCacheLimit = 32 type styleCacheEntry struct { style *chroma.Style compressed bool cache map[chroma.TokenType]string } type styleCache struct { mu sync.Mutex // LRU cache of compiled (and possibly compressed) styles. This is a slice // because the cache size is small, and a slice is sufficiently fast for // small N. cache []styleCacheEntry f *Formatter } func newStyleCache(f *Formatter) *styleCache { return &styleCache{f: f} } func (l *styleCache) get(style *chroma.Style, compress bool) map[chroma.TokenType]string { l.mu.Lock() defer l.mu.Unlock() // Look for an existing entry. for i := len(l.cache) - 1; i >= 0; i-- { entry := l.cache[i] if entry.style == style && entry.compressed == compress { // Top of the cache, no need to adjust the order. if i == len(l.cache)-1 { return entry.cache } // Move this entry to the end of the LRU copy(l.cache[i:], l.cache[i+1:]) l.cache[len(l.cache)-1] = entry return entry.cache } } // No entry, create one. cached := l.f.styleToCSS(style) if !l.f.Classes { for t, style := range cached { cached[t] = compressStyle(style) } } if compress { for t, style := range cached { cached[t] = compressStyle(style) } } // Evict the oldest entry. if len(l.cache) >= styleCacheLimit { l.cache = l.cache[0:copy(l.cache, l.cache[1:])] } l.cache = append(l.cache, styleCacheEntry{style: style, cache: cached, compressed: compress}) return cached } chroma-2.14.0/formatters/html/html_test.go000066400000000000000000000275771461341362700205640ustar00rootroot00000000000000package html import ( "bytes" "fmt" "io" "regexp" "strings" "testing" assert "github.com/alecthomas/assert/v2" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" ) func TestCompressStyle(t *testing.T) { style := "color: #888888; background-color: #faffff" actual := compressStyle(style) expected := "color:#888;background-color:#faffff" assert.Equal(t, expected, actual) } func BenchmarkHTMLFormatter(b *testing.B) { formatter := New() b.ResetTimer() for i := 0; i < b.N; i++ { it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(`hello world`)\n}\n") assert.NoError(b, err) err = formatter.Format(io.Discard, styles.Fallback, it) assert.NoError(b, err) } } func TestSplitTokensIntoLines(t *testing.T) { in := []chroma.Token{ {Value: "hello", Type: chroma.NameKeyword}, {Value: " world\nwhat?\n", Type: chroma.NameKeyword}, } expected := [][]chroma.Token{ { {Type: chroma.NameKeyword, Value: "hello"}, {Type: chroma.NameKeyword, Value: " world\n"}, }, { {Type: chroma.NameKeyword, Value: "what?\n"}, }, } actual := chroma.SplitTokensIntoLines(in) assert.Equal(t, expected, actual) } func TestFormatterStyleToCSS(t *testing.T) { builder := styles.Get("github").Builder() builder.Add(chroma.LineHighlight, "bg:#ffffcc") builder.Add(chroma.LineNumbers, "bold") style, err := builder.Build() if err != nil { t.Error(err) } formatter := New(WithClasses(true)) css := formatter.styleToCSS(style) for _, s := range css { if strings.HasPrefix(strings.TrimSpace(s), ";") { t.Errorf("rule starts with semicolon - expected valid css rule without semicolon: %v", s) } } } func TestClassPrefix(t *testing.T) { wantPrefix := "some-prefix-" withPrefix := New(WithClasses(true), ClassPrefix(wantPrefix)) noPrefix := New(WithClasses(true)) for st := range chroma.StandardTypes { if noPrefix.class(st) == "" { if got := withPrefix.class(st); got != "" { t.Errorf("Formatter.class(%v): prefix shouldn't be added to empty classes", st) } } else if got := withPrefix.class(st); !strings.HasPrefix(got, wantPrefix) { t.Errorf("Formatter.class(%v): %q should have a class prefix", st, got) } } var styleBuf bytes.Buffer err := withPrefix.WriteCSS(&styleBuf, styles.Fallback) assert.NoError(t, err) if !strings.Contains(styleBuf.String(), ".some-prefix-chroma ") { t.Error("Stylesheets should have a class prefix") } } func TestTableLineNumberNewlines(t *testing.T) { f := New(WithClasses(true), WithLineNumbers(true), LineNumbersInTable(true)) it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(`hello world`)\n}\n") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err) // Don't bother testing the whole output, just verify it's got line numbers // in a
-friendly format.
	// Note: placing the newlines inside the  lets browser selections look
	// better, instead of "skipping" over the span margin.
	assert.Contains(t, buf.String(), `2
3
4
`)
}

func TestTabWidthStyle(t *testing.T) {
	f := New(TabWidth(4), WithClasses(false))
	it, err := lexers.Get("bash").Tokenise(nil, "echo FOO")
	assert.NoError(t, err)

	var buf bytes.Buffer
	err = f.Format(&buf, styles.Fallback, it)
	assert.NoError(t, err)

	assert.True(t, regexp.MustCompile(`echo FOO`).MatchString(buf.String()))
}

func TestWithCustomCSSStyleInheritance(t *testing.T) {
	f := New(WithClasses(false), WithCustomCSS(map[chroma.TokenType]string{
		chroma.String:              `background: blue;`,
		chroma.LiteralStringDouble: `color: tomato;`,
	}))
	it, err := lexers.Get("bash").Tokenise(nil, `echo "FOO"`)
	assert.NoError(t, err)

	var buf bytes.Buffer
	err = f.Format(&buf, styles.Fallback, it)
	assert.NoError(t, err)

	assert.True(t, regexp.MustCompile(` "FOO"`).MatchString(buf.String()))
}

func TestWrapLongLines(t *testing.T) {
	f := New(WithClasses(false), WrapLongLines(true))
	it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(\"hello world\")\n}\n")
	assert.NoError(t, err)

	var buf bytes.Buffer
	err = f.Format(&buf, styles.Fallback, it)
	assert.NoError(t, err)

	assert.True(t, regexp.MustCompile(``)
}

func TestLineNumbers(t *testing.T) {
	f := New(WithClasses(true), WithLineNumbers(true))
	it, err := lexers.Get("bash").Tokenise(nil, "echo FOO")
	assert.NoError(t, err)

	var buf bytes.Buffer
	err = f.Format(&buf, styles.Fallback, it)
	assert.NoError(t, err)

	assert.Contains(t, buf.String(), `1echo FOO`)
}

func TestPreWrapper(t *testing.T) {
	f := New(Standalone(true), WithClasses(true))
	it, err := lexers.Get("bash").Tokenise(nil, "echo FOO")
	assert.NoError(t, err)

	var buf bytes.Buffer
	err = f.Format(&buf, styles.Fallback, it)
	assert.NoError(t, err)

	assert.True(t, regexp.MustCompile("\necho FOO
\n\n").MatchString(buf.String())) assert.True(t, regexp.MustCompile(`\.bg { .+ }`).MatchString(buf.String())) assert.True(t, regexp.MustCompile(`\.chroma { .+ }`).MatchString(buf.String())) } func TestLinkeableLineNumbers(t *testing.T) { f := New(WithClasses(true), WithLineNumbers(true), WithLinkableLineNumbers(true, "line"), WithClasses(false)) it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(\"hello world\")\n}\n") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err) assert.Contains(t, buf.String(), `id="line1">1`) assert.Contains(t, buf.String(), `id="line5">5`) } func TestTableLinkeableLineNumbers(t *testing.T) { f := New(Standalone(true), WithClasses(true), WithLineNumbers(true), LineNumbersInTable(true), WithLinkableLineNumbers(true, "line")) it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(`hello world`)\n}\n") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err) assert.Contains(t, buf.String(), `id="line1">1`) assert.Contains(t, buf.String(), `id="line5">5`) assert.Contains(t, buf.String(), `/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }`, buf.String()) } func TestTableLineNumberSpacing(t *testing.T) { testCases := []struct { baseLineNumber int expectedBuf string }{{ 7, ` 7 8 9 10 11 `, }, { 6, ` 6 7 8 9 10 `, }, { 5, `5 6 7 8 9 `, }} for i, testCase := range testCases { f := New( WithClasses(true), WithLineNumbers(true), LineNumbersInTable(true), BaseLineNumber(testCase.baseLineNumber), ) it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(`hello world`)\n}\n") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err, "Test Case %d", i) assert.Contains(t, buf.String(), testCase.expectedBuf, "Test Case %d", i) } } func TestWithPreWrapper(t *testing.T) { wrapper := preWrapper{ start: func(code bool, styleAttr string) string { return fmt.Sprintf("", styleAttr, code) }, end: func(code bool) string { return "" }, } format := func(f *Formatter) string { it, err := lexers.Get("bash").Tokenise(nil, "echo FOO") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err) return buf.String() } t.Run("Regular", func(t *testing.T) { s := format(New(WithClasses(true))) assert.Equal(t, s, `
echo FOO
`) }) t.Run("PreventSurroundingPre", func(t *testing.T) { s := format(New(PreventSurroundingPre(true), WithClasses(true))) assert.Equal(t, s, `echo FOO`) }) t.Run("InlineCode", func(t *testing.T) { s := format(New(InlineCode(true), WithClasses(true))) assert.Equal(t, s, `echo FOO`) }) t.Run("InlineCode, inline styles", func(t *testing.T) { s := format(New(InlineCode(true))) assert.True(t, regexp.MustCompile(`echo FOO`).MatchString(s)) }) t.Run("Wrapper", func(t *testing.T) { s := format(New(WithPreWrapper(wrapper), WithClasses(true))) assert.Equal(t, s, `echo FOO`) }) t.Run("Wrapper, LineNumbersInTable", func(t *testing.T) { s := format(New(WithPreWrapper(wrapper), WithClasses(true), WithLineNumbers(true), LineNumbersInTable(true))) assert.Equal(t, s, `
1 echo FOO
`) }) } func TestReconfigureOptions(t *testing.T) { options := []Option{ WithClasses(true), WithLineNumbers(true), } options = append(options, WithLineNumbers(false)) f := New(options...) it, err := lexers.Get("bash").Tokenise(nil, "echo FOO") assert.NoError(t, err) var buf bytes.Buffer err = f.Format(&buf, styles.Fallback, it) assert.NoError(t, err) assert.Equal(t, `
echo FOO
`, buf.String()) } func TestWriteCssWithAllClasses(t *testing.T) { formatter := New(WithAllClasses(true)) var buf bytes.Buffer err := formatter.WriteCSS(&buf, styles.Fallback) assert.NoError(t, err) assert.NotContains(t, buf.String(), ".chroma . {", "Generated css doesn't contain invalid css") } func TestStyleCache(t *testing.T) { f := New() assert.True(t, len(styles.Registry) > styleCacheLimit) for _, style := range styles.Registry { var buf bytes.Buffer err := f.WriteCSS(&buf, style) assert.NoError(t, err) } assert.Equal(t, styleCacheLimit, len(f.styleCache.cache)) } chroma-2.14.0/formatters/json.go000066400000000000000000000011261461341362700165440ustar00rootroot00000000000000package formatters import ( "encoding/json" "fmt" "io" "github.com/alecthomas/chroma/v2" ) // JSON formatter outputs the raw token structures as JSON. var JSON = Register("json", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, it chroma.Iterator) error { fmt.Fprintln(w, "[") i := 0 for t := it(); t != chroma.EOF; t = it() { if i > 0 { fmt.Fprintln(w, ",") } i++ bytes, err := json.Marshal(t) if err != nil { return err } if _, err := fmt.Fprint(w, " "+string(bytes)); err != nil { return err } } fmt.Fprintln(w) fmt.Fprintln(w, "]") return nil })) chroma-2.14.0/formatters/svg/000077500000000000000000000000001461341362700160435ustar00rootroot00000000000000chroma-2.14.0/formatters/svg/font_liberation_mono.go000066400000000000000000007206531461341362700226150ustar00rootroot00000000000000// Digitized data copyright (c) 2010 Google Corporation // with Reserved Font Arimo, Tinos and Cousine. // Copyright (c) 2012 Red Hat, Inc. // with Reserved Font Name Liberation. // // This Font Software is licensed under the SIL Open Font License, Version 1.1. // This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL // // ----------------------------------------------------------- // SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 // ----------------------------------------------------------- // // PREAMBLE // The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. // // The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. // // DEFINITIONS // "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. // // "Reserved Font Name" refers to any names specified as such after the copyright statement(s). // // "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). // // "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. // // "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. // // PERMISSION & CONDITIONS // Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: // // 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. // // 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. // // 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. // // 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. // // 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. // // TERMINATION // This license becomes null and void if any of the above conditions are not met. // // DISCLAIMER // THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. package svg // Liberation Mono as base64 encoded woff (SIL Open Font License)[https://en.wikipedia.org/wiki/Liberation_fonts] var FontLiberationMono = `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` chroma-2.14.0/formatters/svg/svg.go000066400000000000000000000140411461341362700171710ustar00rootroot00000000000000// Package svg contains an SVG formatter. package svg import ( "encoding/base64" "errors" "fmt" "io" "os" "path" "strings" "github.com/alecthomas/chroma/v2" ) // Option sets an option of the SVG formatter. type Option func(f *Formatter) // FontFamily sets the font-family. func FontFamily(fontFamily string) Option { return func(f *Formatter) { f.fontFamily = fontFamily } } // EmbedFontFile embeds given font file func EmbedFontFile(fontFamily string, fileName string) (option Option, err error) { var format FontFormat switch path.Ext(fileName) { case ".woff": format = WOFF case ".woff2": format = WOFF2 case ".ttf": format = TRUETYPE default: return nil, errors.New("unexpected font file suffix") } var content []byte if content, err = os.ReadFile(fileName); err == nil { option = EmbedFont(fontFamily, base64.StdEncoding.EncodeToString(content), format) } return } // EmbedFont embeds given base64 encoded font func EmbedFont(fontFamily string, font string, format FontFormat) Option { return func(f *Formatter) { f.fontFamily = fontFamily; f.embeddedFont = font; f.fontFormat = format } } // New SVG formatter. func New(options ...Option) *Formatter { f := &Formatter{fontFamily: "Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace"} for _, option := range options { option(f) } return f } // Formatter that generates SVG. type Formatter struct { fontFamily string embeddedFont string fontFormat FontFormat } func (f *Formatter) Format(w io.Writer, style *chroma.Style, iterator chroma.Iterator) (err error) { f.writeSVG(w, style, iterator.Tokens()) return err } var svgEscaper = strings.NewReplacer( `&`, "&", `<`, "<", `>`, ">", `"`, """, ` `, " ", ` `, "    ", ) // EscapeString escapes special characters. func escapeString(s string) string { return svgEscaper.Replace(s) } func (f *Formatter) writeSVG(w io.Writer, style *chroma.Style, tokens []chroma.Token) { // nolint: gocyclo svgStyles := f.styleToSVG(style) lines := chroma.SplitTokensIntoLines(tokens) fmt.Fprint(w, "\n") fmt.Fprint(w, "\n") fmt.Fprintf(w, "\n", 8*maxLineWidth(lines), 10+int(16.8*float64(len(lines)+1))) if f.embeddedFont != "" { f.writeFontStyle(w) } fmt.Fprintf(w, "\n", style.Get(chroma.Background).Background.String()) fmt.Fprintf(w, "\n", f.fontFamily, style.Get(chroma.Text).Colour.String()) f.writeTokenBackgrounds(w, lines, style) for index, tokens := range lines { fmt.Fprintf(w, "", 1.2*float64(index+1)) for _, token := range tokens { text := escapeString(token.String()) attr := f.styleAttr(svgStyles, token.Type) if attr != "" { text = fmt.Sprintf("%s", attr, text) } fmt.Fprint(w, text) } fmt.Fprint(w, "") } fmt.Fprint(w, "\n\n") fmt.Fprint(w, "\n") } func maxLineWidth(lines [][]chroma.Token) int { maxWidth := 0 for _, tokens := range lines { length := 0 for _, token := range tokens { length += len(strings.ReplaceAll(token.String(), ` `, " ")) } if length > maxWidth { maxWidth = length } } return maxWidth } // There is no background attribute for text in SVG so simply calculate the position and text // of tokens with a background color that differs from the default and add a rectangle for each before // adding the token. func (f *Formatter) writeTokenBackgrounds(w io.Writer, lines [][]chroma.Token, style *chroma.Style) { for index, tokens := range lines { lineLength := 0 for _, token := range tokens { length := len(strings.ReplaceAll(token.String(), ` `, " ")) tokenBackground := style.Get(token.Type).Background if tokenBackground.IsSet() && tokenBackground != style.Get(chroma.Background).Background { fmt.Fprintf(w, "\n", escapeString(token.String()), lineLength, 1.2*float64(index)+0.25, length, style.Get(token.Type).Background.String()) } lineLength += length } } } type FontFormat int // https://transfonter.org/formats const ( WOFF FontFormat = iota WOFF2 TRUETYPE ) var fontFormats = [...]string{ "woff", "woff2", "truetype", } func (f *Formatter) writeFontStyle(w io.Writer) { fmt.Fprintf(w, ``, f.fontFamily, fontFormats[f.fontFormat], f.embeddedFont, fontFormats[f.fontFormat]) } func (f *Formatter) styleAttr(styles map[chroma.TokenType]string, tt chroma.TokenType) string { if _, ok := styles[tt]; !ok { tt = tt.SubCategory() if _, ok := styles[tt]; !ok { tt = tt.Category() if _, ok := styles[tt]; !ok { return "" } } } return styles[tt] } func (f *Formatter) styleToSVG(style *chroma.Style) map[chroma.TokenType]string { converted := map[chroma.TokenType]string{} bg := style.Get(chroma.Background) // Convert the style. for t := range chroma.StandardTypes { entry := style.Get(t) if t != chroma.Background { entry = entry.Sub(bg) } if entry.IsZero() { continue } converted[t] = StyleEntryToSVG(entry) } return converted } // StyleEntryToSVG converts a chroma.StyleEntry to SVG attributes. func StyleEntryToSVG(e chroma.StyleEntry) string { var styles []string if e.Colour.IsSet() { styles = append(styles, "fill=\""+e.Colour.String()+"\"") } if e.Bold == chroma.Yes { styles = append(styles, "font-weight=\"bold\"") } if e.Italic == chroma.Yes { styles = append(styles, "font-style=\"italic\"") } if e.Underline == chroma.Yes { styles = append(styles, "text-decoration=\"underline\"") } return strings.Join(styles, " ") } chroma-2.14.0/formatters/tokens.go000066400000000000000000000006071461341362700171010ustar00rootroot00000000000000package formatters import ( "fmt" "io" "github.com/alecthomas/chroma/v2" ) // Tokens formatter outputs the raw token structures. var Tokens = Register("tokens", chroma.FormatterFunc(func(w io.Writer, s *chroma.Style, it chroma.Iterator) error { for t := it(); t != chroma.EOF; t = it() { if _, err := fmt.Fprintln(w, t.GoString()); err != nil { return err } } return nil })) chroma-2.14.0/formatters/tty_indexed.go000066400000000000000000000527001461341362700201170ustar00rootroot00000000000000package formatters import ( "fmt" "io" "math" "github.com/alecthomas/chroma/v2" ) type ttyTable struct { foreground map[chroma.Colour]string background map[chroma.Colour]string } var c = chroma.MustParseColour var ttyTables = map[int]*ttyTable{ 8: { foreground: map[chroma.Colour]string{ c("#000000"): "\033[30m", c("#7f0000"): "\033[31m", c("#007f00"): "\033[32m", c("#7f7fe0"): "\033[33m", c("#00007f"): "\033[34m", c("#7f007f"): "\033[35m", c("#007f7f"): "\033[36m", c("#e5e5e5"): "\033[37m", c("#555555"): "\033[1m\033[30m", c("#ff0000"): "\033[1m\033[31m", c("#00ff00"): "\033[1m\033[32m", c("#ffff00"): "\033[1m\033[33m", c("#0000ff"): "\033[1m\033[34m", c("#ff00ff"): "\033[1m\033[35m", c("#00ffff"): "\033[1m\033[36m", c("#ffffff"): "\033[1m\033[37m", }, background: map[chroma.Colour]string{ c("#000000"): "\033[40m", c("#7f0000"): "\033[41m", c("#007f00"): "\033[42m", c("#7f7fe0"): "\033[43m", c("#00007f"): "\033[44m", c("#7f007f"): "\033[45m", c("#007f7f"): "\033[46m", c("#e5e5e5"): "\033[47m", c("#555555"): "\033[1m\033[40m", c("#ff0000"): "\033[1m\033[41m", c("#00ff00"): "\033[1m\033[42m", c("#ffff00"): "\033[1m\033[43m", c("#0000ff"): "\033[1m\033[44m", c("#ff00ff"): "\033[1m\033[45m", c("#00ffff"): "\033[1m\033[46m", c("#ffffff"): "\033[1m\033[47m", }, }, 16: { foreground: map[chroma.Colour]string{ c("#000000"): "\033[30m", c("#7f0000"): "\033[31m", c("#007f00"): "\033[32m", c("#7f7fe0"): "\033[33m", c("#00007f"): "\033[34m", c("#7f007f"): "\033[35m", c("#007f7f"): "\033[36m", c("#e5e5e5"): "\033[37m", c("#555555"): "\033[90m", c("#ff0000"): "\033[91m", c("#00ff00"): "\033[92m", c("#ffff00"): "\033[93m", c("#0000ff"): "\033[94m", c("#ff00ff"): "\033[95m", c("#00ffff"): "\033[96m", c("#ffffff"): "\033[97m", }, background: map[chroma.Colour]string{ c("#000000"): "\033[40m", c("#7f0000"): "\033[41m", c("#007f00"): "\033[42m", c("#7f7fe0"): "\033[43m", c("#00007f"): "\033[44m", c("#7f007f"): "\033[45m", c("#007f7f"): "\033[46m", c("#e5e5e5"): "\033[47m", c("#555555"): "\033[100m", c("#ff0000"): "\033[101m", c("#00ff00"): "\033[102m", c("#ffff00"): "\033[103m", c("#0000ff"): "\033[104m", c("#ff00ff"): "\033[105m", c("#00ffff"): "\033[106m", c("#ffffff"): "\033[107m", }, }, 256: { foreground: map[chroma.Colour]string{ c("#000000"): "\033[38;5;0m", c("#800000"): "\033[38;5;1m", c("#008000"): "\033[38;5;2m", c("#808000"): "\033[38;5;3m", c("#000080"): "\033[38;5;4m", c("#800080"): "\033[38;5;5m", c("#008080"): "\033[38;5;6m", c("#c0c0c0"): "\033[38;5;7m", c("#808080"): "\033[38;5;8m", c("#ff0000"): "\033[38;5;9m", c("#00ff00"): "\033[38;5;10m", c("#ffff00"): "\033[38;5;11m", c("#0000ff"): "\033[38;5;12m", c("#ff00ff"): "\033[38;5;13m", c("#00ffff"): "\033[38;5;14m", c("#ffffff"): "\033[38;5;15m", c("#000000"): "\033[38;5;16m", c("#00005f"): "\033[38;5;17m", c("#000087"): "\033[38;5;18m", c("#0000af"): "\033[38;5;19m", c("#0000d7"): "\033[38;5;20m", c("#0000ff"): "\033[38;5;21m", c("#005f00"): "\033[38;5;22m", c("#005f5f"): "\033[38;5;23m", c("#005f87"): "\033[38;5;24m", c("#005faf"): "\033[38;5;25m", c("#005fd7"): "\033[38;5;26m", c("#005fff"): "\033[38;5;27m", c("#008700"): "\033[38;5;28m", c("#00875f"): "\033[38;5;29m", c("#008787"): "\033[38;5;30m", c("#0087af"): "\033[38;5;31m", c("#0087d7"): "\033[38;5;32m", c("#0087ff"): "\033[38;5;33m", c("#00af00"): "\033[38;5;34m", c("#00af5f"): "\033[38;5;35m", c("#00af87"): "\033[38;5;36m", c("#00afaf"): "\033[38;5;37m", c("#00afd7"): "\033[38;5;38m", c("#00afff"): "\033[38;5;39m", c("#00d700"): "\033[38;5;40m", c("#00d75f"): "\033[38;5;41m", c("#00d787"): "\033[38;5;42m", c("#00d7af"): "\033[38;5;43m", c("#00d7d7"): "\033[38;5;44m", c("#00d7ff"): "\033[38;5;45m", c("#00ff00"): "\033[38;5;46m", c("#00ff5f"): "\033[38;5;47m", c("#00ff87"): "\033[38;5;48m", c("#00ffaf"): "\033[38;5;49m", c("#00ffd7"): "\033[38;5;50m", c("#00ffff"): "\033[38;5;51m", c("#5f0000"): "\033[38;5;52m", c("#5f005f"): "\033[38;5;53m", c("#5f0087"): "\033[38;5;54m", c("#5f00af"): "\033[38;5;55m", c("#5f00d7"): "\033[38;5;56m", c("#5f00ff"): "\033[38;5;57m", c("#5f5f00"): "\033[38;5;58m", c("#5f5f5f"): "\033[38;5;59m", c("#5f5f87"): "\033[38;5;60m", c("#5f5faf"): "\033[38;5;61m", c("#5f5fd7"): "\033[38;5;62m", c("#5f5fff"): "\033[38;5;63m", c("#5f8700"): "\033[38;5;64m", c("#5f875f"): "\033[38;5;65m", c("#5f8787"): "\033[38;5;66m", c("#5f87af"): "\033[38;5;67m", c("#5f87d7"): "\033[38;5;68m", c("#5f87ff"): "\033[38;5;69m", c("#5faf00"): "\033[38;5;70m", c("#5faf5f"): "\033[38;5;71m", c("#5faf87"): "\033[38;5;72m", c("#5fafaf"): "\033[38;5;73m", c("#5fafd7"): "\033[38;5;74m", c("#5fafff"): "\033[38;5;75m", c("#5fd700"): "\033[38;5;76m", c("#5fd75f"): "\033[38;5;77m", c("#5fd787"): "\033[38;5;78m", c("#5fd7af"): "\033[38;5;79m", c("#5fd7d7"): "\033[38;5;80m", c("#5fd7ff"): "\033[38;5;81m", c("#5fff00"): "\033[38;5;82m", c("#5fff5f"): "\033[38;5;83m", c("#5fff87"): "\033[38;5;84m", c("#5fffaf"): "\033[38;5;85m", c("#5fffd7"): "\033[38;5;86m", c("#5fffff"): "\033[38;5;87m", c("#870000"): "\033[38;5;88m", c("#87005f"): "\033[38;5;89m", c("#870087"): "\033[38;5;90m", c("#8700af"): "\033[38;5;91m", c("#8700d7"): "\033[38;5;92m", c("#8700ff"): "\033[38;5;93m", c("#875f00"): "\033[38;5;94m", c("#875f5f"): "\033[38;5;95m", c("#875f87"): "\033[38;5;96m", c("#875faf"): "\033[38;5;97m", c("#875fd7"): "\033[38;5;98m", c("#875fff"): "\033[38;5;99m", c("#878700"): "\033[38;5;100m", c("#87875f"): "\033[38;5;101m", c("#878787"): "\033[38;5;102m", c("#8787af"): "\033[38;5;103m", c("#8787d7"): "\033[38;5;104m", c("#8787ff"): "\033[38;5;105m", c("#87af00"): "\033[38;5;106m", c("#87af5f"): "\033[38;5;107m", c("#87af87"): "\033[38;5;108m", c("#87afaf"): "\033[38;5;109m", c("#87afd7"): "\033[38;5;110m", c("#87afff"): "\033[38;5;111m", c("#87d700"): "\033[38;5;112m", c("#87d75f"): "\033[38;5;113m", c("#87d787"): "\033[38;5;114m", c("#87d7af"): "\033[38;5;115m", c("#87d7d7"): "\033[38;5;116m", c("#87d7ff"): "\033[38;5;117m", c("#87ff00"): "\033[38;5;118m", c("#87ff5f"): "\033[38;5;119m", c("#87ff87"): "\033[38;5;120m", c("#87ffaf"): "\033[38;5;121m", c("#87ffd7"): "\033[38;5;122m", c("#87ffff"): "\033[38;5;123m", c("#af0000"): "\033[38;5;124m", c("#af005f"): "\033[38;5;125m", c("#af0087"): "\033[38;5;126m", c("#af00af"): "\033[38;5;127m", c("#af00d7"): "\033[38;5;128m", c("#af00ff"): "\033[38;5;129m", c("#af5f00"): "\033[38;5;130m", c("#af5f5f"): "\033[38;5;131m", c("#af5f87"): "\033[38;5;132m", c("#af5faf"): "\033[38;5;133m", c("#af5fd7"): "\033[38;5;134m", c("#af5fff"): "\033[38;5;135m", c("#af8700"): "\033[38;5;136m", c("#af875f"): "\033[38;5;137m", c("#af8787"): "\033[38;5;138m", c("#af87af"): "\033[38;5;139m", c("#af87d7"): "\033[38;5;140m", c("#af87ff"): "\033[38;5;141m", c("#afaf00"): "\033[38;5;142m", c("#afaf5f"): "\033[38;5;143m", c("#afaf87"): "\033[38;5;144m", c("#afafaf"): "\033[38;5;145m", c("#afafd7"): "\033[38;5;146m", c("#afafff"): "\033[38;5;147m", c("#afd700"): "\033[38;5;148m", c("#afd75f"): "\033[38;5;149m", c("#afd787"): "\033[38;5;150m", c("#afd7af"): "\033[38;5;151m", c("#afd7d7"): "\033[38;5;152m", c("#afd7ff"): "\033[38;5;153m", c("#afff00"): "\033[38;5;154m", c("#afff5f"): "\033[38;5;155m", c("#afff87"): "\033[38;5;156m", c("#afffaf"): "\033[38;5;157m", c("#afffd7"): "\033[38;5;158m", c("#afffff"): "\033[38;5;159m", c("#d70000"): "\033[38;5;160m", c("#d7005f"): "\033[38;5;161m", c("#d70087"): "\033[38;5;162m", c("#d700af"): "\033[38;5;163m", c("#d700d7"): "\033[38;5;164m", c("#d700ff"): "\033[38;5;165m", c("#d75f00"): "\033[38;5;166m", c("#d75f5f"): "\033[38;5;167m", c("#d75f87"): "\033[38;5;168m", c("#d75faf"): "\033[38;5;169m", c("#d75fd7"): "\033[38;5;170m", c("#d75fff"): "\033[38;5;171m", c("#d78700"): "\033[38;5;172m", c("#d7875f"): "\033[38;5;173m", c("#d78787"): "\033[38;5;174m", c("#d787af"): "\033[38;5;175m", c("#d787d7"): "\033[38;5;176m", c("#d787ff"): "\033[38;5;177m", c("#d7af00"): "\033[38;5;178m", c("#d7af5f"): "\033[38;5;179m", c("#d7af87"): "\033[38;5;180m", c("#d7afaf"): "\033[38;5;181m", c("#d7afd7"): "\033[38;5;182m", c("#d7afff"): "\033[38;5;183m", c("#d7d700"): "\033[38;5;184m", c("#d7d75f"): "\033[38;5;185m", c("#d7d787"): "\033[38;5;186m", c("#d7d7af"): "\033[38;5;187m", c("#d7d7d7"): "\033[38;5;188m", c("#d7d7ff"): "\033[38;5;189m", c("#d7ff00"): "\033[38;5;190m", c("#d7ff5f"): "\033[38;5;191m", c("#d7ff87"): "\033[38;5;192m", c("#d7ffaf"): "\033[38;5;193m", c("#d7ffd7"): "\033[38;5;194m", c("#d7ffff"): "\033[38;5;195m", c("#ff0000"): "\033[38;5;196m", c("#ff005f"): "\033[38;5;197m", c("#ff0087"): "\033[38;5;198m", c("#ff00af"): "\033[38;5;199m", c("#ff00d7"): "\033[38;5;200m", c("#ff00ff"): "\033[38;5;201m", c("#ff5f00"): "\033[38;5;202m", c("#ff5f5f"): "\033[38;5;203m", c("#ff5f87"): "\033[38;5;204m", c("#ff5faf"): "\033[38;5;205m", c("#ff5fd7"): "\033[38;5;206m", c("#ff5fff"): "\033[38;5;207m", c("#ff8700"): "\033[38;5;208m", c("#ff875f"): "\033[38;5;209m", c("#ff8787"): "\033[38;5;210m", c("#ff87af"): "\033[38;5;211m", c("#ff87d7"): "\033[38;5;212m", c("#ff87ff"): "\033[38;5;213m", c("#ffaf00"): "\033[38;5;214m", c("#ffaf5f"): "\033[38;5;215m", c("#ffaf87"): "\033[38;5;216m", c("#ffafaf"): "\033[38;5;217m", c("#ffafd7"): "\033[38;5;218m", c("#ffafff"): "\033[38;5;219m", c("#ffd700"): "\033[38;5;220m", c("#ffd75f"): "\033[38;5;221m", c("#ffd787"): "\033[38;5;222m", c("#ffd7af"): "\033[38;5;223m", c("#ffd7d7"): "\033[38;5;224m", c("#ffd7ff"): "\033[38;5;225m", c("#ffff00"): "\033[38;5;226m", c("#ffff5f"): "\033[38;5;227m", c("#ffff87"): "\033[38;5;228m", c("#ffffaf"): "\033[38;5;229m", c("#ffffd7"): "\033[38;5;230m", c("#ffffff"): "\033[38;5;231m", c("#080808"): "\033[38;5;232m", c("#121212"): "\033[38;5;233m", c("#1c1c1c"): "\033[38;5;234m", c("#262626"): "\033[38;5;235m", c("#303030"): "\033[38;5;236m", c("#3a3a3a"): "\033[38;5;237m", c("#444444"): "\033[38;5;238m", c("#4e4e4e"): "\033[38;5;239m", c("#585858"): "\033[38;5;240m", c("#626262"): "\033[38;5;241m", c("#6c6c6c"): "\033[38;5;242m", c("#767676"): "\033[38;5;243m", c("#808080"): "\033[38;5;244m", c("#8a8a8a"): "\033[38;5;245m", c("#949494"): "\033[38;5;246m", c("#9e9e9e"): "\033[38;5;247m", c("#a8a8a8"): "\033[38;5;248m", c("#b2b2b2"): "\033[38;5;249m", c("#bcbcbc"): "\033[38;5;250m", c("#c6c6c6"): "\033[38;5;251m", c("#d0d0d0"): "\033[38;5;252m", c("#dadada"): "\033[38;5;253m", c("#e4e4e4"): "\033[38;5;254m", c("#eeeeee"): "\033[38;5;255m", }, background: map[chroma.Colour]string{ c("#000000"): "\033[48;5;0m", c("#800000"): "\033[48;5;1m", c("#008000"): "\033[48;5;2m", c("#808000"): "\033[48;5;3m", c("#000080"): "\033[48;5;4m", c("#800080"): "\033[48;5;5m", c("#008080"): "\033[48;5;6m", c("#c0c0c0"): "\033[48;5;7m", c("#808080"): "\033[48;5;8m", c("#ff0000"): "\033[48;5;9m", c("#00ff00"): "\033[48;5;10m", c("#ffff00"): "\033[48;5;11m", c("#0000ff"): "\033[48;5;12m", c("#ff00ff"): "\033[48;5;13m", c("#00ffff"): "\033[48;5;14m", c("#ffffff"): "\033[48;5;15m", c("#000000"): "\033[48;5;16m", c("#00005f"): "\033[48;5;17m", c("#000087"): "\033[48;5;18m", c("#0000af"): "\033[48;5;19m", c("#0000d7"): "\033[48;5;20m", c("#0000ff"): "\033[48;5;21m", c("#005f00"): "\033[48;5;22m", c("#005f5f"): "\033[48;5;23m", c("#005f87"): "\033[48;5;24m", c("#005faf"): "\033[48;5;25m", c("#005fd7"): "\033[48;5;26m", c("#005fff"): "\033[48;5;27m", c("#008700"): "\033[48;5;28m", c("#00875f"): "\033[48;5;29m", c("#008787"): "\033[48;5;30m", c("#0087af"): "\033[48;5;31m", c("#0087d7"): "\033[48;5;32m", c("#0087ff"): "\033[48;5;33m", c("#00af00"): "\033[48;5;34m", c("#00af5f"): "\033[48;5;35m", c("#00af87"): "\033[48;5;36m", c("#00afaf"): "\033[48;5;37m", c("#00afd7"): "\033[48;5;38m", c("#00afff"): "\033[48;5;39m", c("#00d700"): "\033[48;5;40m", c("#00d75f"): "\033[48;5;41m", c("#00d787"): "\033[48;5;42m", c("#00d7af"): "\033[48;5;43m", c("#00d7d7"): "\033[48;5;44m", c("#00d7ff"): "\033[48;5;45m", c("#00ff00"): "\033[48;5;46m", c("#00ff5f"): "\033[48;5;47m", c("#00ff87"): "\033[48;5;48m", c("#00ffaf"): "\033[48;5;49m", c("#00ffd7"): "\033[48;5;50m", c("#00ffff"): "\033[48;5;51m", c("#5f0000"): "\033[48;5;52m", c("#5f005f"): "\033[48;5;53m", c("#5f0087"): "\033[48;5;54m", c("#5f00af"): "\033[48;5;55m", c("#5f00d7"): "\033[48;5;56m", c("#5f00ff"): "\033[48;5;57m", c("#5f5f00"): "\033[48;5;58m", c("#5f5f5f"): "\033[48;5;59m", c("#5f5f87"): "\033[48;5;60m", c("#5f5faf"): "\033[48;5;61m", c("#5f5fd7"): "\033[48;5;62m", c("#5f5fff"): "\033[48;5;63m", c("#5f8700"): "\033[48;5;64m", c("#5f875f"): "\033[48;5;65m", c("#5f8787"): "\033[48;5;66m", c("#5f87af"): "\033[48;5;67m", c("#5f87d7"): "\033[48;5;68m", c("#5f87ff"): "\033[48;5;69m", c("#5faf00"): "\033[48;5;70m", c("#5faf5f"): "\033[48;5;71m", c("#5faf87"): "\033[48;5;72m", c("#5fafaf"): "\033[48;5;73m", c("#5fafd7"): "\033[48;5;74m", c("#5fafff"): "\033[48;5;75m", c("#5fd700"): "\033[48;5;76m", c("#5fd75f"): "\033[48;5;77m", c("#5fd787"): "\033[48;5;78m", c("#5fd7af"): "\033[48;5;79m", c("#5fd7d7"): "\033[48;5;80m", c("#5fd7ff"): "\033[48;5;81m", c("#5fff00"): "\033[48;5;82m", c("#5fff5f"): "\033[48;5;83m", c("#5fff87"): "\033[48;5;84m", c("#5fffaf"): "\033[48;5;85m", c("#5fffd7"): "\033[48;5;86m", c("#5fffff"): "\033[48;5;87m", c("#870000"): "\033[48;5;88m", c("#87005f"): "\033[48;5;89m", c("#870087"): "\033[48;5;90m", c("#8700af"): "\033[48;5;91m", c("#8700d7"): "\033[48;5;92m", c("#8700ff"): "\033[48;5;93m", c("#875f00"): "\033[48;5;94m", c("#875f5f"): "\033[48;5;95m", c("#875f87"): "\033[48;5;96m", c("#875faf"): "\033[48;5;97m", c("#875fd7"): "\033[48;5;98m", c("#875fff"): "\033[48;5;99m", c("#878700"): "\033[48;5;100m", c("#87875f"): "\033[48;5;101m", c("#878787"): "\033[48;5;102m", c("#8787af"): "\033[48;5;103m", c("#8787d7"): "\033[48;5;104m", c("#8787ff"): "\033[48;5;105m", c("#87af00"): "\033[48;5;106m", c("#87af5f"): "\033[48;5;107m", c("#87af87"): "\033[48;5;108m", c("#87afaf"): "\033[48;5;109m", c("#87afd7"): "\033[48;5;110m", c("#87afff"): "\033[48;5;111m", c("#87d700"): "\033[48;5;112m", c("#87d75f"): "\033[48;5;113m", c("#87d787"): "\033[48;5;114m", c("#87d7af"): "\033[48;5;115m", c("#87d7d7"): "\033[48;5;116m", c("#87d7ff"): "\033[48;5;117m", c("#87ff00"): "\033[48;5;118m", c("#87ff5f"): "\033[48;5;119m", c("#87ff87"): "\033[48;5;120m", c("#87ffaf"): "\033[48;5;121m", c("#87ffd7"): "\033[48;5;122m", c("#87ffff"): "\033[48;5;123m", c("#af0000"): "\033[48;5;124m", c("#af005f"): "\033[48;5;125m", c("#af0087"): "\033[48;5;126m", c("#af00af"): "\033[48;5;127m", c("#af00d7"): "\033[48;5;128m", c("#af00ff"): "\033[48;5;129m", c("#af5f00"): "\033[48;5;130m", c("#af5f5f"): "\033[48;5;131m", c("#af5f87"): "\033[48;5;132m", c("#af5faf"): "\033[48;5;133m", c("#af5fd7"): "\033[48;5;134m", c("#af5fff"): "\033[48;5;135m", c("#af8700"): "\033[48;5;136m", c("#af875f"): "\033[48;5;137m", c("#af8787"): "\033[48;5;138m", c("#af87af"): "\033[48;5;139m", c("#af87d7"): "\033[48;5;140m", c("#af87ff"): "\033[48;5;141m", c("#afaf00"): "\033[48;5;142m", c("#afaf5f"): "\033[48;5;143m", c("#afaf87"): "\033[48;5;144m", c("#afafaf"): "\033[48;5;145m", c("#afafd7"): "\033[48;5;146m", c("#afafff"): "\033[48;5;147m", c("#afd700"): "\033[48;5;148m", c("#afd75f"): "\033[48;5;149m", c("#afd787"): "\033[48;5;150m", c("#afd7af"): "\033[48;5;151m", c("#afd7d7"): "\033[48;5;152m", c("#afd7ff"): "\033[48;5;153m", c("#afff00"): "\033[48;5;154m", c("#afff5f"): "\033[48;5;155m", c("#afff87"): "\033[48;5;156m", c("#afffaf"): "\033[48;5;157m", c("#afffd7"): "\033[48;5;158m", c("#afffff"): "\033[48;5;159m", c("#d70000"): "\033[48;5;160m", c("#d7005f"): "\033[48;5;161m", c("#d70087"): "\033[48;5;162m", c("#d700af"): "\033[48;5;163m", c("#d700d7"): "\033[48;5;164m", c("#d700ff"): "\033[48;5;165m", c("#d75f00"): "\033[48;5;166m", c("#d75f5f"): "\033[48;5;167m", c("#d75f87"): "\033[48;5;168m", c("#d75faf"): "\033[48;5;169m", c("#d75fd7"): "\033[48;5;170m", c("#d75fff"): "\033[48;5;171m", c("#d78700"): "\033[48;5;172m", c("#d7875f"): "\033[48;5;173m", c("#d78787"): "\033[48;5;174m", c("#d787af"): "\033[48;5;175m", c("#d787d7"): "\033[48;5;176m", c("#d787ff"): "\033[48;5;177m", c("#d7af00"): "\033[48;5;178m", c("#d7af5f"): "\033[48;5;179m", c("#d7af87"): "\033[48;5;180m", c("#d7afaf"): "\033[48;5;181m", c("#d7afd7"): "\033[48;5;182m", c("#d7afff"): "\033[48;5;183m", c("#d7d700"): "\033[48;5;184m", c("#d7d75f"): "\033[48;5;185m", c("#d7d787"): "\033[48;5;186m", c("#d7d7af"): "\033[48;5;187m", c("#d7d7d7"): "\033[48;5;188m", c("#d7d7ff"): "\033[48;5;189m", c("#d7ff00"): "\033[48;5;190m", c("#d7ff5f"): "\033[48;5;191m", c("#d7ff87"): "\033[48;5;192m", c("#d7ffaf"): "\033[48;5;193m", c("#d7ffd7"): "\033[48;5;194m", c("#d7ffff"): "\033[48;5;195m", c("#ff0000"): "\033[48;5;196m", c("#ff005f"): "\033[48;5;197m", c("#ff0087"): "\033[48;5;198m", c("#ff00af"): "\033[48;5;199m", c("#ff00d7"): "\033[48;5;200m", c("#ff00ff"): "\033[48;5;201m", c("#ff5f00"): "\033[48;5;202m", c("#ff5f5f"): "\033[48;5;203m", c("#ff5f87"): "\033[48;5;204m", c("#ff5faf"): "\033[48;5;205m", c("#ff5fd7"): "\033[48;5;206m", c("#ff5fff"): "\033[48;5;207m", c("#ff8700"): "\033[48;5;208m", c("#ff875f"): "\033[48;5;209m", c("#ff8787"): "\033[48;5;210m", c("#ff87af"): "\033[48;5;211m", c("#ff87d7"): "\033[48;5;212m", c("#ff87ff"): "\033[48;5;213m", c("#ffaf00"): "\033[48;5;214m", c("#ffaf5f"): "\033[48;5;215m", c("#ffaf87"): "\033[48;5;216m", c("#ffafaf"): "\033[48;5;217m", c("#ffafd7"): "\033[48;5;218m", c("#ffafff"): "\033[48;5;219m", c("#ffd700"): "\033[48;5;220m", c("#ffd75f"): "\033[48;5;221m", c("#ffd787"): "\033[48;5;222m", c("#ffd7af"): "\033[48;5;223m", c("#ffd7d7"): "\033[48;5;224m", c("#ffd7ff"): "\033[48;5;225m", c("#ffff00"): "\033[48;5;226m", c("#ffff5f"): "\033[48;5;227m", c("#ffff87"): "\033[48;5;228m", c("#ffffaf"): "\033[48;5;229m", c("#ffffd7"): "\033[48;5;230m", c("#ffffff"): "\033[48;5;231m", c("#080808"): "\033[48;5;232m", c("#121212"): "\033[48;5;233m", c("#1c1c1c"): "\033[48;5;234m", c("#262626"): "\033[48;5;235m", c("#303030"): "\033[48;5;236m", c("#3a3a3a"): "\033[48;5;237m", c("#444444"): "\033[48;5;238m", c("#4e4e4e"): "\033[48;5;239m", c("#585858"): "\033[48;5;240m", c("#626262"): "\033[48;5;241m", c("#6c6c6c"): "\033[48;5;242m", c("#767676"): "\033[48;5;243m", c("#808080"): "\033[48;5;244m", c("#8a8a8a"): "\033[48;5;245m", c("#949494"): "\033[48;5;246m", c("#9e9e9e"): "\033[48;5;247m", c("#a8a8a8"): "\033[48;5;248m", c("#b2b2b2"): "\033[48;5;249m", c("#bcbcbc"): "\033[48;5;250m", c("#c6c6c6"): "\033[48;5;251m", c("#d0d0d0"): "\033[48;5;252m", c("#dadada"): "\033[48;5;253m", c("#e4e4e4"): "\033[48;5;254m", c("#eeeeee"): "\033[48;5;255m", }, }, } func entryToEscapeSequence(table *ttyTable, entry chroma.StyleEntry) string { out := "" if entry.Bold == chroma.Yes { out += "\033[1m" } if entry.Underline == chroma.Yes { out += "\033[4m" } if entry.Italic == chroma.Yes { out += "\033[3m" } if entry.Colour.IsSet() { out += table.foreground[findClosest(table, entry.Colour)] } if entry.Background.IsSet() { out += table.background[findClosest(table, entry.Background)] } return out } func findClosest(table *ttyTable, seeking chroma.Colour) chroma.Colour { closestColour := chroma.Colour(0) closest := float64(math.MaxFloat64) for colour := range table.foreground { distance := colour.Distance(seeking) if distance < closest { closest = distance closestColour = colour } } return closestColour } func styleToEscapeSequence(table *ttyTable, style *chroma.Style) map[chroma.TokenType]string { style = clearBackground(style) out := map[chroma.TokenType]string{} for _, ttype := range style.Types() { entry := style.Get(ttype) out[ttype] = entryToEscapeSequence(table, entry) } return out } // Clear the background colour. func clearBackground(style *chroma.Style) *chroma.Style { builder := style.Builder() bg := builder.Get(chroma.Background) bg.Background = 0 bg.NoInherit = true builder.AddEntry(chroma.Background, bg) style, _ = builder.Build() return style } type indexedTTYFormatter struct { table *ttyTable } func (c *indexedTTYFormatter) Format(w io.Writer, style *chroma.Style, it chroma.Iterator) (err error) { theme := styleToEscapeSequence(c.table, style) for token := it(); token != chroma.EOF; token = it() { clr, ok := theme[token.Type] // This search mimics how styles.Get() is used in tty_truecolour.go. if !ok { clr, ok = theme[token.Type.SubCategory()] if !ok { clr, ok = theme[token.Type.Category()] if !ok { clr, ok = theme[chroma.Text] if !ok { clr = theme[chroma.Background] } } } } if clr != "" { fmt.Fprint(w, clr) } fmt.Fprint(w, token.Value) if clr != "" { fmt.Fprintf(w, "\033[0m") } } return nil } // TTY is an 8-colour terminal formatter. // // The Lab colour space is used to map RGB values to the most appropriate index colour. var TTY = Register("terminal", &indexedTTYFormatter{ttyTables[8]}) // TTY8 is an 8-colour terminal formatter. // // The Lab colour space is used to map RGB values to the most appropriate index colour. var TTY8 = Register("terminal8", &indexedTTYFormatter{ttyTables[8]}) // TTY16 is a 16-colour terminal formatter. // // It uses \033[3xm for normal colours and \033[90Xm for bright colours. // // The Lab colour space is used to map RGB values to the most appropriate index colour. var TTY16 = Register("terminal16", &indexedTTYFormatter{ttyTables[16]}) // TTY256 is a 256-colour terminal formatter. // // The Lab colour space is used to map RGB values to the most appropriate index colour. var TTY256 = Register("terminal256", &indexedTTYFormatter{ttyTables[256]}) chroma-2.14.0/formatters/tty_indexed_test.go000066400000000000000000000015431461341362700211550ustar00rootroot00000000000000package formatters import ( "strings" "testing" assert "github.com/alecthomas/assert/v2" "github.com/alecthomas/chroma/v2" ) func TestClosestColour(t *testing.T) { actual := findClosest(ttyTables[256], chroma.MustParseColour("#e06c75")) assert.Equal(t, chroma.MustParseColour("#d75f87"), actual) } func TestNoneColour(t *testing.T) { formatter := TTY256 tokenType := chroma.None style, err := chroma.NewStyle("test", chroma.StyleEntries{ chroma.Background: "#D0ab1e", }) assert.NoError(t, err) stringBuilder := strings.Builder{} err = formatter.Format(&stringBuilder, style, chroma.Literator(chroma.Token{ Type: tokenType, Value: "WORD", })) assert.NoError(t, err) // "178" = #d7af00 approximates #d0ab1e // // 178 color ref: https://jonasjacek.github.io/colors/ assert.Equal(t, "\033[38;5;178mWORD\033[0m", stringBuilder.String()) } chroma-2.14.0/formatters/tty_truecolour.go000066400000000000000000000020521461341362700206750ustar00rootroot00000000000000package formatters import ( "fmt" "io" "github.com/alecthomas/chroma/v2" ) // TTY16m is a true-colour terminal formatter. var TTY16m = Register("terminal16m", chroma.FormatterFunc(trueColourFormatter)) func trueColourFormatter(w io.Writer, style *chroma.Style, it chroma.Iterator) error { style = clearBackground(style) for token := it(); token != chroma.EOF; token = it() { entry := style.Get(token.Type) if !entry.IsZero() { out := "" if entry.Bold == chroma.Yes { out += "\033[1m" } if entry.Underline == chroma.Yes { out += "\033[4m" } if entry.Italic == chroma.Yes { out += "\033[3m" } if entry.Colour.IsSet() { out += fmt.Sprintf("\033[38;2;%d;%d;%dm", entry.Colour.Red(), entry.Colour.Green(), entry.Colour.Blue()) } if entry.Background.IsSet() { out += fmt.Sprintf("\033[48;2;%d;%d;%dm", entry.Background.Red(), entry.Background.Green(), entry.Background.Blue()) } fmt.Fprint(w, out) } fmt.Fprint(w, token.Value) if !entry.IsZero() { fmt.Fprint(w, "\033[0m") } } return nil } chroma-2.14.0/go.mod000066400000000000000000000003451461341362700141660ustar00rootroot00000000000000module github.com/alecthomas/chroma/v2 go 1.19 require ( github.com/alecthomas/assert/v2 v2.7.0 github.com/alecthomas/repr v0.4.0 github.com/dlclark/regexp2 v1.11.0 ) require github.com/hexops/gotextdiff v1.0.3 // indirect chroma-2.14.0/go.sum000066400000000000000000000036231461341362700142150ustar00rootroot00000000000000github.com/alecthomas/assert/v2 v2.2.1 h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink= github.com/alecthomas/assert/v2 v2.2.1/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/assert/v2 v2.4.1 h1:mwPZod/d35nlaCppr6sFP0rbCL05WH9fIo7lvsf47zo= github.com/alecthomas/assert/v2 v2.4.1/go.mod h1:fw5suVxB+wfYJ3291t0hRTqtGzFYdSwstnRQdaQx2DM= github.com/alecthomas/assert/v2 v2.5.0 h1:OJKYg53BQx06/bMRBSPDCO49CbCDNiUQXwdoNrt6x5w= github.com/alecthomas/assert/v2 v2.5.0/go.mod h1:fw5suVxB+wfYJ3291t0hRTqtGzFYdSwstnRQdaQx2DM= github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU= github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/repr v0.3.0 h1:NeYzUPfjjlqHY4KtzgKJiWd6sVq2eNUPTi34PiFGjY8= github.com/alecthomas/repr v0.3.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= chroma-2.14.0/iterator.go000066400000000000000000000033441461341362700152420ustar00rootroot00000000000000package chroma import "strings" // An Iterator across tokens. // // EOF will be returned at the end of the Token stream. // // If an error occurs within an Iterator, it may propagate this in a panic. Formatters should recover. type Iterator func() Token // Tokens consumes all tokens from the iterator and returns them as a slice. func (i Iterator) Tokens() []Token { var out []Token for t := i(); t != EOF; t = i() { out = append(out, t) } return out } // Concaterator concatenates tokens from a series of iterators. func Concaterator(iterators ...Iterator) Iterator { return func() Token { for len(iterators) > 0 { t := iterators[0]() if t != EOF { return t } iterators = iterators[1:] } return EOF } } // Literator converts a sequence of literal Tokens into an Iterator. func Literator(tokens ...Token) Iterator { return func() Token { if len(tokens) == 0 { return EOF } token := tokens[0] tokens = tokens[1:] return token } } // SplitTokensIntoLines splits tokens containing newlines in two. func SplitTokensIntoLines(tokens []Token) (out [][]Token) { var line []Token // nolint: prealloc for _, token := range tokens { for strings.Contains(token.Value, "\n") { parts := strings.SplitAfterN(token.Value, "\n", 2) // Token becomes the tail. token.Value = parts[1] // Append the head to the line and flush the line. clone := token.Clone() clone.Value = parts[0] line = append(line, clone) out = append(out, line) line = nil } line = append(line, token) } if len(line) > 0 { out = append(out, line) } // Strip empty trailing token line. if len(out) > 0 { last := out[len(out)-1] if len(last) == 1 && last[0].Value == "" { out = out[:len(out)-1] } } return } chroma-2.14.0/lexer.go000066400000000000000000000106721461341362700145320ustar00rootroot00000000000000package chroma import ( "fmt" "strings" ) var ( defaultOptions = &TokeniseOptions{ State: "root", EnsureLF: true, } ) // Config for a lexer. type Config struct { // Name of the lexer. Name string `xml:"name,omitempty"` // Shortcuts for the lexer Aliases []string `xml:"alias,omitempty"` // File name globs Filenames []string `xml:"filename,omitempty"` // Secondary file name globs AliasFilenames []string `xml:"alias_filename,omitempty"` // MIME types MimeTypes []string `xml:"mime_type,omitempty"` // Regex matching is case-insensitive. CaseInsensitive bool `xml:"case_insensitive,omitempty"` // Regex matches all characters. DotAll bool `xml:"dot_all,omitempty"` // Regex does not match across lines ($ matches EOL). // // Defaults to multiline. NotMultiline bool `xml:"not_multiline,omitempty"` // Don't strip leading and trailing newlines from the input. // DontStripNL bool // Strip all leading and trailing whitespace from the input // StripAll bool // Make sure that the input ends with a newline. This // is required for some lexers that consume input linewise. EnsureNL bool `xml:"ensure_nl,omitempty"` // If given and greater than 0, expand tabs in the input. // TabSize int // Priority of lexer. // // If this is 0 it will be treated as a default of 1. Priority float32 `xml:"priority,omitempty"` // Analyse is a list of regexes to match against the input. // // If a match is found, the score is returned if single attribute is set to true, // otherwise the sum of all the score of matching patterns will be // used as the final score. Analyse *AnalyseConfig `xml:"analyse,omitempty"` } // AnalyseConfig defines the list of regexes analysers. type AnalyseConfig struct { Regexes []RegexConfig `xml:"regex,omitempty"` // If true, the first matching score is returned. First bool `xml:"first,attr"` } // RegexConfig defines a single regex pattern and its score in case of match. type RegexConfig struct { Pattern string `xml:"pattern,attr"` Score float32 `xml:"score,attr"` } // Token output to formatter. type Token struct { Type TokenType `json:"type"` Value string `json:"value"` } func (t *Token) String() string { return t.Value } func (t *Token) GoString() string { return fmt.Sprintf("&Token{%s, %q}", t.Type, t.Value) } // Clone returns a clone of the Token. func (t *Token) Clone() Token { return *t } // EOF is returned by lexers at the end of input. var EOF Token // TokeniseOptions contains options for tokenisers. type TokeniseOptions struct { // State to start tokenisation in. Defaults to "root". State string // Nested tokenisation. Nested bool // If true, all EOLs are converted into LF // by replacing CRLF and CR EnsureLF bool } // A Lexer for tokenising source code. type Lexer interface { // Config describing the features of the Lexer. Config() *Config // Tokenise returns an Iterator over tokens in text. Tokenise(options *TokeniseOptions, text string) (Iterator, error) // SetRegistry sets the registry this Lexer is associated with. // // The registry should be used by the Lexer if it needs to look up other // lexers. SetRegistry(registry *LexerRegistry) Lexer // SetAnalyser sets a function the Lexer should use for scoring how // likely a fragment of text is to match this lexer, between 0.0 and 1.0. // A value of 1 indicates high confidence. // // Lexers may ignore this if they implement their own analysers. SetAnalyser(analyser func(text string) float32) Lexer // AnalyseText scores how likely a fragment of text is to match // this lexer, between 0.0 and 1.0. A value of 1 indicates high confidence. AnalyseText(text string) float32 } // Lexers is a slice of lexers sortable by name. type Lexers []Lexer func (l Lexers) Len() int { return len(l) } func (l Lexers) Swap(i, j int) { l[i], l[j] = l[j], l[i] } func (l Lexers) Less(i, j int) bool { return strings.ToLower(l[i].Config().Name) < strings.ToLower(l[j].Config().Name) } // PrioritisedLexers is a slice of lexers sortable by priority. type PrioritisedLexers []Lexer func (l PrioritisedLexers) Len() int { return len(l) } func (l PrioritisedLexers) Swap(i, j int) { l[i], l[j] = l[j], l[i] } func (l PrioritisedLexers) Less(i, j int) bool { ip := l[i].Config().Priority if ip == 0 { ip = 1 } jp := l[j].Config().Priority if jp == 0 { jp = 1 } return ip > jp } // Analyser determines how appropriate this lexer is for the given text. type Analyser interface { AnalyseText(text string) float32 } chroma-2.14.0/lexer_test.go000066400000000000000000000021651461341362700155670ustar00rootroot00000000000000package chroma import ( "testing" assert "github.com/alecthomas/assert/v2" ) func TestTokenTypeClassifiers(t *testing.T) { assert.True(t, GenericDeleted.InCategory(Generic)) assert.True(t, LiteralStringBacktick.InSubCategory(String)) assert.Equal(t, LiteralStringBacktick.String(), "LiteralStringBacktick") } func TestSimpleLexer(t *testing.T) { lexer := mustNewLexer(t, &Config{ Name: "INI", Aliases: []string{"ini", "cfg"}, Filenames: []string{"*.ini", "*.cfg"}, }, map[string][]Rule{ "root": { {`\s+`, Whitespace, nil}, {`;.*?$`, Comment, nil}, {`\[.*?\]$`, Keyword, nil}, {`(.*?)(\s*)(=)(\s*)(.*?)$`, ByGroups(Name, Whitespace, Operator, Whitespace, String), nil}, }, }) actual, err := Tokenise(lexer, nil, ` ; this is a comment [section] a = 10 `) assert.NoError(t, err) expected := []Token{ {Whitespace, "\n\t"}, {Comment, "; this is a comment"}, {Whitespace, "\n\t"}, {Keyword, "[section]"}, {Whitespace, "\n\t"}, {Name, "a"}, {Whitespace, " "}, {Operator, "="}, {Whitespace, " "}, {LiteralString, "10"}, {Whitespace, "\n"}, } assert.Equal(t, expected, actual) } chroma-2.14.0/lexers/000077500000000000000000000000001461341362700143605ustar00rootroot00000000000000chroma-2.14.0/lexers/README.md000066400000000000000000000040351461341362700156410ustar00rootroot00000000000000# Chroma lexers All lexers in Chroma should now be defined in XML unless they require custom code. ## Lexer tests The tests in this directory feed a known input `testdata/.actual` into the parser for `` and check that its output matches `.expected`. It is also possible to perform several tests on a same parser ``, by placing know inputs `*.actual` into a directory `testdata//`. ### Running the tests Run the tests as normal: ```go go test ./lexers ``` ### Update existing tests When you add a new test data file (`*.actual`), you need to regenerate all tests. That's how Chroma creates the `*.expected` test file based on the corresponding lexer. To regenerate all tests, type in your terminal: ```go RECORD=true go test ./lexers ``` This first sets the `RECORD` environment variable to `true`. Then it runs `go test` on the `./lexers` directory of the Chroma project. (That environment variable tells Chroma it needs to output test data. After running `go test ./lexers` you can remove or reset that variable.) #### Windows users Windows users will find that the `RECORD=true go test ./lexers` command fails in both the standard command prompt terminal and in PowerShell. Instead we have to perform both steps separately: - Set the `RECORD` environment variable to `true`. + In the regular command prompt window, the `set` command sets an environment variable for the current session: `set RECORD=true`. See [this page](https://superuser.com/questions/212150/how-to-set-env-variable-in-windows-cmd-line) for more. + In PowerShell, you can use the `$env:RECORD = 'true'` command for that. See [this article](https://mcpmag.com/articles/2019/03/28/environment-variables-in-powershell.aspx) for more. + You can also make a persistent environment variable by hand in the Windows computer settings. See [this article](https://www.computerhope.com/issues/ch000549.htm) for how. - When the environment variable is set, run `go test ./lexers`. Chroma will now regenerate the test files and print its results to the console window. chroma-2.14.0/lexers/caddyfile.go000066400000000000000000000212311461341362700166320ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) // Matcher token stub for docs, or // Named matcher: @name, or // Path matcher: /foo, or // Wildcard path matcher: * // nolint: gosec var caddyfileMatcherTokenRegexp = `(\[\\]|@[^\s]+|/[^\s]+|\*)` // Comment at start of line, or // Comment preceded by whitespace var caddyfileCommentRegexp = `(^|\s+)#.*\n` // caddyfileCommon are the rules common to both of the lexer variants func caddyfileCommonRules() Rules { return Rules{ "site_block_common": { Include("site_body"), // Any other directive {`[^\s#]+`, Keyword, Push("directive")}, Include("base"), }, "site_body": { // Import keyword {`\b(import|invoke)\b( [^\s#]+)`, ByGroups(Keyword, Text), Push("subdirective")}, // Matcher definition {`@[^\s]+(?=\s)`, NameDecorator, Push("matcher")}, // Matcher token stub for docs {`\[\\]`, NameDecorator, Push("matcher")}, // These cannot have matchers but may have things that look like // matchers in their arguments, so we just parse as a subdirective. {`\b(try_files|tls|log|bind)\b`, Keyword, Push("subdirective")}, // These are special, they can nest more directives {`\b(handle_errors|handle_path|handle_response|replace_status|handle|route)\b`, Keyword, Push("nested_directive")}, // uri directive has special syntax {`\b(uri)\b`, Keyword, Push("uri_directive")}, }, "matcher": { {`\{`, Punctuation, Push("block")}, // Not can be one-liner {`not`, Keyword, Push("deep_not_matcher")}, // Heredoc for CEL expression Include("heredoc"), // Backtick for CEL expression {"`", StringBacktick, Push("backticks")}, // Any other same-line matcher {`[^\s#]+`, Keyword, Push("arguments")}, // Terminators {`\s*\n`, Text, Pop(1)}, {`\}`, Punctuation, Pop(1)}, Include("base"), }, "block": { {`\}`, Punctuation, Pop(2)}, // Using double quotes doesn't stop at spaces {`"`, StringDouble, Push("double_quotes")}, // Using backticks doesn't stop at spaces {"`", StringBacktick, Push("backticks")}, // Not can be one-liner {`not`, Keyword, Push("not_matcher")}, // Directives & matcher definitions Include("site_body"), // Any directive {`[^\s#]+`, Keyword, Push("subdirective")}, Include("base"), }, "nested_block": { {`\}`, Punctuation, Pop(2)}, // Using double quotes doesn't stop at spaces {`"`, StringDouble, Push("double_quotes")}, // Using backticks doesn't stop at spaces {"`", StringBacktick, Push("backticks")}, // Not can be one-liner {`not`, Keyword, Push("not_matcher")}, // Directives & matcher definitions Include("site_body"), // Any other subdirective {`[^\s#]+`, Keyword, Push("directive")}, Include("base"), }, "not_matcher": { {`\}`, Punctuation, Pop(2)}, {`\{(?=\s)`, Punctuation, Push("block")}, {`[^\s#]+`, Keyword, Push("arguments")}, {`\s+`, Text, nil}, }, "deep_not_matcher": { {`\}`, Punctuation, Pop(2)}, {`\{(?=\s)`, Punctuation, Push("block")}, {`[^\s#]+`, Keyword, Push("deep_subdirective")}, {`\s+`, Text, nil}, }, "directive": { {`\{(?=\s)`, Punctuation, Push("block")}, {caddyfileMatcherTokenRegexp, NameDecorator, Push("arguments")}, {caddyfileCommentRegexp, CommentSingle, Pop(1)}, {`\s*\n`, Text, Pop(1)}, Include("base"), }, "nested_directive": { {`\{(?=\s)`, Punctuation, Push("nested_block")}, {caddyfileMatcherTokenRegexp, NameDecorator, Push("nested_arguments")}, {caddyfileCommentRegexp, CommentSingle, Pop(1)}, {`\s*\n`, Text, Pop(1)}, Include("base"), }, "subdirective": { {`\{(?=\s)`, Punctuation, Push("block")}, {caddyfileCommentRegexp, CommentSingle, Pop(1)}, {`\s*\n`, Text, Pop(1)}, Include("base"), }, "arguments": { {`\{(?=\s)`, Punctuation, Push("block")}, {caddyfileCommentRegexp, CommentSingle, Pop(2)}, {`\\\n`, Text, nil}, // Skip escaped newlines {`\s*\n`, Text, Pop(2)}, Include("base"), }, "nested_arguments": { {`\{(?=\s)`, Punctuation, Push("nested_block")}, {caddyfileCommentRegexp, CommentSingle, Pop(2)}, {`\\\n`, Text, nil}, // Skip escaped newlines {`\s*\n`, Text, Pop(2)}, Include("base"), }, "deep_subdirective": { {`\{(?=\s)`, Punctuation, Push("block")}, {caddyfileCommentRegexp, CommentSingle, Pop(3)}, {`\s*\n`, Text, Pop(3)}, Include("base"), }, "uri_directive": { {`\{(?=\s)`, Punctuation, Push("block")}, {caddyfileMatcherTokenRegexp, NameDecorator, nil}, {`(strip_prefix|strip_suffix|replace|path_regexp)`, NameConstant, Push("arguments")}, {caddyfileCommentRegexp, CommentSingle, Pop(1)}, {`\s*\n`, Text, Pop(1)}, Include("base"), }, "double_quotes": { Include("placeholder"), {`\\"`, StringDouble, nil}, {`[^"]`, StringDouble, nil}, {`"`, StringDouble, Pop(1)}, }, "backticks": { Include("placeholder"), {"\\\\`", StringBacktick, nil}, {"[^`]", StringBacktick, nil}, {"`", StringBacktick, Pop(1)}, }, "optional": { // Docs syntax for showing optional parts with [ ] {`\[`, Punctuation, Push("optional")}, Include("name_constants"), {`\|`, Punctuation, nil}, {`[^\[\]\|]+`, String, nil}, {`\]`, Punctuation, Pop(1)}, }, "heredoc": { {`(<<([a-zA-Z0-9_-]+))(\n(.*|\n)*)(\s*)(\2)`, ByGroups(StringHeredoc, nil, String, String, String, StringHeredoc), nil}, }, "name_constants": { {`\b(most_recently_modified|largest_size|smallest_size|first_exist|internal|disable_redirects|ignore_loaded_certs|disable_certs|private_ranges|first|last|before|after|on|off)\b(\||(?=\]|\s|$))`, ByGroups(NameConstant, Punctuation), nil}, }, "placeholder": { // Placeholder with dots, colon for default value, brackets for args[0:] {`\{[\w+.\[\]\:\$-]+\}`, StringEscape, nil}, // Handle opening brackets with no matching closing one {`\{[^\}\s]*\b`, String, nil}, }, "base": { {caddyfileCommentRegexp, CommentSingle, nil}, {`\[\\]`, NameDecorator, nil}, Include("name_constants"), Include("heredoc"), {`(https?://)?([a-z0-9.-]+)(:)([0-9]+)([^\s]*)`, ByGroups(Name, Name, Punctuation, NumberInteger, Name), nil}, {`\[`, Punctuation, Push("optional")}, {"`", StringBacktick, Push("backticks")}, {`"`, StringDouble, Push("double_quotes")}, Include("placeholder"), {`[a-z-]+/[a-z-+]+`, String, nil}, {`[0-9]+([smhdk]|ns|us|µs|ms)?\b`, NumberInteger, nil}, {`[^\s\n#\{]+`, String, nil}, {`/[^\s#]*`, Name, nil}, {`\s+`, Text, nil}, }, } } // Caddyfile lexer. var Caddyfile = Register(MustNewLexer( &Config{ Name: "Caddyfile", Aliases: []string{"caddyfile", "caddy"}, Filenames: []string{"Caddyfile*"}, MimeTypes: []string{}, }, caddyfileRules, )) func caddyfileRules() Rules { return Rules{ "root": { {caddyfileCommentRegexp, CommentSingle, nil}, // Global options block {`^\s*(\{)\s*$`, ByGroups(Punctuation), Push("globals")}, // Top level import {`(import)(\s+)([^\s]+)`, ByGroups(Keyword, Text, NameVariableMagic), nil}, // Snippets {`(&?\([^\s#]+\))(\s*)(\{)`, ByGroups(NameVariableAnonymous, Text, Punctuation), Push("snippet")}, // Site label {`[^#{(\s,]+`, GenericHeading, Push("label")}, // Site label with placeholder {`\{[\w+.\[\]\:\$-]+\}`, StringEscape, Push("label")}, {`\s+`, Text, nil}, }, "globals": { {`\}`, Punctuation, Pop(1)}, // Global options are parsed as subdirectives (no matcher) {`[^\s#]+`, Keyword, Push("subdirective")}, Include("base"), }, "snippet": { {`\}`, Punctuation, Pop(1)}, Include("site_body"), // Any other directive {`[^\s#]+`, Keyword, Push("directive")}, Include("base"), }, "label": { // Allow multiple labels, comma separated, newlines after // a comma means another label is coming {`,\s*\n?`, Text, nil}, {` `, Text, nil}, // Site label with placeholder Include("placeholder"), // Site label {`[^#{(\s,]+`, GenericHeading, nil}, // Comment after non-block label (hack because comments end in \n) {`#.*\n`, CommentSingle, Push("site_block")}, // Note: if \n, we'll never pop out of the site_block, it's valid {`\{(?=\s)|\n`, Punctuation, Push("site_block")}, }, "site_block": { {`\}`, Punctuation, Pop(2)}, Include("site_block_common"), }, }.Merge(caddyfileCommonRules()) } // Caddyfile directive-only lexer. var CaddyfileDirectives = Register(MustNewLexer( &Config{ Name: "Caddyfile Directives", Aliases: []string{"caddyfile-directives", "caddyfile-d", "caddy-d"}, Filenames: []string{}, MimeTypes: []string{}, }, caddyfileDirectivesRules, )) func caddyfileDirectivesRules() Rules { return Rules{ // Same as "site_block" in Caddyfile "root": { Include("site_block_common"), }, }.Merge(caddyfileCommonRules()) } chroma-2.14.0/lexers/cl.go000066400000000000000000000332311461341362700153070ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) var ( clBuiltinFunctions = []string{ "<", "<=", "=", ">", ">=", "-", "/", "/=", "*", "+", "1-", "1+", "abort", "abs", "acons", "acos", "acosh", "add-method", "adjoin", "adjustable-array-p", "adjust-array", "allocate-instance", "alpha-char-p", "alphanumericp", "append", "apply", "apropos", "apropos-list", "aref", "arithmetic-error-operands", "arithmetic-error-operation", "array-dimension", "array-dimensions", "array-displacement", "array-element-type", "array-has-fill-pointer-p", "array-in-bounds-p", "arrayp", "array-rank", "array-row-major-index", "array-total-size", "ash", "asin", "asinh", "assoc", "assoc-if", "assoc-if-not", "atan", "atanh", "atom", "bit", "bit-and", "bit-andc1", "bit-andc2", "bit-eqv", "bit-ior", "bit-nand", "bit-nor", "bit-not", "bit-orc1", "bit-orc2", "bit-vector-p", "bit-xor", "boole", "both-case-p", "boundp", "break", "broadcast-stream-streams", "butlast", "byte", "byte-position", "byte-size", "caaaar", "caaadr", "caaar", "caadar", "caaddr", "caadr", "caar", "cadaar", "cadadr", "cadar", "caddar", "cadddr", "caddr", "cadr", "call-next-method", "car", "cdaaar", "cdaadr", "cdaar", "cdadar", "cdaddr", "cdadr", "cdar", "cddaar", "cddadr", "cddar", "cdddar", "cddddr", "cdddr", "cddr", "cdr", "ceiling", "cell-error-name", "cerror", "change-class", "char", "char<", "char<=", "char=", "char>", "char>=", "char/=", "character", "characterp", "char-code", "char-downcase", "char-equal", "char-greaterp", "char-int", "char-lessp", "char-name", "char-not-equal", "char-not-greaterp", "char-not-lessp", "char-upcase", "cis", "class-name", "class-of", "clear-input", "clear-output", "close", "clrhash", "code-char", "coerce", "compile", "compiled-function-p", "compile-file", "compile-file-pathname", "compiler-macro-function", "complement", "complex", "complexp", "compute-applicable-methods", "compute-restarts", "concatenate", "concatenated-stream-streams", "conjugate", "cons", "consp", "constantly", "constantp", "continue", "copy-alist", "copy-list", "copy-pprint-dispatch", "copy-readtable", "copy-seq", "copy-structure", "copy-symbol", "copy-tree", "cos", "cosh", "count", "count-if", "count-if-not", "decode-float", "decode-universal-time", "delete", "delete-duplicates", "delete-file", "delete-if", "delete-if-not", "delete-package", "denominator", "deposit-field", "describe", "describe-object", "digit-char", "digit-char-p", "directory", "directory-namestring", "disassemble", "documentation", "dpb", "dribble", "echo-stream-input-stream", "echo-stream-output-stream", "ed", "eighth", "elt", "encode-universal-time", "endp", "enough-namestring", "ensure-directories-exist", "ensure-generic-function", "eq", "eql", "equal", "equalp", "error", "eval", "evenp", "every", "exp", "export", "expt", "fboundp", "fceiling", "fdefinition", "ffloor", "fifth", "file-author", "file-error-pathname", "file-length", "file-namestring", "file-position", "file-string-length", "file-write-date", "fill", "fill-pointer", "find", "find-all-symbols", "find-class", "find-if", "find-if-not", "find-method", "find-package", "find-restart", "find-symbol", "finish-output", "first", "float", "float-digits", "floatp", "float-precision", "float-radix", "float-sign", "floor", "fmakunbound", "force-output", "format", "fourth", "fresh-line", "fround", "ftruncate", "funcall", "function-keywords", "function-lambda-expression", "functionp", "gcd", "gensym", "gentemp", "get", "get-decoded-time", "get-dispatch-macro-character", "getf", "gethash", "get-internal-real-time", "get-internal-run-time", "get-macro-character", "get-output-stream-string", "get-properties", "get-setf-expansion", "get-universal-time", "graphic-char-p", "hash-table-count", "hash-table-p", "hash-table-rehash-size", "hash-table-rehash-threshold", "hash-table-size", "hash-table-test", "host-namestring", "identity", "imagpart", "import", "initialize-instance", "input-stream-p", "inspect", "integer-decode-float", "integer-length", "integerp", "interactive-stream-p", "intern", "intersection", "invalid-method-error", "invoke-debugger", "invoke-restart", "invoke-restart-interactively", "isqrt", "keywordp", "last", "lcm", "ldb", "ldb-test", "ldiff", "length", "lisp-implementation-type", "lisp-implementation-version", "list", "list*", "list-all-packages", "listen", "list-length", "listp", "load", "load-logical-pathname-translations", "log", "logand", "logandc1", "logandc2", "logbitp", "logcount", "logeqv", "logical-pathname", "logical-pathname-translations", "logior", "lognand", "lognor", "lognot", "logorc1", "logorc2", "logtest", "logxor", "long-site-name", "lower-case-p", "machine-instance", "machine-type", "machine-version", "macroexpand", "macroexpand-1", "macro-function", "make-array", "make-broadcast-stream", "make-concatenated-stream", "make-condition", "make-dispatch-macro-character", "make-echo-stream", "make-hash-table", "make-instance", "make-instances-obsolete", "make-list", "make-load-form", "make-load-form-saving-slots", "make-package", "make-pathname", "make-random-state", "make-sequence", "make-string", "make-string-input-stream", "make-string-output-stream", "make-symbol", "make-synonym-stream", "make-two-way-stream", "makunbound", "map", "mapc", "mapcan", "mapcar", "mapcon", "maphash", "map-into", "mapl", "maplist", "mask-field", "max", "member", "member-if", "member-if-not", "merge", "merge-pathnames", "method-combination-error", "method-qualifiers", "min", "minusp", "mismatch", "mod", "muffle-warning", "name-char", "namestring", "nbutlast", "nconc", "next-method-p", "nintersection", "ninth", "no-applicable-method", "no-next-method", "not", "notany", "notevery", "nreconc", "nreverse", "nset-difference", "nset-exclusive-or", "nstring-capitalize", "nstring-downcase", "nstring-upcase", "nsublis", "nsubst", "nsubst-if", "nsubst-if-not", "nsubstitute", "nsubstitute-if", "nsubstitute-if-not", "nth", "nthcdr", "null", "numberp", "numerator", "nunion", "oddp", "open", "open-stream-p", "output-stream-p", "package-error-package", "package-name", "package-nicknames", "packagep", "package-shadowing-symbols", "package-used-by-list", "package-use-list", "pairlis", "parse-integer", "parse-namestring", "pathname", "pathname-device", "pathname-directory", "pathname-host", "pathname-match-p", "pathname-name", "pathnamep", "pathname-type", "pathname-version", "peek-char", "phase", "plusp", "position", "position-if", "position-if-not", "pprint", "pprint-dispatch", "pprint-fill", "pprint-indent", "pprint-linear", "pprint-newline", "pprint-tab", "pprint-tabular", "prin1", "prin1-to-string", "princ", "princ-to-string", "print", "print-object", "probe-file", "proclaim", "provide", "random", "random-state-p", "rassoc", "rassoc-if", "rassoc-if-not", "rational", "rationalize", "rationalp", "read", "read-byte", "read-char", "read-char-no-hang", "read-delimited-list", "read-from-string", "read-line", "read-preserving-whitespace", "read-sequence", "readtable-case", "readtablep", "realp", "realpart", "reduce", "reinitialize-instance", "rem", "remhash", "remove", "remove-duplicates", "remove-if", "remove-if-not", "remove-method", "remprop", "rename-file", "rename-package", "replace", "require", "rest", "restart-name", "revappend", "reverse", "room", "round", "row-major-aref", "rplaca", "rplacd", "sbit", "scale-float", "schar", "search", "second", "set", "set-difference", "set-dispatch-macro-character", "set-exclusive-or", "set-macro-character", "set-pprint-dispatch", "set-syntax-from-char", "seventh", "shadow", "shadowing-import", "shared-initialize", "short-site-name", "signal", "signum", "simple-bit-vector-p", "simple-condition-format-arguments", "simple-condition-format-control", "simple-string-p", "simple-vector-p", "sin", "sinh", "sixth", "sleep", "slot-boundp", "slot-exists-p", "slot-makunbound", "slot-missing", "slot-unbound", "slot-value", "software-type", "software-version", "some", "sort", "special-operator-p", "sqrt", "stable-sort", "standard-char-p", "store-value", "stream-element-type", "stream-error-stream", "stream-external-format", "streamp", "string", "string<", "string<=", "string=", "string>", "string>=", "string/=", "string-capitalize", "string-downcase", "string-equal", "string-greaterp", "string-left-trim", "string-lessp", "string-not-equal", "string-not-greaterp", "string-not-lessp", "stringp", "string-right-trim", "string-trim", "string-upcase", "sublis", "subseq", "subsetp", "subst", "subst-if", "subst-if-not", "substitute", "substitute-if", "substitute-if-not", "subtypep", "svref", "sxhash", "symbol-function", "symbol-name", "symbolp", "symbol-package", "symbol-plist", "symbol-value", "synonym-stream-symbol", "syntax:", "tailp", "tan", "tanh", "tenth", "terpri", "third", "translate-logical-pathname", "translate-pathname", "tree-equal", "truename", "truncate", "two-way-stream-input-stream", "two-way-stream-output-stream", "type-error-datum", "type-error-expected-type", "type-of", "typep", "unbound-slot-instance", "unexport", "unintern", "union", "unread-char", "unuse-package", "update-instance-for-different-class", "update-instance-for-redefined-class", "upgraded-array-element-type", "upgraded-complex-part-type", "upper-case-p", "use-package", "user-homedir-pathname", "use-value", "values", "values-list", "vector", "vectorp", "vector-pop", "vector-push", "vector-push-extend", "warn", "wild-pathname-p", "write", "write-byte", "write-char", "write-line", "write-sequence", "write-string", "write-to-string", "yes-or-no-p", "y-or-n-p", "zerop", } clSpecialForms = []string{ "block", "catch", "declare", "eval-when", "flet", "function", "go", "if", "labels", "lambda", "let", "let*", "load-time-value", "locally", "macrolet", "multiple-value-call", "multiple-value-prog1", "progn", "progv", "quote", "return-from", "setq", "symbol-macrolet", "tagbody", "the", "throw", "unwind-protect", } clMacros = []string{ "and", "assert", "call-method", "case", "ccase", "check-type", "cond", "ctypecase", "decf", "declaim", "defclass", "defconstant", "defgeneric", "define-compiler-macro", "define-condition", "define-method-combination", "define-modify-macro", "define-setf-expander", "define-symbol-macro", "defmacro", "defmethod", "defpackage", "defparameter", "defsetf", "defstruct", "deftype", "defun", "defvar", "destructuring-bind", "do", "do*", "do-all-symbols", "do-external-symbols", "dolist", "do-symbols", "dotimes", "ecase", "etypecase", "formatter", "handler-bind", "handler-case", "ignore-errors", "incf", "in-package", "lambda", "loop", "loop-finish", "make-method", "multiple-value-bind", "multiple-value-list", "multiple-value-setq", "nth-value", "or", "pop", "pprint-exit-if-list-exhausted", "pprint-logical-block", "pprint-pop", "print-unreadable-object", "prog", "prog*", "prog1", "prog2", "psetf", "psetq", "push", "pushnew", "remf", "restart-bind", "restart-case", "return", "rotatef", "setf", "shiftf", "step", "time", "trace", "typecase", "unless", "untrace", "when", "with-accessors", "with-compilation-unit", "with-condition-restarts", "with-hash-table-iterator", "with-input-from-string", "with-open-file", "with-open-stream", "with-output-to-string", "with-package-iterator", "with-simple-restart", "with-slots", "with-standard-io-syntax", } clLambdaListKeywords = []string{ "&allow-other-keys", "&aux", "&body", "&environment", "&key", "&optional", "&rest", "&whole", } clDeclarations = []string{ "dynamic-extent", "ignore", "optimize", "ftype", "inline", "special", "ignorable", "notinline", "type", } clBuiltinTypes = []string{ "atom", "boolean", "base-char", "base-string", "bignum", "bit", "compiled-function", "extended-char", "fixnum", "keyword", "nil", "signed-byte", "short-float", "single-float", "double-float", "long-float", "simple-array", "simple-base-string", "simple-bit-vector", "simple-string", "simple-vector", "standard-char", "unsigned-byte", // Condition Types "arithmetic-error", "cell-error", "condition", "control-error", "division-by-zero", "end-of-file", "error", "file-error", "floating-point-inexact", "floating-point-overflow", "floating-point-underflow", "floating-point-invalid-operation", "parse-error", "package-error", "print-not-readable", "program-error", "reader-error", "serious-condition", "simple-condition", "simple-error", "simple-type-error", "simple-warning", "stream-error", "storage-condition", "style-warning", "type-error", "unbound-variable", "unbound-slot", "undefined-function", "warning", } clBuiltinClasses = []string{ "array", "broadcast-stream", "bit-vector", "built-in-class", "character", "class", "complex", "concatenated-stream", "cons", "echo-stream", "file-stream", "float", "function", "generic-function", "hash-table", "integer", "list", "logical-pathname", "method-combination", "method", "null", "number", "package", "pathname", "ratio", "rational", "readtable", "real", "random-state", "restart", "sequence", "standard-class", "standard-generic-function", "standard-method", "standard-object", "string-stream", "stream", "string", "structure-class", "structure-object", "symbol", "synonym-stream", "t", "two-way-stream", "vector", } ) // Common Lisp lexer. var CommonLisp = Register(TypeRemappingLexer(MustNewXMLLexer( embedded, "embedded/common_lisp.xml", ), TypeMapping{ {NameVariable, NameFunction, clBuiltinFunctions}, {NameVariable, Keyword, clSpecialForms}, {NameVariable, NameBuiltin, clMacros}, {NameVariable, Keyword, clLambdaListKeywords}, {NameVariable, Keyword, clDeclarations}, {NameVariable, KeywordType, clBuiltinTypes}, {NameVariable, NameClass, clBuiltinClasses}, })) chroma-2.14.0/lexers/dns.go000066400000000000000000000005061461341362700154740ustar00rootroot00000000000000package lexers import ( "regexp" ) // TODO(moorereason): can this be factored away? var zoneAnalyserRe = regexp.MustCompile(`(?m)^@\s+IN\s+SOA\s+`) func init() { // nolint: gochecknoinits Get("dns").SetAnalyser(func(text string) float32 { if zoneAnalyserRe.FindString(text) != "" { return 1.0 } return 0.0 }) } chroma-2.14.0/lexers/emacs.go000066400000000000000000000752021461341362700160050ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) var ( emacsMacros = []string{ "atomic-change-group", "case", "block", "cl-block", "cl-callf", "cl-callf2", "cl-case", "cl-decf", "cl-declaim", "cl-declare", "cl-define-compiler-macro", "cl-defmacro", "cl-defstruct", "cl-defsubst", "cl-deftype", "cl-defun", "cl-destructuring-bind", "cl-do", "cl-do*", "cl-do-all-symbols", "cl-do-symbols", "cl-dolist", "cl-dotimes", "cl-ecase", "cl-etypecase", "eval-when", "cl-eval-when", "cl-flet", "cl-flet*", "cl-function", "cl-incf", "cl-labels", "cl-letf", "cl-letf*", "cl-load-time-value", "cl-locally", "cl-loop", "cl-macrolet", "cl-multiple-value-bind", "cl-multiple-value-setq", "cl-progv", "cl-psetf", "cl-psetq", "cl-pushnew", "cl-remf", "cl-return", "cl-return-from", "cl-rotatef", "cl-shiftf", "cl-symbol-macrolet", "cl-tagbody", "cl-the", "cl-typecase", "combine-after-change-calls", "condition-case-unless-debug", "decf", "declaim", "declare", "declare-function", "def-edebug-spec", "defadvice", "defclass", "defcustom", "defface", "defgeneric", "defgroup", "define-advice", "define-alternatives", "define-compiler-macro", "define-derived-mode", "define-generic-mode", "define-global-minor-mode", "define-globalized-minor-mode", "define-minor-mode", "define-modify-macro", "define-obsolete-face-alias", "define-obsolete-function-alias", "define-obsolete-variable-alias", "define-setf-expander", "define-skeleton", "defmacro", "defmethod", "defsetf", "defstruct", "defsubst", "deftheme", "deftype", "defun", "defvar-local", "delay-mode-hooks", "destructuring-bind", "do", "do*", "do-all-symbols", "do-symbols", "dolist", "dont-compile", "dotimes", "dotimes-with-progress-reporter", "ecase", "ert-deftest", "etypecase", "eval-and-compile", "eval-when-compile", "flet", "ignore-errors", "incf", "labels", "lambda", "letrec", "lexical-let", "lexical-let*", "loop", "multiple-value-bind", "multiple-value-setq", "noreturn", "oref", "oref-default", "oset", "oset-default", "pcase", "pcase-defmacro", "pcase-dolist", "pcase-exhaustive", "pcase-let", "pcase-let*", "pop", "psetf", "psetq", "push", "pushnew", "remf", "return", "rotatef", "rx", "save-match-data", "save-selected-window", "save-window-excursion", "setf", "setq-local", "shiftf", "track-mouse", "typecase", "unless", "use-package", "when", "while-no-input", "with-case-table", "with-category-table", "with-coding-priority", "with-current-buffer", "with-demoted-errors", "with-eval-after-load", "with-file-modes", "with-local-quit", "with-output-to-string", "with-output-to-temp-buffer", "with-parsed-tramp-file-name", "with-selected-frame", "with-selected-window", "with-silent-modifications", "with-slots", "with-syntax-table", "with-temp-buffer", "with-temp-file", "with-temp-message", "with-timeout", "with-tramp-connection-property", "with-tramp-file-property", "with-tramp-progress-reporter", "with-wrapper-hook", "load-time-value", "locally", "macrolet", "progv", "return-from", } emacsSpecialForms = []string{ "and", "catch", "cond", "condition-case", "defconst", "defvar", "function", "if", "interactive", "let", "let*", "or", "prog1", "prog2", "progn", "quote", "save-current-buffer", "save-excursion", "save-restriction", "setq", "setq-default", "subr-arity", "unwind-protect", "while", } emacsBuiltinFunction = []string{ "%", "*", "+", "-", "/", "/=", "1+", "1-", "<", "<=", "=", ">", ">=", "Snarf-documentation", "abort-recursive-edit", "abs", "accept-process-output", "access-file", "accessible-keymaps", "acos", "active-minibuffer-window", "add-face-text-property", "add-name-to-file", "add-text-properties", "all-completions", "append", "apply", "apropos-internal", "aref", "arrayp", "aset", "ash", "asin", "assoc", "assoc-string", "assq", "atan", "atom", "autoload", "autoload-do-load", "backtrace", "backtrace--locals", "backtrace-debug", "backtrace-eval", "backtrace-frame", "backward-char", "backward-prefix-chars", "barf-if-buffer-read-only", "base64-decode-region", "base64-decode-string", "base64-encode-region", "base64-encode-string", "beginning-of-line", "bidi-find-overridden-directionality", "bidi-resolved-levels", "bitmap-spec-p", "bobp", "bolp", "bool-vector", "bool-vector-count-consecutive", "bool-vector-count-population", "bool-vector-exclusive-or", "bool-vector-intersection", "bool-vector-not", "bool-vector-p", "bool-vector-set-difference", "bool-vector-subsetp", "bool-vector-union", "boundp", "buffer-base-buffer", "buffer-chars-modified-tick", "buffer-enable-undo", "buffer-file-name", "buffer-has-markers-at", "buffer-list", "buffer-live-p", "buffer-local-value", "buffer-local-variables", "buffer-modified-p", "buffer-modified-tick", "buffer-name", "buffer-size", "buffer-string", "buffer-substring", "buffer-substring-no-properties", "buffer-swap-text", "bufferp", "bury-buffer-internal", "byte-code", "byte-code-function-p", "byte-to-position", "byte-to-string", "byteorder", "call-interactively", "call-last-kbd-macro", "call-process", "call-process-region", "cancel-kbd-macro-events", "capitalize", "capitalize-region", "capitalize-word", "car", "car-less-than-car", "car-safe", "case-table-p", "category-docstring", "category-set-mnemonics", "category-table", "category-table-p", "ccl-execute", "ccl-execute-on-string", "ccl-program-p", "cdr", "cdr-safe", "ceiling", "char-after", "char-before", "char-category-set", "char-charset", "char-equal", "char-or-string-p", "char-resolve-modifiers", "char-syntax", "char-table-extra-slot", "char-table-p", "char-table-parent", "char-table-range", "char-table-subtype", "char-to-string", "char-width", "characterp", "charset-after", "charset-id-internal", "charset-plist", "charset-priority-list", "charsetp", "check-coding-system", "check-coding-systems-region", "clear-buffer-auto-save-failure", "clear-charset-maps", "clear-face-cache", "clear-font-cache", "clear-image-cache", "clear-string", "clear-this-command-keys", "close-font", "clrhash", "coding-system-aliases", "coding-system-base", "coding-system-eol-type", "coding-system-p", "coding-system-plist", "coding-system-priority-list", "coding-system-put", "color-distance", "color-gray-p", "color-supported-p", "combine-after-change-execute", "command-error-default-function", "command-remapping", "commandp", "compare-buffer-substrings", "compare-strings", "compare-window-configurations", "completing-read", "compose-region-internal", "compose-string-internal", "composition-get-gstring", "compute-motion", "concat", "cons", "consp", "constrain-to-field", "continue-process", "controlling-tty-p", "coordinates-in-window-p", "copy-alist", "copy-category-table", "copy-file", "copy-hash-table", "copy-keymap", "copy-marker", "copy-sequence", "copy-syntax-table", "copysign", "cos", "current-active-maps", "current-bidi-paragraph-direction", "current-buffer", "current-case-table", "current-column", "current-global-map", "current-idle-time", "current-indentation", "current-input-mode", "current-local-map", "current-message", "current-minor-mode-maps", "current-time", "current-time-string", "current-time-zone", "current-window-configuration", "cygwin-convert-file-name-from-windows", "cygwin-convert-file-name-to-windows", "daemon-initialized", "daemonp", "dbus--init-bus", "dbus-get-unique-name", "dbus-message-internal", "debug-timer-check", "declare-equiv-charset", "decode-big5-char", "decode-char", "decode-coding-region", "decode-coding-string", "decode-sjis-char", "decode-time", "default-boundp", "default-file-modes", "default-printer-name", "default-toplevel-value", "default-value", "define-category", "define-charset-alias", "define-charset-internal", "define-coding-system-alias", "define-coding-system-internal", "define-fringe-bitmap", "define-hash-table-test", "define-key", "define-prefix-command", "delete", "delete-all-overlays", "delete-and-extract-region", "delete-char", "delete-directory-internal", "delete-field", "delete-file", "delete-frame", "delete-other-windows-internal", "delete-overlay", "delete-process", "delete-region", "delete-terminal", "delete-window-internal", "delq", "describe-buffer-bindings", "describe-vector", "destroy-fringe-bitmap", "detect-coding-region", "detect-coding-string", "ding", "directory-file-name", "directory-files", "directory-files-and-attributes", "discard-input", "display-supports-face-attributes-p", "do-auto-save", "documentation", "documentation-property", "downcase", "downcase-region", "downcase-word", "draw-string", "dump-colors", "dump-emacs", "dump-face", "dump-frame-glyph-matrix", "dump-glyph-matrix", "dump-glyph-row", "dump-redisplay-history", "dump-tool-bar-row", "elt", "emacs-pid", "encode-big5-char", "encode-char", "encode-coding-region", "encode-coding-string", "encode-sjis-char", "encode-time", "end-kbd-macro", "end-of-line", "eobp", "eolp", "eq", "eql", "equal", "equal-including-properties", "erase-buffer", "error-message-string", "eval", "eval-buffer", "eval-region", "event-convert-list", "execute-kbd-macro", "exit-recursive-edit", "exp", "expand-file-name", "expt", "external-debugging-output", "face-attribute-relative-p", "face-attributes-as-vector", "face-font", "fboundp", "fceiling", "fetch-bytecode", "ffloor", "field-beginning", "field-end", "field-string", "field-string-no-properties", "file-accessible-directory-p", "file-acl", "file-attributes", "file-attributes-lessp", "file-directory-p", "file-executable-p", "file-exists-p", "file-locked-p", "file-modes", "file-name-absolute-p", "file-name-all-completions", "file-name-as-directory", "file-name-completion", "file-name-directory", "file-name-nondirectory", "file-newer-than-file-p", "file-readable-p", "file-regular-p", "file-selinux-context", "file-symlink-p", "file-system-info", "file-system-info", "file-writable-p", "fillarray", "find-charset-region", "find-charset-string", "find-coding-systems-region-internal", "find-composition-internal", "find-file-name-handler", "find-font", "find-operation-coding-system", "float", "float-time", "floatp", "floor", "fmakunbound", "following-char", "font-at", "font-drive-otf", "font-face-attributes", "font-family-list", "font-get", "font-get-glyphs", "font-get-system-font", "font-get-system-normal-font", "font-info", "font-match-p", "font-otf-alternates", "font-put", "font-shape-gstring", "font-spec", "font-variation-glyphs", "font-xlfd-name", "fontp", "fontset-font", "fontset-info", "fontset-list", "fontset-list-all", "force-mode-line-update", "force-window-update", "format", "format-mode-line", "format-network-address", "format-time-string", "forward-char", "forward-comment", "forward-line", "forward-word", "frame-border-width", "frame-bottom-divider-width", "frame-can-run-window-configuration-change-hook", "frame-char-height", "frame-char-width", "frame-face-alist", "frame-first-window", "frame-focus", "frame-font-cache", "frame-fringe-width", "frame-list", "frame-live-p", "frame-or-buffer-changed-p", "frame-parameter", "frame-parameters", "frame-pixel-height", "frame-pixel-width", "frame-pointer-visible-p", "frame-right-divider-width", "frame-root-window", "frame-scroll-bar-height", "frame-scroll-bar-width", "frame-selected-window", "frame-terminal", "frame-text-cols", "frame-text-height", "frame-text-lines", "frame-text-width", "frame-total-cols", "frame-total-lines", "frame-visible-p", "framep", "frexp", "fringe-bitmaps-at-pos", "fround", "fset", "ftruncate", "funcall", "funcall-interactively", "function-equal", "functionp", "gap-position", "gap-size", "garbage-collect", "gc-status", "generate-new-buffer-name", "get", "get-buffer", "get-buffer-create", "get-buffer-process", "get-buffer-window", "get-byte", "get-char-property", "get-char-property-and-overlay", "get-file-buffer", "get-file-char", "get-internal-run-time", "get-load-suffixes", "get-pos-property", "get-process", "get-screen-color", "get-text-property", "get-unicode-property-internal", "get-unused-category", "get-unused-iso-final-char", "getenv-internal", "gethash", "gfile-add-watch", "gfile-rm-watch", "global-key-binding", "gnutls-available-p", "gnutls-boot", "gnutls-bye", "gnutls-deinit", "gnutls-error-fatalp", "gnutls-error-string", "gnutls-errorp", "gnutls-get-initstage", "gnutls-peer-status", "gnutls-peer-status-warning-describe", "goto-char", "gpm-mouse-start", "gpm-mouse-stop", "group-gid", "group-real-gid", "handle-save-session", "handle-switch-frame", "hash-table-count", "hash-table-p", "hash-table-rehash-size", "hash-table-rehash-threshold", "hash-table-size", "hash-table-test", "hash-table-weakness", "iconify-frame", "identity", "image-flush", "image-mask-p", "image-metadata", "image-size", "imagemagick-types", "imagep", "indent-to", "indirect-function", "indirect-variable", "init-image-library", "inotify-add-watch", "inotify-rm-watch", "input-pending-p", "insert", "insert-and-inherit", "insert-before-markers", "insert-before-markers-and-inherit", "insert-buffer-substring", "insert-byte", "insert-char", "insert-file-contents", "insert-startup-screen", "int86", "integer-or-marker-p", "integerp", "interactive-form", "intern", "intern-soft", "internal--track-mouse", "internal-char-font", "internal-complete-buffer", "internal-copy-lisp-face", "internal-default-process-filter", "internal-default-process-sentinel", "internal-describe-syntax-value", "internal-event-symbol-parse-modifiers", "internal-face-x-get-resource", "internal-get-lisp-face-attribute", "internal-lisp-face-attribute-values", "internal-lisp-face-empty-p", "internal-lisp-face-equal-p", "internal-lisp-face-p", "internal-make-lisp-face", "internal-make-var-non-special", "internal-merge-in-global-face", "internal-set-alternative-font-family-alist", "internal-set-alternative-font-registry-alist", "internal-set-font-selection-order", "internal-set-lisp-face-attribute", "internal-set-lisp-face-attribute-from-resource", "internal-show-cursor", "internal-show-cursor-p", "interrupt-process", "invisible-p", "invocation-directory", "invocation-name", "isnan", "iso-charset", "key-binding", "key-description", "keyboard-coding-system", "keymap-parent", "keymap-prompt", "keymapp", "keywordp", "kill-all-local-variables", "kill-buffer", "kill-emacs", "kill-local-variable", "kill-process", "last-nonminibuffer-frame", "lax-plist-get", "lax-plist-put", "ldexp", "length", "libxml-parse-html-region", "libxml-parse-xml-region", "line-beginning-position", "line-end-position", "line-pixel-height", "list", "list-fonts", "list-system-processes", "listp", "load", "load-average", "local-key-binding", "local-variable-if-set-p", "local-variable-p", "locale-info", "locate-file-internal", "lock-buffer", "log", "logand", "logb", "logior", "lognot", "logxor", "looking-at", "lookup-image", "lookup-image-map", "lookup-key", "lower-frame", "lsh", "macroexpand", "make-bool-vector", "make-byte-code", "make-category-set", "make-category-table", "make-char", "make-char-table", "make-directory-internal", "make-frame-invisible", "make-frame-visible", "make-hash-table", "make-indirect-buffer", "make-keymap", "make-list", "make-local-variable", "make-marker", "make-network-process", "make-overlay", "make-serial-process", "make-sparse-keymap", "make-string", "make-symbol", "make-symbolic-link", "make-temp-name", "make-terminal-frame", "make-variable-buffer-local", "make-variable-frame-local", "make-vector", "makunbound", "map-char-table", "map-charset-chars", "map-keymap", "map-keymap-internal", "mapatoms", "mapc", "mapcar", "mapconcat", "maphash", "mark-marker", "marker-buffer", "marker-insertion-type", "marker-position", "markerp", "match-beginning", "match-data", "match-end", "matching-paren", "max", "max-char", "md5", "member", "memory-info", "memory-limit", "memory-use-counts", "memq", "memql", "menu-bar-menu-at-x-y", "menu-or-popup-active-p", "menu-or-popup-active-p", "merge-face-attribute", "message", "message-box", "message-or-box", "min", "minibuffer-completion-contents", "minibuffer-contents", "minibuffer-contents-no-properties", "minibuffer-depth", "minibuffer-prompt", "minibuffer-prompt-end", "minibuffer-selected-window", "minibuffer-window", "minibufferp", "minor-mode-key-binding", "mod", "modify-category-entry", "modify-frame-parameters", "modify-syntax-entry", "mouse-pixel-position", "mouse-position", "move-overlay", "move-point-visually", "move-to-column", "move-to-window-line", "msdos-downcase-filename", "msdos-long-file-names", "msdos-memget", "msdos-memput", "msdos-mouse-disable", "msdos-mouse-enable", "msdos-mouse-init", "msdos-mouse-p", "msdos-remember-default-colors", "msdos-set-keyboard", "msdos-set-mouse-buttons", "multibyte-char-to-unibyte", "multibyte-string-p", "narrow-to-region", "natnump", "nconc", "network-interface-info", "network-interface-list", "new-fontset", "newline-cache-check", "next-char-property-change", "next-frame", "next-overlay-change", "next-property-change", "next-read-file-uses-dialog-p", "next-single-char-property-change", "next-single-property-change", "next-window", "nlistp", "nreverse", "nth", "nthcdr", "null", "number-or-marker-p", "number-to-string", "numberp", "open-dribble-file", "open-font", "open-termscript", "optimize-char-table", "other-buffer", "other-window-for-scrolling", "overlay-buffer", "overlay-end", "overlay-get", "overlay-lists", "overlay-properties", "overlay-put", "overlay-recenter", "overlay-start", "overlayp", "overlays-at", "overlays-in", "parse-partial-sexp", "play-sound-internal", "plist-get", "plist-member", "plist-put", "point", "point-marker", "point-max", "point-max-marker", "point-min", "point-min-marker", "pos-visible-in-window-p", "position-bytes", "posix-looking-at", "posix-search-backward", "posix-search-forward", "posix-string-match", "posn-at-point", "posn-at-x-y", "preceding-char", "prefix-numeric-value", "previous-char-property-change", "previous-frame", "previous-overlay-change", "previous-property-change", "previous-single-char-property-change", "previous-single-property-change", "previous-window", "prin1", "prin1-to-string", "princ", "print", "process-attributes", "process-buffer", "process-coding-system", "process-command", "process-connection", "process-contact", "process-datagram-address", "process-exit-status", "process-filter", "process-filter-multibyte-p", "process-id", "process-inherit-coding-system-flag", "process-list", "process-mark", "process-name", "process-plist", "process-query-on-exit-flag", "process-running-child-p", "process-send-eof", "process-send-region", "process-send-string", "process-sentinel", "process-status", "process-tty-name", "process-type", "processp", "profiler-cpu-log", "profiler-cpu-running-p", "profiler-cpu-start", "profiler-cpu-stop", "profiler-memory-log", "profiler-memory-running-p", "profiler-memory-start", "profiler-memory-stop", "propertize", "purecopy", "put", "put-text-property", "put-unicode-property-internal", "puthash", "query-font", "query-fontset", "quit-process", "raise-frame", "random", "rassoc", "rassq", "re-search-backward", "re-search-forward", "read", "read-buffer", "read-char", "read-char-exclusive", "read-coding-system", "read-command", "read-event", "read-from-minibuffer", "read-from-string", "read-function", "read-key-sequence", "read-key-sequence-vector", "read-no-blanks-input", "read-non-nil-coding-system", "read-string", "read-variable", "recent-auto-save-p", "recent-doskeys", "recent-keys", "recenter", "recursion-depth", "recursive-edit", "redirect-debugging-output", "redirect-frame-focus", "redisplay", "redraw-display", "redraw-frame", "regexp-quote", "region-beginning", "region-end", "register-ccl-program", "register-code-conversion-map", "remhash", "remove-list-of-text-properties", "remove-text-properties", "rename-buffer", "rename-file", "replace-match", "reset-this-command-lengths", "resize-mini-window-internal", "restore-buffer-modified-p", "resume-tty", "reverse", "round", "run-hook-with-args", "run-hook-with-args-until-failure", "run-hook-with-args-until-success", "run-hook-wrapped", "run-hooks", "run-window-configuration-change-hook", "run-window-scroll-functions", "safe-length", "scan-lists", "scan-sexps", "scroll-down", "scroll-left", "scroll-other-window", "scroll-right", "scroll-up", "search-backward", "search-forward", "secure-hash", "select-frame", "select-window", "selected-frame", "selected-window", "self-insert-command", "send-string-to-terminal", "sequencep", "serial-process-configure", "set", "set-buffer", "set-buffer-auto-saved", "set-buffer-major-mode", "set-buffer-modified-p", "set-buffer-multibyte", "set-case-table", "set-category-table", "set-char-table-extra-slot", "set-char-table-parent", "set-char-table-range", "set-charset-plist", "set-charset-priority", "set-coding-system-priority", "set-cursor-size", "set-default", "set-default-file-modes", "set-default-toplevel-value", "set-file-acl", "set-file-modes", "set-file-selinux-context", "set-file-times", "set-fontset-font", "set-frame-height", "set-frame-position", "set-frame-selected-window", "set-frame-size", "set-frame-width", "set-fringe-bitmap-face", "set-input-interrupt-mode", "set-input-meta-mode", "set-input-mode", "set-keyboard-coding-system-internal", "set-keymap-parent", "set-marker", "set-marker-insertion-type", "set-match-data", "set-message-beep", "set-minibuffer-window", "set-mouse-pixel-position", "set-mouse-position", "set-network-process-option", "set-output-flow-control", "set-process-buffer", "set-process-coding-system", "set-process-datagram-address", "set-process-filter", "set-process-filter-multibyte", "set-process-inherit-coding-system-flag", "set-process-plist", "set-process-query-on-exit-flag", "set-process-sentinel", "set-process-window-size", "set-quit-char", "set-safe-terminal-coding-system-internal", "set-screen-color", "set-standard-case-table", "set-syntax-table", "set-terminal-coding-system-internal", "set-terminal-local-value", "set-terminal-parameter", "set-text-properties", "set-time-zone-rule", "set-visited-file-modtime", "set-window-buffer", "set-window-combination-limit", "set-window-configuration", "set-window-dedicated-p", "set-window-display-table", "set-window-fringes", "set-window-hscroll", "set-window-margins", "set-window-new-normal", "set-window-new-pixel", "set-window-new-total", "set-window-next-buffers", "set-window-parameter", "set-window-point", "set-window-prev-buffers", "set-window-redisplay-end-trigger", "set-window-scroll-bars", "set-window-start", "set-window-vscroll", "setcar", "setcdr", "setplist", "show-face-resources", "signal", "signal-process", "sin", "single-key-description", "skip-chars-backward", "skip-chars-forward", "skip-syntax-backward", "skip-syntax-forward", "sleep-for", "sort", "sort-charsets", "special-variable-p", "split-char", "split-window-internal", "sqrt", "standard-case-table", "standard-category-table", "standard-syntax-table", "start-kbd-macro", "start-process", "stop-process", "store-kbd-macro-event", "string", "string-as-multibyte", "string-as-unibyte", "string-bytes", "string-collate-equalp", "string-collate-lessp", "string-equal", "string-lessp", "string-make-multibyte", "string-make-unibyte", "string-match", "string-to-char", "string-to-multibyte", "string-to-number", "string-to-syntax", "string-to-unibyte", "string-width", "stringp", "subr-name", "subrp", "subst-char-in-region", "substitute-command-keys", "substitute-in-file-name", "substring", "substring-no-properties", "suspend-emacs", "suspend-tty", "suspicious-object", "sxhash", "symbol-function", "symbol-name", "symbol-plist", "symbol-value", "symbolp", "syntax-table", "syntax-table-p", "system-groups", "system-move-file-to-trash", "system-name", "system-users", "tan", "terminal-coding-system", "terminal-list", "terminal-live-p", "terminal-local-value", "terminal-name", "terminal-parameter", "terminal-parameters", "terpri", "test-completion", "text-char-description", "text-properties-at", "text-property-any", "text-property-not-all", "this-command-keys", "this-command-keys-vector", "this-single-command-keys", "this-single-command-raw-keys", "time-add", "time-less-p", "time-subtract", "tool-bar-get-system-style", "tool-bar-height", "tool-bar-pixel-width", "top-level", "trace-redisplay", "trace-to-stderr", "translate-region-internal", "transpose-regions", "truncate", "try-completion", "tty-display-color-cells", "tty-display-color-p", "tty-no-underline", "tty-suppress-bold-inverse-default-colors", "tty-top-frame", "tty-type", "type-of", "undo-boundary", "unencodable-char-position", "unhandled-file-name-directory", "unibyte-char-to-multibyte", "unibyte-string", "unicode-property-table-internal", "unify-charset", "unintern", "unix-sync", "unlock-buffer", "upcase", "upcase-initials", "upcase-initials-region", "upcase-region", "upcase-word", "use-global-map", "use-local-map", "user-full-name", "user-login-name", "user-real-login-name", "user-real-uid", "user-uid", "variable-binding-locus", "vconcat", "vector", "vector-or-char-table-p", "vectorp", "verify-visited-file-modtime", "vertical-motion", "visible-frame-list", "visited-file-modtime", "w16-get-clipboard-data", "w16-selection-exists-p", "w16-set-clipboard-data", "w32-battery-status", "w32-default-color-map", "w32-define-rgb-color", "w32-display-monitor-attributes-list", "w32-frame-menu-bar-size", "w32-frame-rect", "w32-get-clipboard-data", "w32-get-codepage-charset", "w32-get-console-codepage", "w32-get-console-output-codepage", "w32-get-current-locale-id", "w32-get-default-locale-id", "w32-get-keyboard-layout", "w32-get-locale-info", "w32-get-valid-codepages", "w32-get-valid-keyboard-layouts", "w32-get-valid-locale-ids", "w32-has-winsock", "w32-long-file-name", "w32-reconstruct-hot-key", "w32-register-hot-key", "w32-registered-hot-keys", "w32-selection-exists-p", "w32-send-sys-command", "w32-set-clipboard-data", "w32-set-console-codepage", "w32-set-console-output-codepage", "w32-set-current-locale", "w32-set-keyboard-layout", "w32-set-process-priority", "w32-shell-execute", "w32-short-file-name", "w32-toggle-lock-key", "w32-unload-winsock", "w32-unregister-hot-key", "w32-window-exists-p", "w32notify-add-watch", "w32notify-rm-watch", "waiting-for-user-input-p", "where-is-internal", "widen", "widget-apply", "widget-get", "widget-put", "window-absolute-pixel-edges", "window-at", "window-body-height", "window-body-width", "window-bottom-divider-width", "window-buffer", "window-combination-limit", "window-configuration-frame", "window-configuration-p", "window-dedicated-p", "window-display-table", "window-edges", "window-end", "window-frame", "window-fringes", "window-header-line-height", "window-hscroll", "window-inside-absolute-pixel-edges", "window-inside-edges", "window-inside-pixel-edges", "window-left-child", "window-left-column", "window-line-height", "window-list", "window-list-1", "window-live-p", "window-margins", "window-minibuffer-p", "window-mode-line-height", "window-new-normal", "window-new-pixel", "window-new-total", "window-next-buffers", "window-next-sibling", "window-normal-size", "window-old-point", "window-parameter", "window-parameters", "window-parent", "window-pixel-edges", "window-pixel-height", "window-pixel-left", "window-pixel-top", "window-pixel-width", "window-point", "window-prev-buffers", "window-prev-sibling", "window-redisplay-end-trigger", "window-resize-apply", "window-resize-apply-total", "window-right-divider-width", "window-scroll-bar-height", "window-scroll-bar-width", "window-scroll-bars", "window-start", "window-system", "window-text-height", "window-text-pixel-size", "window-text-width", "window-top-child", "window-top-line", "window-total-height", "window-total-width", "window-use-time", "window-valid-p", "window-vscroll", "windowp", "write-char", "write-region", "x-backspace-delete-keys-p", "x-change-window-property", "x-change-window-property", "x-close-connection", "x-close-connection", "x-create-frame", "x-create-frame", "x-delete-window-property", "x-delete-window-property", "x-disown-selection-internal", "x-display-backing-store", "x-display-backing-store", "x-display-color-cells", "x-display-color-cells", "x-display-grayscale-p", "x-display-grayscale-p", "x-display-list", "x-display-list", "x-display-mm-height", "x-display-mm-height", "x-display-mm-width", "x-display-mm-width", "x-display-monitor-attributes-list", "x-display-pixel-height", "x-display-pixel-height", "x-display-pixel-width", "x-display-pixel-width", "x-display-planes", "x-display-planes", "x-display-save-under", "x-display-save-under", "x-display-screens", "x-display-screens", "x-display-visual-class", "x-display-visual-class", "x-family-fonts", "x-file-dialog", "x-file-dialog", "x-file-dialog", "x-focus-frame", "x-frame-geometry", "x-frame-geometry", "x-get-atom-name", "x-get-resource", "x-get-selection-internal", "x-hide-tip", "x-hide-tip", "x-list-fonts", "x-load-color-file", "x-menu-bar-open-internal", "x-menu-bar-open-internal", "x-open-connection", "x-open-connection", "x-own-selection-internal", "x-parse-geometry", "x-popup-dialog", "x-popup-menu", "x-register-dnd-atom", "x-select-font", "x-select-font", "x-selection-exists-p", "x-selection-owner-p", "x-send-client-message", "x-server-max-request-size", "x-server-max-request-size", "x-server-vendor", "x-server-vendor", "x-server-version", "x-server-version", "x-show-tip", "x-show-tip", "x-synchronize", "x-synchronize", "x-uses-old-gtk-dialog", "x-window-property", "x-window-property", "x-wm-set-size-hint", "xw-color-defined-p", "xw-color-defined-p", "xw-color-values", "xw-color-values", "xw-display-color-p", "xw-display-color-p", "yes-or-no-p", "zlib-available-p", "zlib-decompress-region", "forward-point", } emacsBuiltinFunctionHighlighted = []string{ "defvaralias", "provide", "require", "with-no-warnings", "define-widget", "with-electric-help", "throw", "defalias", "featurep", } emacsLambdaListKeywords = []string{ "&allow-other-keys", "&aux", "&body", "&environment", "&key", "&optional", "&rest", "&whole", } emacsErrorKeywords = []string{ "cl-assert", "cl-check-type", "error", "signal", "user-error", "warn", } ) // EmacsLisp lexer. var EmacsLisp = Register(TypeRemappingLexer(MustNewXMLLexer( embedded, "embedded/emacslisp.xml", ), TypeMapping{ {NameVariable, NameFunction, emacsBuiltinFunction}, {NameVariable, NameBuiltin, emacsSpecialForms}, {NameVariable, NameException, emacsErrorKeywords}, {NameVariable, NameBuiltin, append(emacsBuiltinFunctionHighlighted, emacsMacros...)}, {NameVariable, KeywordPseudo, emacsLambdaListKeywords}, })) chroma-2.14.0/lexers/embedded/000077500000000000000000000000001461341362700161115ustar00rootroot00000000000000chroma-2.14.0/lexers/embedded/abap.xml000066400000000000000000000224371461341362700175460ustar00rootroot00000000000000 ABAP abap *.abap *.ABAP text/x-abap true chroma-2.14.0/lexers/embedded/abnf.xml000066400000000000000000000034261461341362700175460ustar00rootroot00000000000000 ABNF abnf *.abnf text/x-abnf chroma-2.14.0/lexers/embedded/actionscript.xml000066400000000000000000000115641461341362700213440ustar00rootroot00000000000000 ActionScript as actionscript *.as application/x-actionscript text/x-actionscript text/actionscript true true chroma-2.14.0/lexers/embedded/actionscript_3.xml000066400000000000000000000124451461341362700215650ustar00rootroot00000000000000 ActionScript 3 as3 actionscript3 *.as application/x-actionscript3 text/x-actionscript3 text/actionscript3 true chroma-2.14.0/lexers/embedded/ada.xml000066400000000000000000000224071461341362700173650ustar00rootroot00000000000000 Ada ada ada95 ada2005 *.adb *.ads *.ada text/x-ada true chroma-2.14.0/lexers/embedded/agda.xml000066400000000000000000000146521461341362700175370ustar00rootroot00000000000000 Agda agda *.agda text/x-agda chroma-2.14.0/lexers/embedded/al.xml000066400000000000000000000107021461341362700172270ustar00rootroot00000000000000 AL al *.al *.dal text/x-al true true chroma-2.14.0/lexers/embedded/alloy.xml000066400000000000000000000066131461341362700177610ustar00rootroot00000000000000 Alloy alloy *.als text/x-alloy true chroma-2.14.0/lexers/embedded/angular2.xml000066400000000000000000000061711461341362700203530ustar00rootroot00000000000000 Angular2 ng2 chroma-2.14.0/lexers/embedded/antlr.xml000066400000000000000000000222251461341362700177560ustar00rootroot00000000000000 ANTLR antlr chroma-2.14.0/lexers/embedded/apacheconf.xml000066400000000000000000000041241461341362700207230ustar00rootroot00000000000000 ApacheConf apacheconf aconf apache .htaccess apache.conf apache2.conf text/x-apacheconf true chroma-2.14.0/lexers/embedded/apl.xml000066400000000000000000000036531461341362700174160ustar00rootroot00000000000000 APL apl *.apl chroma-2.14.0/lexers/embedded/applescript.xml000066400000000000000000000327041461341362700211670ustar00rootroot00000000000000 AppleScript applescript *.applescript true chroma-2.14.0/lexers/embedded/arangodb_aql.xml000066400000000000000000000170621461341362700212530ustar00rootroot00000000000000 ArangoDB AQL aql *.aql text/x-aql true true true chroma-2.14.0/lexers/embedded/arduino.xml000066400000000000000000000361531461341362700203040ustar00rootroot00000000000000 Arduino arduino *.ino text/x-arduino true chroma-2.14.0/lexers/embedded/armasm.xml000066400000000000000000000064511461341362700201210ustar00rootroot00000000000000 ArmAsm armasm *.s *.S text/x-armasm text/x-asm true chroma-2.14.0/lexers/embedded/autohotkey.xml000066400000000000000000000220041461341362700210250ustar00rootroot00000000000000 AutoHotkey autohotkey ahk *.ahk *.ahkl text/x-autohotkey chroma-2.14.0/lexers/embedded/autoit.xml000066400000000000000000000231331461341362700201420ustar00rootroot00000000000000 AutoIt autoit *.au3 text/x-autoit chroma-2.14.0/lexers/embedded/awk.xml000066400000000000000000000062471461341362700174260ustar00rootroot00000000000000 Awk awk gawk mawk nawk *.awk application/x-awk chroma-2.14.0/lexers/embedded/ballerina.xml000066400000000000000000000064571461341362700206000ustar00rootroot00000000000000 Ballerina ballerina *.bal text/x-ballerina true chroma-2.14.0/lexers/embedded/bash.xml000066400000000000000000000143161461341362700175550ustar00rootroot00000000000000 Bash bash sh ksh zsh shell *.sh *.ksh *.bash *.ebuild *.eclass .env *.env *.exheres-0 *.exlib *.zsh *.zshrc .bashrc bashrc .bash_* bash_* zshrc .zshrc PKGBUILD application/x-sh application/x-shellscript chroma-2.14.0/lexers/embedded/bash_session.xml000066400000000000000000000011731461341362700213150ustar00rootroot00000000000000 Bash Session bash-session console shell-session *.sh-session text/x-sh true chroma-2.14.0/lexers/embedded/batchfile.xml000066400000000000000000001006661461341362700205650ustar00rootroot00000000000000 Batchfile bat batch dosbatch winbatch *.bat *.cmd application/x-dos-batch true chroma-2.14.0/lexers/embedded/bibtex.xml000066400000000000000000000077341461341362700201230ustar00rootroot00000000000000 BibTeX bib bibtex *.bib text/x-bibtex true true chroma-2.14.0/lexers/embedded/bicep.xml000066400000000000000000000045041461341362700177200ustar00rootroot00000000000000 Bicep bicep *.bicep chroma-2.14.0/lexers/embedded/blitzbasic.xml000066400000000000000000000110411461341362700207560ustar00rootroot00000000000000 BlitzBasic blitzbasic b3d bplus *.bb *.decls text/x-bb true chroma-2.14.0/lexers/embedded/bnf.xml000066400000000000000000000012051461341362700173760ustar00rootroot00000000000000 BNF bnf *.bnf text/x-bnf chroma-2.14.0/lexers/embedded/bqn.xml000066400000000000000000000050351461341362700174160ustar00rootroot00000000000000 BQN bqn *.bqn chroma-2.14.0/lexers/embedded/brainfuck.xml000066400000000000000000000022221461341362700205750ustar00rootroot00000000000000 Brainfuck brainfuck bf *.bf *.b application/x-brainfuck chroma-2.14.0/lexers/embedded/c#.xml000066400000000000000000000077341461341362700171330ustar00rootroot00000000000000 C# csharp c# *.cs text/x-csharp true true chroma-2.14.0/lexers/embedded/c++.xml000066400000000000000000000246731461341362700172170ustar00rootroot00000000000000 C++ cpp c++ *.cpp *.hpp *.c++ *.h++ *.cc *.hh *.cxx *.hxx *.C *.H *.cp *.CPP *.tpp text/x-c++hdr text/x-c++src true chroma-2.14.0/lexers/embedded/c.xml000066400000000000000000000175241461341362700170660ustar00rootroot00000000000000 C c *.c *.h *.idc *.x[bp]m text/x-chdr text/x-csrc image/x-xbitmap image/x-xpixmap true chroma-2.14.0/lexers/embedded/cap_n_proto.xml000066400000000000000000000056311461341362700211430ustar00rootroot00000000000000 Cap'n Proto capnp *.capnp chroma-2.14.0/lexers/embedded/cassandra_cql.xml000066400000000000000000000116511461341362700214350ustar00rootroot00000000000000 Cassandra CQL cassandra cql *.cql text/x-cql true true 1 6 chroma-2.14.0/lexers/embedded/ceylon.xml000066400000000000000000000113631461341362700201300ustar00rootroot00000000000000 Ceylon ceylon *.ceylon text/x-ceylon true chroma-2.14.0/lexers/embedded/cfengine3.xml000066400000000000000000000124411461341362700204760ustar00rootroot00000000000000 CFEngine3 cfengine3 cf3 *.cf chroma-2.14.0/lexers/embedded/cfstatement.xml000066400000000000000000000053371461341362700211600ustar00rootroot00000000000000 cfstatement cfs true true chroma-2.14.0/lexers/embedded/chaiscript.xml000066400000000000000000000075001461341362700207660ustar00rootroot00000000000000 ChaiScript chai chaiscript *.chai text/x-chaiscript application/x-chaiscript true chroma-2.14.0/lexers/embedded/chapel.xml000066400000000000000000000115611461341362700200730ustar00rootroot00000000000000 Chapel chapel chpl *.chpl chroma-2.14.0/lexers/embedded/cheetah.xml000066400000000000000000000033601461341362700202360ustar00rootroot00000000000000 Cheetah cheetah spitfire *.tmpl *.spt application/x-cheetah application/x-spitfire chroma-2.14.0/lexers/embedded/clojure.xml000066400000000000000000000106751461341362700203070ustar00rootroot00000000000000 Clojure clojure clj edn *.clj *.edn text/x-clojure application/x-clojure application/edn chroma-2.14.0/lexers/embedded/cmake.xml000066400000000000000000000044251461341362700177200ustar00rootroot00000000000000 CMake cmake *.cmake CMakeLists.txt text/x-cmake chroma-2.14.0/lexers/embedded/cobol.xml000066400000000000000000000170471461341362700177420ustar00rootroot00000000000000 COBOL cobol *.cob *.COB *.cpy *.CPY text/x-cobol true chroma-2.14.0/lexers/embedded/coffeescript.xml000066400000000000000000000144561461341362700213210ustar00rootroot00000000000000 CoffeeScript coffee-script coffeescript coffee *.coffee text/coffeescript true true chroma-2.14.0/lexers/embedded/common_lisp.xml000066400000000000000000000136361461341362700211630ustar00rootroot00000000000000 Common Lisp common-lisp cl lisp *.cl *.lisp text/x-common-lisp true chroma-2.14.0/lexers/embedded/coq.xml000066400000000000000000000123121461341362700174140ustar00rootroot00000000000000 Coq coq *.v text/x-coq chroma-2.14.0/lexers/embedded/crystal.xml000066400000000000000000000563231461341362700203250ustar00rootroot00000000000000 Crystal cr crystal *.cr text/x-crystal true chroma-2.14.0/lexers/embedded/css.xml000066400000000000000000000600741461341362700174320ustar00rootroot00000000000000 CSS css *.css text/css chroma-2.14.0/lexers/embedded/cue.xml000066400000000000000000000047411461341362700174150ustar00rootroot00000000000000 CUE cue *.cue text/x-cue true true chroma-2.14.0/lexers/embedded/cython.xml000066400000000000000000000267171461341362700201540ustar00rootroot00000000000000 Cython cython pyx pyrex *.pyx *.pxd *.pxi text/x-cython application/x-cython chroma-2.14.0/lexers/embedded/d.xml000066400000000000000000000114701461341362700170610ustar00rootroot00000000000000 D d *.d *.di text/x-d true chroma-2.14.0/lexers/embedded/dart.xml000066400000000000000000000144041461341362700175700ustar00rootroot00000000000000 Dart dart *.dart text/x-dart true chroma-2.14.0/lexers/embedded/dax.xml000066400000000000000000000122671461341362700174170ustar00rootroot00000000000000 Dax dax *.dax chroma-2.14.0/lexers/embedded/desktop_entry.xml000066400000000000000000000016151461341362700215300ustar00rootroot00000000000000 Desktop file desktop desktop_entry *.desktop application/x-desktop chroma-2.14.0/lexers/embedded/diff.xml000066400000000000000000000025201461341362700175420ustar00rootroot00000000000000 Diff diff udiff *.diff *.patch text/x-diff text/x-patch true chroma-2.14.0/lexers/embedded/django_jinja.xml000066400000000000000000000110311461341362700212440ustar00rootroot00000000000000 Django/Jinja django jinja application/x-django-templating application/x-jinja true chroma-2.14.0/lexers/embedded/dns.xml000066400000000000000000000047271461341362700174310ustar00rootroot00000000000000 dns zone bind *.zone text/dns chroma-2.14.0/lexers/embedded/docker.xml000066400000000000000000000032371461341362700201070ustar00rootroot00000000000000 Docker docker dockerfile Dockerfile Dockerfile.* *.Dockerfile *.docker text/x-dockerfile-config true chroma-2.14.0/lexers/embedded/dtd.xml000066400000000000000000000106521461341362700174120ustar00rootroot00000000000000 DTD dtd *.dtd application/xml-dtd true chroma-2.14.0/lexers/embedded/dylan.xml000066400000000000000000000123151461341362700177440ustar00rootroot00000000000000 Dylan dylan *.dylan *.dyl *.intr text/x-dylan true chroma-2.14.0/lexers/embedded/ebnf.xml000066400000000000000000000042211461341362700175440ustar00rootroot00000000000000 EBNF ebnf *.ebnf text/x-ebnf chroma-2.14.0/lexers/embedded/elixir.xml000066400000000000000000000526031461341362700201350ustar00rootroot00000000000000 Elixir elixir ex exs *.ex *.eex *.exs text/x-elixir chroma-2.14.0/lexers/embedded/elm.xml000066400000000000000000000066471461341362700174250ustar00rootroot00000000000000 Elm elm *.elm text/x-elm chroma-2.14.0/lexers/embedded/emacslisp.xml000066400000000000000000000103411461341362700206120ustar00rootroot00000000000000 EmacsLisp emacs elisp emacs-lisp *.el text/x-elisp application/x-elisp chroma-2.14.0/lexers/embedded/erlang.xml000066400000000000000000000147261461341362700201150ustar00rootroot00000000000000 Erlang erlang *.erl *.hrl *.es *.escript text/x-erlang chroma-2.14.0/lexers/embedded/factor.xml000066400000000000000000000462101461341362700201140ustar00rootroot00000000000000 Factor factor *.factor text/x-factor chroma-2.14.0/lexers/embedded/fennel.xml000066400000000000000000000077331461341362700201140ustar00rootroot00000000000000 Fennel fennel fnl *.fennel text/x-fennel application/x-fennel chroma-2.14.0/lexers/embedded/fish.xml000066400000000000000000000124611461341362700175700ustar00rootroot00000000000000 Fish fish fishshell *.fish *.load application/x-fish chroma-2.14.0/lexers/embedded/forth.xml000066400000000000000000000116631461341362700177640ustar00rootroot00000000000000 Forth forth *.frt *.fth *.fs application/x-forth true chroma-2.14.0/lexers/embedded/fortran.xml000066400000000000000000000147211461341362700203130ustar00rootroot00000000000000 Fortran fortran f90 *.f03 *.f90 *.f95 *.F03 *.F90 *.F95 text/x-fortran true chroma-2.14.0/lexers/embedded/fortranfixed.xml000066400000000000000000000034241461341362700213310ustar00rootroot00000000000000 FortranFixed fortranfixed *.f *.F text/x-fortran true true chroma-2.14.0/lexers/embedded/fsharp.xml000066400000000000000000000174471461341362700201330ustar00rootroot00000000000000 FSharp fsharp *.fs *.fsi text/x-fsharp chroma-2.14.0/lexers/embedded/gas.xml000066400000000000000000000106441461341362700174120ustar00rootroot00000000000000 GAS gas asm *.s *.S text/x-gas 0.1 chroma-2.14.0/lexers/embedded/gdscript.xml000066400000000000000000000607641461341362700204670ustar00rootroot00000000000000 GDScript gdscript gd *.gd text/x-gdscript application/x-gdscript 0.1 chroma-2.14.0/lexers/embedded/gdscript3.xml000066400000000000000000000322011461341362700205330ustar00rootroot00000000000000 GDScript3 gdscript3 gd3 *.gd text/x-gdscript application/x-gdscript chroma-2.14.0/lexers/embedded/gherkin.xml000066400000000000000000000407041461341362700202670ustar00rootroot00000000000000 Gherkin cucumber Cucumber gherkin Gherkin *.feature *.FEATURE text/x-gherkin chroma-2.14.0/lexers/embedded/gleam.xml000066400000000000000000000065071461341362700177300ustar00rootroot00000000000000 Gleam gleam> *.gleam text/x-gleam chroma-2.14.0/lexers/embedded/glsl.xml000066400000000000000000000047121461341362700176000ustar00rootroot00000000000000 GLSL glsl *.vert *.frag *.geo text/x-glslsrc chroma-2.14.0/lexers/embedded/gnuplot.xml000066400000000000000000000336411461341362700203320ustar00rootroot00000000000000 Gnuplot gnuplot *.plot *.plt text/x-gnuplot chroma-2.14.0/lexers/embedded/go_template.xml000066400000000000000000000065621461341362700211440ustar00rootroot00000000000000 Go Template go-template *.gotmpl *.go.tmpl chroma-2.14.0/lexers/embedded/graphql.xml000066400000000000000000000055111461341362700202730ustar00rootroot00000000000000 GraphQL graphql graphqls gql *.graphql *.graphqls chroma-2.14.0/lexers/embedded/groff.xml000066400000000000000000000043031461341362700177360ustar00rootroot00000000000000 Groff groff nroff man *.[1-9] *.1p *.3pm *.man application/x-troff text/troff chroma-2.14.0/lexers/embedded/groovy.xml000066400000000000000000000102231461341362700201560ustar00rootroot00000000000000 Groovy groovy *.groovy *.gradle text/x-groovy true chroma-2.14.0/lexers/embedded/handlebars.xml000066400000000000000000000076411461341362700207460ustar00rootroot00000000000000 Handlebars handlebars hbs *.handlebars *.hbs chroma-2.14.0/lexers/embedded/hare.xml000066400000000000000000000064541461341362700175630ustar00rootroot00000000000000 Hare hare *.ha text/x-hare chroma-2.14.0/lexers/embedded/haskell.xml000066400000000000000000000176501461341362700202670ustar00rootroot00000000000000 Haskell haskell hs *.hs text/x-haskell chroma-2.14.0/lexers/embedded/hcl.xml000066400000000000000000000066671461341362700174200ustar00rootroot00000000000000 HCL hcl *.hcl application/x-hcl chroma-2.14.0/lexers/embedded/hexdump.xml000066400000000000000000000120741461341362700203110ustar00rootroot00000000000000 Hexdump hexdump chroma-2.14.0/lexers/embedded/hlb.xml000066400000000000000000000104721461341362700174040ustar00rootroot00000000000000 HLB hlb *.hlb chroma-2.14.0/lexers/embedded/hlsl.xml000066400000000000000000000164171461341362700176060ustar00rootroot00000000000000 HLSL hlsl *.hlsl *.hlsli *.cginc *.fx *.fxh text/x-hlsl chroma-2.14.0/lexers/embedded/holyc.xml000066400000000000000000000170561461341362700177620ustar00rootroot00000000000000 HolyC holyc *.HC *.hc *.HH *.hh *.hc.z *.HC.Z text/x-chdr text/x-csrc image/x-xbitmap image/x-xpixmap true chroma-2.14.0/lexers/embedded/html.xml000066400000000000000000000107131461341362700176010ustar00rootroot00000000000000 HTML html *.html *.htm *.xhtml *.xslt text/html application/xhtml+xml true true true chroma-2.14.0/lexers/embedded/hy.xml000066400000000000000000000113471461341362700172610ustar00rootroot00000000000000 Hy hylang *.hy text/x-hy application/x-hy chroma-2.14.0/lexers/embedded/idris.xml000066400000000000000000000146051461341362700177530ustar00rootroot00000000000000 Idris idris idr *.idr text/x-idris chroma-2.14.0/lexers/embedded/igor.xml000066400000000000000000000546631461341362700176110ustar00rootroot00000000000000 Igor igor igorpro *.ipf text/ipf true chroma-2.14.0/lexers/embedded/ini.xml000066400000000000000000000023361461341362700174160ustar00rootroot00000000000000 INI ini cfg dosini *.ini *.cfg *.inf *.service *.socket .gitconfig .editorconfig pylintrc .pylintrc text/x-ini text/inf 0.1 chroma-2.14.0/lexers/embedded/io.xml000066400000000000000000000040021461341362700172360ustar00rootroot00000000000000 Io io *.io text/x-iosrc chroma-2.14.0/lexers/embedded/iscdhcpd.xml000066400000000000000000000056721461341362700204260ustar00rootroot00000000000000 ISCdhcpd iscdhcpd dhcpd.conf chroma-2.14.0/lexers/embedded/j.xml000066400000000000000000000114261461341362700170700ustar00rootroot00000000000000 J j *.ijs text/x-j chroma-2.14.0/lexers/embedded/java.xml000066400000000000000000000140651461341362700175620ustar00rootroot00000000000000 Java java *.java text/x-java true chroma-2.14.0/lexers/embedded/javascript.xml000066400000000000000000000123661461341362700210110ustar00rootroot00000000000000 JavaScript js javascript *.js *.jsm *.mjs *.cjs application/javascript application/x-javascript text/x-javascript text/javascript true true chroma-2.14.0/lexers/embedded/json.xml000066400000000000000000000053161461341362700176110ustar00rootroot00000000000000 JSON json *.json *.avsc application/json true true chroma-2.14.0/lexers/embedded/julia.xml000066400000000000000000000614411461341362700177450ustar00rootroot00000000000000 Julia julia jl *.jl text/x-julia application/x-julia chroma-2.14.0/lexers/embedded/jungle.xml000066400000000000000000000050671461341362700201270ustar00rootroot00000000000000 Jungle jungle *.jungle text/x-jungle chroma-2.14.0/lexers/embedded/kotlin.xml000066400000000000000000000156551461341362700201470ustar00rootroot00000000000000 Kotlin kotlin *.kt text/x-kotlin true chroma-2.14.0/lexers/embedded/lighttpd_configuration_file.xml000066400000000000000000000021331461341362700243770ustar00rootroot00000000000000 Lighttpd configuration file lighty lighttpd text/x-lighttpd-conf chroma-2.14.0/lexers/embedded/llvm.xml000066400000000000000000000105731461341362700176130ustar00rootroot00000000000000 LLVM llvm *.ll text/x-llvm chroma-2.14.0/lexers/embedded/lua.xml000066400000000000000000000105601461341362700174160ustar00rootroot00000000000000 Lua lua *.lua *.wlua text/x-lua application/x-lua chroma-2.14.0/lexers/embedded/makefile.xml000066400000000000000000000067001461341362700204130ustar00rootroot00000000000000 Makefile make makefile mf bsdmake *.mak *.mk Makefile makefile Makefile.* GNUmakefile BSDmakefile Justfile justfile .justfile text/x-makefile true chroma-2.14.0/lexers/embedded/mako.xml000066400000000000000000000076301461341362700175700ustar00rootroot00000000000000 Mako mako *.mao application/x-mako chroma-2.14.0/lexers/embedded/mason.xml000066400000000000000000000060371461341362700177560ustar00rootroot00000000000000 Mason mason *.m *.mhtml *.mc *.mi autohandler dhandler application/x-mason 0.1 chroma-2.14.0/lexers/embedded/materialize_sql_dialect.xml000066400000000000000000000205231461341362700235070ustar00rootroot00000000000000 Materialize SQL dialect materialize mzsql text/x-materializesql true true 6 12 12 4 chroma-2.14.0/lexers/embedded/mathematica.xml000066400000000000000000000035301461341362700211110ustar00rootroot00000000000000 Mathematica mathematica mma nb *.cdf *.m *.ma *.mt *.mx *.nb *.nbp *.wl application/mathematica application/vnd.wolfram.mathematica application/vnd.wolfram.mathematica.package application/vnd.wolfram.cdf chroma-2.14.0/lexers/embedded/matlab.xml000066400000000000000000000106261461341362700201000ustar00rootroot00000000000000 Matlab matlab *.m text/matlab chroma-2.14.0/lexers/embedded/mcfunction.xml000066400000000000000000000134511461341362700210040ustar00rootroot00000000000000 mcfunction mcfunction *.mcfunction true true chroma-2.14.0/lexers/embedded/meson.xml000066400000000000000000000057011461341362700177570ustar00rootroot00000000000000 Meson meson meson.build meson.build meson_options.txt text/x-meson chroma-2.14.0/lexers/embedded/metal.xml000066400000000000000000000201621461341362700177360ustar00rootroot00000000000000 Metal metal *.metal text/x-metal true chroma-2.14.0/lexers/embedded/minizinc.xml000066400000000000000000000056301461341362700204570ustar00rootroot00000000000000 MiniZinc minizinc MZN mzn *.mzn *.dzn *.fzn text/minizinc chroma-2.14.0/lexers/embedded/mlir.xml000066400000000000000000000036711461341362700176050ustar00rootroot00000000000000 MLIR mlir *.mlir text/x-mlir chroma-2.14.0/lexers/embedded/modula-2.xml000066400000000000000000000146551461341362700202660ustar00rootroot00000000000000 Modula-2 modula2 m2 *.def *.mod text/x-modula2 true chroma-2.14.0/lexers/embedded/monkeyc.xml000066400000000000000000000114741461341362700203070ustar00rootroot00000000000000 MonkeyC monkeyc *.mc text/x-monkeyc chroma-2.14.0/lexers/embedded/morrowindscript.xml000066400000000000000000000260171461341362700221060ustar00rootroot00000000000000 MorrowindScript morrowind mwscript chroma-2.14.0/lexers/embedded/myghty.xml000066400000000000000000000052621461341362700201610ustar00rootroot00000000000000 Myghty myghty *.myt autodelegate application/x-myghty chroma-2.14.0/lexers/embedded/mysql.xml000066400000000000000000000124041461341362700200010ustar00rootroot00000000000000 MySQL mysql mariadb *.sql text/x-mysql text/x-mariadb true true chroma-2.14.0/lexers/embedded/nasm.xml000066400000000000000000000074711461341362700176020ustar00rootroot00000000000000 NASM nasm *.asm *.ASM *.nasm text/x-nasm true 1.0 chroma-2.14.0/lexers/embedded/natural.xml000066400000000000000000000132261461341362700203050ustar00rootroot00000000000000 Natural natural *.NSN *.NSP *.NSS *.NSH *.NSG *.NSL *.NSA *.NSM *.NSC *.NS7 text/x-natural true chroma-2.14.0/lexers/embedded/ndisasm.xml000066400000000000000000000072331461341362700202760ustar00rootroot00000000000000 NDISASM ndisasm text/x-disasm true 0.5 chroma-2.14.0/lexers/embedded/newspeak.xml000066400000000000000000000064441461341362700204600ustar00rootroot00000000000000 Newspeak newspeak *.ns2 text/x-newspeak chroma-2.14.0/lexers/embedded/nginx_configuration_file.xml000066400000000000000000000047111461341362700237070ustar00rootroot00000000000000 Nginx configuration file nginx nginx.conf text/x-nginx-conf chroma-2.14.0/lexers/embedded/nim.xml000066400000000000000000000162141461341362700174220ustar00rootroot00000000000000 Nim nim nimrod *.nim *.nimrod text/x-nim true chroma-2.14.0/lexers/embedded/nix.xml000066400000000000000000000157111461341362700174360ustar00rootroot00000000000000 Nix nixos nix *.nix text/x-nix chroma-2.14.0/lexers/embedded/objective-c.xml000066400000000000000000000361151461341362700210330ustar00rootroot00000000000000 Objective-C objective-c objectivec obj-c objc *.m *.h text/x-objective-c chroma-2.14.0/lexers/embedded/objectpascal.xml000066400000000000000000000155161461341362700212750ustar00rootroot00000000000000 ObjectPascal objectpascal *.pas *.pp *.inc *.dpr *.dpk *.lpr *.lpk text/x-pascal chroma-2.14.0/lexers/embedded/ocaml.xml000066400000000000000000000107561461341362700177370ustar00rootroot00000000000000 OCaml ocaml *.ml *.mli *.mll *.mly text/x-ocaml chroma-2.14.0/lexers/embedded/octave.xml000066400000000000000000000312651461341362700201230ustar00rootroot00000000000000 Octave octave *.m text/octave chroma-2.14.0/lexers/embedded/odin.xml000066400000000000000000000106601461341362700175670ustar00rootroot00000000000000 Odin odin *.odin text/odin chroma-2.14.0/lexers/embedded/onesenterprise.xml000066400000000000000000000066141461341362700217070ustar00rootroot00000000000000 OnesEnterprise ones onesenterprise 1S 1S:Enterprise *.EPF *.epf *.ERF *.erf application/octet-stream true chroma-2.14.0/lexers/embedded/openedge_abl.xml000066400000000000000000001024161461341362700212430ustar00rootroot00000000000000 OpenEdge ABL openedge abl progress openedgeabl *.p *.cls *.w *.i text/x-openedge application/x-openedge chroma-2.14.0/lexers/embedded/openscad.xml000066400000000000000000000063021461341362700204300ustar00rootroot00000000000000 OpenSCAD openscad *.scad text/x-scad chroma-2.14.0/lexers/embedded/org_mode.xml000066400000000000000000000233221461341362700204300ustar00rootroot00000000000000 Org Mode org orgmode *.org text/org 2 4 2 4 chroma-2.14.0/lexers/embedded/pacmanconf.xml000066400000000000000000000016231461341362700207420ustar00rootroot00000000000000 PacmanConf pacmanconf pacman.conf chroma-2.14.0/lexers/embedded/perl.xml000066400000000000000000000334561461341362700176100ustar00rootroot00000000000000 Perl perl pl *.pl *.pm *.t text/x-perl application/x-perl true chroma-2.14.0/lexers/embedded/php.xml000066400000000000000000000162171461341362700174310ustar00rootroot00000000000000 PHP php php3 php4 php5 *.php *.php[345] *.inc text/x-php true true true 3 chroma-2.14.0/lexers/embedded/pig.xml000066400000000000000000000064311461341362700174160ustar00rootroot00000000000000 Pig pig *.pig text/x-pig true chroma-2.14.0/lexers/embedded/pkgconfig.xml000066400000000000000000000032771461341362700206130ustar00rootroot00000000000000 PkgConfig pkgconfig *.pc chroma-2.14.0/lexers/embedded/pl_pgsql.xml000066400000000000000000000157161461341362700204660ustar00rootroot00000000000000 PL/pgSQL plpgsql text/x-plpgsql true true chroma-2.14.0/lexers/embedded/plaintext.xml000066400000000000000000000006701461341362700206460ustar00rootroot00000000000000 plaintext text plain no-highlight *.txt text/plain -1 chroma-2.14.0/lexers/embedded/plutus_core.xml000066400000000000000000000067131461341362700212060ustar00rootroot00000000000000 Plutus Core plutus-core plc *.plc text/x-plutus-core application/x-plutus-core chroma-2.14.0/lexers/embedded/pony.xml000066400000000000000000000107421461341362700176240ustar00rootroot00000000000000 Pony pony *.pony chroma-2.14.0/lexers/embedded/postgresql_sql_dialect.xml000066400000000000000000000207271461341362700234120ustar00rootroot00000000000000 PostgreSQL SQL dialect postgresql postgres text/x-postgresql true true 6 12 12 4 chroma-2.14.0/lexers/embedded/postscript.xml000066400000000000000000000070371461341362700210540ustar00rootroot00000000000000 PostScript postscript postscr *.ps *.eps application/postscript chroma-2.14.0/lexers/embedded/povray.xml000066400000000000000000000110661461341362700201570ustar00rootroot00000000000000 POVRay pov *.pov *.inc text/x-povray chroma-2.14.0/lexers/embedded/powerquery.xml000066400000000000000000000032221461341362700210540ustar00rootroot00000000000000 PowerQuery powerquery pq *.pq text/x-powerquery true true chroma-2.14.0/lexers/embedded/powershell.xml000066400000000000000000000214471461341362700210270ustar00rootroot00000000000000 PowerShell powershell posh ps1 psm1 psd1 pwsh *.ps1 *.psm1 *.psd1 text/x-powershell true true chroma-2.14.0/lexers/embedded/prolog.xml000066400000000000000000000067221461341362700201440ustar00rootroot00000000000000 Prolog prolog *.ecl *.prolog *.pro *.pl text/x-prolog chroma-2.14.0/lexers/embedded/promela.xml000066400000000000000000000233071461341362700202770ustar00rootroot00000000000000 Promela promela *.pml *.prom *.prm *.promela *.pr *.pm text/x-promela chroma-2.14.0/lexers/embedded/promql.xml000066400000000000000000000074651461341362700201610ustar00rootroot00000000000000 PromQL promql *.promql chroma-2.14.0/lexers/embedded/properties.xml000066400000000000000000000023661461341362700210360ustar00rootroot00000000000000 properties java-properties *.properties text/x-java-properties chroma-2.14.0/lexers/embedded/protocol_buffer.xml000066400000000000000000000065161461341362700220350ustar00rootroot00000000000000 Protocol Buffer protobuf proto *.proto chroma-2.14.0/lexers/embedded/prql.xml000066400000000000000000000256021461341362700176160ustar00rootroot00000000000000 PRQL prql *.prql application/prql chroma-2.14.0/lexers/embedded/psl.xml000066400000000000000000000136151461341362700174370ustar00rootroot00000000000000 PSL psl *.psl *.BATCH *.TRIG *.PROC text/x-psl chroma-2.14.0/lexers/embedded/puppet.xml000066400000000000000000000070411461341362700201520ustar00rootroot00000000000000 Puppet puppet *.pp chroma-2.14.0/lexers/embedded/python.xml000066400000000000000000000476461461341362700201750ustar00rootroot00000000000000 Python python py sage python3 py3 *.py *.pyi *.pyw *.jy *.sage *.sc SConstruct SConscript *.bzl BUCK BUILD BUILD.bazel WORKSPACE WORKSPACE.bzlmod WORKSPACE.bazel MODULE.bazel REPO.bazel *.tac text/x-python application/x-python text/x-python3 application/x-python3 chroma-2.14.0/lexers/embedded/python_2.xml000066400000000000000000000305771461341362700204110ustar00rootroot00000000000000 Python 2 python2 py2 text/x-python2 application/x-python2 chroma-2.14.0/lexers/embedded/qbasic.xml000066400000000000000000000147311461341362700201030ustar00rootroot00000000000000 QBasic qbasic basic *.BAS *.bas text/basic chroma-2.14.0/lexers/embedded/qml.xml000066400000000000000000000075301461341362700174310ustar00rootroot00000000000000 QML qml qbs *.qml *.qbs application/x-qml application/x-qt.qbs+qml true chroma-2.14.0/lexers/embedded/r.xml000066400000000000000000000072521461341362700171020ustar00rootroot00000000000000 R splus s r *.S *.R *.r .Rhistory .Rprofile .Renviron text/S-plus text/S text/x-r-source text/x-r text/x-R text/x-r-history text/x-r-profile 0.1 chroma-2.14.0/lexers/embedded/racket.xml000066400000000000000000001404651461341362700201160ustar00rootroot00000000000000 Racket racket rkt *.rkt *.rktd *.rktl text/x-racket application/x-racket chroma-2.14.0/lexers/embedded/ragel.xml000066400000000000000000000100651461341362700177270ustar00rootroot00000000000000 Ragel ragel chroma-2.14.0/lexers/embedded/react.xml000066400000000000000000000161351461341362700177370ustar00rootroot00000000000000 react jsx react *.jsx *.react text/jsx text/typescript-jsx true chroma-2.14.0/lexers/embedded/reasonml.xml000066400000000000000000000111421461341362700204520ustar00rootroot00000000000000 ReasonML reason reasonml *.re *.rei text/x-reasonml chroma-2.14.0/lexers/embedded/reg.xml000066400000000000000000000034671461341362700174220ustar00rootroot00000000000000 reg registry *.reg text/x-windows-registry chroma-2.14.0/lexers/embedded/rego.xml000066400000000000000000000054311461341362700175720ustar00rootroot00000000000000 Rego rego *.rego chroma-2.14.0/lexers/embedded/rexx.xml000066400000000000000000000101741461341362700176240ustar00rootroot00000000000000 Rexx rexx arexx *.rexx *.rex *.rx *.arexx text/x-rexx true true chroma-2.14.0/lexers/embedded/rpm_spec.xml000066400000000000000000000070471461341362700204530ustar00rootroot00000000000000 RPMSpec spec *.spec text/x-rpm-spec chroma-2.14.0/lexers/embedded/ruby.xml000066400000000000000000000547321461341362700176270ustar00rootroot00000000000000 Ruby rb ruby duby *.rb *.rbw Rakefile *.rake *.gemspec *.rbx *.duby Gemfile Vagrantfile text/x-ruby application/x-ruby true chroma-2.14.0/lexers/embedded/rust.xml000066400000000000000000000264151461341362700176400ustar00rootroot00000000000000 Rust rust rs *.rs *.rs.in text/rust text/x-rust true chroma-2.14.0/lexers/embedded/sas.xml000066400000000000000000000174651461341362700174360ustar00rootroot00000000000000 SAS sas *.SAS *.sas text/x-sas text/sas application/x-sas true chroma-2.14.0/lexers/embedded/sass.xml000066400000000000000000000434251461341362700176140ustar00rootroot00000000000000 Sass sass *.sass text/x-sass true chroma-2.14.0/lexers/embedded/scala.xml000066400000000000000000000504321461341362700177220ustar00rootroot00000000000000 Scala scala *.scala text/x-scala true chroma-2.14.0/lexers/embedded/scheme.xml000066400000000000000000000130141461341362700200760ustar00rootroot00000000000000 Scheme scheme scm *.scm *.ss text/x-scheme application/x-scheme chroma-2.14.0/lexers/embedded/scilab.xml000066400000000000000000000774151461341362700201060ustar00rootroot00000000000000 Scilab scilab *.sci *.sce *.tst text/scilab chroma-2.14.0/lexers/embedded/scss.xml000066400000000000000000000712401461341362700176120ustar00rootroot00000000000000 SCSS scss *.scss text/x-scss true true true chroma-2.14.0/lexers/embedded/sed.xml000066400000000000000000000042211461341362700174050ustar00rootroot00000000000000 Sed sed gsed ssed *.sed *.[gs]sed text/x-sed None chroma-2.14.0/lexers/embedded/sieve.xml000066400000000000000000000037761461341362700177630ustar00rootroot00000000000000 Sieve sieve *.siv *.sieve chroma-2.14.0/lexers/embedded/smali.xml000066400000000000000000000075401461341362700177460ustar00rootroot00000000000000 Smali smali *.smali text/smali chroma-2.14.0/lexers/embedded/smalltalk.xml000066400000000000000000000206421461341362700206230ustar00rootroot00000000000000 Smalltalk smalltalk squeak st *.st text/x-smalltalk chroma-2.14.0/lexers/embedded/smarty.xml000066400000000000000000000043261461341362700201570ustar00rootroot00000000000000 Smarty smarty *.tpl application/x-smarty true chroma-2.14.0/lexers/embedded/snobol.xml000066400000000000000000000052751461341362700201400ustar00rootroot00000000000000 Snobol snobol *.snobol text/x-snobol chroma-2.14.0/lexers/embedded/solidity.xml000066400000000000000000001671611461341362700205070ustar00rootroot00000000000000 Solidity sol solidity *.sol true chroma-2.14.0/lexers/embedded/sourcepawn.xml000066400000000000000000000100721461341362700210210ustar00rootroot00000000000000 SourcePawn sp *.sp *.inc text/x-sourcepawn chroma-2.14.0/lexers/embedded/sparql.xml000066400000000000000000000132011461341362700201320ustar00rootroot00000000000000 SPARQL sparql *.rq *.sparql application/sparql-query chroma-2.14.0/lexers/embedded/sql.xml000066400000000000000000000154461461341362700174440ustar00rootroot00000000000000 SQL sql *.sql text/x-sql true true chroma-2.14.0/lexers/embedded/squidconf.xml000066400000000000000000000134751461341362700206400ustar00rootroot00000000000000 SquidConf squidconf squid.conf squid squid.conf text/x-squidconf true true chroma-2.14.0/lexers/embedded/standard_ml.xml000066400000000000000000000372131461341362700211310ustar00rootroot00000000000000 Standard ML sml *.sml *.sig *.fun text/x-standardml application/x-standardml chroma-2.14.0/lexers/embedded/stas.xml000066400000000000000000000051671461341362700176160ustar00rootroot00000000000000 stas *.stas chroma-2.14.0/lexers/embedded/stylus.xml000066400000000000000000000335371461341362700202110ustar00rootroot00000000000000 Stylus stylus *.styl text/x-styl true chroma-2.14.0/lexers/embedded/swift.xml000066400000000000000000000241461461341362700177760ustar00rootroot00000000000000 Swift swift *.swift text/x-swift chroma-2.14.0/lexers/embedded/systemd.xml000066400000000000000000000032521461341362700203250ustar00rootroot00000000000000 SYSTEMD systemd *.automount *.device *.dnssd *.link *.mount *.netdev *.network *.path *.scope *.service *.slice *.socket *.swap *.target *.timer text/plain chroma-2.14.0/lexers/embedded/systemverilog.xml000066400000000000000000000201231461341362700215450ustar00rootroot00000000000000 systemverilog systemverilog sv *.sv *.svh text/x-systemverilog true chroma-2.14.0/lexers/embedded/tablegen.xml000066400000000000000000000035711461341362700204220ustar00rootroot00000000000000 TableGen tablegen *.td text/x-tablegen chroma-2.14.0/lexers/embedded/tal.xml000066400000000000000000000043361461341362700174210ustar00rootroot00000000000000 Tal tal uxntal *.tal text/x-uxntal chroma-2.14.0/lexers/embedded/tasm.xml000066400000000000000000000100461461341362700176000ustar00rootroot00000000000000 TASM tasm *.asm *.ASM *.tasm text/x-tasm true chroma-2.14.0/lexers/embedded/tcl.xml000066400000000000000000000231251461341362700174200ustar00rootroot00000000000000 Tcl tcl *.tcl *.rvt text/x-tcl text/x-script.tcl application/x-tcl chroma-2.14.0/lexers/embedded/tcsh.xml000066400000000000000000000071441461341362700176020ustar00rootroot00000000000000 Tcsh tcsh csh *.tcsh *.csh application/x-csh chroma-2.14.0/lexers/embedded/termcap.xml000066400000000000000000000034001461341362700202630ustar00rootroot00000000000000 Termcap termcap termcap termcap.src chroma-2.14.0/lexers/embedded/terminfo.xml000066400000000000000000000037641461341362700204700ustar00rootroot00000000000000 Terminfo terminfo terminfo terminfo.src chroma-2.14.0/lexers/embedded/terraform.xml000066400000000000000000000113611461341362700206360ustar00rootroot00000000000000 Terraform terraform tf *.tf application/x-tf application/x-terraform chroma-2.14.0/lexers/embedded/tex.xml000066400000000000000000000054221461341362700174360ustar00rootroot00000000000000 TeX tex latex *.tex *.aux *.toc text/x-tex text/x-latex chroma-2.14.0/lexers/embedded/thrift.xml000066400000000000000000000122001461341362700201260ustar00rootroot00000000000000 Thrift thrift *.thrift application/x-thrift chroma-2.14.0/lexers/embedded/toml.xml000066400000000000000000000023611461341362700176100ustar00rootroot00000000000000 TOML toml *.toml Pipfile poetry.lock text/x-toml chroma-2.14.0/lexers/embedded/tradingview.xml000066400000000000000000000131171461341362700211610ustar00rootroot00000000000000 TradingView tradingview tv *.tv text/x-tradingview true true chroma-2.14.0/lexers/embedded/transact-sql.xml000066400000000000000000000240651461341362700212560ustar00rootroot00000000000000 Transact-SQL tsql t-sql text/x-tsql true true chroma-2.14.0/lexers/embedded/turing.xml000066400000000000000000000061171461341362700201500ustar00rootroot00000000000000 Turing turing *.turing *.tu text/x-turing chroma-2.14.0/lexers/embedded/turtle.xml000066400000000000000000000121421461341362700201520ustar00rootroot00000000000000 Turtle turtle *.ttl text/turtle application/x-turtle true true chroma-2.14.0/lexers/embedded/twig.xml000066400000000000000000000114311461341362700176050ustar00rootroot00000000000000 Twig twig *.twig application/x-twig true chroma-2.14.0/lexers/embedded/typescript.xml000066400000000000000000000204511461341362700210430ustar00rootroot00000000000000 TypeScript ts tsx typescript *.ts *.tsx *.mts *.cts text/x-typescript true true chroma-2.14.0/lexers/embedded/typoscript.xml000066400000000000000000000140231461341362700210530ustar00rootroot00000000000000 TypoScript typoscript *.ts text/x-typoscript true 0.1 chroma-2.14.0/lexers/embedded/typoscriptcssdata.xml000066400000000000000000000031151461341362700224160ustar00rootroot00000000000000 TypoScriptCssData typoscriptcssdata chroma-2.14.0/lexers/embedded/typoscripthtmldata.xml000066400000000000000000000030421461341362700225710ustar00rootroot00000000000000 TypoScriptHtmlData typoscripthtmldata chroma-2.14.0/lexers/embedded/ucode.xml000066400000000000000000000105171461341362700177360ustar00rootroot00000000000000 ucode *.uc application/x.ucode text/x.ucode true true chroma-2.14.0/lexers/embedded/v.xml000066400000000000000000000327031461341362700171050ustar00rootroot00000000000000 V v vlang *.v *.vv v.mod text/x-v true chroma-2.14.0/lexers/embedded/v_shell.xml000066400000000000000000000372771461341362700203070ustar00rootroot00000000000000 V shell vsh vshell *.vsh text/x-vsh true chroma-2.14.0/lexers/embedded/vala.xml000066400000000000000000000112761461341362700175650ustar00rootroot00000000000000 Vala vala vapi *.vala *.vapi text/x-vala chroma-2.14.0/lexers/embedded/vb_net.xml000066400000000000000000000130061461341362700201100ustar00rootroot00000000000000 VB.net vb.net vbnet *.vb *.bas text/x-vbnet text/x-vba true chroma-2.14.0/lexers/embedded/verilog.xml000066400000000000000000000141361461341362700203070ustar00rootroot00000000000000 verilog verilog v *.v text/x-verilog true chroma-2.14.0/lexers/embedded/vhdl.xml000066400000000000000000000126601461341362700175750ustar00rootroot00000000000000 VHDL vhdl *.vhdl *.vhd text/x-vhdl true chroma-2.14.0/lexers/embedded/vhs.xml000066400000000000000000000025521461341362700174370ustar00rootroot00000000000000 VHS vhs tape cassette *.tape chroma-2.14.0/lexers/embedded/viml.xml000066400000000000000000000050511461341362700176030ustar00rootroot00000000000000 VimL vim *.vim .vimrc .exrc .gvimrc _vimrc _exrc _gvimrc vimrc gvimrc text/x-vim chroma-2.14.0/lexers/embedded/vue.xml000066400000000000000000000222701461341362700174350ustar00rootroot00000000000000 vue vue vuejs *.vue text/x-vue application/x-vue true chroma-2.14.0/lexers/embedded/wdte.xml000066400000000000000000000021351461341362700175770ustar00rootroot00000000000000 WDTE *.wdte chroma-2.14.0/lexers/embedded/webgpu_shading_language.xml000066400000000000000000000776171461341362700235060ustar00rootroot00000000000000 WebGPU Shading Language wgsl *.wgsl text/wgsl chroma-2.14.0/lexers/embedded/whiley.xml000066400000000000000000000033671461341362700201450ustar00rootroot00000000000000 Whiley whiley *.whiley text/x-whiley chroma-2.14.0/lexers/embedded/xml.xml000066400000000000000000000050111461341362700174300ustar00rootroot00000000000000 XML xml *.xml *.xsl *.rss *.xslt *.xsd *.wsdl *.wsf *.svg *.csproj *.vcxproj *.fsproj text/xml application/xml image/svg+xml application/rss+xml application/atom+xml true chroma-2.14.0/lexers/embedded/xorg.xml000066400000000000000000000016511461341362700176150ustar00rootroot00000000000000 Xorg xorg.conf xorg.conf chroma-2.14.0/lexers/embedded/yaml.xml000066400000000000000000000070151461341362700176000ustar00rootroot00000000000000 YAML yaml *.yaml *.yml text/x-yaml chroma-2.14.0/lexers/embedded/yang.xml000066400000000000000000000071621461341362700175770ustar00rootroot00000000000000 YANG yang *.yang application/yang chroma-2.14.0/lexers/embedded/z80_assembly.xml000066400000000000000000000044141461341362700211560ustar00rootroot00000000000000 Z80 Assembly z80 *.z80 *.asm true chroma-2.14.0/lexers/embedded/zed.xml000066400000000000000000000025341461341362700174210ustar00rootroot00000000000000 Zed zed *.zed text/zed chroma-2.14.0/lexers/embedded/zig.xml000066400000000000000000000074441461341362700174350ustar00rootroot00000000000000 Zig zig *.zig text/zig chroma-2.14.0/lexers/genshi.go000066400000000000000000000063201461341362700161650ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) // Genshi Text lexer. var GenshiText = Register(MustNewLexer( &Config{ Name: "Genshi Text", Aliases: []string{"genshitext"}, Filenames: []string{}, MimeTypes: []string{"application/x-genshi-text", "text/x-genshi"}, }, genshiTextRules, )) func genshiTextRules() Rules { return Rules{ "root": { {`[^#$\s]+`, Other, nil}, {`^(\s*)(##.*)$`, ByGroups(Text, Comment), nil}, {`^(\s*)(#)`, ByGroups(Text, CommentPreproc), Push("directive")}, Include("variable"), {`[#$\s]`, Other, nil}, }, "directive": { {`\n`, Text, Pop(1)}, {`(?:def|for|if)\s+.*`, Using("Python"), Pop(1)}, {`(choose|when|with)([^\S\n]+)(.*)`, ByGroups(Keyword, Text, Using("Python")), Pop(1)}, {`(choose|otherwise)\b`, Keyword, Pop(1)}, {`(end\w*)([^\S\n]*)(.*)`, ByGroups(Keyword, Text, Comment), Pop(1)}, }, "variable": { {`(?)`, ByGroups(CommentPreproc, Using("Python"), CommentPreproc), nil}, {`<\s*(script|style)\s*.*?>.*?<\s*/\1\s*>`, Other, nil}, {`<\s*py:[a-zA-Z0-9]+`, NameTag, Push("pytag")}, {`<\s*[a-zA-Z0-9:.]+`, NameTag, Push("tag")}, Include("variable"), {`[<$]`, Other, nil}, }, "pytag": { {`\s+`, Text, nil}, {`[\w:-]+\s*=`, NameAttribute, Push("pyattr")}, {`/?\s*>`, NameTag, Pop(1)}, }, "pyattr": { {`(")(.*?)(")`, ByGroups(LiteralString, Using("Python"), LiteralString), Pop(1)}, {`(')(.*?)(')`, ByGroups(LiteralString, Using("Python"), LiteralString), Pop(1)}, {`[^\s>]+`, LiteralString, Pop(1)}, }, "tag": { {`\s+`, Text, nil}, {`py:[\w-]+\s*=`, NameAttribute, Push("pyattr")}, {`[\w:-]+\s*=`, NameAttribute, Push("attr")}, {`/?\s*>`, NameTag, Pop(1)}, }, "attr": { {`"`, LiteralString, Push("attr-dstring")}, {`'`, LiteralString, Push("attr-sstring")}, {`[^\s>]*`, LiteralString, Pop(1)}, }, "attr-dstring": { {`"`, LiteralString, Pop(1)}, Include("strings"), {`'`, LiteralString, nil}, }, "attr-sstring": { {`'`, LiteralString, Pop(1)}, Include("strings"), {`'`, LiteralString, nil}, }, "strings": { {`[^"'$]+`, LiteralString, nil}, Include("variable"), }, "variable": { {`(?>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\||<-|\+\+|--|==|!=|:=|\.\.\.|[+\-*/%&])`, Operator, nil}, {`([a-zA-Z_]\w*)(\s*)(\()`, ByGroups(NameFunction, UsingSelf("root"), Punctuation), nil}, {`[|^<>=!()\[\]{}.,;:~]`, Punctuation, nil}, {`[^\W\d]\w*`, NameOther, nil}, }, } } var GoHTMLTemplate = Register(DelegatingLexer(HTML, MustNewXMLLexer( embedded, "embedded/go_template.xml", ).SetConfig( &Config{ Name: "Go HTML Template", Aliases: []string{"go-html-template"}, }, ))) var GoTextTemplate = Register(MustNewXMLLexer( embedded, "embedded/go_template.xml", ).SetConfig( &Config{ Name: "Go Text Template", Aliases: []string{"go-text-template"}, }, )) chroma-2.14.0/lexers/go_test.go000066400000000000000000000066371461341362700163670ustar00rootroot00000000000000package lexers import ( "testing" assert "github.com/alecthomas/assert/v2" "github.com/alecthomas/chroma/v2" ) func TestGoHTMLTemplateIssue126(t *testing.T) { for _, source := range []string{ ` {{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }} {{ .Permalink }} Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }} Hugo -- gohugo.io{{ with .Site.LanguageCode }} {{.}}{{end}}{{ with .Site.Author.email }} {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Author.email }} {{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}}{{ with .Site.Copyright }} {{.}}{{end}}{{ if not .Date.IsZero }} {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} {{ with .OutputFormats.Get "RSS" }} {{ printf "" .Permalink .MediaType | safeHTML }} {{ end }} {{/* Print all pages */}} {{ range .Data.Pages }} {{ .Title }} {{ .Permalink }} {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} {{ with .Site.Author.email }}{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}{{end}} {{ .Permalink }} {{ .Summary | html }} {{ end }} `, `{{ $headless := .Site.GetPage "page" "some-headless-bundle" }} {{ $reusablePages := $headless.Resources.Match "author*" }}

Authors

{{ range $reusablePages }}

{{ .Title }}

{{ .Content }} {{ end }}`} { tokens, err := chroma.Tokenise(GoHTMLTemplate, nil, source) assert.NoError(t, err) assert.Equal(t, source, chroma.Stringify(tokens...)) } } func TestGoHTMLTemplateMultilineComments(t *testing.T) { for _, source := range []string{ ` {{/* This is a multiline comment */}} `, ` {{- /* This is a multiline comment */}} `, ` {{/* This is a multiline comment */ -}} `, ` {{- /* This is a multiline comment */ -}} `, } { tokens, err := chroma.Tokenise(GoHTMLTemplate, nil, source) assert.NoError(t, err) assert.Equal(t, source, chroma.Stringify(tokens...)) // Make sure that there are no errors for _, token := range tokens { assert.NotEqual(t, chroma.Error, token.Type) } // Make sure that multiline comments are printed found := false for _, token := range tokens { if token.Type == chroma.CommentMultiline { found = true } } assert.True(t, found) } } func TestGoHTMLTemplateNegativeNumber(t *testing.T) { for _, source := range []string{ ` {{ fn -3 }} `, } { tokens, err := chroma.Tokenise(GoHTMLTemplate, nil, source) assert.NoError(t, err) assert.Equal(t, source, chroma.Stringify(tokens...)) // Make sure that there are no errors for _, token := range tokens { assert.NotEqual(t, chroma.Error, token.Type) } // Make sure that negative number is found found := false for _, token := range tokens { if token.Type == chroma.LiteralNumberInteger { found = true } } assert.True(t, found) } } chroma-2.14.0/lexers/haxe.go000066400000000000000000000604541461341362700156450ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) // Haxe lexer. var Haxe = Register(MustNewLexer( &Config{ Name: "Haxe", Aliases: []string{"hx", "haxe", "hxsl"}, Filenames: []string{"*.hx", "*.hxsl"}, MimeTypes: []string{"text/haxe", "text/x-haxe", "text/x-hx"}, DotAll: true, }, haxeRules, )) func haxeRules() Rules { return Rules{ "root": { Include("spaces"), Include("meta"), {`(?:package)\b`, KeywordNamespace, Push("semicolon", "package")}, {`(?:import)\b`, KeywordNamespace, Push("semicolon", "import")}, {`(?:using)\b`, KeywordNamespace, Push("semicolon", "using")}, {`(?:extern|private)\b`, KeywordDeclaration, nil}, {`(?:abstract)\b`, KeywordDeclaration, Push("abstract")}, {`(?:class|interface)\b`, KeywordDeclaration, Push("class")}, {`(?:enum)\b`, KeywordDeclaration, Push("enum")}, {`(?:typedef)\b`, KeywordDeclaration, Push("typedef")}, {`(?=.)`, Text, Push("expr-statement")}, }, "spaces": { {`\s+`, Text, nil}, {`//[^\n\r]*`, CommentSingle, nil}, {`/\*.*?\*/`, CommentMultiline, nil}, {`(#)(if|elseif|else|end|error)\b`, CommentPreproc, MutatorFunc(haxePreProcMutator)}, }, "string-single-interpol": { {`\$\{`, LiteralStringInterpol, Push("string-interpol-close", "expr")}, {`\$\$`, LiteralStringEscape, nil}, {`\$(?=(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))`, LiteralStringInterpol, Push("ident")}, Include("string-single"), }, "string-single": { {`'`, LiteralStringSingle, Pop(1)}, {`\\.`, LiteralStringEscape, nil}, {`.`, LiteralStringSingle, nil}, }, "string-double": { {`"`, LiteralStringDouble, Pop(1)}, {`\\.`, LiteralStringEscape, nil}, {`.`, LiteralStringDouble, nil}, }, "string-interpol-close": { {`\$(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, LiteralStringInterpol, nil}, {`\}`, LiteralStringInterpol, Pop(1)}, }, "package": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, {`\.`, Punctuation, Push("import-ident")}, Default(Pop(1)), }, "import": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, {`\*`, Keyword, nil}, {`\.`, Punctuation, Push("import-ident")}, {`in`, KeywordNamespace, Push("ident")}, Default(Pop(1)), }, "import-ident": { Include("spaces"), {`\*`, Keyword, Pop(1)}, {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, Pop(1)}, }, "using": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameNamespace, nil}, {`\.`, Punctuation, Push("import-ident")}, Default(Pop(1)), }, "preproc-error": { {`\s+`, CommentPreproc, nil}, {`'`, LiteralStringSingle, Push("#pop", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "string-double")}, Default(Pop(1)), }, "preproc-expr": { {`\s+`, CommentPreproc, nil}, {`\!`, CommentPreproc, nil}, {`\(`, CommentPreproc, Push("#pop", "preproc-parenthesis")}, {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, CommentPreproc, Pop(1)}, {`\.[0-9]+`, LiteralNumberFloat, nil}, {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, nil}, {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, nil}, {`[0-9]+\.[0-9]+`, LiteralNumberFloat, nil}, {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, nil}, {`0x[0-9a-fA-F]+`, LiteralNumberHex, nil}, {`[0-9]+`, LiteralNumberInteger, nil}, {`'`, LiteralStringSingle, Push("#pop", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "string-double")}, }, "preproc-parenthesis": { {`\s+`, CommentPreproc, nil}, {`\)`, CommentPreproc, Pop(1)}, Default(Push("preproc-expr-in-parenthesis")), }, "preproc-expr-chain": { {`\s+`, CommentPreproc, nil}, {`(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|/|\-|=>|=)`, CommentPreproc, Push("#pop", "preproc-expr-in-parenthesis")}, Default(Pop(1)), }, "preproc-expr-in-parenthesis": { {`\s+`, CommentPreproc, nil}, {`\!`, CommentPreproc, nil}, {`\(`, CommentPreproc, Push("#pop", "preproc-expr-chain", "preproc-parenthesis")}, {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, CommentPreproc, Push("#pop", "preproc-expr-chain")}, {`\.[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Push("#pop", "preproc-expr-chain")}, {`0x[0-9a-fA-F]+`, LiteralNumberHex, Push("#pop", "preproc-expr-chain")}, {`[0-9]+`, LiteralNumberInteger, Push("#pop", "preproc-expr-chain")}, {`'`, LiteralStringSingle, Push("#pop", "preproc-expr-chain", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "preproc-expr-chain", "string-double")}, }, "abstract": { Include("spaces"), Default(Pop(1), Push("abstract-body"), Push("abstract-relation"), Push("abstract-opaque"), Push("type-param-constraint"), Push("type-name")), }, "abstract-body": { Include("spaces"), {`\{`, Punctuation, Push("#pop", "class-body")}, }, "abstract-opaque": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "parenthesis-close", "type")}, Default(Pop(1)), }, "abstract-relation": { Include("spaces"), {`(?:to|from)`, KeywordDeclaration, Push("type")}, {`,`, Punctuation, nil}, Default(Pop(1)), }, "meta": { Include("spaces"), {`@`, NameDecorator, Push("meta-body", "meta-ident", "meta-colon")}, }, "meta-colon": { Include("spaces"), {`:`, NameDecorator, Pop(1)}, Default(Pop(1)), }, "meta-ident": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameDecorator, Pop(1)}, }, "meta-body": { Include("spaces"), {`\(`, NameDecorator, Push("#pop", "meta-call")}, Default(Pop(1)), }, "meta-call": { Include("spaces"), {`\)`, NameDecorator, Pop(1)}, Default(Pop(1), Push("meta-call-sep"), Push("expr")), }, "meta-call-sep": { Include("spaces"), {`\)`, NameDecorator, Pop(1)}, {`,`, Punctuation, Push("#pop", "meta-call")}, }, "typedef": { Include("spaces"), Default(Pop(1), Push("typedef-body"), Push("type-param-constraint"), Push("type-name")), }, "typedef-body": { Include("spaces"), {`=`, Operator, Push("#pop", "optional-semicolon", "type")}, }, "enum": { Include("spaces"), Default(Pop(1), Push("enum-body"), Push("bracket-open"), Push("type-param-constraint"), Push("type-name")), }, "enum-body": { Include("spaces"), Include("meta"), {`\}`, Punctuation, Pop(1)}, {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("enum-member", "type-param-constraint")}, }, "enum-member": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "semicolon", "flag", "function-param")}, Default(Pop(1), Push("semicolon"), Push("flag")), }, "class": { Include("spaces"), Default(Pop(1), Push("class-body"), Push("bracket-open"), Push("extends"), Push("type-param-constraint"), Push("type-name")), }, "extends": { Include("spaces"), {`(?:extends|implements)\b`, KeywordDeclaration, Push("type")}, {`,`, Punctuation, nil}, Default(Pop(1)), }, "bracket-open": { Include("spaces"), {`\{`, Punctuation, Pop(1)}, }, "bracket-close": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, }, "class-body": { Include("spaces"), Include("meta"), {`\}`, Punctuation, Pop(1)}, {`(?:static|public|private|override|dynamic|inline|macro)\b`, KeywordDeclaration, nil}, Default(Push("class-member")), }, "class-member": { Include("spaces"), {`(var)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "var")}, {`(function)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "class-method")}, }, "function-local": { Include("spaces"), {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameFunction, Push("#pop", "optional-expr", "flag", "function-param", "parenthesis-open", "type-param-constraint")}, Default(Pop(1), Push("optional-expr"), Push("flag"), Push("function-param"), Push("parenthesis-open"), Push("type-param-constraint")), }, "optional-expr": { Include("spaces"), Include("expr"), Default(Pop(1)), }, "class-method": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, NameFunction, Push("#pop", "optional-expr", "flag", "function-param", "parenthesis-open", "type-param-constraint")}, }, "function-param": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, {`\?`, Punctuation, nil}, {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "function-param-sep", "assign", "flag")}, }, "function-param-sep": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "function-param")}, }, "prop-get-set": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "parenthesis-close", "prop-get-set-opt", "comma", "prop-get-set-opt")}, Default(Pop(1)), }, "prop-get-set-opt": { Include("spaces"), {`(?:default|null|never|dynamic|get|set)\b`, Keyword, Pop(1)}, {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Text, Pop(1)}, }, "expr-statement": { Include("spaces"), Default(Pop(1), Push("optional-semicolon"), Push("expr")), }, "expr": { Include("spaces"), {`@`, NameDecorator, Push("#pop", "optional-expr", "meta-body", "meta-ident", "meta-colon")}, {`(?:\+\+|\-\-|~(?!/)|!|\-)`, Operator, nil}, {`\(`, Punctuation, Push("#pop", "expr-chain", "parenthesis")}, {`(?:static|public|private|override|dynamic|inline)\b`, KeywordDeclaration, nil}, {`(?:function)\b`, KeywordDeclaration, Push("#pop", "expr-chain", "function-local")}, {`\{`, Punctuation, Push("#pop", "expr-chain", "bracket")}, {`(?:true|false|null)\b`, KeywordConstant, Push("#pop", "expr-chain")}, {`(?:this)\b`, Keyword, Push("#pop", "expr-chain")}, {`(?:cast)\b`, Keyword, Push("#pop", "expr-chain", "cast")}, {`(?:try)\b`, Keyword, Push("#pop", "catch", "expr")}, {`(?:var)\b`, KeywordDeclaration, Push("#pop", "var")}, {`(?:new)\b`, Keyword, Push("#pop", "expr-chain", "new")}, {`(?:switch)\b`, Keyword, Push("#pop", "switch")}, {`(?:if)\b`, Keyword, Push("#pop", "if")}, {`(?:do)\b`, Keyword, Push("#pop", "do")}, {`(?:while)\b`, Keyword, Push("#pop", "while")}, {`(?:for)\b`, Keyword, Push("#pop", "for")}, {`(?:untyped|throw)\b`, Keyword, nil}, {`(?:return)\b`, Keyword, Push("#pop", "optional-expr")}, {`(?:macro)\b`, Keyword, Push("#pop", "macro")}, {`(?:continue|break)\b`, Keyword, Pop(1)}, {`(?:\$\s*[a-z]\b|\$(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)))`, Name, Push("#pop", "dollar")}, {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "expr-chain")}, {`\.[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Push("#pop", "expr-chain")}, {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Push("#pop", "expr-chain")}, {`0x[0-9a-fA-F]+`, LiteralNumberHex, Push("#pop", "expr-chain")}, {`[0-9]+`, LiteralNumberInteger, Push("#pop", "expr-chain")}, {`'`, LiteralStringSingle, Push("#pop", "expr-chain", "string-single-interpol")}, {`"`, LiteralStringDouble, Push("#pop", "expr-chain", "string-double")}, {`~/(\\\\|\\/|[^/\n])*/[gimsu]*`, LiteralStringRegex, Push("#pop", "expr-chain")}, {`\[`, Punctuation, Push("#pop", "expr-chain", "array-decl")}, }, "expr-chain": { Include("spaces"), {`(?:\+\+|\-\-)`, Operator, nil}, {`(?:%=|&=|\|=|\^=|\+=|\-=|\*=|/=|<<=|>\s*>\s*=|>\s*>\s*>\s*=|==|!=|<=|>\s*=|&&|\|\||<<|>>>|>\s*>|\.\.\.|<|>|%|&|\||\^|\+|\*|/|\-|=>|=)`, Operator, Push("#pop", "expr")}, {`(?:in)\b`, Keyword, Push("#pop", "expr")}, {`\?`, Operator, Push("#pop", "expr", "ternary", "expr")}, {`(\.)((?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))`, ByGroups(Punctuation, Name), nil}, {`\[`, Punctuation, Push("array-access")}, {`\(`, Punctuation, Push("call")}, Default(Pop(1)), }, "macro": { Include("spaces"), Include("meta"), {`:`, Punctuation, Push("#pop", "type")}, {`(?:extern|private)\b`, KeywordDeclaration, nil}, {`(?:abstract)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "abstract")}, {`(?:class|interface)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "macro-class")}, {`(?:enum)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "enum")}, {`(?:typedef)\b`, KeywordDeclaration, Push("#pop", "optional-semicolon", "typedef")}, Default(Pop(1), Push("expr")), }, "macro-class": { {`\{`, Punctuation, Push("#pop", "class-body")}, Include("class"), }, "cast": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "parenthesis-close", "cast-type", "expr")}, Default(Pop(1), Push("expr")), }, "cast-type": { Include("spaces"), {`,`, Punctuation, Push("#pop", "type")}, Default(Pop(1)), }, "catch": { Include("spaces"), {`(?:catch)\b`, Keyword, Push("expr", "function-param", "parenthesis-open")}, Default(Pop(1)), }, "do": { Include("spaces"), Default(Pop(1), Push("do-while"), Push("expr")), }, "do-while": { Include("spaces"), {`(?:while)\b`, Keyword, Push("#pop", "parenthesis", "parenthesis-open")}, }, "while": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "expr", "parenthesis")}, }, "for": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "expr", "parenthesis")}, }, "if": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "else", "optional-semicolon", "expr", "parenthesis")}, }, "else": { Include("spaces"), {`(?:else)\b`, Keyword, Push("#pop", "expr")}, Default(Pop(1)), }, "switch": { Include("spaces"), Default(Pop(1), Push("switch-body"), Push("bracket-open"), Push("expr")), }, "switch-body": { Include("spaces"), {`(?:case|default)\b`, Keyword, Push("case-block", "case")}, {`\}`, Punctuation, Pop(1)}, }, "case": { Include("spaces"), {`:`, Punctuation, Pop(1)}, Default(Pop(1), Push("case-sep"), Push("case-guard"), Push("expr")), }, "case-sep": { Include("spaces"), {`:`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "case")}, }, "case-guard": { Include("spaces"), {`(?:if)\b`, Keyword, Push("#pop", "parenthesis", "parenthesis-open")}, Default(Pop(1)), }, "case-block": { Include("spaces"), {`(?!(?:case|default)\b|\})`, Keyword, Push("expr-statement")}, Default(Pop(1)), }, "new": { Include("spaces"), Default(Pop(1), Push("call"), Push("parenthesis-open"), Push("type")), }, "array-decl": { Include("spaces"), {`\]`, Punctuation, Pop(1)}, Default(Pop(1), Push("array-decl-sep"), Push("expr")), }, "array-decl-sep": { Include("spaces"), {`\]`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "array-decl")}, }, "array-access": { Include("spaces"), Default(Pop(1), Push("array-access-close"), Push("expr")), }, "array-access-close": { Include("spaces"), {`\]`, Punctuation, Pop(1)}, }, "comma": { Include("spaces"), {`,`, Punctuation, Pop(1)}, }, "colon": { Include("spaces"), {`:`, Punctuation, Pop(1)}, }, "semicolon": { Include("spaces"), {`;`, Punctuation, Pop(1)}, }, "optional-semicolon": { Include("spaces"), {`;`, Punctuation, Pop(1)}, Default(Pop(1)), }, "ident": { Include("spaces"), {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Pop(1)}, }, "dollar": { Include("spaces"), {`\{`, Punctuation, Push("#pop", "expr-chain", "bracket-close", "expr")}, Default(Pop(1), Push("expr-chain")), }, "type-name": { Include("spaces"), {`_*[A-Z]\w*`, Name, Pop(1)}, }, "type-full-name": { Include("spaces"), {`\.`, Punctuation, Push("ident")}, Default(Pop(1)), }, "type": { Include("spaces"), {`\?`, Punctuation, nil}, {`(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "type-check", "type-full-name")}, {`\{`, Punctuation, Push("#pop", "type-check", "type-struct")}, {`\(`, Punctuation, Push("#pop", "type-check", "type-parenthesis")}, }, "type-parenthesis": { Include("spaces"), Default(Pop(1), Push("parenthesis-close"), Push("type")), }, "type-check": { Include("spaces"), {`->`, Punctuation, Push("#pop", "type")}, {`<(?!=)`, Punctuation, Push("type-param")}, Default(Pop(1)), }, "type-struct": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, {`\?`, Punctuation, nil}, {`>`, Punctuation, Push("comma", "type")}, {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "type-struct-sep", "type", "colon")}, Include("class-body"), }, "type-struct-sep": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "type-struct")}, }, "type-param-type": { {`\.[0-9]+`, LiteralNumberFloat, Pop(1)}, {`[0-9]+[eE][+\-]?[0-9]+`, LiteralNumberFloat, Pop(1)}, {`[0-9]+\.[0-9]*[eE][+\-]?[0-9]+`, LiteralNumberFloat, Pop(1)}, {`[0-9]+\.[0-9]+`, LiteralNumberFloat, Pop(1)}, {`[0-9]+\.(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)|\.\.)`, LiteralNumberFloat, Pop(1)}, {`0x[0-9a-fA-F]+`, LiteralNumberHex, Pop(1)}, {`[0-9]+`, LiteralNumberInteger, Pop(1)}, {`'`, LiteralStringSingle, Push("#pop", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "string-double")}, {`~/(\\\\|\\/|[^/\n])*/[gim]*`, LiteralStringRegex, Pop(1)}, {`\[`, Operator, Push("#pop", "array-decl")}, Include("type"), }, "type-param": { Include("spaces"), Default(Pop(1), Push("type-param-sep"), Push("type-param-type")), }, "type-param-sep": { Include("spaces"), {`>`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "type-param")}, }, "type-param-constraint": { Include("spaces"), {`<(?!=)`, Punctuation, Push("#pop", "type-param-constraint-sep", "type-param-constraint-flag", "type-name")}, Default(Pop(1)), }, "type-param-constraint-sep": { Include("spaces"), {`>`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "type-param-constraint-sep", "type-param-constraint-flag", "type-name")}, }, "type-param-constraint-flag": { Include("spaces"), {`:`, Punctuation, Push("#pop", "type-param-constraint-flag-type")}, Default(Pop(1)), }, "type-param-constraint-flag-type": { Include("spaces"), {`\(`, Punctuation, Push("#pop", "type-param-constraint-flag-type-sep", "type")}, Default(Pop(1), Push("type")), }, "type-param-constraint-flag-type-sep": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("type")}, }, "parenthesis": { Include("spaces"), Default(Pop(1), Push("parenthesis-close"), Push("flag"), Push("expr")), }, "parenthesis-open": { Include("spaces"), {`\(`, Punctuation, Pop(1)}, }, "parenthesis-close": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, }, "var": { Include("spaces"), {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Text, Push("#pop", "var-sep", "assign", "flag", "prop-get-set")}, }, "var-sep": { Include("spaces"), {`,`, Punctuation, Push("#pop", "var")}, Default(Pop(1)), }, "assign": { Include("spaces"), {`=`, Operator, Push("#pop", "expr")}, Default(Pop(1)), }, "flag": { Include("spaces"), {`:`, Punctuation, Push("#pop", "type")}, Default(Pop(1)), }, "ternary": { Include("spaces"), {`:`, Operator, Pop(1)}, }, "call": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, Default(Pop(1), Push("call-sep"), Push("expr")), }, "call-sep": { Include("spaces"), {`\)`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "call")}, }, "bracket": { Include("spaces"), {`(?!(?:\$\s*[a-z]\b|\$(?!(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+))))(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Push("#pop", "bracket-check")}, {`'`, LiteralStringSingle, Push("#pop", "bracket-check", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "bracket-check", "string-double")}, Default(Pop(1), Push("block")), }, "bracket-check": { Include("spaces"), {`:`, Punctuation, Push("#pop", "object-sep", "expr")}, Default(Pop(1), Push("block"), Push("optional-semicolon"), Push("expr-chain")), }, "block": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, Default(Push("expr-statement")), }, "object": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, Default(Pop(1), Push("object-sep"), Push("expr"), Push("colon"), Push("ident-or-string")), }, "ident-or-string": { Include("spaces"), {`(?!(?:function|class|static|var|if|else|while|do|for|break|return|continue|extends|implements|import|switch|case|default|public|private|try|untyped|catch|new|this|throw|extern|enum|in|interface|cast|override|dynamic|typedef|package|inline|using|null|true|false|abstract)\b)(?:_*[a-z]\w*|_+[0-9]\w*|_*[A-Z]\w*|_+|\$\w+)`, Name, Pop(1)}, {`'`, LiteralStringSingle, Push("#pop", "string-single")}, {`"`, LiteralStringDouble, Push("#pop", "string-double")}, }, "object-sep": { Include("spaces"), {`\}`, Punctuation, Pop(1)}, {`,`, Punctuation, Push("#pop", "object")}, }, } } func haxePreProcMutator(state *LexerState) error { stack, ok := state.Get("haxe-pre-proc").([][]string) if !ok { stack = [][]string{} } proc := state.Groups[2] switch proc { case "if": stack = append(stack, state.Stack) case "else", "elseif": if len(stack) > 0 { state.Stack = stack[len(stack)-1] } case "end": if len(stack) > 0 { stack = stack[:len(stack)-1] } } if proc == "if" || proc == "elseif" { state.Stack = append(state.Stack, "preproc-expr") } if proc == "error" { state.Stack = append(state.Stack, "preproc-error") } state.Set("haxe-pre-proc", stack) return nil } chroma-2.14.0/lexers/html.go000066400000000000000000000002171461341362700156530ustar00rootroot00000000000000package lexers import ( "github.com/alecthomas/chroma/v2" ) // HTML lexer. var HTML = chroma.MustNewXMLLexer(embedded, "embedded/html.xml") chroma-2.14.0/lexers/http.go000066400000000000000000000064171461341362700156760ustar00rootroot00000000000000package lexers import ( "strings" . "github.com/alecthomas/chroma/v2" // nolint ) // HTTP lexer. var HTTP = Register(httpBodyContentTypeLexer(MustNewLexer( &Config{ Name: "HTTP", Aliases: []string{"http"}, Filenames: []string{}, MimeTypes: []string{}, NotMultiline: true, DotAll: true, }, httpRules, ))) func httpRules() Rules { return Rules{ "root": { {`(GET|POST|PUT|DELETE|HEAD|OPTIONS|TRACE|PATCH|CONNECT)( +)([^ ]+)( +)(HTTP)(/)([123](?:\.[01])?)(\r?\n|\Z)`, ByGroups(NameFunction, Text, NameNamespace, Text, KeywordReserved, Operator, LiteralNumber, Text), Push("headers")}, {`(HTTP)(/)([123](?:\.[01])?)( +)(\d{3})( *)([^\r\n]*)(\r?\n|\Z)`, ByGroups(KeywordReserved, Operator, LiteralNumber, Text, LiteralNumber, Text, NameException, Text), Push("headers")}, }, "headers": { {`([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|\Z)`, EmitterFunc(httpHeaderBlock), nil}, {`([\t ]+)([^\r\n]+)(\r?\n|\Z)`, EmitterFunc(httpContinuousHeaderBlock), nil}, {`\r?\n`, Text, Push("content")}, }, "content": { {`.+`, EmitterFunc(httpContentBlock), nil}, }, } } func httpContentBlock(groups []string, state *LexerState) Iterator { tokens := []Token{ {Generic, groups[0]}, } return Literator(tokens...) } func httpHeaderBlock(groups []string, state *LexerState) Iterator { tokens := []Token{ {Name, groups[1]}, {Text, groups[2]}, {Operator, groups[3]}, {Text, groups[4]}, {Literal, groups[5]}, {Text, groups[6]}, } return Literator(tokens...) } func httpContinuousHeaderBlock(groups []string, state *LexerState) Iterator { tokens := []Token{ {Text, groups[1]}, {Literal, groups[2]}, {Text, groups[3]}, } return Literator(tokens...) } func httpBodyContentTypeLexer(lexer Lexer) Lexer { return &httpBodyContentTyper{lexer} } type httpBodyContentTyper struct{ Lexer } func (d *httpBodyContentTyper) Tokenise(options *TokeniseOptions, text string) (Iterator, error) { // nolint: gocognit var contentType string var isContentType bool var subIterator Iterator it, err := d.Lexer.Tokenise(options, text) if err != nil { return nil, err } return func() Token { token := it() if token == EOF { if subIterator != nil { return subIterator() } return EOF } switch { case token.Type == Name && strings.ToLower(token.Value) == "content-type": { isContentType = true } case token.Type == Literal && isContentType: { isContentType = false contentType = strings.TrimSpace(token.Value) pos := strings.Index(contentType, ";") if pos > 0 { contentType = strings.TrimSpace(contentType[:pos]) } } case token.Type == Generic && contentType != "": { lexer := MatchMimeType(contentType) // application/calendar+xml can be treated as application/xml // if there's not a better match. if lexer == nil && strings.Contains(contentType, "+") { slashPos := strings.Index(contentType, "/") plusPos := strings.LastIndex(contentType, "+") contentType = contentType[:slashPos+1] + contentType[plusPos+1:] lexer = MatchMimeType(contentType) } if lexer == nil { token.Type = Text } else { subIterator, err = lexer.Tokenise(nil, token.Value) if err != nil { panic(err) } return EOF } } } return token }, nil } chroma-2.14.0/lexers/lexer_benchmark_test.go000066400000000000000000000167271461341362700211140ustar00rootroot00000000000000package lexers_test import ( "testing" assert "github.com/alecthomas/assert/v2" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/lexers" ) const lexerBenchSource = `/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.kafka.server.common; import org.apache.kafka.common.utils.Utils; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Optional; /** * This class represents a utility to capture a checkpoint in a file. It writes down to the file in the below format. * * ========= File beginning ========= * version: int * entries-count: int * entry-as-string-on-each-line * ========= File end =============== * * Each entry is represented as a string on each line in the checkpoint file. {@link EntryFormatter} is used * to convert the entry into a string and vice versa. * * @param entry type. */ public class CheckpointFile { private final int version; private final EntryFormatter formatter; private final Object lock = new Object(); private final Path absolutePath; private final Path tempPath; public CheckpointFile(File file, int version, EntryFormatter formatter) throws IOException { this.version = version; this.formatter = formatter; try { // Create the file if it does not exist. Files.createFile(file.toPath()); } catch (FileAlreadyExistsException ex) { // Ignore if file already exists. } absolutePath = file.toPath().toAbsolutePath(); tempPath = Paths.get(absolutePath.toString() + ".tmp"); } public void write(Collection entries) throws IOException { synchronized (lock) { // write to temp file and then swap with the existing file try (FileOutputStream fileOutputStream = new FileOutputStream(tempPath.toFile()); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8))) { // Write the version writer.write(Integer.toString(version)); writer.newLine(); // Write the entries count writer.write(Integer.toString(entries.size())); writer.newLine(); // Write each entry on a new line. for (T entry : entries) { writer.write(formatter.toString(entry)); writer.newLine(); } writer.flush(); fileOutputStream.getFD().sync(); } Utils.atomicMoveWithFallback(tempPath, absolutePath); } } public List read() throws IOException { synchronized (lock) { try (BufferedReader reader = Files.newBufferedReader(absolutePath)) { CheckpointReadBuffer checkpointBuffer = new CheckpointReadBuffer<>(absolutePath.toString(), reader, version, formatter); return checkpointBuffer.read(); } } } private static class CheckpointReadBuffer { private final String location; private final BufferedReader reader; private final int version; private final EntryFormatter formatter; CheckpointReadBuffer(String location, BufferedReader reader, int version, EntryFormatter formatter) { this.location = location; this.reader = reader; this.version = version; this.formatter = formatter; } List read() throws IOException { String line = reader.readLine(); if (line == null) return Collections.emptyList(); int readVersion = toInt(line); if (readVersion != version) { throw new IOException("Unrecognised version:" + readVersion + ", expected version: " + version + " in checkpoint file at: " + location); } line = reader.readLine(); if (line == null) { return Collections.emptyList(); } int expectedSize = toInt(line); List entries = new ArrayList<>(expectedSize); line = reader.readLine(); while (line != null) { Optional maybeEntry = formatter.fromString(line); if (!maybeEntry.isPresent()) { throw buildMalformedLineException(line); } entries.add(maybeEntry.get()); line = reader.readLine(); } if (entries.size() != expectedSize) { throw new IOException("Expected [" + expectedSize + "] entries in checkpoint file [" + location + "], but found only [" + entries.size() + "]"); } return entries; } private int toInt(String line) throws IOException { try { return Integer.parseInt(line); } catch (NumberFormatException e) { throw buildMalformedLineException(line); } } private IOException buildMalformedLineException(String line) { return new IOException(String.format("Malformed line in checkpoint file [%s]: %s", location, line)); } } /** * This is used to convert the given entry of type {@code T} into a string and vice versa. * * @param entry type */ public interface EntryFormatter { /** * @param entry entry to be converted into string. * @return String representation of the given entry. */ String toString(T entry); /** * @param value string representation of an entry. * @return entry converted from the given string representation if possible. {@link Optional#empty()} represents * that the given string representation could not be converted into an entry. */ Optional fromString(String value); } } ` func Benchmark(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { it, err := lexers.GlobalLexerRegistry.Get("Java").Tokenise(nil, lexerBenchSource) assert.NoError(b, err) for t := it(); t != chroma.EOF; t = it() { } } } chroma-2.14.0/lexers/lexers.go000066400000000000000000000037351461341362700162210ustar00rootroot00000000000000package lexers import ( "embed" "io/fs" "github.com/alecthomas/chroma/v2" ) //go:embed embedded var embedded embed.FS // GlobalLexerRegistry is the global LexerRegistry of Lexers. var GlobalLexerRegistry = func() *chroma.LexerRegistry { reg := chroma.NewLexerRegistry() // index(reg) paths, err := fs.Glob(embedded, "embedded/*.xml") if err != nil { panic(err) } for _, path := range paths { reg.Register(chroma.MustNewXMLLexer(embedded, path)) } return reg }() // Names of all lexers, optionally including aliases. func Names(withAliases bool) []string { return GlobalLexerRegistry.Names(withAliases) } // Get a Lexer by name, alias or file extension. // // Note that this if there isn't an exact match on name or alias, this will // call Match(), so it is not efficient. func Get(name string) chroma.Lexer { return GlobalLexerRegistry.Get(name) } // MatchMimeType attempts to find a lexer for the given MIME type. func MatchMimeType(mimeType string) chroma.Lexer { return GlobalLexerRegistry.MatchMimeType(mimeType) } // Match returns the first lexer matching filename. // // Note that this iterates over all file patterns in all lexers, so it's not // particularly efficient. func Match(filename string) chroma.Lexer { return GlobalLexerRegistry.Match(filename) } // Register a Lexer with the global registry. func Register(lexer chroma.Lexer) chroma.Lexer { return GlobalLexerRegistry.Register(lexer) } // Analyse text content and return the "best" lexer.. func Analyse(text string) chroma.Lexer { return GlobalLexerRegistry.Analyse(text) } // PlaintextRules is used for the fallback lexer as well as the explicit // plaintext lexer. func PlaintextRules() chroma.Rules { return chroma.Rules{ "root": []chroma.Rule{ {`.+`, chroma.Text, nil}, {`\n`, chroma.Text, nil}, }, } } // Fallback lexer if no other is found. var Fallback chroma.Lexer = chroma.MustNewLexer(&chroma.Config{ Name: "fallback", Filenames: []string{"*"}, Priority: -1, }, PlaintextRules) chroma-2.14.0/lexers/lexers_test.go000066400000000000000000000134401461341362700172520ustar00rootroot00000000000000package lexers_test import ( "bytes" "fmt" "io" "os" "path/filepath" "strconv" "strings" "testing" "github.com/alecthomas/assert/v2" "github.com/alecthomas/repr" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" ) func TestCompileAllRegexes(t *testing.T) { for _, lexer := range lexers.GlobalLexerRegistry.Lexers { it, err := lexer.Tokenise(nil, "") assert.NoError(t, err, "%s failed", lexer.Config().Name) err = formatters.NoOp.Format(io.Discard, styles.SwapOff, it) assert.NoError(t, err, "%s failed", lexer.Config().Name) } } func TestGet(t *testing.T) { t.Run("ByName", func(t *testing.T) { assert.True(t, lexers.Get("xml") == lexers.GlobalLexerRegistry.Get("XML")) }) t.Run("ByAlias", func(t *testing.T) { assert.True(t, lexers.Get("as") == lexers.GlobalLexerRegistry.Get("Actionscript")) }) t.Run("ViaFilename", func(t *testing.T) { expected := lexers.Get("XML") actual := lexers.GlobalLexerRegistry.Get("test.svg") assert.Equal(t, repr.String(expected.Config(), repr.Indent(" ")), repr.String(actual.Config(), repr.Indent(" "))) }) } func TestGlobs(t *testing.T) { filename := "main.go" for _, lexer := range lexers.GlobalLexerRegistry.Lexers { config := lexer.Config() for _, glob := range config.Filenames { _, err := filepath.Match(glob, filename) assert.NoError(t, err) } for _, glob := range config.AliasFilenames { _, err := filepath.Match(glob, filename) assert.NoError(t, err) } } } func BenchmarkGet(b *testing.B) { for i := 0; i < b.N; i++ { lexers.Get("go") } } func FileTest(t *testing.T, lexer chroma.Lexer, sourceFile, expectedFilename string) { t.Helper() t.Run(lexer.Config().Name+"/"+sourceFile, func(t *testing.T) { // Read and tokenise source text. sourceBytes, err := os.ReadFile(sourceFile) assert.NoError(t, err) actualTokens, err := chroma.Tokenise(lexer, nil, string(sourceBytes)) assert.NoError(t, err) // Check for error tokens early for _, token := range actualTokens { if token.Type == chroma.Error { t.Logf("Found Error token in lexer %s output: %s", lexer.Config().Name, repr.String(token)) } } // Use a bytes.Buffer to "render" the actual bytes var actualBytes bytes.Buffer err = formatters.JSON.Format(&actualBytes, nil, chroma.Literator(actualTokens...)) assert.NoError(t, err) expectedBytes, err := os.ReadFile(expectedFilename) assert.NoError(t, err) // Check that the expected bytes are identical if !bytes.Equal(actualBytes.Bytes(), expectedBytes) { if os.Getenv("RECORD") == "true" { f, err := os.Create(expectedFilename) assert.NoError(t, err) _, err = f.Write(actualBytes.Bytes()) assert.NoError(t, err) assert.NoError(t, f.Close()) } else { // fail via an assertion of string values for diff output assert.Equal(t, string(expectedBytes), actualBytes.String()) } } }) } // Test source files are in the form . and validation data is in the form ..expected. func TestLexers(t *testing.T) { files, err := os.ReadDir("testdata") assert.NoError(t, err) for _, file := range files { // skip text analysis test files if file.Name() == "analysis" { continue } if file.IsDir() { dirname := filepath.Join("testdata", file.Name()) lexer := lexers.Get(file.Name()) assert.NotZero(t, lexer) subFiles, err := os.ReadDir(dirname) assert.NoError(t, err) for _, subFile := range subFiles { ext := filepath.Ext(subFile.Name())[1:] if ext != "actual" { continue } filename := filepath.Join(dirname, subFile.Name()) expectedFilename := strings.TrimSuffix(filename, filepath.Ext(filename)) + ".expected" lexer = chroma.Coalesce(lexer) FileTest(t, lexer, filename, expectedFilename) } } else { ext := filepath.Ext(file.Name())[1:] if ext != "actual" { continue } base := strings.Split(strings.TrimSuffix(file.Name(), filepath.Ext(file.Name())), ".")[0] lexer := lexers.Get(base) assert.NotZero(t, lexer, base) filename := filepath.Join("testdata", file.Name()) expectedFilename := strings.TrimSuffix(filename, filepath.Ext(filename)) + ".expected" lexer = chroma.Coalesce(lexer) FileTest(t, lexer, filename, expectedFilename) } } } func FileTestAnalysis(t *testing.T, lexer chroma.Lexer, actualFilepath, expectedFilepath string) { t.Helper() t.Run(lexer.Config().Name+"/"+actualFilepath, func(t *testing.T) { expectedData, err := os.ReadFile(expectedFilepath) assert.NoError(t, err) analyser, ok := lexer.(chroma.Analyser) assert.True(t, ok, "lexer %q does not set analyser", lexer.Config().Name) data, err := os.ReadFile(actualFilepath) assert.NoError(t, err) actual := analyser.AnalyseText(string(data)) var actualData bytes.Buffer fmt.Fprintf(&actualData, "%s\n", strconv.FormatFloat(float64(actual), 'f', -1, 32)) if !bytes.Equal(expectedData, actualData.Bytes()) { if os.Getenv("RECORD") == "true" { f, err := os.Create(expectedFilepath) assert.NoError(t, err) _, err = f.Write(actualData.Bytes()) assert.NoError(t, err) assert.NoError(t, f.Close()) } else { assert.Equal(t, string(expectedData), actualData.String()) } } }) } func TestLexersTextAnalyser(t *testing.T) { files, err := filepath.Glob("testdata/analysis/*.actual") assert.NoError(t, err) for _, actualFilepath := range files { filename := filepath.Base(actualFilepath) baseFilename := strings.TrimSuffix(filename, filepath.Ext(filename)) lexerName := strings.Split(baseFilename, ".")[0] lexer := lexers.Get(lexerName) assert.NotZero(t, lexer, "no lexer found for name %q", lexerName) expectedFilepath := "testdata/analysis/" + baseFilename + ".expected" FileTestAnalysis(t, lexer, actualFilepath, expectedFilepath) } } chroma-2.14.0/lexers/markdown.go000066400000000000000000000031541461341362700165340ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) // Markdown lexer. var Markdown = Register(DelegatingLexer(HTML, MustNewLexer( &Config{ Name: "markdown", Aliases: []string{"md", "mkd"}, Filenames: []string{"*.md", "*.mkd", "*.markdown"}, MimeTypes: []string{"text/x-markdown"}, }, markdownRules, ))) func markdownRules() Rules { return Rules{ "root": { {`^(#[^#].+\n)`, ByGroups(GenericHeading), nil}, {`^(#{2,6}.+\n)`, ByGroups(GenericSubheading), nil}, {`^(\s*)([*-] )(\[[ xX]\])( .+\n)`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil}, {`^(\s*)([*-])(\s)(.+\n)`, ByGroups(Text, Keyword, Text, UsingSelf("inline")), nil}, {`^(\s*)([0-9]+\.)( .+\n)`, ByGroups(Text, Keyword, UsingSelf("inline")), nil}, {`^(\s*>\s)(.+\n)`, ByGroups(Keyword, GenericEmph), nil}, {"^(```\\n)([\\w\\W]*?)(^```$)", ByGroups(String, Text, String), nil}, { "^(```)(\\w+)(\\n)([\\w\\W]*?)(^```$)", UsingByGroup(2, 4, String, String, String, Text, String), nil, }, Include("inline"), }, "inline": { {`\\.`, Text, nil}, {`(\s)(\*|_)((?:(?!\2).)*)(\2)((?=\W|\n))`, ByGroups(Text, GenericEmph, GenericEmph, GenericEmph, Text), nil}, {`(\s)((\*\*|__).*?)\3((?=\W|\n))`, ByGroups(Text, GenericStrong, GenericStrong, Text), nil}, {`(\s)(~~[^~]+~~)((?=\W|\n))`, ByGroups(Text, GenericDeleted, Text), nil}, {"`[^`]+`", LiteralStringBacktick, nil}, {`[@#][\w/:]+`, NameEntity, nil}, {`(!?\[)([^]]+)(\])(\()([^)]+)(\))`, ByGroups(Text, NameTag, Text, Text, NameAttribute, Text), nil}, {`[^\\\s]+`, Other, nil}, {`.|\n`, Other, nil}, }, } } chroma-2.14.0/lexers/mysql.go000066400000000000000000000017101461341362700160530ustar00rootroot00000000000000package lexers import ( "regexp" ) var ( mysqlAnalyserNameBetweenBacktickRe = regexp.MustCompile("`[a-zA-Z_]\\w*`") mysqlAnalyserNameBetweenBracketRe = regexp.MustCompile(`\[[a-zA-Z_]\w*\]`) ) func init() { // nolint: gochecknoinits Get("mysql"). SetAnalyser(func(text string) float32 { nameBetweenBacktickCount := len(mysqlAnalyserNameBetweenBacktickRe.FindAllString(text, -1)) nameBetweenBracketCount := len(mysqlAnalyserNameBetweenBracketRe.FindAllString(text, -1)) var result float32 // Same logic as above in the TSQL analysis. dialectNameCount := nameBetweenBacktickCount + nameBetweenBracketCount if dialectNameCount >= 1 && nameBetweenBacktickCount >= (2*nameBetweenBracketCount) { // Found at least twice as many `name` as [name]. result += 0.5 } else if nameBetweenBacktickCount > nameBetweenBracketCount { result += 0.2 } else if nameBetweenBacktickCount > 0 { result += 0.1 } return result }) } chroma-2.14.0/lexers/php.go000066400000000000000000000016611461341362700155020ustar00rootroot00000000000000package lexers import ( "strings" . "github.com/alecthomas/chroma/v2" // nolint ) // phtml lexer is PHP in HTML. var _ = Register(DelegatingLexer(HTML, MustNewLexer( &Config{ Name: "PHTML", Aliases: []string{"phtml"}, Filenames: []string{"*.phtml", "*.php", "*.php[345]", "*.inc"}, MimeTypes: []string{"application/x-php", "application/x-httpd-php", "application/x-httpd-php3", "application/x-httpd-php4", "application/x-httpd-php5", "text/x-php"}, DotAll: true, CaseInsensitive: true, EnsureNL: true, Priority: 2, }, func() Rules { return Get("PHP").(*RegexLexer).MustRules(). Rename("root", "php"). Merge(Rules{ "root": { {`<\?(php)?`, CommentPreproc, Push("php")}, {`[^<]+`, Other, nil}, {`<`, Other, nil}, }, }) }, ).SetAnalyser(func(text string) float32 { if strings.Contains(text, ">|>|»|\)|\]|\})` colonPairPattern = `(?:)(?\w[\w'-]*)(?` + colonPairOpeningBrackets + `)` colonPairLookahead = `(?=(:['\w-]+` + colonPairOpeningBrackets + `.+?` + colonPairClosingBrackets + `)?` namePattern = `(?:(?!` + colonPairPattern + `)(?:::|[\w':-]))+` variablePattern = `[$@%&]+[.^:?=!~]?` + namePattern globalVariablePattern = `[$@%&]+\*` + namePattern ) keywords := []string{ `BEGIN`, `CATCH`, `CHECK`, `CLOSE`, `CONTROL`, `DOC`, `END`, `ENTER`, `FIRST`, `INIT`, `KEEP`, `LAST`, `LEAVE`, `NEXT`, `POST`, `PRE`, `QUIT`, `UNDO`, `anon`, `augment`, `but`, `class`, `constant`, `default`, `does`, `else`, `elsif`, `enum`, `for`, `gather`, `given`, `grammar`, `has`, `if`, `import`, `is`, `of`, `let`, `loop`, `made`, `make`, `method`, `module`, `multi`, `my`, `need`, `orwith`, `our`, `proceed`, `proto`, `repeat`, `require`, `where`, `return`, `return-rw`, `returns`, `->`, `-->`, `role`, `state`, `sub`, `no`, `submethod`, `subset`, `succeed`, `supersede`, `try`, `unit`, `unless`, `until`, `use`, `when`, `while`, `with`, `without`, `export`, `native`, `repr`, `required`, `rw`, `symbol`, `default`, `cached`, `DEPRECATED`, `dynamic`, `hidden-from-backtrace`, `nodal`, `pure`, `raw`, `start`, `react`, `supply`, `whenever`, `also`, `rule`, `token`, `regex`, `dynamic-scope`, `built`, `temp`, } keywordsPattern := Words(`(?)`, `(>=)`, `minmax`, `notandthen`, `S`, } wordOperatorsPattern := Words(`(?<=^|\b|\s)`, `(?=$|\b|\s)`, wordOperators...) operators := []string{ `++`, `--`, `-`, `**`, `!`, `+`, `~`, `?`, `+^`, `~^`, `?^`, `^`, `*`, `/`, `%`, `%%`, `+&`, `+<`, `+>`, `~&`, `~<`, `~>`, `?&`, `+|`, `+^`, `~|`, `~^`, `?`, `?|`, `?^`, `&`, `^`, `<=>`, `^…^`, `^…`, `…^`, `…`, `...`, `...^`, `^...`, `^...^`, `..`, `..^`, `^..`, `^..^`, `::=`, `:=`, `!=`, `==`, `<=`, `<`, `>=`, `>`, `~~`, `===`, `&&`, `||`, `|`, `^^`, `//`, `??`, `!!`, `^fff^`, `^ff^`, `<==`, `==>`, `<<==`, `==>>`, `=>`, `=`, `<<`, `«`, `>>`, `»`, `,`, `>>.`, `».`, `.&`, `.=`, `.^`, `.?`, `.+`, `.*`, `.`, `∘`, `∩`, `⊍`, `∪`, `⊎`, `∖`, `⊖`, `≠`, `≤`, `≥`, `=:=`, `=~=`, `≅`, `∈`, `∉`, `≡`, `≢`, `∋`, `∌`, `⊂`, `⊄`, `⊆`, `⊈`, `⊃`, `⊅`, `⊇`, `⊉`, `:`, `!!!`, `???`, `¯`, `×`, `÷`, `−`, `⁺`, `⁻`, } operatorsPattern := Words(``, ``, operators...) builtinTypes := []string{ `False`, `True`, `Order`, `More`, `Less`, `Same`, `Any`, `Array`, `Associative`, `AST`, `atomicint`, `Attribute`, `Backtrace`, `Backtrace::Frame`, `Bag`, `Baggy`, `BagHash`, `Blob`, `Block`, `Bool`, `Buf`, `Callable`, `CallFrame`, `Cancellation`, `Capture`, `CArray`, `Channel`, `Code`, `compiler`, `Complex`, `ComplexStr`, `CompUnit`, `CompUnit::PrecompilationRepository`, `CompUnit::Repository`, `Empty`, `CompUnit::Repository::FileSystem`, `CompUnit::Repository::Installation`, `Cool`, `CurrentThreadScheduler`, `CX::Warn`, `CX::Take`, `CX::Succeed`, `CX::Return`, `CX::Redo`, `CX::Proceed`, `CX::Next`, `CX::Last`, `CX::Emit`, `CX::Done`, `Cursor`, `Date`, `Dateish`, `DateTime`, `Distribution`, `Distribution::Hash`, `Distribution::Locally`, `Distribution::Path`, `Distribution::Resource`, `Distro`, `Duration`, `Encoding`, `Encoding::GlobalLexerRegistry`, `Endian`, `Enumeration`, `Exception`, `Failure`, `FatRat`, `Grammar`, `Hash`, `HyperWhatever`, `Instant`, `Int`, `int`, `int16`, `int32`, `int64`, `int8`, `str`, `IntStr`, `IO`, `IO::ArgFiles`, `IO::CatHandle`, `IO::Handle`, `IO::Notification`, `IO::Notification::Change`, `IO::Path`, `IO::Path::Cygwin`, `IO::Path::Parts`, `IO::Path::QNX`, `IO::Path::Unix`, `IO::Path::Win32`, `IO::Pipe`, `IO::Socket`, `IO::Socket::Async`, `IO::Socket::Async::ListenSocket`, `IO::Socket::INET`, `IO::Spec`, `IO::Spec::Cygwin`, `IO::Spec::QNX`, `IO::Spec::Unix`, `IO::Spec::Win32`, `IO::Special`, `Iterable`, `Iterator`, `Junction`, `Kernel`, `Label`, `List`, `Lock`, `Lock::Async`, `Lock::ConditionVariable`, `long`, `longlong`, `Macro`, `Map`, `Match`, `Metamodel::AttributeContainer`, `Metamodel::C3MRO`, `Metamodel::ClassHOW`, `Metamodel::ConcreteRoleHOW`, `Metamodel::CurriedRoleHOW`, `Metamodel::DefiniteHOW`, `Metamodel::Documenting`, `Metamodel::EnumHOW`, `Metamodel::Finalization`, `Metamodel::MethodContainer`, `Metamodel::Mixins`, `Metamodel::MROBasedMethodDispatch`, `Metamodel::MultipleInheritance`, `Metamodel::Naming`, `Metamodel::Primitives`, `Metamodel::PrivateMethodContainer`, `Metamodel::RoleContainer`, `Metamodel::RolePunning`, `Metamodel::Stashing`, `Metamodel::Trusting`, `Metamodel::Versioning`, `Method`, `Mix`, `MixHash`, `Mixy`, `Mu`, `NFC`, `NFD`, `NFKC`, `NFKD`, `Nil`, `Num`, `num32`, `num64`, `Numeric`, `NumStr`, `ObjAt`, `Order`, `Pair`, `Parameter`, `Perl`, `Pod::Block`, `Pod::Block::Code`, `Pod::Block::Comment`, `Pod::Block::Declarator`, `Pod::Block::Named`, `Pod::Block::Para`, `Pod::Block::Table`, `Pod::Heading`, `Pod::Item`, `Pointer`, `Positional`, `PositionalBindFailover`, `Proc`, `Proc::Async`, `Promise`, `Proxy`, `PseudoStash`, `QuantHash`, `RaceSeq`, `Raku`, `Range`, `Rat`, `Rational`, `RatStr`, `Real`, `Regex`, `Routine`, `Routine::WrapHandle`, `Scalar`, `Scheduler`, `Semaphore`, `Seq`, `Sequence`, `Set`, `SetHash`, `Setty`, `Signature`, `size_t`, `Slip`, `Stash`, `Str`, `StrDistance`, `Stringy`, `Sub`, `Submethod`, `Supplier`, `Supplier::Preserving`, `Supply`, `Systemic`, `Tap`, `Telemetry`, `Telemetry::Instrument::Thread`, `Telemetry::Instrument::ThreadPool`, `Telemetry::Instrument::Usage`, `Telemetry::Period`, `Telemetry::Sampler`, `Thread`, `Test`, `ThreadPoolScheduler`, `UInt`, `uint16`, `uint32`, `uint64`, `uint8`, `Uni`, `utf8`, `ValueObjAt`, `Variable`, `Version`, `VM`, `Whatever`, `WhateverCode`, `WrapHandle`, `NativeCall`, // Pragmas `precompilation`, `experimental`, `worries`, `MONKEY-TYPING`, `MONKEY-SEE-NO-EVAL`, `MONKEY-GUTS`, `fatal`, `lib`, `isms`, `newline`, `nqp`, `soft`, `strict`, `trace`, `variables`, } builtinTypesPattern := Words(`(? 0 { if tokenClass == rakuPod { match, err := podRegex.FindRunesMatchStartingAt(text, searchPos+nChars) if err == nil { closingChars = match.Runes() nextClosePos = match.Index } else { nextClosePos = -1 } } else { nextClosePos = indexAt(text, closingChars, searchPos+nChars) } nextOpenPos := indexAt(text, openingChars, searchPos+nChars) switch { case nextClosePos == -1: nextClosePos = len(text) nestingLevel = 0 case nextOpenPos != -1 && nextOpenPos < nextClosePos: nestingLevel++ nChars = len(openingChars) searchPos = nextOpenPos default: // next_close_pos < next_open_pos nestingLevel-- nChars = len(closingChars) searchPos = nextClosePos } } endPos = nextClosePos } if endPos < 0 { // if we didn't find a closer, just highlight the // rest of the text in this class endPos = len(text) } adverbre := regexp.MustCompile(`:to\b|:heredoc\b`) var heredocTerminator []rune var endHeredocPos int if adverbre.MatchString(string(adverbs)) { if endPos != len(text) { heredocTerminator = text[state.Pos:endPos] nChars = len(heredocTerminator) } else { endPos = state.Pos + 1 heredocTerminator = []rune{} nChars = 0 } if nChars > 0 { endHeredocPos = indexAt(text[endPos:], heredocTerminator, 0) if endHeredocPos > -1 { endPos += endHeredocPos } else { endPos = len(text) } } } textBetweenBrackets := string(text[state.Pos:endPos]) switch tokenClass { case rakuPod, rakuPodDeclaration, rakuNameAttribute: state.NamedGroups[`value`] = textBetweenBrackets state.NamedGroups[`closing_delimiters`] = string(closingChars) case rakuQuote: if len(heredocTerminator) > 0 { // Length of heredoc terminator + closing chars + `;` heredocFristPunctuationLen := nChars + len(openingChars) + 1 state.NamedGroups[`opening_delimiters`] = string(openingChars) + string(text[state.Pos:state.Pos+heredocFristPunctuationLen]) state.NamedGroups[`value`] = string(text[state.Pos+heredocFristPunctuationLen : endPos]) if endHeredocPos > -1 { state.NamedGroups[`closing_delimiters`] = string(heredocTerminator) } } else { state.NamedGroups[`value`] = textBetweenBrackets if nChars > 0 { state.NamedGroups[`closing_delimiters`] = string(closingChars) } } default: state.Groups = []string{state.Groups[0] + string(text[state.Pos:endPos+nChars])} } state.Pos = endPos + nChars return nil } } // Raku rules // Empty capture groups are placeholders and will be replaced by mutators // DO NOT REMOVE THEM! return Rules{ "root": { // Placeholder, will be overwritten by mutators, DO NOT REMOVE! {`\A\z`, nil, nil}, Include("common"), {`{`, Punctuation, Push(`root`)}, {`\(`, Punctuation, Push(`root`)}, {`[)}]`, Punctuation, Pop(1)}, {`;`, Punctuation, nil}, {`\[|\]`, Operator, nil}, {`.+?`, Text, nil}, }, "common": { {`^#![^\n]*$`, CommentHashbang, nil}, Include("pod"), // Multi-line, Embedded comment { "#`(?(?" + bracketsPattern + `)\k*)`, CommentMultiline, findBrackets(rakuMultilineComment), }, {`#[^\n]*$`, CommentSingle, nil}, // /regex/ { `(?<=(?:^|\(|=|:|~~|\[|{|,|=>)\s*)(/)(?!\]|\))((?:\\\\|\\/|.)*?)((?>)(\S+?)(<<)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, {`(»)(\S+?)(«)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, // Hyperoperator | «*« {`(<<)(\S+?)(<<)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, {`(«)(\S+?)(«)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, // Hyperoperator | »*» {`(>>)(\S+?)(>>)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, {`(»)(\S+?)(»)`, ByGroups(Operator, UsingSelf("root"), Operator), nil}, // <> {`(?>)[^\n])+?[},;] *\n)(?!(?:(?!>>).)+?>>\S+?>>)`, Punctuation, Push("<<")}, // «quoted words» {`(? operators | something < onething > something { `(?<=[$@%&]?\w[\w':-]* +)(<=?)( *[^ ]+? *)(>=?)(?= *[$@%&]?\w[\w':-]*)`, ByGroups(Operator, UsingSelf("root"), Operator), nil, }, // { `(?])+?)(>)(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%]\*?\w[\w':-]*[^(]|\s+\[))`, ByGroups(Punctuation, String, Punctuation), nil, }, {`C?X::['\w:-]+`, NameException, nil}, Include("metaoperator"), // Pair | key => value { `(\w[\w'-]*)(\s*)(=>)`, ByGroups(String, Text, Operator), nil, }, Include("colon-pair"), // Token { `(?<=(?:^|\s)(?:regex|token|rule)(\s+))` + namePattern + colonPairLookahead + `\s*[({])`, NameFunction, Push("token", "name-adverb"), }, // Substitution {`(?<=^|\b|\s)(?(?:qq|q|Q))(?(?::?(?:heredoc|to|qq|ww|q|w|s|a|h|f|c|b|to|v|x))*)(?\s*)(?(?[^0-9a-zA-Z:\s])\k*)`, EmitterFunc(quote), findBrackets(rakuQuote), }, // Function { `\b` + namePattern + colonPairLookahead + `\()`, NameFunction, Push("name-adverb"), }, // Method { `(?(?[^\w:\s])\k*)`, ByGroupNames( map[string]Emitter{ `opening_delimiters`: Punctuation, `delimiter`: nil, }, ), findBrackets(rakuMatchRegex), }, }, "substitution": { Include("colon-pair-attribute"), // Substitution | s{regex} = value { `(?(?` + bracketsPattern + `)\k*)`, ByGroupNames(map[string]Emitter{ `opening_delimiters`: Punctuation, `delimiter`: nil, }), findBrackets(rakuMatchRegex), }, // Substitution | s/regex/string/ { `(?[^\w:\s])`, Punctuation, findBrackets(rakuSubstitutionRegex), }, }, "number": { {`0_?[0-7]+(_[0-7]+)*`, LiteralNumberOct, nil}, {`0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*`, LiteralNumberHex, nil}, {`0b[01]+(_[01]+)*`, LiteralNumberBin, nil}, { `(?i)(\d*(_\d*)*\.\d+(_\d*)*|\d+(_\d*)*\.\d+(_\d*)*)(e[+-]?\d+)?`, LiteralNumberFloat, nil, }, {`(?i)\d+(_\d*)*e[+-]?\d+(_\d*)*`, LiteralNumberFloat, nil}, {`(?<=\d+)i`, NameConstant, nil}, {`\d+(_\d+)*`, LiteralNumberInteger, nil}, }, "name-adverb": { Include("colon-pair-attribute-keyvalue"), Default(Pop(1)), }, "colon-pair": { // :key(value) {colonPairPattern, colonPair(String), findBrackets(rakuNameAttribute)}, // :123abc { `(:)(\d+)(\w[\w'-]*)`, ByGroups(Punctuation, UsingSelf("number"), String), nil, }, // :key {`(:)(!?)(\w[\w'-]*)`, ByGroups(Punctuation, Operator, String), nil}, {`\s+`, Text, nil}, }, "colon-pair-attribute": { // :key(value) {colonPairPattern, colonPair(NameAttribute), findBrackets(rakuNameAttribute)}, // :123abc { `(:)(\d+)(\w[\w'-]*)`, ByGroups(Punctuation, UsingSelf("number"), NameAttribute), nil, }, // :key {`(:)(!?)(\w[\w'-]*)`, ByGroups(Punctuation, Operator, NameAttribute), nil}, {`\s+`, Text, nil}, }, "colon-pair-attribute-keyvalue": { // :key(value) {colonPairPattern, colonPair(NameAttribute), findBrackets(rakuNameAttribute)}, }, "escape-qq": { { `(? { `(?`), tokenType: Punctuation, stateName: `root`, pushState: true, }), }, // {code} Include(`closure`), // Properties {`(:)(\w+)`, ByGroups(Punctuation, NameAttribute), nil}, // Operator {`\|\||\||&&|&|\.\.|\*\*|%%|%|:|!|<<|«|>>|»|\+|\*\*|\*|\?|=|~|<~~>`, Operator, nil}, // Anchors {`\^\^|\^|\$\$|\$`, NameEntity, nil}, {`\.`, NameEntity, nil}, {`#[^\n]*\n`, CommentSingle, nil}, // Lookaround { `(?`), tokenType: Punctuation, stateName: `regex`, pushState: true, }), }, { `(?)`, ByGroups(Punctuation, Operator, OperatorWord, Punctuation), nil, }, // <$variable> { `(?)`, ByGroups(Punctuation, Operator, NameVariable, Punctuation), nil, }, // Capture markers {`(?`, Operator, nil}, { `(? {`(?`, Punctuation, Pop(1)}, // { `\(`, Punctuation, replaceRule(ruleReplacingConfig{ delimiter: []rune(`)>`), tokenType: Punctuation, stateName: `root`, popState: true, pushState: true, }), }, // { `\s+`, StringRegex, replaceRule(ruleReplacingConfig{ delimiter: []rune(`>`), tokenType: Punctuation, stateName: `regex`, popState: true, pushState: true, }), }, // { `:`, Punctuation, replaceRule(ruleReplacingConfig{ delimiter: []rune(`>`), tokenType: Punctuation, stateName: `root`, popState: true, pushState: true, }), }, }, "regex-variable": { Include(`regex-starting-operators`), // {`(&)?(\w[\w':-]*)(>)`, ByGroups(Operator, NameFunction, Punctuation), Pop(1)}, // `, Punctuation, Pop(1)}, Include("regex-class-builtin"), Include("variable"), Include(`regex-starting-operators`), Include("colon-pair-attribute"), {`(?] { `\b([RZX]+)\b(\[)([^\s\]]+?)(\])`, ByGroups(OperatorWord, Punctuation, UsingSelf("root"), Punctuation), nil, }, // Z=> {`\b([RZX]+)\b([^\s\]]+)`, ByGroups(OperatorWord, UsingSelf("operator")), nil}, }, "operator": { // Word Operator {wordOperatorsPattern, OperatorWord, nil}, // Operator {operatorsPattern, Operator, nil}, }, "pod": { // Single-line pod declaration {`(#[|=])\s`, Keyword, Push("pod-single")}, // Multi-line pod declaration { "(?#[|=])(?(?" + bracketsPattern + `)\k*)(?)(?)`, ByGroupNames( map[string]Emitter{ `keyword`: Keyword, `opening_delimiters`: Punctuation, `delimiter`: nil, `value`: UsingSelf("pod-declaration"), `closing_delimiters`: Punctuation, }), findBrackets(rakuPodDeclaration), }, Include("pod-blocks"), }, "pod-blocks": { // =begin code { `(?<=^ *)(? *)(?=begin)(? +)(?code)(?[^\n]*)(?.*?)(?^\k)(?=end)(? +)\k`, EmitterFunc(podCode), nil, }, // =begin { `(?<=^ *)(? *)(?=begin)(? +)(?!code)(?\w[\w'-]*)(?[^\n]*)(?)(?)`, ByGroupNames( map[string]Emitter{ `ws`: Comment, `keyword`: Keyword, `ws2`: StringDoc, `name`: Keyword, `config`: EmitterFunc(podConfig), `value`: UsingSelf("pod-begin"), `closing_delimiters`: Keyword, }), findBrackets(rakuPod), }, // =for ... { `(?<=^ *)(? *)(?=(?:for|defn))(? +)(?\w[\w'-]*)(?[^\n]*\n)`, ByGroups(Comment, Keyword, StringDoc, Keyword, EmitterFunc(podConfig)), Push("pod-paragraph"), }, // =config { `(?<=^ *)(? *)(?=config)(? +)(?\w[\w'-]*)(?[^\n]*\n)`, ByGroups(Comment, Keyword, StringDoc, Keyword, EmitterFunc(podConfig)), nil, }, // =alias { `(?<=^ *)(? *)(?=alias)(? +)(?\w[\w'-]*)(?[^\n]*\n)`, ByGroups(Comment, Keyword, StringDoc, Keyword, StringDoc), nil, }, // =encoding { `(?<=^ *)(? *)(?=encoding)(? +)(?[^\n]+)`, ByGroups(Comment, Keyword, StringDoc, Name), nil, }, // =para ... { `(?<=^ *)(? *)(?=(?:para|table|pod))(?(? *)(?=head\d+)(? *)(?#?)`, ByGroups(Comment, Keyword, GenericHeading, Keyword), Push("pod-heading"), }, // =item ... { `(?<=^ *)(? *)(?=(?:item\d*|comment|data|[A-Z]+))(? *)(?#?)`, ByGroups(Comment, Keyword, StringDoc, Keyword), Push("pod-paragraph"), }, { `(?<=^ *)(? *)(?=finish)(?[^\n]*)`, ByGroups(Comment, Keyword, EmitterFunc(podConfig)), Push("pod-finish"), }, // ={custom} ... { `(?<=^ *)(? *)(?=\w[\w'-]*)(? *)(?#?)`, ByGroups(Comment, Name, StringDoc, Keyword), Push("pod-paragraph"), }, // = podconfig { `(?<=^ *)(? *=)(? *)(?(?::\w[\w'-]*(?:` + colonPairOpeningBrackets + `.+?` + colonPairClosingBrackets + `) *)*\n)`, ByGroups(Keyword, StringDoc, EmitterFunc(podConfig)), nil, }, }, "pod-begin": { Include("pod-blocks"), Include("pre-pod-formatter"), {`.+?`, StringDoc, nil}, }, "pod-declaration": { Include("pre-pod-formatter"), {`.+?`, StringDoc, nil}, }, "pod-paragraph": { {`\n *\n|\n(?=^ *=)`, StringDoc, Pop(1)}, Include("pre-pod-formatter"), {`.+?`, StringDoc, nil}, }, "pod-single": { {`\n`, StringDoc, Pop(1)}, Include("pre-pod-formatter"), {`.+?`, StringDoc, nil}, }, "pod-heading": { {`\n *\n|\n(?=^ *=)`, GenericHeading, Pop(1)}, Include("pre-pod-formatter"), {`.+?`, GenericHeading, nil}, }, "pod-finish": { {`\z`, nil, Pop(1)}, Include("pre-pod-formatter"), {`.+?`, StringDoc, nil}, }, "pre-pod-formatter": { // C, B, ... { `(?[CBIUDTKRPAELZVMSXN])(?<+|«)`, ByGroups(Keyword, Punctuation), findBrackets(rakuPodFormatter), }, }, "pod-formatter": { // Placeholder rule, will be replaced by mutators. DO NOT REMOVE! {`>`, Punctuation, Pop(1)}, Include("pre-pod-formatter"), // Placeholder rule, will be replaced by mutators. DO NOT REMOVE! {`.+?`, StringOther, nil}, }, "variable": { {variablePattern, NameVariable, Push("name-adverb")}, {globalVariablePattern, NameVariableGlobal, Push("name-adverb")}, {`[$@]<[^>]+>`, NameVariable, nil}, {`\$[/!¢]`, NameVariable, nil}, {`[$@%]`, NameVariable, nil}, }, "single-quote": { {`(?>(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%]\*?[\w':-]+|\s+\[))`, Punctuation, Pop(1)}, Include("ww"), }, "«": { {`»(?!\s*(?:\d+|\.(?:Int|Numeric)|[$@%]\*?[\w':-]+|\s+\[))`, Punctuation, Pop(1)}, Include("ww"), }, "ww": { Include("single-quote"), Include("qq"), }, "qq": { Include("qq-variable"), Include("closure"), Include(`escape-char`), Include("escape-hexadecimal"), Include("escape-c-name"), Include("escape-qq"), {`.+?`, StringDouble, nil}, }, "qq-variable": { { `(?\.)(?` + namePattern + `)` + colonPairLookahead + `\()`, ByGroupNames(map[string]Emitter{ `operator`: Operator, `method_name`: NameFunction, }), Push(`name-adverb`), }, // Function/Signature { `\(`, Punctuation, replaceRule( ruleReplacingConfig{ delimiter: []rune(`)`), tokenType: Punctuation, stateName: `root`, pushState: true, }), }, Default(Pop(1)), }, "Q": { Include("escape-qq"), {`.+?`, String, nil}, }, "Q-closure": { Include("escape-qq"), Include("closure"), {`.+?`, String, nil}, }, "Q-variable": { Include("escape-qq"), Include("qq-variable"), {`.+?`, String, nil}, }, "closure": { {`(? -1 { idx = utf8.RuneCountInString(text[:idx]) // Search again if the substr is escaped with backslash if (idx > 1 && strFromPos[idx-1] == '\\' && strFromPos[idx-2] != '\\') || (idx == 1 && strFromPos[idx-1] == '\\') { idx = indexAt(str[pos:], substr, idx+1) idx = utf8.RuneCountInString(text[:idx]) if idx < 0 { return idx } } idx += pos } return idx } // Tells if an array of string contains a string func contains(s []string, e string) bool { for _, value := range s { if value == e { return true } } return false } type rulePosition int const ( topRule rulePosition = 0 bottomRule = -1 ) type ruleMakingConfig struct { delimiter []rune pattern string tokenType Emitter mutator Mutator numberOfDelimiterChars int } type ruleReplacingConfig struct { delimiter []rune pattern string tokenType Emitter numberOfDelimiterChars int mutator Mutator appendMutator Mutator rulePosition rulePosition stateName string pop bool popState bool pushState bool } // Pops rule from state-stack and replaces the rule with the previous rule func popRule(rule ruleReplacingConfig) MutatorFunc { return func(state *LexerState) error { stackName := genStackName(rule.stateName, rule.rulePosition) stack, ok := state.Get(stackName).([]ruleReplacingConfig) if ok && len(stack) > 0 { // Pop from stack stack = stack[:len(stack)-1] lastRule := stack[len(stack)-1] lastRule.pushState = false lastRule.popState = false lastRule.pop = true state.Set(stackName, stack) // Call replaceRule to use the last rule err := replaceRule(lastRule)(state) if err != nil { panic(err) } } return nil } } // Replaces a state's rule based on the rule config and position func replaceRule(rule ruleReplacingConfig) MutatorFunc { return func(state *LexerState) error { stateName := rule.stateName stackName := genStackName(rule.stateName, rule.rulePosition) stack, ok := state.Get(stackName).([]ruleReplacingConfig) if !ok { stack = []ruleReplacingConfig{} } // If state-stack is empty fill it with the placeholder rule if len(stack) == 0 { stack = []ruleReplacingConfig{ { // Placeholder, will be overwritten by mutators, DO NOT REMOVE! pattern: `\A\z`, tokenType: nil, mutator: nil, stateName: stateName, rulePosition: rule.rulePosition, }, } state.Set(stackName, stack) } var mutator Mutator mutators := []Mutator{} switch { case rule.rulePosition == topRule && rule.mutator == nil: // Default mutator for top rule mutators = []Mutator{Pop(1), popRule(rule)} case rule.rulePosition == topRule && rule.mutator != nil: // Default mutator for top rule, when rule.mutator is set mutators = []Mutator{rule.mutator, popRule(rule)} case rule.mutator != nil: mutators = []Mutator{rule.mutator} } if rule.appendMutator != nil { mutators = append(mutators, rule.appendMutator) } if len(mutators) > 0 { mutator = Mutators(mutators...) } else { mutator = nil } ruleConfig := ruleMakingConfig{ pattern: rule.pattern, delimiter: rule.delimiter, numberOfDelimiterChars: rule.numberOfDelimiterChars, tokenType: rule.tokenType, mutator: mutator, } cRule := makeRule(ruleConfig) switch rule.rulePosition { case topRule: state.Rules[stateName][0] = cRule case bottomRule: state.Rules[stateName][len(state.Rules[stateName])-1] = cRule } // Pop state name from stack if asked. State should be popped first before Pushing if rule.popState { err := Pop(1).Mutate(state) if err != nil { panic(err) } } // Push state name to stack if asked if rule.pushState { err := Push(stateName).Mutate(state) if err != nil { panic(err) } } if !rule.pop { state.Set(stackName, append(stack, rule)) } return nil } } // Generates rule replacing stack using state name and rule position func genStackName(stateName string, rulePosition rulePosition) (stackName string) { switch rulePosition { case topRule: stackName = stateName + `-top-stack` case bottomRule: stackName = stateName + `-bottom-stack` } return } // Makes a compiled rule and returns it func makeRule(config ruleMakingConfig) *CompiledRule { var rePattern string if len(config.delimiter) > 0 { delimiter := string(config.delimiter) if config.numberOfDelimiterChars > 1 { delimiter = strings.Repeat(delimiter, config.numberOfDelimiterChars) } rePattern = `(? 1 { lang = langMatch[1] } // Tokenise code based on lang property sublexer := Get(lang) if sublexer != nil { iterator, err := sublexer.Tokenise(nil, state.NamedGroups[`value`]) if err != nil { panic(err) } else { iterators = append(iterators, iterator) } } else { iterators = append(iterators, Literator(tokens[4])) } // Append the rest of the tokens iterators = append(iterators, Literator(tokens[5:]...)) return Concaterator(iterators...) } chroma-2.14.0/lexers/rst.go000066400000000000000000000077721461341362700155340ustar00rootroot00000000000000package lexers import ( "strings" . "github.com/alecthomas/chroma/v2" // nolint ) // Restructuredtext lexer. var Restructuredtext = Register(MustNewLexer( &Config{ Name: "reStructuredText", Aliases: []string{"rst", "rest", "restructuredtext"}, Filenames: []string{"*.rst", "*.rest"}, MimeTypes: []string{"text/x-rst", "text/prs.fallenstein.rst"}, }, restructuredtextRules, )) func restructuredtextRules() Rules { return Rules{ "root": { {"^(=+|-+|`+|:+|\\.+|\\'+|\"+|~+|\\^+|_+|\\*+|\\++|#+)([ \\t]*\\n)(.+)(\\n)(\\1)(\\n)", ByGroups(GenericHeading, Text, GenericHeading, Text, GenericHeading, Text), nil}, {"^(\\S.*)(\\n)(={3,}|-{3,}|`{3,}|:{3,}|\\.{3,}|\\'{3,}|\"{3,}|~{3,}|\\^{3,}|_{3,}|\\*{3,}|\\+{3,}|#{3,})(\\n)", ByGroups(GenericHeading, Text, GenericHeading, Text), nil}, {`^(\s*)([-*+])( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, {`^(\s*)([0-9#ivxlcmIVXLCM]+\.)( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, {`^(\s*)(\(?[0-9#ivxlcmIVXLCM]+\))( .+\n(?:\1 .+\n)*)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, {`^(\s*)([A-Z]+\.)( .+\n(?:\1 .+\n)+)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, {`^(\s*)(\(?[A-Za-z]+\))( .+\n(?:\1 .+\n)+)`, ByGroups(Text, LiteralNumber, UsingSelf("inline")), nil}, {`^(\s*)(\|)( .+\n(?:\| .+\n)*)`, ByGroups(Text, Operator, UsingSelf("inline")), nil}, {`^( *\.\.)(\s*)((?:source)?code(?:-block)?)(::)([ \t]*)([^\n]+)(\n[ \t]*\n)([ \t]+)(.*)(\n)((?:(?:\8.*|)\n)+)`, EmitterFunc(rstCodeBlock), nil}, {`^( *\.\.)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))`, ByGroups(Punctuation, Text, OperatorWord, Punctuation, Text, UsingSelf("inline")), nil}, {`^( *\.\.)(\s*)(_(?:[^:\\]|\\.)+:)(.*?)$`, ByGroups(Punctuation, Text, NameTag, UsingSelf("inline")), nil}, {`^( *\.\.)(\s*)(\[.+\])(.*?)$`, ByGroups(Punctuation, Text, NameTag, UsingSelf("inline")), nil}, {`^( *\.\.)(\s*)(\|.+\|)(\s*)([\w:-]+?)(::)(?:([ \t]*)(.*))`, ByGroups(Punctuation, Text, NameTag, Text, OperatorWord, Punctuation, Text, UsingSelf("inline")), nil}, {`^ *\.\..*(\n( +.*\n|\n)+)?`, CommentPreproc, nil}, {`^( *)(:[a-zA-Z-]+:)(\s*)$`, ByGroups(Text, NameClass, Text), nil}, {`^( *)(:.*?:)([ \t]+)(.*?)$`, ByGroups(Text, NameClass, Text, NameFunction), nil}, {`^(\S.*(?)(`__?)", ByGroups(LiteralString, LiteralStringInterpol, LiteralString), nil}, {"`.+?`__?", LiteralString, nil}, {"(`.+?`)(:[a-zA-Z0-9:-]+?:)?", ByGroups(NameVariable, NameAttribute), nil}, {"(:[a-zA-Z0-9:-]+?:)(`.+?`)", ByGroups(NameAttribute, NameVariable), nil}, {`\*\*.+?\*\*`, GenericStrong, nil}, {`\*.+?\*`, GenericEmph, nil}, {`\[.*?\]_`, LiteralString, nil}, {`<.+?>`, NameTag, nil}, {"[^\\\\\\n\\[*`:]+", Text, nil}, {`.`, Text, nil}, }, "literal": { {"[^`]+", LiteralString, nil}, {"``((?=$)|(?=[-/:.,; \\n\\x00\\\u2010\\\u2011\\\u2012\\\u2013\\\u2014\\\u00a0\\'\\\"\\)\\]\\}\\>\\\u2019\\\u201d\\\u00bb\\!\\?]))", LiteralString, Pop(1)}, {"`", LiteralString, nil}, }, } } func rstCodeBlock(groups []string, state *LexerState) Iterator { iterators := []Iterator{} tokens := []Token{ {Punctuation, groups[1]}, {Text, groups[2]}, {OperatorWord, groups[3]}, {Punctuation, groups[4]}, {Text, groups[5]}, {Keyword, groups[6]}, {Text, groups[7]}, } code := strings.Join(groups[8:], "") lexer := Get(groups[6]) if lexer == nil { tokens = append(tokens, Token{String, code}) iterators = append(iterators, Literator(tokens...)) } else { sub, err := lexer.Tokenise(nil, code) if err != nil { panic(err) } iterators = append(iterators, Literator(tokens...), sub) } return Concaterator(iterators...) } chroma-2.14.0/lexers/svelte.go000066400000000000000000000037161461341362700162200ustar00rootroot00000000000000package lexers import ( . "github.com/alecthomas/chroma/v2" // nolint ) // Svelte lexer. var Svelte = Register(DelegatingLexer(HTML, MustNewLexer( &Config{ Name: "Svelte", Aliases: []string{"svelte"}, Filenames: []string{"*.svelte"}, MimeTypes: []string{"application/x-svelte"}, DotAll: true, }, svelteRules, ))) func svelteRules() Rules { return Rules{ "root": { // Let HTML handle the comments, including comments containing script and style tags {``, Other, Pop(1)}, {`.+?`, Other, nil}, }, "templates": { {`}`, Punctuation, Pop(1)}, // Let TypeScript handle strings and the curly braces inside them {`(?= 2 aufzustellen DATA g_number TYPE i VALUE 1. "Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht DATA g_is_prime TYPE abap_bool. "mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden DATA(g_sqrt_range) = sqrt( p_range ). "da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden "muss die Schleife lediglich p_range - 1 male durchlaufen werden DO p_range - 1 TIMES. "zählt die zu prüfende Zahlen hoch ADD 1 TO g_number. "grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist g_is_prime = abap_true. "Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist LOOP AT gt_prim_num ASSIGNING FIELD-SYMBOL(). "Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden "Sobald dieser bei g_number / 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht "weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden IF g_number MOD = 0. g_is_prime = abap_false. EXIT. ENDIF. ENDLOOP. "Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben IF g_is_prime = abap_true. "Wenn die neu gefundene Primzahl <= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung) IF g_number <= g_sqrt_range. INSERT g_number INTO TABLE gt_prim_num. ENDIF. WRITE g_number. ENDIF. ENDDO.chroma-2.14.0/lexers/testdata/abap.expected000066400000000000000000000224651461341362700206300ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026 Report /WUE/AUFGABE_PRIMZAHL"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026 Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026 genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"*\u0026---------------------------------------------------------------------*"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"REPORT"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"/"}, {"type":"NameVariable","value":"wue"}, {"type":"Punctuation","value":"/"}, {"type":"NameVariable","value":"aufgabe_primzahl"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n\n"}, {"type":"Keyword","value":"PARAMETERS"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"p_range"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TYPE "}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"\"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich\n\"der Würzel der eingegebenen Zahl sind\n"}, {"type":"Keyword","value":"DATA"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"gt_prim_num"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TYPE TABLE OF"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"\"Diese Variable dient dazu, alle Zahlen \u003c= der eingegebenen Zahl und \u003e= 2 aufzustellen\n"}, {"type":"Keyword","value":"DATA"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TYPE "}, {"type":"NameVariable","value":"i"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"VALUE"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"\"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht\n"}, {"type":"Keyword","value":"DATA"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_is_prime"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TYPE "}, {"type":"NameVariable","value":"abap_bool"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"\"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden\n"}, {"type":"Keyword","value":"DATA"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"g_sqrt_range"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"sqrt"}, {"type":"Punctuation","value":"("}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"p_range"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":")."}, {"type":"Text","value":"\n\n\n\n"}, {"type":"CommentSingle","value":"\"da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden\n\"muss die Schleife lediglich p_range - 1 male durchlaufen werden\n"}, {"type":"Keyword","value":"DO"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"p_range"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TIMES"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"zählt die zu prüfende Zahlen hoch\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"ADD"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist\n"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_is_prime"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"abap_true"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"LOOP AT "}, {"type":"NameVariable","value":"gt_prim_num"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"ASSIGNING"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"FIELD"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"SYMBOL"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"\u003cg_prim\u003e"}, {"type":"Punctuation","value":")."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"\"Sobald dieser bei g_number / \u003cg_prim\u003e 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"\"weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"MOD"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"\u003cg_prim\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"g_is_prime"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"abap_false"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"EXIT"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"ENDIF"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"ENDLOOP"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_is_prime"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"abap_true"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"\"Wenn die neu gefundene Primzahl \u003c= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung)\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_sqrt_range"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"INSERT"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"TABLE"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"gt_prim_num"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"ENDIF"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"WRITE"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"g_number"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"ENDIF"}, {"type":"Punctuation","value":"."}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"ENDDO"}, {"type":"Punctuation","value":"."} ] chroma-2.14.0/lexers/testdata/agda.actual000066400000000000000000000005271461341362700202640ustar00rootroot00000000000000module hello-world where open import Agda.Builtin.IO using (IO) open import Agda.Builtin.Unit using (⊤) open import Agda.Builtin.String using (String) postulate putStrLn : String → IO ⊤ {-# FOREIGN GHC import qualified Data.Text as T #-} {-# COMPILE GHC putStrLn = putStrLn . T.unpack #-} main : IO ⊤ main = putStrLn "Hello world!" chroma-2.14.0/lexers/testdata/agda.expected000066400000000000000000000062611461341362700206150ustar00rootroot00000000000000[ {"type":"KeywordReserved","value":"module"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"hello"}, {"type":"Text","value":"-world"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"where"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordReserved","value":"open"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"import"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Agda.Builtin.IO"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"using"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"("}, {"type":"Text","value":"IO"}, {"type":"Operator","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordReserved","value":"open"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"import"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Agda.Builtin.Unit"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"using"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"("}, {"type":"Text","value":"⊤"}, {"type":"Operator","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordReserved","value":"open"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"import"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Agda.Builtin.String"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordReserved","value":"using"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"("}, {"type":"Text","value":"String"}, {"type":"Operator","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordReserved","value":"postulate"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"putStrLn"}, {"type":"TextWhitespace","value":" "}, {"type":"OperatorWord","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"String"}, {"type":"TextWhitespace","value":" "}, {"type":"OperatorWord","value":"→"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"IO"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"⊤"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentMultiline","value":"{-# FOREIGN GHC import qualified Data.Text as T #-}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentMultiline","value":"{-# COMPILE GHC putStrLn = putStrLn . T.unpack #-}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"NameFunction","value":"main"}, {"type":"TextWhitespace","value":" "}, {"type":"OperatorWord","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"IO"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"⊤"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"main"}, {"type":"TextWhitespace","value":" "}, {"type":"OperatorWord","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"putStrLn"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Hello world!\""}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/al.actual000066400000000000000000000037731461341362700177720ustar00rootroot00000000000000/// /// Manage Loyalty Benefits /// codeunit 50100 "Loyalty Benefits Management" { var Vendor: record Vendor; trigger OnRun() begin end; /// /// Adjust a Sales Order with loyalty level /// /// Sales Header to adjust based on Customer Loyalty procedure AdjustForLoyalty(var SalesHeader: record "Sales Header"): Integer; var Customer: record Customer; LoyaltyBenefits: interface ILoyaltyBenefits; Discount: Decimal; begin Customer.Get(SalesHeader."Sell-to Customer No."); LoyaltyBenefits := Customer.Loyalty; Discount := 1; Discount := LoyaltyBenefits.GetDiscount(); ApplyDiscount(SalesHeader, Discount); end; /// /// Applies the Discount to the Sales Order /// /// Sales Order /// Discount to apply local procedure "Apply Discount"(SalesHeader: record "Sales Header"; Discount: Decimal) begin // TODO: Implement end; } enum 50140 SomeEnum { value(0; None) { } } #region interface stuff interface ISuperGreat { procedure YesSir("c in c": codeunit FooBar); } #endregion table 50100 Customer { Access = Internal; TableType = Normal; fields { field(1; "P K"; Integer) { } } } /// /// Add the Loyalty fields to the Customer table. /// tableextension 50100 LoyaltyCustomerExt extends Customer { fields { /// /// Customer loyalty. /// field(50100; Loyalty; enum LoyaltyLevel) { } } } /// /// Adds the Loyalty field to the General group on the "Customer Card" /// pageextension 50100 LoyaltyCustCardExt extends "Customer Card" { layout { addlast(General) { field(Loyalty; Rec.Loyalty) { } } } }chroma-2.14.0/lexers/testdata/al.expected000066400000000000000000000343161461341362700203170ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"/// \u003csummary\u003e\n/// Manage Loyalty Benefits\n/// \u003c/summary\u003e\n"}, {"type":"Keyword","value":"codeunit"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"50100"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"Loyalty Benefits Management\""}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Vendor"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"record"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Vendor"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Keyword","value":"trigger"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"OnRun"}, {"type":"Operator","value":"()\n "}, {"type":"Keyword","value":"begin"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"CommentSingle","value":"/// \u003csummary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// Adjust a Sales Order with loyalty level\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003c/summary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003cparam name=\"SalesHeader\"\u003eSales Header to adjust based on Customer Loyalty\u003c/param\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"procedure"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"AdjustForLoyalty"}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"SalesHeader"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"record"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"Sales Header\""}, {"type":"Operator","value":")"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"Integer"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Customer"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"record"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Customer"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"LoyaltyBenefits"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"interface"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"ILoyaltyBenefits"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Discount"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"Decimal"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"begin"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Customer"}, {"type":"Operator","value":"."}, {"type":"Text","value":"Get"}, {"type":"Operator","value":"("}, {"type":"Text","value":"SalesHeader"}, {"type":"Operator","value":"."}, {"type":"Text","value":"\"Sell-to Customer No.\""}, {"type":"Operator","value":")"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Text","value":"LoyaltyBenefits"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":":="}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Customer"}, {"type":"Operator","value":"."}, {"type":"Text","value":"Loyalty"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Discount"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":":="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Discount"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":":="}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"LoyaltyBenefits"}, {"type":"Operator","value":"."}, {"type":"Text","value":"GetDiscount"}, {"type":"Operator","value":"()"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"ApplyDiscount"}, {"type":"Operator","value":"("}, {"type":"Text","value":"SalesHeader"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Discount"}, {"type":"Operator","value":")"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"CommentSingle","value":"/// \u003csummary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// Applies the Discount to the Sales Order\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003c/summary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003cparam name=\"SalesHeader\"\u003eSales Order\u003c/param\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003cparam name=\"Discount\"\u003eDiscount to apply\u003c/param\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"local"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"procedure"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"Apply Discount\""}, {"type":"Operator","value":"("}, {"type":"Text","value":"SalesHeader"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"record"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"Sales Header\""}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Discount"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"Decimal"}, {"type":"Operator","value":")\n "}, {"type":"Keyword","value":"begin"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":"// TODO: Implement\n"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n\n\n"}, {"type":"Keyword","value":"enum"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"50140"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"SomeEnum"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"value"}, {"type":"Operator","value":"("}, {"type":"LiteralNumber","value":"0"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"None"}, {"type":"Operator","value":") "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentPreproc","value":"#region interface stuff\n"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"interface"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"ISuperGreat"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"procedure"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"YesSir"}, {"type":"Operator","value":"("}, {"type":"Text","value":"\"c in c\""}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"codeunit"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"FooBar"}, {"type":"Operator","value":")"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentPreproc","value":"#endregion\n"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"table"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"50100"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Customer"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"Access"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"Internal"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"TableType"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Normal"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n "}, {"type":"Keyword","value":"fields"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"field"}, {"type":"Operator","value":"("}, {"type":"LiteralNumber","value":"1"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"P K\""}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"Integer"}, {"type":"Operator","value":")\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"/// \u003csummary\u003e\n/// Add the Loyalty fields to the Customer table.\n/// \u003c/summary\u003e\n"}, {"type":"Keyword","value":"tableextension"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"50100"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"LoyaltyCustomerExt"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"extends"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Customer"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"fields"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":"/// \u003csummary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// Customer loyalty.\n"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"/// \u003c/summary\u003e\n"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"field"}, {"type":"Operator","value":"("}, {"type":"LiteralNumber","value":"50100"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Loyalty"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"enum"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"LoyaltyLevel"}, {"type":"Operator","value":")\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"/// \u003csummary\u003e\n/// Adds the Loyalty field to the General group on the \"Customer Card\"\n/// \u003c/summary\u003e\n"}, {"type":"Keyword","value":"pageextension"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"50100"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"LoyaltyCustCardExt"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"extends"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"\"Customer Card\""}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"layout"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"addlast"}, {"type":"Operator","value":"("}, {"type":"Text","value":"General"}, {"type":"Operator","value":")\n "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"field"}, {"type":"Operator","value":"("}, {"type":"Text","value":"Loyalty"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"Rec"}, {"type":"Operator","value":"."}, {"type":"Text","value":"Loyalty"}, {"type":"Operator","value":") "}, {"type":"Text","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Text","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Text","value":"}"} ] chroma-2.14.0/lexers/testdata/alloy.actual000066400000000000000000000002741461341362700205070ustar00rootroot00000000000000sig Node { edges: set Node } fact "Connected graph" { some n: Node | n.*edges = Node } fact "No self edges" { no iden & edges } one sig Ball { -- note the var var loc: Node } chroma-2.14.0/lexers/testdata/alloy.expected000066400000000000000000000056341461341362700210440ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"sig"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Node"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"edges"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"set"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Node"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"fact"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Connected graph\""}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"some"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"n"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Node"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"|"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"n"}, {"type":"Operator","value":".*"}, {"type":"Name","value":"edges"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Node"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"fact"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"No self edges\""}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"no"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"iden"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"edges"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"one"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"sig"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Ball"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":"-- note the var"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"loc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Node"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/analysis/000077500000000000000000000000001461341362700200145ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/analysis/bash.actual000066400000000000000000000000521461341362700221210ustar00rootroot00000000000000#!/bin/bash echo "This is a bash script" chroma-2.14.0/lexers/testdata/analysis/bash.expected000066400000000000000000000000021461341362700224440ustar00rootroot000000000000001 chroma-2.14.0/lexers/testdata/analysis/c.ifdef.actual000066400000000000000000000000161461341362700225020ustar00rootroot00000000000000 #ifdef DEBUG chroma-2.14.0/lexers/testdata/analysis/c.ifdef.expected000066400000000000000000000000041461341362700230270ustar00rootroot000000000000000.1 chroma-2.14.0/lexers/testdata/analysis/c.ifndef.actual000066400000000000000000000000171461341362700226610ustar00rootroot00000000000000 #ifndef DEBUG chroma-2.14.0/lexers/testdata/analysis/c.ifndef.expected000066400000000000000000000000041461341362700232050ustar00rootroot000000000000000.1 chroma-2.14.0/lexers/testdata/analysis/c.include.actual000066400000000000000000000000241461341362700230470ustar00rootroot00000000000000 #include chroma-2.14.0/lexers/testdata/analysis/c.include.expected000066400000000000000000000000041461341362700233750ustar00rootroot000000000000000.1 chroma-2.14.0/lexers/testdata/analysis/cpp.include.actual000066400000000000000000000000241461341362700234070ustar00rootroot00000000000000#include chroma-2.14.0/lexers/testdata/analysis/cpp.include.expected000066400000000000000000000000041461341362700237350ustar00rootroot000000000000000.2 chroma-2.14.0/lexers/testdata/analysis/cpp.namespace.actual000066400000000000000000000000251461341362700237210ustar00rootroot00000000000000using namespace std; chroma-2.14.0/lexers/testdata/analysis/cpp.namespace.expected000066400000000000000000000000041461341362700242460ustar00rootroot000000000000000.4 chroma-2.14.0/lexers/testdata/analysis/mysql.backtick.actual000066400000000000000000000000421461341362700241220ustar00rootroot00000000000000CREATE TABLE `my_table` (id INT); chroma-2.14.0/lexers/testdata/analysis/mysql.backtick.expected000066400000000000000000000000041461341362700244500ustar00rootroot000000000000000.5 chroma-2.14.0/lexers/testdata/aql/000077500000000000000000000000001461341362700167465ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/aql/comments.actual000066400000000000000000000001261461341362700217650ustar00rootroot00000000000000code//comment code/*comment*/ /* comment RETURN 42 "'` * multiline */code white spacechroma-2.14.0/lexers/testdata/aql/comments.expected000066400000000000000000000007121461341362700223160ustar00rootroot00000000000000[ {"type":"Name","value":"code"}, {"type":"CommentSingle","value":"//comment\n"}, {"type":"Name","value":"code"}, {"type":"CommentMultiline","value":"/*comment*/"}, {"type":"Text","value":"\n"}, {"type":"CommentMultiline","value":"/* comment RETURN 42 \"'` *\nmultiline */"}, {"type":"Name","value":"code"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"white"}, {"type":"Text","value":" \t"}, {"type":"Name","value":"space"} ] chroma-2.14.0/lexers/testdata/aql/functions.actual000066400000000000000000000002201461341362700221430ustar00rootroot00000000000000RAND() rand () Collections() COUNT_DISTINCT() COUNT() not_null() REMOVE_VALUE() group::func() GROUP_57::F9_() 0::0() 1SUM() _G::A() _aql::avg()chroma-2.14.0/lexers/testdata/aql/functions.expected000066400000000000000000000033631461341362700225060ustar00rootroot00000000000000[ {"type":"NameFunction","value":"RAND"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"rand"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"Collections"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"COUNT_DISTINCT"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"COUNT"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"not_null"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"REMOVE_VALUE"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"group::func"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"NameFunction","value":"GROUP_57::F9_"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Operator","value":"::"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"NameFunction","value":"SUM"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"_G"}, {"type":"Operator","value":"::"}, {"type":"Name","value":"A"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"_aql"}, {"type":"Operator","value":"::"}, {"type":"NameFunction","value":"avg"}, {"type":"Punctuation","value":"()"} ] chroma-2.14.0/lexers/testdata/aql/identifiers.actual000066400000000000000000000001711461341362700224450ustar00rootroot00000000000000i doc Vertex n036 $X __foo__ `FILTER` `@12 3!` ´&tab FOR äöü´ `multi\` \\\` line` ´multi\´ \\\´ line´ $6 $_Y _8chroma-2.14.0/lexers/testdata/aql/identifiers.expected000066400000000000000000000021031461341362700227720ustar00rootroot00000000000000[ {"type":"Name","value":"i"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"doc"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"Vertex"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"n036"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"$X"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"__foo__"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"`FILTER`"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"`@12 3!`"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"´\u0026tab\tFOR äöü´"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"`multi\\`\n\\\\\\`\nline`"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"´multi\\´\n\\\\\\´\nline´"}, {"type":"Text","value":"\n\n"}, {"type":"Error","value":"$"}, {"type":"LiteralNumberInteger","value":"6"}, {"type":"Text","value":"\n"}, {"type":"Error","value":"$"}, {"type":"Name","value":"_Y"}, {"type":"Text","value":"\n"}, {"type":"Error","value":"_"}, {"type":"LiteralNumberInteger","value":"8"} ] chroma-2.14.0/lexers/testdata/aql/keywords.actual000066400000000000000000000003001461341362700220010ustar00rootroot00000000000000LET AT LEAST NULL nULL true false TRUE FALSE True fAlSe WITH COUNT INTO KEEP prune SEARCH to OPTIONS {} options{} CURRENT NEW OLD LEAST AT CAT LEAST KNULL falsey COUNT OPTIONS current New oldchroma-2.14.0/lexers/testdata/aql/keywords.expected000066400000000000000000000047241461341362700223470ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"LET"}, {"type":"Text","value":"\n"}, {"type":"KeywordReserved","value":"AT LEAST"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"NULL"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"nULL"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"true"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"false"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"TRUE"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"FALSE"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"True"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"fAlSe"}, {"type":"Text","value":"\n"}, {"type":"KeywordReserved","value":"WITH"}, {"type":"Text","value":" "}, {"type":"KeywordPseudo","value":"COUNT"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"INTO"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"KEEP"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"prune"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"SEARCH"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"to"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"OPTIONS"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{}"}, {"type":"Text","value":"\n"}, {"type":"KeywordPseudo","value":"options"}, {"type":"Punctuation","value":"{}"}, {"type":"Text","value":"\n"}, {"type":"NameBuiltinPseudo","value":"CURRENT"}, {"type":"Text","value":"\n"}, {"type":"NameBuiltinPseudo","value":"NEW"}, {"type":"Text","value":"\n"}, {"type":"NameBuiltinPseudo","value":"OLD"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"LEAST"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"AT"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"CAT"}, {"type":"Text","value":" "}, {"type":"Name","value":"LEAST"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"KNULL"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"falsey"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"COUNT"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"OPTIONS"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"current"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"New"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"old"} ] chroma-2.14.0/lexers/testdata/aql/numbers.actual000066400000000000000000000001421461341362700216110ustar00rootroot000000000000000b1100 0B1 0xC0DE 0Xa7 0.0 -1.23 .5 8e9 3.33E-3 456.7e+89 0 2 400 0B 0b1e 0x 0X5G 00.7 .e6 ..5 01chroma-2.14.0/lexers/testdata/aql/numbers.expected000066400000000000000000000036221461341362700221470ustar00rootroot00000000000000[ {"type":"LiteralNumberBin","value":"0b1100"}, {"type":"Text","value":" "}, {"type":"LiteralNumberBin","value":"0B1"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberHex","value":"0xC0DE"}, {"type":"Text","value":" "}, {"type":"LiteralNumberHex","value":"0Xa7"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberFloat","value":"0.0"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-"}, {"type":"LiteralNumberFloat","value":"1.23"}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":".5"}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"8e9"}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"3.33E-3"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"45"}, {"type":"LiteralNumberFloat","value":"6.7e+89"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"400"}, {"type":"Text","value":"\n\n"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Name","value":"B"}, {"type":"Text","value":" "}, {"type":"LiteralNumberBin","value":"0b1"}, {"type":"Name","value":"e"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"LiteralNumberHex","value":"0X5"}, {"type":"Name","value":"G"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"LiteralNumberFloat","value":"0.7"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"e6"}, {"type":"Text","value":" "}, {"type":"Operator","value":".."}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Text","value":"\n"}, {"type":"LiteralNumberInteger","value":"01"} ] chroma-2.14.0/lexers/testdata/aql/queries.actual000066400000000000000000000007351461341362700216230ustar00rootroot00000000000000FOR doc IN @@coll FILTER doc.value >= @val && doc["value"] < COUNT ([.1, FALSE]) COLLECT ´v a l´ /* legal! */ = doc.value WITH COUNT INTO count // blarg RETURN MERGE(doc, { [CONCAT("new", 0.125)]: true } ) LET arr = [[1,2],3,[0]] RETURN arr[** FILTER CURRENT % 2 == 0 RETURN CURRENT||null] FOR v,e,p IN 2..4 OUTBOUND "components/S" GRAPH "g" PRUNE e != null AND p.edges[-1].text =~ @AND OPTIONS { vertexCollections: ['components'] } RETURN v.´sort´ ?: 0xBEEF chroma-2.14.0/lexers/testdata/aql/queries.expected000066400000000000000000000160321461341362700221500ustar00rootroot00000000000000[ {"type":"KeywordReserved","value":"FOR"}, {"type":"Text","value":" "}, {"type":"Name","value":"doc"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"IN"}, {"type":"Text","value":" "}, {"type":"NameVariableGlobal","value":"@@coll"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"FILTER"}, {"type":"Text","value":" "}, {"type":"Name","value":"doc"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"value"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e="}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"@val"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u0026\u0026"}, {"type":"Text","value":" "}, {"type":"Name","value":"doc"}, {"type":"Punctuation","value":"["}, {"type":"LiteralStringDouble","value":"\"value\""}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"COUNT"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"(["}, {"type":"LiteralNumberFloat","value":".1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"KeywordConstant","value":"FALSE"}, {"type":"Punctuation","value":"])"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"COLLECT"}, {"type":"Text","value":" "}, {"type":"Name","value":"´v a l´"}, {"type":"Text","value":" "}, {"type":"CommentMultiline","value":"/* legal! */"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"doc"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"value"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"WITH"}, {"type":"Text","value":" "}, {"type":"KeywordPseudo","value":"COUNT"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"INTO"}, {"type":"Text","value":" "}, {"type":"Name","value":"count"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// blarg\n"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"RETURN"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"MERGE"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"doc"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameFunction","value":"CONCAT"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"new\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"0.125"}, {"type":"Punctuation","value":")]"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordDeclaration","value":"LET"}, {"type":"Text","value":" "}, {"type":"Name","value":"arr"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"[["}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":","}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":"],"}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":",["}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":"]]"}, {"type":"Text","value":"\n"}, {"type":"KeywordReserved","value":"RETURN"}, {"type":"Text","value":" "}, {"type":"Name","value":"arr"}, {"type":"Punctuation","value":"["}, {"type":"Operator","value":"**"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"FILTER"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"CURRENT"}, {"type":"Text","value":" "}, {"type":"Operator","value":"%"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"RETURN"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"CURRENT"}, {"type":"Operator","value":"||"}, {"type":"KeywordConstant","value":"null"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordReserved","value":"FOR"}, {"type":"Text","value":" "}, {"type":"Name","value":"v"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"e"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"p"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"IN"}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"2"}, {"type":"Operator","value":".."}, {"type":"LiteralNumberInteger","value":"4"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"OUTBOUND"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"components/S\""}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"GRAPH"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"g\""}, {"type":"Text","value":"\n "}, {"type":"KeywordPseudo","value":"PRUNE"}, {"type":"Text","value":" "}, {"type":"Name","value":"e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"!="}, {"type":"Text","value":" "}, {"type":"KeywordConstant","value":"null"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"AND"}, {"type":"Text","value":" "}, {"type":"Name","value":"p"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"edges"}, {"type":"Punctuation","value":"["}, {"type":"Operator","value":"-"}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"]."}, {"type":"Name","value":"text"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=~"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"@AND"}, {"type":"Text","value":"\n "}, {"type":"KeywordPseudo","value":"OPTIONS"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"vertexCollections"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralStringSingle","value":"'components'"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"RETURN"}, {"type":"Text","value":" "}, {"type":"Name","value":"v"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"´sort´"}, {"type":"Text","value":" "}, {"type":"Operator","value":"?:"}, {"type":"Text","value":" "}, {"type":"LiteralNumberHex","value":"0xBEEF"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/aql/strings.actual000066400000000000000000000001531461341362700216310ustar00rootroot00000000000000"double" 'single' "multi line" 'multi line' "escaped\" quote" 'escaped\' quote' "backtick\\'" 'backtick\\"'chroma-2.14.0/lexers/testdata/aql/strings.expected000066400000000000000000000013031461341362700221570ustar00rootroot00000000000000[ {"type":"LiteralStringDouble","value":"\"double\""}, {"type":"Text","value":"\n"}, {"type":"LiteralStringSingle","value":"'single'"}, {"type":"Text","value":"\n"}, {"type":"LiteralStringDouble","value":"\"multi\nline\""}, {"type":"Text","value":"\n"}, {"type":"LiteralStringSingle","value":"'multi\nline'"}, {"type":"Text","value":"\n"}, {"type":"LiteralStringDouble","value":"\"escaped\\\"\nquote\""}, {"type":"Text","value":"\n"}, {"type":"LiteralStringSingle","value":"'escaped\\'\nquote'"}, {"type":"Text","value":"\n"}, {"type":"LiteralStringDouble","value":"\"backtick\\\\'\""}, {"type":"Text","value":"\n"}, {"type":"LiteralStringSingle","value":"'backtick\\\\\"'"} ] chroma-2.14.0/lexers/testdata/arduino.actual000066400000000000000000000050301461341362700210230ustar00rootroot00000000000000#include #include Servo elbow_servo; Servo wrist_servo; const int potpin = 0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin //// button cycles through controlling each color //// in the neopixel. state 0=stop, 1=red, 2=blue, 3=green, 4=all/white const int button_pin = 4; int buttonState; // the current reading from the input pin int lastButtonState = HIGH; // the previous reading from the input pin // the following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers int led_control_state = 0; const int pixel_pin = 6; const int num_leds = 2; Adafruit_NeoPixel pixel = Adafruit_NeoPixel(num_leds, pixel_pin, NEO_GRB + NEO_KHZ800); int red = 0; int green = 0; int blue = 0; void setup() { Serial.begin(9600); elbow_servo.attach(9); // attaches the servo on pin 9 to the servo object pinMode(button_pin, INPUT_PULLUP); // create a button for the neopixels pixel.begin(); } void loop() { //// Read signal from variable resistor or potentiometer // val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023) int v = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180) elbow_servo.write(v); delay(15); // waits for the servo to get there //// Toggle between states using a button //// int b = digitalRead(button_pin); // read button // "debounce" the button signal if (b != lastButtonState) lastDebounceTime = millis(); if ((millis() - lastDebounceTime) > debounceDelay) { if (b != buttonState) { buttonState = b; if (buttonState == LOW) { led_control_state++; if (led_control_state > 3) led_control_state = 0; } } } lastButtonState = b; switch(led_control_state) { case 0: break; case 1: red = 255; blue = 255; green = 0; break; case 2: red = 0; blue = 255; green = 255; break; case 3: red = 255; blue = 0; green = 255; break; } Serial.println(led_control_state); // set color ofpixels for(int i=0;i make -j build %ls | wc -l 5 [user@host]$ whoami user [user@host] # id uid=1000(user) gid=1000(user) groups=1000(user) [super user :D@super host :D] %if [ 1 -eq 1 ]; then uname; fi Linux [user@host]%echo $((1+1)) 2 chroma-2.14.0/lexers/testdata/bash-session.expected000066400000000000000000000041731461341362700223170ustar00rootroot00000000000000[ {"type":"GenericPrompt","value":"$"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Hello, world!\""}, {"type":"Text","value":"\n"}, {"type":"GenericOutput","value":"Hello, world!\n"}, {"type":"GenericPrompt","value":"%"}, {"type":"Text","value":"\t"}, {"type":"NameBuiltin","value":"pwd"}, {"type":"Text","value":"\n"}, {"type":"GenericOutput","value":"/User/foo\n"}, {"type":"GenericPrompt","value":"\u003e"}, {"type":"Text","value":" make -j build\n"}, {"type":"GenericPrompt","value":"%"}, {"type":"Text","value":"ls "}, {"type":"Punctuation","value":"|"}, {"type":"Text","value":" wc -l\n"}, {"type":"GenericOutput","value":"5\n"}, {"type":"GenericPrompt","value":"[user@host]$"}, {"type":"Text","value":" whoami\n"}, {"type":"GenericOutput","value":"user\n"}, {"type":"GenericPrompt","value":"[user@host] #"}, {"type":"Text","value":" id\n"}, {"type":"GenericOutput","value":"uid=1000(user) gid=1000(user) groups=1000(user)\n"}, {"type":"GenericPrompt","value":"[super user :D@super host :D] %"}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Operator","value":"["}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":" -eq "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"then"}, {"type":"Text","value":" uname"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fi"}, {"type":"Text","value":"\n"}, {"type":"GenericOutput","value":"Linux\n"}, {"type":"GenericPrompt","value":"[user@host]%"}, {"type":"NameBuiltin","value":"echo"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"$(("}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"+"}, {"type":"LiteralNumber","value":"1"}, {"type":"Keyword","value":"))"}, {"type":"Text","value":"\n"}, {"type":"GenericOutput","value":"2\n"} ] chroma-2.14.0/lexers/testdata/bash.actual000066400000000000000000000015631461341362700203060ustar00rootroot00000000000000# Install fish brew install fish # Add fish to your list of available shells echo "/usr/local/bin/fish/" | sudo tee -a /etc/shells # Make fish the defaul shell chsh -s /usr/local/bin/fish # Restart the terminal to load fish shell # Code snippet from https://github.com/gmarik/gist.sh/blob/master/gist.sh gist_clone () { if [ "$_PRIVATE" = "1" ]; then URL="git@gist.github.com:$1.git" else URL="git://gist.github.com/$1.git" fi log "* cloning Gist from $URL" CMD="git clone $URL gist-$1" if [ "$_DEBUG" = "1" ]; then echo $CMD exit 0 fi $CMD } # Code snippet from https://gist.github.com/thejefflarson/885812 tiger_em () { directory=$WD/$1 shift until [ -z "$1" ] do get_em $directory "ftp://ftp2.census.gov/geo/tiger/TIGER2010/"$1 shift done } # bare comment marker # chroma-2.14.0/lexers/testdata/bash.expected000066400000000000000000000131471461341362700206370ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"# Install fish"}, {"type":"Text","value":"\n\nbrew install fish\n\n"}, {"type":"CommentSingle","value":"# Add fish to your list of available shells"}, {"type":"Text","value":"\n\n"}, {"type":"NameBuiltin","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"/usr/local/bin/fish/\""}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"|"}, {"type":"Text","value":" sudo tee -a /etc/shells\n\n"}, {"type":"CommentSingle","value":"# Make fish the defaul shell"}, {"type":"Text","value":"\n\nchsh -s /usr/local/bin/fish\n\n"}, {"type":"CommentSingle","value":"# Restart the terminal to load fish shell"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Code snippet from https://github.com/gmarik/gist.sh/blob/master/gist.sh"}, {"type":"Text","value":"\ngist_clone "}, {"type":"Operator","value":"()"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Operator","value":"["}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$_PRIVATE"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"1\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"then"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"URL"}, {"type":"Operator","value":"="}, {"type":"LiteralStringDouble","value":"\"git@gist.github.com:"}, {"type":"NameVariable","value":"$1"}, {"type":"LiteralStringDouble","value":".git\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"URL"}, {"type":"Operator","value":"="}, {"type":"LiteralStringDouble","value":"\"git://gist.github.com/"}, {"type":"NameVariable","value":"$1"}, {"type":"LiteralStringDouble","value":".git\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"fi"}, {"type":"Text","value":"\n\n log "}, {"type":"LiteralStringDouble","value":"\"* cloning Gist from "}, {"type":"NameVariable","value":"$URL"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":"\n\n "}, {"type":"NameVariable","value":"CMD"}, {"type":"Operator","value":"="}, {"type":"LiteralStringDouble","value":"\"git clone "}, {"type":"NameVariable","value":"$URL"}, {"type":"LiteralStringDouble","value":" gist-"}, {"type":"NameVariable","value":"$1"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Operator","value":"["}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$_DEBUG"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"1\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"then"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"echo"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$CMD"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"exit"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"fi"}, {"type":"Text","value":"\n\n "}, {"type":"NameVariable","value":"$CMD"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# Code snippet from https://gist.github.com/thejefflarson/885812"}, {"type":"Text","value":"\ntiger_em "}, {"type":"Operator","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"directory"}, {"type":"Operator","value":"="}, {"type":"NameVariable","value":"$WD"}, {"type":"Text","value":"/"}, {"type":"NameVariable","value":"$1"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"shift"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"until"}, {"type":"Text","value":" "}, {"type":"Operator","value":"["}, {"type":"Text","value":" -z "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$1"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Text","value":" \n "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n get_em "}, {"type":"NameVariable","value":"$directory"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"ftp://ftp2.census.gov/geo/tiger/TIGER2010/\""}, {"type":"NameVariable","value":"$1"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"shift"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"done"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# bare comment marker"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"#"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/bib.actual000066400000000000000000000006521461341362700201230ustar00rootroot00000000000000% a sample bibliography file % @article{small, author = {Freely, I.P.}, title = {A small paper}, journal = {The journal of small papers}, year = 1997, volume = {-1}, note = {to appear}, } @article{big, author = {Jass, Hugh}, title = {A big paper}, journal = {The journal of big papers}, year = 7991, volume = {MCMXCVII}, } % The authors mentioned here are almost, but not quite, % entirely unrelated to Matt Groening. chroma-2.14.0/lexers/testdata/bib.expected000066400000000000000000000074071461341362700204600ustar00rootroot00000000000000[ {"type":"Comment","value":"% a sample bibliography file"}, {"type":"Text","value":"\n"}, {"type":"Comment","value":"% "}, {"type":"Text","value":"\n\n"}, {"type":"NameClass","value":"@article"}, {"type":"Punctuation","value":"{"}, {"type":"NameLabel","value":"small"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"author"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{Freely, I.P.}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"title"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{A small paper}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"journal"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{The journal of small papers}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"year"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1997"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"volume"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{-1}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"note"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{to appear}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"NameClass","value":"@article"}, {"type":"Punctuation","value":"{"}, {"type":"NameLabel","value":"big"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"author"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{Jass, Hugh}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"title"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{A big paper}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"journal"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{The journal of big papers}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"year"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"7991"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"volume"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"{MCMXCVII}"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Comment","value":"% The authors mentioned here are almost, but not quite,"}, {"type":"Text","value":"\n"}, {"type":"Comment","value":"% entirely unrelated to Matt Groening."}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/bicep/000077500000000000000000000000001461341362700172535ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/bicep/bicep-coalesce-operator.actual000066400000000000000000000001221461341362700251300ustar00rootroot00000000000000output nonNullStr string = myObject.isnull1 ?? myObject.string ?? myObject.isnull2chroma-2.14.0/lexers/testdata/bicep/bicep-coalesce-operator.expected000066400000000000000000000017111461341362700254650ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nonNullStr"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"myObject"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"isnull1"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"??"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"myObject"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"??"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"myObject"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"isnull2"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-comments.actual000066400000000000000000000011141461341362700233500ustar00rootroot00000000000000// This is your primary NIC. resource nic1 'Microsoft.Network/networkInterfaces@2020-06-01' = { } /* This Bicep file assumes the key vault already exists and is in same subscription and resource group as the deployment. */ param existingKeyVaultName string resource test 'Microsoft.AAD/domainServices@2021-03-01' = { name: 'asdfsdf' // this is a comment properties: {/*comment*/ domainConfigurationType/*comment*/:/*comment*/'as//notacomment!d/* also not a comment */fsdf'// test!/* /* multi line comment */ domainName: /* asdf*/'test' // comment } }chroma-2.14.0/lexers/testdata/bicep/bicep-comments.expected000066400000000000000000000122141461341362700237030ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"// This is your primary NIC."}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nic1"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Network/networkInterfaces@2020-06-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Operator","value":"/*"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"This"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"Bicep"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"file"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"assumes"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"the"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"key"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"vault"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"already"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"exists"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"and"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"is"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"in"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"same"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"subscription"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"and"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"group"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"as"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"the"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"deployment"}, {"type":"Punctuation","value":"."}, {"type":"TextWhitespace","value":"\n"}, {"type":"Operator","value":"*/"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"existingKeyVaultName"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"test"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.AAD/domainServices@2021-03-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'asdfsdf'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":"// this is a comment"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"CommentMultiline","value":"/*comment*/"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"domainConfigurationType"}, {"type":"CommentMultiline","value":"/*comment*/"}, {"type":"Punctuation","value":":"}, {"type":"CommentMultiline","value":"/*comment*/"}, {"type":"LiteralString","value":"'as//notacomment!d/* also not a comment */fsdf'"}, {"type":"CommentSingle","value":"// test!/*"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Operator","value":"/*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"multi"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"line"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"comment"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*/"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"domainName"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"/*"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"asdf"}, {"type":"Operator","value":"*/"}, {"type":"LiteralString","value":"'test'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":"// comment"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-directives.actual000066400000000000000000000014151461341362700236700ustar00rootroot00000000000000var vmProperties = { diagnosticsProfile: { bootDiagnostics: { enabled: 123 storageUri: true unknownProp: 'asdf' } } evictionPolicy: 'Deallocate' } resource vm 'Microsoft.Compute/virtualMachines@2020-12-01' = { name: 'vm' location: 'West US' #disable-next-line BCP036 BCP037 properties: vmProperties } #disable-next-line no-unused-params param storageAccount1 string = 'testStorageAccount' #disable-next-line no-unused-params param storageAccount2 string = 'testStorageAccount' #disable-next-line no-unused-params /* Test comment 1 */ param storageAccount3 string = 'testStorageAccount' #disable-next-line no-unused-params // Test comment 2 param storageAccount5 string = 'testStorageAccount'chroma-2.14.0/lexers/testdata/bicep/bicep-directives.expected000066400000000000000000000150751461341362700242270ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"vmProperties"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"diagnosticsProfile"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"bootDiagnostics"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"enabled"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"123"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"storageUri"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"unknownProp"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'asdf'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"evictionPolicy"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Deallocate'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"vm"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Compute/virtualMachines@2020-12-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'vm'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"location"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'West US'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentPreproc","value":"#disable-next-line"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"BCP036"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"BCP037"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"vmProperties"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentPreproc","value":"#disable-next-line"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"no"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"unused"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"params"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAccount1"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'testStorageAccount'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentPreproc","value":"#disable-next-line"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"no"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"unused"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"params"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAccount2"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'testStorageAccount'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentPreproc","value":"#disable-next-line"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"no"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"unused"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"params"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentMultiline","value":"/* Test comment 1 */"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAccount3"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'testStorageAccount'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentPreproc","value":"#disable-next-line"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"no"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"unused"}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"params"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"// Test comment 2"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAccount5"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'testStorageAccount'"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-function-any.actual000066400000000000000000000000741461341362700241410ustar00rootroot00000000000000publicIPAddress: any((pipId == '') ? null : { id: pipId })chroma-2.14.0/lexers/testdata/bicep/bicep-function-any.expected000066400000000000000000000020511461341362700244660ustar00rootroot00000000000000[ {"type":"NameVariable","value":"publicIPAddress"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"any"}, {"type":"Punctuation","value":"(("}, {"type":"NameVariable","value":"pipId"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"''"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"?"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"null"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"id"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"pipId"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"})"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-function-deployment.actual000066400000000000000000000000551461341362700255310ustar00rootroot00000000000000output deploymentOutput object = deployment()chroma-2.14.0/lexers/testdata/bicep/bicep-function-deployment.expected000066400000000000000000000006701461341362700260640ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"deploymentOutput"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"object"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"deployment"}, {"type":"Punctuation","value":"()"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-function-logical.actual000066400000000000000000000002121461341362700247560ustar00rootroot00000000000000output trueString bool = bool('true') output falseString bool = bool('false') output trueInt bool = bool(1) output falseInt bool = bool(0)chroma-2.14.0/lexers/testdata/bicep/bicep-function-logical.expected000066400000000000000000000041261461341362700253160ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"trueString"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"bool"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"bool"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"'true'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"falseString"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"bool"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"bool"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"'false'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"trueInt"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"bool"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"bool"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"falseInt"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"bool"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"bool"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":")"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-lambdas.actual000066400000000000000000000040571461341362700231370ustar00rootroot00000000000000var doggos = [ 'Evie' 'Casper' 'Indy' 'Kira' ] var numbers = range(0, 4) var sayHello = map(doggos, i => 'Hello ${i}!') var isEven = filter(numbers, i => 0 == i % 2) var evenDoggosNestedLambdas = map(filter(numbers, i => contains(filter(numbers, j => 0 == j % 2), i)), x => doggos[x]) var flattenedArrayOfArrays = flatten([[0, 1], [2, 3], [4, 5]]) var flattenedEmptyArray = flatten([]) var mapSayHi = map(['abc', 'def', 'ghi'], foo => 'Hi ${foo}!') var mapEmpty = map([], foo => 'Hi ${foo}!') var mapObject = map(range(0, length(doggos)), i => { i: i doggo: doggos[i] greeting: 'Ahoy, ${doggos[i]}!' }) var mapArray = flatten(map(range(1, 3), i => [i * 2, (i * 2) + 1])) var mapMultiLineArray = flatten(map(range(1, 3), i => [ i * 3 (i * 3) + 1 (i * 3) + 2 ])) var filterEqualityCheck = filter(['abc', 'def', 'ghi'], foo => 'def' == foo) var filterEmpty = filter([], foo => 'def' == foo) var sortNumeric = sort([8, 3, 10, -13, 5], (x, y) => x < y) var sortAlpha = sort(['ghi', 'abc', 'def'], (x, y) => x < y) var sortAlphaReverse = sort(['ghi', 'abc', 'def'], (x, y) => x > y) var sortByObjectKey = sort([ { key: 124, name: 'Second' } { key: 298, name: 'Third' } { key: 24, name: 'First' } { key: 1232, name: 'Fourth' } ], (x, y) => int(x.key) < int(y.key)) var sortEmpty = sort([], (x, y) => int(x) < int(y)) var reduceStringConcat = reduce(['abc', 'def', 'ghi'], '', (cur, next) => concat(cur, next)) var reduceFactorial = reduce(range(1, 5), 1, (cur, next) => cur * next) var reduceObjectUnion = reduce([ { foo: 123 } { bar: 456 } { baz: 789 } ], {}, (cur, next) => union(cur, next)) var reduceEmpty = reduce([], 0, (cur, next) => cur) var itemForLoop = [for item in range(0, 10): item] var filteredLoop = filter(itemForLoop, i => i > 5) output doggoGreetings array = [for item in mapObject: item.greeting] resource storageAcc 'Microsoft.Storage/storageAccounts@2021-09-01' existing = { name: 'asdfsadf' } var mappedResProps = map(items(storageAcc.properties.secondaryEndpoints), item => item.value) var parentheses = map([123], (i => '${i}'))chroma-2.14.0/lexers/testdata/bicep/bicep-lambdas.expected000066400000000000000000001131411461341362700234620ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"doggos"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'Evie'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'Casper'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'Indy'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'Kira'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"numbers"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"4"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sayHello"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"doggos"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Hello "}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"i"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"!'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"isEven"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"numbers"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"0"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"%"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"2"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"evenDoggosNestedLambdas"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"numbers"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"contains"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"numbers"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"j"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"0"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"j"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"%"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"2"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":")),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"doggos"}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":"])"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"flattenedArrayOfArrays"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"flatten"}, {"type":"Punctuation","value":"([["}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"2"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"4"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"5"}, {"type":"Punctuation","value":"]])"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"flattenedEmptyArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"flatten"}, {"type":"Punctuation","value":"([])"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapSayHi"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Hi "}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"foo"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"!'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapEmpty"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"([],"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Hi "}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"foo"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"!'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapObject"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"length"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"doggos"}, {"type":"Punctuation","value":")),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"doggo"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"doggos"}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"greeting"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Ahoy, "}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"doggos"}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"i"}, {"type":"Punctuation","value":"]"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"!'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"})"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"flatten"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"2"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"2"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":"]))"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapMultiLineArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"flatten"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"1"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"2"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"]))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"filterEqualityCheck"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"filterEmpty"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"([],"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sortNumeric"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Punctuation","value":"(["}, {"type":"NameVariable","value":"8"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"10"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"-"}, {"type":"NameVariable","value":"13"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"5"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sortAlpha"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sortAlphaReverse"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sortByObjectKey"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Punctuation","value":"(["}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"124"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Second'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"298"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Third'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"24"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'First'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"1232"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Fourth'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"int"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"int"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"key"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sortEmpty"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Punctuation","value":"([],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"int"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"x"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"int"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"y"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"reduceStringConcat"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"reduce"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"''"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"reduceFactorial"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"reduce"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"5"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"1"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"cur"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"reduceObjectUnion"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"reduce"}, {"type":"Punctuation","value":"(["}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"123"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"bar"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"456"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"baz"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"789"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{},"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"union"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"reduceEmpty"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"reduce"}, {"type":"Punctuation","value":"([],"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"next"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"cur"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"itemForLoop"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"KeywordDeclaration","value":"for"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"in"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"0"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"10"}, {"type":"Punctuation","value":"):"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"filteredLoop"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"filter"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"itemForLoop"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"5"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"doggoGreetings"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"array"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"KeywordDeclaration","value":"for"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"in"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mapObject"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"greeting"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAcc"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Storage/storageAccounts@2021-09-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"existing"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'asdfsadf'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mappedResProps"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"items"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"storageAcc"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"secondaryEndpoints"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"item"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"value"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"parentheses"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"map"}, {"type":"Punctuation","value":"(["}, {"type":"NameVariable","value":"123"}, {"type":"Punctuation","value":"],"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"i"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'"}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"i"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"'"}, {"type":"Punctuation","value":"))"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-module.actual000066400000000000000000000011771461341362700230210ustar00rootroot00000000000000@minLength(3) @maxLength(11) param storagePrefix string param storageSKU string = 'Standard_LRS' param location string = resourceGroup().location var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}' resource stg 'Microsoft.Storage/storageAccounts@2019-04-01' = { name: uniqueStorageName location: location sku: { name: storageSKU } kind: 'StorageV2' properties: { supportsHttpsTrafficOnly: true } } module webModule './webApp.bicep' = { 'name': 'webDeploy' 'params': { 'skuName': 'S1' 'location': location } } output storageEndpoint object = stg.properties.primaryEndpointschroma-2.14.0/lexers/testdata/bicep/bicep-module.expected000066400000000000000000000152221461341362700233450ustar00rootroot00000000000000[ {"type":"Punctuation","value":"@"}, {"type":"NameFunction","value":"minLength"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"@"}, {"type":"NameFunction","value":"maxLength"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"11"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storagePrefix"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageSKU"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Standard_LRS'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"resourceGroup"}, {"type":"Punctuation","value":"()."}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"uniqueStorageName"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'"}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"storagePrefix"}, {"type":"LiteralStringInterpol","value":"}${"}, {"type":"NameFunction","value":"uniqueString"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"resourceGroup"}, {"type":"Punctuation","value":"()."}, {"type":"NameVariable","value":"id"}, {"type":"Punctuation","value":")"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"'"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"stg"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Storage/storageAccounts@2019-04-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"uniqueStorageName"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"location"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"sku"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageSKU"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"kind"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'StorageV2'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"supportsHttpsTrafficOnly"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"module"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"webModule"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'./webApp.bicep'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'name'"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'webDeploy'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'params'"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'skuName'"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'S1'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'location'"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageEndpoint"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"object"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"stg"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"primaryEndpoints"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-newlinesensitivity.actual000066400000000000000000000020351461341362700255020ustar00rootroot00000000000000@allowed(['abc', 'def', 'ghi']) param foo string var singleLineFunction = concat('abc', 'def') var multiLineFunction = concat( 'abc', 'def' ) var multiLineFunctionUnusualFormatting = concat( 'abc', any(['hello']), 'def') var nestedTest = concat( concat( concat( concat( concat( 'level', 'one'), 'two'), 'three'), 'four'), 'five') var singleLineArray = ['abc', 'def'] var singleLineArrayTrailingCommas = ['abc', 'def',] var multiLineArray = [ 'abc' 'def' ] var mixedArray = ['abc', 'def' 'ghi', 'jkl' 'lmn'] var singleLineObject = { abc: 'def', ghi: 'jkl'} var singleLineObjectTrailingCommas = { abc: 'def', ghi: 'jkl',} var multiLineObject = { abc: 'def' ghi: 'jkl' } var mixedObject = { abc: 'abc', def: 'def' ghi: 'ghi', jkl: 'jkl' lmn: 'lmn' } var nestedMixed = { abc: { 'def': 'ghi', abc: 'def', foo: [ 'bar', 'blah' ] } } var brokenFormatting = [ /*foo */ 'bar' /* hello */, 'asdfdsf', 12324, /* asdf*/ '', ''' ''' 123, 233535 true ] chroma-2.14.0/lexers/testdata/bicep/bicep-newlinesensitivity.expected000066400000000000000000000343771461341362700260500ustar00rootroot00000000000000[ {"type":"Punctuation","value":"@"}, {"type":"NameFunction","value":"allowed"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":"])"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"singleLineFunction"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"multiLineFunction"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"multiLineFunctionUnusualFormatting"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"any"}, {"type":"Punctuation","value":"(["}, {"type":"LiteralString","value":"'hello'"}, {"type":"Punctuation","value":"]),"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nestedTest"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"concat"}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'level'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'one'"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'two'"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'three'"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'four'"}, {"type":"Punctuation","value":"),"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'five'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"singleLineArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"singleLineArrayTrailingCommas"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":",]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"multiLineArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'abc'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mixedArray"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'jkl'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralString","value":"'lmn'"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"singleLineObject"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"ghi"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'jkl'"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"singleLineObjectTrailingCommas"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"ghi"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'jkl'"}, {"type":"Punctuation","value":",}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"multiLineObject"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"ghi"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'jkl'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"mixedObject"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'abc'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"def"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameVariable","value":"ghi"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"jkl"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'jkl'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameVariable","value":"lmn"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'lmn'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nestedMixed"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'ghi'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"abc"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'def'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"'bar'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'blah'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"brokenFormatting"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":" "}, {"type":"CommentMultiline","value":"/*foo */"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'bar'"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"/*"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"NameVariable","value":"hello"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Operator","value":"*/"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'asdfdsf'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"12324"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"CommentMultiline","value":"/* asdf*/"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"''"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'''\n\n\n'''"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameVariable","value":"123"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"233535"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-output.actual000066400000000000000000000000771461341362700230720ustar00rootroot00000000000000output storageEndpoint object = stg.properties.primaryEndpointschroma-2.14.0/lexers/testdata/bicep/bicep-output.expected000066400000000000000000000010731461341362700234170ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"output"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageEndpoint"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"object"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"stg"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":"."}, {"type":"NameVariable","value":"primaryEndpoints"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-parameter-decoration.actual000066400000000000000000000002241461341362700256310ustar00rootroot00000000000000@description('The name of the instance.') param name string @sys.description('The description of the instance to display.') param description stringchroma-2.14.0/lexers/testdata/bicep/bicep-parameter-decoration.expected000066400000000000000000000021451461341362700261650ustar00rootroot00000000000000[ {"type":"Punctuation","value":"@"}, {"type":"NameFunction","value":"description"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"'The name of the instance.'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"name"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"@"}, {"type":"NameVariable","value":"sys"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"description"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"'The description of the instance to display.'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"description"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-resource-conditional.actual000066400000000000000000000003701461341362700256560ustar00rootroot00000000000000resource sa 'Microsoft.Storage/storageAccounts@2019-06-01' = if (newOrExisting == 'new') { name: uniqueStorageName location: location sku: { name: storageSKU } kind: 'StorageV2' properties: { supportsHttpsTrafficOnly: true } }chroma-2.14.0/lexers/testdata/bicep/bicep-resource-conditional.expected000066400000000000000000000050351461341362700262110ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sa"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Storage/storageAccounts@2019-06-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"if"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"newOrExisting"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"=="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'new'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"uniqueStorageName"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"location"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"sku"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageSKU"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"kind"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'StorageV2'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"supportsHttpsTrafficOnly"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-resource-multiple.actual000066400000000000000000000004121461341362700252030ustar00rootroot00000000000000@batchSize(3) resource sa 'Microsoft.Storage/storageAccounts@2019-06-01' = [for storageName in storageAccounts: { name: storageName location: location sku: { name: storageSKU } kind: 'StorageV2' properties: { supportsHttpsTrafficOnly: true } }]chroma-2.14.0/lexers/testdata/bicep/bicep-resource-multiple.expected000066400000000000000000000054341461341362700255440ustar00rootroot00000000000000[ {"type":"Punctuation","value":"@"}, {"type":"NameFunction","value":"batchSize"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"3"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"resource"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"sa"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'Microsoft.Storage/storageAccounts@2019-06-01'"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"KeywordDeclaration","value":"for"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageName"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"in"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageAccounts"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageName"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"location"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"location"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"sku"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storageSKU"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"kind"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'StorageV2'"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"properties"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"supportsHttpsTrafficOnly"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}]"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-string-singleline-multiline.actual000066400000000000000000000002011461341362700271540ustar00rootroot00000000000000param exampleString string = 'test value' var comments = ''' comments // are included /* because everything is read as-is */ '''chroma-2.14.0/lexers/testdata/bicep/bicep-string-singleline-multiline.expected000066400000000000000000000014531461341362700275160ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"param"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"exampleString"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'test value'"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"comments"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'''\ncomments // are included\n/* because everything is read as-is */\n'''"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-targetScope.actual000066400000000000000000000001641461341362700240070ustar00rootroot00000000000000targetScope = 'resourceGroup' targetScope = 'subscription' targetScope = 'managementGroup' targetScope = 'tenant'chroma-2.14.0/lexers/testdata/bicep/bicep-targetScope.expected000066400000000000000000000020251461341362700243350ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"targetScope"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'resourceGroup'"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"targetScope"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'subscription'"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"targetScope"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'managementGroup'"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"targetScope"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'tenant'"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-types.actual000066400000000000000000000001311461341362700226650ustar00rootroot00000000000000type fizz = string type buzz = fizz[] type pop = { krispies: 'snap'|'crackle'|'pop' }chroma-2.14.0/lexers/testdata/bicep/bicep-types.expected000066400000000000000000000026741461341362700232330ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"type"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"fizz"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"string"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"type"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"buzz"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"fizz"}, {"type":"Punctuation","value":"[]"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"KeywordDeclaration","value":"type"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"pop"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"krispies"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'snap'"}, {"type":"Punctuation","value":"|"}, {"type":"LiteralString","value":"'crackle'"}, {"type":"Punctuation","value":"|"}, {"type":"LiteralString","value":"'pop'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/bicep/bicep-variable-string-interpolation.actual000066400000000000000000000001471461341362700275060ustar00rootroot00000000000000var storagePrefix = 'dev' var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'chroma-2.14.0/lexers/testdata/bicep/bicep-variable-string-interpolation.expected000066400000000000000000000021721461341362700300360ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"storagePrefix"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'dev'"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"uniqueStorageName"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"'"}, {"type":"LiteralStringInterpol","value":"${"}, {"type":"NameVariable","value":"storagePrefix"}, {"type":"LiteralStringInterpol","value":"}${"}, {"type":"NameFunction","value":"uniqueString"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"resourceGroup"}, {"type":"Punctuation","value":"()."}, {"type":"NameVariable","value":"id"}, {"type":"Punctuation","value":")"}, {"type":"LiteralStringInterpol","value":"}"}, {"type":"LiteralString","value":"'"} ] chroma-2.14.0/lexers/testdata/bqn.actual000066400000000000000000000015521461341362700201470ustar00rootroot00000000000000#! /usr/bin/env bqn # From BQN documentation / quick start: # https://mlochbaum.github.io/BQN/doc/quick.html # Case conversion utilities case ← { diff ← -´ "Aa" Lower ⇐ -⟜diff Upper ⇐ Lower⁼ } hw ← <˘ 2‿∘ ⥊ "helloworld" hw case.Upper⌾(⊑¨)↩ •Out hw ↩ ∾ ⥊⍉ [hw, ", "‿"!"] # Hello, World! # Split at spaces and repeated characters Split ← { !1==𝕩 ⋄ (!2=•Type)¨𝕩 Proc ← { · 𝕊 ' ': spl⇐1 ; # Space: break and delete it prev Fn cur: ⟨spl,str⟩⇐ spl←0 ⋄ str←⟨cur⟩ # Include and don't break... { prev=cur ? spl+↩1 ; @ } # except at equal characters } GV‿GS ← {𝕏¨}¨ ⟨ {⟨s⇐str⟩:s;""} {𝕩.spl} ⟩ r ← Proc{»𝔽¨⊢} 𝕩 (∾¨ GV ⊔˜ ·+`GS) r } •Show Split hw # ⟨ "Hel" "lo," "World!" ⟩ chroma-2.14.0/lexers/testdata/bqn.expected000066400000000000000000000243201461341362700204750ustar00rootroot00000000000000[ {"type":"CommentPreproc","value":"#! /usr/bin/env bqn"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"# From BQN documentation / quick start:"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":"# https://mlochbaum.github.io/BQN/doc/quick.html"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"# Case conversion utilities"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Name","value":"case"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"diff"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"-"}, {"type":"Operator","value":"´"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Aa\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameFunction","value":"Lower"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"⇐"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"-"}, {"type":"OperatorWord","value":"⟜"}, {"type":"Name","value":"diff"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameFunction","value":"Upper"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"⇐"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"Lower"}, {"type":"Operator","value":"⁼"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Name","value":"hw"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"\u003c"}, {"type":"Operator","value":"˘"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumber","value":"2"}, {"type":"KeywordPseudo","value":"‿"}, {"type":"OperatorWord","value":"∘"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"⥊"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"helloworld\""}, {"type":"TextWhitespace","value":"\n"}, {"type":"Name","value":"hw"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"case"}, {"type":"Text","value":"."}, {"type":"NameFunction","value":"Upper"}, {"type":"OperatorWord","value":"⌾"}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"⊑"}, {"type":"Operator","value":"¨"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"↩"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"•Out"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"hw"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"↩"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"∾"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"⥊⍉"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"["}, {"type":"Name","value":"hw"}, {"type":"KeywordPseudo","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\", \""}, {"type":"KeywordPseudo","value":"‿"}, {"type":"LiteralString","value":"\"!\""}, {"type":"KeywordPseudo","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"# Hello, World!"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"# Split at spaces and repeated characters"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"Split"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameFunction","value":"!"}, {"type":"LiteralNumber","value":"1"}, {"type":"NameFunction","value":"=="}, {"type":"Name","value":"𝕩"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"⋄"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"!"}, {"type":"LiteralNumber","value":"2"}, {"type":"NameFunction","value":"=•Type"}, {"type":"Punctuation","value":")"}, {"type":"Operator","value":"¨"}, {"type":"Name","value":"𝕩"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameFunction","value":"Proc"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"{"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameConstant","value":"·"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"𝕊"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringChar","value":"' '"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"spl"}, {"type":"Text","value":"⇐"}, {"type":"LiteralNumber","value":"1"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"# Space: break and delete it"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"prev"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"Fn"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cur"}, {"type":"Punctuation","value":":"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"⟨"}, {"type":"Name","value":"spl"}, {"type":"KeywordPseudo","value":","}, {"type":"Name","value":"str"}, {"type":"KeywordPseudo","value":"⟩"}, {"type":"Text","value":"⇐"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"spl"}, {"type":"Text","value":"←"}, {"type":"LiteralNumber","value":"0"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"⋄"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"str"}, {"type":"Text","value":"←"}, {"type":"KeywordPseudo","value":"⟨"}, {"type":"Name","value":"cur"}, {"type":"KeywordPseudo","value":"⟩"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"# Include and don't break..."}, {"type":"TextWhitespace","value":"\n "}, {"type":"KeywordPseudo","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"prev"}, {"type":"NameFunction","value":"="}, {"type":"Name","value":"cur"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"?"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"spl"}, {"type":"NameFunction","value":"+"}, {"type":"Text","value":"↩"}, {"type":"LiteralNumber","value":"1"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringChar","value":"@"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"# except at equal characters"}, {"type":"TextWhitespace","value":"\n "}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameFunction","value":"GV"}, {"type":"KeywordPseudo","value":"‿"}, {"type":"NameFunction","value":"GS"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"{"}, {"type":"NameFunction","value":"𝕏"}, {"type":"Operator","value":"¨"}, {"type":"KeywordPseudo","value":"}"}, {"type":"Operator","value":"¨"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"⟨"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"{⟨"}, {"type":"Name","value":"s"}, {"type":"Text","value":"⇐"}, {"type":"Name","value":"str"}, {"type":"KeywordPseudo","value":"⟩"}, {"type":"Punctuation","value":":"}, {"type":"Name","value":"s"}, {"type":"Punctuation","value":";"}, {"type":"LiteralString","value":"\"\""}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"KeywordPseudo","value":"{"}, {"type":"Name","value":"𝕩"}, {"type":"Text","value":"."}, {"type":"Name","value":"spl"}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordPseudo","value":"⟩"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"r"}, {"type":"TextWhitespace","value":" "}, {"type":"Text","value":"←"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"Proc"}, {"type":"KeywordPseudo","value":"{"}, {"type":"NameFunction","value":"»𝔽"}, {"type":"Operator","value":"¨"}, {"type":"NameFunction","value":"⊢"}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"𝕩"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"∾"}, {"type":"Operator","value":"¨"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"GV"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"⊔"}, {"type":"Operator","value":"˜"}, {"type":"TextWhitespace","value":" "}, {"type":"NameConstant","value":"·"}, {"type":"NameFunction","value":"+"}, {"type":"Operator","value":"`"}, {"type":"NameFunction","value":"GS"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"r"}, {"type":"TextWhitespace","value":"\n"}, {"type":"KeywordPseudo","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameFunction","value":"•Show"}, {"type":"TextWhitespace","value":" "}, {"type":"NameFunction","value":"Split"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"hw"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"# ⟨ \"Hel\" \"lo,\" \"World!\" ⟩"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/caddyfile.actual000066400000000000000000000044341461341362700213150ustar00rootroot00000000000000{ debug admin off on_demand_tls { ask https://example.com } log default { output file /var/log/caddy/access.log format json } auto_https disable_redirects renew_interval 20m # this is a comment servers 192.168.1.2:8080 { name public trusted_proxies static private_ranges log_credentials } } # top level comment (blocking) { @blocked { path *.txt *.md *.mdown /site/* } redir @blocked / } http://example.com { respond "http" } example.com, fake.org, {$ENV_SITE} { root * /srv respond /get-env {$ENV_VAR} respond /get-env {$ENV_VAR:default} tls internal tls /path/to/cert.pem /path/to/key.pem route { # Add trailing slash for directory requests @canonicalPath { file { try_files {path}/index.php } not path */ } redir @canonicalPath {path}/ 308 # If the requested file does not exist, try index files @indexFiles { file { try_files {path} {path}/index.php index.php split_path .php } } rewrite @indexFiles {http.matchers.file.relative} # Proxy PHP files to the FastCGI responder @phpFiles { path *.php } reverse_proxy @phpFiles unix//var/run/php7.4-fpm.sock { transport fastcgi { split .php } } } @encode_exts { path / *.html *.js *.css *.svg } header { X-Content-Type-Options nosniff X-XSS-Protection "1; mode=block" X-Robots-Tag none Content-Security-Policy "frame-ancestors 'self'" X-Frame-Options DENY Referrer-Policy same-origin } @singleLine not path /matcher respond @singleLine "Awesome." import blocking import blocking foo import glob/* file_server @named host example.com handle @named { handle /foo* { handle /foo* { respond "{path} foo" } } respond "foo" } handle_path /foo* { respond "foo" } reverse_proxy /api/* unix//var/run/api.sock { @good status 200 handle_response @good { rewrite * /foo{uri} file_server } } respond < Test

Hello, world!

HTML 200 @file `file()` @first `file({'try_files': [{path}, {path} + '/', 'index.html']})` @smallest `file({'try_policy': 'smallest_size', 'try_files': ['a.txt', 'b.txt']})` @without-both { not { path /api/* method POST } } path_regexp [] } chroma-2.14.0/lexers/testdata/caddyfile.expected000066400000000000000000000443061461341362700216470ustar00rootroot00000000000000[ {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"debug"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"admin"}, {"type":"Text","value":" "}, {"type":"NameConstant","value":"off"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"on_demand_tls"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"ask"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"https://example.com"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"log"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"default"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"output"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"file"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/var/log/caddy/access.log"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"format"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"json"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"auto_https"}, {"type":"Text","value":" "}, {"type":"NameConstant","value":"disable_redirects"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"renew_interval"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"20m"}, {"type":"CommentSingle","value":"\n\n\t# this is a comment\n"}, {"type":"Text","value":"\t"}, {"type":"Keyword","value":"servers"}, {"type":"Text","value":" "}, {"type":"Name","value":"192.168.1.2"}, {"type":"Punctuation","value":":"}, {"type":"LiteralNumberInteger","value":"8080"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"name"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"public"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"trusted_proxies"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"static"}, {"type":"Text","value":" "}, {"type":"NameConstant","value":"private_ranges"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"log_credentials"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"CommentSingle","value":"\n\n# top level comment\n"}, {"type":"Text","value":"\n"}, {"type":"NameVariableAnonymous","value":"(blocking)"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t"}, {"type":"NameDecorator","value":"@blocked"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.txt"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.md"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.mdown"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/site/*"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"redir"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@blocked"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"GenericHeading","value":"http://example.com"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"http\""}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"GenericHeading","value":"example.com"}, {"type":"Text","value":", "}, {"type":"GenericHeading","value":"fake.org"}, {"type":"Text","value":", "}, {"type":"LiteralStringEscape","value":"{$ENV_SITE}"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"root"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"*"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/srv"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/get-env"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{$ENV_VAR}"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/get-env"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{$ENV_VAR:default}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"tls"}, {"type":"Text","value":" "}, {"type":"NameConstant","value":"internal"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"tls"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/path/to/cert.pem"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/path/to/key.pem"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"route"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"CommentSingle","value":"\n\t\t# Add trailing slash for directory requests\n"}, {"type":"Text","value":"\t\t"}, {"type":"NameDecorator","value":"@canonicalPath"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"file"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t\t"}, {"type":"Keyword","value":"try_files"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralString","value":"/index.php"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*/"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"redir"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@canonicalPath"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralString","value":"/"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"308"}, {"type":"CommentSingle","value":"\n\n\t\t# If the requested file does not exist, try index files\n"}, {"type":"Text","value":"\t\t"}, {"type":"NameDecorator","value":"@indexFiles"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"file"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t\t"}, {"type":"Keyword","value":"try_files"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralString","value":"/index.php"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"index.php"}, {"type":"Text","value":"\n\t\t\t\t"}, {"type":"Keyword","value":"split_path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":".php"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"rewrite"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@indexFiles"}, {"type":"Text","value":" "}, {"type":"LiteralStringEscape","value":"{http.matchers.file.relative}"}, {"type":"CommentSingle","value":"\n\n\t\t# Proxy PHP files to the FastCGI responder\n"}, {"type":"Text","value":"\t\t"}, {"type":"NameDecorator","value":"@phpFiles"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.php"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"reverse_proxy"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@phpFiles"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"unix//var/run/php7.4-fpm.sock"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"transport"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"fastcgi"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t\t"}, {"type":"Keyword","value":"split"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":".php"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"NameDecorator","value":"@encode_exts"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.html"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.js"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.css"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"*.svg"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"header"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"X-Content-Type-Options"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"nosniff"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"X-XSS-Protection"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"1; mode=block\""}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"X-Robots-Tag"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"none"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"Content-Security-Policy"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"frame-ancestors 'self'\""}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"X-Frame-Options"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"DENY"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"Referrer-Policy"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"same-origin"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"NameDecorator","value":"@singleLine"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/matcher"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@singleLine"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Awesome.\""}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"import"}, {"type":"Text","value":" blocking\n\t"}, {"type":"Keyword","value":"import"}, {"type":"Text","value":" blocking "}, {"type":"LiteralString","value":"foo"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"import"}, {"type":"Text","value":" glob/*\n\n\t"}, {"type":"Keyword","value":"file_server"}, {"type":"Text","value":"\n\n\t"}, {"type":"NameDecorator","value":"@named"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"host"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"example.com"}, {"type":"Text","value":"\n\t"}, {"type":"Keyword","value":"handle"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@named"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"handle"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/foo*"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"handle"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/foo*"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralStringDouble","value":" foo\""}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"foo\""}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"handle_path"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/foo*"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"foo\""}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"reverse_proxy"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"/api/*"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"unix//var/run/api.sock"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"NameDecorator","value":"@good"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"status"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"200"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"handle_response"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"@good"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"rewrite"}, {"type":"Text","value":" "}, {"type":"NameDecorator","value":"*"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/foo"}, {"type":"LiteralStringEscape","value":"{uri}"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"file_server"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"respond"}, {"type":"Text","value":" "}, {"type":"LiteralStringHeredoc","value":"\u003c\u003cHTML"}, {"type":"LiteralString","value":"\n\t\t\u003c!DOCTYPE html\u003e\n\t\t\u003chtml\u003e\n\t\t\t\u003chead\u003e\n\t\t\t\t\u003ctitle\u003eTest\u003c/title\u003e\n\t\t\t\u003c/head\u003e\n\t\t\t\u003cbody\u003e\n\t\t\t\t\u003ch1\u003eHello, world!\u003c/h1\u003e\n\t\t\t\u003c/body\u003e\n\t\t\u003c/html\u003e\n\t\t"}, {"type":"LiteralStringHeredoc","value":"HTML"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"200"}, {"type":"Text","value":"\n\n\t"}, {"type":"NameDecorator","value":"@file"}, {"type":"Text","value":" "}, {"type":"LiteralStringBacktick","value":"`file()`"}, {"type":"Text","value":"\n\t"}, {"type":"NameDecorator","value":"@first"}, {"type":"Text","value":" "}, {"type":"LiteralStringBacktick","value":"`file("}, {"type":"LiteralString","value":"{'try_files"}, {"type":"LiteralStringBacktick","value":"': ["}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralStringBacktick","value":", "}, {"type":"LiteralStringEscape","value":"{path}"}, {"type":"LiteralStringBacktick","value":" + '/', 'index.html']})`"}, {"type":"Text","value":"\n\t"}, {"type":"NameDecorator","value":"@smallest"}, {"type":"Text","value":" "}, {"type":"LiteralStringBacktick","value":"`file("}, {"type":"LiteralString","value":"{'try_policy"}, {"type":"LiteralStringBacktick","value":"': 'smallest_size', 'try_files': ['a.txt', 'b.txt']})`"}, {"type":"Text","value":"\n\n\t"}, {"type":"NameDecorator","value":"@without-both"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t"}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"path"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"/api/*"}, {"type":"Text","value":"\n\t\t\t"}, {"type":"Keyword","value":"method"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"POST"}, {"type":"Text","value":"\n\t\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\t"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n\t"}, {"type":"Keyword","value":"path_regexp"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralString","value":"\u003cname\u003e"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\u003cregexp\u003e"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/cfengine3.actual000066400000000000000000000006511461341362700212270ustar00rootroot00000000000000@if minimum_version(3.20) body members foo { include => { "alice", "bob" }; exclude => { "malcom" }; } @endif @if minimum_version(3.20) promise agent blah { path => "/some/path"; } @endif bundle agent __main__ { groups: "foo" policy => "present", @if minimum_version(3.20) members => foo; @else members => '{ "include": ["alice", "bob"], "exclude": ["malcom"] }'; @endif } chroma-2.14.0/lexers/testdata/cfengine3.expected000066400000000000000000000073501461341362700215620ustar00rootroot00000000000000[ {"type":"CommentPreproc","value":"@if minimum_version(3.20)\n"}, {"type":"Keyword","value":"body"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"members"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"foo"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"include"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"alice\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"bob\""}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"exclude"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"malcom\""}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@endif\n"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@if minimum_version(3.20)\n"}, {"type":"Keyword","value":"promise"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"agent"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"blah"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"path"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"/some/path\""}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@endif\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"bundle"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"agent"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"__main__"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"groups"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"foo\""}, {"type":"Text","value":"\n "}, {"type":"KeywordReserved","value":"policy"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"present\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@if minimum_version(3.20)\n"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"members"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"foo"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@else\n"}, {"type":"Text","value":" "}, {"type":"KeywordReserved","value":"members"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"'{ \"include\": [\"alice\", \"bob\"],\n \"exclude\": [\"malcom\"] }'"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"@endif\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/chapel.actual000066400000000000000000000002651461341362700206230ustar00rootroot00000000000000config const numMessages = 100; forall msg in 1..numMessages do writeln("Hello, world! (from iteration ", msg, " of ", numMessages, ")"); // Oh, and a comment for good measure. chroma-2.14.0/lexers/testdata/chapel.expected000066400000000000000000000033631461341362700211550ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"config"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"const"}, {"type":"TextWhitespace","value":" "}, {"type":"NameOther","value":"numMessages"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"100"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"forall"}, {"type":"TextWhitespace","value":" "}, {"type":"NameOther","value":"msg"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordDeclaration","value":"in"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Operator","value":".."}, {"type":"NameOther","value":"numMessages"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"do"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameOther","value":"writeln"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"\"Hello, world! (from iteration \""}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameOther","value":"msg"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\" of \""}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"NameOther","value":"numMessages"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\")\""}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"// Oh, and a comment for good measure.\n"} ] chroma-2.14.0/lexers/testdata/cpp.actual000066400000000000000000000004721461341362700201510ustar00rootroot00000000000000#include "a" // comment #include // comment [[nodiscard]] void foo() noexcept; void foo(); constexpr class {} a; enum class E { A, B }; enum class [[nodiscard]] E { A, B }; enum class { a, b, c, } e; enum E { A, B }; class A { void foo(); void bar(); }; int main() { return 0 + 1'3 + 1.4; } chroma-2.14.0/lexers/testdata/cpp.expected000066400000000000000000000116501461341362700205010ustar00rootroot00000000000000[ {"type":"CommentPreproc","value":"#include"}, {"type":"Text","value":" "}, {"type":"CommentPreprocFile","value":"\"a\""}, {"type":"CommentPreproc","value":" "}, {"type":"CommentSingle","value":"// comment\n"}, {"type":"CommentPreproc","value":"#include"}, {"type":"Text","value":" "}, {"type":"CommentPreprocFile","value":"\u003cb\u003e"}, {"type":"CommentPreproc","value":" "}, {"type":"CommentSingle","value":"// comment\n"}, {"type":"Text","value":"\n"}, {"type":"NameAttribute","value":"[[nodiscard]]"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"void"}, {"type":"Text","value":" "}, {"type":"Name","value":"foo"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"noexcept"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"KeywordType","value":"void"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"foo"}, {"type":"Punctuation","value":"();"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"constexpr"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{}"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"E"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"A"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"B"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"[[nodiscard]]"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"E"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"A"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"B"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"a"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n "}, {"type":"Name","value":"c"}, {"type":"Punctuation","value":","}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":" "}, {"type":"Name","value":"e"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"E"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"A"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"B"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"A"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordType","value":"void"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"foo"}, {"type":"Punctuation","value":"();"}, {"type":"Text","value":"\n "}, {"type":"KeywordType","value":"void"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"bar"}, {"type":"Punctuation","value":"();"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"};"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"main"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1'3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"1.4"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/cql.actual000066400000000000000000000077751461341362700201630ustar00rootroot00000000000000-- basic statements // c-style comment /* multiline comment */ CREATE TABLE cycling.cyclist_name ( id UUID PRIMARY KEY, lastname text, firstname text ); INSERT INTO cycling.cyclist_name (id, lastname, firstname) VALUES (5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 'VOS','Marianne'); SELECT * FROM cycling.cyclist_name; SELECT lastname, firstname FROM /* a comment */ cycling.cyclist_name WHERE id = 6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47 /* multiline comment */ -- comment; ; CREATE TABLE cycling.cyclist_category ( category text, points int, id UUID, lastname text, PRIMARY KEY (category, points)) WITH CLUSTERING ORDER BY (points DESC); CREATE TABLE cycling.race_winners (race_name text, race_position int, cyclist_name FROZEN, PRIMARY KEY (race_name, race_position)); CREATE TABLE cycling.cyclist_races ( id UUID PRIMARY KEY, lastname text, firstname text, races list> ); INSERT INTO cycling.cyclist_races (id, lastname, firstname, races) VALUES (5b6962dd-3f90-4c93-8f61-eabfa4a803e2, 'VOS', 'Marianne', [ {race_title:'Rabobank 7-Dorpenomloop Aalburg',race_date:'2015-05-09',race_time:'02:58:33'},{race_title:'Ronde van Gelderland',race_date:'2015-04-19',race_time:'03:22:23'} ]); INSERT INTO cycling.cyclist_races (id, lastname, firstname, races) VALUES (e7cd5752-bc0d-4157-a80f-7523add8dbcd, 'VAN DER BREGGEN', 'Anna', [ {race_title:'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Prologue - Garnich > Garnich',race_date:'2015-05-01',race_time:'08:13:00'},{race_title:'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Stage 2 - Garnich > Garnich',race_date:'2015-05-02',race_time:'02:41:52'},{race_title:'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Stage 3 - Mamer > Mamer',race_date:'2015-05-03',race_time:'02:31:24'} ]); SELECT * FROM cycling.cyclist_races; SELECT lastname, races FROM cycling.cyclist_races WHERE id = e7cd5752-bc0d-4157-a80f-7523add8dbcd; INSERT INTO cycling.calendar (race_id, race_start_date, race_end_date, race_name) VALUES (201, '2015-02-18', '2015-02-22', $$Women's Tour of New Zealand$$); CREATE USER IF NOT EXISTS sandy WITH PASSWORD 'Ride2Win@' NOSUPERUSER; CREATE USER chuck WITH PASSWORD 'Always1st$' SUPERUSER; ALTER USER sandy SUPERUSER; LIST USERS; DROP USER IF EXISTS chuck; CREATE ROLE IF NOT EXISTS team_manager WITH PASSWORD = 'RockIt4Us!'; CREATE ROLE sys_admin WITH PASSWORD = 'IcanDoIt4ll' AND LOGIN = true AND SUPERUSER = true; ALTER ROLE sys_admin WITH PASSWORD = 'All4one1forAll' AND SUPERUSER = false; GRANT sys_admin TO team_manager; GRANT team_manager TO sandy; LIST ROLES; LIST ROLES OF sandy; REVOKE sys_admin FROM team_manager; REVOKE team_manager FROM sandy; DROP ROLE IF EXISTS sys_admin; GRANT MODIFY ON KEYSPACE cycling TO team_manager; GRANT DESCRIBE ON ALL ROLES TO sys_admin; GRANT AUTHORIZE ALL KEYSPACES TO sys_admin; REVOKE SELECT ON ALL KEYSPACES FROM team_manager; REVOKE EXECUTE ON FUNCTION cycling.fLog(double) FROM team_manager; LIST ALL PERMISSIONS OF sandy; LIST ALL PERMISSIONS ON cycling.cyclist_name OF chuck; CREATE MATERIALIZED VIEW cyclist_by_age AS SELECT age, birthday, name, country FROM cyclist_mv WHERE age is NOT NULL AND cid IS NOT NULL PRIMARY KEY (age, cid); CREATE MATERIALIZED VIEW cyclist_by_country AS SELECT age, birthday, name, country FROM cyclist_mv WHERE country is NOT NULL AND cid IS NOT NULL PRIMARY KEY (country, cid); CREATE MATERIALIZED VIEW cyclist_by_birthday AS SELECT age, birthday, name, country FROM cyclist_mv WHERE birthday is NOT NULL AND cid IS NOT NULL PRIMARY KEY (birthday, cid); DROP MATERIALIZED VIEW cyclist_by_age; INSERT INTO cycling.calendar (race_id, race_name, race_start_date, race_end_date) VALUES (200, 'placeholder', '2015-05-27', '2015-05-27') USING TIMESTAMP 123456789; CREATE FUNCTION IF NOT EXISTS cycling.left (column TEXT,num int) RETURNS NULL ON NULL INPUT RETURNS text LANGUAGE javascript AS $$ column.substring(0,num) $$; CREATE OR REPLACE FUNCTION cycling.fLog (input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'return Double.valueOf(Math.log(input.doubleValue()));'; chroma-2.14.0/lexers/testdata/cql.expected000066400000000000000000001256671461341362700205140ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"-- basic statements\n// c-style comment\n"}, {"type":"CommentMultiline","value":"/* \n\n multiline comment\n\n*/"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TABLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"id"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"UUID"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"INSERT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"id"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VALUES"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberHex","value":"5b6962dd-3f90-4c93-8f61-eabfa4a803e2"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'VOS'"}, {"type":"Punctuation","value":","}, {"type":"LiteralStringSingle","value":"'Marianne'"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_name"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentMultiline","value":"/* a comment */"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_name"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WHERE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"id"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberHex","value":"6ab09bec-e68e-48d9-a5f8-97e6fb4c9b47"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentMultiline","value":"/* multiline comment \n\n*/"}, {"type":"TextWhitespace","value":" "}, {"type":"CommentSingle","value":"-- comment;\n"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TABLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_category"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"category"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"points"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"int"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"id"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"UUID"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"category"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"points"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"CLUSTERING"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ORDER"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"BY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"points"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"DESC"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TABLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"race_winners"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"race_name"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_position"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"int"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_name"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"FROZEN"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"fullname"}, {"type":"Operator","value":"\u003e"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"race_name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_position"}, {"type":"Punctuation","value":"));"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TABLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_races"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"id"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"UUID"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"races"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"list"}, {"type":"Operator","value":"\u003c"}, {"type":"NameBuiltin","value":"FROZEN"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"race"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"INSERT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_races"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"id"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"races"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VALUES"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberHex","value":"5b6962dd-3f90-4c93-8f61-eabfa4a803e2"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'VOS'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'Marianne'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"race_title"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'Rabobank 7-Dorpenomloop Aalburg'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_date"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'2015-05-09'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_time"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'02:58:33'"}, {"type":"Punctuation","value":"},{"}, {"type":"Name","value":"race_title"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'Ronde van Gelderland'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_date"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'2015-04-19'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_time"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'03:22:23'"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":"]);"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"INSERT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_races"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"id"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"races"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VALUES"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberHex","value":"e7cd5752-bc0d-4157-a80f-7523add8dbcd"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'VAN DER BREGGEN'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'Anna'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"race_title"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Prologue - Garnich \u003e Garnich'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_date"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'2015-05-01'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_time"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'08:13:00'"}, {"type":"Punctuation","value":"},{"}, {"type":"Name","value":"race_title"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Stage 2 - Garnich \u003e Garnich'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_date"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'2015-05-02'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_time"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'02:41:52'"}, {"type":"Punctuation","value":"},{"}, {"type":"Name","value":"race_title"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'Festival Luxembourgeois du cyclisme feminin Elsy Jacobs - Stage 3 - Mamer \u003e Mamer'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_date"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'2015-05-03'"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"race_time"}, {"type":"Punctuation","value":":"}, {"type":"LiteralStringSingle","value":"'02:31:24'"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"]);"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"*"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_races"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"lastname"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"races"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_races"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WHERE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"id"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberHex","value":"e7cd5752-bc0d-4157-a80f-7523add8dbcd"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"INSERT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"calendar"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"race_id"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_start_date"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_end_date"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_name"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VALUES"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberFloat","value":"201"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'2015-02-18'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'2015-02-22'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringHeredoc","value":"$$Women's Tour of New Zealand$$"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USER"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"EXISTS"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PASSWORD"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'Ride2Win@'"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOSUPERUSER"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USER"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"chuck"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PASSWORD"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'Always1st$'"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SUPERUSER"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"ALTER"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USER"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SUPERUSER"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameBuiltin","value":"LIST"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USERS"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"DROP"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USER"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"EXISTS"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"chuck"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"EXISTS"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PASSWORD"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'RockIt4Us!'"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PASSWORD"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'IcanDoIt4ll'"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"LOGIN"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SUPERUSER"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"ALTER"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WITH"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PASSWORD"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'All4one1forAll'"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SUPERUSER"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"false"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"GRANT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"GRANT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameBuiltin","value":"LIST"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLES"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameBuiltin","value":"LIST"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLES"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"OF"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"REVOKE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"REVOKE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"DROP"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"EXISTS"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"GRANT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"MODIFY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEYSPACE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"GRANT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"DESCRIBE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ALL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ROLES"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"GRANT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AUTHORIZE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ALL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEYSPACES"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"TO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sys_admin"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"REVOKE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ALL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEYSPACES"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"REVOKE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"EXECUTE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FUNCTION"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"fLog"}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"double"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"team_manager"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameBuiltin","value":"LIST"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ALL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PERMISSIONS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"OF"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"sandy"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameBuiltin","value":"LIST"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ALL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PERMISSIONS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"cyclist_name"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"OF"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"chuck"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"MATERIALIZED"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VIEW"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_by_age"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"age"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"birthday"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"country"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_mv"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WHERE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"age"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"is"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"age"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"MATERIALIZED"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VIEW"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_by_country"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"age"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"birthday"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"country"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_mv"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WHERE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"country"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"is"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"country"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"MATERIALIZED"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VIEW"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_by_birthday"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"SELECT"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"age"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"birthday"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"country"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FROM"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_mv"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"WHERE"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"birthday"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"is"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AND"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IS"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"PRIMARY"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"KEY"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"birthday"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cid"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"DROP"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"MATERIALIZED"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VIEW"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cyclist_by_age"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"INSERT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INTO"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"calendar"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"race_id"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_start_date"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"race_end_date"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"VALUES"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberFloat","value":"200"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'placeholder'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'2015-05-27'"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSingle","value":"'2015-05-27'"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"USING"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"TIMESTAMP"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberFloat","value":"123456789"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FUNCTION"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"IF"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"NOT"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"EXISTS"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"left"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"column"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"TEXT"}, {"type":"Punctuation","value":","}, {"type":"Name","value":"num"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"int"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"RETURNS"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INPUT"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"RETURNS"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"text"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"LANGUAGE"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"javascript"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AS"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringHeredoc","value":"$$"}, {"type":"Text","value":" \n "}, {"type":"NameOther","value":"column"}, {"type":"Punctuation","value":"."}, {"type":"NameOther","value":"substring"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":","}, {"type":"NameOther","value":"num"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" \n"}, {"type":"LiteralStringHeredoc","value":"$$"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Keyword","value":"CREATE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"OR"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"REPLACE"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"FUNCTION"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"cycling"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"fLog"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"input"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"double"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"CALLED"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"ON"}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"NULL"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"INPUT"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"RETURNS"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"double"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"LANGUAGE"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"java"}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"AS"}, {"type":"TextWhitespace","value":"\n"}, {"type":"LiteralStringHeredoc","value":"'"}, {"type":"Keyword","value":"return"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"Double"}, {"type":"Punctuation","value":"."}, {"type":"NameAttribute","value":"valueOf"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"Math"}, {"type":"Punctuation","value":"."}, {"type":"NameAttribute","value":"log"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"input"}, {"type":"Punctuation","value":"."}, {"type":"NameAttribute","value":"doubleValue"}, {"type":"Punctuation","value":"()));"}, {"type":"LiteralStringHeredoc","value":"'"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/csharp/000077500000000000000000000000001461341362700174515ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/csharp/csharp_8_nullable.actual000066400000000000000000000002221461341362700242250ustar00rootroot00000000000000using System; #nullable enable public struct Student { public string FirstName; public string? MiddleName; public string LastName; }chroma-2.14.0/lexers/testdata/csharp/csharp_8_nullable.expected000066400000000000000000000027051461341362700245650ustar00rootroot00000000000000[ {"type":"Keyword","value":"using"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"CommentPreproc","value":"#nullable"}, {"type":"Text","value":" "}, {"type":"Name","value":"enable"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"struct"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Student"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"FirstName"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string?"}, {"type":"Text","value":" "}, {"type":"Name","value":"MiddleName"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"LastName"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_9_records_1.actual000066400000000000000000000000701461341362700243120ustar00rootroot00000000000000public record Person(string FirstName, string LastName);chroma-2.14.0/lexers/testdata/csharp/csharp_9_records_1.expected000066400000000000000000000010661461341362700246500ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"record"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Person"}, {"type":"Punctuation","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"FirstName"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"LastName"}, {"type":"Punctuation","value":");"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_9_records_2.actual000066400000000000000000000002061461341362700243140ustar00rootroot00000000000000public record Person { public string FirstName { get; init; } = default!; public string LastName { get; init; } = default!; };chroma-2.14.0/lexers/testdata/csharp/csharp_9_records_2.expected000066400000000000000000000034731461341362700246550ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"record"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Person"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"FirstName"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"get"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"init"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"default"}, {"type":"Punctuation","value":"!;"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"LastName"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"get"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"init"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"default"}, {"type":"Punctuation","value":"!;"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"};"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_comment_multi.actual000066400000000000000000000000641461341362700250600ustar00rootroot00000000000000/* Hello World */ /*** * Hello Developer ***/chroma-2.14.0/lexers/testdata/csharp/csharp_comment_multi.expected000066400000000000000000000002571461341362700254140ustar00rootroot00000000000000[ {"type":"CommentMultiline","value":"/*\n Hello World\n*/"}, {"type":"Text","value":"\n\n"}, {"type":"CommentMultiline","value":"/***\n* Hello Developer\n***/"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_comment_single.actual000066400000000000000000000000701461341362700252040ustar00rootroot00000000000000// TODO: Maybe later // TODO: Implement more features //chroma-2.14.0/lexers/testdata/csharp/csharp_comment_single.expected000066400000000000000000000003561461341362700255430ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"// TODO: Maybe later"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// TODO: Implement more features"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"//"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_comment_summary.actual000066400000000000000000000001421461341362700254200ustar00rootroot00000000000000/// /// Class Point models a point in a two-dimensional plane. /// /// chroma-2.14.0/lexers/testdata/csharp/csharp_comment_summary.expected000066400000000000000000000006121461341362700257520ustar00rootroot00000000000000[ {"type":"CommentSpecial","value":"/// \u003csummary\u003e"}, {"type":"Text","value":"\n"}, {"type":"CommentSpecial","value":"/// Class \u003cc\u003ePoint\u003c/c\u003e models a point in a two-dimensional plane."}, {"type":"Text","value":"\n"}, {"type":"CommentSpecial","value":"///"}, {"type":"Text","value":"\n"}, {"type":"CommentSpecial","value":"/// \u003c/summary\u003e"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_interface.actual000066400000000000000000000001251461341362700241420ustar00rootroot00000000000000public interface IOrder { DateTime Purchased { get; } decimal Cost { get; } }chroma-2.14.0/lexers/testdata/csharp/csharp_interface.expected000066400000000000000000000021311461341362700244710ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"public"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"interface"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"IOrder"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"DateTime"}, {"type":"Text","value":" "}, {"type":"Name","value":"Purchased"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"get"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n "}, {"type":"KeywordType","value":"decimal"}, {"type":"Text","value":" "}, {"type":"Name","value":"Cost"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"get"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/csharp/csharp_var.actual000066400000000000000000000000201461341362700227640ustar00rootroot00000000000000var _abc = 123; chroma-2.14.0/lexers/testdata/csharp/csharp_var.expected000066400000000000000000000005001461341362700233170ustar00rootroot00000000000000[ {"type":"KeywordType","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"_abc"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"123"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/css.actual000066400000000000000000000000431461341362700201510ustar00rootroot00000000000000:root { --variable-name: #fff; } chroma-2.14.0/lexers/testdata/css.expected000066400000000000000000000007571461341362700205150ustar00rootroot00000000000000[ {"type":"Punctuation","value":":"}, {"type":"NameDecorator","value":"root"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"--variable-name"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralNumberHex","value":"#fff"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/cue.actual000066400000000000000000000020531461341362700201400ustar00rootroot00000000000000"this is a test" 5 false // This is a comment a: { foo: string // foo is a string [=~"^i"]: int // all other fields starting with i are integers [=~"^b"]: bool // all other fields starting with b are booleans [>"c"]: string // all other fields lexically after c are strings ...string // all other fields must be a string. Note: default constraints are not yet implemented. } x: #""" \#(test) """ b: a & { i3: 3 bar: true other: "a string" } A: close({ field1: string field2: string }) // Verify that various field types work _hidden: int regular: int $id: int #definition: int @protobuf(proto3) myStruct1: { // Struct attribute: @jsonschema(id="https://example.org/mystruct1.json") // Field attributes field: string @go(Field) attr: int @xml(,attr) @go(Attr) } myStruct2: { field: string @go(Field) attr: int @xml(a1,attr) @go(Attr) } Combined: myStruct1 & myStruct2 // field: string @go(Field) // attr: int @xml(,attr) @xml(a1,attr) @go(Attr) chroma-2.14.0/lexers/testdata/cue.expected000066400000000000000000000205561461341362700205000ustar00rootroot00000000000000[ {"type":"LiteralString","value":"\"this is a test\""}, {"type":"Text","value":"\n"}, {"type":"LiteralNumber","value":"5"}, {"type":"Text","value":"\n"}, {"type":"KeywordConstant","value":"false"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// This is a comment"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"foo"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// foo is a string"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[="}, {"type":"Punctuation","value":"~"}, {"type":"LiteralString","value":"\"^i\""}, {"type":"Operator","value":"]:"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// all other fields starting with i are integers"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[="}, {"type":"Punctuation","value":"~"}, {"type":"LiteralString","value":"\"^b\""}, {"type":"Operator","value":"]:"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"bool"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// all other fields starting with b are booleans"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[\u003e"}, {"type":"LiteralString","value":"\"c\""}, {"type":"Operator","value":"]:"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// all other fields lexically after c are strings"}, {"type":"Text","value":"\n\n "}, {"type":"Operator","value":"..."}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// all other fields must be a string. Note: default constraints are not yet implemented."}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"x"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"#\"\"\"\n\n "}, {"type":"LiteralStringInterpol","value":"\\#("}, {"type":"Name","value":"test"}, {"type":"LiteralStringInterpol","value":")"}, {"type":"LiteralString","value":"\n\n\"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"b"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"i3"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"3"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"bar"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordConstant","value":"true"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"other"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"a string\""}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"A"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"close"}, {"type":"Punctuation","value":"({"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"field1"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"field2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"})"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Verify that various field types work"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"_hidden"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"regular"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"$id"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"#definition"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"@protobuf"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"proto3"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"myStruct1"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// Struct attribute:"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"@jsonschema"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"id"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"\"https://example.org/mystruct1.json\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// Field attributes"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"field"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"@go"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"Field"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"attr"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"@xml"}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":","}, {"type":"Name","value":"attr"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"@go"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"Attr"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"myStruct2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"field"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"@go"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"Field"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"attr"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"@xml"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"a1"}, {"type":"Operator","value":","}, {"type":"Name","value":"attr"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"@go"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"Attr"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"Combined"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"myStruct1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"Text","value":" "}, {"type":"Name","value":"myStruct2"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// field: string @go(Field)"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// attr: int @xml(,attr) @xml(a1,attr) @go(Attr)"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/d.actual000066400000000000000000000004321461341362700176060ustar00rootroot00000000000000module foo; import std.stdio; class C {} /* comment1 */ /+ comment2 +/ @(1) @nogc int main() { writeln(__FILE__); auto s = r"hi"d; auto w = `hi`w; auto q = q{ auto w = `hi`w; }; enum f = 1.2fi; enum d = 0x1.FFFFFFFFFFFFFp1023; return 0; } chroma-2.14.0/lexers/testdata/d.expected000066400000000000000000000072251461341362700201450ustar00rootroot00000000000000[ {"type":"KeywordNamespace","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"foo"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordNamespace","value":"import"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"std.stdio"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordDeclaration","value":"class"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"C"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentMultiline","value":"/* comment1 */"}, {"type":"Text","value":"\n"}, {"type":"CommentMultiline","value":"/+ comment2 +/"}, {"type":"Text","value":"\n"}, {"type":"NameDecorator","value":"@"}, {"type":"Operator","value":"("}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n"}, {"type":"NameDecorator","value":"@nogc"}, {"type":"Text","value":"\n"}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"main"}, {"type":"Operator","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"writeln"}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"__FILE__"}, {"type":"Operator","value":");"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"auto"}, {"type":"Text","value":" "}, {"type":"Name","value":"s"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"r\"hi\"d"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"auto"}, {"type":"Text","value":" "}, {"type":"Name","value":"w"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"`hi`w"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"auto"}, {"type":"Text","value":" "}, {"type":"Name","value":"q"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"q{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"auto"}, {"type":"Text","value":" "}, {"type":"Name","value":"w"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"`hi`w"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"};"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"enum"}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"1.2fi"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"enum"}, {"type":"Text","value":" "}, {"type":"Name","value":"d"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberFloat","value":"0x1.FFFFFFFFFFFFFp1023"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Operator","value":";"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/dart.actual000066400000000000000000000027571461341362700203310ustar00rootroot00000000000000import 'dart:async'; import 'dart:html'; import 'dart:math' show Random; // We changed 5 lines of code to make this sample nicer on // the web (so that the execution waits for animation frame, // the number gets updated in the DOM, and the program ends // after 500 iterations). main() async { print('Compute π using the Monte Carlo method.'); var output = querySelector("#output"); await for (var estimate in computePi().take(500)) { print('π ≅ $estimate'); output.text = estimate.toStringAsFixed(5); await window.animationFrame; } } /// Generates a stream of increasingly accurate estimates of π. Stream computePi({int batch: 100000}) async* { var total = 0; var count = 0; while (true) { var points = generateRandom().take(batch); var inside = points.where((p) => p.isInsideUnitCircle); total += batch; count += inside.length; var ratio = count / total; // Area of a circle is A = π⋅r², therefore π = A/r². // So, when given random points with x ∈ <0,1>, // y ∈ <0,1>, the ratio of those inside a unit circle // should approach π / 4. Therefore, the value of π // should be: yield ratio * 4; } } Iterable generateRandom([int seed]) sync* { final random = new Random(seed); while (true) { yield new Point(x: random.nextDouble(), y: random.nextDouble()); } } class Point { final double x, y; const Point({required this.x, required this.y}); bool get isInsideUnitCircle => x * x + y * y <= 1; }chroma-2.14.0/lexers/testdata/dart.expected000066400000000000000000000321451461341362700206530ustar00rootroot00000000000000[ {"type":"Keyword","value":"import"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'dart:async'"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"import"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'dart:html'"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"import"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'dart:math'"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"show"}, {"type":"Text","value":" "}, {"type":"Name","value":"Random"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// We changed 5 lines of code to make this sample nicer on\n// the web (so that the execution waits for animation frame,\n// the number gets updated in the DOM, and the program ends\n// after 500 iterations).\n"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"main"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"async"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringSingle","value":"'Compute π using the Monte Carlo method.'"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"output"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"querySelector"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"#output\""}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"await"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"estimate"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" "}, {"type":"Name","value":"computePi"}, {"type":"Punctuation","value":"()."}, {"type":"Name","value":"take"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumber","value":"500"}, {"type":"Punctuation","value":"))"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringSingle","value":"'π ≅ "}, {"type":"LiteralStringInterpol","value":"$"}, {"type":"Name","value":"estimate"}, {"type":"LiteralStringSingle","value":"'"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"output"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"text"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"estimate"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"toStringAsFixed"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumber","value":"5"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"await"}, {"type":"Text","value":" "}, {"type":"Name","value":"window"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"animationFrame"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"/// Generates a stream of increasingly accurate estimates of π.\n"}, {"type":"Name","value":"Stream"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"double"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"computePi"}, {"type":"Punctuation","value":"({"}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"NameLabel","value":"batch:"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"100000"}, {"type":"Punctuation","value":"})"}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"async"}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"total"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"count"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"while"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"("}, {"type":"KeywordConstant","value":"true"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"points"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"generateRandom"}, {"type":"Punctuation","value":"()."}, {"type":"Name","value":"take"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"batch"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"inside"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"points"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"where"}, {"type":"Punctuation","value":"(("}, {"type":"Name","value":"p"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"p"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"isInsideUnitCircle"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"total"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+="}, {"type":"Text","value":" "}, {"type":"Name","value":"batch"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"count"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+="}, {"type":"Text","value":" "}, {"type":"Name","value":"inside"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"length"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"ratio"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"count"}, {"type":"Text","value":" "}, {"type":"Operator","value":"/"}, {"type":"Text","value":" "}, {"type":"Name","value":"total"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// Area of a circle is A = π⋅r², therefore π = A/r².\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// So, when given random points with x ∈ \u003c0,1\u003e,\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// y ∈ \u003c0,1\u003e, the ratio of those inside a unit circle\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// should approach π / 4. Therefore, the value of π\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// should be:\n"}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"yield"}, {"type":"Text","value":" "}, {"type":"Name","value":"ratio"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"4"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Name","value":"Iterable"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Point"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"generateRandom"}, {"type":"Punctuation","value":"(["}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"seed"}, {"type":"Punctuation","value":"])"}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"sync"}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"final"}, {"type":"Text","value":" "}, {"type":"Name","value":"random"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"Name","value":"Random"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"seed"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"while"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"("}, {"type":"KeywordConstant","value":"true"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"yield"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"Name","value":"Point"}, {"type":"Punctuation","value":"("}, {"type":"NameLabel","value":"x:"}, {"type":"Text","value":" "}, {"type":"Name","value":"random"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"nextDouble"}, {"type":"Punctuation","value":"(),"}, {"type":"Text","value":" "}, {"type":"NameLabel","value":"y:"}, {"type":"Text","value":" "}, {"type":"Name","value":"random"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"nextDouble"}, {"type":"Punctuation","value":"());"}, {"type":"Text","value":"\n "}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"KeywordDeclaration","value":"class"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Point"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"final"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"double"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"y"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"Point"}, {"type":"Punctuation","value":"({"}, {"type":"KeywordDeclaration","value":"required"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"this"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"x"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"required"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"this"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"y"}, {"type":"Punctuation","value":"});"}, {"type":"Text","value":"\n "}, {"type":"KeywordType","value":"bool"}, {"type":"Text","value":" "}, {"type":"KeywordDeclaration","value":"get"}, {"type":"Text","value":" "}, {"type":"Name","value":"isInsideUnitCircle"}, {"type":"Text","value":" "}, {"type":"Operator","value":"=\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"y"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"y"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c="}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":"\n"}, {"type":"Punctuation","value":"}"} ] chroma-2.14.0/lexers/testdata/desktop_entry.actual000066400000000000000000000002651461341362700222610ustar00rootroot00000000000000# Created with jdDesktopEntryEdit 1.3 [Desktop Entry] Type=Application Name=Chroma Comment= A general purpose syntax highlighter in pure Go TryExec=chroma Exec=chroma Terminal=true chroma-2.14.0/lexers/testdata/desktop_entry.expected000066400000000000000000000024201461341362700226040ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"# Created with jdDesktopEntryEdit 1.3"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Keyword","value":"[Desktop Entry]"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"Type"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"Application"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"Name"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"Chroma"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"Comment"}, {"type":"Operator","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"A general purpose syntax highlighter in pure Go"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"TryExec"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"chroma"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"Exec"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"chroma"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"Terminal"}, {"type":"Operator","value":"="}, {"type":"LiteralString","value":"true"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/diff/000077500000000000000000000000001461341362700171015ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/diff/default.actual000066400000000000000000000000461461341362700217200ustar00rootroot000000000000001,2d0 < A < A 4c2 < C --- > F 5a4 > E chroma-2.14.0/lexers/testdata/diff/default.expected000066400000000000000000000006251461341362700222530ustar00rootroot00000000000000[ {"type":"GenericSubheading","value":"1,2d0\n"}, {"type":"GenericDeleted","value":"\u003c A\n\u003c A\n"}, {"type":"GenericSubheading","value":"4c2\n"}, {"type":"GenericDeleted","value":"\u003c C\n"}, {"type":"GenericStrong","value":"---\n"}, {"type":"GenericInserted","value":"\u003e F\n"}, {"type":"GenericSubheading","value":"5a4\n"}, {"type":"GenericInserted","value":"\u003e E\n"} ] chroma-2.14.0/lexers/testdata/diff/unified.actual000066400000000000000000000002051461341362700217140ustar00rootroot00000000000000--- old.txt 2023-01-17 21:02:15.449417575 -0700 +++ new.txt 2023-01-17 21:02:12.489441682 -0700 @@ -1,5 +1,4 @@ -A -A B -C +F D +E chroma-2.14.0/lexers/testdata/diff/unified.expected000066400000000000000000000007561461341362700222570ustar00rootroot00000000000000[ {"type":"GenericDeleted","value":"--- old.txt\t2023-01-17 21:02:15.449417575 -0700\n"}, {"type":"GenericInserted","value":"+++ new.txt\t2023-01-17 21:02:12.489441682 -0700\n"}, {"type":"GenericSubheading","value":"@@ -1,5 +1,4 @@\n"}, {"type":"GenericDeleted","value":"-A\n-A\n"}, {"type":"Text","value":" B\n"}, {"type":"GenericDeleted","value":"-C\n"}, {"type":"GenericInserted","value":"+F\n"}, {"type":"Text","value":" D\n"}, {"type":"GenericInserted","value":"+E\n"} ] chroma-2.14.0/lexers/testdata/dns.actual000066400000000000000000000005551461341362700201550ustar00rootroot00000000000000; /etc/bind/zones/example.org $TTL 3h; @ IN SOA ns.example.org. example.org. ( 1 ; serial 3h; refresh timeout 1h; retry timeout 1w; expire timeout 1h; negative caching TTL ) @ IN NS ns.example.org. ; name server @ IN MX 10 example.org. ; mail exchange server ns IN A 1.2.3.4 @ IN A 1.2.3.4 ns IN AAAA ef::1 @ IN AAAA ef::1 www IN CNAME example.org. chroma-2.14.0/lexers/testdata/dns.expected000066400000000000000000000077631461341362700205150ustar00rootroot00000000000000[ {"type":"Comment","value":"; /etc/bind/zones/example.org"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameAttribute","value":"$TTL"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringChar","value":"3h"}, {"type":"Comment","value":";"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameClass","value":"@"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"SOA"}, {"type":"TextWhitespace","value":"\t"}, {"type":"NameProperty","value":"ns.example.org. example.org. "}, {"type":"Punctuation","value":"("}, {"type":"TextWhitespace","value":"\n\t"}, {"type":"LiteralStringChar","value":"1"}, {"type":"TextWhitespace","value":" "}, {"type":"Comment","value":"; serial"}, {"type":"TextWhitespace","value":"\n\t"}, {"type":"LiteralStringChar","value":"3h"}, {"type":"Comment","value":"; refresh timeout"}, {"type":"TextWhitespace","value":"\n\t"}, {"type":"LiteralStringChar","value":"1h"}, {"type":"Comment","value":"; retry timeout"}, {"type":"TextWhitespace","value":"\n\t"}, {"type":"LiteralStringChar","value":"1w"}, {"type":"Comment","value":"; expire timeout"}, {"type":"TextWhitespace","value":"\n\t"}, {"type":"LiteralStringChar","value":"1h"}, {"type":"Comment","value":"; negative caching TTL"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameClass","value":"@"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"NS"}, {"type":"TextWhitespace","value":"\t\t"}, {"type":"NameProperty","value":"ns.example.org. "}, {"type":"TextWhitespace","value":" "}, {"type":"Comment","value":"; name server"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameClass","value":"@"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"MX"}, {"type":"TextWhitespace","value":"\t"}, {"type":"LiteralStringChar","value":"10"}, {"type":"TextWhitespace","value":"\t"}, {"type":"NameProperty","value":"example.org. "}, {"type":"TextWhitespace","value":" "}, {"type":"Comment","value":"; mail exchange server"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"NameClass","value":"ns"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"A"}, {"type":"TextWhitespace","value":"\t\t"}, {"type":"LiteralNumberInteger","value":"1.2.3.4"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameClass","value":"@"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"A"}, {"type":"TextWhitespace","value":"\t\t"}, {"type":"LiteralNumberInteger","value":"1.2.3.4"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"NameClass","value":"ns"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"AAAA"}, {"type":"TextWhitespace","value":"\t"}, {"type":"LiteralNumberIntegerLong","value":"ef::1"}, {"type":"TextWhitespace","value":"\n"}, {"type":"NameClass","value":"@"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"AAAA"}, {"type":"TextWhitespace","value":"\t"}, {"type":"LiteralNumberIntegerLong","value":"ef::1"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"NameClass","value":"www"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"IN"}, {"type":"TextWhitespace","value":"\t"}, {"type":"Keyword","value":"CNAME"}, {"type":"TextWhitespace","value":"\t"}, {"type":"NameProperty","value":"example.org."}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/dylan.actual000066400000000000000000000006211461341362700204720ustar00rootroot00000000000000Module: mod define constant $pi = 3.1415927d0; define macro moo { moo(?:name, ?e:expression) } => { let ?name = ?e; } end; // abc define method foo-bar (n :: , #rest a, #key k, #all-keys) => (m :: , b :: ) let x = n + 2.0 + #b10 + #o2 + #x02; format-out("dog // cat\n"); local method pi () $pi end; pi() end method foo-bar; /* cow */ foo-bar(2, k: k, a-b: c); chroma-2.14.0/lexers/testdata/dylan.expected000066400000000000000000000154111461341362700210250ustar00rootroot00000000000000[ {"type":"NameAttribute","value":"Module:"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"mod"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Name","value":"define"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"constant"}, {"type":"TextWhitespace","value":" "}, {"type":"NameConstant","value":"$pi"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberFloat","value":"3.1415927d0"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Name","value":"define"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"macro"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"moo"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"moo"}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":"?:"}, {"type":"NameVariable","value":"name"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"?"}, {"type":"NameVariable","value":"e"}, {"type":"Operator","value":":"}, {"type":"NameBuiltin","value":"expression"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"let"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"?name"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"?"}, {"type":"NameVariable","value":"e"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Name","value":"end"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":"// abc\n"}, {"type":"Name","value":"define"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"method"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo-bar"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"n"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"::"}, {"type":"TextWhitespace","value":" "}, {"type":"NameClass","value":"\u003cinteger\u003e"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"#rest"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"a"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"#key"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"k"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Keyword","value":"#all-keys"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"=\u003e"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"m"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"::"}, {"type":"TextWhitespace","value":" "}, {"type":"NameClass","value":"\u003cfloat\u003e"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"b"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"::"}, {"type":"TextWhitespace","value":" "}, {"type":"NameClass","value":"\u003cboolean\u003e"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameBuiltin","value":"let"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"="}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"n"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberFloat","value":"2.0"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberBin","value":"#b10"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberOct","value":"#o2"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"+"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberHex","value":"#x02"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"format-out"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"\"dog // cat"}, {"type":"LiteralStringEscape","value":"\\n"}, {"type":"LiteralString","value":"\""}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"local"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"method"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"pi"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"()"}, {"type":"TextWhitespace","value":" "}, {"type":"NameConstant","value":"$pi"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"end"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Name","value":"pi"}, {"type":"Punctuation","value":"()"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Name","value":"end"}, {"type":"TextWhitespace","value":" "}, {"type":"NameBuiltin","value":"method"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"foo-bar"}, {"type":"Punctuation","value":";"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentMultiline","value":"/*\n cow\n */"}, {"type":"TextWhitespace","value":"\n"}, {"type":"Name","value":"foo-bar"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"k:"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"k"}, {"type":"Punctuation","value":","}, {"type":"TextWhitespace","value":" "}, {"type":"KeywordConstant","value":"a-b:"}, {"type":"TextWhitespace","value":" "}, {"type":"Name","value":"c"}, {"type":"Punctuation","value":");"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/elixir.actual000066400000000000000000000003411461341362700206560ustar00rootroot00000000000000defmodule Test do defmodule Formatter do defstruct [:name] end def hello(name \\ "chroma") do case name do "chroma" -> IO.puts("Hello, CHROMA!!") other -> raise "no others please" end end end chroma-2.14.0/lexers/testdata/elixir.expected000066400000000000000000000045611461341362700212160ustar00rootroot00000000000000[ {"type":"KeywordDeclaration","value":"defmodule"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Test"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"defmodule"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Formatter"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"defstruct"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralStringSymbol","value":":name"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"KeywordDeclaration","value":"def"}, {"type":"Text","value":" "}, {"type":"Name","value":"hello"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"name"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"\\\\"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"chroma\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"case"}, {"type":"Text","value":" "}, {"type":"Name","value":"name"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n "}, {"type":"LiteralStringDouble","value":"\"chroma\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"IO"}, {"type":"Operator","value":"."}, {"type":"Name","value":"puts"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"Hello, CHROMA!!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"other"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"raise"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"no others please\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/erlang.actual000066400000000000000000000004071461341362700206350ustar00rootroot00000000000000-module(repl). -export([run/0]). run() -> read_eval_process(). read_eval_process() -> Line = io:get_line("> "), Out = process_line(Line), io:format("< ~s~n~n", [Out]), read_eval_process(). process_line(Line) -> string:uppercase(Line). chroma-2.14.0/lexers/testdata/erlang.expected000066400000000000000000000057061461341362700211740ustar00rootroot00000000000000[ {"type":"Punctuation","value":"-"}, {"type":"NameEntity","value":"module"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"repl"}, {"type":"Punctuation","value":")."}, {"type":"Text","value":"\n\n"}, {"type":"Punctuation","value":"-"}, {"type":"NameEntity","value":"export"}, {"type":"Punctuation","value":"(["}, {"type":"Name","value":"run"}, {"type":"Operator","value":"/"}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":"])."}, {"type":"Text","value":"\n\n"}, {"type":"NameFunction","value":"run"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"read_eval_process"}, {"type":"Punctuation","value":"()."}, {"type":"Text","value":"\n\n"}, {"type":"NameFunction","value":"read_eval_process"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"Line"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"io"}, {"type":"Punctuation","value":":"}, {"type":"NameFunction","value":"get_line"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"\"\u003e \""}, {"type":"Punctuation","value":"),"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"Out"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"process_line"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"Line"}, {"type":"Punctuation","value":"),"}, {"type":"Text","value":"\n "}, {"type":"NameNamespace","value":"io"}, {"type":"Punctuation","value":":"}, {"type":"NameFunction","value":"format"}, {"type":"Punctuation","value":"("}, {"type":"LiteralString","value":"\"\u003c "}, {"type":"LiteralStringInterpol","value":"~s~n~n"}, {"type":"LiteralString","value":"\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"Out"}, {"type":"Punctuation","value":"]),"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"read_eval_process"}, {"type":"Punctuation","value":"()."}, {"type":"Text","value":"\n\n"}, {"type":"NameFunction","value":"process_line"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"Line"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":"\n "}, {"type":"NameNamespace","value":"string"}, {"type":"Punctuation","value":":"}, {"type":"NameFunction","value":"uppercase"}, {"type":"Punctuation","value":"("}, {"type":"NameVariable","value":"Line"}, {"type":"Punctuation","value":")."}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/fennel.actual000066400000000000000000000066771461341362700206530ustar00rootroot00000000000000;; An example of some possible linters using Fennel's --plugin option. ;; The first two linters here can only function on static module ;; use. For instance, this code can be checked because they use static ;; field access on a local directly bound to a require call: ;; (local m (require :mymodule)) ;; (print m.field) ; fails if mymodule lacks a :field field ;; (print (m.function 1 2 3)) ; fails unless mymodule.function takes 3 args ;; However, these cannot: ;; (local m (do (require :mymodule)) ; m is not directly bound ;; (print (. m field)) ; not a static field reference ;; (let [f m.function] ;; (print (f 1 2 3)) ; intermediate local, not a static field call on m ;; Still, pretty neat, huh? ;; This file is provided as an example and is not part of Fennel's public API. (fn save-require-meta [from to scope] "When destructuring, save module name if local is bound to a `require' call. Doesn't do any linting on its own; just saves the data for other linters." (when (and (sym? to) (not (multi-sym? to)) (list? from) (sym? (. from 1)) (= :require (tostring (. from 1))) (= :string (type (. from 2)))) (let [meta (. scope.symmeta (tostring to))] (set meta.required (tostring (. from 2)))))) (fn check-module-fields [symbol scope] "When referring to a field in a local that's a module, make sure it exists." (let [[module-local field] (or (multi-sym? symbol) []) module-name (-?> scope.symmeta (. (tostring module-local)) (. :required)) module (and module-name (require module-name))] (assert-compile (or (= module nil) (not= (. module field) nil)) (string.format "Missing field %s in module %s" (or field :?) (or module-name :?)) symbol))) (fn arity-check? [module] (-?> module getmetatable (. :arity-check?))) (fn arity-check-call [[f & args] scope] "Perform static arity checks on static function calls in a module." (let [arity (# args) last-arg (. args arity) [f-local field] (or (multi-sym? f) []) module-name (-?> scope.symmeta (. (tostring f-local)) (. :required)) module (and module-name (require module-name))] (when (and (arity-check? module) _G.debug _G.debug.getinfo (not (varg? last-arg)) (not (list? last-arg))) (assert-compile (= (type (. module field)) :function) (string.format "Missing function %s in module %s" (or field :?) module-name) f) (match (_G.debug.getinfo (. module field)) {: nparams :what "Lua" :isvararg true} (assert-compile (<= nparams (# args)) (: "Called %s.%s with %s arguments, expected %s+" :format f-local field arity nparams) f) {: nparams :what "Lua" :isvararg false} (assert-compile (= nparams (# args)) (: "Called %s.%s with %s arguments, expected %s" :format f-local field arity nparams) f))))) (fn check-unused [ast scope] (each [symname (pairs scope.symmeta)] (assert-compile (or (. scope.symmeta symname :used) (symname:find "^_")) (string.format "unused local %s" (or symname :?)) ast))) {:destructure save-require-meta :symbol-to-expression check-module-fields :call arity-check-call ;; Note that this will only check unused args inside functions and let blocks, ;; not top-level locals of a chunk. :fn check-unused :do check-unused} chroma-2.14.0/lexers/testdata/fennel.expected000066400000000000000000000615341461341362700211740ustar00rootroot00000000000000[ {"type":"CommentSingle","value":";; An example of some possible linters using Fennel's --plugin option."}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; The first two linters here can only function on static module"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; use. For instance, this code can be checked because they use static"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; field access on a local directly bound to a require call:"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; (local m (require :mymodule))"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; (print m.field) ; fails if mymodule lacks a :field field"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; (print (m.function 1 2 3)) ; fails unless mymodule.function takes 3 args"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; However, these cannot:"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; (local m (do (require :mymodule)) ; m is not directly bound"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; (print (. m field)) ; not a static field reference"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; (let [f m.function]"}, {"type":"TextWhitespace","value":"\n"}, {"type":"CommentSingle","value":";; (print (f 1 2 3)) ; intermediate local, not a static field call on m"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; Still, pretty neat, huh?"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"CommentSingle","value":";; This file is provided as an example and is not part of Fennel's public API."}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"fn "}, {"type":"NameVariable","value":"save-require-meta"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"from"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"to"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"scope"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"\"When destructuring, save module name if local is bound to a `require' call.\nDoesn't do any linting on its own; just saves the data for other linters.\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"when "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"and "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"sym?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"to"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"not "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"multi-sym?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"to"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"list?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"from"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"sym?"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"from"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"= "}, {"type":"LiteralStringSymbol","value":":require"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"tostring "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"from"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":")))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"= "}, {"type":"LiteralStringSymbol","value":":string"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"type "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"from"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":"))))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"let "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"meta"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"scope.symmeta"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"tostring "}, {"type":"NameVariable","value":"to"}, {"type":"Punctuation","value":"))]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"set "}, {"type":"NameVariable","value":"meta.required"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"tostring "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"from"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":"))))))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"fn "}, {"type":"NameVariable","value":"check-module-fields"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"symbol"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"scope"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"\"When referring to a field in a local that's a module, make sure it exists.\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"let "}, {"type":"Punctuation","value":"[["}, {"type":"NameVariable","value":"module-local"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"field"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"multi-sym?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"symbol"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"[])"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"module-name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"-?\u003e "}, {"type":"NameVariable","value":"scope.symmeta"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"tostring "}, {"type":"NameVariable","value":"module-local"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"LiteralStringSymbol","value":":required"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameBuiltin","value":"module "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"and "}, {"type":"NameVariable","value":"module-name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"require "}, {"type":"NameVariable","value":"module-name"}, {"type":"Punctuation","value":"))]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"assert-compile"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"= "}, {"type":"NameBuiltin","value":"module "}, {"type":"NameVariable","value":"nil"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"not= "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameBuiltin","value":"module "}, {"type":"NameVariable","value":"field"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nil"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"string.format "}, {"type":"LiteralString","value":"\"Missing field %s in module %s\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"NameVariable","value":"field"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":?"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"NameVariable","value":"module-name"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":?"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"symbol"}, {"type":"Punctuation","value":")))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"fn "}, {"type":"NameVariable","value":"arity-check?"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"module"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"-?\u003e "}, {"type":"NameBuiltin","value":"module getmetatable "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"LiteralStringSymbol","value":":arity-check?"}, {"type":"Punctuation","value":")))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"fn "}, {"type":"NameVariable","value":"arity-check-call"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"[["}, {"type":"NameVariable","value":"f"}, {"type":"TextWhitespace","value":" "}, {"type":"Operator","value":"\u0026"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"args"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"scope"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralString","value":"\"Perform static arity checks on static function calls in a module.\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"let "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"arity"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":"#"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"args"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"last-arg"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"args"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"arity"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"f-local"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"field"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"multi-sym?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"[])"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameVariable","value":"module-name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"-?\u003e "}, {"type":"NameVariable","value":"scope.symmeta"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"tostring "}, {"type":"NameVariable","value":"f-local"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"LiteralStringSymbol","value":":required"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"NameBuiltin","value":"module "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"and "}, {"type":"NameVariable","value":"module-name"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"require "}, {"type":"NameVariable","value":"module-name"}, {"type":"Punctuation","value":"))]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"when "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"and "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"arity-check?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"module"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"_G.debug"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"_G.debug.getinfo"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"not "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"varg?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"last-arg"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"not "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"list?"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"last-arg"}, {"type":"Punctuation","value":")))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"assert-compile"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"= "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"type "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameBuiltin","value":"module "}, {"type":"NameVariable","value":"field"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":function"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"string.format "}, {"type":"LiteralString","value":"\"Missing function %s in module %s\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"NameVariable","value":"field"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":?"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"module-name"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"match "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"_G.debug.getinfo"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameBuiltin","value":"module "}, {"type":"NameVariable","value":"field"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"Keyword","value":": "}, {"type":"NameVariable","value":"nparams"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":what"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Lua\""}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":isvararg"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"true"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"assert-compile"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"\u003c= "}, {"type":"NameVariable","value":"nparams"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":"#"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"args"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":": "}, {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s+\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":format"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f-local"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"field"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"arity"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nparams"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"{"}, {"type":"Keyword","value":": "}, {"type":"NameVariable","value":"nparams"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":what"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"Lua\""}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":isvararg"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"false"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"assert-compile"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"= "}, {"type":"NameVariable","value":"nparams"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Operator","value":"#"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"args"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":": "}, {"type":"LiteralString","value":"\"Called %s.%s with %s arguments, expected %s\""}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":format"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f-local"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"field"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"arity"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"nparams"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Punctuation","value":")))))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"("}, {"type":"KeywordDeclaration","value":"fn "}, {"type":"NameVariable","value":"check-unused"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"ast"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"scope"}, {"type":"Punctuation","value":"]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"each "}, {"type":"Punctuation","value":"["}, {"type":"NameVariable","value":"symname"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"pairs "}, {"type":"NameVariable","value":"scope.symmeta"}, {"type":"Punctuation","value":")]"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"assert-compile"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":". "}, {"type":"NameVariable","value":"scope.symmeta"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"symname"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":used"}, {"type":"Punctuation","value":")"}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"NameFunction","value":"symname"}, {"type":"LiteralStringSymbol","value":":find"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralString","value":"\"^_\""}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":"\n "}, {"type":"Punctuation","value":"("}, {"type":"NameBuiltin","value":"string.format "}, {"type":"LiteralString","value":"\"unused local %s\""}, {"type":"TextWhitespace","value":" "}, {"type":"Punctuation","value":"("}, {"type":"Keyword","value":"or "}, {"type":"NameVariable","value":"symname"}, {"type":"TextWhitespace","value":" "}, {"type":"LiteralStringSymbol","value":":?"}, {"type":"Punctuation","value":"))"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"ast"}, {"type":"Punctuation","value":")))"}, {"type":"TextWhitespace","value":"\n\n"}, {"type":"Punctuation","value":"{"}, {"type":"LiteralStringSymbol","value":":destructure"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"save-require-meta"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":symbol-to-expression"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"check-module-fields"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":call"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"arity-check-call"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":";; Note that this will only check unused args inside functions and let blocks,"}, {"type":"TextWhitespace","value":"\n "}, {"type":"CommentSingle","value":";; not top-level locals of a chunk."}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":fn"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"check-unused"}, {"type":"TextWhitespace","value":"\n "}, {"type":"LiteralStringSymbol","value":":do"}, {"type":"TextWhitespace","value":" "}, {"type":"NameVariable","value":"check-unused"}, {"type":"Punctuation","value":"}"}, {"type":"TextWhitespace","value":"\n"} ] chroma-2.14.0/lexers/testdata/fish.actual000066400000000000000000000165471461341362700203320ustar00rootroot00000000000000#!/usr/bin/env fish echo hello > output.txt alias something=echo sudo systemctl start postgresql # Outputs 'image.png'. echo (basename image.jpg .jpg).png echo some text for testing # Convert all JPEG files in the current directory to the # PNG format using the 'convert' program. for i in *.jpg; convert $i (basename $i .jpg).png; end # Set the ``data`` variable to the contents of 'data.txt' # without splitting it into a list. begin; set -l IFS; set data (cat data.txt); end # Set ``$data`` to the contents of data, splitting on NUL-bytes. set data (cat data | string split0) grep fish myanimallist1 | wc -l command some-arg-with-dash echo input.{c,h,txt} echo {$dogs}dog echo (seq 10)[1 2 3] echo (seq 10)[2..5 1..3] echo (seq 10)[-1..1] set PATH $PATH[-1..1] set foo banana foo=gagaga echo $foo # prints gagaga, while in other shells it might print "banana" foo=gagaga somecommand $foo # prints gagaga, while in other shells it might print "banana" function some func echo 'function' with space end function dirs --description 'Print directory stack' set -l options h/help c argparse -n dirs --max-args=0 $options -- $argv or return if set -q _flag_help __fish_print_help dirs return 0 end if set -q _flag_c # Clear directory stack. set -e -g dirstack return 0 end # Replace $HOME with ~. string replace -r '^'"$HOME"'($|/)' '~$1' -- $PWD $dirstack | string join " " end function ytdl_files -d "Download videos from text files with youtube-dl and put them into folders" argparse --name=ytdl_files 's/shutdown' -- $argv for file in $argv echo "Operating on $file" youtube-dl -a $file -i -o (dirname $file)"/"(basename $file .txt)"/%(autonumber)s-%(title)s.%(ext)s" end if test -n "$_flag_shutdown" echo "poweroff" end end function cheat -d 'Get programming language cheat sheets from cheat.sh' if test $argv[1] curl https://cheat.sh/$argv[1] else curl https://cheat.sh end end function dut -d 'Get top paths with most disk usage' du -hs $argv[2]/* | sort -rh | head -$argv[1] end function m2d --description 'Move to desktop -- m2d program_name desktop_num' bspc node (xdo id -N $argv[1]) -d $argv[2] end set -x no_proxy 'localhost,127.0.0.1' function toggle_proxy if not set -q HTTP_PROXY for proxy in HTTP_PROXY HTTPS_PROXY http_proxy https_proxy set -gx $proxy 'http://127.0.0.1:8118' end echo 'Proxy On' else set -e {HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy} echo 'proxy Off' end end function wttr -d 'Get weather info from wttr.in' if test $argv[1] curl https://wttr.in/$argv[1] else curl https://wttr.in/ end end function fish_config --description "Launch fish's web based configuration" argparse h/help -- $argv or return if set -q _flag_help __fish_print_help fish_config return 0 end set -l cmd $argv[1] set -e argv[1] set -q cmd[1] or set cmd browse # The web-based configuration UI # Also opened with just `fish_config` or `fish_config browse`. if contains -- $cmd browse set -lx __fish_bin_dir $__fish_bin_dir if set -l python (__fish_anypython) $python "$__fish_data_dir/tools/web_config/webconfig.py" $argv else echo (set_color $fish_color_error)Cannot launch the web configuration tool:(set_color normal) echo (set_color -o)"fish_config browse"(set_color normal) requires Python. echo Installing python will fix this, and also enable completions to be echo automatically generated from man pages.\n echo To change your prompt, use (set_color -o)"fish_config prompt"(set_color normal) or create a (set_color -o)"fish_prompt"(set_color normal) function. echo To list the samples use (set_color -o)"fish_config prompt show"(set_color normal).\n echo You can tweak your colors by setting the (set_color $fish_color_search_match)\$fish_color_\*(set_color normal) variables. end return 0 end if not contains -- $cmd prompt echo No such subcommand: $cmd >&2 return 1 end # prompt - for prompt switching set -l cmd $argv[1] set -e argv[1] if contains -- $cmd list; and set -q argv[1] echo "Too many arguments" >&2 return 1 end set -l prompt_dir $__fish_data_dir/sample_prompts $__fish_data_dir/tools/web_config/sample_prompts switch $cmd case show set -l fish (status fish-path) set -l prompts $prompt_dir/$argv.fish set -q prompts[1]; or set prompts $prompt_dir/*.fish for p in $prompts if not test -e "$p" continue end set -l promptname (string replace -r '.*/([^/]*).fish$' '$1' $p) echo -s (set_color --underline) $promptname (set_color normal) $fish -c "functions -e fish_right_prompt; source $p; false fish_prompt echo (set_color normal) if functions -q fish_right_prompt; echo right prompt: (false; fish_right_prompt) end" echo end case list '' string replace -r '.*/([^/]*).fish$' '$1' $prompt_dir/*.fish return case choose if set -q argv[2] echo "Too many arguments" >&2 return 1 end if not set -q argv[1] echo "Too few arguments" >&2 return 1 end set -l have 0 for f in $prompt_dir/$argv[1].fish if test -f $f source $f set have 1 break end end if test $have -eq 0 echo "No such prompt: '$argv[1]'" >&2 return 1 end case save read -P"Overwrite prompt? [y/N]" -l yesno if string match -riq 'y(es)?' -- $yesno echo Overwriting cp $__fish_config_dir/functions/fish_prompt.fish{,.bak} if set -q argv[1] set -l have 0 for f in $prompt_dir/$argv[1].fish if test -f $f set have 1 source $f or return 2 end end if test $have -eq 0 echo "No such prompt: '$argv[1]'" >&2 return 1 end end funcsave fish_prompt or return functions -q fish_right_prompt and funcsave fish_right_prompt return else echo Not overwriting return 1 end end return 0 end chroma-2.14.0/lexers/testdata/fish.expected000066400000000000000000001427011461341362700206520ustar00rootroot00000000000000[ {"type":"CommentHashbang","value":"#!/usr/bin/env fish\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" hello "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" output.txt\n\n"}, {"type":"NameBuiltin","value":"alias "}, {"type":"NameVariable","value":"something"}, {"type":"Operator","value":"="}, {"type":"Text","value":"echo\n\n"}, {"type":"NameFunction","value":"sudo"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"systemctl"}, {"type":"Text","value":" start postgresql\n\n"}, {"type":"Comment","value":"# Outputs 'image.png'.\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"basename"}, {"type":"Text","value":" image.jpg .jpg"}, {"type":"Operator","value":")"}, {"type":"Text","value":".png\n\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" some text for testing\n\n"}, {"type":"Comment","value":"# Convert all JPEG files in the current directory to the\n# PNG format using the 'convert' program.\n"}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"i"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" *.jpg"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"convert"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$i"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"basename"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$i"}, {"type":"Text","value":" .jpg"}, {"type":"Operator","value":")"}, {"type":"Text","value":".png"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Comment","value":"# Set the ``data`` variable to the contents of 'data.txt'\n# without splitting it into a list.\n"}, {"type":"Keyword","value":"begin"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"IFS"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"data"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"cat"}, {"type":"Text","value":" data.txt"}, {"type":"Operator","value":")"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Comment","value":"# Set ``$data`` to the contents of data, splitting on NUL-bytes.\n"}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"data"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"cat"}, {"type":"Text","value":" data "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"split0"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"NameFunction","value":"grep"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"fish "}, {"type":"Text","value":"myanimallist1 "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"wc"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":"\n\n"}, {"type":"NameBuiltin","value":"command "}, {"type":"Text","value":"some-arg-with-dash\n\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" input."}, {"type":"Operator","value":"{"}, {"type":"Text","value":"c,h,txt"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"NameVariable","value":"$dogs"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"dog\n\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"seq"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"10"}, {"type":"Operator","value":")["}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"3"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"seq"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"10"}, {"type":"Operator","value":")["}, {"type":"LiteralNumber","value":"2"}, {"type":"Operator","value":".."}, {"type":"LiteralNumber","value":"5"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":".."}, {"type":"LiteralNumber","value":"3"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"seq"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"10"}, {"type":"Operator","value":")[-"}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":".."}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"PATH"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$PATH"}, {"type":"Operator","value":"[-"}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":".."}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Text","value":" banana\n"}, {"type":"NameVariable","value":"foo"}, {"type":"Operator","value":"="}, {"type":"Text","value":"gagaga "}, {"type":"NameFunction","value":"echo"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$foo"}, {"type":"Text","value":" "}, {"type":"Comment","value":"# prints gagaga, while in other shells it might print \"banana\"\n"}, {"type":"NameVariable","value":"foo"}, {"type":"Operator","value":"="}, {"type":"Text","value":"gagaga "}, {"type":"NameFunction","value":"somecommand"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$foo"}, {"type":"Text","value":" "}, {"type":"Comment","value":"# prints gagaga, while in other shells it might print \"banana\"\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"some func"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'function'"}, {"type":"Text","value":" with space\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"dirs"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--description"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Print directory stack'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"options"}, {"type":"Text","value":" h/"}, {"type":"NameBuiltin","value":"help "}, {"type":"Text","value":"c\n "}, {"type":"NameBuiltin","value":"argparse"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-n"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"dirs"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--max-args"}, {"type":"Operator","value":"="}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$options"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"_flag_help"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"__fish_print_help"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"dirs\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"_flag_c"}, {"type":"Text","value":"\n "}, {"type":"Comment","value":"# Clear directory stack.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-e"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-g"}, {"type":"Text","value":" dirstack\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Comment","value":"# Replace $HOME with ~.\n"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"replace "}, {"type":"NameAttribute","value":"-r"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'^'"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$HOME"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"LiteralStringSingle","value":"'($|/)'"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'~$1'"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$PWD"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$dirstack"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"join "}, {"type":"LiteralStringDouble","value":"\" \""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"ytdl_files"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-d"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Download videos from text files with youtube-dl and put them into folders\""}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"argparse"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--name"}, {"type":"Operator","value":"="}, {"type":"Text","value":"ytdl_files "}, {"type":"LiteralStringSingle","value":"'s/shutdown'"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"file"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Operating on "}, {"type":"NameVariable","value":"$file"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"youtube-dl"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-a"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$file"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-i"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-o"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"dirname"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$file"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"/\""}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"basename"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$file"}, {"type":"Text","value":" .txt"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"/%(autonumber)s-%(title)s.%(ext)s\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-n"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$_flag_shutdown"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"poweroff\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"cheat"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-d"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Get programming language cheat sheets from cheat.sh'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"curl"}, {"type":"Text","value":" https://cheat.sh/"}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"curl"}, {"type":"Text","value":" https://cheat.sh\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"dut"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-d"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Get top paths with most disk usage'"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"du"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-hs"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"2"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"/* "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"sort"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-rh"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"head"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"m2d"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--description"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Move to desktop -- m2d program_name desktop_num'"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"bspc"}, {"type":"Text","value":" node "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"xdo"}, {"type":"Text","value":" id "}, {"type":"NameAttribute","value":"-N"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"])"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-d"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"2"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-x"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"no_proxy"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'localhost,127.0.0.1'"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"toggle_proxy"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"HTTP_PROXY"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"proxy"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" HTTP_PROXY HTTPS_PROXY http_proxy https_proxy\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-gx"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$proxy"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'http://127.0.0.1:8118'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Proxy On'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"HTTP_PROXY,HTTPS_PROXY,http_proxy,https_proxy"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'proxy Off'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"wttr"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-d"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'Get weather info from wttr.in'"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"curl"}, {"type":"Text","value":" https://wttr.in/"}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"curl"}, {"type":"Text","value":" https://wttr.in/\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"function"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"fish_config"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--description"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Launch fish's web based configuration\""}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"argparse "}, {"type":"Text","value":"h/"}, {"type":"NameBuiltin","value":"help"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"_flag_help"}, {"type":"Text","value":"\n "}, {"type":"NameFunction","value":"__fish_print_help"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"fish_config\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"cmd"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-e"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"cmd"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"cmd"}, {"type":"Text","value":" browse\n\n "}, {"type":"Comment","value":"# The web-based configuration UI\n"}, {"type":"Text","value":" "}, {"type":"Comment","value":"# Also opened with just `fish_config` or `fish_config browse`.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"contains"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$cmd"}, {"type":"Text","value":" browse\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-lx"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"__fish_bin_dir"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$__fish_bin_dir"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"python"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameFunction","value":"__fish_anypython"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"$python"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$__fish_data_dir"}, {"type":"LiteralStringDouble","value":"/tools/web_config/webconfig.py\""}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$fish_color_error"}, {"type":"Operator","value":")"}, {"type":"Text","value":"Cannot launch the web configuration tool:"}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-o"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"fish_config browse\""}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":" requires Python.\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" Installing python will fix this, and "}, {"type":"NameFunction","value":"also"}, {"type":"Text","value":" enable completions to be\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" automatically generated from man pages."}, {"type":"LiteralStringEscape","value":"\\n"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" To change your prompt, use "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-o"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"fish_config prompt\""}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":" or "}, {"type":"NameFunction","value":"create"}, {"type":"Text","value":" a "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-o"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"fish_prompt\""}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":" function.\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" To list the samples use "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-o"}, {"type":"Operator","value":")"}, {"type":"LiteralStringDouble","value":"\"fish_config prompt show\""}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":"."}, {"type":"LiteralStringEscape","value":"\\n"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" You can tweak your colors by setting the "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$fish_color_search_match"}, {"type":"Operator","value":")"}, {"type":"LiteralStringEscape","value":"\\$"}, {"type":"Text","value":"fish_color_"}, {"type":"LiteralStringEscape","value":"\\*"}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":" variables.\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"contains"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$cmd"}, {"type":"Text","value":" prompt\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" No such subcommand: "}, {"type":"NameVariable","value":"$cmd"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n \n "}, {"type":"Comment","value":"# prompt - for prompt switching\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"cmd"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-e"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"contains"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$cmd"}, {"type":"Text","value":" list"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"and"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Too many arguments\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"prompt_dir"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$__fish_data_dir"}, {"type":"Text","value":"/sample_prompts "}, {"type":"NameVariable","value":"$__fish_data_dir"}, {"type":"Text","value":"/tools/web_config/sample_prompts\n "}, {"type":"Keyword","value":"switch"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$cmd"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"case"}, {"type":"Text","value":" show\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"fish"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"status fish"}, {"type":"Text","value":"-path"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"prompts"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompt_dir"}, {"type":"Text","value":"/"}, {"type":"NameVariable","value":"$argv"}, {"type":"Text","value":"."}, {"type":"NameBuiltin","value":"fish\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"prompts"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Punctuation","value":";"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"prompts"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompt_dir"}, {"type":"Text","value":"/*."}, {"type":"NameBuiltin","value":"fish\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"p"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompts"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-e"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\""}, {"type":"NameVariable","value":"$p"}, {"type":"LiteralStringDouble","value":"\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"continue"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"promptname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"replace "}, {"type":"NameAttribute","value":"-r"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'.*/([^/]*).fish$'"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'$1'"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$p"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-s"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"--underline"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$promptname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"NameBuiltin","value":"set_color "}, {"type":"Text","value":"normal"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"NameVariable","value":"$fish"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-c"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"functions -e fish_right_prompt; source "}, {"type":"NameVariable","value":"$p"}, {"type":"LiteralStringDouble","value":";\n false\n fish_prompt\n echo (set_color normal)\n if functions -q fish_right_prompt;\n echo right prompt: (false; fish_right_prompt)\n end\""}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"case"}, {"type":"Text","value":" list "}, {"type":"LiteralStringSingle","value":"''"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"replace "}, {"type":"NameAttribute","value":"-r"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'.*/([^/]*).fish$'"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'$1'"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompt_dir"}, {"type":"Text","value":"/*."}, {"type":"NameBuiltin","value":"fish\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"case"}, {"type":"Text","value":" choose\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"2"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Too many arguments\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Too few arguments\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"have"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompt_dir"}, {"type":"Text","value":"/"}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"."}, {"type":"NameBuiltin","value":"fish\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-f"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$f"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"source"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$f"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"have"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"break"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$have"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-eq"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"No such prompt: '"}, {"type":"NameVariable","value":"$argv"}, {"type":"LiteralStringDouble","value":"[1]'\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"case"}, {"type":"Text","value":" save\n "}, {"type":"NameBuiltin","value":"read"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-P"}, {"type":"LiteralStringDouble","value":"\"Overwrite prompt? [y/N]\""}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" yesno\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"string "}, {"type":"Text","value":"match "}, {"type":"NameAttribute","value":"-riq"}, {"type":"Text","value":" "}, {"type":"LiteralStringSingle","value":"'y(es)?'"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-- "}, {"type":"NameVariable","value":"$yesno"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" Overwriting\n "}, {"type":"NameFunction","value":"cp"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$__fish_config_dir"}, {"type":"Text","value":"/"}, {"type":"NameBuiltin","value":"functions"}, {"type":"Text","value":"/fish_prompt."}, {"type":"NameBuiltin","value":"fish"}, {"type":"Operator","value":"{"}, {"type":"Text","value":",.bak"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-l"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"have"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"f"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"in"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$prompt_dir"}, {"type":"Text","value":"/"}, {"type":"NameVariable","value":"$argv"}, {"type":"Operator","value":"["}, {"type":"LiteralNumber","value":"1"}, {"type":"Operator","value":"]"}, {"type":"Text","value":"."}, {"type":"NameBuiltin","value":"fish\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-f"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$f"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"set"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"have"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"source"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$f"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"test"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"$have"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-eq"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"No such prompt: '"}, {"type":"NameVariable","value":"$argv"}, {"type":"LiteralStringDouble","value":"[1]'\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e\u0026"}, {"type":"LiteralNumber","value":"2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"NameBuiltin","value":"funcsave fish_prompt\n "}, {"type":"Keyword","value":"or"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":"\n\n "}, {"type":"NameBuiltin","value":"functions"}, {"type":"Text","value":" "}, {"type":"NameAttribute","value":"-q"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"fish_right_prompt\n "}, {"type":"Keyword","value":"and"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"funcsave fish_right_prompt\n\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"echo"}, {"type":"Text","value":" Not overwriting\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"1"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"LiteralNumber","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/fsharp/000077500000000000000000000000001461341362700174545ustar00rootroot00000000000000chroma-2.14.0/lexers/testdata/fsharp/fsharp.actual000066400000000000000000000547021461341362700221420ustar00rootroot00000000000000(** # First-level heading Some more documentation using `Markdown`. *) module SampleCode.SimpleTypes (** This comments was making the whole file render as a comment. **) // Compiler directives #if true #elif false #elseif false #endif #light "on" #nowarn #nowarn "9" "40" open System.Text// check that comments are handled correctly open System.Text // check that comments are handled correctly open System.Text.RegularExpressions(* check that comments are handled correctly *) open System.Text.RegularExpressions (* check that comments are handled correctly *) module Test = (** **Check** that this line isn't capture for the markdown grammar **) let a = "" (** This is an edge case, because in early implementation this is commented the whilte file Line with indentation isn't colorized because markdown can't set up his context. *) let b = "" (** This block is colorized becasue markdown can set up his context. # First-level heading This should be parsed as `markdown`. This is an edge case, because in early implementation this is parser the whole file as markdown *) let c = "" (* Comments with nested (* (* *) *) works This line should be shown commented. class should not be colored *) let d = "" let e = (* comment// *) "not a comment" /// **Description** /// /// **Parameters** /// * `arg1` - parameter of type `string` /// * `arg2` - parameter of type `string` /// /// **Output Type** /// * `string` /// /// **Exceptions** /// let markdownDemo (arg1 : string) (arg2 : string) = "" /// **Checking that markdown is really working on single line** let markdownDemo2 (arg1 : string) (arg2 : string) = "" // **This comment isn't formatted** (* Neither this one *) exception UndefinedValueException of string type Alias = int type Alpha = class end type LightDU = | CaseA | CaseB type EgalNewLine = CaseA | CaseB type Underscore_Name = | Underscore_Name of string let i32 = typeof let list = typedefof<_ list> type Accentué = int type Class1() = member this.X = "F#" // Check accessibility modifier coloring type R = private { X : int } type U = private | X of int let private getArgResults, private removeArgResults, private setArgResults = "", "", "" // Check builder detection (based on a whitelist) let a = promise { } let b = pipeline { } let c = noColor { } // Check that known builder names aren't captured as builders when a // value name begins with one of them (e.g. `asyncResult`) // Also see ionide/ionide-vscode-fsharp#836 let d = let asyncF = async { } asyncF // Whitespace between builder and opening brace is optional let e = async{ return 0 } type FancyClass(thing:int, var2 : string -> string, ``ddzdz``: string list, extra) as xxx = let pf() = xxx.Test() let mutable myInternalValue = null member xxx.Test() = "F#" // A read-only property. member __.MyReadOnlyProperty = myInternalValue // A write-only property. member __.MyWriteOnlyProperty with set (value) = myInternalValue <- value // A read-write property. member __.MyReadWriteProperty with get () = myInternalValue and set (value) = myInternalValue <- value member __.ReadAndWriteWithSignature with get (count : int) : string = string count and set (value : int) : unit = failwith "" member __.MyReadWriteProperty with get () = myInternalValue member __.MyReadWriteProperty with set (value) = myInternalValue <- value abstract Update : int * string * string option * obj -> FancyClass default this.Update (thing:int, var2 : string, ``name withh spaces``: string option, extra) = this member val Property1 = thing member val Property2 = "" with get, set /// The typo in withh is intentional, because with is one of the `end` possibility /// We consider it ok, because there is a low chance that a person will use `with` in a quoted variable member __.Test2(thing:int, var2 : string, ``name withh spaces``: string option, extra) = "" static member (>) (v1 : int, v2 : int) = v1 > v2 static member (<) (v1 : int, v2 : int) = v2 < v2 static member (< ) (v1 : int, v2 : int) = v2 < v2 static member (<|>) (v1 : int, v2 : int) = v2 < v2 let inline internal (<) (x : int) ys = x + ys let (< ) (x : int) ys = x + ys let (<<.) a = 1 let inline internal (<==) (x : int) ys = x + ys let inline internal (<==) x ys = x + ys // Check that this `get` and `set` methods are not messing the colourisation let get = ignore get ("maxime") let set = ignore set("maxime") // Arrow should be colored as a keyword and int as type definition let exec (buildOptions: int -> int -> int -> int) args = "" // This line is to check that member_declaration isn't propagate output of declaration scopes let p value = System.Int32.Parse(value) type TestGeneric<'arg, 'model, 'msg, 'view> private (*comments test*) (a: 'arg, model: 'model, msg: 'msg, view: 'view, notify : string -> unit ) as xxx = class end type ``Program with spaces``<'arg, 'model, 'msg, 'view> = class end type Program<'arg, 'model, 'msg, 'view> = { Arg : 'arg Model : 'model Msg : 'msg View : 'view } type Decoder<'a> = class end let keyValuePairs (decoder : Decoder<'value>) : Decoder<(string * 'value) list> = failwith "" let keyValuePairs (decoder : Decoder<'value>) : Decoder<(string * 'value) list -> obj> = failwith "" let tuple2 (decoder1: Decoder<'T1>) (decoder2: Decoder<'T2>) : Decoder<'T1 * 'T2> = failwith "" let run (program : Program<'arg, 'model, 'msg, 'view>) = "" let run2 (program : unit -> Program<'arg, 'model, 'msg, 'view>) = "" type T = abstract Item: selector: string -> string with get, set abstract icon: width : int * height : int with get, set abstract member Name: string option with get, set abstract member NameTestComment: string (*I am a comments*) option with get, set abstract member NameTestComment2: string //option with get, set abstract member Keys: unit -> Program<'arg, 'model, 'msg, array>>> abstract Run : program : Program<'arg, 'model, 'msg, array>>> -> unit abstract ``open``: cacheName: string -> obj abstract DrawElementsInstancedANGLE: mode: float * count: float * ``type with spaces``: float * offset: float * primcount: float abstract Test : Result abstract Test2 : mode: float * test : (Result, string>, string> list, int array> * int) abstract TupleOfTuples : (int * (int * (Result, string>, string> list, int array> * int))) type FancyClass with member __.Run (program : Program<'arg, 'model, 'msg, array<'view>>) = () type FancyClass1(?thing:int) = class end type private FancyClass2 (?thing:int) = class end type FancyClass3 private (?thing:int) = class end let foo = { new System.IDisposable with member __.Dispose() = failwith "do nothing" } let bar = use foo = new System.Threading.CancellationTokenSource() () let paramsColorWorksHereToo (client : obj, extraParam) (name : unit -> obj) : string = "" let endOfThisLineShouldBeCommented// (client : obj, extraParam) = "" : string = "" // Fixed width comments also works and coloration is still correct after it let endOfThisLineShouldBeCommented2 (*(client : obj, extraParam) = ""*) (name: int) = "" // Fixed width comments also works even in tuples parameters // and coloration is still correct after it let private _emitLetBinding (il:int, (*methods:MethodSymbolTable, locals:LocalsSymbolTable,*) binding:obj) = "" type EndOfThisLineShouldBe //Commented (a:int, b:int) (a: int, b: int) = class end let (name : string, age) = "", 0 type NameRecord = { Firstname : string Surname : string } type NestedRecord = { Nested : NestedRecord PropB : string } // Test signature coloration let primitive : int = 0 let tupleOfPrimitives : int * string list = 0, [] let tupleOfPrimitives : (int * string) = 0, "" let tupleOfTuples : (int * (int * (int * int))) = failwith "" let tupleOfTuples : int * (int * (Result, string>, string> list, int array> * int)) = failwith "" let tupleOfTuples : (int * (int * (Result, string>, string> list, int array> * int))) = failwith "" let listOfTuples (files : (string * string) list) (files2 : (string * string) list) : (int * (int * (Result list, int array> * int))) list = [] let generics : Result = Ok [] let tupleWithGenerics : Result * int = Ok [], 0 let tupleWithAListOfGenerics (p1 : int * Map list) (p2 : int * Map list) : int * Map list = 1, [] let tupleWithAListOfGenerics : int * Map list = 1, [] let tupleWithAListOrArrayOfGenerics2 : int * Map list * Map array = 1, [], [||] // Really complexe nested generic type let tupleWithGenerics2 : (Result, string>, string> list, int array> * int) = Ok [], 0 let lambda : int -> unit = ignore let lambda : (int -> unit) = ignore let lambda : (int -> unit) -> unit = ignore let lambda : (Result -> (string * int)) -> unit = ignore let lambda : (Result, string>, string> list, int array> -> Result list, int array> * int) -> unit = ignore let lambda ( x : (Result, string>, string> list, int array> -> Result, string>, string> list, int array> * int) -> unit) : ('T -> unit ) = ignore let inline isLoadingTime<'a> = "" let inline isLoadingTime<'a, 'b, 'c> = "" let inline method<'a> prefix chunck dzd zd = promise { let! dzdz = "" } let v ``var with spaces``= "" let printFullName { Firstname = firstname; Surname = surname } : string = firstname + " " + surname let printFirstName { Firstname = firstname } : string = firstname let printFirstName ({ Firstname = ``var with spaces`` } : NameRecord) ( _ : obj) : string = ``var with spaces`` let ``test multiple backticks`` = row.``maxime``.Trim(), row.``Last Update`` // Test multiple backticks on the same line let nestedRecords ({ Nested = { Nested = { Nested = { Nested = value }; PropB = _ } }; PropB = propB } : NestedRecord) : string = value.PropB + " " + propB let variable = "value" // Check that style is apply even when declaration is on multiple lines let func arg1 arg2 = "" let func arg1 arg2 = "" let func arg1 arg2 = "" // Check that option is also colored as part of the type definition let debounce (debounce : int option) = "" // Check output type coloration let mutable timeoutID : float = 0. let test2 test (timeoutID : float option) : int option = None module test = let t = 1 module accentué = let t = 1 open test type MutableMembersTest = { mutable test: string } // Test that variable named like: keyword' isn't colored in a match statement let test match' = match match' with | CaseA -> "" | CaseB -> "" let test2 return' = match return' with | CaseA -> "" | CaseB -> "" type RequestData = { Params : string } type Client () = member this.Request (req : RequestData) = "" let res (client : Client, extraParam) = client.Request { Params = "" } [] type kg let forLoop = [ for index = 0 to 1 do yield index ] type GenType<'a> = 'a type ``type with spaces`` = obj let t : ``type with spaces`` = null let t2 : obj = null type TestDUTypeColoration = | CaseA | CaseB of int | CaseC of (int * (string * string) list) | CaseD of name :string * age:int | CaseE of client: Client | CaseF of client: Client (*comment tests*) * (*comment tests*) string * port : int | CaseG of (obj -> unit) | CaseH of string * (obj -> unit) // Check multiple declaration on one line | CaseI of int | CaseJ of int | CaseF2 of client: Client // * string * port : int | FetchDomainsSuccess of Result | CaseK of ``var with spaces``: string | CaseL of ``var with spaces``: ``type with spaces`` | CaseM of v1 : ``type with spaces`` | CaseN of ``type with spaces`` type TestRecordColoration<'a> = { Firstname : string Lastname : string /// Test docs comments works with `markdown` Age : (*comment tests*) int Notify : string -> unit Notify2 : string ->unit Notify3 : string-> unit Notify4 : string -> unit Callback : (string * int) -> GenType<'a> -> Client // Comments tests TypeWithSpace : ``type with spaces`` Nested : ((string * int) -> (*comment tests*) RequestData) -> Client mutable Mutable : obj } let testRecordColoration = { Firstname = "string" // Comments should work here Lastname = "string" Age = 10 Notify = fun _ -> () Notify2 = fun s -> () Notify3 = fun _ -> () Notify4 = fun _ -> () Callback = fun (a, (*b) comments should works here too*) b) -> unbox null TypeWithSpace = null Nested = fun func -> unbox null Mutable = null } type CheckSingleLineRecord = { Param1 : string; (*comment tests*) Param2 : obj } // Check that compression expression aren't mess up by the record coloration let a = async { let! a = async { (*comment tests*) return 0 } return a } // Test case for: https://github.com/ionide/ionide-fsgrammar/issues/147 let testVariableWithModuleKeyword test_module = if test_module then // This is the line where the problem is () // Edge cases provided by @selketjah // In this code some of the `type` word where colored in purple type Example = { Type : int SType : int Stype : int STypeT : int StypeT : int // comments tests TypeS : int (*comment tests*) typeTest : int stype : int stypes : int s_type : int } // Edge cases provided by @selketjah // `type` was colored as keyword // `with` as a Type declaration let temp (s : Example) = match s.stype with | 0 -> "whatever" | 1 -> "" // Edge case when there is something after } the next type is not colored type One = { Id : string } // test type Two = { Id : int } // Support for anonymous records type Employee = | Engineer of {| Prop1 : int; Prop2 : {| Prop1 : int; Prop2 : {| Prop1 : GenType>; Prop2 : {| Prop1 : int; Prop2 : List |} |} |} |} | Manager of {| Prop1 : int; Prop2 : {| Prop1 : int; Prop2 : List |} |} let private standardIntInput (props : {| Dispatch : GenType> Disabled : {| Prop1 : int; Prop2 : {| Prop1 : int; Prop2 : List |} |} Errors : GenType<'Msg> list |}) = "" let test = fun (props : {| Dispatch : GenType> Disabled : {| Prop1 : int; Prop2 : {| Prop1 : int; Prop2 : List |} |} Errors : GenType<'Msg> list |}) -> "" type AR_Class () = member this.Method1 (props : {| Dispatch : GenType> Disabled : {| Prop1 : int; Prop2 : {| Prop1 : int; Prop2 : List |} |} Errors : GenType<'Msg> list |}) = "" // Check anonymous function type signature let tx = fun (t : ``type with spaces``) (``var with spaces`` : Result) -> () let private mixedArray msg (decoders: string []) (path: string) (values: obj[]): Result = Ok [] type Auto() = static let (color, message) = failwith "" static let (color : Result<'T, string>) = failwith "" // Here `<`& `>` not in purple static member GenerateDecoder<'T> (?isCamelCase : bool): GenType<'T> = failwith "" // Here generics not colored static member FromString<'T>(json: string, ?isCamelCase : bool): 'T = failwith "" type Example1 = { Test : int list } let test = { Test = [ 1;2;3 ] } // test.test shouldn't be colored let temp = { test with Test = 3 :: test.Test } type EitherBuilder() = member __.Bind(x) = x member __.Return(x) = x let either = EitherBuilder() let test x = // Ensure coloration is working correctly in custom computation expressions either { let x = x let! c = "" return 0 } open System type QueueTrigger(msg : string, b : bool) = inherit Attribute() type [] AppState2() = class end type [] AppState<'a, 'b>() = class end let run ([] content:string) = failwith "" type [] TestInlineAttributeGenerics<'a, 'b>(content:string) = class end type [] TestInlineAttribute(content:string) = class end [] type TestAttribue2(content:string) = class end // // Make sure coloration support SRTP synthax // // The next code has been copied from // // https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/statically-resolved-type-parameters let inline konst x _ = x type CFunctor() = static member inline fmap (f: ^a -> ^b, a: ^a list) = List.map f a static member inline fmap (f: ^a -> ^b, a: ^a option) = match a with | None -> None | Some x -> Some (f x) // default implementation of replace static member inline replace< ^a, ^b, ^c, ^d, ^e when ^a :> CFunctor and (^a or ^d): (static member fmap: (^b -> ^c) * ^d -> ^e) > (a, f) = ((^a or ^d) : (static member fmap : (^b -> ^c) * ^d -> ^e) (konst a, f)) // call overridden replace if present static member inline replace< ^a, ^b, ^c when ^b: (static member replace: ^a * ^b -> ^c)>(a: ^a, f: ^b) = (^b : (static member replace: ^a * ^b -> ^c) (a, f)) let inline replace_instance< ^a, ^b, ^c, ^d when (^a or ^c): (static member replace: ^b * ^c -> ^d)> (a: ^b, f: ^c) = ((^a or ^c): (static member replace: ^b * ^c -> ^d) (a, f)) // Note the concrete type 'CFunctor' specified in the signature let inline replace (a: ^a) (f: ^b): ^a0 when (CFunctor or ^b): (static member replace: ^a * ^b -> ^a0) = replace_instance (a, f) // End of SRTP synthax // Make sure constraints are correctly colored // https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/constraints // Base Type Constraint type Class1<'T when 'T :> System.Exception> = class end // Interface Type Constraint type Class2<'T when 'T :> System.IComparable> = class end // Null constraint type Class3<'T when 'T : null> = class end // Member constraint with static member type Class4<'T when 'T : (static member staticMethod1 : unit -> 'T) > = class end // Member constraint with instance member type Class5<'T when 'T : (member Method1 : 'T -> int)> = class end // Member constraint with property type Class6<'T when 'T : (member Property1 : int)> = class end // Constructor constraint type Class7<'T when 'T : (new : unit -> 'T)>(thing:int, var2 : string -> string, ``ddzdz``: string list, extra) as xxx = member val Field = new 'T() // Reference type constraint type Class8<'T when 'T : not struct> = class end // Enumeration constraint with underlying value specified type Class9<'T when 'T : enum> = class end // 'T must implement IComparable, or be an array type with comparable // elements, or be System.IntPtr or System.UIntPtr. Also, 'T must not have // the NoComparison attribute. type Class10<'T when 'T : comparison> = class end // 'T must support equality. This is true for any type that does not // have the NoEquality attribute. type Class11<'T when 'T : equality> = class end type Class12<'T when 'T : delegate> = class end type Class13<'T when 'T : unmanaged> = class end // Member constraints with two type parameters // Most often used with static type parameters in inline functions // Test that we are correctly detecting the end of the STRP syntahx when there is only one argument let inline doNothing(_value1 : ^T when ^T : (static member (+) : ^T * ^T -> ^T)) = "" let inline doNothing(_value1 : ^Word when ^Word : (static member toJson : ^Word * ^Word -> ^Word)) = "" let inline add2(value1 : ^T, value2: ^T when ^T : (static member (+) : ^T * ^T -> ^T)) = value1 + value2 let inline add(value1 : ^T when ^T : (static member (+) : ^T * ^T -> ^T), value2: ^T) = value1 + value2 // ^T and ^U must support operator + let inline heterogenousAdd(value1 : ^T when (^T or ^U) : (static member (+) : ^T * ^U -> ^T), value2 : ^U) = value1 + value2 let inline heterogenousAdd(value1 : ^Word when (^Word or ^U) : (static member (+) : ^Word * ^U -> ^Word), value2 : ^U) = value1 + value2 // If there are multiple constraints, use the and keyword to separate them. type Class14<'T,'U when 'T : equality and 'U : equality> = class end type Class15<'``generic type with space`` when '``generic type with space`` :> System.Exception> = class end // Type constrainst coloration also works in the constructor type Class16(value1 : ^T when (^T or ^U) : (static member (+) : ^T * ^U -> ^T), value2 : ^U) = class end // Make sure that `:>` isn't closing the current generic tag let inline create<'a, 'b when 'a :> obj and 'a: (new: unit -> 'a)> () : 'b = failwith "" // Explicit Fields // Adapted from: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/explicit-fields-the-val-keyword // And : https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/let-bindings-in-classes type MyType<'``Generic type with spaces``, 'T>() = let mutable myInt1 = 10 static let mutable myInt3 = 3 [] static val mutable private myInt2 : int [] val mutable myString : '``Generic type with spaces`` [] val mutable myString2 : 'T type MyClass = val a : int val b : int // The following version of the constructor is an error // because b is not initialized. // new (a0, b0) = { a = a0; } // The following version is acceptable because all fields are initialized. new(a0, b0) = { a = a0; b = b0; } // Check that SRTP do not break standard syntax between `(` & `)` let incorrect = (fun loadedModel -> let temp = async { return 0 } let loadedModel = { loadedModel with FormState = Form.setWaiting false loadedModel.FormState } ()) chroma-2.14.0/lexers/testdata/fsharp/fsharp.expected000066400000000000000000007350101461341362700224700ustar00rootroot00000000000000[ {"type":"Comment","value":"(**\n# First-level heading\nSome more documentation using `Markdown`.\n*)"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"SampleCode.SimpleTypes"}, {"type":"Text","value":"\n\n"}, {"type":"Comment","value":"(**\nThis comments was making the whole file render as a comment.\n**)"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Compiler directives\n"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"#if"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"true"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"#"}, {"type":"Keyword","value":"elif"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"#"}, {"type":"Name","value":"elseif"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"#endif"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"#light"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"on\""}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"#nowarn"}, {"type":"Text","value":"\n"}, {"type":"CommentPreproc","value":"#nowarn"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"9\""}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"40\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Text"}, {"type":"CommentSingle","value":"// check that comments are handled correctly\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Text"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// check that comments are handled correctly\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Text.RegularExpressions"}, {"type":"Comment","value":"(* check that comments are handled correctly *)"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Text.RegularExpressions"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(* check that comments are handled correctly *)"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n\n "}, {"type":"Comment","value":"(** **Check** that this line isn't capture for the markdown grammar **)"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Comment","value":"(**\n This is an edge case, because in early implementation this is commented the whilte file\n\n Line with indentation isn't colorized because markdown can't set up his context.\n *)"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Comment","value":"(**\nThis block is colorized becasue markdown can set up his context.\n\n# First-level heading\nThis should be parsed as `markdown`.\nThis is an edge case, because in early implementation this is parser the whole\nfile as markdown\n *)"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Comment","value":"(* Comments with nested (* (* *) *) works\n\n This line should be shown commented.\n class should not be colored\n *)"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"d"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Comment","value":"(* comment// *)"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"not a comment\""}, {"type":"Text","value":"\n\n"}, {"type":"LiteralStringDoc","value":"/// **Description**\n///\n/// **Parameters**\n/// * `arg1` - parameter of type `string`\n/// * `arg2` - parameter of type `string`\n///\n/// **Output Type**\n/// * `string`\n///\n/// **Exceptions**\n///\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"markdownDemo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"arg1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"arg2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"LiteralStringDoc","value":"/// **Checking that markdown is really working on single line**\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"markdownDemo2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"arg1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"arg2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// **This comment isn't formatted**\n"}, {"type":"Text","value":"\n"}, {"type":"Comment","value":"(* Neither this one *)"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"exception"}, {"type":"Text","value":" "}, {"type":"Name","value":"UndefinedValueException"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Alias"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Alpha"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"LightDU"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseA"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseB"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"EgalNewLine"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseA"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseB"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Underscore_Name"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Underscore_Name"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"i32"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"typeof"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"typedefof"}, {"type":"Operator","value":"\u003c_"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Accentué"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class1"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"this"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"X"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"F#\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check accessibility modifier coloring\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"R"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"X"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"U"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"X"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"getArgResults"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"removeArgResults"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"setArgResults"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check builder detection (based on a whitelist)\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"promise"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"pipeline"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"noColor"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that known builder names aren't captured as builders when a\n// value name begins with one of them (e.g. `asyncResult`)\n// Also see ionide/ionide-vscode-fsharp#836\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"d"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"asyncF"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"async"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"asyncF"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Whitespace between builder and opening brace is optional\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"async"}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"FancyClass"}, {"type":"Operator","value":"("}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"var2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"``ddzdz``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extra"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"as"}, {"type":"Text","value":" "}, {"type":"Name","value":"xxx"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"pf"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"xxx"}, {"type":"Operator","value":"."}, {"type":"Name","value":"Test"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"xxx"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Test"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"F#\""}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// A read-only property.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"MyReadOnlyProperty"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// A write-only property.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"MyWriteOnlyProperty"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c-"}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// A read-write property.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"MyReadWriteProperty"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":"\n "}, {"type":"OperatorWord","value":"and"}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c-"}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"ReadAndWriteWithSignature"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"count"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"count"}, {"type":"Text","value":"\n "}, {"type":"OperatorWord","value":"and"}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"value"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"MyReadWriteProperty"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"MyReadWriteProperty"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"myInternalValue"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c-"}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"Update"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"FancyClass"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"default"}, {"type":"Text","value":" "}, {"type":"Name","value":"this"}, {"type":"Operator","value":"."}, {"type":"Name","value":"Update"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"var2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"``name withh spaces``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extra"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"this"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Name","value":"Property1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"thing"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Name","value":"Property2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":"\n\n "}, {"type":"LiteralStringDoc","value":"/// The typo in withh is intentional, because with is one of the `end` possibility\n"}, {"type":"Text","value":" "}, {"type":"LiteralStringDoc","value":"/// We consider it ok, because there is a low chance that a person will use `with` in a quoted variable\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Test2"}, {"type":"Operator","value":"("}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"var2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"``name withh spaces``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extra"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c"}, {"type":"Text","value":" "}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c|\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"internal"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c"}, {"type":"Text","value":" "}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c\u003c.)"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"internal"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c==)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"internal"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(\u003c==)"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"ys"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that this `get` and `set` methods are not messing the colourisation\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"get"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"get"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"maxime\""}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"set"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Name","value":"set"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"maxime\""}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Arrow should be colored as a keyword and int as type definition\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"exec"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"buildOptions"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Name","value":"args"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// This line is to check that member_declaration isn't propagate output of declaration scopes\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"p"}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"NameNamespace","value":"Int32"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Parse"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"TestGeneric"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comments test*)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"model"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"msg"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"view"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"notify"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"as"}, {"type":"Text","value":" "}, {"type":"Name","value":"xxx"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Name","value":"``Program with spaces``"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Arg"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Model"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Msg"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"View"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"keyValuePairs"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"decoder"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"value"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"keyValuePairs"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"decoder"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"value"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"value"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tuple2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"decoder1"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T1"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"decoder2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T2"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Decoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T2"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"run"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"program"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"run2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"program"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"Item"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"selector"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"icon"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"width"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"height"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"Name"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"NameTestComment"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*I am a comments*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"get"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"set"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"NameTestComment2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"//option with get, set\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"Keys"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e\u003e\u003e\u003e"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"Run"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"program"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e\u003e\u003e\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"``open``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"cacheName"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"DrawElementsInstancedANGLE"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"mode"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"count"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"offset"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"primcount"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"Test2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"mode"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"test"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"abstract"}, {"type":"Text","value":" "}, {"type":"Name","value":"TupleOfTuples"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")))"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"FancyClass"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Run"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"program"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Program"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"arg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"model"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"msg"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"view"}, {"type":"Operator","value":"\u003e\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"FancyClass1"}, {"type":"Operator","value":"(?"}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"FancyClass2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(?"}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"FancyClass3"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(?"}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"foo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"IDisposable"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Dispose"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"do nothing\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"bar"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"use"}, {"type":"Text","value":" "}, {"type":"Name","value":"foo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"NameNamespace","value":"Threading"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"CancellationTokenSource"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"paramsColorWorksHereToo"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"client"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extraParam"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"name"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"endOfThisLineShouldBeCommented"}, {"type":"CommentSingle","value":"// (client : obj, extraParam) = \"\"\n"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Fixed width comments also works and coloration is still correct after it\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"endOfThisLineShouldBeCommented2"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*(client : obj, extraParam) = "}, {"type":"LiteralString","value":"\"\""}, {"type":"Comment","value":"*)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"name"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Fixed width comments also works even in tuples parameters\n// and coloration is still correct after it\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"private"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Name","value":"emitLetBinding"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"il"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*methods:MethodSymbolTable, locals:LocalsSymbolTable,*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"binding"}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"EndOfThisLineShouldBe"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"//Commented (a:int, b:int)\n"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"name"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"age"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"NameRecord"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Surname"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"NestedRecord"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"NestedRecord"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"PropB"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"// Test signature coloration\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"primitive"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleOfPrimitives"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleOfPrimitives"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleOfTuples"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleOfTuples"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleOfTuples"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"listOfTuples"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"("}, {"type":"Name","value":"files"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"("}, {"type":"Name","value":"files2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")))"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"generics"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"Ok"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleWithGenerics"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"Ok"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleWithAListOfGenerics"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"p1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"p2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleWithAListOfGenerics"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleWithAListOrArrayOfGenerics2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"Map"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"[||]"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Really complexe nested generic type\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tupleWithGenerics2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"Ok"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"lambda"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e,"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"array"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"ignore"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"isLoadingTime"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"isLoadingTime"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"c"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"method"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"prefix"}, {"type":"Text","value":" "}, {"type":"Name","value":"chunck"}, {"type":"Text","value":" "}, {"type":"Name","value":"dzd"}, {"type":"Text","value":" "}, {"type":"Name","value":"zd"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"promise"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let!"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"dzdz"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"v"}, {"type":"Text","value":" "}, {"type":"Name","value":"``var with spaces``"}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"printFullName"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Surname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"surname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\" \""}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"surname"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"printFirstName"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"firstname"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"printFirstName"}, {"type":"Text","value":" "}, {"type":"Operator","value":"({"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"``var with spaces``"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"NameRecord"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"``var with spaces``"}, {"type":"Text","value":"\n\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Name","value":"``test multiple backticks``"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"row"}, {"type":"Operator","value":"."}, {"type":"Name","value":"``maxime``"}, {"type":"Operator","value":"."}, {"type":"Name","value":"Trim"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"row"}, {"type":"Operator","value":"."}, {"type":"Name","value":"``Last Update``"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// Test multiple backticks on the same line\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"nestedRecords"}, {"type":"Text","value":" "}, {"type":"Operator","value":"({"}, {"type":"Text","value":" "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Text","value":" "}, {"type":"Operator","value":"};"}, {"type":"Text","value":" "}, {"type":"Name","value":"PropB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"};"}, {"type":"Text","value":" "}, {"type":"Name","value":"PropB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"propB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"NestedRecord"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"value"}, {"type":"Operator","value":"."}, {"type":"Name","value":"PropB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\" \""}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"propB"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"variable"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"value\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that style is apply even when declaration is on multiple lines\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"func"}, {"type":"Text","value":" "}, {"type":"Name","value":"arg1"}, {"type":"Text","value":" "}, {"type":"Name","value":"arg2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"func"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"arg1"}, {"type":"Text","value":" "}, {"type":"Name","value":"arg2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"func"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"arg1"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"arg2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that option is also colored as part of the type definition\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"debounce"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"debounce"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check output type coloration\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"timeoutID"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Operator","value":"."}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test2"}, {"type":"Text","value":" "}, {"type":"Name","value":"test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"timeoutID"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"float"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"None"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"t"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"accentué"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"t"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"test"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"MutableMembersTest"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"test"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n"}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Test that variable named like: keyword' isn't colored in a match statement\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"match'"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"match"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"match'"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseA"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test2"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return'"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"match"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"return'"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseA"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseB"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"RequestData"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Params"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Client"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"this"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Request"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"req"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"RequestData"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"res"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"client"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extraParam"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"client"}, {"type":"Operator","value":"."}, {"type":"Name","value":"Request"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Params"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"Measure"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"kg"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"forLoop"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"["}, {"type":"Text","value":" "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"Name","value":"index"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"to"}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"do"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"yield"}, {"type":"Text","value":" "}, {"type":"Name","value":"index"}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"t"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"t2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"TestDUTypeColoration"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseA"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseB"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseC"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseD"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"name"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"age"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseE"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"client"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseF"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"client"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"port"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseG"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseH"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// Check multiple declaration on one line\n"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseI"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseJ"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseF2"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"client"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// * string * port : int\n"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"FetchDomainsSuccess"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseK"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"``var with spaces``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseL"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"``var with spaces``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseM"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"v1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"CaseN"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"TestRecordColoration"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Lastname"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":"\n "}, {"type":"LiteralStringDoc","value":"/// Test docs comments works with `markdown`\n"}, {"type":"Text","value":" "}, {"type":"Name","value":"Age"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify3"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify4"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Callback"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// Comments tests\n"}, {"type":"Text","value":" "}, {"type":"Name","value":"TypeWithSpace"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(("}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"RequestData"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Client"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"Mutable"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"testRecordColoration"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Firstname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"string\""}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// Comments should work here\n"}, {"type":"Text","value":" "}, {"type":"Name","value":"Lastname"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"string\""}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Age"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"10"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Name","value":"s"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Notify4"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Callback"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*b) comments should works here too*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"unbox"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"TypeWithSpace"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Nested"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Name","value":"func"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"unbox"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Mutable"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"CheckSingleLineRecord"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Param1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":" "}, {"type":"Name","value":"Param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that compression expression aren't mess up by the record coloration\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"async"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let!"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"async"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Test case for: https://github.com/ionide/ionide-fsgrammar/issues/147\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"testVariableWithModuleKeyword"}, {"type":"Text","value":" "}, {"type":"Name","value":"test_module"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Name","value":"test_module"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"then"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// This is the line where the problem is\n"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Edge cases provided by @selketjah\n// In this code some of the `type` word where colored in purple\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Example"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Type"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"SType"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Stype"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"STypeT"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"StypeT"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// comments tests\n"}, {"type":"Text","value":" "}, {"type":"Name","value":"TypeS"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Comment","value":"(*comment tests*)"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"typeTest"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"stype"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"stypes"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"s_type"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Edge cases provided by @selketjah\n// `type` was colored as keyword\n// `with` as a Type declaration\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"temp"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"s"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Example"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"match"}, {"type":"Text","value":" "}, {"type":"Name","value":"s"}, {"type":"Operator","value":"."}, {"type":"Name","value":"stype"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"whatever\""}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Edge case when there is something after } the next type is not colored\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"One"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Id"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// test\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Two"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Id"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Support for anonymous records\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Employee"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Engineer"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":"\u003e\u003e;"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"List"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Manager"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"of"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"List"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"standardIntInput"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"props"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Dispatch"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Disabled"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"List"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Errors"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"Msg"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|})"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"props"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Dispatch"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Disabled"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"List"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Errors"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"Msg"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|})"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"AR_Class"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"this"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Method1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"props"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Dispatch"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Disabled"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"Prop2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"List"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|}"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Errors"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"Msg"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"|})"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check anonymous function type signature\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"tx"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"t"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"``type with spaces``"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"``var with spaces``"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"mixedArray"}, {"type":"Text","value":" "}, {"type":"Name","value":"msg"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"decoders"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"path"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"values"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"Ok"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"[]"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Auto"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"color"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"message"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"color"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"Result"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":"\u003e)"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// Here `\u003c`\u0026 `\u003e` not in purple\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenerateDecoder"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(?"}, {"type":"Name","value":"isCamelCase"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"bool"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Name","value":"GenType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// Here generics not colored\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"FromString"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"\u003e("}, {"type":"Name","value":"json"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"?"}, {"type":"Name","value":"isCamelCase"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"bool"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Example1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"["}, {"type":"Text","value":" "}, {"type":"Name","value":"1"}, {"type":"Operator","value":";"}, {"type":"Name","value":"2"}, {"type":"Operator","value":";"}, {"type":"Name","value":"3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"]"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// test.test shouldn't be colored\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"temp"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"test"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"::"}, {"type":"Text","value":" "}, {"type":"Name","value":"test"}, {"type":"Operator","value":"."}, {"type":"Name","value":"Test"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"EitherBuilder"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Bind"}, {"type":"Operator","value":"("}, {"type":"Name","value":"x"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"__"}, {"type":"Punctuation","value":"."}, {"type":"NameFunction","value":"Return"}, {"type":"Operator","value":"("}, {"type":"Name","value":"x"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"either"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"EitherBuilder"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"test"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// Ensure coloration is working correctly in custom computation expressions\n"}, {"type":"Text","value":" "}, {"type":"Name","value":"either"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let!"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"open"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"Name","value":"msg"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"bool"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"inherit"}, {"type":"Text","value":" "}, {"type":"Name","value":"Attribute"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"AllowNullLiteral"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":" "}, {"type":"Name","value":"AppState2"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"AllowNullLiteral"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":" "}, {"type":"Name","value":"AppState"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"b"}, {"type":"Operator","value":"\u003e"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"run"}, {"type":"Text","value":" "}, {"type":"Operator","value":"([\u003c"}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":");"}, {"type":"Text","value":" "}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":")\u003e]"}, {"type":"Text","value":" "}, {"type":"Name","value":"content"}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":")\u003e]"}, {"type":"Text","value":" "}, {"type":"Name","value":"TestInlineAttributeGenerics"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"b"}, {"type":"Operator","value":"\u003e("}, {"type":"Name","value":"content"}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":")\u003e]"}, {"type":"Text","value":" "}, {"type":"Name","value":"TestInlineAttribute"}, {"type":"Operator","value":"("}, {"type":"Name","value":"content"}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":");"}, {"type":"Text","value":" "}, {"type":"Name","value":"QueueTrigger"}, {"type":"Operator","value":"("}, {"type":"LiteralString","value":"\"something\""}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Operator","value":")\u003e]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"TestAttribue2"}, {"type":"Operator","value":"("}, {"type":"Name","value":"content"}, {"type":"Operator","value":":"}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// // Make sure coloration support SRTP synthax\n// // The next code has been copied from\n// // https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/statically-resolved-type-parameters\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"konst"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"CFunctor"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"fmap"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"List"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"map"}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"fmap"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Name","value":"option"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"match"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"None"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"None"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"|"}, {"type":"Text","value":" "}, {"type":"Name","value":"Some"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"Some"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"f"}, {"type":"Text","value":" "}, {"type":"Name","value":"x"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// default implementation of replace\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":":\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"CFunctor"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"and"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"fmap"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"e"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"((^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"fmap"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"e"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"konst"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":"))"}, {"type":"Text","value":"\n\n "}, {"type":"CommentSingle","value":"// call overridden replace if present\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":")\u003e("}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":"))"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace_instance"}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Operator","value":")\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"((^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"c"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"d"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":"))"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Note the concrete type 'CFunctor' specified in the signature\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"f"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a0"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"CFunctor"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Operator","value":"):"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"replace"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"a0"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"replace_instance"}, {"type":"Operator","value":"\u003c"}, {"type":"Name","value":"CFunctor"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Operator","value":"_,"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_,"}, {"type":"Text","value":" "}, {"type":"Operator","value":"_\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"f"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// End of SRTP synthax\n"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// Make sure constraints are correctly colored\n// https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/constraints\n"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// Base Type Constraint\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class1"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":\u003e"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Exception"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Interface Type Constraint\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class2"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":\u003e"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"IComparable"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Null constraint\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class3"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"null"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Member constraint with static member\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class4"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"staticMethod1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Member constraint with instance member\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class5"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"Method1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Member constraint with property\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class6"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"Property1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Operator","value":")\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Constructor constraint\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class7"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":")\u003e("}, {"type":"Name","value":"thing"}, {"type":"Operator","value":":"}, {"type":"Name","value":"int"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"var2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"``ddzdz``"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"string"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"list"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"extra"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"as"}, {"type":"Text","value":" "}, {"type":"Name","value":"xxx"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Name","value":"Field"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Reference type constraint\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class8"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"not"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"struct"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Enumeration constraint with underlying value specified\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class9"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"enum"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"uint32"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// 'T must implement IComparable, or be an array type with comparable\n// elements, or be System.IntPtr or System.UIntPtr. Also, 'T must not have\n// the NoComparison attribute.\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class10"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"comparison"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// 'T must support equality. This is true for any type that does not\n// have the NoEquality attribute.\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class11"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"equality"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class12"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"delegate"}, {"type":"Operator","value":"\u003c"}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"EventArgs"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Operator","value":"\u003e\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class13"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"unmanaged"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Member constraints with two type parameters\n// Most often used with static type parameters in inline functions\n"}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"// Test that we are correctly detecting the end of the STRP syntahx when there is only one argument\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"doNothing"}, {"type":"Operator","value":"(_"}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"doNothing"}, {"type":"Operator","value":"(_"}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Name","value":"toJson"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Operator","value":"))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"add2"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"))"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"add"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"),"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// ^T and ^U must support operator +\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"heterogenousAdd"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"),"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"heterogenousAdd"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"Word"}, {"type":"Operator","value":"),"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// If there are multiple constraints, use the and keyword to separate them.\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class14"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":","}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"U"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"equality"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"and"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"U"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"equality"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class15"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"``generic type with space``"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"``generic type with space``"}, {"type":"Text","value":" "}, {"type":"Operator","value":":\u003e"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"Exception"}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Type constrainst coloration also works in the constructor\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Class16"}, {"type":"Operator","value":"("}, {"type":"Name","value":"value1"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"or"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"member"}, {"type":"Text","value":" "}, {"type":"Operator","value":"(+)"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Text","value":" "}, {"type":"Operator","value":"*"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"),"}, {"type":"Text","value":" "}, {"type":"Name","value":"value2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"^"}, {"type":"Name","value":"U"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"end"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Make sure that `:\u003e` isn't closing the current generic tag\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"inline"}, {"type":"Text","value":" "}, {"type":"Name","value":"create"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"when"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":":\u003e"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"obj"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"and"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"new"}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"unit"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"a"}, {"type":"Operator","value":")\u003e"}, {"type":"Text","value":" "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"failwith"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Explicit Fields\n// Adapted from: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/explicit-fields-the-val-keyword\n// And : https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/let-bindings-in-classes\n"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"MyType"}, {"type":"Operator","value":"\u003c"}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"``Generic type with spaces``"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Operator","value":"\u003e"}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"myInt1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"10"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"myInt3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"3"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"DefaultValue"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"static"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"private"}, {"type":"Text","value":" "}, {"type":"Name","value":"myInt2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"DefaultValue"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"myString"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"``Generic type with spaces``"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"[\u003c"}, {"type":"Name","value":"DefaultValue"}, {"type":"Operator","value":"\u003e]"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"mutable"}, {"type":"Text","value":" "}, {"type":"Name","value":"myString2"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"'"}, {"type":"Name","value":"T"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"type"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"MyClass"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"val"}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":":"}, {"type":"Text","value":" "}, {"type":"Name","value":"int"}, {"type":"Text","value":"\n "}, {"type":"CommentSingle","value":"// The following version of the constructor is an error\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// because b is not initialized.\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// new (a0, b0) = { a = a0; }\n"}, {"type":"Text","value":" "}, {"type":"CommentSingle","value":"// The following version is acceptable because all fields are initialized.\n"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"new"}, {"type":"Operator","value":"("}, {"type":"Name","value":"a0"}, {"type":"Operator","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"b0"}, {"type":"Operator","value":")"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"a0"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Name","value":"b"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"b0"}, {"type":"Operator","value":";"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"// Check that SRTP do not break standard syntax between `(` \u0026 `)`\n"}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"incorrect"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"("}, {"type":"Keyword","value":"fun"}, {"type":"Text","value":" "}, {"type":"Name","value":"loadedModel"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-\u003e"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"temp"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"async"}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"0"}, {"type":"Text","value":"\n "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"let"}, {"type":"Text","value":" "}, {"type":"NameVariable","value":"loadedModel"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"{"}, {"type":"Text","value":" "}, {"type":"Name","value":"loadedModel"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"with"}, {"type":"Text","value":" "}, {"type":"Name","value":"FormState"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"Form"}, {"type":"Punctuation","value":"."}, {"type":"Name","value":"setWaiting"}, {"type":"Text","value":" "}, {"type":"Keyword","value":"false"}, {"type":"Text","value":" "}, {"type":"Name","value":"loadedModel"}, {"type":"Operator","value":"."}, {"type":"Name","value":"FormState"}, {"type":"Text","value":" "}, {"type":"Operator","value":"}"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltinPseudo","value":"()"}, {"type":"Operator","value":")"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/fsharp/fsharp_open_static_class.actual000066400000000000000000000000741461341362700257100ustar00rootroot00000000000000open type System.Math module A = open type System.Math chroma-2.14.0/lexers/testdata/fsharp/fsharp_open_static_class.expected000066400000000000000000000010171461341362700262360ustar00rootroot00000000000000[ {"type":"Keyword","value":"open type"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Math"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"module"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"A"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"open type"}, {"type":"Text","value":" "}, {"type":"NameNamespace","value":"System.Math"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/fsharp/fsharp_package_reference.actual000066400000000000000000000000341461341362700256200ustar00rootroot00000000000000#r "nuget: Newtonsoft.Json" chroma-2.14.0/lexers/testdata/fsharp/fsharp_package_reference.expected000066400000000000000000000002551461341362700261550ustar00rootroot00000000000000[ {"type":"CommentPreproc","value":"#r"}, {"type":"Text","value":" "}, {"type":"LiteralString","value":"\"nuget: Newtonsoft.Json\""}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/gdscript.actual000066400000000000000000000030471461341362700212070ustar00rootroot00000000000000# Everything after "#" is a comment. # A file is a class! # (optional) icon to show in the editor dialogs: @icon("res://path/to/optional/icon.svg") # (optional) class definition: class_name MyClass # Inheritance: extends BaseClass # Member variables. var a = 5 var s = "Hello" var arr = [1, 2, 3] var dict = {"key": "value", 2: 3} var other_dict = {key = "value", other_key = 2} var typed_var: int var inferred_type := "String" # Constants. const ANSWER = 42 const THE_NAME = "Charly" # Enums. enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY} enum Named {THING_1, THING_2, ANOTHER_THING = -1} # Built-in vector types. var v2 = Vector2(1, 2) var v3 = Vector3(1, 2, 3) # Functions. func some_function(param1, param2, param3): const local_const = 5 if param1 < local_const: print(param1) elif param2 > 5: print(param2) else: print("Fail!") for i in range(20): print(i) while param2 != 0: param2 -= 1 match param3: 3: print("param3 is 3!") _: print("param3 is not 3!") var local_var = param1 + 3 return local_var # Functions override functions with the same name on the base/super class. # If you still want to call them, use "super": func something(p1, p2): super(p1, p2) # It's also possible to call another function in the super class: func other_something(p1, p2): super.something(p1, p2) # Inner class class Something: var a = 10 # Constructor func _init(): print("Constructed!") var lv = Something.new() print(lv.a) chroma-2.14.0/lexers/testdata/gdscript.expected000066400000000000000000000367561461341362700215540ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"# Everything after \"#\" is a comment."}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"# A file is a class!"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# (optional) icon to show in the editor dialogs:"}, {"type":"Text","value":"\n"}, {"type":"NameDecorator","value":"@icon"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"res://path/to/optional/icon.svg\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# (optional) class definition:"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"class_name"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"MyClass"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# Inheritance:"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"extends"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"BaseClass"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Member variables."}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"s"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Hello\""}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"arr"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"dict"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"LiteralStringDouble","value":"\"key\""}, {"type":"Punctuation","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"value\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"other_dict"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"key"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"value\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"other_key"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"typed_var"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":" "}, {"type":"KeywordType","value":"int"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"inferred_type"}, {"type":"Text","value":" "}, {"type":"Operator","value":":="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"String\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# Constants."}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"ANSWER"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"42"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"THE_NAME"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Charly\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# Enums."}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"enum"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"UNIT_NEUTRAL"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"UNIT_ENEMY"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"UNIT_ALLY"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"enum"}, {"type":"Text","value":" "}, {"type":"Name","value":"Named"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"THING_1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"THING_2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"ANOTHER_THING"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"-"}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# Built-in vector types."}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"v2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Vector2"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"v3"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Vector3"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Functions."}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"func"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"some_function"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"param3"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_const"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Name","value":"param1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_const"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param1"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"elif"}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param2"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"Fail!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"Name","value":"i"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"in"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"20"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"i"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"while"}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"!="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"match"}, {"type":"Text","value":" "}, {"type":"Name","value":"param3"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"param3 is 3!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"_"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"param3 is not 3!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"param1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"+"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Functions override functions with the same name on the base/super class."}, {"type":"Text","value":"\n"}, {"type":"CommentSingle","value":"# If you still want to call them, use \"super\":"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"func"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"something"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"p1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"p2"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"super"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"p1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"p2"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# It's also possible to call another function in the super class:"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"func"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"other_something"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"p1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"p2"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"super"}, {"type":"Operator","value":"."}, {"type":"NameFunction","value":"something"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"p1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"p2"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Inner class"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"class"}, {"type":"Text","value":" "}, {"type":"NameClass","value":"Something"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"10"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# Constructor"}, {"type":"Text","value":"\n"}, {"type":"KeywordDeclaration","value":"func"}, {"type":"Text","value":" "}, {"type":"NameFunction","value":"_init"}, {"type":"Punctuation","value":"():"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"Constructed!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"KeywordDeclaration","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"lv"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"Something"}, {"type":"Operator","value":"."}, {"type":"NameFunction","value":"new"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"lv"}, {"type":"Operator","value":"."}, {"type":"Name","value":"a"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n"} ] chroma-2.14.0/lexers/testdata/gdscript3.actual000066400000000000000000000014401461341362700212650ustar00rootroot00000000000000# a file is a class! # inheritance extends BaseClass # member variables var a = 5 var s = "Hello" var arr = [1, 2, 3] var dict = {"key": "value", 2:3} # constants const answer = 42 const thename = "Charly" # enums enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY} enum Named {THING_1, THING_2, ANOTHER_THING = -1} # function func some_function(param1, param2): var local_var = 5 if param1 < local_var: print(param1) elif param2 > 5: print(param2) else: print("fail!") for i in range(20): print(i) while param2 != 0: param2 -= 1 var local_var2 = param1+3 return local_var2 # inner class class Something: var a = 10 # constructor func _init(): print("constructed!") var lv = Something.new() print(lv.a)chroma-2.14.0/lexers/testdata/gdscript3.expected000066400000000000000000000223501461341362700216200ustar00rootroot00000000000000[ {"type":"CommentSingle","value":"# a file is a class!"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# inheritance"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"extends"}, {"type":"Text","value":" "}, {"type":"Name","value":"BaseClass"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# member variables"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"s"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Hello\""}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"arr"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"["}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":"]"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"dict"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"LiteralStringDouble","value":"\"key\""}, {"type":"Punctuation","value":":"}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"value\""}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"2"}, {"type":"Punctuation","value":":"}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# constants"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"answer"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"42"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"const"}, {"type":"Text","value":" "}, {"type":"Name","value":"thename"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralStringDouble","value":"\"Charly\""}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# enums"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"UNIT_NEUTRAL"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"UNIT_ENEMY"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"UNIT_ALLY"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n"}, {"type":"Keyword","value":"enum"}, {"type":"Text","value":" "}, {"type":"Name","value":"Named"}, {"type":"Text","value":" "}, {"type":"Punctuation","value":"{"}, {"type":"Name","value":"THING_1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"THING_2"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"ANOTHER_THING"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Operator","value":"-"}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Punctuation","value":"}"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# function"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"func"}, {"type":"Text","value":" "}, {"type":"Name","value":"some_function"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param1"}, {"type":"Punctuation","value":","}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"if"}, {"type":"Text","value":" "}, {"type":"Name","value":"param1"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003c"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param1"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"elif"}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"\u003e"}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"5"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"param2"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"else"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"fail!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"for"}, {"type":"Text","value":" "}, {"type":"Name","value":"i"}, {"type":"Text","value":" "}, {"type":"OperatorWord","value":"in"}, {"type":"Text","value":" "}, {"type":"NameBuiltin","value":"range"}, {"type":"Punctuation","value":"("}, {"type":"LiteralNumberInteger","value":"20"}, {"type":"Punctuation","value":"):"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"i"}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"while"}, {"type":"Text","value":" "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"!="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"0"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"Name","value":"param2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"-="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"1"}, {"type":"Text","value":"\n\n "}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var2"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"param1"}, {"type":"Operator","value":"+"}, {"type":"LiteralNumberInteger","value":"3"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"return"}, {"type":"Text","value":" "}, {"type":"Name","value":"local_var2"}, {"type":"Text","value":"\n\n\n"}, {"type":"CommentSingle","value":"# inner class"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"class"}, {"type":"Text","value":" "}, {"type":"Name","value":"Something"}, {"type":"Punctuation","value":":"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"a"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"LiteralNumberInteger","value":"10"}, {"type":"Text","value":"\n\n"}, {"type":"CommentSingle","value":"# constructor"}, {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"func"}, {"type":"Text","value":" "}, {"type":"Name","value":"_init"}, {"type":"Punctuation","value":"():"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"LiteralStringDouble","value":"\"constructed!\""}, {"type":"Punctuation","value":")"}, {"type":"Text","value":"\n "}, {"type":"Keyword","value":"var"}, {"type":"Text","value":" "}, {"type":"Name","value":"lv"}, {"type":"Text","value":" "}, {"type":"Operator","value":"="}, {"type":"Text","value":" "}, {"type":"Name","value":"Something"}, {"type":"Operator","value":"."}, {"type":"Name","value":"new"}, {"type":"Punctuation","value":"()"}, {"type":"Text","value":"\n "}, {"type":"NameBuiltin","value":"print"}, {"type":"Punctuation","value":"("}, {"type":"Name","value":"lv"}, {"type":"Operator","value":"."}, {"type":"Name","value":"a"}, {"type":"Punctuation","value":")"} ] chroma-2.14.0/lexers/testdata/gherkin.actual000066400000000000000000000060131461341362700210130ustar00rootroot00000000000000@foo34 @bar # some comment Feature: proof of concept In order to read Cucumber features faster and eaiser on Github As a Cucumber user I want to have syntax highlighting for Gherkin This is part of the narrative, even if I have the # symbol, it is still the narrative- not a comment Background: this is multi-line description do you like it? Given cheese is good Scenario Outline: this is a test this the second line of the desctiption Given I have a and some "string" And the following table and some 'string' | header 1 | header 2 | # here is a comment after a step table header | cell 1-1 | cell 1-2 | # here is a comment after a step table row | cell 2-1 | "cell 2-2" | When I do And use apostrophes then the feature's syntax still looks good And here is a string with single and double quotes- "i'll be back" And here is a string with the opposite 'the quote is "Foo"' And what about a var in a quote like so: "" And what about a multiline string with a var in it like so: """ Hello! I am a multiple line string, often called a pystring. I can have regular "double quotes" without a problem... I can also sub in vars as well like: and """ Then I should see something... But not something else... Examples: | var1 | var2 | # i am a comment | foo | bar | # so am i | dog | food | Scenarios: some other examples with a description and guess waht?!? I can have multilines as well! # look at me, I'm a comment Who would have thunk? | var1 | var2 | | foo | bar | | dog | food | @some_tag @another_tag Scenario: more examples will follow after this multi-line description Given some context# this is an inline comment # This is a comment # So is this with no space at front... Funktionalität: Addition Um dumme Fehler zu vermeiden möchte ich als Matheidiot die Summe zweier Zahlen gesagt bekommen Szenariogrundriss: Zwei Zahlen hinzufügen Gegeben sei ich habe in den Taschenrechner eingegeben Und ich habe in den Taschenrechner eingegeben Wenn ich drücke Dann sollte das Ergebniss auf dem Bildschirm sein Beispiele: | Eingabe_1 | Eingabe_2 | Knopf | Ausgabe | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 | Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario Outline: Add two numbers Given I have entered into the calculator * I have entered into the calculator When I press