code highlighting added
This commit is contained in:
parent
a442fe31f9
commit
918872fde1
|
@ -10,6 +10,7 @@
|
||||||
"doctrine/doctrine-bundle": "^2.10",
|
"doctrine/doctrine-bundle": "^2.10",
|
||||||
"doctrine/doctrine-migrations-bundle": "^3.2",
|
"doctrine/doctrine-migrations-bundle": "^3.2",
|
||||||
"doctrine/orm": "^2.15",
|
"doctrine/orm": "^2.15",
|
||||||
|
"scrivo/highlight.php": "v9.18.1.10",
|
||||||
"symfony/console": "6.3.*",
|
"symfony/console": "6.3.*",
|
||||||
"symfony/dotenv": "6.3.*",
|
"symfony/dotenv": "6.3.*",
|
||||||
"symfony/flex": "^2",
|
"symfony/flex": "^2",
|
||||||
|
|
80
composer.lock
generated
80
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "f716d81393aa0f266916ea52e0fa0b53",
|
"content-hash": "de2f472bb7e2d9dbd3c6363258ac286e",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "doctrine/cache",
|
"name": "doctrine/cache",
|
||||||
|
@ -1521,6 +1521,84 @@
|
||||||
},
|
},
|
||||||
"time": "2021-07-14T16:46:02+00:00"
|
"time": "2021-07-14T16:46:02+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "scrivo/highlight.php",
|
||||||
|
"version": "v9.18.1.10",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/scrivo/highlight.php.git",
|
||||||
|
"reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e",
|
||||||
|
"reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"php": ">=5.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.8|^5.7",
|
||||||
|
"sabberworm/php-css-parser": "^8.3",
|
||||||
|
"symfony/finder": "^2.8|^3.4|^5.4",
|
||||||
|
"symfony/var-dumper": "^2.8|^3.4|^5.4"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"HighlightUtilities/functions.php"
|
||||||
|
],
|
||||||
|
"psr-0": {
|
||||||
|
"Highlight\\": "",
|
||||||
|
"HighlightUtilities\\": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Geert Bergman",
|
||||||
|
"homepage": "http://www.scrivo.org/",
|
||||||
|
"role": "Project Author"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Vladimir Jimenez",
|
||||||
|
"homepage": "https://allejo.io",
|
||||||
|
"role": "Maintainer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Martin Folkers",
|
||||||
|
"homepage": "https://twobrain.io",
|
||||||
|
"role": "Contributor"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js",
|
||||||
|
"keywords": [
|
||||||
|
"code",
|
||||||
|
"highlight",
|
||||||
|
"highlight.js",
|
||||||
|
"highlight.php",
|
||||||
|
"syntax"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/scrivo/highlight.php/issues",
|
||||||
|
"source": "https://github.com/scrivo/highlight.php"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/allejo",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2022-12-17T21:53:22+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v6.3.1",
|
"version": "v6.3.1",
|
||||||
|
|
74
public/css/ocean.css
Normal file
74
public/css/ocean.css
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/* Ocean Dark Theme */
|
||||||
|
/* https://github.com/gavsiu */
|
||||||
|
/* Original theme - https://github.com/chriskempson/base16 */
|
||||||
|
|
||||||
|
/* Ocean Comment */
|
||||||
|
.hljs-comment,
|
||||||
|
.hljs-quote {
|
||||||
|
color: #65737e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Red */
|
||||||
|
.hljs-variable,
|
||||||
|
.hljs-template-variable,
|
||||||
|
.hljs-tag,
|
||||||
|
.hljs-name,
|
||||||
|
.hljs-selector-id,
|
||||||
|
.hljs-selector-class,
|
||||||
|
.hljs-regexp,
|
||||||
|
.hljs-deletion {
|
||||||
|
color: #bf616a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Orange */
|
||||||
|
.hljs-number,
|
||||||
|
.hljs-built_in,
|
||||||
|
.hljs-builtin-name,
|
||||||
|
.hljs-literal,
|
||||||
|
.hljs-type,
|
||||||
|
.hljs-params,
|
||||||
|
.hljs-meta,
|
||||||
|
.hljs-link {
|
||||||
|
color: #d08770;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Yellow */
|
||||||
|
.hljs-attribute {
|
||||||
|
color: #ebcb8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Green */
|
||||||
|
.hljs-string,
|
||||||
|
.hljs-symbol,
|
||||||
|
.hljs-bullet,
|
||||||
|
.hljs-addition {
|
||||||
|
color: #a3be8c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Blue */
|
||||||
|
.hljs-title,
|
||||||
|
.hljs-section {
|
||||||
|
color: #8fa1b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ocean Purple */
|
||||||
|
.hljs-keyword,
|
||||||
|
.hljs-selector-tag {
|
||||||
|
color: #b48ead;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
background: #2b303b;
|
||||||
|
color: #c0c5ce;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-emphasis {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ declare(strict_types = 1);
|
||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
use App\DTO\PasteFormData;
|
use App\DTO\PasteFormData;
|
||||||
|
use App\Entity\CodeHighlighter;
|
||||||
use App\Entity\Paste;
|
use App\Entity\Paste;
|
||||||
use App\Form\Type\PasteForm;
|
use App\Form\Type\PasteForm;
|
||||||
use App\Repository\PasteRepository;
|
use App\Repository\PasteRepository;
|
||||||
|
@ -43,8 +44,9 @@ class PasteController extends AbstractController
|
||||||
$pasteData = new PasteFormData($paste);
|
$pasteData = new PasteFormData($paste);
|
||||||
$form = $this->createForm(PasteForm::class, $pasteData);
|
$form = $this->createForm(PasteForm::class, $pasteData);
|
||||||
|
|
||||||
return $this->render('paste.html.twig', [
|
return $this->render('show_paste.html.twig', [
|
||||||
'form' => $form,
|
'form' => $form,
|
||||||
]);
|
'highlighted_text' => CodeHighlighter::highlight($pasteData->language, $pasteData->text)
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
26
src/Entity/CodeHighlighter.php
Normal file
26
src/Entity/CodeHighlighter.php
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
use \Highlight\Highlighter;
|
||||||
|
|
||||||
|
|
||||||
|
class CodeHighlighter
|
||||||
|
{
|
||||||
|
public static function highlight(?string $language, string $code): string
|
||||||
|
{
|
||||||
|
$hl = new Highlighter();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Highlight some code.
|
||||||
|
$highlighted = $hl->highlight($language, $code);
|
||||||
|
$highlighted_text = "<pre><code class=\"hljs {$highlighted->language}\">".$highlighted->value.'</code></pre>';
|
||||||
|
}
|
||||||
|
catch (\DomainException $e) {
|
||||||
|
// This is thrown if the specified language does not exist
|
||||||
|
$highlighted_text = '<pre><code>'.htmlentities($code).'</code></pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $highlighted_text;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,15 +2,14 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>{% block title %}Welcome!{% endblock %}</title>
|
<title>{% block title %}Copypaste{% endblock %}</title>
|
||||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascripts %}
|
|
||||||
{% endblock %}
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{% block body %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1 +1,6 @@
|
||||||
{{ form(form) }}
|
{% extends "base.html.twig" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{{ form(form) }}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
24
templates/show_paste.html.twig
Normal file
24
templates/show_paste.html.twig
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{% extends "base.html.twig" %}
|
||||||
|
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="/css/ocean.css"></link>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link active" id="show-tab" data-bs-toggle="tab" data-bs-target="#show" type="button" role="tab" aria-controls="show" aria-selected="true">Show</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#edit" type="button" role="tab" aria-controls="edit" aria-selected="false">Edit</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="tab-content" id="myTabContent">
|
||||||
|
<div class="tab-pane fade show active" id="show" role="tabpanel" aria-labelledby="show-tab">
|
||||||
|
{{ highlighted_text|raw }}
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane fade" id="edit" role="tabpanel" aria-labelledby="edit-tab">
|
||||||
|
{% include 'paste.html.twig' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue