CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
inline-style-parser.js269 linesDownload Raw Back to dist
1(function (global, factory) {2  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :3  typeof define === 'function' && define.amd ? define(factory) :4  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.InlineStyleParser = factory());5})(this, (function () { 'use strict';6 7  // http://www.w3.org/TR/CSS21/grammar.html8  // https://github.com/visionmedia/css-parse/pull/49#issuecomment-300880279  var COMMENT_REGEX = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g;10 11  var NEWLINE_REGEX = /\n/g;12  var WHITESPACE_REGEX = /^\s*/;13 14  // declaration15  var PROPERTY_REGEX = /^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/;16  var COLON_REGEX = /^:\s*/;17  var VALUE_REGEX = /^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/;18  var SEMICOLON_REGEX = /^[;\s]*/;19 20  // https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill21  var TRIM_REGEX = /^\s+|\s+$/g;22 23  // strings24  var NEWLINE = '\n';25  var FORWARD_SLASH = '/';26  var ASTERISK = '*';27  var EMPTY_STRING = '';28 29  // types30  var TYPE_COMMENT = 'comment';31  var TYPE_DECLARATION = 'declaration';32 33  /**34   * @param {String} style35   * @param {Object} [options]36   * @return {Object[]}37   * @throws {TypeError}38   * @throws {Error}39   */40  function index (style, options) {41    if (typeof style !== 'string') {42      throw new TypeError('First argument must be a string');43    }44 45    if (!style) return [];46 47    options = options || {};48 49    /**50     * Positional.51     */52    var lineno = 1;53    var column = 1;54 55    /**56     * Update lineno and column based on `str`.57     *58     * @param {String} str59     */60    function updatePosition(str) {61      var lines = str.match(NEWLINE_REGEX);62      if (lines) lineno += lines.length;63      var i = str.lastIndexOf(NEWLINE);64      column = ~i ? str.length - i : column + str.length;65    }66 67    /**68     * Mark position and patch `node.position`.69     *70     * @return {Function}71     */72    function position() {73      var start = { line: lineno, column: column };74      return function (node) {75        node.position = new Position(start);76        whitespace();77        return node;78      };79    }80 81    /**82     * Store position information for a node.83     *84     * @constructor85     * @property {Object} start86     * @property {Object} end87     * @property {undefined|String} source88     */89    function Position(start) {90      this.start = start;91      this.end = { line: lineno, column: column };92      this.source = options.source;93    }94 95    /**96     * Non-enumerable source string.97     */98    Position.prototype.content = style;99 100    /**101     * Error `msg`.102     *103     * @param {String} msg104     * @throws {Error}105     */106    function error(msg) {107      var err = new Error(108        options.source + ':' + lineno + ':' + column + ': ' + msg109      );110      err.reason = msg;111      err.filename = options.source;112      err.line = lineno;113      err.column = column;114      err.source = style;115 116      if (options.silent) ; else {117        throw err;118      }119    }120 121    /**122     * Match `re` and return captures.123     *124     * @param {RegExp} re125     * @return {undefined|Array}126     */127    function match(re) {128      var m = re.exec(style);129      if (!m) return;130      var str = m[0];131      updatePosition(str);132      style = style.slice(str.length);133      return m;134    }135 136    /**137     * Parse whitespace.138     */139    function whitespace() {140      match(WHITESPACE_REGEX);141    }142 143    /**144     * Parse comments.145     *146     * @param {Object[]} [rules]147     * @return {Object[]}148     */149    function comments(rules) {150      var c;151      rules = rules || [];152      while ((c = comment())) {153        if (c !== false) {154          rules.push(c);155        }156      }157      return rules;158    }159 160    /**161     * Parse comment.162     *163     * @return {Object}164     * @throws {Error}165     */166    function comment() {167      var pos = position();168      if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;169 170      var i = 2;171      while (172        EMPTY_STRING != style.charAt(i) &&173        (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))174      ) {175        ++i;176      }177      i += 2;178 179      if (EMPTY_STRING === style.charAt(i - 1)) {180        return error('End of comment missing');181      }182 183      var str = style.slice(2, i - 2);184      column += 2;185      updatePosition(str);186      style = style.slice(i);187      column += 2;188 189      return pos({190        type: TYPE_COMMENT,191        comment: str192      });193    }194 195    /**196     * Parse declaration.197     *198     * @return {Object}199     * @throws {Error}200     */201    function declaration() {202      var pos = position();203 204      // prop205      var prop = match(PROPERTY_REGEX);206      if (!prop) return;207      comment();208 209      // :210      if (!match(COLON_REGEX)) return error("property missing ':'");211 212      // val213      var val = match(VALUE_REGEX);214 215      var ret = pos({216        type: TYPE_DECLARATION,217        property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),218        value: val219          ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))220          : EMPTY_STRING221      });222 223      // ;224      match(SEMICOLON_REGEX);225 226      return ret;227    }228 229    /**230     * Parse declarations.231     *232     * @return {Object[]}233     */234    function declarations() {235      var decls = [];236 237      comments(decls);238 239      // declarations240      var decl;241      while ((decl = declaration())) {242        if (decl !== false) {243          decls.push(decl);244          comments(decls);245        }246      }247 248      return decls;249    }250 251    whitespace();252    return declarations();253  }254 255  /**256   * Trim `str`.257   *258   * @param {String} str259   * @return {String}260   */261  function trim(str) {262    return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;263  }264 265  return index;266 267}));268//# sourceMappingURL=inline-style-parser.js.map269