CFI Algebra 是一种 ePub 电子书格式中用来表示内容的定位系统。CFI (Continous Pagination Identifier) 由一系列的字符组成,用来描述电子书中的一个特定位置或一个片段。因此,CFI Algebra Manipulator 这个 npm 包就是用来操作 ePub 电子书中 CFI Algebra 的。
本教程将向您介绍如何使用 npm 包 cfi-algebra-manipulator,使用前请确保已经正确安装 Node.js 和 npm。
安装
在终端执行以下命令:
--- ------- -----------------------
使用
cfi-algebra-manipulator 的基本用法
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- -------------------- ---- -------------------------------- ----------------- ---- ---- --------------------------------- ------------------ ---- ---------------------------- -----
getElementCfi()
获取 element 的 CFI。
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----- ---------- - --------------------------- -- --------
getLeafNodeCfi()
获取 leaf node 的 CFI。
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----- ------- - ---------------------------- -- ------------
getRangeCfi(start, end)
获取 range 的 CFI。
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----- -------- - -------------------------- -- -- --------------
深入学习
CFI Algebra 的定义
CFI 是 ePub 电子书标准定义的一套坐标系统,它用来精确定位文档中的一个位置或一个片段。
CFI Algebra 由两个部分组成:
- Spine Index:代表此位置所在的 spine 中的索引。
- Path Component:代表从 spine 起始点开始,一直到此处为止的 DOM 树中的路径。这个路径只包含元素的 ID 和类名。
例如,一个 epub 版本的 Hamlet 包含如下书脊:
------ ---------- -------- --------------- -------- --------------- -------- --------------- -------- -------------- -------- -------------- -------- -------------- -------- -------------- -------- -------------- -------- -------------- --------
如果想要定位到 Hamlet 中 Act1 Scene 2 的第一句台词,就可以使用如下的 CFI:
---------------------
其中的数字分别代表 spine index 和 path component。在这个示例中,第 6 个 spine 是 "act1",所以 spine index 是 6。
Path component 具有如下结构:
--- -- -- -- -- -- -- --------
a
, b
, c
, d
, e
表示该元素在 DOM 树中的父元素(离该元素最近的父元素 ID),i
表示元素自身的 ID 和类名。
根据这个规则,在 Hamlet 的 DOM 树中,可以看出路径的正确性:
-------- ------------------------------------ -------------- ---------- ----------- ---------- ----- ---------- ------------------ ---------------------------------- -- ----- ---------- ------------------ ---------------------------------- -- ----- ----------- ----------------------------- ----------------------- -- ----- ---------- ------------------ ---------------------------------- -- ----- ----------- ---------------------------------- ----------------------- -- ----- --------- ----------------- ---------------------------------- -- ----- ----------- ---------------------------------- ----------------------- -- ----- ----------- --------------------------------------- ----------------------- -- ----- ----------- ----------------------------------- ----------------------- -- ----- ----------- ----------------------------------- ----------------------- -- ----- ----------- ----------------------------------- ----------------------- -- ----- ----------- ----------------------------------- ----------------------- -- ----- ----------- ----------------------------------- ----------------------- -- ----- --------- ----------------- ---------------------------------- -- ----- ------------ ---------------------------------- ----------------------- -- ----- ------------ ----------------------------------- ----------------------- -- --- ----------- ------ ---------- -------- ------------- -- -------- ------------- -- -------- ------------- -- -------- ------------ -- -------- ------------ -- --- -------- ----------
在示例中,CFI epubcfi(/6/14!/4/1:0)
表示如下元素:
------ ------ ------ ---- ---------- ------- ------ ---------- --------- ------ -- --------------- ----- ----- ------ --- ----------- ------ ------- ------- -------
使用 cfi-algebra-manipulator 操作 CFI Algebra
cfi-algebra-manipulator 包提供了类 CfiManipulator,可以方便地操作 CFI。
在 CFI 中移动
向右移动:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- -------------------------------------- -- ------------
向左移动:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ------------------------------------- -- ------------
向上移动:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- --------------------------------------- -- --------
向下移动:
----- -------------- - ---------------------------------- ----- --- - ------------------- ----- ----------- - --- ------------------- ------------------------------------------------ -- ----------
获取元素信息
获取 element 的 type:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----------------------------------------- -- ---
获取 element 的 attributes:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----------------------------------------------- -- ---- ----
获取 element 的 siblings:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- -------------------------------------- -- ------ ----- ----- -----------
获取 element 的 previous sibling:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- --------------------------------------------- -- ------------
获取 element 的 next sibling:
----- -------------- - ---------------------------------- ----- --- - ----------------------- ----- ----------- - --- ------------------- ----------------------------------------- -- ------------
获取节点之间的 CFI Range
获取两个节点之间的 CFI Range:
----- -------------- - ---------------------------------- ----- --- - ------------------- ----- ----------- - --- ------------------- -------------------------------------- --- -- --------------
总结
本教程介绍了 cfi-algebra-manipulator 的安装与使用方法,并深入介绍了如何使用 CFI Algebra 和 cfi-algebra-manipulator 程序库操作 CFI Algebra。希望能够对正在学习 ePub 开发的读者提供一些帮助,帮助各位更好地掌握 CFI Algebra 的使用技术。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60055d1f81e8991b448dacb2