It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Gherkin Syntax Highlighting Edited

Andreas Community Leader Feb 22, 2018

Since we started using Cucumber for various projects, we felt the need for a nice representation of Gherkin code within Confluence.

So I created a custom gherkin brush file based on the SyntaxHighlighter manual and added it to the Code Macro:

SyntaxHighlighter.brushes.Custom = function()
  {
    this.regexList = [
      { regex: SyntaxHighlighter.regexLib.singleLinePerlComments,    css: 'comments' },        // #comments
      { regex: /(['\"]{3})([^\1])*?\1/gm,                         css: 'string' },        // multi-line strings like in python with """
      { regex: SyntaxHighlighter.regexLib.doubleQuotedString,        css: 'string' },        // strings
      { regex: SyntaxHighlighter.regexLib.singleQuotedString,        css: 'string' },        // strings
      { regex: /@.*$/gmi,                                            css: 'color1' },        // @tags
      { regex: /^\s*(But |And |Then |When |Given |Scenarios|Examples|Scenario Template|Scenario Outline|Scenario|Background|Feature)/gmi,    css: 'keyword'  } // english
    ];
  };
SyntaxHighlighter.brushes.Custom.aliases  = ['gherkin'];

SyntaxHighlighter.brushes.Custom.prototype = new SyntaxHighlighter.Highlighter();

It currently looks ok but I wonder if someone from the community uses a similar/ better solution for that.

Feel free to use this, btw: gist

1 comment

I found this one to be better can't remember where I found it

/**
* Author: Michael Hall
* URL: http://www.bankofcanada.ca/
* License: GPL-2 | GPL-3
*/
SyntaxHighlighter.brushes.Gherkin = function()
{
/**
* Filters out the delimiters and values out of tables.
* @param match: the contents of the matching text
* @param regexInfo: regular expression info
* @returns: list of SyntaxHighlighter.Match objects
*/
function processTable(match, regexInfo){
return [
new SyntaxHighlighter.Match('|',match.index,'keyword'),
new SyntaxHighlighter.Match(match[0].substr(1),match.index+1,'value')
];
}

var keywords = 'Given When And Then Feature Scenario Outline Template Background But Examples';
this.regexList = [
{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // comments using #
{ regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // "string"
{ regex: /"""[^"]*"""/gm, css: 'string' }, // multiline string (""" ..... """)
{ regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers
{ regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' }, // keywords
{ regex: /@[^@\r\n\t ]+/gi, css: 'preprocessor' }, //annotations
{ regex: /\|.*?(?=\|)/g, func: processTable }, //Tables
{ regex: /\|/g, css: 'keyword' }, //Excess table delimiters
{ regex: /(&lt;|<).*?(&gt;|>)/gi, css: 'value' } //values from tables
];
};
SyntaxHighlighter.brushes.Gherkin.prototype = new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.Gherkin.aliases = ['gherkin', 'behat'];
Like Nos Him likes this
Andreas Community Leader Aug 22, 2018

You're right @Ben Erridge, this one looks even better. I've updated the gist.

Thank you!

Like # people like this

Hi @Andreas ,

Since you extensively use Cucumber you may want to consider AssertThat BDD & Test Management in Jira plugin which provides end-t-end BDD/cucumber solution. From interactive gherkin editor to test automation frameworks integration and uploading cucumber reports back to Jira. 

More information can be found on the website and wiki.

Regards,

Glib

Like nick Iles likes this
Andreas Community Leader Apr 09, 2019

Thanks for the interesting suggestion, @Glib_Briia .

We're running JIRA on premises though and are currently not looking for additional tools in that technology stack.

How to implement this JS in Jira ?

Like Sergey Izhboldin likes this
Andreas Community Leader May 15, 2019

Prism does support Gherkin for JIRA, @Nos Him.

Like # people like this

@Andreas according to their documents it does https://prismjs.com/#languages-list

 

But on applying it with:

{code:gherkin}.. {code}

 

I get 

Unable to find source-code formatter for language: gherkin. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml

 

Which is only a fraction of the claimed supported formats.

Sorry - my bad, the Prism plugin was not properly installed. I was just getting regular Jira code macro functionality.

Comment

Log in or Sign up to comment
TAGS
Community showcase
Posted in Confluence

What project did you transition or start on Confluence with the shift to remote work?

It’s been great to hear from fellow users over the last few weeks about the best tips and fun moments you’ve had working on Confluence since the transition to working remote. I’d love to keep the c...

227 views 3 8
Join discussion

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you