No description
Find a file
Jaremy Creechley 77110cfdc7
Merge pull request #1 from elcritch/apis
Human Friendly Apis
2025-11-26 09:44:16 -07:00
.github/workflows initial setup 2025-11-24 06:37:48 -07:00
src add apis 2025-11-26 06:12:07 -07:00
tests add apis 2025-11-26 06:12:07 -07:00
.gitignore apis 2025-11-25 05:07:35 -07:00
AGENTS.md initial setup 2025-11-24 06:21:22 -07:00
config.nims initial setup 2025-11-24 06:19:36 -07:00
geecode.nimble update 2025-11-26 09:41:37 -07:00
README.md initial setup 2025-11-24 06:34:35 -07:00

Geecode

Geecode is a Nim library for parsing G-code programs into a structured representation suited for CNC and 3D printing workflows. It tokenizes each line into words, addresses, percent markers, and comments while preserving metadata like deleted lines and line numbers.

Features

  • Parses G-code into GCodeProgram, Block, Chunk, and Address objects for inspection or transformation
  • Supports word/address pairs, isolated words, percent markers, and multiple comment styles ((), [], ;)
  • Tracks deleted lines prefixed with / and optional N line numbers without dropping later tokens
  • Provides equality helpers for comparing addresses, chunks, and blocks in tests
  • parseGcodeSavingBlockText also records printable debug text for each parsed line

Installation

Use Atlas for dependency setup:

atlas use https://github.com/elcritch/geecode

Usage

A minimal example showing parsing and inspection:

import geecode

let program = parseGcode("N10 G1 X1.0 Y2.0 ; move")
let blks = program.getBlock(0)

echo program.numBlocks       # 1
echo blks.chunkAt(0)        # G1
echo blks.chunkAt(2)        # Y2.0

let debugProgram = parseGcodeSavingBlockText("G0 X0 Y0")
echo debugProgram.getBlock(0).debugText  # "G0 X0 Y0 "

Tests

Run the test suite with:

nim test

Attribution

Geecode is derived from dillonhuff/gpr and continues under the same MIT license.

License

MIT. See LICENSE for details.