.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / remark-stringify / lib / util / copy-identifier-encoding.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/remark-stringify/lib/util/copy-identifier-encoding.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/remark-stringify/lib/util/copy-identifier-encoding.js
new file mode 100644 (file)
index 0000000..6cc014f
--- /dev/null
@@ -0,0 +1,60 @@
+'use strict';
+
+var entityPrefixLength = require('./entity-prefix-length');
+
+module.exports = copy;
+
+var PUNCTUATION = /[-!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~_]/;
+
+/* For shortcut and collapsed reference links, the contents
+ * is also an identifier, so we need to restore the original
+ * encoding and escaping that were present in the source
+ * string.
+ *
+ * This function takes the unescaped & unencoded value from
+ * shortcut's child nodes and the identifier and encodes
+ * the former according to the latter. */
+function copy(value, identifier) {
+  var length = value.length;
+  var count = identifier.length;
+  var result = [];
+  var position = 0;
+  var index = 0;
+  var start;
+
+  while (index < length) {
+    /* Take next non-punctuation characters from `value`. */
+    start = index;
+
+    while (index < length && !PUNCTUATION.test(value.charAt(index))) {
+      index += 1;
+    }
+
+    result.push(value.slice(start, index));
+
+    /* Advance `position` to the next punctuation character. */
+    while (position < count && !PUNCTUATION.test(identifier.charAt(position))) {
+      position += 1;
+    }
+
+    /* Take next punctuation characters from `identifier`. */
+    start = position;
+
+    while (position < count && PUNCTUATION.test(identifier.charAt(position))) {
+      if (identifier.charAt(position) === '&') {
+        position += entityPrefixLength(identifier.slice(position));
+      }
+
+      position += 1;
+    }
+
+    result.push(identifier.slice(start, position));
+
+    /* Advance `index` to the next non-punctuation character. */
+    while (index < length && PUNCTUATION.test(value.charAt(index))) {
+      index += 1;
+    }
+  }
+
+  return result.join('');
+}