single-file C libraries from Philip Allan Rideout
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

Build Status


Single-file C libraries under the MIT license. Documentation can be found at the top of each header file, but some libraries have an accompanying blog post.

library description link
par_msquares.h efficient marching squares implementation blog post
par_shapes.h generate parametric surfaces and other simple shapes blog post
par_bubbles.h pack circles into hierarchical diagrams blog post
par_bluenoise.h generate progressive 2D point sequences blog post
par_sprune.h efficient broad-phase collision detection in 2D web demo
par_easycurl.h simple HTTP requests using libcurl
par_filecache.h LRU caching on your device's filesystem
par_easings.h Robert Penner's easing functions


To run tests, you need CMake and libcurl. On OS X, these can be installed with homebrew:

$ brew install cmake pkg-config curl

Here's how you can tell CMake to use the CMakeLists in the test folder, placing all the messy stuff in a new folder called build.

$ cmake test -Bbuild   # Create makefiles
$ cmake --build build  # Invoke the build

The tests are executed by simply running the programs:

$ build/test_msquares
$ build/test_bluenoise
$ build/test_bubbles
$ build/test_shapes

code formatting

This library's code style is strictly enforced to be vertically dense (no consecutive newlines) and horizontally narrow (80 columns or less).

The tools/ script invokes a two-step code formatting process:

  1. Runs uncrustify with our custom configuration. This auto-formats all code in the root folder, up to a point. For example, it does not enforce the 80-character line constraint because line breaking is best done by a human.
  2. Checks for violations that are not otherwise enforced with uncrustify.

The aforementioned Python script is also invoked from Travis, but using the --check option, which checks for conformance without editing the code.

Beyond what our uncrustify configuration enforces, the Python script does the following:

  • Checks that no lines are more than 80 chars.
  • Checks for extra newlines before an end brace.