#line #newline #text #stream #ending


Manipulate the output of multiple newlines. Replace/Insert/Append newlines with text. Input and output from stdio/files/buffers

9 releases (5 breaking)

0.6.0 Oct 20, 2022
0.5.0 Aug 12, 2022
0.4.1 Aug 12, 2022
0.4.0 Feb 21, 2020
0.1.0 Jul 29, 2019

#255 in Text processing

38 downloads per month


610 lines


Crates.io msrv 1.32 tests Documentation license

Rust library to manipulate multiple newlines.

Create a new String with your edited text, or use buffers to pipe input and output into the Editor. This library has no additional dependencies.

Using linurgy

Build a reusable Editor with one of the convenient factory functions. Use the edit method to create a new String.

use linurgy::factory;

// appends an underscore "_" every 2 newlines "\n\n" => "\n\n_"
let editor = factory::appender("_", 2);
let output = editor.edit("foo\n\n");
assert_eq!("foo\n\n_", output);

Manipulate stdin into stdout by using the edit_buffered method. This also works on files, Cursors, or anything else that implements BufRead.

use linurgy::factory;
use std::io::{BufReader, Result, stdin, stdout};

// doubles every newline "\n" => "\n\n"
let editor = factory::appender("\n", 1);
// create a buffer over stdin
let mut input = BufReader::new(stdin());
// pipe input into editor and output to stdout
editor.edit_buffered(&mut input, &mut stdout())?;

Work with LF \n or CRLF \r\n line-endings. There are factory functions for CRLF inputs.

use linurgy::factory;

// inserts a "*" before 2 newlines "\r\n\r\n" => "*\r\n\r\n"
let editor = factory::inserter_crlf("*", 2);
let output = editor.edit("foo\r\nbar\r\n\r\n");
// notice there is only an asterisk before the double newline
assert_eq!("foo\r\nbar*\r\n\r\n", output);

More examples


Thank you very much for considering to contribute to this project!

We welcome any form of contribution:

  • New issues (feature requests, bug reports, questions, ideas, ...)
  • Pull requests (documentation improvements, code improvements, new features, ...)

Note: Before you take the time to open a pull request, please open an issue first.

See CONTRIBUTING.md for details.


Linurgy is distributed under the terms of both the MIT license and the Apache License (Version 2.0).


No runtime deps