Text
Use original line numbers for a fixed range, or literal source text for known boundaries. Prefer a structural selector when a supported declaration has a stable name. HTML, SVG, YAML, Markdown, and environment files can all be sliced this way; no comment markers need to be added.
| Selector | Boundary behavior |
|---|---|
fromLine($text) |
Start at the first matching line, including it. |
throughLine($text) |
End at the first matching line, including its content. |
afterLine($text) |
Start after the first matching line. |
beforeLine($text) |
End before the first matching line. |
All four search case-sensitive substrings inside the current slice. They do not match nested
HTML elements, YAML mappings, or Markdown sections structurally. Use method(), rule(), or
block() when the source language provides them.
The PHP selections below assume installation is complete and Composer's autoloader is loaded. Save each input under the filename shown before running its PHP selection. Choose these selectors when you know the exact text or original line numbers.
Select exact source lines
This standalone example selects one original source line without relying on language detection:
<?php
require __DIR__.'/vendor/autoload.php';
use Alto\Code\Slicer\CodeSource;
$source = CodeSource::fromString("first\nsecond\nthird");
echo $source->lines(2, 2)->content(), "\n";Save it beside vendor, then run it with PHP. It prints:
second
Use after() and before() for boundaries within a line; use the line helpers
below when the matching lines themselves should be included or excluded.
HTML: include a complete form
Source: checkout.html
<main>
<form action="/orders" method="post">
<input name="email" type="email" required>
<button type="submit">Confirm</button>
</form>
<p>Payment is collected on confirmation.</p>
</main>
Selection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('checkout.html')->slice()
->fromLine('<form ')
->throughLine('</form>');
echo $slice->content();Result
<form action="/orders" method="post">
<input name="email" type="email" required>
<button type="submit">Confirm</button>
</form>
To keep only its contents, exclude the matching tag lines:
Selection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('checkout.html')->slice()
->afterLine('<form ')
->beforeLine('</form>');
echo $slice->content();Result
<input name="email" type="email" required>
<button type="submit">Confirm</button>
SVG: select a group
Source: confirmed.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<title>Order confirmed</title>
<g id="badge" fill="none" stroke="currentColor">
<circle cx="12" cy="12" r="10"/>
<path d="m7 12 3 3 7-7"/>
</g>
</svg>Selection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('confirmed.svg')->slice()
->fromLine('<g id="badge"')
->throughLine('</g>');
echo $slice->content();Result
<g id="badge" fill="none" stroke="currentColor">
<circle cx="12" cy="12" r="10"/>
<path d="m7 12 3 3 7-7"/>
</g>This group has no nested g. With nested groups, throughLine('</g>') would stop at the first
closing line, so it cannot stand in for an element selector.
YAML: select known settings
Source: checkout.yaml
app:
name: Checkout
currency: EUR
services:
App\Checkout:
arguments:
$taxRate: 1.2
$currency: '%app.currency%'
receipt:
subject: Your order is confirmedSelection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('checkout.yaml')->slice()
->fromLine('services:')
->beforeLine('receipt:');
echo $slice->content();Result
services:
App\Checkout:
arguments:
$taxRate: 1.2
$currency: '%app.currency%'The keys are text boundaries. This selection does not infer YAML indentation or resolve a key path.
Markdown: select a section between headings
Source: checkout.md
# Checkout
## Installation
Install the package with Composer.
## Usage
Load your source and select a method.Selection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('checkout.md')->slice()
->fromLine('## Installation')
->beforeLine('## Usage');
echo $slice->content();Result
## Installation
Install the package with Composer.The blank line before the next heading is preserved. Both heading texts are supplied explicitly.
Environment files: select variable assignments
Source: .env.example
APP_ENV=dev
APP_NAME="Checkout demo"
APP_URL=http://localhost:8000
ASSET_URL=${APP_URL}/assets
MAILER_DSN=null://nullSelection
<?php
use Alto\Code\Slicer\CodeSource;
$slice = CodeSource::fromFile('.env.example', 'dotenv')->slice()
->fromLine('APP_NAME=')
->throughLine('ASSET_URL=');
echo $slice->content();Result
APP_NAME="Checkout demo"
APP_URL=http://localhost:8000
ASSET_URL=${APP_URL}/assetsThe source is read as text. Environment variables are not loaded or expanded.
Exact lines and text within a line
lines(4, 8) selects inclusive line numbers from the original file. after('return ') and
before(';') cut at exact text inside a line and exclude that text. These methods also work
when the source language is unknown.
Every selection retains the original bytes and source line numbers. Empty or multiline search
text is rejected by the line helpers; missing text throws SourceTextNotFound.
See the public API or return to the language guides.