44 releases (1 stable)

new 1.0.0 Oct 19, 2021
0.11.5 Oct 18, 2021
0.10.1 Oct 5, 2021

#90 in Text processing

Download history 57/week @ 2021-08-14 139/week @ 2021-08-21 103/week @ 2021-08-28 36/week @ 2021-09-04 42/week @ 2021-09-11 137/week @ 2021-09-18 59/week @ 2021-09-25 117/week @ 2021-10-02 116/week @ 2021-10-09 88/week @ 2021-10-16

278 downloads per month
Used in gdengine

MIT/Apache

180KB
3.5K SLoC

R4d (Rad)

R4d is a text oriented macro prosessor made with rust.

Demo

Raw texts

$define(author=Simon Creek)
$define(title=R4d demo)
---
title : $title()
author : $author()
---
My name is $author() and I made r4d to make macros can be used within various
forms of texts. This article was written in $date() $time().

$ifdef(test, This should be only printed when I'm testing not in release)

This is some important table automatically formatted according to environment
variable.

$table($env(TABLE_FORM),\*H1,H2,H3
a,b,c
d,e,f*\)

I'm out of idea and I need some texts, $lipsum(15) 

Processed texts

---
title : R4d demo
author : Simon Creek
---
My name is Simon Creek and I made r4d to make macros can be used within various
forms of texts. This article was written in 2021-09-26 21:36:59.


This is some important table automatically formatted according to environment
variable.

|H1|H2|H3|
|-|-|-|
|a|b|c|
|d|e|f|

I'm out of idea and I need some texts, Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.

Install

You can download binaries in release page

If your platform is not listed, mostly MacOS, directly install from cargo registry.

# Binary features is mandatory or else it is not an executable
cargo install r4d --features binary
# If you need color prompt, then use features "color"
cargo install r4d --features binary,color

Simple usage

Binary

# Read from file and print to stdout 
rad input_file.txt
# Read from standard input and print to file
printf '...text...' | rad -o out_file.txt

Library

use rad::RadError;
use rad::Processor;

let processor = Processor::new()
    .greedy(true)
    .write_to_file(Some(PathBuf::from("cache.txt")))?
    .build(); 

processor.from_file(Path::new("input.txt"))?;
processor.print_result()?;

Usage

Detailed usage

Syntax

Macro syntax

Basic macros (or macro-like functions)

Macros

Macro types

Types

How to debug

Debug

NOTE

0.11 has breaking changes

Though there were several minor breaking changes, this version has several breaking changes over command line arguments, how processing works by default, how macros worrk by default.

Changes are illustrated in release page.

Windows path bug was fixed in 0.11.5

Because windows also accept Slash (/) as path delimiter, I didn't find any problem until I found windows's default path delimiter is Reverse slash (\). This was fixed in 0.11.5

Goal

R4d aims to be a modern alternative to m4 processor, which means

  • No trivial m4 quotes for macro definition
  • An explicit rule for macro definition and usage so that de facto underscore rule is not necessary
  • Easier binding with other programming languages(Rust's c binding)
  • Enable combination of file stream and stdout
  • As expressive as current m4 macro processor

Dependencies

~1.7–4MB
~93K SLoC