@spintax/core 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1036,8 +1036,9 @@ var SINGLE_ABBREVS = [
1036
1036
  var WS = " \\t\\r\\n\\f\\x0B";
1037
1037
  var S = `[${WS}]`;
1038
1038
  var DOMAIN_PART = "(?:(?:(?:xn--)?[\\p{L}\\p{N}]+(?:-[\\p{L}\\p{N}]+)*)\\.)+(?:xn--[a-z0-9\\-]{2,59}|[\\p{L}][\\p{L}\\p{N}-]{1,62})";
1039
- var URL_RE = new RegExp(`(?:https?|ftp):\\/\\/[^${WS}<>"')\\]]+`, "giu");
1040
- var MAILTEL_RE = new RegExp(`(?:mailto|tel):[^${WS}<>"')\\]]+`, "giu");
1039
+ var URI_BODY = `[^\\x00${WS}<>"')\\]]`;
1040
+ var URI_RE = new RegExp(`(?:(?:https?|ftp):\\/\\/|(?:mailto|tel):)${URI_BODY}+`, "giu");
1041
+ var MAILTEL_PREFIX_RE = /^(?:mailto|tel):/iu;
1041
1042
  var EMAIL_RE = new RegExp(`[a-z0-9._%+\\-]+@${DOMAIN_PART}\\b`, "giu");
1042
1043
  var DOMAIN_RE = new RegExp(`\\b${DOMAIN_PART}\\b`, "giu");
1043
1044
  var DECIMAL_RE = /\b\d+\.\d+\b/gu;
@@ -1058,6 +1059,18 @@ var CAP_AFTER_BLOCK_RE = new RegExp(
1058
1059
  );
1059
1060
  var CAP_AFTER_BREAK_RE = new RegExp(`(\\n${LEAD})(\\p{Ll})`, "gu");
1060
1061
  var up = (ch) => ch.toUpperCase();
1062
+ var SHIELD_PREFIXES = ["URL", "URI", "EMAIL", "DOM", "NUM", "ABBR"];
1063
+ var RESTORE_RE2 = new RegExp(`\\x00(?:${SHIELD_PREFIXES.join("|")})_\\d+\\x00`, "gu");
1064
+ function restore(text, input, placeholders) {
1065
+ if (!input.includes("\0")) {
1066
+ return text.replace(RESTORE_RE2, (key) => placeholders.get(key) ?? key);
1067
+ }
1068
+ let out = text;
1069
+ for (const [key, value] of placeholders) {
1070
+ out = out.split(key).join(value);
1071
+ }
1072
+ return out;
1073
+ }
1061
1074
  function postProcess(input) {
1062
1075
  const placeholders = /* @__PURE__ */ new Map();
1063
1076
  let counter = 0;
@@ -1077,8 +1090,10 @@ function postProcess(input) {
1077
1090
  return store(value, prefix);
1078
1091
  };
1079
1092
  let text = input;
1080
- text = text.replace(URL_RE, (m) => storeWithTrailingPunct(m, "URL"));
1081
- text = text.replace(MAILTEL_RE, (m) => storeWithTrailingPunct(m, "URI"));
1093
+ text = text.replace(
1094
+ URI_RE,
1095
+ (m) => storeWithTrailingPunct(m, MAILTEL_PREFIX_RE.test(m) ? "URI" : "URL")
1096
+ );
1082
1097
  text = text.replace(EMAIL_RE, (m) => store(m, "EMAIL"));
1083
1098
  text = text.replace(DOMAIN_RE, (m) => store(m, "DOM"));
1084
1099
  text = text.replace(DECIMAL_RE, (m) => store(m, "NUM"));
@@ -1093,10 +1108,7 @@ function postProcess(input) {
1093
1108
  text = text.replace(CAP_AFTER_SENTENCE_RE, (_m, p, gap, ch) => p + gap + up(ch));
1094
1109
  text = text.replace(CAP_AFTER_BLOCK_RE, (_m, tag, ch) => tag + up(ch));
1095
1110
  text = text.replace(CAP_AFTER_BREAK_RE, (_m, br, ch) => br + up(ch));
1096
- for (const [key, value] of placeholders) {
1097
- text = text.split(key).join(value);
1098
- }
1099
- return text.trim();
1111
+ return restore(text, input, placeholders).trim();
1100
1112
  }
1101
1113
 
1102
1114
  // src/internal/pipeline.ts