<commit_before># TSpartaPathBuilder

I declare an API that sparta path builder should have.

## Overview

I provide a set of methods to create an arbitrary vector path.
I can work in both relative and absolute mode, that influences on how path is created.

## Public API and Key Messages

- `absolute` - switch to absolute coordinates mode. Every Point provided as argument to my methods is supposed to be specified in global coordinates.
- `relative` - switch to relative coordinates mode. Points provided as arguments are treated as related deltas from current path's end point.
- `moveTo:` - moves current end point to a Point.
- `lineTo:` - adds a line segment from current end point to a Point
- `curveVia:to:` - adds a Quadratic Bezier curve via an anchor point to aPoint
- `curveVia:and:to:` - adds a Cubic Bezier curve via two anchor points to a Point
- `*ArcTo:` - adds an arc segment to a Point.
- `close` - closes a path, connecting current end point with start point with line
- `finish` - to end path construction and return an instance SpartaPath. Any message send to PathBuilder after finish will result in a crash.

## Example:

Create a rectangle path similar to (20@20 corner: 40@40):
```smalltalk
path := canvas path
	relative;
	moveTo: 20@20;
	lineTo: 0@20;
	lineTo: (20@0) negated;
	lineTo: (0@20) negated;
	close;
	finish.
```

## Internal Representation and Key Implementation Points.


    Implementation Points<commit_msg>[skip ci] path builder class doc pillar<commit_after>!! TSpartaPathBuilder

I declare an API of a path builder.

!! Overview

I provide a set of methods to create an arbitrary vector path.
I can work in both relative and absolute mode, that influences on how path is created.

!! Public API and Key Messages

- ==absolute== - switch to absolute coordinates mode. Every Point provided as argument to my methods is supposed to be specified in global coordinates.
- ==relative== - switch to relative coordinates mode. Points provided as arguments are treated as related deltas from current path's end point.
- ==moveTo:== - moves current end point to a Point.
- ==lineTo:== - adds a line segment from current end point to a Point
- ==curveVia:to:== - adds a Quadratic Bezier curve via an anchor point to aPoint
- ==curveVia:and:to:== - adds a Cubic Bezier curve via two anchor points to a Point
- ==*ArcTo:== - adds an arc segment to a Point.
- ==close== - closes a path, connecting current end point with start point with line
- ==finish== - to end path construction and return an instance SpartaPath. Any message send to PathBuilder after finish will result in a crash.

!! Example:

Create a rectangle path similar to (20@20 corner: 40@40):
[[[language=smalltalk
path := canvas path
	relative;
	moveTo: 20@20;
	lineTo: 0@20;
	lineTo: (20@0) negated;
	lineTo: (0@20) negated;
	close;
	finish.
]]]

!! Internal Representation and Key Implementation Points.


    Implementation Points
{'fraction_non_alphanumeric': 0.0798907476954592, 'fraction_numerical': 0.014339364970979856, 'mean_word_length': 4.077989601386482, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1690691', 'n_tokens_mistral': 844, 'n_tokens_neox': 797, 'n_words': 425}