From b34ce98d1a98e2affac62e3b22ec5705593f8d2d Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sat, 14 May 2016 20:03:20 +0200 Subject: [PATCH] feat: definition list item --- grammars/language-asciidoc.cson | 7 ++ .../repositories/partials/list-grammar.cson | 15 ++++ .../partials/list-labeled-grammar-spec.coffee | 88 +++++++++++++++++++ ...offee => list-ordered-grammar-spec.coffee} | 0 ...fee => list-unordered-grammar-spec.coffee} | 0 5 files changed, 110 insertions(+) create mode 100644 spec/partials/list-labeled-grammar-spec.coffee rename spec/partials/{ordered-list-grammar-spec.coffee => list-ordered-grammar-spec.coffee} (100%) rename spec/partials/{unordered-list-grammar-spec.coffee => list-unordered-grammar-spec.coffee} (100%) diff --git a/grammars/language-asciidoc.cson b/grammars/language-asciidoc.cson index f4a674a..2ed1213 100644 --- a/grammars/language-asciidoc.cson +++ b/grammars/language-asciidoc.cson @@ -274,6 +274,13 @@ repository: "1": name: "markup.list.bullet.asciidoc" } + { + name: "markup.heading.list.asciidoc" + match: "^\\p{Blank}*(.*?\\S)(:{2,4}|;;)($|\\p{Blank}+)" + captures: + "2": + name: "markup.list.bullet.asciidoc" + } ] section: patterns: [ diff --git a/grammars/repositories/partials/list-grammar.cson b/grammars/repositories/partials/list-grammar.cson index b2b36cf..a5c518f 100644 --- a/grammars/repositories/partials/list-grammar.cson +++ b/grammars/repositories/partials/list-grammar.cson @@ -44,4 +44,19 @@ patterns: [ match: '^\\p{Blank}*(\\.{1,5}|\\d+\\.|[a-zA-Z]\\.|[IVXivx]+\\))(?=\\p{Blank})' captures: 1: name: 'markup.list.bullet.asciidoc' + +, + # Matches a definition list item. + # + # Examples + # + # foo:: + # foo::: + # foo:::: + # foo;; + # + name: 'markup.heading.list.asciidoc' + match: '^\\p{Blank}*(.*?\\S)(:{2,4}|;;)($|\\p{Blank}+)' + captures: + 2: name: 'markup.list.bullet.asciidoc' ] diff --git a/spec/partials/list-labeled-grammar-spec.coffee b/spec/partials/list-labeled-grammar-spec.coffee new file mode 100644 index 0000000..32c55c7 --- /dev/null +++ b/spec/partials/list-labeled-grammar-spec.coffee @@ -0,0 +1,88 @@ +describe 'Labeled list', -> + grammar = null + + beforeEach -> + waitsForPromise -> + atom.packages.activatePackage 'language-asciidoc' + + runs -> + grammar = atom.grammars.grammarForScopeName 'source.asciidoc' + + it 'parses the grammar', -> + expect(grammar).toBeDefined() + expect(grammar.scopeName).toBe 'source.asciidoc' + + describe 'Should tokenizes labeled list when', -> + + it 'line ending with ::', -> + {tokens} = grammar.tokenizeLine 'foobar::' + expect(tokens).toHaveLength 2 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: '::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + + it 'line ending with :::', -> + {tokens} = grammar.tokenizeLine 'foobar:::' + expect(tokens).toHaveLength 2 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: ':::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + + it 'line ending with ::::', -> + {tokens} = grammar.tokenizeLine 'foobar::::' + expect(tokens).toHaveLength 2 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: '::::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + + it 'line ending with ;;', -> + {tokens} = grammar.tokenizeLine 'foobar;;' + expect(tokens).toHaveLength 2 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: ';;', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + + it 'contains :: following by text', -> + {tokens} = grammar.tokenizeLine 'foobar:: foobar' + expect(tokens).toHaveLength 4 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: '::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + expect(tokens[2]).toEqualJson value: ' ', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[3]).toEqualJson value: 'foobar', scopes: ['source.asciidoc'] + + it 'contains ::: following by text', -> + {tokens} = grammar.tokenizeLine 'foobar::: foobar' + expect(tokens).toHaveLength 4 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: ':::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + expect(tokens[2]).toEqualJson value: ' ', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[3]).toEqualJson value: 'foobar', scopes: ['source.asciidoc'] + + it 'contains :::: following by textcontains :: following by text', -> + {tokens} = grammar.tokenizeLine 'foobar:::: foobar' + expect(tokens).toHaveLength 4 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: '::::', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + expect(tokens[2]).toEqualJson value: ' ', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[3]).toEqualJson value: 'foobar', scopes: ['source.asciidoc'] + + it 'contains ;; following by text', -> + {tokens} = grammar.tokenizeLine 'foobar;; foobar' + expect(tokens).toHaveLength 4 + expect(tokens[0]).toEqualJson value: 'foobar', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[1]).toEqualJson value: ';;', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc', 'markup.list.bullet.asciidoc'] + expect(tokens[2]).toEqualJson value: ' ', scopes: ['source.asciidoc', 'markup.heading.list.asciidoc'] + expect(tokens[3]).toEqualJson value: 'foobar', scopes: ['source.asciidoc'] + + describe 'Should not tokenize when', -> + + it 'title ending with space', -> + {tokens} = grammar.tokenizeLine 'foobar ::' + expect(tokens).toHaveLength 1 + expect(tokens[0]).toEqualJson value: 'foobar ::', scopes: ['source.asciidoc'] + + it 'contains only one :', -> + {tokens} = grammar.tokenizeLine 'foobar:' + expect(tokens).toHaveLength 1 + expect(tokens[0]).toEqualJson value: 'foobar:', scopes: ['source.asciidoc'] + + it 'following by test without space', -> + {tokens} = grammar.tokenizeLine 'foobar:foobar' + expect(tokens).toHaveLength 1 + expect(tokens[0]).toEqualJson value: 'foobar:foobar', scopes: ['source.asciidoc'] diff --git a/spec/partials/ordered-list-grammar-spec.coffee b/spec/partials/list-ordered-grammar-spec.coffee similarity index 100% rename from spec/partials/ordered-list-grammar-spec.coffee rename to spec/partials/list-ordered-grammar-spec.coffee diff --git a/spec/partials/unordered-list-grammar-spec.coffee b/spec/partials/list-unordered-grammar-spec.coffee similarity index 100% rename from spec/partials/unordered-list-grammar-spec.coffee rename to spec/partials/list-unordered-grammar-spec.coffee