0.2.0 • Published 3 years ago

piece-buffer v0.2.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 years ago

Piece Buffer

npm version GitHub Workflow Status

This is a lightweight implementation of a Piece Buffer - an efficient data structure for storing and modifying text.

Installation

To install with npm:

npm install piece-buffer

or yarn:

yarn add piece-buffer

Basic usage

Here's a small example that creates an editor, inserts some text in the middle, and appends some text to the end.

const pb = require("piece-buffer");
const editor = pb.createEditor("Hello World.");
editor.insert(6, "Cool ");
editor.append(" Goodbye!");
// Prints "Hello Cool World. Goodbye!"
console.log(editor.toString());

Positions and lines

The Piece Buffer editor keeps track of lines in the text.

The main mutation operations of an editor (delete() and insert()) both take a position as the first parameter. This can simply be a character offset, or it can be a line and column number (both of which are zero-based).

For example:

const pb = require("piece-buffer");
const editor = pb.createEditor("Hello\nPiece\nBuffer\n");
editor.insert({line: 1, column: 5}, "meal");
// Prints "Hello\nPiecemeal\nBuffer\n"
console.log(editor.toString());

It's convenient to iterate lines:

const pb = require("piece-buffer");
const editor = pb.createEditor("Hello\nPiece\nBuffer\n");
// Prints:
// Hello
// Piece
// Buffer
for (const line of editor.lines()) {
  console.log(line)
}

It's also convenient to iterate lines matching an expression. The iterator will yield back an array containing the regular expression match array, the whole line that matched, and the line number:

const pb = require("piece-buffer");
const editor = pb.createEditor("Hello\nPiece\nBuffer\n");
// Prints:
// Line 1 (Piece) matched: P
for (const line of editor.linesMatching(/^P/)) {
  console.log(`Line ${line[2]} (${line[1]}) matched: ${line[0][0]}`)
}

Selections

Selections are a useful way to find and replace or delete parts of a document efficiently. They behave a lot like the cursor selection in a text editor.

const pb = require("piece-buffer");
const editor = pb.createEditor("Hello World.");
const selection = editor.createSelection();
selection.selectFirst("World");
selection.replace("Piece Buffer");
// Prints "Hello Piece Buffer."
console.log(editor.toString());

TODO: more documentation

Performance

TODO: Compare performance to basic strings, write up benchmark.


This is not an officially supported Google product.

0.2.0

3 years ago

0.1.12

3 years ago

0.1.11

3 years ago

0.1.10

3 years ago

0.1.8-beta.19

3 years ago

0.1.7-beta.6

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago