diff --git a/README.md b/README.md
index 920325e..eab621f 100644
--- a/README.md
+++ b/README.md
@@ -146,6 +146,11 @@ The full documentation is published at
## Contributing
+Contributions are welcome. Visit the [project on GitHub](https://github.com/ateliersvg/text)
+to [report a bug](https://github.com/ateliersvg/text/issues/new),
+[suggest a feature](https://github.com/ateliersvg/text/issues/new), or
+[open a pull request](https://github.com/ateliersvg/text/pulls).
+
Before submitting code, run:
```bash
@@ -159,8 +164,6 @@ Changes to public behaviour need a test and a documentation update.
Bug reports, security disclosures, and contribution guidelines are collected at
[ateliersvg.com/support](https://ateliersvg.com/support/).
-Atelier is maintained by Simon André.
-
## License
Atelier Text is released under the [MIT License](LICENSE).
diff --git a/assets/logo/README.md b/assets/logo/README.md
deleted file mode 100644
index f461f5a..0000000
--- a/assets/logo/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Logo
-
-A capital T traced as the contour of the filled letterform, with the anchor points of that
-path left visible. The mark is an instance of what the package makes: turning Unicode into
-glyph outlines is the whole job, and an outline is a path with points.
-
-| File | Box | Contents |
-| --- | --- | --- |
-| `mark.svg` | 24 x 24 | the contour in the accent, its six anchor points in the soft tone |
-| `mark-mono.svg` | 24 x 24 | the contour in `currentColor`, alternate segments at 55% |
-
-Accent `#e8657f`, soft `#f2a0b1`. `mark-mono.svg` takes the colour of its context, which is
-what a README or a sidebar needs.
-
-The points sit on the letter's own corners; the two at the bar and stem junction are left out
-because they crowd the joint without saying anything the others do not.
-
-In the reduced mark every other segment of the contour takes the softer tone, the way the
-barcode bars and the rasterizer grid alternate. The caps are square: with butt caps each
-segment stops short of the corner and nicks it.
-
-The full `ATELIER \ TEXT` lockups do not exist yet: the other packages derive theirs from the
-Atelier wordmark, which is type converted to paths and is not reproduced here.
diff --git a/assets/logo/mark-mono.svg b/assets/logo/mark-mono.svg
deleted file mode 100644
index 261aa63..0000000
--- a/assets/logo/mark-mono.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
diff --git a/assets/logo/mark.svg b/assets/logo/mark.svg
deleted file mode 100644
index 5a7cae0..0000000
--- a/assets/logo/mark.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
diff --git a/composer.json b/composer.json
index dd89689..e176601 100644
--- a/composer.json
+++ b/composer.json
@@ -3,7 +3,7 @@
"description": "Map Unicode text to positioned font glyphs, vector outlines, and SVG documents using alto/font and atelier/svg.",
"type": "library",
"license": "MIT",
- "homepage": "https://github.com/ateliersvg/text",
+ "homepage": "https://ateliersvg.com/text/",
"keywords": [
"font",
"glyph",
@@ -23,7 +23,8 @@
"authors": [
{
"name": "Simon André",
- "email": "smn.andre@gmail.com"
+ "email": "smn.andre@gmail.com",
+ "homepage": "https://smnandre.dev"
}
],
"minimum-stability": "stable",
@@ -53,7 +54,6 @@
"sort-packages": true
},
"scripts": {
- "coverage": "vendor/bin/phpunit --coverage-text",
"cs": "vendor/bin/php-cs-fixer fix --dry-run --diff --sequential",
"cs:fix": "vendor/bin/php-cs-fixer fix --sequential",
"qa": [
@@ -61,7 +61,6 @@
"@sa",
"@test"
],
- "rector": "vendor/bin/rector process --dry-run",
"sa": "vendor/bin/phpstan analyse --memory-limit=-1",
"test": "vendor/bin/phpunit"
}
diff --git a/docs/outlines.md b/docs/outlines.md
index cf4facc..d0bd6ec 100644
--- a/docs/outlines.md
+++ b/docs/outlines.md
@@ -25,7 +25,7 @@ $path->isEmpty(); // false
| Member | Type | What it is |
|---|---|---|
| `d()` | `string` | every glyph's contours, concatenated, in one `d` attribute |
-| `$advanceWidth` | `float` | how far the run advances, including any spacing you asked for |
+| `$advanceWidth` | `float` | how far the run advances, including configured spacing |
| `isEmpty()` | `bool` | true when the text produced no glyphs, as an empty string does |
`$advanceWidth` is the value to use when you lay several runs out yourself: it
diff --git a/docs/shaping.md b/docs/shaping.md
index 040fba8..1cfce7a 100644
--- a/docs/shaping.md
+++ b/docs/shaping.md
@@ -4,14 +4,15 @@ order: 60
# Shaping
Shaping is the step between a string and a set of positioned glyphs: which
-glyph each character maps to, and where each one sits. This package ships a
-deliberately small implementation of it, and a seam where a real one goes.
+glyph each character maps to, and where each one sits. This package provides a
+deliberately limited mapper and an interface for replacing it with a full
+shaping engine.
## What the built-in mapper does
One direct `cmap` lookup per Unicode codepoint, producing a left-to-right run.
-Each glyph gets its advance from the font's metrics, plus whatever
-`letterSpacing` and `wordSpacing` you asked for.
+Each glyph gets its advance from the font's metrics, plus the configured
+`letterSpacing` and `wordSpacing`.
That is the whole algorithm. It is enough for a headline, a chart label, a
watermark, or a social card in a Latin script, which is what the package was
@@ -27,9 +28,9 @@ built for.
| kerning | reading `GPOS` or `kern` |
| script shaping | per-script rules for Arabic, Devanagari, and others |
-None of these is a bug to be fixed later in this class. Each is a body of work
-that HarfBuzz exists to do, and pretending otherwise would produce text that
-looks right in English and wrong everywhere else.
+Complex scripts, bidirectional text, ligatures, kerning, and font fallback
+require a full shaping engine such as HarfBuzz. The built-in mapper keeps its
+scope explicit instead of approximating those behaviors.
A codepoint the font has no glyph for throws
[`MissingGlyphException`](errors.md) rather than falling back, because falling
@@ -78,8 +79,8 @@ a ligature is one glyph from two characters, so it has one cluster and no single
codepoint. The built-in mapper never produces that case, but the contract
already allows it.
-`TextDirection::RightToLeft` exists in the enum for the same reason. Nothing in
-the package emits it yet.
+`TextDirection::RightToLeft` is available to custom shapers. The built-in mapper
+returns `TextDirection::LeftToRight`.
## Replacing the mapper