gray-matter icon indicating copy to clipboard operation
gray-matter copied to clipboard

Add engine specific delimiters

Open colinbate opened this issue 6 years ago • 5 comments

This PR does make some changes to the nature of matter.language(), which probably isn't desired. I can remove that and make another method for this if necessary, but I thought I'd get a working version out there for review.

Files parsed with custom delimiters should round-trip via stringify correctly.

colinbate avatar Apr 30 '18 18:04 colinbate

This is a great start! Nice work.

This PR does make some changes to the nature of matter.language(), which probably isn't desired.

I'm thinking we should allow users to decide how they want to specify the engine to use:

  • via delimiters
  • by specifying the language after the first "fence"
  • options

The main goals are performance and reliability, as long as it satisfies those two things I'm open to whatever approach you want to take. Although I'd probably favor options versus additional methods.

jonschlinkert avatar May 01 '18 12:05 jonschlinkert

Previously, if you specified the language after the fence in the front matter, it would override the language passed into the options. With this change, any recognized custom delimiter will also override the passed in language. After thinking about it seems okay, it is the document which gets to specify the language, and the options are just providing the fallback language. So on that front, all is fine.

The issue with matter.language() is that it now requires the full file contents as its first parameter. Previously it would work with a string which had the initial --- fence trimmed off. Also, the object it returns has an additional property, but that isn't a big deal. What is different about the return value is that the raw property now includes the whole fence: ---coffee vs. just coffee as before. Let me know if this is a concern; I could make the changes fully backward compatible if necessary.

As for performance, the cases where there is front matter with a default delimiter should be unchanged. The only situation which would be affected is if you have a string or file without any front matter, and you have many engines defined.

I've pushed a small tweak to ensure you don't register a custom engine delimiter the same as the default one.

colinbate avatar May 01 '18 17:05 colinbate

I didn't regenerate the README file, but I did update the underlying verb file. I wasn't sure if you normally do that. The output differed in a couple of ways, so I didn't want to presume.

colinbate avatar May 01 '18 19:05 colinbate

@jonschlinkert Just checking in to see if you've had a chance to look at this further. I think it is mergeable, just let me know if you want me to regenerate the README or any other housekeeping.

colinbate avatar May 16 '18 02:05 colinbate

Just revisiting this as I’ve come across another place where I’d like the per-engine delimiters.

colinbate avatar Jun 01 '20 19:06 colinbate