2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/LineFormatter/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
2021-11-06 12:49:23 -04:00
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/LineFormatter/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/LineFormatter/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/LineFormatter/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/LineFormatter/actions/workflows/jsoncheck.yml)
|
2021-01-29 06:31:58 -05:00
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/LineFormatter/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/LineFormatter.svg?maxAge=3600)](https://github.com/RobTillaart/LineFormatter/releases)
|
|
|
|
|
2021-11-06 12:49:23 -04:00
|
|
|
|
2020-05-17 04:37:41 -04:00
|
|
|
# LineFormatter
|
|
|
|
|
|
|
|
Arduino library to enhance the layout of tabular data on serial output,
|
|
|
|
|
2021-11-06 12:49:23 -04:00
|
|
|
|
2020-05-17 04:37:41 -04:00
|
|
|
# Description
|
|
|
|
|
|
|
|
LineFormatter is a wrapper class for Serial (and other streams) to enhance
|
|
|
|
layout of tabular data.
|
|
|
|
|
|
|
|
The class intercepts the TAB characters printed and replaces them with spaces to
|
|
|
|
the next defined tab-position. These positions can be created with **addTab(n)**
|
|
|
|
for absolute positions and **andRelTab(n)** for relative positions.
|
|
|
|
|
|
|
|
Absolute tab positions must be added in increasing order as the class does not
|
|
|
|
check the input. Also adding same value twice is not checked for. The maximum
|
|
|
|
number of tabs is defined by **MAX_TAB_STOPS** == 10 default. This value canbe
|
|
|
|
overruled by -D compile flag or edited in the LineFormatter.h file.
|
|
|
|
|
|
|
|
Tab positions can be cleared by **clearTabs()**. This removes all tabs in one call.
|
|
|
|
|
|
|
|
The function **autoNewLine(n)** prints a newline after every n lines. This makes
|
|
|
|
it easier to count the lines in a table. Setting **n** to 0 disables this function.
|
|
|
|
|
|
|
|
The function **gotoPos(n)** prints spaces until the cursor is on position **n**.
|
|
|
|
Besides for tabular data, this function can be used to make simple text based
|
|
|
|
graphs, e.g. a histogram (see examples).
|
|
|
|
|
|
|
|
The function **repeat(n, s, nl)** which repeats a certain character or a string n times.
|
|
|
|
This is followed by **nl** newlines which is zero by default.
|
|
|
|
**repeat()** is useful to make separator lines or to print several newlines at once.
|
|
|
|
|
|
|
|
The function **setMaxLength(n)** to cut off (brute force, no intelligence) lines
|
|
|
|
after n characters by injecting an extra newline. This prevents scrolling hundreds
|
|
|
|
of positions to the right e.g. when copying a file from disk to Serial.
|
|
|
|
Setting the value to 0 results in no maximum line length.
|
|
|
|
Note: the maximum value is 255.
|
|
|
|
|
2021-11-06 12:49:23 -04:00
|
|
|
|
|
|
|
## Interface
|
|
|
|
|
|
|
|
- **LineFormatter(Print\* stream = &Serial)** constructor
|
|
|
|
- **reset()** reset internal variables to start over again.
|
|
|
|
|
|
|
|
|
|
|
|
#### Printing
|
|
|
|
|
|
|
|
- **size_t write(uint8_t c)** implements print.
|
|
|
|
- **uint8_t gotoPos(uint8_t n)** if position is smaller than n, move to the right
|
|
|
|
- **void repeat(uint8_t n, char c, uint8_t newLine = 0)** repeat a char n times
|
|
|
|
- **void repeat(uint8_t n, const char\* str, uint8_t newLine = 0)** repeat a "string" n times
|
|
|
|
|
|
|
|
|
|
|
|
#### Tab configuration
|
|
|
|
|
|
|
|
- **bool addTab(uint8_t n)** Add a tab at an absolute position. returns true on success
|
|
|
|
- **bool addRelTab(uint8_t n)** Add a tab at a relative position. returns true on success
|
|
|
|
- **void clearTabs()** remove all the tabs.
|
|
|
|
- **void tab(uint8_t n = 1)** print zero or more tabs, similar as e.g. "\t\t\t"
|
|
|
|
|
|
|
|
|
|
|
|
#### Line configuration
|
|
|
|
|
|
|
|
- **void setMaxLength(uint8_t maxPos)** set the maximum line length - bold cut off
|
|
|
|
- **uint8_t getMaxLength()** return max line length set.
|
|
|
|
- **void setAutoNewLine(uint8_t n)** n = 0 switches autoNewLine off
|
|
|
|
- **uint8_t getAutoNewLine()** returns number of newlines.
|
|
|
|
|
|
|
|
|
2020-05-17 04:37:41 -04:00
|
|
|
### Debugging
|
|
|
|
|
|
|
|
For debugging purposes there are the following functions:
|
2021-11-06 12:49:23 -04:00
|
|
|
|
|
|
|
- **uint8_t getPos()** returns current position
|
|
|
|
- **void resetLineCount()** sets internal lineCounter to zero
|
|
|
|
- **uint16_t getLineCount()** returns current line number (since last reset)
|
|
|
|
- **uint8_t getTabCount()** get the number of tab positions added.
|
|
|
|
- **uint8_t getTabStop(uint8_t n)**
|
|
|
|
- **void printRuler()** prints a dotted line with 5 and 10 markers, and # for tab positions.
|
|
|
|
|
2020-05-17 04:37:41 -04:00
|
|
|
|
|
|
|
# Operational
|
|
|
|
|
|
|
|
See examples
|
2021-11-06 12:49:23 -04:00
|
|
|
|
|
|
|
|
|
|
|
## Future
|
|
|
|
|
|
|
|
- improve documentation
|
|
|
|
- add examples
|
|
|
|
- add reset();
|
|
|
|
- check if print interface is completely covered.
|
|
|
|
- set defaults for functions
|
|
|
|
- add **rmTab(position)**
|
|
|
|
-
|