Notedown 0.1.0
dotnet add package Notedown --version 0.1.0
NuGet\Install-Package Notedown -Version 0.1.0
<PackageReference Include="Notedown" Version="0.1.0" />
paket add Notedown --version 0.1.0
#r "nuget: Notedown, 0.1.0"
// Install Notedown as a Cake Addin #addin nuget:?package=Notedown&version=0.1.0 // Install Notedown as a Cake Tool #tool nuget:?package=Notedown&version=0.1.0
Notedown
Notedown 是一组针对 markdown 笔记和在这些规范上运行的工具的 约定。这些约定旨在
- 作为纯文本直观
- 不会在记录笔记时打断流程
- 方便参考地浏览笔记
- 轻松地将内容添加到现有笔记中
- 将笔记视为数据源
此存储库包含利用 Notedown 规范的编程工具:一个 CLI 工具和一个 .NET 库。
库 / 代码模型
代码模型是用 F# 编写的,并遵循 F# 设计实践,但它可以从任何 .NET 语言中使用
代码模型创建了一个 markdown 文档中的部分层次结构,每个都具有元数据和内容。
例如,它将像这样的 Notedown 基于文档进行解析。
---
some-config: "I'm root-level meta"
date: 20xx-MM-dd
tags: [tag1, tag2]
---
Root level content
# I'm a section
Content
## I'm a child Section
```yml
some-config: "I'm child section meta"
rating: 5
\```
Child Content
解析后的数据如下所示
type Section = {
Level: SectionLevel
Meta: MetadataValue
ExclusiveText: string
Children: Section list
// There is also a FullText() method
}
为了创建笔记模型
open Notedown
let noteModel = NoteModel.parse markdownText
还有几个可选的元数据继承规则。例如
let notesWithMetaInheritance = noteModel |> NoteModel.Inheritance.parentChild
您可以使用 Section.mapFold
遍历笔记层次结构以创建自己的继承规则或使用其他方式转换模型。
元数据
元数据形状如下
type MetadataValue =
| SingleValue of string
| Vector of MetadataValue list
| Complex of EquatableDictionary<string, MetadataValue>
类似于列表的值变成 Vector
。键值映射变成 Complex
。值变成 SingleValue
。请注意 Vectors 可以是异构的。换句话说,它们可以包含任何元类型的混合(SingleValue、Vector、Complex)。
所有元数据都是以字符串形式读取的,解析由用户负责。目前只支持Yaml元数据格式。
有一些辅助器可以设置特定的元数据值。假设我们有以下元数据
---
date: 0000-00-00
config:
sub-group:
rating: 5
tags: ["tag", "other tag"]
---
我们可以使用路径选择器获取特定值
MetadataValue.trySelect "config.sub-group.rating" // returns Some SingleValue "5"
MetadataValue.trySelect "config.sub-group.tags" // returns Some Vector ["tag", "other tag"]
MetadataValue.trySelectSingle "config.sub-group.rating" // returns Some "5"
MetadataValue.trySelectSingle "config.sub-group.nope" // returns None
MetadataValue.trySelectSingle "config.sub-group.tags" // returns None because tags is an array, not a single value
通过路径设置值有两种选项:clobber
和trySet
。Clobber将会创建所需的路径,即使它会覆盖中间值。TrySet只有在不会覆盖中间值的情况下才会写入。如果检测到覆盖,它将返回一个包含位置和冲突值的错误。
标签提取
另一个主要功能是标签提取
let extract (tags: string list) (markdownDocument: string) : string list
它接受任何需要提取的标签列表和任何Markdown文本,然后返回被这些标签标记的任何部分、段落或列表项的Markdown文本
let extracted = TagExtraction.extract ["tag:"; "otherTag:"] markdown
以下是标记如何工作的一个示例
## TAGGED: I'm a tagged heading
Content of tagged sections is extracted with the heading
- PRO: This list item is tagged pro
- CON: this list item is tagged con
- child list items are included with tagged parent
TAGGED: This paragraph is tagged
- List items following the paragraph without space between are included in extraction
Notedown CLI
标签提取
notedown extract-tags file-here.md -t "TAG:" -o output-file.md
根据以下规则提取给定标签的所有内容
- 段落:如果标签出现在段落的任何地方,提取整个段落
- 段落+列表:如果没有空格在段落后面的列表中,提取段落和随后的列表
- 列表项:提取包含标签的任何列表项及其任何子项(但不包括父项)
- 标题/节:提取包含标签的任何标题以及标题节中所有内容
安装
如果您已安装dotnet SDK,可以直接运行
dotnet tool install -g notedown.cli
否则,从以下链接下载您平台的zip包:发布。解压后,可以
- 将exe文件放置在您的路径中
- 或创建一个指向exe文件的别名到您的shell配置文件中
产品 | 版本 兼容的以及额外的计算目标框架版本。 |
---|---|
.NET | net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
-
net6.0
- FSharp.Core (>= 7.0.200)
- Markdig (>= 0.26.0)
- YamlDotNet (>= 13.0.2)
NuGet 包
该包不依赖于任何 NuGet 包。
GitHub 仓库
该包不依赖于任何流行的 GitHub 仓库。
版本 | 下载 | 最后更新 |
---|---|---|
0.1.0 | 139 | 5/8/2023 |
0.1.0-alpha1 | 87 | 5/8/2023 |