linez

Parses lines from text, preserving line numbers, offsets and line endings.

linez

Parses lines from text, preserving line numbers, offsets and line endings.

Getting Started

$ npm install linez
/// <reference path="node_modules/linez/linez.d.ts" />
import linez = require('linez');
var linez = require('linez');

Introduction

By default, linez uses /\r?\n/g as the regular expression to detect newline character sequences and split lines. This regular expression is tuned for performance and only covers the most common newline types (i.e., \n and \r\n). If you have need for more newline character sequences, you can configure linez with the configure method.

linez.configure({
  newlines: ['\n', '\r\n', '\r', '\u000B']
});

Setting this property will automatically create a piped regular expression for you and use it in any future linez.parse() calls. You can make up your own newlines if you want. Linez doesn't care one way or the other.

linez.configure({
  newlines: ['foo', 'bar']
});

This would be converted into /(?:foo|bar). Newlines are just strings. They can be anything. There are, however, some known newline character sequences. Should you need them, refer to the following table:

StringUnicodeName
\nU+000ALine feed
\r\nU+000D, U+000ACarriage Return + Line Feed
\rU+000DCarriage Return
\u000BU+000BVertical Tab
\u000CU+000CForm Feed
\u0085U+0085Next Line
\u2028U+2028Line Separator
\u2029U+2029Paragraph Separator

API

Configures linez to use the supplied options. Currently, only the newlines property is available, where you can specify any number of newline character sequences.

linez.configure({
  newlines = ['\n', '\r\n', '\r', '\u000B']
});

Document

constructor(public lines: ILine[]);

Calling the toString() method converts the documents lines into a string, discarding information about line numbers and offsets.

ILine

interface ILine {
  offset: number;
  number: number;
  text: string;
  ending?: string;
}

ILine

interface IOptions {
  newlines?: string[];
}

Parses text into a Document.

The specs show some great usage examples.

var lines = linez.parse('foo\nbar\nbaz').lines;
lines[1].offset; // 4
lines[1].number; // 2
lines[1].text; // bar
lines[1].ending; // \n

Released under the MIT license.