Notedown 0.1.0

dotnet add package Notedown --version 0.1.0                
NuGet\Install-Package Notedown -Version 0.1.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Notedown" Version="0.1.0" />                
对于支持 包引用 的项目,将此 XML 节点复制到项目文件中以引用程序包。
paket add Notedown --version 0.1.0                
#r "nuget: Notedown, 0.1.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将其复制到交互工具或脚本源代码中,以引用程序包。
// 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

Build

Notedown 是一组针对 markdown 笔记和在这些规范上运行的工具的 约定。这些约定旨在

  • 作为纯文本直观
  • 不会在记录笔记时打断流程
  • 方便参考地浏览笔记
  • 轻松地将内容添加到现有笔记中
  • 将笔记视为数据源

此存储库包含利用 Notedown 规范的编程工具:一个 CLI 工具和一个 .NET 库。

库 / 代码模型

Nuget (with prereleases)

代码模型是用 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

通过路径设置值有两种选项:clobbertrySet。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

alternate text is missing from this package README image Nuget (with prereleases)

标签提取

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 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET Standard的更多信息。

NuGet 包

该包不依赖于任何 NuGet 包。

GitHub 仓库

该包不依赖于任何流行的 GitHub 仓库。

版本 下载 最后更新
0.1.0 139 5/8/2023
0.1.0-alpha1 87 5/8/2023