text: // custom mode
  
  'use strict';
  
  CodeMirror.defineMode('hosts', function () {
      function tokenBase(stream) {
          if (stream.eatSpace()) return null
  
          let sol = stream.sol()
          let ch = stream.next()
  
          let s = stream.string
  
          if (ch === '#') {
              stream.skipToEnd()
              return 'comment'
          }
          if (!s.match(/^\s*([\d.]+|[\da-f:.%lo]+)\s+\w/i)) {
              return 'error'
          }
  
          if (sol && ch.match(/[\w.:%]/)) {
              stream.eatWhile(/[\w.:%]/)
              return 'number'
          }
  
          return null
      }
  
      function tokenize(stream, state) {
          return (state.tokens[0] || tokenBase)(stream, state)
      }
  
      return {
          startState: function () {
              return {tokens: []}
          },
          token: function (stream, state) {
              return tokenize(stream, state)
          },
          lineComment: '#'
      }
  })
  
  CodeMirror.defineMIME('text/x-hosts', 'hosts');
  