Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/baig/pandoc-csv2table

A Pandoc filter that renders CSV as Pandoc Markdown Tables.
https://github.com/baig/pandoc-csv2table

csv pandoc pandoc-filter

Last synced: 18 days ago
JSON representation

A Pandoc filter that renders CSV as Pandoc Markdown Tables.

Awesome Lists containing this project

README

        

# Pandoc csv2table Filter

[![Build Status](https://travis-ci.org/vmandela/pandoc-csv2table.svg?branch=master)](https://travis-ci.org/vmandela/pandoc-csv2table)

A Pandoc filter that replaces CSV content (either inside fenced code blocks or referenced CSV files) with
[Pandoc Table Markdown][tables].

![A CSV file rendered to Markdown and PDF][png]

[png]: Examples/demo.png

## Installation

You can use this filter in two ways.

1. **Install using Cabal:** After installing Haskell platform, run:

> ```
> cabal install pandoc-csv2table
> ```

2. **Use the single file filter:** There is a gist hosting a single file
version of this filter [here][gist]. Clone it and make it an executable script by
running:

> ```
> chmod +x pandoc-csv2table.hs
> ```

[gist]: https://gist.github.com/baig/b69e3146251bd90d12e7

You can also use this filter in your Pandoc application by calling
`tablifyCsvlinks`.

## Usage

### Referencing or including CSV

There are three ways to include CSV in your markdown.

1. **Referencing CSV file in Image Links:**

```
![This text will become the table caption](table.csv)
```

2. **Referencing CSV file in Fenced Code Blocks:**

```{.table caption="This is the **caption**" source="table.csv"}
```

Only code blocks having `.table` class will be processed.

3. **Including CSV content inside Fenced Code Blocks:**

```{.table aligns="LCR" caption="This is the **caption**" header="yes"}
Fruit, Quantity, Price
apples, 15, 3.24
oranges, 12, 2.22
```

Only code blocks having `.table` class will be processed.

CSV file or content can contain pandoc markdown. It will be parsed by the Pandoc Markdown
Reader before being inserted as a table into the document.

### Running the filter

Given the filename `test.md`, run the filter using command

pandoc --filter pandoc-csv2table -o test.html test.md

or

pandoc -t json test.md | pandoc-csv2table | pandoc -f json -o test.html

## Examples

See [example.md][md] and the rendered [pdf][] version in the Examples folder
for more details on usage.

[md]: Examples/example.md
[pdf]: Examples/example.pdf

## Options

You can specify a [configuration string][cfg] for image links and
[attributes][atr] for fenced code blocks. There are valid options for specifying

- Type of the table
- Column alignments
- Whether to treat the first line of the CSV file as header or not

[cfg]: README.md#configuration-string
[atr]: README.md#attributes

### Configuration String

It is included right before the closing square bracket **without any space in
between**, as shown in the example below.

> \!\[Another table. mylrcd](table.csv)

`mylrcd` is the configuration string.
This will be rendered as a **m**ultiline table with a header with first column
**l**eft-aligned, second **r**ight-aligned, third **c**enter-aligned, and the
fourth one having **d**efault alignment.
***The config string will be removed from the caption after being processed.***

The config string can contain following letters:

- **`s`** for **s**imple table
- **`m`** for **m**ultiline table
- **`g`** for **g**rid table
- **`p`** for **p**ipe table
- **`y`** (from **y**es) when you want the first row of CSV file to be the
header.
- **`n`** (from **n**o) when you want to omit the header.
- **`l`** for **l**eft alignment of the column
- **`r`** for **r**ight alignment of the column
- **`c`** for **c**center alignment of the column
- **`d`** for **d**efault alignment of the column

You can specify `l` `r` `c` `d` for each column in a series.
The extra letters will be ignored if they exceed the number of columns in the
CSV file.

### Attributes

You can specify header attributes in fecnced code blocks like this:

```{.table type="pipe" aligns="LCR" caption="A **caption**" header="yes"}
Fruit, Quantity, Price
apples, 15, 3.24
oranges, 12, 2.22
```

***Note: `.table` must be included if the fenced code block is intended to be
processed by this filter.***

Valid attributes that you can specify in code blocks include:

- **type** of the table can be **`simple`**, **`multiline`**,
**`grid`** (default), or **`pipe`**.
- **header** can be `yes` (default) or `no`
- **caption** is a string which can contain markdown.
- **source** is the path to a valid CSV file to be rendered as pandoc table.
If present, the contents inside the fenced code blocks are ignored.
- **aligns** specify alignment for each column. Use **`L`** for left, **`R`**
for right, **`C`** for center, and **`D`** for default.

## License

Copyright © 2015-2023 [Wasif Hasan Baig](https://twitter.com/_wbaig),[Venkateswara Rao Mandela](https://vmandela.com)

Source code is released under the Terms and Conditions of [MIT License](http://opensource.org/licenses/MIT).

Please refer to the [License file][license] in the project's root directory.

[license]: LICENSE
[tables]: http://pandoc.org/README.html#tables