PHP code example of develate / commonmark-customtags

1. Go to this page and download the library: Download develate/commonmark-customtags library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

develate / commonmark-customtags example snippets




evelate\CommonmarkCustomtags\Customtag;
use Develate\CommonmarkCustomtags\CustomtagExtension;
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\MarkdownConverter;

final class BadgeTag extends Customtag
{
    public function identifier(): string
    {
        return 'badge';
    }

    public function render($arguments, $globals): Stringable|string|null
    {
        $text = htmlspecialchars($arguments['text'] ?? '', ENT_QUOTES);
        $tone = htmlspecialchars($arguments['tone'] ?? 'default', ENT_QUOTES);

        return sprintf('<span class="badge badge--%s">%s</span>', $tone, $text);
    }
}

$environment = new Environment([]);
$environment->addExtension(new CommonMarkCoreExtension());
$environment->addExtension(
    (new CustomtagExtension())
        ->addTag(new BadgeTag())
);

$converter = new MarkdownConverter($environment);

echo $converter->convert('Status: {{badge text="Ready now" tone=success}}');

[
    0 => 'Visit site',
    'href' => 'https://example.com',
    'style' => 'primary',
]

use Develate\CommonmarkCustomtags\Customtag;

final class MentionTag extends Customtag
{
    public function identifier(): string
    {
        return 'mention';
    }

    public function render($arguments, $globals): Stringable|string|null
    {
        $username = htmlspecialchars($arguments[0] ?? '', ENT_QUOTES);

        return '<a href="/users/' . $username . '">@' . $username . '</a>';
    }
}

$extension = new CustomtagExtension();
$extension->addTag(new MentionTag());

$environment->addExtension($extension);

final class AlertTag extends Customtag
{
    public function identifier(): string
    {
        return 'alert';
    }

    public function makeArguments(array $arguments): array
    {
        return [
            'type' => $arguments['type'] ?? 'info',
            'message' => $arguments['message'] ?? '',
        ];
    }

    public function render($arguments, $globals): Stringable|string|null
    {
        $type = htmlspecialchars($arguments['type'], ENT_QUOTES);
        $message = htmlspecialchars($arguments['message'], ENT_QUOTES);

        return '<aside class="alert alert--' . $type . '">' . $message . '</aside>';
    }
}

$extension = new CustomtagExtension(
    globals: [
        'asset_base_url' => 'https://cdn.example.com',
        'locale' => 'en',
    ],
);

public function render($arguments, $globals): Stringable|string|null
{
    $src = rtrim($globals['asset_base_url'], '/') . '/' . ltrim($arguments['src'] ?? '', '/');

    return '<img src="' . htmlspecialchars($src, ENT_QUOTES) . '" alt="">';
}

$extension = new CustomtagExtension(
    globals: null,
    tags: [],
    openingDelimiter: '[[',
    closingDelimiter: ']]',
);

$extension->addTag(new BadgeTag());

$extension = new CustomtagExtension(
    tags: [
        'badge' => new BadgeTag(),
        'mention' => new MentionTag(),
    ],
);

htmlspecialchars($value, ENT_QUOTES)
urlencode($value)



evelate\CommonmarkCustomtags\Customtag;
use Develate\CommonmarkCustomtags\CustomtagExtension;
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\MarkdownConverter;

final class LinkButtonTag extends Customtag
{
    public function identifier(): string
    {
        return 'link-button';
    }

    public function makeArguments(array $arguments): array
    {
        return [
            'label' => $arguments[0] ?? $arguments['label'] ?? 'Open',
            'href' => $arguments['href'] ?? '#',
            'variant' => $arguments['variant'] ?? 'primary',
        ];
    }

    public function render($arguments, $globals): Stringable|string|null
    {
        $label = htmlspecialchars($arguments['label'], ENT_QUOTES);
        $href = htmlspecialchars($arguments['href'], ENT_QUOTES);
        $variant = htmlspecialchars($arguments['variant'], ENT_QUOTES);

        return '<a class="button button--' . $variant . '" href="' . $href . '">' . $label . '</a>';
    }
}

$environment = new Environment([]);
$environment->addExtension(new CommonMarkCoreExtension());

$customtags = new CustomtagExtension();
$customtags->addTag(new LinkButtonTag());

$environment->addExtension($customtags);

$converter = new MarkdownConverter($environment);

echo $converter->convert(
    'Read more: {{link-button Documentation href=https%3A%2F%2Fcommonmark.thephpleague.com variant=secondary}}'
);