YSTest: NPL 命名空间参考

YSTest PreAlpha_b700_20160611 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 命名空间列表
- 命名空间成员

命名空间 | 类 | 类型定义 | 枚举 | 函数 | 变量
NPL 命名空间参考

## 命名空间

| A1
| SContext
| S 表达式上下文：处理 S 表达式。
| SXML
| SXML 表示。

## 类

class | ArityMismatch
| 元数不匹配错误。 更多...
class | Configuration
| 设置：使用 S 表达式存储外部状态。 更多...
class | InvalidSyntax
| 语法错误。 更多...
class | LexicalAnalyzer
| 词法分析器。 更多...
class | ListReductionFailure
| 列表规约失败。 更多...
struct | NPLATag
| NPLA 元标签。 更多...
class | NPLException
| NPL 异常基类。 更多...
struct | NPLTag
| NPL 元标签。 更多...
struct | PassesCombiner
| 遍合并器：逐次调用直至返回 true 。 更多...
class | UndeclaredIdentifier
| 未声明标识符错误。 更多...
class | UnescapeContext
| 反转义上下文。 更多...

## 类型定义

using | NodeMapper = std::function< ValueNode(const TermNode &)>
| 节点映射操作类型：变换节点为另一个节点。 更多...
using | IndentGenerator = std::function< string(size_t)>
| 生成前缀缩进的函数类型。 更多...
using | TokenList = list< string >
using | TLIter = TokenList::iterator
using | TLCIter = TokenList::const_iterator
using | NodeToString = std::function< string(const ValueNode &)>
template<class _tCon >
using | GNodeInserter = std::function< void(TermNode &&, _tCon &)>
using | NodeInserter = GNodeInserter< TermNode::Container & >
using | NodeSequenceInserter = GNodeInserter< NodeSequence >
using | ContextNode = ValueNode
| 上下文节点类型。 更多...
using | ContextHandler = YSLib::GHEvent< void(TermNode &, ContextNode &)>
| 上下文处理器类型。 更多...
using | LiteralHandler = YSLib::GHEvent< bool(const ContextNode &)>
| 字面量处理器类型。 更多...

## 枚举

enum | DepsEventType : yimpl(size_t) { DepsEventType::General, DepsEventType::Search, DepsEventType::Build, DepsEventType::Command, DepsEventType::DepsCheck, DepsEventType::Max }

## 函数

YF_API bool | HandleBackslashPrefix (char, string &)
| 设置反斜杠转义前缀：当输入 '\' 时设置前缀为 "\\" 。 更多...
YF_API bool | NPLUnescape (string &, const UnescapeContext &, char)
| NPL 转义匹配算法。 更多...
yconstfn bool | IsGraphicalDelimeter (char c)
| 判断是否为 NPL 图形分隔符。 更多...
yconstfn bool | IsDelimeter (char c)
| 判断是否为 NPL 分隔符。 更多...
YF_API list< string > | Decompose (string_view)
| 分解字符串为记号。 更多...
YF_API list< string > | Tokenize (const list< string > &)
| 记号化：提取字符串列表中的记号。 更多...
YF_API string | EscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YF_API string | LiteralizeEscapeNodeLiteral (const ValueNode &)
| 转义 NPLA 节点字面量。 更多...
YF_API string | ParseNPLANodeString (const ValueNode &)
| 解析 NPLA 节点字符串。 更多...
YF_API string | DefaultGenerateIndent (size_t)
| 生成水平制表符为单位的缩进。 更多...
YF_API void | PrintIndent (std::ostream &, IndentGenerator=DefaultGenerateIndent, size_t=1)
| 打印缩进。 更多...
YF_API void | PrintNode (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral, IndentGenerator=DefaultGenerateIndent, size_t=0)
| 打印 NPLA 节点。 更多...
YF_API void | PrintNodeChild (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral, IndentGenerator=DefaultGenerateIndent, size_t=0)
| 打印作为子节点的 NPLA 节点。 更多...
YF_API bool | PrintNodeString (std::ostream &, const ValueNode &, NodeToString=EscapeNodeLiteral)
| 打印节点字符串。 更多...
| PDefH (void, RegisterContextHandler, ContextNode &node, const string &name, ContextHandler f) ImplExpr(node[name].Value
| 注册上下文处理器。 更多...
YF_API observer_ptr< const ValueNode > | LookupName (const ContextNode &, const string &) ynothrow
| 从指定上下文查找名称对应的节点。 更多...
std::ostream & | operator<< (std::ostream &os, const Configuration &conf)
std::istream & | operator>> (std::istream &is, Configuration &conf)
void | InstallFile (const char *dst, const char *src)
void | InstallDirectory (const string &dst, const string &src)
| ImplDeDtor (NPLException) ImplDeDtor(ListReductionFailure) ImplDeDtor(InvalidSyntax) ImplDeDtor(UndeclaredIdentifier) ArityMismatch
| ImplDeDtor (ArityMismatch) void ThrowArityMismatch(size_t expected
ValueObject | FetchValue (const ContextNode &ctx, const string &name)
YF_API vector< string > | DecomposeMakefileDepList (std::istream &)
| 从内容为 GCC 兼容编译器 -MMD 选项生成的 Makefile 的流中分解路径。 更多...
YF_API bool | FilterMakefileDependencies (vector< string > &)
| 过滤 GCC 兼容编译器 -MMD 选项生成的 Makefile 项列表并选取依赖项。 更多...
YF_API char | CheckLiteral (string_view) ynothrowv
| 检查指定字符串是否为字面量。 更多...
YF_API string_view | Deliteralize (string_view) ynothrowv
| 去除字面量边界分隔符。 更多...
YF_API string | Escape (string_view)
| 编码转义字符串：替换指定字符串中的可转义字符为转义序列。 更多...
YF_API string | EscapeLiteral (string_view)
| 编码转义字符串字面量。 更多...
YF_API string | EscapeXML (string_view)
| 编码 XML 字符串。 更多...
YF_API string | Literalize (string_view, char= '"')
| 修饰字符串为字面量。 更多...
template<class _tNodeOrCon , typename... _tParams>
ValueNode::iterator | InsertSyntaxNode (_tNodeOrCon &&node_or_con, std::initializer_list< ValueNode > il, _tParams &&...args)
| 插入语法节点。 更多...
template<class _tNodeOrCon , typename _type , typename... _tParams>
ValueNode::iterator | InsertSyntaxNode (_tNodeOrCon &&node_or_con, _type &&arg, _tParams &&...args)
YF_API ValueNode | MapNPLALeafNode (const TermNode &)
| 映射 NPLA 叶节点。 更多...
YF_API ValueNode | TransformToSyntaxNode (const ValueNode &, const string &={})
| 变换节点为语法分析树叶节点。 更多...
template<class _tNodeOrCon >
ValueNode::iterator | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, ValueNode &child)
| 插入语法子节点。 更多...
template<class _tNodeOrCon >
ValueNode::iterator | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, ValueNode &&child)
template<class _tNodeOrCon >
ValueNode::iterator | InsertChildSyntaxNode (_tNodeOrCon &&node_or_con, const NodeLiteral &nl)

## 变量

size_t | received
YF_API const char src const string | InstallDirectory
YF_API const char src const string const char * | dst
YF_API | YB_NONNULL (1, 2) void InstallFile(const char *
| 安装文件：复制单个文件。 更多...
YF_API const char * | PDefH (void, InstallFile, const string &dst, const string &src) ImplExpr(InstallFile(dst.c_str()
YF_API const char src | c_str ())) YF_API void InstallDirectory(const string &
| 安装目录：复制目录树。 更多...
YF_API const char src const string const char const char *src | ImplExpr (InstallDirectory(string(dst), string(src))) YF_API YB_NONNULL(1
| 安装硬链接：创建硬链接，失败则安装文件。 更多...
YF_API const char src const string const char const char *src void | InstallHardLink (const char *, const char *)
| PDefH (void, InstallHardLink, const string &dst, const string &src) ImplExpr(InstallHardLink(dst.c_str()
src void | InstallSymbolicLink (const char *, const char *)
| PDefH (void, InstallSymbolicLink, const string &dst, const string &src) ImplExpr(InstallSymbolicLink(dst.c_str()
src void | InstallExecutable (const char *, const char *)
| PDefH (void, InstallExecutable, const string &dst, const string &src) ImplExpr(InstallExecutable(dst.c_str()
template<typename... _tParams>
using | GPasses = YSLib::GEvent< bool(_tParams...), YSLib::GCombinerInvoker< bool, PassesCombiner >>
| 一般合并遍。 更多...
using | TermPasses = GPasses< TermNode & >
| 项合并遍。 更多...
using | EvaluationPasses = GPasses< TermNode &, ContextNode & >
| 求值合并遍。 更多...
using | Guard = ystdex::any
| 作用域守护类型。 更多...
using | GuardPasses = YSLib::GEvent< Guard(TermNode &, ContextNode &), YSLib::GDefaultLastValueInvoker< Guard >>
| 作用域守护遍：用于需在规约例程的入口和出口关联执行的操作。 更多...
YF_API bool | DetectReducible (TermNode &, bool)
| 移除节点的空子节点，然后判断是否可继续规约。 更多...
| PDefH (void, LiftTerm, TermNode &term, TermNode &tm) ImplExpr(TermNode(std
| 使用第二个参数指定的项的内容替换第一个项的内容。 更多...
using | TermNode = ValueNode
| 项节点：存储语法分析结果的值类型节点。 更多...
using | TNIter = TermNode::iterator
using | TNCIter = TermNode::const_iterator
| MapToTermNode
const TermNode &term | MapToValueNode
const TermNode &term ValueNode &node const ValueNode &node | HasValue
const TermNode &term ValueNode &node const ValueNode &node const TermNode & | term
| PDefH (TermNode &, MapToTermNode, TermNode &term) ImplRet(term) inline PDefH(const TermNode &
const TermNode &term | ImplRet (term) inline PDefH(ValueNode &
const TermNode &term ValueNode &node | ImplRet (node) inline PDefH(bool
| 检查项节点是否具有指定的值。 更多...
const TermNode &term ValueNode &node const ValueNode &node const TermNode const ValueObject &vo | ImplRet (term.Value==vo) class YF_API Session
| 会话：分析指定 NPL 代码。 更多...

## 类型定义说明

using NPL::ContextHandler = typedef YSLib::GHEvent<void(TermNode&, ContextNode&)>

上下文处理器类型。

在文件 NPLA.h 第 482 行定义.

using NPL::ContextNode = typedef ValueNode

上下文节点类型。

自从
  build 674

在文件 NPLA.h 第 476 行定义.

using NPL::EvaluationPasses = typedef GPasses<TermNode&, ContextNode&>

求值合并遍。

在文件 NPLA.h 第 542 行定义.

template<class _tCon >

using NPL::GNodeInserter = typedef std::function<void(TermNode&&, _tCon&)>

在文件 NPLA.h 第 99 行定义.

template<typename... _tParams>

using NPL::GPasses = typedef YSLib::GEvent<bool(_tParams...), YSLib::GCombinerInvoker<bool, PassesCombiner>>

一般合并遍。

在文件 NPLA.h 第 538 行定义.

using NPL::Guard = typedef ystdex::any

作用域守护类型。

在文件 NPLA.h 第 546 行定义.

using NPL::GuardPasses = typedef YSLib::GEvent<Guard(TermNode&, ContextNode&), YSLib::GDefaultLastValueInvoker<Guard>>

作用域守护遍：用于需在规约例程的入口和出口关联执行的操作。

待办事项:
  支持迭代使用旧值。

在文件 NPLA.h 第 552 行定义.

using NPL::IndentGenerator = typedef std::function<string(size_t)>

生成前缀缩进的函数类型。

在文件 NPLA.h 第 189 行定义.

using NPL::LiteralHandler = typedef YSLib::GHEvent<bool(const ContextNode&)>

字面量处理器类型。

在文件 NPLA.h 第 484 行定义.

using NPL::NodeInserter = typedef GNodeInserter<TermNode::Container&>

在文件 NPLA.h 第 101 行定义.

using NPL::NodeMapper = typedef std::function<ValueNode(const TermNode&)>

节点映射操作类型：变换节点为另一个节点。

自从
  buld 501

在文件 NPLA.h 第 92 行定义.

using NPL::NodeSequenceInserter = typedef GNodeInserter<NodeSequence>

在文件 NPLA.h 第 103 行定义.

using NPL::NodeToString = typedef std::function<string(const ValueNode&)>

自从
  buld 597

在文件 NPLA.h 第 96 行定义.

using NPL::TermNode = typedef ValueNode

项节点：存储语法分析结果的值类型节点。

在文件 SContext.h 第 51 行定义.

using NPL::TermPasses = typedef GPasses<TermNode&>

项合并遍。

在文件 NPLA.h 第 540 行定义.

using NPL::TLCIter = typedef TokenList::const_iterator

在文件 SContext.h 第 44 行定义.

using NPL::TLIter = typedef TokenList::iterator

在文件 SContext.h 第 43 行定义.

using NPL::TNCIter = typedef TermNode::const_iterator

在文件 SContext.h 第 54 行定义.

using NPL::TNIter = typedef TermNode::iterator

在文件 SContext.h 第 53 行定义.

using NPL::TokenList = typedef list<string>

在文件 SContext.h 第 42 行定义.

## 枚举类型说明

enum NPL::DepsEventType : yimpl(size_t)

strong

自从
  build 624

枚举值
General |
Search |
Build |
Command |
DepsCheck |
Max |

在文件 Dependency.h 第 39 行定义.

## 函数说明

src NPL::c_str | ( |  | ) | const

安装目录：复制目录树。

安装可执行文件：安装文件并按需设置可执行权限。

安装符号链接：创建文件符号链接，失败则安装文件。

自从
  build 659

待办事项:
  设置 chmod +x 或 NTFS 可执行权限。

自从
  build 659

参考自 YSLib::Drawing::ImagePages::AdjustOffset(), YSLib::IO::ClassifyNode(), YSLib::IO::ClearTree(), YSLib::IO::CopyTree(), platform::CreateHardLink(), platform::CreateSymbolicLink(), YSLib::FetchMIMEBiMapping(), YSLib::Drawing::FontCache::FontCache(), InstallDirectory(), YReader::ShlTextReader::LoadFile(), YSLib::Drawing::MultiBitmapData::LockPage(), YSLib::UI::ParseRect(), platform::ReadLink(), YSLib::Drawing::ImagePages::Resize(), YSLib::TraceForOutermost(), platform::uaccess(), platform::ufopen(), platform::uopen(), platform::upopen(), platform::usystem(), YSLib::UI::BorderResizer::Wrap(), YSLib::Drawing::Zoom() , 以及 YSLib::Drawing::ImagePages::ZoomTo().

这是这个函数的调用关系图:

char NPL::CheckLiteral | ( | string_view | sv | ) |

检查指定字符串是否为字面量。

前置条件
  断言：字符串参数的数据指针非空。

自从
  build 659

返回
  若为字面量（首尾字符都为 '\'' 或 '"' 之一），则为首字符，否则为 char() 。

在文件 Lexical.cpp 第 234 行定义.

参考 CHRLib::c, ystdex::get_quote_mark_nonstrict() , 以及 YAssertNonnull.

参考自 Deliteralize(), EscapeLiteral() , 以及 Literalize().

函数调用图:

这是这个函数的调用关系图:

list< string > NPL::Decompose | ( | string_view | src | ) |

分解字符串为记号。

前置条件
  断言：字符串参数的数据指针非空。

后置条件
  结果中字符串两端不包括 "C" 区域 std::isspace 返回非零的字符。

自从
  build 659

在文件 Lexical.cpp 第 377 行定义.

参考 dst, CHRLib::e, IsDelimeter(), IsGraphicalDelimeter(), ystdex::split_l(), ystdex::trim(), YAssert, YAssertNonnull , 以及 YB_NONNULL().

参考自 Tokenize().

函数调用图:

这是这个函数的调用关系图:

vector< string > NPL::DecomposeMakefileDepList | ( | std::istream & | is | ) |

从内容为 GCC 兼容编译器 -MMD 选项生成的 Makefile 的流中分解路径。

自从
  build 623

注解
  首先取消 std::ios_base::skipws 。

在文件 Dependency.cpp 第 39 行定义.

参考 YSLib::Text::buf, CHRLib::c, CHRLib::e, ystdex::exists(), YSLib::i, NPL::LexicalAnalyzer::ParseQuoted(), NPL::UnescapeContext::Prefix , 以及 ystdex::split_if().

函数调用图:

string NPL::DefaultGenerateIndent | ( | size_t | n | ) |

生成水平制表符为单位的缩进。

在文件 NPLA.cpp 第 87 行定义.

string_view NPL::Deliteralize | ( | string_view | sv | ) |

去除字面量边界分隔符。

返回
  若首尾字符都为 '\'' 或 '"' 之一，则为去除首尾字符之后的副本；否则为原串。

在文件 Lexical.cpp 第 247 行定义.

参考 YSLib::char, CheckLiteral() , 以及 ystdex::get_mid().

参考自 NPL::SXML::ConvertDocumentNode() , 以及 MapNPLALeafNode().

函数调用图:

这是这个函数的调用关系图:

bool NPL::DetectReducible | ( | TermNode & | term,
|  | bool | reducible
| ) |  |

移除节点的空子节点，然后判断是否可继续规约。

自从
  build 676

返回
  可继续规约：第二参数为 true 且移除空子节点后的节点非空。

在文件 NPLA.cpp 第 364 行定义.

参考 YSLib::ValueNode::empty , 以及 YSLib::RemoveEmptyChildren().

参考自 NPL::A1::Reduce().

函数调用图:

这是这个函数的调用关系图:

string NPL::Escape | ( | string_view | sv | ) |

编码转义字符串：替换指定字符串中的可转义字符为转义序列。

参见
  LexicalAnalyzer

在文件 Lexical.cpp 第 253 行定义.

参考 CHRLib::c, YSLib::char, YAssertNonnull , 以及 yunseq.

参考自 EscapeLiteral().

这是这个函数的调用关系图:

string NPL::EscapeLiteral | ( | string_view | sv | ) |

编码转义字符串字面量。

返回
  若参数是字符串字面量时转义其中的内容，否则为原串。

注解
  使用 Escape 转义。
  若转义后最后一个字符为 '\' 则添加一个 '\' 以避免转义末尾分隔符。

参见
  LexicalAnalyzer

在文件 Lexical.cpp 第 327 行定义.

参考 CHRLib::c, YSLib::char, CheckLiteral(), Escape(), ystdex::get_mid() , 以及 ystdex::quote().

参考自 EscapeNodeLiteral() , 以及 PrintNode().

函数调用图:

这是这个函数的调用关系图:

string NPL::EscapeNodeLiteral | ( | const ValueNode & | node | ) |

转义 NPLA 节点字面量。

返回
  调用 EscapeLiteral 转义访问字符串的结果。

异常

  ystdex::bad_any_cast | 异常中立：由 Access 抛出。

自从
  build 597

在文件 NPLA.cpp 第 68 行定义.

参考 EscapeLiteral().

参考自 LiteralizeEscapeNodeLiteral().

函数调用图:

这是这个函数的调用关系图:

string NPL::EscapeXML | ( | string_view | sv | ) |

编码 XML 字符串。

参见
  http://www.w3.org/TR/2006/REC-xml11-20060816/#charsets 。

允许 XML 1.1 字符，仅对空字符使用 YTraceDe 进行警告。 仅对 XML 1.0 和 XML 1.1 规定的有条件使用字符 `&` 、 `<` 和 `>` 生成转义序列。

在文件 Lexical.cpp 第 339 行定义.

参考 CHRLib::c, platform::Descriptions::Warning, YAssertNonnull , 以及 YTraceDe.

参考自 NPL::SXML::ConvertStringNode().

这是这个函数的调用关系图:

ValueObject NPL::FetchValue | ( | const ContextNode & | ctx,
|  | const string & | name
| ) |  |

在文件 NPLA.cpp 第 350 行定义.

参考 LookupName() , 以及 YSLib::ValueNode::Value.

函数调用图:

bool NPL::FilterMakefileDependencies | ( | vector< string > & | lst | ) |

过滤 GCC 兼容编译器 -MMD 选项生成的 Makefile 项列表并选取依赖项。

返回
  是否具有冒号项且移除被依赖项和冒号项后非空。

在文件 Dependency.cpp 第 97 行定义.

bool NPL::HandleBackslashPrefix | ( | char | c,
|  | string & | pfx
| ) |  |

设置反斜杠转义前缀：当输入 '\' 时设置前缀为 "\\" 。

参见
  LexicalAnalyzer::PrefixHandler

自从
  build 546

在文件 Lexical.cpp 第 47 行定义.

NPL::ImplDeDtor | ( | NPLException |  | ) |

在文件 NPLA.cpp 第 323 行定义.

NPL::ImplDeDtor | ( | ArityMismatch |  | ) |

YF_API const char src const string const char const char* src NPL::ImplExpr | ( | InstallDirectory(string(dst), string(src)) |  | ) |

安装硬链接：创建硬链接，失败则安装文件。

异常

  std::invalid_argument | 安装前发现源是有效的目录。

自从
  build 659

参考自 NPL::A1::LoadNodeSequence().

这是这个函数的调用关系图:

const TermNode& term NPL::ImplRet | ( | term |  | ) |

参考自 NPL::A1::LoadNodeSequence().

这是这个函数的调用关系图:

const TermNode &term ValueNode &node const ValueNode &node NPL::ImplRet | ( | node |  | ) |

检查项节点是否具有指定的值。

自从
  build 691

const TermNode& term ValueNode& node const ValueNode& node const TermNode const ValueObject& vo NPL::ImplRet | ( | term. | Value = `= vo` | ) |

会话：分析指定 NPL 代码。

自从
  build 304

自从
  build 546
  build 592
  build 618

异常

  LoggedEvent | 关键失败：无法访问源内容。

默认字符解析实现：直接使用 LexicalAnalyzer::ParseByte 。

自从
  build 546

默认字符解析实现：直接使用 LexicalAnalyzer::ParseQuoted 。

自从
  build 546

在文件 SContext.h 第 73 行定义.

参考 ystdex::cpp2011::begin(), CHRLib::c, DefDeCopyMoveCtorAssignment, DefDeCtor, DefGetter, DefGetterMem, ystdex::cpp2011::end(), NPL::LexicalAnalyzer::Literalize(), ystdex::ref(), Tokenize(), yimpl , 以及 ynothrow.

函数调用图:
template<class _tNodeOrCon >

ValueNode::iterator NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | ValueNode & | child
| ) |  |

插入语法子节点。

自从
  build 599

在指定的节点插入以节点大小字符串为名称的节点，可用于语法分析树。

自从
  build 666

在文件 NPLA.h 第 167 行定义.

参考 InsertSyntaxNode() , 以及 yforward.

参考自 NPL::SXML::InsertAttributeNode() , 以及 InsertChildSyntaxNode().

函数调用图:

这是这个函数的调用关系图:
template<class _tNodeOrCon >

ValueNode::iterator NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | ValueNode && | child
| ) |  |

在文件 NPLA.h 第 173 行定义.

参考 InsertSyntaxNode() , 以及 yforward.

函数调用图:
template<class _tNodeOrCon >

ValueNode::iterator NPL::InsertChildSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | const NodeLiteral & | nl
| ) |  |

在文件 NPLA.h 第 180 行定义.

参考 InsertChildSyntaxNode(), TransformToSyntaxNode() , 以及 yforward.

函数调用图:
template<class _tNodeOrCon , typename... _tParams>

ValueNode::iterator NPL::InsertSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | std::initializer_list< ValueNode > | il,
|  | _tParams &&... | args
| ) |  |

插入语法节点。

自从
  build 599

在指定的节点插入以节点大小字符串为名称的节点，可用于语法分析树。

在文件 NPLA.h 第 72 行定义.

参考 CHRLib::args, YSLib::MakeIndex , 以及 yforward.

参考自 InsertChildSyntaxNode().

这是这个函数的调用关系图:
template<class _tNodeOrCon , typename _type , typename... _tParams>

ValueNode::iterator NPL::InsertSyntaxNode | ( | _tNodeOrCon && | node_or_con,
|  | _type && | arg,
|  | _tParams &&... | args
| ) |  |

在文件 NPLA.h 第 80 行定义.

参考 CHRLib::args, YSLib::MakeIndex , 以及 yforward.

void NPL::InstallDirectory | ( | const string & | dst,
|  | const string & | src
| ) |  |

在文件 Dependency.cpp 第 125 行定义.

参考 c_str(), InstallFile() , 以及 YSLib::IO::TraverseTree().

函数调用图:

void NPL::InstallExecutable | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 158 行定义.

参考 InstallFile().

函数调用图:

void NPL::InstallFile | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 110 行定义.

参考 CatchIgnore, YSLib::IO::CopyFile(), platform::HaveSameContents() , 以及 YSLib::IO::PreserveModificationTime().

参考自 InstallDirectory(), InstallExecutable(), InstallHardLink() , 以及 InstallSymbolicLink().

函数调用图:

这是这个函数的调用关系图:

void NPL::InstallHardLink | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 135 行定义.

参考 CatchExpr, platform::CreateHardLink(), InstallFile(), TryExpr, platform::uremove() , 以及 YSLib::IO::VerifyDirectory.

函数调用图:

void NPL::InstallSymbolicLink | ( | const char * | dst,
|  | const char * | src
| ) |  |

在文件 Dependency.cpp 第 148 行定义.

参考 CatchExpr, platform::CreateSymbolicLink(), InstallFile(), TryExpr , 以及 platform::uremove().

函数调用图:

yconstfn bool NPL::IsDelimeter | ( | char | c | ) |

判断是否为 NPL 分隔符。

自从
  build 331

在文件 Lexical.h 第 317 行定义.

参考 IsGraphicalDelimeter().

参考自 Decompose().

函数调用图:

这是这个函数的调用关系图:

yconstfn bool NPL::IsGraphicalDelimeter | ( | char | c | ) |

判断是否为 NPL 图形分隔符。

自从
  build 331

在文件 Lexical.h 第 305 行定义.

参考自 Decompose() , 以及 IsDelimeter().

这是这个函数的调用关系图:

string NPL::Literalize | ( | string_view | sv,
|  | char | c = `'"'`
| ) |  |

修饰字符串为字面量。

返回
  若首尾字符都为 '\'' 或 '"' 之一或第二参数为空字符则为原串， 否则为首尾加上第二参数字符的串。

自从
  build 597

在文件 Lexical.cpp 第 369 行定义.

参考 YSLib::char, CheckLiteral() , 以及 ystdex::quote().

参考自 LiteralizeEscapeNodeLiteral() , 以及 TransformToSyntaxNode().

函数调用图:

这是这个函数的调用关系图:

string NPL::LiteralizeEscapeNodeLiteral | ( | const ValueNode & | node | ) |

转义 NPLA 节点字面量。

返回
  参数为控节点则空串，否则调用 Literalize 字面量化 EscapeNodeLiteral 的结果。

异常

  ystdex::bad_any_cast | 异常中立：由 EscapeNodeLiteral 抛出。

参见
  EscapeNodeLiteral

自从
  build 598

在文件 NPLA.cpp 第 74 行定义.

参考 EscapeNodeLiteral() , 以及 Literalize().

参考自 operator<<().

函数调用图:

这是这个函数的调用关系图:

observer_ptr< const ValueNode > NPL::LookupName | ( | const ContextNode & | ctx,
|  | const string & | id
| ) |  |

从指定上下文查找名称对应的节点。

在文件 NPLA.cpp 第 357 行定义.

参考 YSLib::AccessNodePtr.

参考自 FetchValue().

这是这个函数的调用关系图:

ValueNode NPL::MapNPLALeafNode | ( | const TermNode & | term | ) |

映射 NPLA 叶节点。

返回
  创建的新节点。

自从
  build 674

参见
  ParseNPLANodeString

创建新节点。若参数为空则返回值为空串的新节点；否则值以 ParseNPLANodeString 取得。

在文件 NPLA.cpp 第 38 行定义.

参考 Deliteralize(), MapToValueNode , 以及 ParseNPLANodeString().

函数调用图:

bool NPL::NPLUnescape | ( | string & | buf,
|  | const UnescapeContext & | uctx,
|  | char | ld
| ) |  |

NPL 转义匹配算法。

参见
  LexicalAnalyzer::Unescaper

自从
  build 545

支持转义序列为 "\\" 、 "\a" 、 "\b" 、 "\f" 、 "\n" 、 "\r" 、 "\t" 和 "\v" 。 除以下说明外，转义序列语义参见 ISO C++11 （排除 raw-string-literal ）； 其它转义序列由派生实现定义。 除了反斜杠转义外，其它转义仅适用于字面量。 反斜杠转义：连续两个反斜杠被替换为一个反斜杠； 引号转义：反斜杠之后紧接单引号或双引号时，反斜杠会被删除。

在文件 Lexical.cpp 第 58 行定义.

参考 NPL::UnescapeContext::IsHandling.

std::ostream& NPL::operator<< | ( | std::ostream & | os,
|  | const Configuration & | conf
| ) |  |

related

在文件 Configuration.cpp 第 38 行定义.

参考 LiteralizeEscapeNodeLiteral() , 以及 PrintNode().

函数调用图:

std::istream& NPL::operator>> | ( | std::istream & | is,
|  | Configuration & | conf
| ) |  |

异常

  GeneralEvent | 文件无效。
  LoggedEvent | 文件内容读取失败。

自从
  build 619

在文件 Configuration.cpp 第 45 行定义.

参考 NPL::SContext::Analyze(), CatchExpr, NPL::A1::LoadNode(), ystdex::rethrow_badstate(), NPL::Configuration::root , 以及 TryExpr.

函数调用图:

string NPL::ParseNPLANodeString | ( | const ValueNode & | node | ) |

解析 NPLA 节点字符串。

自从
  build 508

以 string 类型访问节点，若失败则结果为空串。

在文件 NPLA.cpp 第 80 行定义.

参考自 MapNPLALeafNode() , 以及 TransformToSyntaxNode().

这是这个函数的调用关系图:

NPL::PDefH | ( | TermNode & | ,
|  | MapToTermNode | ,
|  | TermNode & | term
| ) |  | const

inline

YF_API const char* NPL::PDefH | ( | void | ,
|  | InstallFile | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

NPL::PDefH | ( | void | ,
|  | InstallHardLink | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

NPL::PDefH | ( | void | ,
|  | InstallSymbolicLink | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

NPL::PDefH | ( | void | ,
|  | InstallExecutable | ,
|  | const string & | dst,
|  | const string & | src
| ) |  |

inline

NPL::PDefH | ( | void | ,
|  | RegisterContextHandler | ,
|  | ContextNode & | node,
|  | const string & | name,
|  | ContextHandler | f
| ) |  |

inline

注册上下文处理器。

NPL::PDefH | ( | void | ,
|  | LiftTerm | ,
|  | TermNode & | term,
|  | TermNode & | tm
| ) |  |

inline

使用第二个参数指定的项的内容替换第一个项的内容。

使用首个子项替换项的内容。

自从
  build 685

使用最后一个子项替换项的内容。

自从
  build 696

调用处理遍：从指定名称的节点中访问指定类型的遍并以指定上下文调用。

自从
  build 685

在文件 NPLA.h 第 556 行定义.

参考 NPL::A1::name.

void NPL::PrintIndent | ( | std::ostream & | os,
|  | IndentGenerator | igen = `DefaultGenerateIndent`,
|  | size_t | n = `1`
| ) |  |

打印缩进。

注解
  若最后一个参数等于零则无副作用。

在文件 NPLA.cpp 第 93 行定义.

参考 ystdex::write() , 以及 YB_LIKELY.

参考自 PrintNode() , 以及 PrintNodeChild().

函数调用图:

这是这个函数的调用关系图:

void NPL::PrintNode | ( | std::ostream & | os,
|  | const ValueNode & | node,
|  | NodeToString | node_to_str = `EscapeNodeLiteral`,
|  | IndentGenerator | igen = `DefaultGenerateIndent`,
|  | size_t | depth = `0`
| ) |  |

打印 NPLA 节点。

参见
  PrintIdent
  PrintNodeChild
  PrintNodeString

调用第四参数输出最后一个参数决定的缩进作为前缀和一个空格，然后打印节点内容： 先尝试调用 PrintNodeString 打印节点字符串，若成功直接返回； 否则打印换行，然后尝试调用 PrintNodeChild 打印 NodeSequence ； 再次失败则调用 PrintNodeChild 打印子节点。 调用 PrintNodeChild 打印后输出回车。

在文件 NPLA.cpp 第 100 行定义.

参考 EscapeLiteral(), platform::p, PrintIndent(), PrintNodeChild(), PrintNodeString() , 以及 ystdex::ref().

参考自 operator<<() , 以及 PrintNodeChild().

函数调用图:

这是这个函数的调用关系图:

void NPL::PrintNodeChild | ( | std::ostream & | os,
|  | const ValueNode & | node,
|  | NodeToString | node_to_str = `EscapeNodeLiteral`,
|  | IndentGenerator | igen = `DefaultGenerateIndent`,
|  | size_t | depth = `0`
| ) |  |

打印作为子节点的 NPLA 节点。

参见
  IsPrefixedIndex
  PrintIdent
  PrintNodeString

调用第四参数输出最后一个参数决定的缩进作为前缀，然后打印子节点内容。 对满足 IsPrefixedIndex 的节点调用 PrintNodeString 作为节点字符串打印； 否则，调用 PrintNode 递归打印子节点，忽略此过程中的 std::out_of_range 异常。

在文件 NPLA.cpp 第 124 行定义.

参考 CatchIgnore, YSLib::IsPrefixedIndex(), PrintIndent(), PrintNode(), PrintNodeString() , 以及 TryExpr.

参考自 PrintNode().

函数调用图:

这是这个函数的调用关系图:

bool NPL::PrintNodeString | ( | std::ostream & | os,
|  | const ValueNode & | node,
|  | NodeToString | node_to_str = `EscapeNodeLiteral`
| ) |  |

打印节点字符串。

返回
  是否成功访问节点字符串并输出。

注解
  ystdex::bad_any_cast 外异常中立。

参见
  PrintNode

使用最后一个参数指定的访问节点，打印得到的字符串和换行符。 忽略 ystdex::bad_any_cast 。

在文件 NPLA.cpp 第 141 行定义.

参考 CatchIgnore , 以及 TryRet.

参考自 PrintNode() , 以及 PrintNodeChild().

这是这个函数的调用关系图:

list< string > NPL::Tokenize | ( | const list< string > & | src | ) |

记号化：提取字符串列表中的记号。

注解
  排除字面量，分解其余字符串为记号列表。

自从
  build 301

在文件 Lexical.cpp 第 403 行定义.

参考 Decompose(), dst , 以及 YSLib::Text::str.

参考自 ImplRet().

函数调用图:

这是这个函数的调用关系图:

ValueNode NPL::TransformToSyntaxNode | ( | const ValueNode & | node,
|  | const string & | name = `{}`
| ) |  |

变换节点为语法分析树叶节点。

注解
  可选参数指定结果名称。

自从
  build 598

在文件 NPLA.cpp 第 45 行定义.

参考 YSLib::AsIndexNode(), YSLib::ValueNode::empty, Literalize(), YSLib::MakeIndex, YSLib::NoContainer, platform::p , 以及 ParseNPLANodeString().

参考自 InsertChildSyntaxNode().

函数调用图:

这是这个函数的调用关系图:

YF_API const char src const string & NPL::YB_NONNULL | ( | 1 | ,
|  | 2 |
| ) |  | const

inline

安装文件：复制单个文件。

注解
  第一参数和第二参数分别为目标和源路径。

参见
  工具脚本 `SHBuild-common.sh` 。

自从
  build 651

待办事项:
  检查可能存在于目标路径的旧项的权限；设置权限。

注解
  复制前检查内容，若相同则不进行冗余复制（类似 rsync -a ）。

自从
  build 659

参考自 Decompose().

这是这个函数的调用关系图:

## 变量说明

YF_API const char src const string const char* NPL::dst

在文件 Dependency.h 第 93 行定义.

参考自 YSLib::Drawing::ImagePages::AdjustOffset(), YSLib::Drawing::BlitGlyphLines(), YSLib::Drawing::BlitGlyphPixels(), YSLib::Drawing::BlitLines(), YSLib::Drawing::BlitPixels(), YSLib::Drawing::BlitTo(), YSLib::Drawing::ClearPixels(), YSLib::ClearSequence(), YSLib::Drawing::CopyTo(), YSLib::IO::CopyTree(), Decompose(), YSLib::Drawing::FillVerticalLine(), ystdex::block_buffer::read(), YSLib::UI::ReleaseFocusFrom(), YSLib::Drawing::RenderChar(), YSLib::Drawing::RenderCharAlpha(), YSLib::UI::RequestFocusFrom(), Tokenize(), YSLib::IO::TraverseTree(), YSLib::UI::BufferedRenderer::Validate() , 以及 platform::FAT::EntryData::WriteDateTime().

const TermNode& term ValueNode& node const ValueNode& node NPL::HasValue

在文件 SContext.h 第 72 行定义.

参考自 NPL::A1::ReplaceSeparatedChildren(), NPL::A1::TransformForSeparator() , 以及 NPL::A1::TransformForSeparatorRecursive().

YF_API const char src const string NPL::InstallDirectory

在文件 Dependency.h 第 93 行定义.

NPL::MapToTermNode

在文件 SContext.h 第 58 行定义.

const TermNode &term ValueNode &node NPL::MapToValueNode

在文件 SContext.h 第 61 行定义.

参考自 NPL::A1::InsertChild(), NPL::A1::InsertSequenceChild() , 以及 MapNPLALeafNode().

size_t NPL::received

初始值:
{
throw ArityMismatch(expected, received)
NPL::received
size_t received
Definition: NPLA.cpp:344

在文件 NPLA.cpp 第 344 行定义.

const TermNode& term ValueNode& node const ValueNode& node const TermNode& NPL::term

在文件 SContext.h 第 72 行定义.

参考自 NPL::SXML::ConvertStringNode(), NPL::A1::EvaluateContextFirst(), NPL::A1::EvaluateGuard(), NPL::A1::EvaluateLeafPasses(), NPL::A1::EvaluateListPasses(), NPL::A1::InsertChild(), NPL::A1::InsertSequenceChild(), NPL::A1::LoadNodeSequence(), YSLib::RemoveEmptyChildren(), NPL::A1::SetupTraceDepth() , 以及 ystdex::basic_tstring_view< _tChar, _tTraits, 0 >::verify_term().