0.2.2 • Published 11 months ago

epub-cfi-generator v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

epub-cfi-generator

Node.js utility that generates CFI for each text node in each spine of given EPUB.
Takes EPUB file as input (either epub file or unzipped epub directory), produces json file as output.
Internally uses readium-cfi-js that does most job.

Usage

Command line

npx epub-cfi-generator input.epub output.json

Examples

Input

Reference EPUB (close to https://idpf.org/epub/linking/cfi/#sec-path-examples)

<?xml version="1.0"?>
<package version="2.0"
         unique-identifier="bookid"
         xmlns="http://www.idpf.org/2007/opf"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:opf="http://www.idpf.org/2007/opf">

    <metadata>
        <dc:title>Test EPUB</dc:title>
        <dc:identifier id="bookid">some-book-id</dc:identifier>
        <dc:creator>Viachaslau Tyshkavets</dc:creator>
        <dc:language>en</dc:language>
    </metadata>

    <manifest>
        <item id="test" href="html/test.xhtml" media-type="application/xhtml+xml"/>
    </manifest>

    <spine>
        <itemref id="testref"  idref="test"/>
    </spine>

</package>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Title</title>
    </head>

    <body id="body01">
        <p>1</p>
        <p>2</p>
        <p>3</p>
        <p>4</p>
        <p id="para05">xxx<em>yyy</em>0123456789</p>
        <p>6</p>
        <p>7</p>
        <img id="svgimg" src="foo.svg" alt="image"/>
        <p>8</p>
        <p>9</p>
    </body>
</html>

Output:

[
  {
    "idref": "test",
    "href": "html/test.xhtml",
    "content": [
      {
        "node": "1",
        "cfi": "/6/2[testref]!/4[body01]/2/1:0"
      },
      {
        "node": "2",
        "cfi": "/6/2[testref]!/4[body01]/4/1:0"
      },
      {
        "node": "3",
        "cfi": "/6/2[testref]!/4[body01]/6/1:0"
      },
      {
        "node": "4",
        "cfi": "/6/2[testref]!/4[body01]/8/1:0"
      },
      {
        "node": "xxx",
        "cfi": "/6/2[testref]!/4[body01]/10[para05]/1:0"
      },
      {
        "node": "yyy",
        "cfi": "/6/2[testref]!/4[body01]/10[para05]/2/1:0"
      },
      {
        "node": "0123456789",
        "cfi": "/6/2[testref]!/4[body01]/10[para05]/3:0"
      },
      {
        "node": "6",
        "cfi": "/6/2[testref]!/4[body01]/12/1:0"
      },
      {
        "node": "7",
        "cfi": "/6/2[testref]!/4[body01]/14/1:0"
      },
      {
        "node": "8",
        "cfi": "/6/2[testref]!/4[body01]/18/1:0"
      },
      {
        "node": "9",
        "cfi": "/6/2[testref]!/4[body01]/20/1:0"
      }
    ]
  }
]

API

EpubCfiGenerator.parse()

const EpubCfiGenerator = require('./epub-cfi-generator');
const result = await new EpubCfiGenerator().parse(inputFile);

License

MIT

0.2.2

11 months ago

0.2.1

11 months ago