gray matter

Delphi源码 2025-08-16

灰色

从字符串或文件中解析前符号。快速,可靠且易于使用。默认情况下对YAML的前提进行解析,但也支持YAML,JSON,TOML或Coffee Front-Matter,并提供设置自定义定界符的选项。由金属匠,组装,动词和许多其他项目使用。

请考虑关注该项目的作者乔恩·施林克特(Jon Schlinkert),并考虑主演该项目以显示您的❤️和支持。

安装

使用NPM安装:

$ npm install --save gray-matter

小心!

请参阅ChangElog,了解有关v3.0中进行的破坏变化。


赞助商

多亏了以下公司,组织和个人支持灰色 - 灰色持续的维护和发展!成为赞助商,将您的徽标添加到此读数或我的其他任何项目中


这做什么?

运行此示例

在以下示例中添加HTML example.html$$ node example代码添加到example.js

 const fs = require ( 'fs' ) ;
const matter = require ( 'gray-matter' ) ;
const str = fs . readFileSync ( 'example.html' , 'utf8' ) ;
console . log ( matter ( str ) ) ;

像这样将字符串转换为前符号:

 ---
title : Hello
slug : home
---
< h1 >Hello world!</ h1 >

像这样的对象:

 {
  content : '<h1>Hello world!</h1>' ,
  data : {
    title : 'Hello' ,
    slug : 'home'
  }
} 

为什么要使用灰色膜?

  • 简单:主函数采用字符串并返回对象
  • 准确:比依靠正则解析的前摩托解析器更好地捕捉和处理边缘壳体
  • 快速:比其他使用正则解析的前后解析器快的速度
  • 灵活:默认情况下,Gray-Matter能够解析YAML,JSON和JavaScript Front-Matter。但是可以添加其他引擎。
  • 可扩展:使用自定义定系数,或添加对任何语言的支持,例如TOML,Coffeescript或CSON
  • 战斗测试:由汇编,金属史密斯,现象,动词,生成,更新和其他许多人使用。
理由

为什么我们首先要创建灰色毛?

在尝试其他未能满足我们的标准和要求的库后,我们创建了灰色蒙马。

一些图书馆满足了大多数要求,但没有人满足所有要求

这是最重要的

  • 可用,即使不是简单的话
  • 使用可靠且支持良好的库来解析YAML
  • 支持其他语言除了YAML
  • 支持串起回到YAML或其他语言
  • 当不存在内容时不要失败
  • 不存在前提时不要失败
  • 不要使用正则分析。这是一个相对简单的解析操作,Regex是最慢,最容易出错的方法。
  • 直接阅读yaml文件没有问题
  • 对于复杂的内容没有任何问题,包括包含YAML前提示例的非前后围栏代码块。其他解析器对此失败。
  • 支持将串起回到前后。这对于覆盖,更新属性等很有用。
  • 避免避免定界符碰撞的必要时,允许自定义定系数。
  • 应至少返回一个至少这三个属性的对象:
    • data :解析的YAML前提是JSON对象
    • content :内容作为字符串,没有前面物质
    • orig :“原始”内容(用于调试)

用法

使用Node的require()系统:

 const matter = require ( 'gray-matter' ) ;

或与打字稿

 import matter = require ( 'gray-matter' ) ;
// OR
import * as matter from 'gray-matter' ;

将字符串和选项传递给灰色 - 毛线:

 console . log ( matter ( '---\ntitle: Front Matter\n---\nThis is content.' ) ) ;

返回:

 {
  content : '\nThis is content.' ,
  data : {
    title : 'Front Matter'
  }
}

有关返回对象的更多信息,请参见下面的部分。


返回的对象

灰色 - 模 - 返回具有以下属性的file对象。

枚举

  • file.data {object} :通过解析前模创建的对象
  • file.content {string} :输入字符串,删除matter
  • file.excerpt {string} :摘录,如果在选项上定义
  • file.empty {string} :当前形式为“空”(所有空格,根本没有,或者只是注释,没有数据)时,该属性将设置原始字符串。有关用例的详细信息,请参见#65。
  • file.isEmpty {boolean} :true如果前消息是空的。

不可能

此外,将以下不可耗尽的属性添加到对象中以帮助调试。

  • file.orig {buffer} :原始输入字符串(或buffer)
  • file.language {string} :解析的前后语言。 yaml是默认
  • file.matter {string}原始的,未散布的前后字符串
  • file.stringify {function} :通过将file.data转换为给定语言中的字符串,将其包装在定界符中,然后将其预先准备为file.content

运行示例

如果您想测试示例,请首先克隆灰色 - 重点到my-project中(或任何想要的地方):

$ git clone https://github*.c**om/jonschlinkert/gray-matter my-project

CD进入my-project并安装依赖项:

$ cd my-project && npm install

然后运行任何示例以查看灰色 - 象征的工作方式:

$ node examples/ < example_name >

链接到示例

  • 咖啡
  • 摘录 - 分离器
  • 摘录统计
  • 摘抄
  • JavaScript
  • JSON-Stringify
  • JSON
  • 恢复空
  • 部分 - 开发
  • 部分
  • 汤姆
  • YAML分解
  • yaml

API

事情

从字符串中获取content或对象,并从字符串中提取和解析,然后返回具有datacontent和其他有用属性的对象。

参数

  • input {object | string} :字符串,或带有content字符串的对象
  • options {对象}
  • returns {对象}

例子

 const matter = require ( 'gray-matter' ) ;
console . log ( matter ( '---\ntitle: Home\n---\nOther stuff' ) ) ;
//=> { data: { title: 'Home'}, content: 'Other stuff' }

.Stringify

将对象串起到YAML或指定的语言,然后将其附加到给定的字符串。默认情况下,只能将YAML和JSON串制。请参阅“引擎部分”部分,以了解如何串用其他语言。

参数

  • file {String | Object} :要附加到字符串的Front-Matter或带有file.content字符串的文件对象的内容字符串。
  • data {object} :前面要弦乐。
  • options {Object} :将传递到灰色粘合和JS-yaml的选项。
  • returns {string} :返回一个通过将字符串的yaml与定界数包装而创建的字符串,并将其附加到给定的字符串中。

例子

 console . log ( matter . stringify ( 'foo bar baz' , { title : 'Home' } ) ) ;
// results in:
// ---
// title: Home
// ---
// foo bar baz

。读

同步读取文件系统中的文件并解析前事项。返回与主函数相同的对象。

参数

  • filepath {string} :要读取的文件路径。
  • options {Object} :传递给灰色象征的选项。
  • returns {对象} :返回带有datacontent对象

例子

 const file = matter . read ( './content/blog-post.md' ) ;

。测试

如果给定的string具有正面功能,则返回true。

参数

  • string {字符串}
  • options {对象}
  • returns {boolean} :如果存在前面物质,则为true。

选项

options.excerpt

类型Boolean|Function

默认值undefined

提取直接遵循前后符号的摘录,或者如果不存在前者,则是字符串中的第一件事。

如果设置为excerpt: true ,它将默认情况下寻找前肌定界符---并抓住所有导致其的所有内容。

例子

 const str = '---\nfoo: bar\n---\nThis is an excerpt.\n---\nThis is content' ;
const file = matter ( str , { excerpt : true } ) ;

结果:

 {
  content : 'This is an excerpt.\n---\nThis is content' ,
  data : { foo : 'bar' } ,
  excerpt : 'This is an excerpt.\n'
}

您还可以将excerpt设置为函数。此函数使用最初将其作为参数传递给灰色 - 毛线的“文件”和“选项”,因此您可以控制如何从内容中提取摘录。

例子

 // returns the first 4 lines of the contents
function firstFourLines ( file , options ) {
  file . excerpt = file . content . split ( '\n' ) . slice ( 0 , 4 ) . join ( ' ' ) ;
}

const file =  matter ( [
  '---' ,
  'foo: bar' ,
  '---' ,
  'Only this' ,
  'will be' ,
  'in the' ,
  'excerpt' ,
  'but not this...'
] . join ( '\n' ) , { excerpt : firstFourLines } ) ;

结果:

 {
  content : 'Only this\nwill be\nin the\nexcerpt\nbut not this...' ,
  data : { foo : 'bar' } ,
  excerpt : 'Only this will be in the excerpt'
}

options.excerpt_separator

类型String

默认值undefined

定义用于摘录的自定义分离器。

 console . log ( matter ( string , { excerpt_separator : '<!-- end -->' } ) ) ;

例子

以下HTML字符串:

---
title: Blog
---
My awesome blog.
<!-- end -->
< h1 > Hello world </ h1 >

结果:

 {
  data : { title : 'Blog' } ,
  excerpt : 'My awesome blog.' ,
  content : 'My awesome blog.\n<!-- end -->\n<h1>Hello world</h1>'
}

选项。发动机

定义用于解析和/或串起前摩擦的自定义引擎。

类型:引擎的Object对象

默认值JSONYAMLJavaScript默认情况下已处理。

发动机格式

引擎可以是带有parse对象,并且((可选)) stringify方法,也可以是仅用于解析的函数。

例子

 const toml = require ( 'toml' ) ;

/**
 * defined as a function
 */

const file = matter ( str , {
  engines : {
    toml : toml . parse . bind ( toml ) ,
  }
} ) ;

/**
 * Or as an object
 */

const file = matter ( str , {
  engines : {
    toml : {
      parse : toml . parse . bind ( toml ) ,

      // example of throwing an error to let users know stringifying is
      // not supported (a TOML stringifier might exist, this is just an example)
      stringify : function ( ) {
        throw new Error ( 'cannot stringify to TOML' ) ;
      }
    }
  }
} ) ;

console . log ( file ) ;

选项。语言

类型String

默认值yaml

定义用于解析前后解析的引擎。

 console . log ( matter ( string , { language : 'toml' } ) ) ;

例子

以下HTML字符串:

---
title = "TOML"
description = "Front matter"
categories = "front matter toml"
---
This is content

结果:

 { content : 'This is content' ,
  excerpt : '' ,
  data :
   { title : 'TOML' ,
     description : 'Front matter' ,
     categories : 'front matter toml' } }

动态语言检测

Gray-Matter不会在选项上定义语言,而是会自动检测第一个定界符后定义的语言,并选择用于解析的正确引擎。

---toml
title = "TOML"
description = "Front matter"
categories = "front matter toml"
---
This is content

options.delimiters

类型String

默认---

可以作为一系列字符串传递开放和关闭的定系数。

例子:

 // format delims as a string
matter . read ( 'file.md' , { delims : '~~~' } ) ;
// or an array (open/close)
matter . read ( 'file.md' , { delims : [ '~~~' , '~~~' ] } ) ;

会解析:

~~~
title: Home
~~~
This is the {{title}} page.

弃用的选项

options.lang

减少,请使用options.language。

options.delims

减少,请使用options.delimiters。

options.parsers

减少,请使用options.engines。

关于

贡献

始终欢迎拉动请求和星星。对于错误和功能请求,请创建一个问题。

运行测试

运行和审查单元测试是熟悉库及其API的好方法。您可以使用以下命令安装依赖项并运行测试:

$ npm install && npm test
建筑文档

(该项目的readme.md是由动词生成的,请不要直接编辑读书文件。必须在.verb.md readme模板中对redme进行任何更改。)

要生成读数,请运行以下命令:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

相关项目

您可能对这些项目感兴趣:

  • 组装:将岩石从袜子中拿出来!组装使您快速创建Web项目……更多|首页
  • 金属史密斯:一个非常简单,可插入的静态站点生成器。 |首页
  • 动词:GitHub项目的文档生成器。动词非常强大,易于使用,并且被使用……更多|首页

贡献者

提交 贡献者
179 Jonschlinkert
13 Robertmassaioli
7 罗布拉赫
5 杜布
5 海姆德
3 aljopro
3 肖恩机器人
2 Reccanti
2 Onokumus
2 moozzyk
2 Ajaymathur
1 ajedi32
1 阿莱尔
1 凯撒
1 Ianstormtaylor
1 qm3ster
1 Zachwhaley

作者

乔恩·施林克特(Jon Schlinkert)

  • github概况
  • Twitter个人资料
  • LinkedIn个人资料

执照

版权所有©2023,Jon Schlinkert。根据MIT许可发布。


该文件是由2023年7月12日的V0.8.0 v0.8.0生成的。

下载源码

通过命令行克隆项目:

git clone https://github.com/jonschlinkert/gray-matter.git