asdi 0.2.5

Another Simplistic Datalog Implementation (in Rust)
Documentation
/*
Language: Graphviz Dot
Author: Simon Johnston <johnstonskj@gmail.com>
Website: https://github.com/johnstonskj/rust-asdi
Category: graph
*/

hljsDot = function(hljs) {

  const GRAPH_KEYWORDS = [
    "strict",
    "graph",
    "digraph"
  ]

  const SUB_GRAPH_KEYWORDS = [
    "subgraph"
  ]

  const BOOLEAN_LITERALS = [
    "true",
    "false"
  ]

  const BUILT_IN_ATTRIBUTES = [
    "_background",
    "label",
    "shape",
    "width",
  ]

  const ATTR_LIST = {
    scope: 'punctuation',
    begin: /\[/,
    end: /\]/,
    keywords: {
      keyword: SUB_GRAPH_KEYWORDS,
      literal: BOOLEAN_LITERALS
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,

      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE
    ]
  };

  const LINE_TERMINATOR = {
    scope: 'punctuation',
    begin: /;/
  };

  const EDGEOP = {
    scope: 'operator',
    begin: /\-/,
    end: /\-|>/
  };

  const BOOLEAN = {
    scope: 'literal',
    begin: /(true)|(false)/
  };

  const GRAPH_INNER = {
    scope: 'punctuation',
    begin: /{/,
    end: /}/,
    keywords: {
      keyword: SUB_GRAPH_KEYWORDS,
      literal: BOOLEAN_LITERALS
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,

      ATTR_LIST,

      hljs.QUOTE_STRING_MODE,
      hljs.NUMBER_MODE,
      hljs.TITLE_MODE,

      EDGEOP,

      LINE_TERMINATOR

      // TODO: SUB_GRAPH
    ]
  }

  const SUB_GRAPH = {
    begin: /subgraph/,
    endsWithParent: true,
    keywords: {
      keyword: SUB_GRAPH_KEYWORDS,
      literal: BOOLEAN_LITERALS
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,

      hljs.TITLE_MODE,

      GRAPH_INNER
    ]
  }

  const GRAPH = {
    begin: /strict|graph|digraph/,
    endsWithParent: true,
    keywords: {
      keyword: GRAPH_KEYWORDS,
      literal: BOOLEAN_LITERALS
    },
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,

      hljs.TITLE_MODE,

      GRAPH_INNER
    ]
  }

  return {
    name: 'Dot',
    aliases: [ "graphviz" ],
    case_insensitive: true,
    keywords: GRAPH_KEYWORDS,
    built_in: BUILT_IN_ATTRIBUTES,
    contains: [
      hljs.HASH_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_LINE_COMMENT_MODE,

      GRAPH,
    ]
  };
}

// module.exports = hljsDot;