Просмотр исходного кода

fix tokenizing attributes with comma

Yuki Takei 3 лет назад
Родитель
Сommit
272e562741

+ 10 - 11
packages/remark-growi-plugin/src/micromark-extension-growi-plugin/lib/factory-attributes.js

@@ -10,14 +10,13 @@ import {
   asciiAlpha,
   asciiAlpha,
   asciiAlphanumeric,
   asciiAlphanumeric,
   markdownLineEnding,
   markdownLineEnding,
-  markdownLineEndingOrSpace,
   markdownSpace,
   markdownSpace,
 } from 'micromark-util-character';
 } from 'micromark-util-character';
 import { codes } from 'micromark-util-symbol/codes.js';
 import { codes } from 'micromark-util-symbol/codes.js';
 import { types } from 'micromark-util-symbol/types.js';
 import { types } from 'micromark-util-symbol/types.js';
 import { ok as assert } from 'uvu/assert';
 import { ok as assert } from 'uvu/assert';
 
 
-import { factoryAttributesDevider } from '../../micromark-factory-attributes-devider/index.js';
+import { markdownLineEndingOrSpaceOrComma, factoryAttributesDevider } from '../../micromark-factory-attributes-devider/index.js';
 
 
 /**
 /**
  * @param {Effects} effects
  * @param {Effects} effects
@@ -94,7 +93,7 @@ export function factoryAttributes(
       return factorySpace(effects, between, types.whitespace)(code);
       return factorySpace(effects, between, types.whitespace)(code);
     }
     }
 
 
-    if (!disallowEol && (code === codes.comma || markdownLineEndingOrSpace(code))) {
+    if (!disallowEol && (markdownLineEndingOrSpaceOrComma(code))) {
       return factoryAttributesDevider(effects, between)(code);
       return factoryAttributesDevider(effects, between)(code);
     }
     }
 
 
@@ -124,7 +123,7 @@ export function factoryAttributes(
       || code === codes.greaterThan
       || code === codes.greaterThan
       || code === codes.graveAccent
       || code === codes.graveAccent
       || code === codes.rightParenthesis
       || code === codes.rightParenthesis
-      || markdownLineEndingOrSpace(code)
+      || markdownLineEndingOrSpaceOrComma(code)
     ) {
     ) {
       return nok(code);
       return nok(code);
     }
     }
@@ -152,7 +151,7 @@ export function factoryAttributes(
       code === codes.numberSign
       code === codes.numberSign
       || code === codes.dot
       || code === codes.dot
       || code === codes.rightParenthesis
       || code === codes.rightParenthesis
-      || markdownLineEndingOrSpace(code)
+      || markdownLineEndingOrSpaceOrComma(code)
     ) {
     ) {
       effects.exit(`${type}Value`);
       effects.exit(`${type}Value`);
       effects.exit(type);
       effects.exit(type);
@@ -183,8 +182,8 @@ export function factoryAttributes(
       return factorySpace(effects, nameAfter, types.whitespace)(code);
       return factorySpace(effects, nameAfter, types.whitespace)(code);
     }
     }
 
 
-    if (!disallowEol && markdownLineEndingOrSpace(code)) {
-      return factoryWhitespace(effects, nameAfter)(code);
+    if (!disallowEol && markdownLineEndingOrSpaceOrComma(code)) {
+      return factoryAttributesDevider(effects, nameAfter)(code);
     }
     }
 
 
     return nameAfter(code);
     return nameAfter(code);
@@ -231,8 +230,8 @@ export function factoryAttributes(
       return factorySpace(effects, valueBefore, types.whitespace)(code);
       return factorySpace(effects, valueBefore, types.whitespace)(code);
     }
     }
 
 
-    if (!disallowEol && markdownLineEndingOrSpace(code)) {
-      return factoryWhitespace(effects, valueBefore)(code);
+    if (!disallowEol && markdownLineEndingOrSpaceOrComma(code)) {
+      return factoryAttributesDevider(effects, valueBefore)(code);
     }
     }
 
 
     effects.enter(attributeValueType);
     effects.enter(attributeValueType);
@@ -256,7 +255,7 @@ export function factoryAttributes(
       return nok(code);
       return nok(code);
     }
     }
 
 
-    if (code === codes.rightParenthesis || markdownLineEndingOrSpace(code)) {
+    if (code === codes.rightParenthesis || markdownLineEndingOrSpaceOrComma(code)) {
       effects.exit(attributeValueData);
       effects.exit(attributeValueData);
       effects.exit(attributeValueType);
       effects.exit(attributeValueType);
       effects.exit(attributeType);
       effects.exit(attributeType);
@@ -318,7 +317,7 @@ export function factoryAttributes(
 
 
   /** @type {State} */
   /** @type {State} */
   function valueQuotedAfter(code) {
   function valueQuotedAfter(code) {
-    return code === codes.rightParenthesis || markdownLineEndingOrSpace(code)
+    return code === codes.rightParenthesis || markdownLineEndingOrSpaceOrComma(code)
       ? between(code)
       ? between(code)
       : end(code);
       : end(code);
   }
   }

+ 6 - 0
packages/remark-growi-plugin/src/micromark-factory-attributes-devider/index.js

@@ -6,6 +6,10 @@ import { factorySpace } from 'micromark-factory-space';
 import { markdownLineEnding, markdownSpace } from 'micromark-util-character';
 import { markdownLineEnding, markdownSpace } from 'micromark-util-character';
 import { codes } from 'micromark-util-symbol/codes.js';
 import { codes } from 'micromark-util-symbol/codes.js';
 
 
+export function markdownLineEndingOrSpaceOrComma(code) {
+  return code !== null && (code < codes.nul || code === codes.space || code === codes.comma);
+}
+
 /**
 /**
  * @param {Effects} effects
  * @param {Effects} effects
  * @param {State} ok
  * @param {State} ok
@@ -25,10 +29,12 @@ export function factoryAttributesDevider(effects, ok) {
       return start;
       return start;
     }
     }
 
 
+    // consume comma
     if (code === codes.comma) {
     if (code === codes.comma) {
       effects.enter('attributeDevider');
       effects.enter('attributeDevider');
       effects.consume(code);
       effects.consume(code);
       effects.exit('attributeDevider');
       effects.exit('attributeDevider');
+      seen = true;
       return start;
       return start;
     }
     }