Skip to content
textgrid.hpp - a C++ TextGrid parser / writer
C++ Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
data
examples Fixed coding style according to the clang-format based on Google style Jan 21, 2019
tests
.clang-format
.gitignore
CPPLINT.cfg
LICENSE
Makefile
README.md
cpplint.py
textgrid.hpp

README.md

textgrid.hpp - a C++ TextGrid parser / writer

CircleCI MIT License

Introduction

textgrid.hpp is a C++ library for interacting with Praat TextGrid files.

It has the following features:

  • Single header
  • C++11 (or later)
  • No external dependencies (only use standard libraries)
  • Support only ASCII and UTF-8
  • Checking invariants is not implemented yet

Notes on Praat and TextGrid file format:

Examples

Now, there are only 3 examples to read from stdin and write to stdout.

I will write how to use TextGrid, Tier, IntervalTier, PointTier, Interval, Point objects.

Read TextGrid file from std::cin and Write to std::cout with operators

void ReadAndWriteViaStdio() {
  textgrid::TextGrid text_grid;
  try {
    std::cin >> text_grid;
    std::cout << text_grid;
  } catch (const textgrid::Exception& e) {
    std::cerr << e.what() << std::endl;
  }
}

Read TextGrid file from std::cin and Write to std::cout in 1 line

void ReadAndWriteViaStdioInOneLine() {
  try {
    textgrid::Parser(std::cin).Parse().Accept(textgrid::Writer(std::cout));
  } catch (const textgrid::Exception& e) {
    std::cerr << e.what() << std::endl;
  }
}

Read TextGrid file from std::cin and Write to std::cout step by step

int ReadAndWriteStepByStep(std::istream& in,
                           std::ostream& out,
                           std::ostream& err,
                           bool in_short = false) {
  try {
    textgrid::Parser parser(in);
    textgrid::TextGrid text_grid = parser.Parse();
    if (in_short) {
      textgrid::ShortWriter writer(out);
      text_grid.Accept(writer);
    } else {
      textgrid::Writer writer(out);
      text_grid.Accept(writer);
    }
    return 0;
  } catch (const textgrid::Exception& e) {
    err << e.what() << std::endl;
    return -1;
  }
}

See also in the examples/textgrid_print.cpp.

Build and Test

Build example commands in the examples directory

$ make

Test the style of codes by cpplint

$ make check-style

or

$ make check-style-by-cpplint

Fix the style of codes by clang-format

$ make check-style-by-clang-format

Build and run tests

$ make check

Todo

  • Write example usage of TextGrid objects (Tier, IntervalTier, PointTier, Interval, Point) in README.md.
  • Write comments.
  • Write tests.
  • Write more example commands.
  • Write more utilities derived from TextGridVisitor.
  • Add building interfaces to create TextGrid objects from scratch.
    • IntervalTier should have interfaces to divide the specific interval to 2 intervals.
  • Check strong invariants in parsing TextGrid files.

License

This is licensed under the MIT License.

Copyright (c) 2019, Eiichiro Iwata. All rights reserved.

You can’t perform that action at this time.