diff --git a/.codeclimate.yml b/.codeclimate.yml
deleted file mode 100644
index 383d22f98..000000000
--- a/.codeclimate.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# This file is part of phpFastCache.
-#
-# @license MIT License (MIT)
-#
-# For full copyright and license information, please see the docs/CREDITS.txt file.
-#
-# @author Georges.L (Geolim4)
+
+
_(APC support removed)_ | `Arangodb` _([Extension](https://github.com/PHPSocialNetwork/arangodb-extension))_ | `Devnull` | `FullReplicationCluster` |
-| `Dynamodb` _([Extension](https://github.com/PHPSocialNetwork/dynamodb-extension))_ | `Cassandra`
_(PHP extension is no more maintained by Datastax, might be deprecated in v10)_ | `Devrandom` | `SemiReplicationCluster` |
-| `Files` _(Core)_ | `CouchBasev3` _(Core)_
_(Will be deprecated as of v10)_ | `Memory`
(Previously named `Memstatic`) | `MasterSlaveReplicationCluster` |
-| `Firestore` _([Extension](https://github.com/PHPSocialNetwork/firestore-extension))_ | `CouchBasev4` _([Extension](https://github.com/PHPSocialNetwork/couchbasev4-extension))_ | | `RandomReplicationCluster` |
-| `Leveldb` _(Core)_ | `Couchdb` _([Extension](https://github.com/PHPSocialNetwork/couchdb-extension))_ | | |
-| `Memcache(d)` _(Core)_ | `Mongodb` _([Extension](https://github.com/PHPSocialNetwork/mongodb-extension))_ | | |
-| `Solr` _([Extension](https://github.com/PHPSocialNetwork/solr-extension))_ | `Predis` _(Core)_ | | |
-| `Sqlite` _(Core)_ | `Ravendb` _([Extension](https://github.com/PHPSocialNetwork/ravendb-extension)) | | |
-| ` Wincache` _(Core)_
(**Deprecated** as of v9.2, will be removed as of v10) | `Relay` ([By end of 2024](https://relay.so/)) |
-| `Zend Disk Cache` _(Core)_ | `Redis`/`RedisCluster` _(Core)_ | | |
-| | `Ssdb` _(Core)_ | | |
-| | `Zend Memory Cache` _(Core)_ | | |
-
-\* Driver descriptions available in [DOCS/DRIVERS.md](./docs/DRIVERS.md)
-
-:new: As of v9.2 a new Couchbase extension has been released: [Couchbasev4](https://github.com/PHPSocialNetwork/couchbasev4-extension)
-Also a new driver extension has been added: `Ravendb`. The driver will be **actively developed** in the feature to allow better fine-grained configuration.
-This new extension **is the beginning of a new era** for Phpfastcache along with some others:\
-Many drivers has been moved from the core to their own sub-repository as a standalone extension: `Arangodb`, `Couchdb`, `Dynamodb`, `Firestore`, `Mongodb`, `Solr`.\
-They can be easily added through composer, ex: `composer install phpfastcache/couchbasev4-extension`
-However `Couchbasev3` **will stay in the core** for compatibility reasons but will be deprecated.
-
----------------------------
-Because caching does not mean weaken your code
----------------------------
-Phpfastcache has been developed over the years with 3 main goals:
-
-- Performance: We optimized and still optimize the code to provide you the lightest library as possible
-- Security: Because caching strategies can sometimes comes with unwanted vulnerabilities, we do our best to provide you a sage & strong library as possible
-- Portability: No matter what operating system you're working on, we did our best to provide you the most cross-platform code as possible
-
----------------------------
-Rich Development API
----------------------------
-
-Phpfastcache provides you a lot of useful APIs:
-
-### Item API (ExtendedCacheItemInterface)
-
-| Method | Return | Description |
-|-------------------------------------------------|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
-| `addTag($tagName)` | `ExtendedCacheItemInterface` | Adds a tag |
-| `addTags(array $tagNames)` | `ExtendedCacheItemInterface` | Adds multiple tags |
-| `append($data)` | `ExtendedCacheItemInterface` | Appends data to a string or an array (push) |
-| `decrement($step = 1)` | `ExtendedCacheItemInterface` | Redundant joke... |
-| `expiresAfter($ttl)` | `ExtendedCacheItemInterface` | Allows you to extends the lifetime of an entry without altering its value (formerly known as touch()) |
-| `expiresAt($expiration)` | `ExtendedCacheItemInterface` | Sets the expiration time for this cache item (as a DateTimeInterface object) |
-| `get()` | `mixed` | The getter, obviously, returns your cache object |
-| `getCreationDate()` | `\DatetimeInterface` | Gets the creation date for this cache item (as a DateTimeInterface object) * |
-| `getDataAsJsonString()` | `string` | Return the data as a well-formatted json string |
-| `getEncodedKey()` | `string` | Returns the final and internal item identifier (key), generally used for debug purposes |
-| `getExpirationDate()` | `ExtendedCacheItemInterface` | Gets the expiration date as a Datetime object |
-| `getKey()` | `string` | Returns the item identifier (key) |
-| `getLength()` | `int` | Gets the data length if the data is a string, array, or objects that implement `\Countable` interface. |
-| `getModificationDate()` | `\DatetimeInterface` | Gets the modification date for this cache item (as a DateTimeInterface object) * |
-| `getTags()` | `string[]` | Gets the tags |
-| `hasTag(string $tagName)` | `bool` | Check if the cache item contain one specific tag |
-| `hasTags(array $tagNames, int $strategy): bool` | `bool` | Check if the cache item contain one or more specific tag with optional strategy (default to TAG_STRATEGY_ONE) |
-| `isTagged(): bool` | `bool` | Check if the cache item has at least one tag (v9.2) |
-| `getTagsAsString($separator = ', ')` | `string` | Gets the data as a string separated by $separator |
-| `getTtl()` | `int` | Gets the remaining Time To Live as an integer |
-| `increment($step = 1)` | `ExtendedCacheItemInterface` | To allow us to count on an integer item |
-| `isEmpty()` | `bool` | Checks if the data is empty or not despite the hit/miss status. |
-| `isExpired()` | `bool` | Checks if your cache entry is expired |
-| `isHit()` | `bool` | Checks if your cache entry exists and is still valid, it's the equivalent of isset() |
-| `isNull()` | `bool` | Checks if the data is null or not despite the hit/miss status. |
-| `prepend($data)` | `ExtendedCacheItemInterface` | Prepends data to a string or an array (unshift) |
-| `removeTag($tagName)` | `ExtendedCacheItemInterface` | Removes a tag |
-| `removeTags(array $tagNames)` | `ExtendedCacheItemInterface` | Removes multiple tags |
-| `set($value)` | `ExtendedCacheItemInterface` | The setter, for those who missed it, can be anything except resources or non-serializer object (ex: PDO objects, file pointers, etc). |
-| `setCreationDate($expiration)` | `\DatetimeInterface` | Sets the creation date for this cache item (as a DateTimeInterface object) * |
-| `setEventManager($evtMngr)` | `ExtendedCacheItemInterface` | Sets the event manager |
-| `setExpirationDate()` | `ExtendedCacheItemInterface` | Alias of expireAt() (for more code logic) |
-| `setModificationDate($expiration)` | `\DatetimeInterface` | Sets the modification date for this cache item (as a DateTimeInterface object) * |
-| `setTags(array $tags)` | `ExtendedCacheItemInterface` | Sets multiple tags |
-\* Require configuration directive "itemDetailedDate" to be enabled, else a \LogicException will be thrown
-
-### ItemPool API (ExtendedCacheItemPoolInterface)
-| Methods (By Alphabetic Order) | Return | Description |
-|---------------------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `appendItemsByTag($tagName, $data)` | `bool` | Appends items by a tag |
-| `appendItemsByTags(array $tagNames, $data)` | `bool` | Appends items by one of multiple tag names |
-| `attachItem($item)` | `void` | (Re-)attaches an item to the pool |
-| `clear()` | `bool` | Allows you to completely empty the cache and restart from the beginning |
-| `commit()` | `bool` | Persists any deferred cache items |
-| `decrementItemsByTag($tagName, $step = 1)` | `bool` | Decrements items by a tag |
-| `decrementItemsByTags(array $tagNames, $step = 1)` | `bool` | Decrements items by one of multiple tag names |
-| `deleteItem($key)` | `bool` | Deletes an item |
-| `deleteItems(array $keys)` | `bool` | Deletes one or more items |
-| `deleteItemsByTag($tagName)` | `bool` | Deletes items by a tag |
-| `deleteItemsByTags(array $tagNames, int $strategy)` | `bool` | Deletes items by one of multiple tag names |
-| `detachItem($item)` | `void` | Detaches an item from the pool |
-| `getConfig()` | `ConfigurationOption` | Returns the configuration object |
-| `getConfigOption($optionName);` | `mixed` | Returns a configuration value by its key `$optionName` |
-| `getDefaultConfig()` | `ConfigurationOption` | Returns the default configuration object (not altered by the object instance) |
-| `getDriverName()` | `string` | Returns the current driver name (without the namespace) |
-| `getEventManager()` | `EventManagerInterface` | Gets the event manager |
-| `getHelp()` | `string` | Provides a very basic help for a specific driver |
-| `getInstanceId()` | `string` | Returns the instance ID |
-| `getItem($key)` | `ExtendedCacheItemInterface` | Retrieves an item and returns an empty item if not found |
-| `getItems(array $keys)` | `ExtendedCacheItemInterface[]` | Retrieves one or more item and returns an array of items. As of v9.2 an internal improvement has been made to this method. |
-| `getAllItems(string $pattern = '')` | `ExtendedCacheItemInterface[]` | *(v9.2)* Retrieves all cache items with a hard limit of 9999 items. Support [limited to some drivers](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV5%CB%96%5D-Fetching-all-keys) |
-| `getItemsAsJsonString(array $keys)` | `string` | Returns A json string that represents an array of items |
-| `getItemsByTag($tagName, $strategy)` | `ExtendedCacheItemInterface[]` | Returns items by a tag |
-| `getItemsByTags(array $tagNames, $strategy)` | `ExtendedCacheItemInterface[]` | Returns items by one of multiple tag names |
-| `getItemsByTagsAsJsonString(array $tagNames, $strategy)` | `string` | Returns A json string that represents an array of items corresponding |
-| `getStats()` | `DriverStatistic` | Returns the cache statistics as an object, useful for checking disk space used by the cache etc. |
-| `hasEventManager()` | `bool` | Check the event manager |
-| `hasItem($key)` | `bool` | Tests if an item exists |
-| `incrementItemsByTag($tagName, $step = 1, $strategy)` | `bool` | Increments items by a tag |
-| `incrementItemsByTags(array $tagNames, $step = 1, $strategy)` | `bool` | Increments items by one of multiple tag names |
-| `isAttached($item)` | `bool` | Verify if an item is (still) attached |
-| `prependItemsByTag($tagName, $data, $strategy)` | `bool` | Prepends items by a tag |
-| `prependItemsByTags(array $tagNames, $data, $strategy)` | `bool` | Prepends items by one of multiple tag names |
-| `save(CacheItemInterface $item)` | `bool` | Persists a cache item immediately |
-| `saveDeferred(CacheItemInterface $item)` | `bool` | Sets a cache item to be persisted later |
-| `saveMultiple(...$items)` | `bool` | Persists multiple cache items immediately |
-| `setEventManager(EventManagerInterface $evtMngr)` | `ExtendedCacheItemPoolInterface` | Sets the event manager |
-
-:new: in **V8**: Multiple strategies (`$strategy`) are now supported for tagging:
-- `TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE` allows you to get cache item(s) by at least **ONE** of the specified matching tag(s). **Default behavior.**
-- `TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL` allows you to get cache item(s) by **ALL** of the specified matching tag(s) (the cache item *can* have additional tag(s))
-- `TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY` allows you to get cache item(s) by **ONLY** the specified matching tag(s) (the cache item *cannot* have additional tag(s))
-
-It also supports multiple calls, Tagging, Setup Folder for caching. Look at our examples folders for more information.
-
-### Phpfastcache versioning API
-Phpfastcache provides a class that gives you basic information about your Phpfastcache installation
-- Get the API version (Item+Pool interface) with `Phpfastcache\Api::GetVersion();`
-- Get the API changelog (Item+Pool interface) `Phpfastcache\Api::getChangelog();`
-- Get the Phpfastcache version with `Phpfastcache\Api::getPhpfastcacheVersion();`
-- Get the Phpfastcache changelog `Phpfastcache\Api::getPhpfastcacheChangelog();`
-
----------------------------
-Want to keep it simple ?
----------------------------
-:sweat_smile: Good news, as of the V6, a Psr16 adapter is provided to keep the cache simplest using very basic getters/setters:
-
-- `get($key, $default = null);`
-- `set($key, $value, $ttl = null);`
-- `delete($key);`
-- `clear();`
-- `getMultiple($keys, $default = null);`
-- `setMultiple($values, $ttl = null);`
-- `deleteMultiple($keys);`
-- `has($key);`
-
-Basic usage:
-```php
-has('test-key')){
- // Setter action
- $data = 'lorem ipsum';
- $Psr16Adapter->set('test-key', 'lorem ipsum', 300);// 5 minutes
-}else{
- // Getter action
- $data = $Psr16Adapter->get('test-key');
-}
-
-
-/**
-* Do your stuff with $data
-*/
-```
-
-Internally, the Psr16 adapter calls the Phpfastcache Api via the cache manager.
-
----------------------------
-Introducing to events
----------------------------
-
-:mega: As of the V6, Phpfastcache provides an event mechanism.
-You can subscribe to an event by passing a Closure to an active event:
-
-```php
-onCacheGetItem(function(ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item){
- $item->set('[HACKED BY EVENT] ' . $item->get());
-});
-
-```
-
-An event callback can get unbind but you MUST provide a name to the callback previously:
-
-```php
-onCacheGetItem(function(ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item){
- $item->set('[HACKED BY EVENT] ' . $item->get());
-}, 'myCallbackName');
-
-
-/**
-* Unbind the event callback
-*/
-EventManager::getInstance()->unbindEventCallback('onCacheGetItem', 'myCallbackName');
-
-```
-:new: As of the **V8** you can simply subscribe to **every** event of Phpfastcache.
-
-More information about the implementation and the events are available on the [Wiki](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV6%CB%96%5D-Introducing-to-events)
-
----------------------------
-Introducing new helpers
----------------------------
-:books: As of the V6, Phpfastcache provides some helpers to make your code easier.
-
-- (:warning: Removed in v8, [why ?](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV6%CB%96%5D-Act-on-all-instances)) ~~The [ActOnAll Helper](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV6%CB%96%5D-Act-on-all-instances) to help you to act on multiple instance at once.~~
-- The [CacheConditional Helper](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV6%CB%96%5D-Cache-Conditional) to help you to make the basic conditional statement more easier.
-- The [Psr16 adapter](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV6%CB%96%5D-Psr16-adapter)
-
-May more will come in the future, feel free to contribute !
-
----------------------------
-Introducing aggregated cluster support
----------------------------
-Check out the [WIKI](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV8%CB%96%5D-Aggregated-cache-cluster) to learn how to implement aggregated cache clustering feature.
-
----------------------------
-As Fast To Implement As Opening a Beer
----------------------------
-
-
-#### :thumbsup: Step 1: Include phpFastCache in your project with composer:
-
-
-```bash
-composer require phpfastcache/phpfastcache
-```
-
-#### :construction: Step 2: Setup your website code to implement the phpFastCache calls (with Composer)
-```php
- '/var/www/phpfastcache.com/dev/tmp', // or in windows "C:/tmp/"
-]));
-
-// In your class, function, you can call the Cache
-$InstanceCache = CacheManager::getInstance('files');
-
-/**
- * Try to get $products from Caching First
- * product_page is "identity keyword";
- */
-$key = "product_page";
-$CachedString = $InstanceCache->getItem($key);
-
-$your_product_data = [
- 'First product',
- 'Second product',
- 'Third product'
- /* ... */
-];
-
-if (!$CachedString->isHit()) {
- $CachedString->set($your_product_data)->expiresAfter(5);//in seconds, also accepts Datetime
- $InstanceCache->save($CachedString); // Save the cache item just like you do with doctrine and entities
-
- echo 'FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // ';
- echo $CachedString->get();
-
-} else {
- echo 'READ FROM CACHE // ';
- echo $CachedString->get()[0];// Will print 'First product'
-}
-
-/**
- * use your products here or return them;
- */
-echo implode('
', $CachedString->get());// Will echo your product list
-
-```
-
-#### :zap: Step 3: Enjoy ! Your website is now faster than lightning !
-For curious developers, there is a lot of other examples available [here](./docs/examples).
-
-#### :boom: Phpfastcache support
-Found an issue or have an idea ? Come **[here](https://github.com/PHPSocialNetwork/phpfastcache/issues)** and let us know !
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index 838b0dc8d..000000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Security Policy
-If you discover any vulnerability please be aware of the following table of supported versions below.
-Then feel free to contact me at the email address provided in the bottom of that page.
-
-## Supported Versions
-| Version | End of support | End of life |
-|---------|------------------|------------------|
-| 10.0 | *In development* | *In development* |
-| 9.2 | December 2025 | December 2026 |
-| 9.1 | December 2024 | December 2025 |
-| 9.0 | December 2023 | December 2024 |
-| 8.x | July 2023 | July 2024 |
-| 7.1 | July 2021 | July 2022 |
-| 7.0 | July 2019 | July 2020 |
-| 6.0 | July 2020 | July 2021 |
-| 5.0 | July 2018 | July 2019 |
-| 4.0 | July 2017 | January 2018 |
-| < 4.0 | N/A | N/A |
-
-More details on the [Wiki](https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV4%CB%96%5D-Global-support-timeline)
-
-## Reporting a Vulnerability
-If you discover any security vulnerability contact me at contact#at#geolim4.com with a subject formatted like that:\
-`[PHPFASTCACHE][VULNERABILITY] Your mail subject goes here`
-
-Thanks in advance for taking the time to report me that in private.
diff --git a/ajax/pages/authors.html b/ajax/pages/authors.html
new file mode 100644
index 000000000..c24f1480a
--- /dev/null
+++ b/ajax/pages/authors.html
@@ -0,0 +1,124 @@
+
+ Georges.L
Senior software engineer
+
+
+
+ Smile S.A, 2019 - Present
+
+ ImagesCreations, 2017 - 2019
+
+ Vigicorp, 2014 - 2017
+
+ ImagesCreations, 2017 - Present
+
+ January 2016 - Present
+
+ phpBB, 2013 - 2015
+
+ Undisclosed companies, Summer 2016 - Present
+
+ Khoa.B
Senior PHP Web Developer
+
+
+
+ Molekula, Jan 2012 - 2013
+
+ Alilang Fashion, Apr 2011 - 2014
+
+ VirtualPoint, Oct 2010 - Apr 2011
+
+ April 2013 - Present
+
+ EDM Tunes, May 2012 - Present
+
+
+
+
Phpfastcache
+ A PHP cache library made for building reactive apps
+ View on GitHub
+ Download .zip
+ Download .tar.gz
+
+ $
+ composer require phpfastcache/phpfastcache
+
+ ').find('pre').text(data);
+ break;
+ }
+ }).fail(function (jqXHR, textStatus, errorThrown) {
+ $(target).html('
' +
+ jqXHR.responseText +
+ 'sudo pecl install cassandra
-More information on: https://github.com/datastax/php-driver
-Please note that this repository only provide php stubs and C/C++ sources, it does NOT provide php client.
-
composer require "predis/predis" "~1.1.0"
-
-HELP;
- }
-
- /**
- * @return DriverStatistic
- */
- public function getStats(): DriverStatistic
- {
- $info = $this->instance->info();
- $size = ($info['Memory']['used_memory'] ?? 0);
- $version = ($info['Server']['redis_version'] ?? 0);
- $date = (isset($info['Server']['uptime_in_seconds']) ? (new DateTime())->setTimestamp(time() - $info['Server']['uptime_in_seconds']) : 'unknown date');
-
- return (new DriverStatistic())
- ->setData(implode(', ', array_keys($this->itemInstances)))
- ->setRawData($info)
- ->setSize((int)$size)
- ->setInfo(
- sprintf(
- "The Redis daemon v%s (with Predis v%s) is up since %s.\n For more information see RawData. \n Driver size includes the memory allocation size.",
- $version,
- PredisClient::VERSION,
- $date->format(DATE_RFC2822)
- )
- );
- }
-
- /**
- * @return bool
- * @throws PhpfastcacheDriverException
- * @throws PhpfastcacheLogicException
- */
- protected function driverConnect(): bool
- {
- /**
- * In case of a user-provided
- * Predis client just return here
- */
- if ($this->getConfig()->getPredisClient() instanceof PredisClient) {
- $this->instance = $this->getConfig()->getPredisClient();
- if (!$this->instance->isConnected()) {
- $this->instance->connect();
- }
- return true;
- }
-
- $options = [];
-
- if ($this->getConfig()->getOptPrefix()) {
- $options['prefix'] = $this->getConfig()->getOptPrefix();
- }
-
- if (!empty($this->getConfig()->getPath())) {
- $this->instance = new PredisClient(
- [
- 'scheme' => $this->getConfig()->getScheme(),
- 'persistent' => $this->getConfig()->isPersistent(),
- 'timeout' => $this->getConfig()->getTimeout(),
- 'path' => $this->getConfig()->getPath(),
- ],
- $options
- );
- } else {
- $this->instance = new PredisClient($this->getConfig()->getPredisConfigArray(), $options);
- }
-
- try {
- $this->instance->connect();
- } catch (PredisConnectionException $e) {
- throw new PhpfastcacheDriverException(
- 'Failed to connect to predis server. Check the Predis documentation: https://github.com/nrk/predis/tree/v1.1#how-to-install-and-use-predis',
- 0,
- $e
- );
- }
-
- return true;
- }
-
- /**
- * @param ExtendedCacheItemInterface $item
- * @return ?array` tags are not being overridden anymore
+- More correct highlighting of code blocks inside non-`` containers:
+ highlighter now doesn't insist on replacing them with its own container and
+ just replaces the contents.
+- Small fixes in browser compatibility and heuristics.
+
+[c++ 0x]: http://ru.wikipedia.org/wiki/C%2B%2B0x
+[html 5]: http://en.wikipedia.org/wiki/HTML5
+[ik]: http://kalnitsky.org.ua/
+
+### For developers
+
+The most significant change is the ability to include language submodes right
+under `contains` instead of defining explicit named submodes in the main array:
+
+ contains: [
+ 'string',
+ 'number',
+ {begin: '\\n', end: hljs.IMMEDIATE_RE}
+ ]
+
+This is useful for auxiliary modes needed only in one place to define parsing.
+Note that such modes often don't have `className` and hence won't generate a
+separate `` in the resulting markup. This is similar in effect to
+`noMarkup: true`. All existing languages have been refactored accordingly.
+
+Test file test.html has at last become a real test. Now it not only puts the
+detected language name under the code snippet but also tests if it matches the
+expected one. Test summary is displayed right above all language snippets.
+
+
+## CDN
+
+Fine people at [Yandex][] agreed to host highlight.js on their big fast servers.
+[Link up][l]!
+
+[yandex]: http://yandex.com/
+[l]: http://softwaremaniacs.org/soft/highlight/en/download/
+
+
+## Version 5.10 — "Paris".
+
+Though I'm on a vacation in Paris, I decided to release a new version with a
+couple of small fixes:
+
+- Tomas Vitvar discovered that TAB replacement doesn't always work when used
+ with custom markup in code
+- SQL parsing is even more rigid now and doesn't step over SmallTalk in tests
+
+
+## Version 5.9
+
+A long-awaited version is finally released.
+
+New languages:
+
+- Andrew Fedorov made a definition for Lua
+- a long-time highlight.js contributor [Peter Leonov][pl] made a definition for
+ Nginx config
+- [Vladimir Moskva][vm] made a definition for TeX
+
+[pl]: http://kung-fu-tzu.ru/
+[vm]: http://fulc.ru/
+
+Fixes for existing languages:
+
+- [Loren Segal][ls] reworked the Ruby definition and added highlighting for
+ [YARD][] inline documentation
+- the definition of SQL has become more solid and now it shouldn't be overly
+ greedy when it comes to language detection
+
+[ls]: http://gnuu.org/
+[yard]: http://yardoc.org/
+
+The highlighter has become more usable as a library allowing to do highlighting
+from initialization code of JS frameworks and in ajax methods (see.
+readme.eng.txt).
+
+Also this version drops support for the [WordPress][wp] plugin. Everyone is
+welcome to [pick up its maintenance][p] if needed.
+
+[wp]: http://wordpress.org/
+[p]: http://bazaar.launchpad.net/~isagalaev/+junk/highlight/annotate/342/src/wp_highlight.js.php
+
+
+## Version 5.8
+
+- Jan Berkel has contributed a definition for Scala. +1 to hotness!
+- All CSS-styles are rewritten to work only inside `` tags to avoid
+ conflicts with host site styles.
+
+
+## Version 5.7.
+
+Fixed escaping of quotes in VBScript strings.
+
+
+## Version 5.5
+
+This version brings a small change: now .ini-files allow digits, underscores and
+square brackets in key names.
+
+
+## Version 5.4
+
+Fixed small but upsetting bug in the packer which caused incorrect highlighting
+of explicitly specified languages. Thanks to Andrew Fedorov for precise
+diagnostics!
+
+
+## Version 5.3
+
+The version to fulfil old promises.
+
+The most significant change is that highlight.js now preserves custom user
+markup in code along with its own highlighting markup. This means that now it's
+possible to use, say, links in code. Thanks to [Vladimir Dolzhenko][vd] for the
+[initial proposal][1] and for making a proof-of-concept patch.
+
+Also in this version:
+
+- [Vasily Polovnyov][vp] has sent a GitHub-like style and has implemented
+ support for CSS @-rules and Ruby symbols.
+- Yura Zaripov has sent two styles: Brown Paper and School Book.
+- Oleg Volchkov has sent a definition for [Parser 3][p3].
+
+[1]: http://softwaremaniacs.org/forum/highlightjs/6612/
+[p3]: http://www.parser.ru/
+[vp]: http://vasily.polovnyov.ru/
+[vd]: http://dolzhenko.blogspot.com/
+
+
+## Version 5.2
+
+- at last it's possible to replace indentation TABs with something sensible
+ (e.g. 2 or 4 spaces)
+- new keywords and built-ins for 1C by Sergey Baranov
+- a couple of small fixes to Apache highlighting
+
+
+## Version 5.1
+
+This is one of those nice version consisting entirely of new and shiny
+contributions!
+
+- [Vladimir Ermakov][vooon] created highlighting for AVR Assembler
+- [Ruslan Keba][rukeba] created highlighting for Apache config file. Also his
+ original visual style for it is now available for all highlight.js languages
+ under the name "Magula".
+- [Shuen-Huei Guan][drake] (aka Drake) sent new keywords for RenderMan
+ languages. Also thanks go to [Konstantin Evdokimenko][ke] for his advice on
+ the matter.
+
+[vooon]: http://vehq.ru/about/
+[rukeba]: http://rukeba.com/
+[drake]: http://drakeguan.org/
+[ke]: http://k-evdokimenko.moikrug.ru/
+
+
+## Version 5.0
+
+The main change in the new major version of highlight.js is a mechanism for
+packing several languages along with the library itself into a single compressed
+file. Now sites using several languages will load considerably faster because
+the library won't dynamically include additional files while loading.
+
+Also this version fixes a long-standing bug with Javascript highlighting that
+couldn't distinguish between regular expressions and division operations.
+
+And as usually there were a couple of minor correctness fixes.
+
+Great thanks to all contributors! Keep using highlight.js.
+
+
+## Version 4.3
+
+This version comes with two contributions from [Jason Diamond][jd]:
+
+- language definition for C# (yes! it was a long-missed thing!)
+- Visual Studio-like highlighting style
+
+Plus there are a couple of minor bug fixes for parsing HTML and XML attributes.
+
+[jd]: http://jason.diamond.name/weblog/
+
+
+## Version 4.2
+
+The biggest news is highlighting for Lisp, courtesy of Vasily Polovnyov. It's
+somewhat experimental meaning that for highlighting "keywords" it doesn't use
+any pre-defined set of a Lisp dialect. Instead it tries to highlight first word
+in parentheses wherever it makes sense. I'd like to ask people programming in
+Lisp to confirm if it's a good idea and send feedback to [the forum][f].
+
+Other changes:
+
+- Smalltalk was excluded from DEFAULT_LANGUAGES to save traffic
+- [Vladimir Epifanov][voldmar] has implemented javascript style switcher for
+ test.html
+- comments now allowed inside Ruby function definition
+- [MEL][] language from [Shuen-Huei Guan][drake]
+- whitespace now allowed between `` and ``
+- better auto-detection of C++ and PHP
+- HTML allows embedded VBScript (`<% .. %>`)
+
+[f]: http://softwaremaniacs.org/forum/highlightjs/
+[voldmar]: http://voldmar.ya.ru/
+[mel]: http://en.wikipedia.org/wiki/Maya_Embedded_Language
+[drake]: http://drakeguan.org/
+
+
+## Version 4.1
+
+Languages:
+
+- Bash from Vah
+- DOS bat-files from Alexander Makarov (Sam)
+- Diff files from Vasily Polovnyov
+- Ini files from myself though initial idea was from Sam
+
+Styles:
+
+- Zenburn from Vladimir Epifanov, this is an imitation of a
+ [well-known theme for Vim][zenburn].
+- Ascetic from myself, as a realization of ideals of non-flashy highlighting:
+ just one color in only three gradations :-)
+
+In other news. [One small bug][bug] was fixed, built-in keywords were added for
+Python and C++ which improved auto-detection for the latter (it was shame that
+[my wife's blog][alenacpp] had issues with it from time to time). And lastly
+thanks go to Sam for getting rid of my stylistic comments in code that were
+getting in the way of [JSMin][].
+
+[zenburn]: http://en.wikipedia.org/wiki/Zenburn
+[alenacpp]: http://alenacpp.blogspot.com/
+[bug]: http://softwaremaniacs.org/forum/viewtopic.php?id=1823
+[jsmin]: http://code.google.com/p/jsmin-php/
+
+
+## Version 4.0
+
+New major version is a result of vast refactoring and of many contributions.
+
+Visible new features:
+
+- Highlighting of embedded languages. Currently is implemented highlighting of
+ Javascript and CSS inside HTML.
+- Bundled 5 ready-made style themes!
+
+Invisible new features:
+
+- Highlight.js no longer pollutes global namespace. Only one object and one
+ function for backward compatibility.
+- Performance is further increased by about 15%.
+
+Changing of a major version number caused by a new format of language definition
+files. If you use some third-party language files they should be updated.
+
+
+## Version 3.5
+
+A very nice version in my opinion fixing a number of small bugs and slightly
+increased speed in a couple of corner cases. Thanks to everybody who reports
+bugs in he [forum][f] and by email!
+
+There is also a new language — XML. A custom XML formerly was detected as HTML
+and didn't highlight custom tags. In this version I tried to make custom XML to
+be detected and highlighted by its own rules. Which by the way include such
+things as CDATA sections and processing instructions (` ... ?>`).
+
+[f]: http://softwaremaniacs.org/forum/viewforum.php?id=6
+
+
+## Version 3.3
+
+[Vladimir Gubarkov][xonix] has provided an interesting and useful addition.
+File export.html contains a little program that shows and allows to copy and
+paste an HTML code generated by the highlighter for any code snippet. This can
+be useful in situations when one can't use the script itself on a site.
+
+
+[xonix]: http://xonixx.blogspot.com/
+
+
+## Version 3.2 consists completely of contributions:
+
+- Vladimir Gubarkov has described SmallTalk
+- Yuri Ivanov has described 1C
+- Peter Leonov has packaged the highlighter as a Firefox extension
+- Vladimir Ermakov has compiled a mod for phpBB
+
+Many thanks to you all!
+
+
+## Version 3.1
+
+Three new languages are available: Django templates, SQL and Axapta. The latter
+two are sent by [Dmitri Roudakov][1]. However I've almost entirely rewrote an
+SQL definition but I'd never started it be it from the ground up :-)
+
+The engine itself has got a long awaited feature of grouping keywords
+("keyword", "built-in function", "literal"). No more hacks!
+
+[1]: http://roudakov.ru/
+
+
+## Version 3.0
+
+It is major mainly because now highlight.js has grown large and has become
+modular. Now when you pass it a list of languages to highlight it will
+dynamically load into a browser only those languages.
+
+Also:
+
+- Konstantin Evdokimenko of [RibKit][] project has created a highlighting for
+ RenderMan Shading Language and RenderMan Interface Bytestream. Yay for more
+ languages!
+- Heuristics for C++ and HTML got better.
+- I've implemented (at last) a correct handling of backslash escapes in C-like
+ languages.
+
+There is also a small backwards incompatible change in the new version. The
+function initHighlighting that was used to initialize highlighting instead of
+initHighlightingOnLoad a long time ago no longer works. If you by chance still
+use it — replace it with the new one.
+
+[RibKit]: http://ribkit.sourceforge.net/
+
+
+## Version 2.9
+
+Highlight.js is a parser, not just a couple of regular expressions. That said
+I'm glad to announce that in the new version 2.9 has support for:
+
+- in-string substitutions for Ruby -- `#{...}`
+- strings from from numeric symbol codes (like #XX) for Delphi
+
+
+## Version 2.8
+
+A maintenance release with more tuned heuristics. Fully backwards compatible.
+
+
+## Version 2.7
+
+- Nikita Ledyaev presents highlighting for VBScript, yay!
+- A couple of bugs with escaping in strings were fixed thanks to Mickle
+- Ongoing tuning of heuristics
+
+Fixed bugs were rather unpleasant so I encourage everyone to upgrade!
+
+
+## Version 2.4
+
+- Peter Leonov provides another improved highlighting for Perl
+- Javascript gets a new kind of keywords — "literals". These are the words
+ "true", "false" and "null"
+
+Also highlight.js homepage now lists sites that use the library. Feel free to
+add your site by [dropping me a message][mail] until I find the time to build a
+submit form.
+
+[mail]: mailto:Maniac@SoftwareManiacs.Org
+
+
+## Version 2.3
+
+This version fixes IE breakage in previous version. My apologies to all who have
+already downloaded that one!
+
+
+## Version 2.2
+
+- added highlighting for Javascript
+- at last fixed parsing of Delphi's escaped apostrophes in strings
+- in Ruby fixed highlighting of keywords 'def' and 'class', same for 'sub' in
+ Perl
+
+
+## Version 2.0
+
+- Ruby support by [Anton Kovalyov][ak]
+- speed increased by orders of magnitude due to new way of parsing
+- this same way allows now correct highlighting of keywords in some tricky
+ places (like keyword "End" at the end of Delphi classes)
+
+[ak]: http://anton.kovalyov.net/
+
+
+## Version 1.0
+
+Version 1.0 of javascript syntax highlighter is released!
+
+It's the first version available with English description. Feel free to post
+your comments and question to [highlight.js forum][forum]. And don't be afraid
+if you find there some fancy Cyrillic letters -- it's for Russian users too :-)
+
+[forum]: http://softwaremaniacs.org/forum/viewforum.php?id=6
diff --git a/lib/highlight/LICENSE b/lib/highlight/LICENSE
new file mode 100644
index 000000000..422deb735
--- /dev/null
+++ b/lib/highlight/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of highlight.js nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/highlight/README.md b/lib/highlight/README.md
new file mode 100644
index 000000000..9f76e6bd5
--- /dev/null
+++ b/lib/highlight/README.md
@@ -0,0 +1,150 @@
+# Highlight.js
+
+[](https://travis-ci.org/isagalaev/highlight.js)
+
+Highlight.js is a syntax highlighter written in JavaScript. It works in
+the browser as well as on the server. It works with pretty much any
+markup, doesn’t depend on any framework and has automatic language
+detection.
+
+## Getting Started
+
+The bare minimum for using highlight.js on a web page is linking to the
+library along with one of the styles and calling
+[`initHighlightingOnLoad`][1]:
+
+```html
+
+
+
+```
+
+This will find and highlight code inside of `` tags; it tries
+to detect the language automatically. If automatic detection doesn’t
+work for you, you can specify the language in the `class` attribute:
+
+```html
+...
+```
+
+The list of supported language classes is available in the [class
+reference][2]. Classes can also be prefixed with either `language-` or
+`lang-`.
+
+To disable highlighting altogether use the `nohighlight` class:
+
+```html
+...
+```
+
+## Custom Initialization
+
+When you need a bit more control over the initialization of
+highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4]
+functions. This allows you to control *what* to highlight and *when*.
+
+Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using
+jQuery:
+
+```javascript
+$(document).ready(function() {
+ $('pre code').each(function(i, block) {
+ hljs.highlightBlock(block);
+ });
+});
+```
+
+You can use any tags instead of `` to mark up your code. If
+you don't use a container that preserve line breaks you will need to
+configure highlight.js to use the `
` tag:
+
+```javascript
+hljs.configure({useBR: true});
+
+$('div.code').each(function(i, block) {
+ hljs.highlightBlock(block);
+});
+```
+
+For other options refer to the documentation for [`configure`][4].
+
+
+## Web Workers
+
+You can run highlighting inside a web worker to avoid freezing the browser
+window while dealing with very big chunks of code.
+
+In your main script:
+
+```javascript
+addEventListener('load', function() {
+ var code = document.querySelector('#code');
+ var worker = new Worker('worker.js');
+ worker.onmessage = function(event) { code.innerHTML = event.data; }
+ worker.postMessage(code.textContent);
+})
+```
+
+In worker.js:
+
+```javascript
+onmessage = function(event) {
+ importScripts('/highlight.pack.js');
+ var result = self.hljs.highlightAuto(event.data);
+ postMessage(result.value);
+}
+```
+
+
+## Getting the Library
+
+You can get highlight.js as a hosted, or custom-build, browser script or
+as a server module. Right out of the box the browser script supports
+both AMD and CommonJS, so if you wish you can use RequireJS or
+Browserify without having to build from source. The server module also
+works perfectly fine with Browserify, but there is the option to use a
+build specific to browsers rather than something meant for a server.
+Head over to the [download page][5] for all the options.
+
+**Don't link to GitHub directly.** The library is not supposed to work straight
+from the source, it requires building. If none of the pre-packaged options
+work for you refer to the [building documentation][6].
+
+**The CDN-hosted package doesn't have all the languages.** Otherwise it'd be
+too big. If you don't see the language you need in the ["Common" section][5],
+it can be added manually:
+
+```html
+
+```
+
+**On Almond.** You need to use the optimizer to give the module a name. For
+example:
+
+```
+r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js
+```
+
+
+## License
+
+Highlight.js is released under the BSD License. See [LICENSE][7] file
+for details.
+
+## Links
+
+The official site for the library is at .
+
+Further in-depth documentation for the API and other topics is at
+ .
+
+Authors and contributors are listed in the [AUTHORS.en.txt][8] file.
+
+[1]: http://highlightjs.readthedocs.io/en/latest/api.html#inithighlightingonload
+[2]: http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html
+[3]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightblock-block
+[4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options
+[5]: https://highlightjs.org/download/
+[6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html
+[7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE
+[8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.en.txt
diff --git a/lib/highlight/README.ru.md b/lib/highlight/README.ru.md
new file mode 100644
index 000000000..ac481d071
--- /dev/null
+++ b/lib/highlight/README.ru.md
@@ -0,0 +1,142 @@
+# Highlight.js
+
+Highlight.js — это инструмент для подсветки синтаксиса, написанный на JavaScript. Он работает
+и в браузере, и на сервере. Он работает с практически любой HTML разметкой, не
+зависит от каких-либо фреймворков и умеет автоматически определять язык.
+
+
+## Начало работы
+
+Минимум, что нужно сделать для использования highlight.js на веб-странице — это
+подключить библиотеку, CSS-стили и вызывать [`initHighlightingOnLoad`][1]:
+
+```html
+
+
+
+```
+
+Библиотека найдёт и раскрасит код внутри тегов ``, попытавшись
+автоматически определить язык. Когда автоопределение не срабатывает, можно явно
+указать язык в атрибуте class:
+
+```html
+...
+```
+
+Список поддерживаемых классов языков доступен в [справочнике по классам][2].
+Класс также можно предварить префиксами `language-` или `lang-`.
+
+Чтобы отключить подсветку для какого-то блока, используйте класс `nohighlight`:
+
+```html
+...
+```
+
+## Инициализация вручную
+
+Чтобы иметь чуть больше контроля за инициализацией подсветки, вы можете
+использовать функции [`highlightBlock`][3] и [`configure`][4]. Таким образом
+можно управлять тем, *что* и *когда* подсвечивать.
+
+Вот пример инициализации, эквивалентной вызову [`initHighlightingOnLoad`][1], но
+с использованием jQuery:
+
+```javascript
+$(document).ready(function() {
+ $('pre code').each(function(i, block) {
+ hljs.highlightBlock(block);
+ });
+});
+```
+
+Вы можете использовать любые теги разметки вместо ``. Если
+используете контейнер, не сохраняющий переводы строк, вам нужно сказать
+highlight.js использовать для них тег `
`:
+
+```javascript
+hljs.configure({useBR: true});
+
+$('div.code').each(function(i, block) {
+ hljs.highlightBlock(block);
+});
+```
+
+Другие опции можно найти в документации функции [`configure`][4].
+
+
+## Web Workers
+
+Подсветку можно запустить внутри web worker'а, чтобы окно
+браузера не подтормаживало при работе с большими кусками кода.
+
+В основном скрипте:
+
+```javascript
+addEventListener('load', function() {
+ var code = document.querySelector('#code');
+ var worker = new Worker('worker.js');
+ worker.onmessage = function(event) { code.innerHTML = event.data; }
+ worker.postMessage(code.textContent);
+})
+```
+
+В worker.js:
+
+```javascript
+onmessage = function(event) {
+ importScripts('/highlight.pack.js');
+ var result = self.hljs.highlightAuto(event.data);
+ postMessage(result.value);
+}
+```
+
+
+## Установка библиотеки
+
+Highlight.js можно использовать в браузере прямо с CDN хостинга или скачать
+индивидуальную сборку, а также установив модуль на сервере. На
+[странице загрузки][5] подробно описаны все варианты.
+
+**Не подключайте GitHub напрямую.** Библиотека не предназначена для
+использования в виде исходного кода, а требует отдельной сборки. Если вам не
+подходит ни один из готовых вариантов, читайте [документацию по сборке][6].
+
+**Файл на CDN содержит не все языки.** Иначе он будет слишком большого размера.
+Если нужного вам языка нет в [категории "Common"][5], можно дообавить его
+вручную:
+
+```html
+
+```
+
+**Про Almond.** Нужно задать имя модуля в оптимизаторе, например:
+
+```
+r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js
+```
+
+
+## Лицензия
+
+Highlight.js распространяется под лицензией BSD. Подробнее читайте файл
+[LICENSE][7].
+
+
+## Ссылки
+
+Официальный сайт билиотеки расположен по адресу .
+
+Более подробная документация по API и другим темам расположена на
+ .
+
+Авторы и контрибьюторы перечислены в файле [AUTHORS.ru.txt][8] file.
+
+[1]: http://highlightjs.readthedocs.io/en/latest/api.html#inithighlightingonload
+[2]: http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html
+[3]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightblock-block
+[4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options
+[5]: https://highlightjs.org/download/
+[6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html
+[7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE
+[8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.ru.txt
diff --git a/lib/highlight/highlight.pack.js b/lib/highlight/highlight.pack.js
new file mode 100644
index 000000000..788c5eb1d
--- /dev/null
+++ b/lib/highlight/highlight.pack.js
@@ -0,0 +1,2 @@
+/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */
+!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(//g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){s+=""+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var l=0,s="",f=[];e.length||r.length;){var g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return s+n(a.substr(l))}function l(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!y[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=null!=E.sL?d():h(),k=""}function v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/
/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C=" ",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[c]},{b:/(fr|rf|f)"/,e:/"/,c:[c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:a+r+":"},{b:a+'"'+r+'":'},{b:a+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:b,k:{literal:b}},e.CNM,l]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(t,{i:/\n/}),a={cN:"subst",b:"{",e:"}",k:i},c=e.inherit(a,{i:/\n/}),n={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,c]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},a]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},c]});a.c=[s,n,t,e.ASM,e.QSM,e.CNM,e.CBCM],c.c=[o,n,r,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,n,t,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:"?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("less",function(e){var r="[\\w-]+",t="("+r+"|@{"+r+"})",a=[],c=[],s=function(e){return{cN:"string",b:"~?"+e+".*?"+e}},b=function(e,r,t){return{cN:e,b:r,r:t}},n={b:"\\(",e:"\\)",c:c,r:0};c.push(e.CLCM,e.CBCM,s("'"),s('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},b("number","#[0-9A-Fa-f]+\\b"),n,b("variable","@@?"+r,10),b("variable","@{"+r+"}"),b("built_in","~?`[^`]*?`"),{cN:"attribute",b:r+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var i=c.concat({b:"{",e:"}",c:a}),o={bK:"when",eW:!0,c:[{bK:"and not"}].concat(c)},u={b:t+"\\s*:",rB:!0,e:"[;}]",r:0,c:[{cN:"attribute",b:t,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",r:0,c:c}}]},l={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:c,r:0}},C={cN:"variable",v:[{b:"@"+r+"\\s*:",r:15},{b:"@"+r}],starts:{e:"[;}]",rE:!0,c:i}},p={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:t,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",r:0,c:[e.CLCM,e.CBCM,o,b("keyword","all\\b"),b("variable","@{"+r+"}"),b("selector-tag",t+"%?",0),b("selector-id","#"+t),b("selector-class","\\."+t,0),b("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:i},{b:"!important"}]};return a.push(e.CLCM,e.CBCM,l,C,u,p),{cI:!0,i:"[=>'/<($\"]",c:a}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},t={cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},l={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,t,l]}});hljs.registerLanguage("java",function(e){var a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},_={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},i=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:_,l:i,i:"",c:[t,e.CLCM,e.CBCM,e.CNM,e.QSM,{cN:"string",v:[{b:'@"',e:'"',i:"\\n",c:[e.BE]},{b:"'",e:"[^\\\\]'",i:"[^\\\\][^']"}]},{cN:"meta",b:"#",e:"$",c:[{cN:"meta-string",v:[{b:'"',e:'"'},{b:"<",e:">"}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:i,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("twig",function(e){var t={cN:"params",b:"\\(",e:"\\)"},a="attribute block constant cycle date dump include max min parent random range source template_from_string",r={bK:a,k:{name:a},r:0,c:[t]},c={b:/\|[A-Za-z_]+:?/,k:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",c:[r]},s="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return s=s+" "+s.split(" ").map(function(e){return"end"+e}).join(" "),{aliases:["craftcms"],cI:!0,sL:"xml",c:[e.C(/\{#/,/#}/),{cN:"template-tag",b:/\{%/,e:/%}/,c:[{cN:"name",b:/\w+/,k:s,starts:{eW:!0,c:[c,r],r:0}}]},{cN:"template-variable",b:/\{\{/,e:/}}/,c:["self",c,r]}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});
\ No newline at end of file
diff --git a/lib/highlight/styles/agate.css b/lib/highlight/styles/agate.css
new file mode 100644
index 000000000..8d64547c5
--- /dev/null
+++ b/lib/highlight/styles/agate.css
@@ -0,0 +1,108 @@
+/*!
+ * Agate by Taufik Nurrohman
+ * ----------------------------------------------------
+ *
+ * #ade5fc
+ * #a2fca2
+ * #c6b4f0
+ * #d36363
+ * #fcc28c
+ * #fc9b9b
+ * #ffa
+ * #fff
+ * #333
+ * #62c8f3
+ * #888
+ *
+ */
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #333;
+ color: white;
+}
+
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-code,
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-tag {
+ color: #62c8f3;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ade5fc;
+}
+
+.hljs-string,
+.hljs-bullet {
+ color: #a2fca2;
+}
+
+.hljs-type,
+.hljs-title,
+.hljs-section,
+.hljs-attribute,
+.hljs-quote,
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #ffa;
+}
+
+.hljs-number,
+.hljs-symbol,
+.hljs-bullet {
+ color: #d36363;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal {
+ color: #fcc28c;
+}
+
+.hljs-comment,
+.hljs-deletion,
+.hljs-code {
+ color: #888;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #c6b4f0;
+}
+
+.hljs-meta {
+ color: #fc9b9b;
+}
+
+.hljs-deletion {
+ background-color: #fc9b9b;
+ color: #333;
+}
+
+.hljs-addition {
+ background-color: #a2fca2;
+ color: #333;
+}
+
+.hljs a {
+ color: inherit;
+}
+
+.hljs a:focus,
+.hljs a:hover {
+ color: inherit;
+ text-decoration: underline;
+}
diff --git a/lib/highlight/styles/androidstudio.css b/lib/highlight/styles/androidstudio.css
new file mode 100644
index 000000000..bc8e473b5
--- /dev/null
+++ b/lib/highlight/styles/androidstudio.css
@@ -0,0 +1,66 @@
+/*
+Date: 24 Fev 2015
+Author: Pedro Oliveira
+*/
+
+.hljs {
+ color: #a9b7c6;
+ background: #282b2e;
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+}
+
+.hljs-number,
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet {
+ color: #6897BB;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-deletion {
+ color: #cc7832;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link {
+ color: #629755;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #808080;
+}
+
+.hljs-meta {
+ color: #bbb529;
+}
+
+.hljs-string,
+.hljs-attribute,
+.hljs-addition {
+ color: #6A8759;
+}
+
+.hljs-section,
+.hljs-title,
+.hljs-type {
+ color: #ffc66d;
+}
+
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #e8bf6a;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/arduino-light.css b/lib/highlight/styles/arduino-light.css
new file mode 100644
index 000000000..4b8b7fd3c
--- /dev/null
+++ b/lib/highlight/styles/arduino-light.css
@@ -0,0 +1,88 @@
+/*
+
+Arduino® Light Theme - Stefania Mellai
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #FFFFFF;
+}
+
+.hljs,
+.hljs-subst {
+ color: #434f54;
+}
+
+.hljs-keyword,
+.hljs-attribute,
+.hljs-selector-tag,
+.hljs-doctag,
+.hljs-name {
+ color: #00979D;
+}
+
+.hljs-built_in,
+.hljs-literal,
+.hljs-bullet,
+.hljs-code,
+.hljs-addition {
+ color: #D35400;
+}
+
+.hljs-regexp,
+.hljs-symbol,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #00979D;
+}
+
+.hljs-type,
+.hljs-string,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-quote,
+.hljs-template-tag,
+.hljs-deletion {
+ color: #005C5F;
+}
+
+.hljs-title,
+.hljs-section {
+ color: #880000;
+ font-weight: bold;
+}
+
+.hljs-comment {
+ color: rgba(149,165,166,.8);
+}
+
+.hljs-meta-keyword {
+ color: #728E00;
+}
+
+.hljs-meta {
+ color: #728E00;
+ color: #434f54;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-function {
+ color: #728E00;
+}
+
+.hljs-number {
+ color: #8A7B52;
+}
diff --git a/lib/highlight/styles/arta.css b/lib/highlight/styles/arta.css
new file mode 100644
index 000000000..75ef3a9e5
--- /dev/null
+++ b/lib/highlight/styles/arta.css
@@ -0,0 +1,73 @@
+/*
+Date: 17.V.2011
+Author: pumbur
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #222;
+}
+
+.hljs,
+.hljs-subst {
+ color: #aaa;
+}
+
+.hljs-section {
+ color: #fff;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-meta {
+ color: #444;
+}
+
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-regexp {
+ color: #ffcc33;
+}
+
+.hljs-number,
+.hljs-addition {
+ color: #00cc66;
+}
+
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-link {
+ color: #32aaee;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #6644aa;
+}
+
+.hljs-title,
+.hljs-variable,
+.hljs-deletion,
+.hljs-template-tag {
+ color: #bb1166;
+}
+
+.hljs-section,
+.hljs-doctag,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/ascetic.css b/lib/highlight/styles/ascetic.css
new file mode 100644
index 000000000..48397e889
--- /dev/null
+++ b/lib/highlight/styles/ascetic.css
@@ -0,0 +1,45 @@
+/*
+
+Original style from softwaremaniacs.org (c) Ivan Sagalaev
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: white;
+ color: black;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-section,
+.hljs-addition,
+.hljs-attribute,
+.hljs-link {
+ color: #888;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-meta,
+.hljs-deletion {
+ color: #ccc;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-section,
+.hljs-name,
+.hljs-type,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/atelier-cave-dark.css b/lib/highlight/styles/atelier-cave-dark.css
new file mode 100644
index 000000000..65428f3b1
--- /dev/null
+++ b/lib/highlight/styles/atelier-cave-dark.css
@@ -0,0 +1,83 @@
+/* Base16 Atelier Cave Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Cave Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #7e7887;
+}
+
+/* Atelier-Cave Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-regexp,
+.hljs-link,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #be4678;
+}
+
+/* Atelier-Cave Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #aa573c;
+}
+
+/* Atelier-Cave Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #2a9292;
+}
+
+/* Atelier-Cave Blue */
+.hljs-title,
+.hljs-section {
+ color: #576ddb;
+}
+
+/* Atelier-Cave Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #955ae7;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #19171c;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #be4678;
+}
+
+.hljs-addition {
+ background-color: #2a9292;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #19171c;
+ color: #8b8792;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-cave-light.css b/lib/highlight/styles/atelier-cave-light.css
new file mode 100644
index 000000000..b419f9fd8
--- /dev/null
+++ b/lib/highlight/styles/atelier-cave-light.css
@@ -0,0 +1,85 @@
+/* Base16 Atelier Cave Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Cave Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #655f6d;
+}
+
+/* Atelier-Cave Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #be4678;
+}
+
+/* Atelier-Cave Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #aa573c;
+}
+
+/* Atelier-Cave Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #2a9292;
+}
+
+/* Atelier-Cave Blue */
+.hljs-title,
+.hljs-section {
+ color: #576ddb;
+}
+
+/* Atelier-Cave Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #955ae7;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #19171c;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #be4678;
+}
+
+.hljs-addition {
+ background-color: #2a9292;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #efecf4;
+ color: #585260;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-dune-dark.css b/lib/highlight/styles/atelier-dune-dark.css
new file mode 100644
index 000000000..1684f5225
--- /dev/null
+++ b/lib/highlight/styles/atelier-dune-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Dune Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Dune Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #999580;
+}
+
+/* Atelier-Dune Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #d73737;
+}
+
+/* Atelier-Dune Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #b65611;
+}
+
+/* Atelier-Dune Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #60ac39;
+}
+
+/* Atelier-Dune Blue */
+.hljs-title,
+.hljs-section {
+ color: #6684e1;
+}
+
+/* Atelier-Dune Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #b854d4;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #20201d;
+ color: #a6a28c;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-dune-light.css b/lib/highlight/styles/atelier-dune-light.css
new file mode 100644
index 000000000..547719de8
--- /dev/null
+++ b/lib/highlight/styles/atelier-dune-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Dune Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Dune Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #7d7a68;
+}
+
+/* Atelier-Dune Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #d73737;
+}
+
+/* Atelier-Dune Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #b65611;
+}
+
+/* Atelier-Dune Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #60ac39;
+}
+
+/* Atelier-Dune Blue */
+.hljs-title,
+.hljs-section {
+ color: #6684e1;
+}
+
+/* Atelier-Dune Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #b854d4;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #fefbec;
+ color: #6e6b5e;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-estuary-dark.css b/lib/highlight/styles/atelier-estuary-dark.css
new file mode 100644
index 000000000..a5e507187
--- /dev/null
+++ b/lib/highlight/styles/atelier-estuary-dark.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Estuary Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Estuary Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #878573;
+}
+
+/* Atelier-Estuary Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ba6236;
+}
+
+/* Atelier-Estuary Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #ae7313;
+}
+
+/* Atelier-Estuary Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #7d9726;
+}
+
+/* Atelier-Estuary Blue */
+.hljs-title,
+.hljs-section {
+ color: #36a166;
+}
+
+/* Atelier-Estuary Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #5f9182;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #22221b;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #ba6236;
+}
+
+.hljs-addition {
+ background-color: #7d9726;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #22221b;
+ color: #929181;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-estuary-light.css b/lib/highlight/styles/atelier-estuary-light.css
new file mode 100644
index 000000000..1daee5d98
--- /dev/null
+++ b/lib/highlight/styles/atelier-estuary-light.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Estuary Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Estuary Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #6c6b5a;
+}
+
+/* Atelier-Estuary Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ba6236;
+}
+
+/* Atelier-Estuary Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #ae7313;
+}
+
+/* Atelier-Estuary Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #7d9726;
+}
+
+/* Atelier-Estuary Blue */
+.hljs-title,
+.hljs-section {
+ color: #36a166;
+}
+
+/* Atelier-Estuary Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #5f9182;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #22221b;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #ba6236;
+}
+
+.hljs-addition {
+ background-color: #7d9726;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f4f3ec;
+ color: #5f5e4e;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-forest-dark.css b/lib/highlight/styles/atelier-forest-dark.css
new file mode 100644
index 000000000..0ef4fae31
--- /dev/null
+++ b/lib/highlight/styles/atelier-forest-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Forest Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Forest Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #9c9491;
+}
+
+/* Atelier-Forest Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #f22c40;
+}
+
+/* Atelier-Forest Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #df5320;
+}
+
+/* Atelier-Forest Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #7b9726;
+}
+
+/* Atelier-Forest Blue */
+.hljs-title,
+.hljs-section {
+ color: #407ee7;
+}
+
+/* Atelier-Forest Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6666ea;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #1b1918;
+ color: #a8a19f;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-forest-light.css b/lib/highlight/styles/atelier-forest-light.css
new file mode 100644
index 000000000..bbedde18a
--- /dev/null
+++ b/lib/highlight/styles/atelier-forest-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Forest Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Forest Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #766e6b;
+}
+
+/* Atelier-Forest Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #f22c40;
+}
+
+/* Atelier-Forest Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #df5320;
+}
+
+/* Atelier-Forest Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #7b9726;
+}
+
+/* Atelier-Forest Blue */
+.hljs-title,
+.hljs-section {
+ color: #407ee7;
+}
+
+/* Atelier-Forest Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6666ea;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f1efee;
+ color: #68615e;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-heath-dark.css b/lib/highlight/styles/atelier-heath-dark.css
new file mode 100644
index 000000000..fe01ff721
--- /dev/null
+++ b/lib/highlight/styles/atelier-heath-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Heath Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Heath Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #9e8f9e;
+}
+
+/* Atelier-Heath Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ca402b;
+}
+
+/* Atelier-Heath Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #a65926;
+}
+
+/* Atelier-Heath Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #918b3b;
+}
+
+/* Atelier-Heath Blue */
+.hljs-title,
+.hljs-section {
+ color: #516aec;
+}
+
+/* Atelier-Heath Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #7b59c0;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #1b181b;
+ color: #ab9bab;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-heath-light.css b/lib/highlight/styles/atelier-heath-light.css
new file mode 100644
index 000000000..ee43786d1
--- /dev/null
+++ b/lib/highlight/styles/atelier-heath-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Heath Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Heath Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #776977;
+}
+
+/* Atelier-Heath Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ca402b;
+}
+
+/* Atelier-Heath Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #a65926;
+}
+
+/* Atelier-Heath Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #918b3b;
+}
+
+/* Atelier-Heath Blue */
+.hljs-title,
+.hljs-section {
+ color: #516aec;
+}
+
+/* Atelier-Heath Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #7b59c0;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f7f3f7;
+ color: #695d69;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-lakeside-dark.css b/lib/highlight/styles/atelier-lakeside-dark.css
new file mode 100644
index 000000000..a937d3bf5
--- /dev/null
+++ b/lib/highlight/styles/atelier-lakeside-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Lakeside Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Lakeside Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #7195a8;
+}
+
+/* Atelier-Lakeside Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #d22d72;
+}
+
+/* Atelier-Lakeside Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #935c25;
+}
+
+/* Atelier-Lakeside Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #568c3b;
+}
+
+/* Atelier-Lakeside Blue */
+.hljs-title,
+.hljs-section {
+ color: #257fad;
+}
+
+/* Atelier-Lakeside Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6b6bb8;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #161b1d;
+ color: #7ea2b4;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-lakeside-light.css b/lib/highlight/styles/atelier-lakeside-light.css
new file mode 100644
index 000000000..6c7e8f9ef
--- /dev/null
+++ b/lib/highlight/styles/atelier-lakeside-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Lakeside Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Lakeside Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #5a7b8c;
+}
+
+/* Atelier-Lakeside Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #d22d72;
+}
+
+/* Atelier-Lakeside Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #935c25;
+}
+
+/* Atelier-Lakeside Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #568c3b;
+}
+
+/* Atelier-Lakeside Blue */
+.hljs-title,
+.hljs-section {
+ color: #257fad;
+}
+
+/* Atelier-Lakeside Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6b6bb8;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #ebf8ff;
+ color: #516d7b;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-plateau-dark.css b/lib/highlight/styles/atelier-plateau-dark.css
new file mode 100644
index 000000000..3bb052693
--- /dev/null
+++ b/lib/highlight/styles/atelier-plateau-dark.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Plateau Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Plateau Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #7e7777;
+}
+
+/* Atelier-Plateau Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ca4949;
+}
+
+/* Atelier-Plateau Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #b45a3c;
+}
+
+/* Atelier-Plateau Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #4b8b8b;
+}
+
+/* Atelier-Plateau Blue */
+.hljs-title,
+.hljs-section {
+ color: #7272ca;
+}
+
+/* Atelier-Plateau Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #8464c4;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #1b1818;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #ca4949;
+}
+
+.hljs-addition {
+ background-color: #4b8b8b;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #1b1818;
+ color: #8a8585;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-plateau-light.css b/lib/highlight/styles/atelier-plateau-light.css
new file mode 100644
index 000000000..5f0222bec
--- /dev/null
+++ b/lib/highlight/styles/atelier-plateau-light.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Plateau Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Plateau Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #655d5d;
+}
+
+/* Atelier-Plateau Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #ca4949;
+}
+
+/* Atelier-Plateau Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #b45a3c;
+}
+
+/* Atelier-Plateau Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #4b8b8b;
+}
+
+/* Atelier-Plateau Blue */
+.hljs-title,
+.hljs-section {
+ color: #7272ca;
+}
+
+/* Atelier-Plateau Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #8464c4;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #1b1818;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #ca4949;
+}
+
+.hljs-addition {
+ background-color: #4b8b8b;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f4ecec;
+ color: #585050;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-savanna-dark.css b/lib/highlight/styles/atelier-savanna-dark.css
new file mode 100644
index 000000000..38f831431
--- /dev/null
+++ b/lib/highlight/styles/atelier-savanna-dark.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Savanna Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Savanna Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #78877d;
+}
+
+/* Atelier-Savanna Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #b16139;
+}
+
+/* Atelier-Savanna Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #9f713c;
+}
+
+/* Atelier-Savanna Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #489963;
+}
+
+/* Atelier-Savanna Blue */
+.hljs-title,
+.hljs-section {
+ color: #478c90;
+}
+
+/* Atelier-Savanna Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #55859b;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #171c19;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #b16139;
+}
+
+.hljs-addition {
+ background-color: #489963;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #171c19;
+ color: #87928a;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-savanna-light.css b/lib/highlight/styles/atelier-savanna-light.css
new file mode 100644
index 000000000..1ccd7c685
--- /dev/null
+++ b/lib/highlight/styles/atelier-savanna-light.css
@@ -0,0 +1,84 @@
+/* Base16 Atelier Savanna Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Savanna Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #5f6d64;
+}
+
+/* Atelier-Savanna Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #b16139;
+}
+
+/* Atelier-Savanna Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #9f713c;
+}
+
+/* Atelier-Savanna Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #489963;
+}
+
+/* Atelier-Savanna Blue */
+.hljs-title,
+.hljs-section {
+ color: #478c90;
+}
+
+/* Atelier-Savanna Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #55859b;
+}
+
+.hljs-deletion,
+.hljs-addition {
+ color: #171c19;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #b16139;
+}
+
+.hljs-addition {
+ background-color: #489963;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #ecf4ee;
+ color: #526057;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-seaside-dark.css b/lib/highlight/styles/atelier-seaside-dark.css
new file mode 100644
index 000000000..df29949c6
--- /dev/null
+++ b/lib/highlight/styles/atelier-seaside-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Seaside Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Seaside Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #809980;
+}
+
+/* Atelier-Seaside Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #e6193c;
+}
+
+/* Atelier-Seaside Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #87711d;
+}
+
+/* Atelier-Seaside Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #29a329;
+}
+
+/* Atelier-Seaside Blue */
+.hljs-title,
+.hljs-section {
+ color: #3d62f5;
+}
+
+/* Atelier-Seaside Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #ad2bee;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #131513;
+ color: #8ca68c;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-seaside-light.css b/lib/highlight/styles/atelier-seaside-light.css
new file mode 100644
index 000000000..9d960f29f
--- /dev/null
+++ b/lib/highlight/styles/atelier-seaside-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Seaside Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Seaside Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #687d68;
+}
+
+/* Atelier-Seaside Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #e6193c;
+}
+
+/* Atelier-Seaside Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #87711d;
+}
+
+/* Atelier-Seaside Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #29a329;
+}
+
+/* Atelier-Seaside Blue */
+.hljs-title,
+.hljs-section {
+ color: #3d62f5;
+}
+
+/* Atelier-Seaside Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #ad2bee;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f4fbf4;
+ color: #5e6e5e;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-sulphurpool-dark.css b/lib/highlight/styles/atelier-sulphurpool-dark.css
new file mode 100644
index 000000000..c2ab7938d
--- /dev/null
+++ b/lib/highlight/styles/atelier-sulphurpool-dark.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Sulphurpool Dark - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Sulphurpool Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #898ea4;
+}
+
+/* Atelier-Sulphurpool Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #c94922;
+}
+
+/* Atelier-Sulphurpool Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #c76b29;
+}
+
+/* Atelier-Sulphurpool Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #ac9739;
+}
+
+/* Atelier-Sulphurpool Blue */
+.hljs-title,
+.hljs-section {
+ color: #3d8fd1;
+}
+
+/* Atelier-Sulphurpool Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6679cc;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #202746;
+ color: #979db4;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atelier-sulphurpool-light.css b/lib/highlight/styles/atelier-sulphurpool-light.css
new file mode 100644
index 000000000..96c47d086
--- /dev/null
+++ b/lib/highlight/styles/atelier-sulphurpool-light.css
@@ -0,0 +1,69 @@
+/* Base16 Atelier Sulphurpool Light - Theme */
+/* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
+/* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
+
+/* Atelier-Sulphurpool Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #6b7394;
+}
+
+/* Atelier-Sulphurpool Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-regexp,
+.hljs-link,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #c94922;
+}
+
+/* Atelier-Sulphurpool Orange */
+.hljs-number,
+.hljs-meta,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #c76b29;
+}
+
+/* Atelier-Sulphurpool Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet {
+ color: #ac9739;
+}
+
+/* Atelier-Sulphurpool Blue */
+.hljs-title,
+.hljs-section {
+ color: #3d8fd1;
+}
+
+/* Atelier-Sulphurpool Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #6679cc;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #f5f7ff;
+ color: #5e6687;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/atom-one-dark.css b/lib/highlight/styles/atom-one-dark.css
new file mode 100644
index 000000000..1616aafe3
--- /dev/null
+++ b/lib/highlight/styles/atom-one-dark.css
@@ -0,0 +1,96 @@
+/*
+
+Atom One Dark by Daniel Gamage
+Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax
+
+base: #282c34
+mono-1: #abb2bf
+mono-2: #818896
+mono-3: #5c6370
+hue-1: #56b6c2
+hue-2: #61aeee
+hue-3: #c678dd
+hue-4: #98c379
+hue-5: #e06c75
+hue-5-2: #be5046
+hue-6: #d19a66
+hue-6-2: #e6c07b
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #abb2bf;
+ background: #282c34;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #5c6370;
+ font-style: italic;
+}
+
+.hljs-doctag,
+.hljs-keyword,
+.hljs-formula {
+ color: #c678dd;
+}
+
+.hljs-section,
+.hljs-name,
+.hljs-selector-tag,
+.hljs-deletion,
+.hljs-subst {
+ color: #e06c75;
+}
+
+.hljs-literal {
+ color: #56b6c2;
+}
+
+.hljs-string,
+.hljs-regexp,
+.hljs-addition,
+.hljs-attribute,
+.hljs-meta-string {
+ color: #98c379;
+}
+
+.hljs-built_in,
+.hljs-class .hljs-title {
+ color: #e6c07b;
+}
+
+.hljs-attr,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-type,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-number {
+ color: #d19a66;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link,
+.hljs-meta,
+.hljs-selector-id,
+.hljs-title {
+ color: #61aeee;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
diff --git a/lib/highlight/styles/atom-one-light.css b/lib/highlight/styles/atom-one-light.css
new file mode 100644
index 000000000..d5bd1d2a9
--- /dev/null
+++ b/lib/highlight/styles/atom-one-light.css
@@ -0,0 +1,96 @@
+/*
+
+Atom One Light by Daniel Gamage
+Original One Light Syntax theme from https://github.com/atom/one-light-syntax
+
+base: #fafafa
+mono-1: #383a42
+mono-2: #686b77
+mono-3: #a0a1a7
+hue-1: #0184bb
+hue-2: #4078f2
+hue-3: #a626a4
+hue-4: #50a14f
+hue-5: #e45649
+hue-5-2: #c91243
+hue-6: #986801
+hue-6-2: #c18401
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #383a42;
+ background: #fafafa;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #a0a1a7;
+ font-style: italic;
+}
+
+.hljs-doctag,
+.hljs-keyword,
+.hljs-formula {
+ color: #a626a4;
+}
+
+.hljs-section,
+.hljs-name,
+.hljs-selector-tag,
+.hljs-deletion,
+.hljs-subst {
+ color: #e45649;
+}
+
+.hljs-literal {
+ color: #0184bb;
+}
+
+.hljs-string,
+.hljs-regexp,
+.hljs-addition,
+.hljs-attribute,
+.hljs-meta-string {
+ color: #50a14f;
+}
+
+.hljs-built_in,
+.hljs-class .hljs-title {
+ color: #c18401;
+}
+
+.hljs-attr,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-type,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-number {
+ color: #986801;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link,
+.hljs-meta,
+.hljs-selector-id,
+.hljs-title {
+ color: #4078f2;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
diff --git a/lib/highlight/styles/brown-paper.css b/lib/highlight/styles/brown-paper.css
new file mode 100644
index 000000000..f0197b924
--- /dev/null
+++ b/lib/highlight/styles/brown-paper.css
@@ -0,0 +1,64 @@
+/*
+
+Brown Paper style from goldblog.com.ua (c) Zaripov Yura
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background:#b7a68e url(./brown-papersq.png);
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal {
+ color:#005599;
+ font-weight:bold;
+}
+
+.hljs,
+.hljs-subst {
+ color: #363c69;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-attribute,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-built_in,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-link,
+.hljs-name {
+ color: #2c009f;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-meta,
+.hljs-deletion {
+ color: #802022;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-doctag,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/brown-papersq.png b/lib/highlight/styles/brown-papersq.png
new file mode 100644
index 000000000..3813903db
Binary files /dev/null and b/lib/highlight/styles/brown-papersq.png differ
diff --git a/lib/highlight/styles/codepen-embed.css b/lib/highlight/styles/codepen-embed.css
new file mode 100644
index 000000000..195c4a078
--- /dev/null
+++ b/lib/highlight/styles/codepen-embed.css
@@ -0,0 +1,60 @@
+/*
+ codepen.io Embed Theme
+ Author: Justin Perry
+ Original theme - https://github.com/chriskempson/tomorrow-theme
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #222;
+ color: #fff;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #777;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-regexp,
+.hljs-meta,
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-params,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link,
+.hljs-deletion {
+ color: #ab875d;
+}
+
+.hljs-section,
+.hljs-title,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-type,
+.hljs-attribute {
+ color: #9b869b;
+}
+
+.hljs-string,
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-addition {
+ color: #8f9c6c;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/color-brewer.css b/lib/highlight/styles/color-brewer.css
new file mode 100644
index 000000000..7934d986a
--- /dev/null
+++ b/lib/highlight/styles/color-brewer.css
@@ -0,0 +1,71 @@
+/*
+
+Colorbrewer theme
+Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock
+Ported by Fabrício Tavares de Oliveira
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #fff;
+}
+
+.hljs,
+.hljs-subst {
+ color: #000;
+}
+
+.hljs-string,
+.hljs-meta,
+.hljs-symbol,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-addition {
+ color: #756bb1;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #636363;
+}
+
+.hljs-number,
+.hljs-regexp,
+.hljs-literal,
+.hljs-bullet,
+.hljs-link {
+ color: #31a354;
+}
+
+.hljs-deletion,
+.hljs-variable {
+ color: #88f;
+}
+
+
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-title,
+.hljs-section,
+.hljs-built_in,
+.hljs-doctag,
+.hljs-type,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-strong {
+ color: #3182bd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-attribute {
+ color: #e6550d;
+}
diff --git a/lib/highlight/styles/darcula.css b/lib/highlight/styles/darcula.css
new file mode 100644
index 000000000..be182d0b5
--- /dev/null
+++ b/lib/highlight/styles/darcula.css
@@ -0,0 +1,77 @@
+/*
+
+Darcula color scheme from the JetBrains family of IDEs
+
+*/
+
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #2b2b2b;
+}
+
+.hljs {
+ color: #bababa;
+}
+
+.hljs-strong,
+.hljs-emphasis {
+ color: #a8a8a2;
+}
+
+.hljs-bullet,
+.hljs-quote,
+.hljs-link,
+.hljs-number,
+.hljs-regexp,
+.hljs-literal {
+ color: #6896ba;
+}
+
+.hljs-code,
+.hljs-selector-class {
+ color: #a6e22e;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-section,
+.hljs-attribute,
+.hljs-name,
+.hljs-variable {
+ color: #cb7832;
+}
+
+.hljs-params {
+ color: #b9b9b9;
+}
+
+.hljs-string {
+ color: #6a8759;
+}
+
+.hljs-subst,
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-symbol,
+.hljs-selector-id,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-addition {
+ color: #e0c46c;
+}
+
+.hljs-comment,
+.hljs-deletion,
+.hljs-meta {
+ color: #7f7f7f;
+}
diff --git a/lib/highlight/styles/dark.css b/lib/highlight/styles/dark.css
new file mode 100644
index 000000000..b4724f5f5
--- /dev/null
+++ b/lib/highlight/styles/dark.css
@@ -0,0 +1,63 @@
+/*
+
+Dark style from softwaremaniacs.org (c) Ivan Sagalaev
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #444;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-section,
+.hljs-link {
+ color: white;
+}
+
+.hljs,
+.hljs-subst {
+ color: #ddd;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-name,
+.hljs-type,
+.hljs-attribute,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-built_in,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #d88;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-deletion,
+.hljs-meta {
+ color: #777;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-title,
+.hljs-section,
+.hljs-doctag,
+.hljs-type,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/darkula.css b/lib/highlight/styles/darkula.css
new file mode 100644
index 000000000..f4646c3c5
--- /dev/null
+++ b/lib/highlight/styles/darkula.css
@@ -0,0 +1,6 @@
+/*
+ Deprecated due to a typo in the name and left here for compatibility purpose only.
+ Please use darcula.css instead.
+*/
+
+@import url('darcula.css');
diff --git a/lib/highlight/styles/default.css b/lib/highlight/styles/default.css
new file mode 100644
index 000000000..f1bfade31
--- /dev/null
+++ b/lib/highlight/styles/default.css
@@ -0,0 +1,99 @@
+/*
+
+Original highlight.js style (c) Ivan Sagalaev
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #F0F0F0;
+}
+
+
+/* Base color: saturation 0; */
+
+.hljs,
+.hljs-subst {
+ color: #444;
+}
+
+.hljs-comment {
+ color: #888888;
+}
+
+.hljs-keyword,
+.hljs-attribute,
+.hljs-selector-tag,
+.hljs-meta-keyword,
+.hljs-doctag,
+.hljs-name {
+ font-weight: bold;
+}
+
+
+/* User color: hue: 0 */
+
+.hljs-type,
+.hljs-string,
+.hljs-number,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-quote,
+.hljs-template-tag,
+.hljs-deletion {
+ color: #880000;
+}
+
+.hljs-title,
+.hljs-section {
+ color: #880000;
+ font-weight: bold;
+}
+
+.hljs-regexp,
+.hljs-symbol,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #BC6060;
+}
+
+
+/* Language color: hue: 90; */
+
+.hljs-literal {
+ color: #78A960;
+}
+
+.hljs-built_in,
+.hljs-bullet,
+.hljs-code,
+.hljs-addition {
+ color: #397300;
+}
+
+
+/* Meta color: hue: 200 */
+
+.hljs-meta {
+ color: #1f7199;
+}
+
+.hljs-meta-string {
+ color: #4d99bf;
+}
+
+
+/* Misc effects */
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/docco.css b/lib/highlight/styles/docco.css
new file mode 100644
index 000000000..db366be37
--- /dev/null
+++ b/lib/highlight/styles/docco.css
@@ -0,0 +1,97 @@
+/*
+Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #000;
+ background: #f8f8ff;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #408080;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-subst {
+ color: #954121;
+}
+
+.hljs-number {
+ color: #40a070;
+}
+
+.hljs-string,
+.hljs-doctag {
+ color: #219161;
+}
+
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-section,
+.hljs-type {
+ color: #19469d;
+}
+
+.hljs-params {
+ color: #00f;
+}
+
+.hljs-title {
+ color: #458;
+ font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+ color: #000080;
+ font-weight: normal;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #008080;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #b68;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+ color: #990073;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #0086b3;
+}
+
+.hljs-meta {
+ color: #999;
+ font-weight: bold;
+}
+
+.hljs-deletion {
+ background: #fdd;
+}
+
+.hljs-addition {
+ background: #dfd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/dracula.css b/lib/highlight/styles/dracula.css
new file mode 100644
index 000000000..d591db680
--- /dev/null
+++ b/lib/highlight/styles/dracula.css
@@ -0,0 +1,76 @@
+/*
+
+Dracula Theme v1.2.0
+
+https://github.com/zenorocha/dracula-theme
+
+Copyright 2015, All rights reserved
+
+Code licensed under the MIT license
+http://zenorocha.mit-license.org
+
+@author Éverton Ribeiro
+@author Zeno Rocha
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #282a36;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-section,
+.hljs-link {
+ color: #8be9fd;
+}
+
+.hljs-function .hljs-keyword {
+ color: #ff79c6;
+}
+
+.hljs,
+.hljs-subst {
+ color: #f8f8f2;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-name,
+.hljs-type,
+.hljs-attribute,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #f1fa8c;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-deletion,
+.hljs-meta {
+ color: #6272a4;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-title,
+.hljs-section,
+.hljs-doctag,
+.hljs-type,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/far.css b/lib/highlight/styles/far.css
new file mode 100644
index 000000000..2b3f87b56
--- /dev/null
+++ b/lib/highlight/styles/far.css
@@ -0,0 +1,71 @@
+/*
+
+FAR Style (c) MajestiC
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #000080;
+}
+
+.hljs,
+.hljs-subst {
+ color: #0ff;
+}
+
+.hljs-string,
+.hljs-attribute,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-addition {
+ color: #ff0;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-section,
+.hljs-type,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-variable {
+ color: #fff;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-doctag,
+.hljs-deletion {
+ color: #888;
+}
+
+.hljs-number,
+.hljs-regexp,
+.hljs-literal,
+.hljs-link {
+ color: #0f0;
+}
+
+.hljs-meta {
+ color: #008080;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-title,
+.hljs-section,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/foundation.css b/lib/highlight/styles/foundation.css
new file mode 100644
index 000000000..f1fe64b37
--- /dev/null
+++ b/lib/highlight/styles/foundation.css
@@ -0,0 +1,88 @@
+/*
+Description: Foundation 4 docs style for highlight.js
+Author: Dan Allen
+Website: http://foundation.zurb.com/docs/
+Version: 1.0
+Date: 2013-04-02
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #eee; color: black;
+}
+
+.hljs-link,
+.hljs-emphasis,
+.hljs-attribute,
+.hljs-addition {
+ color: #070;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong,
+.hljs-string,
+.hljs-deletion {
+ color: #d14;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-quote,
+.hljs-comment {
+ color: #998;
+ font-style: italic;
+}
+
+.hljs-section,
+.hljs-title {
+ color: #900;
+}
+
+.hljs-class .hljs-title,
+.hljs-type {
+ color: #458;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #336699;
+}
+
+.hljs-bullet {
+ color: #997700;
+}
+
+.hljs-meta {
+ color: #3344bb;
+}
+
+.hljs-code,
+.hljs-number,
+.hljs-literal,
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #099;
+}
+
+.hljs-regexp {
+ background-color: #fff0ff;
+ color: #880088;
+}
+
+.hljs-symbol {
+ color: #990073;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #007700;
+}
diff --git a/lib/highlight/styles/github-gist.css b/lib/highlight/styles/github-gist.css
new file mode 100644
index 000000000..155f0b916
--- /dev/null
+++ b/lib/highlight/styles/github-gist.css
@@ -0,0 +1,71 @@
+/**
+ * GitHub Gist Theme
+ * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
+ */
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
diff --git a/lib/highlight/styles/github.css b/lib/highlight/styles/github.css
new file mode 100644
index 000000000..791932b87
--- /dev/null
+++ b/lib/highlight/styles/github.css
@@ -0,0 +1,99 @@
+/*
+
+github.com style (c) Vasily Polovnyov
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #333;
+ background: #f8f8f8;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #998;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-subst {
+ color: #333;
+ font-weight: bold;
+}
+
+.hljs-number,
+.hljs-literal,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag .hljs-attr {
+ color: #008080;
+}
+
+.hljs-string,
+.hljs-doctag {
+ color: #d14;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-selector-id {
+ color: #900;
+ font-weight: bold;
+}
+
+.hljs-subst {
+ font-weight: normal;
+}
+
+.hljs-type,
+.hljs-class .hljs-title {
+ color: #458;
+ font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+ color: #000080;
+ font-weight: normal;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #009926;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+ color: #990073;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #0086b3;
+}
+
+.hljs-meta {
+ color: #999;
+ font-weight: bold;
+}
+
+.hljs-deletion {
+ background: #fdd;
+}
+
+.hljs-addition {
+ background: #dfd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/googlecode.css b/lib/highlight/styles/googlecode.css
new file mode 100644
index 000000000..884ad6353
--- /dev/null
+++ b/lib/highlight/styles/googlecode.css
@@ -0,0 +1,89 @@
+/*
+
+Google Code style (c) Aahan Krish
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: white;
+ color: black;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #800;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-section,
+.hljs-title,
+.hljs-name {
+ color: #008;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #660;
+}
+
+.hljs-string,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-regexp {
+ color: #080;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-meta,
+.hljs-number,
+.hljs-link {
+ color: #066;
+}
+
+.hljs-title,
+.hljs-doctag,
+.hljs-type,
+.hljs-attr,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-params {
+ color: #606;
+}
+
+.hljs-attribute,
+.hljs-subst {
+ color: #000;
+}
+
+.hljs-formula {
+ background-color: #eee;
+ font-style: italic;
+}
+
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #9B703F
+}
+
+.hljs-addition {
+ background-color: #baeeba;
+}
+
+.hljs-deletion {
+ background-color: #ffc8bd;
+}
+
+.hljs-doctag,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/grayscale.css b/lib/highlight/styles/grayscale.css
new file mode 100644
index 000000000..5376f3406
--- /dev/null
+++ b/lib/highlight/styles/grayscale.css
@@ -0,0 +1,101 @@
+/*
+
+grayscale style (c) MY Sun
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #333;
+ background: #fff;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #777;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-subst {
+ color: #333;
+ font-weight: bold;
+}
+
+.hljs-number,
+.hljs-literal {
+ color: #777;
+}
+
+.hljs-string,
+.hljs-doctag,
+.hljs-formula {
+ color: #333;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-selector-id {
+ color: #000;
+ font-weight: bold;
+}
+
+.hljs-subst {
+ font-weight: normal;
+}
+
+.hljs-class .hljs-title,
+.hljs-type,
+.hljs-name {
+ color: #333;
+ font-weight: bold;
+}
+
+.hljs-tag {
+ color: #333;
+}
+
+.hljs-regexp {
+ color: #333;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link {
+ color: #000;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #000;
+ text-decoration: underline;
+}
+
+.hljs-meta {
+ color: #999;
+ font-weight: bold;
+}
+
+.hljs-deletion {
+ color: #fff;
+ background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat;
+}
+
+.hljs-addition {
+ color: #000;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/gruvbox-dark.css b/lib/highlight/styles/gruvbox-dark.css
new file mode 100644
index 000000000..f563811a8
--- /dev/null
+++ b/lib/highlight/styles/gruvbox-dark.css
@@ -0,0 +1,108 @@
+/*
+
+Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #282828;
+}
+
+.hljs,
+.hljs-subst {
+ color: #ebdbb2;
+}
+
+/* Gruvbox Red */
+.hljs-deletion,
+.hljs-formula,
+.hljs-keyword,
+.hljs-link,
+.hljs-selector-tag {
+ color: #fb4934;
+}
+
+/* Gruvbox Blue */
+.hljs-built_in,
+.hljs-emphasis,
+.hljs-name,
+.hljs-quote,
+.hljs-strong,
+.hljs-title,
+.hljs-variable {
+ color: #83a598;
+}
+
+/* Gruvbox Yellow */
+.hljs-attr,
+.hljs-params,
+.hljs-template-tag,
+.hljs-type {
+ color: #fabd2f;
+}
+
+/* Gruvbox Purple */
+.hljs-builtin-name,
+.hljs-doctag,
+.hljs-literal,
+.hljs-number {
+ color: #8f3f71;
+}
+
+/* Gruvbox Orange */
+.hljs-code,
+.hljs-meta,
+.hljs-regexp,
+.hljs-selector-id,
+.hljs-template-variable {
+ color: #fe8019;
+}
+
+/* Gruvbox Green */
+.hljs-addition,
+.hljs-meta-string,
+.hljs-section,
+.hljs-selector-attr,
+.hljs-selector-class,
+.hljs-string,
+.hljs-symbol {
+ color: #b8bb26;
+}
+
+/* Gruvbox Aqua */
+.hljs-attribute,
+.hljs-bullet,
+.hljs-class,
+.hljs-function,
+.hljs-function .hljs-keyword,
+.hljs-meta-keyword,
+.hljs-selector-pseudo,
+.hljs-tag {
+ color: #8ec07c;
+}
+
+/* Gruvbox Gray */
+.hljs-comment {
+ color: #928374;
+}
+
+/* Gruvbox Purple */
+.hljs-link_label,
+.hljs-literal,
+.hljs-number {
+ color: #d3869b;
+}
+
+.hljs-comment,
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-section,
+.hljs-strong,
+.hljs-tag {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/gruvbox-light.css b/lib/highlight/styles/gruvbox-light.css
new file mode 100644
index 000000000..ff45468eb
--- /dev/null
+++ b/lib/highlight/styles/gruvbox-light.css
@@ -0,0 +1,108 @@
+/*
+
+Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #fbf1c7;
+}
+
+.hljs,
+.hljs-subst {
+ color: #3c3836;
+}
+
+/* Gruvbox Red */
+.hljs-deletion,
+.hljs-formula,
+.hljs-keyword,
+.hljs-link,
+.hljs-selector-tag {
+ color: #9d0006;
+}
+
+/* Gruvbox Blue */
+.hljs-built_in,
+.hljs-emphasis,
+.hljs-name,
+.hljs-quote,
+.hljs-strong,
+.hljs-title,
+.hljs-variable {
+ color: #076678;
+}
+
+/* Gruvbox Yellow */
+.hljs-attr,
+.hljs-params,
+.hljs-template-tag,
+.hljs-type {
+ color: #b57614;
+}
+
+/* Gruvbox Purple */
+.hljs-builtin-name,
+.hljs-doctag,
+.hljs-literal,
+.hljs-number {
+ color: #8f3f71;
+}
+
+/* Gruvbox Orange */
+.hljs-code,
+.hljs-meta,
+.hljs-regexp,
+.hljs-selector-id,
+.hljs-template-variable {
+ color: #af3a03;
+}
+
+/* Gruvbox Green */
+.hljs-addition,
+.hljs-meta-string,
+.hljs-section,
+.hljs-selector-attr,
+.hljs-selector-class,
+.hljs-string,
+.hljs-symbol {
+ color: #79740e;
+}
+
+/* Gruvbox Aqua */
+.hljs-attribute,
+.hljs-bullet,
+.hljs-class,
+.hljs-function,
+.hljs-function .hljs-keyword,
+.hljs-meta-keyword,
+.hljs-selector-pseudo,
+.hljs-tag {
+ color: #427b58;
+}
+
+/* Gruvbox Gray */
+.hljs-comment {
+ color: #928374;
+}
+
+/* Gruvbox Purple */
+.hljs-link_label,
+.hljs-literal,
+.hljs-number {
+ color: #8f3f71;
+}
+
+.hljs-comment,
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-section,
+.hljs-strong,
+.hljs-tag {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/hopscotch.css b/lib/highlight/styles/hopscotch.css
new file mode 100644
index 000000000..32e60d230
--- /dev/null
+++ b/lib/highlight/styles/hopscotch.css
@@ -0,0 +1,83 @@
+/*
+ * Hopscotch
+ * by Jan T. Sott
+ * https://github.com/idleberg/Hopscotch
+ *
+ * This work is licensed under the Creative Commons CC0 1.0 Universal License
+ */
+
+/* Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #989498;
+}
+
+/* Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-link,
+.hljs-deletion {
+ color: #dd464c;
+}
+
+/* Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params {
+ color: #fd8b19;
+}
+
+/* Yellow */
+.hljs-class .hljs-title {
+ color: #fdcc59;
+}
+
+/* Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #8fc13e;
+}
+
+/* Aqua */
+.hljs-meta {
+ color: #149b93;
+}
+
+/* Blue */
+.hljs-function,
+.hljs-section,
+.hljs-title {
+ color: #1290bf;
+}
+
+/* Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #c85e7c;
+}
+
+.hljs {
+ display: block;
+ background: #322931;
+ color: #b9b5b8;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/hybrid.css b/lib/highlight/styles/hybrid.css
new file mode 100644
index 000000000..29735a189
--- /dev/null
+++ b/lib/highlight/styles/hybrid.css
@@ -0,0 +1,102 @@
+/*
+
+vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid)
+
+*/
+
+/*background color*/
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #1d1f21;
+}
+
+/*selection color*/
+.hljs::selection,
+.hljs span::selection {
+ background: #373b41;
+}
+
+.hljs::-moz-selection,
+.hljs span::-moz-selection {
+ background: #373b41;
+}
+
+/*foreground color*/
+.hljs {
+ color: #c5c8c6;
+}
+
+/*color: fg_yellow*/
+.hljs-title,
+.hljs-name {
+ color: #f0c674;
+}
+
+/*color: fg_comment*/
+.hljs-comment,
+.hljs-meta,
+.hljs-meta .hljs-keyword {
+ color: #707880;
+}
+
+/*color: fg_red*/
+.hljs-number,
+.hljs-symbol,
+.hljs-literal,
+.hljs-deletion,
+.hljs-link {
+ color: #cc6666
+}
+
+/*color: fg_green*/
+.hljs-string,
+.hljs-doctag,
+.hljs-addition,
+.hljs-regexp,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #b5bd68;
+}
+
+/*color: fg_purple*/
+.hljs-attribute,
+.hljs-code,
+.hljs-selector-id {
+ color: #b294bb;
+}
+
+/*color: fg_blue*/
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-bullet,
+.hljs-tag {
+ color: #81a2be;
+}
+
+/*color: fg_aqua*/
+.hljs-subst,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #8abeb7;
+}
+
+/*color: fg_orange*/
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-quote,
+.hljs-section,
+.hljs-selector-class {
+ color: #de935f;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/idea.css b/lib/highlight/styles/idea.css
new file mode 100644
index 000000000..3bf1892bd
--- /dev/null
+++ b/lib/highlight/styles/idea.css
@@ -0,0 +1,97 @@
+/*
+
+Intellij Idea-like styling (c) Vasily Polovnyov
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #000;
+ background: #fff;
+}
+
+.hljs-subst,
+.hljs-title {
+ font-weight: normal;
+ color: #000;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #808080;
+ font-style: italic;
+}
+
+.hljs-meta {
+ color: #808000;
+}
+
+.hljs-tag {
+ background: #efefef;
+}
+
+.hljs-section,
+.hljs-name,
+.hljs-literal,
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type,
+.hljs-selector-id,
+.hljs-selector-class {
+ font-weight: bold;
+ color: #000080;
+}
+
+.hljs-attribute,
+.hljs-number,
+.hljs-regexp,
+.hljs-link {
+ font-weight: bold;
+ color: #0000ff;
+}
+
+.hljs-number,
+.hljs-regexp,
+.hljs-link {
+ font-weight: normal;
+}
+
+.hljs-string {
+ color: #008000;
+ font-weight: bold;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-formula {
+ color: #000;
+ background: #d0eded;
+ font-style: italic;
+}
+
+.hljs-doctag {
+ text-decoration: underline;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #660e7a;
+}
+
+.hljs-addition {
+ background: #baeeba;
+}
+
+.hljs-deletion {
+ background: #ffc8bd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/ir-black.css b/lib/highlight/styles/ir-black.css
new file mode 100644
index 000000000..bd4c755ed
--- /dev/null
+++ b/lib/highlight/styles/ir-black.css
@@ -0,0 +1,73 @@
+/*
+ IR_Black style (c) Vasily Mikhailitchenko
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #000;
+ color: #f8f8f8;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-meta {
+ color: #7c7c7c;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-tag,
+.hljs-name {
+ color: #96cbfe;
+}
+
+.hljs-attribute,
+.hljs-selector-id {
+ color: #ffffb6;
+}
+
+.hljs-string,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-addition {
+ color: #a8ff60;
+}
+
+.hljs-subst {
+ color: #daefa3;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #e9c062;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-doctag {
+ color: #ffffb6;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-literal {
+ color: #c6c5fe;
+}
+
+.hljs-number,
+.hljs-deletion {
+ color:#ff73fd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/kimbie.dark.css b/lib/highlight/styles/kimbie.dark.css
new file mode 100644
index 000000000..d139cb5d0
--- /dev/null
+++ b/lib/highlight/styles/kimbie.dark.css
@@ -0,0 +1,74 @@
+/*
+ Name: Kimbie (dark)
+ Author: Jan T. Sott
+ License: Creative Commons Attribution-ShareAlike 4.0 Unported License
+ URL: https://github.com/idleberg/Kimbie-highlight.js
+*/
+
+/* Kimbie Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #d6baad;
+}
+
+/* Kimbie Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-meta {
+ color: #dc3958;
+}
+
+/* Kimbie Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-deletion,
+.hljs-link {
+ color: #f79a32;
+}
+
+/* Kimbie Yellow */
+.hljs-title,
+.hljs-section,
+.hljs-attribute {
+ color: #f06431;
+}
+
+/* Kimbie Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #889b4a;
+}
+
+/* Kimbie Purple */
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-function {
+ color: #98676a;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #221a0f;
+ color: #d3af86;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/kimbie.light.css b/lib/highlight/styles/kimbie.light.css
new file mode 100644
index 000000000..04ff6ed3a
--- /dev/null
+++ b/lib/highlight/styles/kimbie.light.css
@@ -0,0 +1,74 @@
+/*
+ Name: Kimbie (light)
+ Author: Jan T. Sott
+ License: Creative Commons Attribution-ShareAlike 4.0 Unported License
+ URL: https://github.com/idleberg/Kimbie-highlight.js
+*/
+
+/* Kimbie Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #a57a4c;
+}
+
+/* Kimbie Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-meta {
+ color: #dc3958;
+}
+
+/* Kimbie Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-deletion,
+.hljs-link {
+ color: #f79a32;
+}
+
+/* Kimbie Yellow */
+.hljs-title,
+.hljs-section,
+.hljs-attribute {
+ color: #f06431;
+}
+
+/* Kimbie Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #889b4a;
+}
+
+/* Kimbie Purple */
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-function {
+ color: #98676a;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #fbebd4;
+ color: #84613d;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/magula.css b/lib/highlight/styles/magula.css
new file mode 100644
index 000000000..44dee5e8e
--- /dev/null
+++ b/lib/highlight/styles/magula.css
@@ -0,0 +1,70 @@
+/*
+Description: Magula style for highligh.js
+Author: Ruslan Keba
+Website: http://rukeba.com/
+Version: 1.0
+Date: 2009-01-03
+Music: Aphex Twin / Xtal
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background-color: #f4f4f4;
+}
+
+.hljs,
+.hljs-subst {
+ color: black;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #050;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #777;
+}
+
+.hljs-number,
+.hljs-regexp,
+.hljs-literal,
+.hljs-type,
+.hljs-link {
+ color: #800;
+}
+
+.hljs-deletion,
+.hljs-meta {
+ color: #00e;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-doctag,
+.hljs-title,
+.hljs-section,
+.hljs-built_in,
+.hljs-tag,
+.hljs-name {
+ font-weight: bold;
+ color: navy;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/mono-blue.css b/lib/highlight/styles/mono-blue.css
new file mode 100644
index 000000000..884c97c76
--- /dev/null
+++ b/lib/highlight/styles/mono-blue.css
@@ -0,0 +1,59 @@
+/*
+ Five-color theme from a single blue hue.
+*/
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #eaeef3;
+}
+
+.hljs {
+ color: #00193a;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-title,
+.hljs-section,
+.hljs-doctag,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-comment {
+ color: #738191;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-section,
+.hljs-built_in,
+.hljs-literal,
+.hljs-type,
+.hljs-addition,
+.hljs-tag,
+.hljs-quote,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #0048ab;
+}
+
+.hljs-meta,
+.hljs-subst,
+.hljs-symbol,
+.hljs-regexp,
+.hljs-attribute,
+.hljs-deletion,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-bullet {
+ color: #4c81c9;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/monokai-sublime.css b/lib/highlight/styles/monokai-sublime.css
new file mode 100644
index 000000000..2864170da
--- /dev/null
+++ b/lib/highlight/styles/monokai-sublime.css
@@ -0,0 +1,83 @@
+/*
+
+Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #23241f;
+}
+
+.hljs,
+.hljs-tag,
+.hljs-subst {
+ color: #f8f8f2;
+}
+
+.hljs-strong,
+.hljs-emphasis {
+ color: #a8a8a2;
+}
+
+.hljs-bullet,
+.hljs-quote,
+.hljs-number,
+.hljs-regexp,
+.hljs-literal,
+.hljs-link {
+ color: #ae81ff;
+}
+
+.hljs-code,
+.hljs-title,
+.hljs-section,
+.hljs-selector-class {
+ color: #a6e22e;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-name,
+.hljs-attr {
+ color: #f92672;
+}
+
+.hljs-symbol,
+.hljs-attribute {
+ color: #66d9ef;
+}
+
+.hljs-params,
+.hljs-class .hljs-title {
+ color: #f8f8f2;
+}
+
+.hljs-string,
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-selector-id,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-variable {
+ color: #e6db74;
+}
+
+.hljs-comment,
+.hljs-deletion,
+.hljs-meta {
+ color: #75715e;
+}
diff --git a/lib/highlight/styles/monokai.css b/lib/highlight/styles/monokai.css
new file mode 100644
index 000000000..775d53f91
--- /dev/null
+++ b/lib/highlight/styles/monokai.css
@@ -0,0 +1,70 @@
+/*
+Monokai style - ported by Luigi Maselli - http://grigio.org
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #272822; color: #ddd;
+}
+
+.hljs-tag,
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-strong,
+.hljs-name {
+ color: #f92672;
+}
+
+.hljs-code {
+ color: #66d9ef;
+}
+
+.hljs-class .hljs-title {
+ color: white;
+}
+
+.hljs-attribute,
+.hljs-symbol,
+.hljs-regexp,
+.hljs-link {
+ color: #bf79db;
+}
+
+.hljs-string,
+.hljs-bullet,
+.hljs-subst,
+.hljs-title,
+.hljs-section,
+.hljs-emphasis,
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #a6e22e;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-deletion,
+.hljs-meta {
+ color: #75715e;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-doctag,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-selector-id {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/obsidian.css b/lib/highlight/styles/obsidian.css
new file mode 100644
index 000000000..356630fa2
--- /dev/null
+++ b/lib/highlight/styles/obsidian.css
@@ -0,0 +1,88 @@
+/**
+ * Obsidian style
+ * ported by Alexander Marenin (http://github.com/ioncreature)
+ */
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #282b2e;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-selector-id {
+ color: #93c763;
+}
+
+.hljs-number {
+ color: #ffcd22;
+}
+
+.hljs {
+ color: #e0e2e4;
+}
+
+.hljs-attribute {
+ color: #668bb0;
+}
+
+.hljs-code,
+.hljs-class .hljs-title,
+.hljs-section {
+ color: white;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #d39745;
+}
+
+.hljs-meta {
+ color: #557182;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-bullet,
+.hljs-subst,
+.hljs-emphasis,
+.hljs-type,
+.hljs-built_in,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable {
+ color: #8cbbad;
+}
+
+.hljs-string,
+.hljs-symbol {
+ color: #ec7600;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-deletion {
+ color: #818e96;
+}
+
+.hljs-selector-class {
+ color: #A082BD
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-doctag,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/ocean.css b/lib/highlight/styles/ocean.css
new file mode 100644
index 000000000..5901581b4
--- /dev/null
+++ b/lib/highlight/styles/ocean.css
@@ -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;
+}
diff --git a/lib/highlight/styles/paraiso-dark.css b/lib/highlight/styles/paraiso-dark.css
new file mode 100644
index 000000000..e7292401c
--- /dev/null
+++ b/lib/highlight/styles/paraiso-dark.css
@@ -0,0 +1,72 @@
+/*
+ Paraíso (dark)
+ Created by Jan T. Sott (http://github.com/idleberg)
+ Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+*/
+
+/* Paraíso Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #8d8687;
+}
+
+/* Paraíso Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-link,
+.hljs-meta {
+ color: #ef6155;
+}
+
+/* Paraíso Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-deletion {
+ color: #f99b15;
+}
+
+/* Paraíso Yellow */
+.hljs-title,
+.hljs-section,
+.hljs-attribute {
+ color: #fec418;
+}
+
+/* Paraíso Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #48b685;
+}
+
+/* Paraíso Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #815ba4;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #2f1e2e;
+ color: #a39e9b;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/paraiso-light.css b/lib/highlight/styles/paraiso-light.css
new file mode 100644
index 000000000..944857cd8
--- /dev/null
+++ b/lib/highlight/styles/paraiso-light.css
@@ -0,0 +1,72 @@
+/*
+ Paraíso (light)
+ Created by Jan T. Sott (http://github.com/idleberg)
+ Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+*/
+
+/* Paraíso Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #776e71;
+}
+
+/* Paraíso Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-link,
+.hljs-meta {
+ color: #ef6155;
+}
+
+/* Paraíso Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-deletion {
+ color: #f99b15;
+}
+
+/* Paraíso Yellow */
+.hljs-title,
+.hljs-section,
+.hljs-attribute {
+ color: #fec418;
+}
+
+/* Paraíso Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #48b685;
+}
+
+/* Paraíso Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #815ba4;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #e7e9db;
+ color: #4f424c;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/pojoaque.css b/lib/highlight/styles/pojoaque.css
new file mode 100644
index 000000000..2e07847b2
--- /dev/null
+++ b/lib/highlight/styles/pojoaque.css
@@ -0,0 +1,83 @@
+/*
+
+Pojoaque Style by Jason Tate
+http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html
+Based on Solarized Style from http://ethanschoonover.com/solarized
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #dccf8f;
+ background: url(./pojoaque.jpg) repeat scroll left top #181914;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #586e75;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-addition {
+ color: #b64926;
+}
+
+.hljs-number,
+.hljs-string,
+.hljs-doctag,
+.hljs-regexp {
+ color: #468966;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-built_in,
+.hljs-name {
+ color: #ffb03b;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-class .hljs-title,
+.hljs-type,
+.hljs-tag {
+ color: #b58900;
+}
+
+.hljs-attribute {
+ color: #b89859;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link,
+.hljs-subst,
+.hljs-meta {
+ color: #cb4b16;
+}
+
+.hljs-deletion {
+ color: #dc322f;
+}
+
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #d3a60c;
+}
+
+.hljs-formula {
+ background: #073642;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/pojoaque.jpg b/lib/highlight/styles/pojoaque.jpg
new file mode 100644
index 000000000..9c07d4ab4
Binary files /dev/null and b/lib/highlight/styles/pojoaque.jpg differ
diff --git a/lib/highlight/styles/purebasic.css b/lib/highlight/styles/purebasic.css
new file mode 100644
index 000000000..5ce9b9e07
--- /dev/null
+++ b/lib/highlight/styles/purebasic.css
@@ -0,0 +1,96 @@
+/*
+
+PureBASIC native IDE style ( version 1.0 - April 2016 )
+
+by Tristano Ajmone
+
+Public Domain
+
+NOTE_1: PureBASIC code syntax highlighting only applies the following classes:
+ .hljs-comment
+ .hljs-function
+ .hljs-keywords
+ .hljs-string
+ .hljs-symbol
+
+ Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style.
+ If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by
+ a "--- used for PureBASIC ... ---" comment on same line.
+
+NOTE_2: Color names provided in comments were derived using "Name that Color" online tool:
+ http://chir.ag/projects/name-that-color
+*/
+
+.hljs { /* Common set of rules required by highlight.js (don'r remove!) */
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #FFFFDF; /* Half and Half (approx.) */
+/* --- Uncomment to add PureBASIC native IDE styled font!
+ font-family: Consolas;
+*/
+}
+
+.hljs, /* --- used for PureBASIC base color --- */
+.hljs-type, /* --- used for PureBASIC Procedures return type --- */
+.hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */
+.hljs-name,
+.hljs-number,
+.hljs-attr,
+.hljs-params,
+.hljs-subst {
+ color: #000000; /* Black */
+}
+
+.hljs-comment, /* --- used for PureBASIC Comments --- */
+.hljs-regexp,
+.hljs-section,
+.hljs-selector-pseudo,
+.hljs-addition {
+ color: #00AAAA; /* Persian Green (approx.) */
+}
+
+.hljs-title, /* --- used for PureBASIC Procedures Names --- */
+.hljs-tag,
+.hljs-variable,
+.hljs-code {
+ color: #006666; /* Blue Stone (approx.) */
+}
+
+.hljs-keyword, /* --- used for PureBASIC Keywords --- */
+.hljs-class,
+.hljs-meta-keyword,
+.hljs-selector-class,
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #006666; /* Blue Stone (approx.) */
+ font-weight: bold;
+}
+
+.hljs-string, /* --- used for PureBASIC Strings --- */
+.hljs-selector-attr {
+ color: #0080FF; /* Azure Radiance (approx.) */
+}
+
+.hljs-symbol, /* --- used for PureBASIC Constants --- */
+.hljs-link,
+.hljs-deletion,
+.hljs-attribute {
+ color: #924B72; /* Cannon Pink (approx.) */
+}
+
+.hljs-meta,
+.hljs-literal,
+.hljs-selector-id {
+ color: #924B72; /* Cannon Pink (approx.) */
+ font-weight: bold;
+}
+
+.hljs-strong,
+.hljs-name {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/qtcreator_dark.css b/lib/highlight/styles/qtcreator_dark.css
new file mode 100644
index 000000000..7aa56a365
--- /dev/null
+++ b/lib/highlight/styles/qtcreator_dark.css
@@ -0,0 +1,83 @@
+/*
+
+Qt Creator dark color scheme
+
+*/
+
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #000000;
+}
+
+.hljs,
+.hljs-subst,
+.hljs-tag,
+.hljs-title {
+ color: #aaaaaa;
+}
+
+.hljs-strong,
+.hljs-emphasis {
+ color: #a8a8a2;
+}
+
+.hljs-bullet,
+.hljs-quote,
+.hljs-number,
+.hljs-regexp,
+.hljs-literal {
+ color: #ff55ff;
+}
+
+.hljs-code
+.hljs-selector-class {
+ color: #aaaaff;
+}
+
+.hljs-emphasis,
+.hljs-stronge,
+.hljs-type {
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-function,
+.hljs-section,
+.hljs-symbol,
+.hljs-name {
+ color: #ffff55;
+}
+
+.hljs-attribute {
+ color: #ff5555;
+}
+
+.hljs-variable,
+.hljs-params,
+.hljs-class .hljs-title {
+ color: #8888ff;
+}
+
+.hljs-string,
+.hljs-selector-id,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-addition,
+.hljs-link {
+ color: #ff55ff;
+}
+
+.hljs-comment,
+.hljs-meta,
+.hljs-deletion {
+ color: #55ffff;
+}
diff --git a/lib/highlight/styles/qtcreator_light.css b/lib/highlight/styles/qtcreator_light.css
new file mode 100644
index 000000000..1efa2c660
--- /dev/null
+++ b/lib/highlight/styles/qtcreator_light.css
@@ -0,0 +1,83 @@
+/*
+
+Qt Creator light color scheme
+
+*/
+
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #ffffff;
+}
+
+.hljs,
+.hljs-subst,
+.hljs-tag,
+.hljs-title {
+ color: #000000;
+}
+
+.hljs-strong,
+.hljs-emphasis {
+ color: #000000;
+}
+
+.hljs-bullet,
+.hljs-quote,
+.hljs-number,
+.hljs-regexp,
+.hljs-literal {
+ color: #000080;
+}
+
+.hljs-code
+.hljs-selector-class {
+ color: #800080;
+}
+
+.hljs-emphasis,
+.hljs-stronge,
+.hljs-type {
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-function,
+.hljs-section,
+.hljs-symbol,
+.hljs-name {
+ color: #808000;
+}
+
+.hljs-attribute {
+ color: #800000;
+}
+
+.hljs-variable,
+.hljs-params,
+.hljs-class .hljs-title {
+ color: #0055AF;
+}
+
+.hljs-string,
+.hljs-selector-id,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-type,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-addition,
+.hljs-link {
+ color: #008000;
+}
+
+.hljs-comment,
+.hljs-meta,
+.hljs-deletion {
+ color: #008000;
+}
diff --git a/lib/highlight/styles/railscasts.css b/lib/highlight/styles/railscasts.css
new file mode 100644
index 000000000..008cdc5bf
--- /dev/null
+++ b/lib/highlight/styles/railscasts.css
@@ -0,0 +1,106 @@
+/*
+
+Railscasts-like style (c) Visoft, Inc. (Damien White)
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #232323;
+ color: #e6e1dc;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #bc9458;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #c26230;
+}
+
+.hljs-string,
+.hljs-number,
+.hljs-regexp,
+.hljs-variable,
+.hljs-template-variable {
+ color: #a5c261;
+}
+
+.hljs-subst {
+ color: #519f50;
+}
+
+.hljs-tag,
+.hljs-name {
+ color: #e8bf6a;
+}
+
+.hljs-type {
+ color: #da4939;
+}
+
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-attr,
+.hljs-link {
+ color: #6d9cbe;
+}
+
+.hljs-params {
+ color: #d0d0ff;
+}
+
+.hljs-attribute {
+ color: #cda869;
+}
+
+.hljs-meta {
+ color: #9b859d;
+}
+
+.hljs-title,
+.hljs-section {
+ color: #ffc66d;
+}
+
+.hljs-addition {
+ background-color: #144212;
+ color: #e6e1dc;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #600;
+ color: #e6e1dc;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-selector-class {
+ color: #9b703f;
+}
+
+.hljs-selector-id {
+ color: #8b98ab;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
diff --git a/lib/highlight/styles/rainbow.css b/lib/highlight/styles/rainbow.css
new file mode 100644
index 000000000..905eb8ef1
--- /dev/null
+++ b/lib/highlight/styles/rainbow.css
@@ -0,0 +1,85 @@
+/*
+
+Style with support for rainbow parens
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #474949;
+ color: #d1d9e1;
+}
+
+
+.hljs-comment,
+.hljs-quote {
+ color: #969896;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-type,
+.hljs-addition {
+ color: #cc99cc;
+}
+
+.hljs-number,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #f99157;
+}
+
+.hljs-string,
+.hljs-doctag,
+.hljs-regexp {
+ color: #8abeb7;
+}
+
+.hljs-title,
+.hljs-name,
+.hljs-section,
+.hljs-built_in {
+ color: #b5bd68;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-selector-id,
+.hljs-class .hljs-title {
+ color: #ffcc66;
+}
+
+.hljs-section,
+.hljs-name,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-subst,
+.hljs-meta,
+.hljs-link {
+ color: #f99157;
+}
+
+.hljs-deletion {
+ color: #dc322f;
+}
+
+.hljs-formula {
+ background: #eee8d5;
+}
+
+.hljs-attr,
+.hljs-attribute {
+ color: #81a2be;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/routeros.css b/lib/highlight/styles/routeros.css
new file mode 100644
index 000000000..ebe23990d
--- /dev/null
+++ b/lib/highlight/styles/routeros.css
@@ -0,0 +1,108 @@
+/*
+
+ highlight.js style for Microtik RouterOS script
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #F0F0F0;
+}
+
+/* Base color: saturation 0; */
+
+.hljs,
+.hljs-subst {
+ color: #444;
+}
+
+.hljs-comment {
+ color: #888888;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-meta-keyword,
+.hljs-doctag,
+.hljs-name {
+ font-weight: bold;
+}
+
+.hljs-attribute {
+ color: #0E9A00;
+}
+
+.hljs-function {
+ color: #99069A;
+}
+
+.hljs-builtin-name {
+ color: #99069A;
+}
+
+/* User color: hue: 0 */
+
+.hljs-type,
+.hljs-string,
+.hljs-number,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-quote,
+.hljs-template-tag,
+.hljs-deletion {
+ color: #880000;
+}
+
+.hljs-title,
+.hljs-section {
+ color: #880000;
+ font-weight: bold;
+}
+
+.hljs-regexp,
+.hljs-symbol,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-link,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #BC6060;
+}
+
+
+/* Language color: hue: 90; */
+
+.hljs-literal {
+ color: #78A960;
+}
+
+.hljs-built_in,
+.hljs-bullet,
+.hljs-code,
+.hljs-addition {
+ color: #0C9A9A;
+}
+
+
+/* Meta color: hue: 200 */
+
+.hljs-meta {
+ color: #1f7199;
+}
+
+.hljs-meta-string {
+ color: #4d99bf;
+}
+
+
+/* Misc effects */
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/school-book.css b/lib/highlight/styles/school-book.css
new file mode 100644
index 000000000..964b51d84
--- /dev/null
+++ b/lib/highlight/styles/school-book.css
@@ -0,0 +1,72 @@
+/*
+
+School Book style from goldblog.com.ua (c) Zaripov Yura
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 15px 0.5em 0.5em 30px;
+ font-size: 11px;
+ line-height:16px;
+}
+
+pre{
+ background:#f6f6ae url(./school-book.png);
+ border-top: solid 2px #d2e8b9;
+ border-bottom: solid 1px #d2e8b9;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal {
+ color:#005599;
+ font-weight:bold;
+}
+
+.hljs,
+.hljs-subst {
+ color: #3e5915;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-addition,
+.hljs-variable,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-link {
+ color: #2c009f;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-deletion,
+.hljs-meta {
+ color: #e60415;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-doctag,
+.hljs-title,
+.hljs-section,
+.hljs-type,
+.hljs-name,
+.hljs-selector-id,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/school-book.png b/lib/highlight/styles/school-book.png
new file mode 100644
index 000000000..956e9790a
Binary files /dev/null and b/lib/highlight/styles/school-book.png differ
diff --git a/lib/highlight/styles/solarized-dark.css b/lib/highlight/styles/solarized-dark.css
new file mode 100644
index 000000000..b4c0da1f7
--- /dev/null
+++ b/lib/highlight/styles/solarized-dark.css
@@ -0,0 +1,84 @@
+/*
+
+Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #002b36;
+ color: #839496;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #586e75;
+}
+
+/* Solarized Green */
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-addition {
+ color: #859900;
+}
+
+/* Solarized Cyan */
+.hljs-number,
+.hljs-string,
+.hljs-meta .hljs-meta-string,
+.hljs-literal,
+.hljs-doctag,
+.hljs-regexp {
+ color: #2aa198;
+}
+
+/* Solarized Blue */
+.hljs-title,
+.hljs-section,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #268bd2;
+}
+
+/* Solarized Yellow */
+.hljs-attribute,
+.hljs-attr,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-class .hljs-title,
+.hljs-type {
+ color: #b58900;
+}
+
+/* Solarized Orange */
+.hljs-symbol,
+.hljs-bullet,
+.hljs-subst,
+.hljs-meta,
+.hljs-meta .hljs-keyword,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-link {
+ color: #cb4b16;
+}
+
+/* Solarized Red */
+.hljs-built_in,
+.hljs-deletion {
+ color: #dc322f;
+}
+
+.hljs-formula {
+ background: #073642;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/solarized-light.css b/lib/highlight/styles/solarized-light.css
new file mode 100644
index 000000000..fdcfcc72c
--- /dev/null
+++ b/lib/highlight/styles/solarized-light.css
@@ -0,0 +1,84 @@
+/*
+
+Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #fdf6e3;
+ color: #657b83;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #93a1a1;
+}
+
+/* Solarized Green */
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-addition {
+ color: #859900;
+}
+
+/* Solarized Cyan */
+.hljs-number,
+.hljs-string,
+.hljs-meta .hljs-meta-string,
+.hljs-literal,
+.hljs-doctag,
+.hljs-regexp {
+ color: #2aa198;
+}
+
+/* Solarized Blue */
+.hljs-title,
+.hljs-section,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #268bd2;
+}
+
+/* Solarized Yellow */
+.hljs-attribute,
+.hljs-attr,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-class .hljs-title,
+.hljs-type {
+ color: #b58900;
+}
+
+/* Solarized Orange */
+.hljs-symbol,
+.hljs-bullet,
+.hljs-subst,
+.hljs-meta,
+.hljs-meta .hljs-keyword,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-link {
+ color: #cb4b16;
+}
+
+/* Solarized Red */
+.hljs-built_in,
+.hljs-deletion {
+ color: #dc322f;
+}
+
+.hljs-formula {
+ background: #eee8d5;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/sunburst.css b/lib/highlight/styles/sunburst.css
new file mode 100644
index 000000000..f56dd5e9b
--- /dev/null
+++ b/lib/highlight/styles/sunburst.css
@@ -0,0 +1,102 @@
+/*
+
+Sunburst-like style (c) Vasily Polovnyov
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #000;
+ color: #f8f8f8;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #aeaeae;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #e28964;
+}
+
+.hljs-string {
+ color: #65b042;
+}
+
+.hljs-subst {
+ color: #daefa3;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #e9c062;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-tag,
+.hljs-name {
+ color: #89bdff;
+}
+
+.hljs-class .hljs-title,
+.hljs-doctag {
+ text-decoration: underline;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-number {
+ color: #3387cc;
+}
+
+.hljs-params,
+.hljs-variable,
+.hljs-template-variable {
+ color: #3e87e3;
+}
+
+.hljs-attribute {
+ color: #cda869;
+}
+
+.hljs-meta {
+ color: #8996a8;
+}
+
+.hljs-formula {
+ background-color: #0e2231;
+ color: #f8f8f8;
+ font-style: italic;
+}
+
+.hljs-addition {
+ background-color: #253b22;
+ color: #f8f8f8;
+}
+
+.hljs-deletion {
+ background-color: #420e09;
+ color: #f8f8f8;
+}
+
+.hljs-selector-class {
+ color: #9b703f;
+}
+
+.hljs-selector-id {
+ color: #8b98ab;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/tomorrow-night-blue.css b/lib/highlight/styles/tomorrow-night-blue.css
new file mode 100644
index 000000000..78e59cc8c
--- /dev/null
+++ b/lib/highlight/styles/tomorrow-night-blue.css
@@ -0,0 +1,75 @@
+/* Tomorrow Night Blue Theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+/* Original theme - https://github.com/chriskempson/tomorrow-theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+
+/* Tomorrow Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #7285b7;
+}
+
+/* Tomorrow Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #ff9da4;
+}
+
+/* Tomorrow Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #ffc58f;
+}
+
+/* Tomorrow Yellow */
+.hljs-attribute {
+ color: #ffeead;
+}
+
+/* Tomorrow Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #d1f1a9;
+}
+
+/* Tomorrow Blue */
+.hljs-title,
+.hljs-section {
+ color: #bbdaff;
+}
+
+/* Tomorrow Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #ebbbff;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #002451;
+ color: white;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/tomorrow-night-bright.css b/lib/highlight/styles/tomorrow-night-bright.css
new file mode 100644
index 000000000..e05af8ae2
--- /dev/null
+++ b/lib/highlight/styles/tomorrow-night-bright.css
@@ -0,0 +1,74 @@
+/* Tomorrow Night Bright Theme */
+/* Original theme - https://github.com/chriskempson/tomorrow-theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+
+/* Tomorrow Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #969896;
+}
+
+/* Tomorrow Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #d54e53;
+}
+
+/* Tomorrow Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #e78c45;
+}
+
+/* Tomorrow Yellow */
+.hljs-attribute {
+ color: #e7c547;
+}
+
+/* Tomorrow Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #b9ca4a;
+}
+
+/* Tomorrow Blue */
+.hljs-title,
+.hljs-section {
+ color: #7aa6da;
+}
+
+/* Tomorrow Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #c397d8;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: black;
+ color: #eaeaea;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/tomorrow-night-eighties.css b/lib/highlight/styles/tomorrow-night-eighties.css
new file mode 100644
index 000000000..08fd51c74
--- /dev/null
+++ b/lib/highlight/styles/tomorrow-night-eighties.css
@@ -0,0 +1,74 @@
+/* Tomorrow Night Eighties Theme */
+/* Original theme - https://github.com/chriskempson/tomorrow-theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+
+/* Tomorrow Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #999999;
+}
+
+/* Tomorrow Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #f2777a;
+}
+
+/* Tomorrow Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #f99157;
+}
+
+/* Tomorrow Yellow */
+.hljs-attribute {
+ color: #ffcc66;
+}
+
+/* Tomorrow Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #99cc99;
+}
+
+/* Tomorrow Blue */
+.hljs-title,
+.hljs-section {
+ color: #6699cc;
+}
+
+/* Tomorrow Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #cc99cc;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #2d2d2d;
+ color: #cccccc;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/tomorrow-night.css b/lib/highlight/styles/tomorrow-night.css
new file mode 100644
index 000000000..ddd270a4e
--- /dev/null
+++ b/lib/highlight/styles/tomorrow-night.css
@@ -0,0 +1,75 @@
+/* Tomorrow Night Theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+/* Original theme - https://github.com/chriskempson/tomorrow-theme */
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+
+/* Tomorrow Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #969896;
+}
+
+/* Tomorrow Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #cc6666;
+}
+
+/* Tomorrow Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #de935f;
+}
+
+/* Tomorrow Yellow */
+.hljs-attribute {
+ color: #f0c674;
+}
+
+/* Tomorrow Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #b5bd68;
+}
+
+/* Tomorrow Blue */
+.hljs-title,
+.hljs-section {
+ color: #81a2be;
+}
+
+/* Tomorrow Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #b294bb;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #1d1f21;
+ color: #c5c8c6;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/tomorrow.css b/lib/highlight/styles/tomorrow.css
new file mode 100644
index 000000000..026a62fe3
--- /dev/null
+++ b/lib/highlight/styles/tomorrow.css
@@ -0,0 +1,72 @@
+/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
+
+/* Tomorrow Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #8e908c;
+}
+
+/* Tomorrow Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #c82829;
+}
+
+/* Tomorrow Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #f5871f;
+}
+
+/* Tomorrow Yellow */
+.hljs-attribute {
+ color: #eab700;
+}
+
+/* Tomorrow Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #718c00;
+}
+
+/* Tomorrow Blue */
+.hljs-title,
+.hljs-section {
+ color: #4271ae;
+}
+
+/* Tomorrow Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #8959a8;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: white;
+ color: #4d4d4c;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/vs.css b/lib/highlight/styles/vs.css
new file mode 100644
index 000000000..c5d07d311
--- /dev/null
+++ b/lib/highlight/styles/vs.css
@@ -0,0 +1,68 @@
+/*
+
+Visual Studio-like style based on original C# coloring by Jason Diamond
+
+*/
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: white;
+ color: black;
+}
+
+.hljs-comment,
+.hljs-quote,
+.hljs-variable {
+ color: #008000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-built_in,
+.hljs-name,
+.hljs-tag {
+ color: #00f;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-section,
+.hljs-attribute,
+.hljs-literal,
+.hljs-template-tag,
+.hljs-template-variable,
+.hljs-type,
+.hljs-addition {
+ color: #a31515;
+}
+
+.hljs-deletion,
+.hljs-selector-attr,
+.hljs-selector-pseudo,
+.hljs-meta {
+ color: #2b91af;
+}
+
+.hljs-doctag {
+ color: #808080;
+}
+
+.hljs-attr {
+ color: #f00;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link {
+ color: #00b0e8;
+}
+
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/highlight/styles/vs2015.css b/lib/highlight/styles/vs2015.css
new file mode 100644
index 000000000..d1d9be3ca
--- /dev/null
+++ b/lib/highlight/styles/vs2015.css
@@ -0,0 +1,115 @@
+/*
+ * Visual Studio 2015 dark style
+ * Author: Nicolas LLOBERA
+ */
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #1E1E1E;
+ color: #DCDCDC;
+}
+
+.hljs-keyword,
+.hljs-literal,
+.hljs-symbol,
+.hljs-name {
+ color: #569CD6;
+}
+.hljs-link {
+ color: #569CD6;
+ text-decoration: underline;
+}
+
+.hljs-built_in,
+.hljs-type {
+ color: #4EC9B0;
+}
+
+.hljs-number,
+.hljs-class {
+ color: #B8D7A3;
+}
+
+.hljs-string,
+.hljs-meta-string {
+ color: #D69D85;
+}
+
+.hljs-regexp,
+.hljs-template-tag {
+ color: #9A5334;
+}
+
+.hljs-subst,
+.hljs-function,
+.hljs-title,
+.hljs-params,
+.hljs-formula {
+ color: #DCDCDC;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #57A64A;
+ font-style: italic;
+}
+
+.hljs-doctag {
+ color: #608B4E;
+}
+
+.hljs-meta,
+.hljs-meta-keyword,
+.hljs-tag {
+ color: #9B9B9B;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #BD63C5;
+}
+
+.hljs-attr,
+.hljs-attribute,
+.hljs-builtin-name {
+ color: #9CDCFE;
+}
+
+.hljs-section {
+ color: gold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+/*.hljs-code {
+ font-family:'Monospace';
+}*/
+
+.hljs-bullet,
+.hljs-selector-tag,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #D7BA7D;
+}
+
+.hljs-addition {
+ background-color: #144212;
+ display: inline-block;
+ width: 100%;
+}
+
+.hljs-deletion {
+ background-color: #600;
+ display: inline-block;
+ width: 100%;
+}
diff --git a/lib/highlight/styles/xcode.css b/lib/highlight/styles/xcode.css
new file mode 100644
index 000000000..43dddad84
--- /dev/null
+++ b/lib/highlight/styles/xcode.css
@@ -0,0 +1,93 @@
+/*
+
+XCode style (c) Angel Garcia
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #fff;
+ color: black;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #006a00;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal {
+ color: #aa0d91;
+}
+
+.hljs-name {
+ color: #008;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #660;
+}
+
+.hljs-string {
+ color: #c41a16;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #080;
+}
+
+.hljs-title,
+.hljs-tag,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-number,
+.hljs-meta {
+ color: #1c00cf;
+}
+
+.hljs-section,
+.hljs-class .hljs-title,
+.hljs-type,
+.hljs-attr,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-params {
+ color: #5c2699;
+}
+
+.hljs-attribute,
+.hljs-subst {
+ color: #000;
+}
+
+.hljs-formula {
+ background-color: #eee;
+ font-style: italic;
+}
+
+.hljs-addition {
+ background-color: #baeeba;
+}
+
+.hljs-deletion {
+ background-color: #ffc8bd;
+}
+
+.hljs-selector-id,
+.hljs-selector-class {
+ color: #9b703f;
+}
+
+.hljs-doctag,
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
diff --git a/lib/highlight/styles/xt256.css b/lib/highlight/styles/xt256.css
new file mode 100644
index 000000000..58df82cb7
--- /dev/null
+++ b/lib/highlight/styles/xt256.css
@@ -0,0 +1,92 @@
+
+/*
+ xt256.css
+
+ Contact: initbar [at] protonmail [dot] ch
+ : github.com/initbar
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ color: #eaeaea;
+ background: #000;
+ padding: 0.5;
+}
+
+.hljs-subst {
+ color: #eaeaea;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+.hljs-builtin-name,
+.hljs-type {
+ color: #eaeaea;
+}
+
+.hljs-params {
+ color: #da0000;
+}
+
+.hljs-literal,
+.hljs-number,
+.hljs-name {
+ color: #ff0000;
+ font-weight: bolder;
+}
+
+.hljs-comment {
+ color: #969896;
+}
+
+.hljs-selector-id,
+.hljs-quote {
+ color: #00ffff;
+}
+
+.hljs-template-variable,
+.hljs-variable,
+.hljs-title {
+ color: #00ffff;
+ font-weight: bold;
+}
+
+.hljs-selector-class,
+.hljs-keyword,
+.hljs-symbol {
+ color: #fff000;
+}
+
+.hljs-string,
+.hljs-bullet {
+ color: #00ff00;
+}
+
+.hljs-tag,
+.hljs-section {
+ color: #000fff;
+}
+
+.hljs-selector-tag {
+ color: #000fff;
+ font-weight: bold;
+}
+
+.hljs-attribute,
+.hljs-built_in,
+.hljs-regexp,
+.hljs-link {
+ color: #ff00ff;
+}
+
+.hljs-meta {
+ color: #fff;
+ font-weight: bolder;
+}
diff --git a/lib/highlight/styles/zenburn.css b/lib/highlight/styles/zenburn.css
new file mode 100644
index 000000000..07be50201
--- /dev/null
+++ b/lib/highlight/styles/zenburn.css
@@ -0,0 +1,80 @@
+/*
+
+Zenburn style from voldmar.ru (c) Vladimir Epifanov
+based on dark.css by Ivan Sagalaev
+
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ background: #3f3f3f;
+ color: #dcdcdc;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-tag {
+ color: #e3ceab;
+}
+
+.hljs-template-tag {
+ color: #dcdcdc;
+}
+
+.hljs-number {
+ color: #8cd0d3;
+}
+
+.hljs-variable,
+.hljs-template-variable,
+.hljs-attribute {
+ color: #efdcbc;
+}
+
+.hljs-literal {
+ color: #efefaf;
+}
+
+.hljs-subst {
+ color: #8f8f8f;
+}
+
+.hljs-title,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-section,
+.hljs-type {
+ color: #efef8f;
+}
+
+.hljs-symbol,
+.hljs-bullet,
+.hljs-link {
+ color: #dca3a3;
+}
+
+.hljs-deletion,
+.hljs-string,
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #cc9393;
+}
+
+.hljs-addition,
+.hljs-comment,
+.hljs-quote,
+.hljs-meta {
+ color: #7f9f7f;
+}
+
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/lib/tabcollapse/bootstrap-tabcollapse.js b/lib/tabcollapse/bootstrap-tabcollapse.js
new file mode 100644
index 000000000..76e12791a
--- /dev/null
+++ b/lib/tabcollapse/bootstrap-tabcollapse.js
@@ -0,0 +1,237 @@
+!function ($) {
+
+ "use strict";
+
+ // TABCOLLAPSE CLASS DEFINITION
+ // ======================
+
+ var TabCollapse = function (el, options) {
+ this.options = options;
+ this.$tabs = $(el);
+
+ this._accordionVisible = false; //content is attached to tabs at first
+ this._initAccordion();
+ this._checkStateOnResize();
+
+
+ // checkState() has gone to setTimeout for making it possible to attach listeners to
+ // shown-accordion.bs.tabcollapse event on page load.
+ // See https://github.com/flatlogic/bootstrap-tabcollapse/issues/23
+ var that = this;
+ setTimeout(function() {
+ that.checkState();
+ }, 0);
+ };
+
+ TabCollapse.DEFAULTS = {
+ accordionClass: 'visible-xs',
+ tabsClass: 'hidden-xs',
+ accordionTemplate: function(heading, groupId, parentId, active) {
+ return '' +
+ ' ' +
+ ' ' +
+ '
' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ''
+
+ }
+ };
+
+ TabCollapse.prototype.checkState = function(){
+ if (this.$tabs.is(':visible') && this._accordionVisible){
+ this.showTabs();
+ this._accordionVisible = false;
+ } else if (this.$accordion.is(':visible') && !this._accordionVisible){
+ this.showAccordion();
+ this._accordionVisible = true;
+ }
+ };
+
+ TabCollapse.prototype.showTabs = function(){
+ var view = this;
+ this.$tabs.trigger($.Event('show-tabs.bs.tabcollapse'));
+
+ var $panelHeadings = this.$accordion.find('.js-tabcollapse-panel-heading').detach();
+
+ $panelHeadings.each(function() {
+ var $panelHeading = $(this),
+ $parentLi = $panelHeading.data('bs.tabcollapse.parentLi');
+
+ var $oldHeading = view._panelHeadingToTabHeading($panelHeading);
+
+ $parentLi.removeClass('active');
+ if ($parentLi.parent().hasClass('dropdown-menu') && !$parentLi.siblings('li').hasClass('active')) {
+ $parentLi.parent().parent().removeClass('active');
+ }
+
+ if (!$oldHeading.hasClass('collapsed')) {
+ $parentLi.addClass('active');
+ if ($parentLi.parent().hasClass('dropdown-menu')) {
+ $parentLi.parent().parent().addClass('active');
+ }
+ } else {
+ $oldHeading.removeClass('collapsed');
+ }
+
+ $parentLi.append($panelHeading);
+ });
+
+ if (!$('li').hasClass('active')) {
+ $('li').first().addClass('active')
+ }
+
+ var $panelBodies = this.$accordion.find('.js-tabcollapse-panel-body');
+ $panelBodies.each(function(){
+ var $panelBody = $(this),
+ $tabPane = $panelBody.data('bs.tabcollapse.tabpane');
+ $tabPane.append($panelBody.contents().detach());
+ });
+ this.$accordion.html('');
+
+ if(this.options.updateLinks) {
+ var $tabContents = this.getTabContentElement();
+ $tabContents.find('[data-toggle-was="tab"], [data-toggle-was="pill"]').each(function() {
+ var $el = $(this);
+ var href = $el.attr('href').replace(/-collapse$/g, '');
+ $el.attr({
+ 'data-toggle': $el.attr('data-toggle-was'),
+ 'data-toggle-was': '',
+ 'data-parent': '',
+ href: href
+ });
+ });
+ }
+
+ this.$tabs.trigger($.Event('shown-tabs.bs.tabcollapse'));
+ };
+
+ TabCollapse.prototype.getTabContentElement = function(){
+ var $tabContents = $(this.options.tabContentSelector);
+ if($tabContents.length === 0) {
+ $tabContents = this.$tabs.siblings('.tab-content');
+ }
+ return $tabContents;
+ };
+
+ TabCollapse.prototype.showAccordion = function(){
+ this.$tabs.trigger($.Event('show-accordion.bs.tabcollapse'));
+
+ var $headings = this.$tabs.find('li:not(.dropdown) [data-toggle="tab"], li:not(.dropdown) [data-toggle="pill"]'),
+ view = this;
+ $headings.each(function(){
+ var $heading = $(this),
+ $parentLi = $heading.parent();
+ $heading.data('bs.tabcollapse.parentLi', $parentLi);
+ view.$accordion.append(view._createAccordionGroup(view.$accordion.attr('id'), $heading.detach()));
+ });
+
+ if(this.options.updateLinks) {
+ var parentId = this.$accordion.attr('id');
+ var $selector = this.$accordion.find('.js-tabcollapse-panel-body');
+ $selector.find('[data-toggle="tab"], [data-toggle="pill"]').each(function() {
+ var $el = $(this);
+ var href = $el.attr('href') + '-collapse';
+ $el.attr({
+ 'data-toggle-was': $el.attr('data-toggle'),
+ 'data-toggle': 'collapse',
+ 'data-parent': '#' + parentId,
+ href: href
+ });
+ });
+ }
+
+ this.$tabs.trigger($.Event('shown-accordion.bs.tabcollapse'));
+ };
+
+ TabCollapse.prototype._panelHeadingToTabHeading = function($heading) {
+ var href = $heading.attr('href').replace(/-collapse$/g, '');
+ $heading.attr({
+ 'data-toggle': 'tab',
+ 'href': href,
+ 'data-parent': ''
+ });
+ return $heading;
+ };
+
+ TabCollapse.prototype._tabHeadingToPanelHeading = function($heading, groupId, parentId, active) {
+ $heading.addClass('js-tabcollapse-panel-heading ' + (active ? '' : 'collapsed'));
+ $heading.attr({
+ 'data-toggle': 'collapse',
+ 'data-parent': '#' + parentId,
+ 'href': '#' + groupId
+ });
+ return $heading;
+ };
+
+ TabCollapse.prototype._checkStateOnResize = function(){
+ var view = this;
+ $(window).resize(function(){
+ clearTimeout(view._resizeTimeout);
+ view._resizeTimeout = setTimeout(function(){
+ view.checkState();
+ }, 100);
+ });
+ };
+
+
+ TabCollapse.prototype._initAccordion = function(){
+ var randomString = function() {
+ var result = "",
+ possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ for( var i=0; i < 5; i++ ) {
+ result += possible.charAt(Math.floor(Math.random() * possible.length));
+ }
+ return result;
+ };
+
+ var srcId = this.$tabs.attr('id'),
+ accordionId = (srcId ? srcId : randomString()) + '-accordion';
+
+ this.$accordion = $('');
+ this.$tabs.after(this.$accordion);
+ this.$tabs.addClass(this.options.tabsClass);
+ this.getTabContentElement().addClass(this.options.tabsClass);
+ };
+
+ TabCollapse.prototype._createAccordionGroup = function(parentId, $heading){
+ var tabSelector = $heading.attr('data-target'),
+ active = $heading.data('bs.tabcollapse.parentLi').is('.active');
+
+ if (!tabSelector) {
+ tabSelector = $heading.attr('href');
+ tabSelector = tabSelector && tabSelector.replace(/.*(?=#[^\s]*$)/, ''); //strip for ie7
+ }
+
+ var $tabPane = $(tabSelector),
+ groupId = $tabPane.attr('id') + '-collapse',
+ $panel = $(this.options.accordionTemplate($heading, groupId, parentId, active));
+ $panel.find('.panel-heading > .panel-title').append(this._tabHeadingToPanelHeading($heading, groupId, parentId, active));
+ $panel.find('.panel-body').append($tabPane.contents().detach())
+ .data('bs.tabcollapse.tabpane', $tabPane);
+
+ return $panel;
+ };
+
+
+
+ // TABCOLLAPSE PLUGIN DEFINITION
+ // =======================
+
+ $.fn.tabCollapse = function (option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data('bs.tabcollapse');
+ var options = $.extend({}, TabCollapse.DEFAULTS, $this.data(), typeof option === 'object' && option);
+
+ if (!data) $this.data('bs.tabcollapse', new TabCollapse(this, options));
+ });
+ };
+
+ $.fn.tabCollapse.Constructor = TabCollapse;
+
+
+}(window.jQuery);
diff --git a/phpcs.xml b/phpcs.xml
deleted file mode 100644
index 016503f46..000000000
--- a/phpcs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- The Phpfastcache Coding Standards
-
-
-
-
-
-
- tests/*
- bin/*
- docs/*
- vendor/*
-
-
-
-
-
-
-
-
diff --git a/phpmd.xml b/phpmd.xml
deleted file mode 100644
index ec3cf8754..000000000
--- a/phpmd.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/phpstan.neon b/phpstan.neon
deleted file mode 100644
index 773bdfb27..000000000
--- a/phpstan.neon
+++ /dev/null
@@ -1,24 +0,0 @@
-###################################################
-# Complete PHPSTAN configuration for Travis CI
-###################################################
-parameters:
- treatPhpDocTypesAsCertain: false
- ignoreErrors:
- # (Really) Annoying PHPDoc tag issues...
- - '#PHPDoc tag @(.*)#'
- # Phpstan is not able to know the magic of Ssdb __call() implementation
- - '#Call to an undefined method phpssdb(.*)#'
-
- # Phpstan not differencing couchbase and couchbase_v3 stubs from jetbrains/phpstorm-stubs
- -
- message: '#(Method|Class) Couchbase(.*)#'
- path: lib/Phpfastcache/Drivers/Couchbasev3/Driver.php
-
- # See https://github.com/phpstan/phpstan/issues/10315
- -
- message: '#Dead catch - Phpfastcache\\Exceptions\\PhpfastcacheUnsupportedMethodException is never thrown in the try block.#'
- path: lib/Phpfastcache/Core/Pool/CacheItemPoolTrait.php
- # See https://github.com/phpstan/phpstan/issues/10316
- -
- message: '#(.*)RedisCluster(.*)#'
- path: lib/Phpfastcache/Drivers/Rediscluster/Driver.php
diff --git a/phpstan_lite.neon b/phpstan_lite.neon
deleted file mode 100644
index 589d98f1b..000000000
--- a/phpstan_lite.neon
+++ /dev/null
@@ -1,11 +0,0 @@
-###################################################
-# Lite PHPSTAN configuration for Github CI
-# or any Phpfastcache contributing user
-###################################################
-parameters:
- treatPhpDocTypesAsCertain: false
- excludePaths:
- - lib/Phpfastcache/Drivers/*/Driver.php
- - lib/Phpfastcache/Drivers/*/Config.php
- ignoreErrors:
- - '#PHPDoc tag @(.*)#' # (Really) Annoying PHPDoc tag issues...
diff --git a/quality.bat b/quality.bat
deleted file mode 100644
index bb5b909bb..000000000
--- a/quality.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@echo off
-setlocal
-
-call vendor\bin\phpcbf lib/ --report=summary
-call vendor\bin\phpcs lib/ --report=summary
-call vendor\bin\phpmd lib/ ansi phpmd.xml
-call vendor\bin\phpstan analyse lib/ -l 6 -c phpstan.neon 2>&1
-
-endlocal
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 000000000..f1ca65ed2
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /ajax/
+
+Sitemap: http://www.phpfastcache.com/sitemap.xml
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 000000000..de8c52298
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,48 @@
+
+
+
+ http://www.phpfastcache.com/
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 1.00
+
+
+ http://www.phpfastcache.com/#readme
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
+ http://www.phpfastcache.com/#config-options
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
+ http://www.phpfastcache.com/#events
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
+ http://www.phpfastcache.com/#authors
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
+ http://www.phpfastcache.com/#credits
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
+ http://www.phpfastcache.com/#licence
+ 2017-11-01T13:08:01+00:00
+ weekly
+ 0.90
+
+
\ No newline at end of file
diff --git a/tests/RunTests.php b/tests/RunTests.php
deleted file mode 100644
index 224b1006f..000000000
--- a/tests/RunTests.php
+++ /dev/null
@@ -1,89 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-declare(strict_types=1);
-require __DIR__ . '/../vendor/autoload.php';
-
-define('PFC_TEST_DIR', \realpath(__DIR__));
-
-$timestamp = microtime(true);
-$climate = new League\CLImate\CLImate;
-$climate->forceAnsiOn();
-$phpBinPath = 'php ';
-$status = 0;
-$dir = __DIR__;
-$projectDir = dirname($dir, 2);
-$driver = $argv[ 1 ] ?? 'Files';
-$phpBinPath = $_SERVER['PHP_BIN_PATH'] ?? 'php';
-$failedTests = [];
-$skippedTests = [];
-
-/**
- * @param string $pattern
- * @param int $flags
- * @return array
- */
-$globCallback = static function (string $pattern, int $flags = 0) use (&$globCallback): array {
- $files = \glob($pattern, $flags);
- $subFiles = [];
-
- foreach (\glob(\dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
- $subFiles[] = $globCallback($dir . '/' . \basename($pattern), $flags);
- }
-
- return \array_merge(...$subFiles, ...[$files]);
-};
-
-foreach ($globCallback(PFC_TEST_DIR . DIRECTORY_SEPARATOR . '*.test.php') as $filename) {
- $climate->backgroundLightYellow()->blue()->out('---');
- $command = "{$phpBinPath} -f {$filename} {$driver}";
- $shortCommand = str_replace(dirname(PFC_TEST_DIR), '~', $command);
-
- $climate->out("phpfastcache@unit-tests {$projectDir} # $shortCommand ");
-
- \exec($command, $output, $return_var);
- $climate->out('=====================================');
- $climate->out(\implode("\n", $output));
- $climate->out('=====================================');
- if ($return_var === 0) {
- $climate->green("Test finished successfully");
- } elseif ($return_var === 2) {
- $climate->yellow("Test skipped due to unmeet dependencies");
- $skippedTests[] = basename($filename);
- } else {
- $climate->red("Test finished with a least one error");
- $status = 1;
- $failedTests[] = basename($filename);
- }
-
- $climate->out('');
- /**
- * Reset $output to prevent override effects
- */
- unset($output);
-}
-
-$execTime = gmdate('i\m s\s', (int) round(microtime(true) - $timestamp, 3));
-$climate->out('Total tests duration: ' . $execTime . ' ');
-
-if (!$failedTests) {
- $climate->backgroundGreen()->white()->flank('[OK] The build has passed successfully', '#')->out('');
-} else {
- $climate->backgroundRed()->white()->flank('[KO] The build has failed miserably', '~')->out('');
- $climate->red()->out('[TESTS FAILED] ' . PHP_EOL . '- '. implode(PHP_EOL . '- ', $failedTests))->out('');
-}
-
-if ($skippedTests) {
- $climate->yellow()->out('[TESTS SKIPPED] ' . PHP_EOL . '- '. implode(PHP_EOL . '- ', $skippedTests))->out('');
-}
-
-exit($status);
diff --git a/tests/cases/AbstractProxy.test.php b/tests/cases/AbstractProxy.test.php
deleted file mode 100644
index f2e88b1f0..000000000
--- a/tests/cases/AbstractProxy.test.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Proxy\PhpfastcacheAbstractProxy;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('phpfastcacheAbstractProxy class');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-$testHelper->runCRUDTests(
- new class($defaultDriver) extends PhpfastcacheAbstractProxy{}
-);
-$testHelper->terminateTest();
diff --git a/tests/cases/Apcu.test.php b/tests/cases/Apcu.test.php
deleted file mode 100644
index 297f85935..000000000
--- a/tests/cases/Apcu.test.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Apcu test (CRUD)');
-$pool = CacheManager::getInstance('Apcu');
-$pool->clear();
-$testHelper->runCRUDTests($pool);
-$testHelper->terminateTest();
diff --git a/tests/cases/Api.test.php b/tests/cases/Api.test.php
deleted file mode 100644
index 84a9483d0..000000000
--- a/tests/cases/Api.test.php
+++ /dev/null
@@ -1,63 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Api;
-use Phpfastcache\Exceptions\PhpfastcacheRootException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('API class');
-
-/**
- * Testing API version
- */
-try {
- $version = Api::getVersion();
- $testHelper->assertPass(sprintf('Successfully retrieved the API version: %s', $version));
-} catch (PhpfastcacheRootException $e) {
- $testHelper->assertFail(sprintf('Failed to retrieve the API version with the following error error: %s', $e->getMessage()));
-}
-
-/**
- * Testing PhpFastCache version
- */
-try {
- $version = Api::getPhpfastcacheVersion();
- $testHelper->assertPass(sprintf('Successfully retrieved PhpFastCache version: %s', $version));
-} catch (PhpfastcacheRootException $e) {
- $testHelper->assertFail(sprintf('Failed to retrieve the PhpFastCache version with the following error error: %s', $e->getMessage()));
-}
-
-/**
- * Testing API changelog
- */
-try {
- $changelog = Api::getChangelog();
- $testHelper->assertPass(sprintf("Successfully retrieved API changelog:\n%s", $changelog));
-} catch (PhpfastcacheRootException $e) {
- $testHelper->assertFail(sprintf('Failed to retrieve the API changelog with the following error error: %s', $e->getMessage()));
-}
-
-/**
- * Testing PhpFastCache changelog
- */
-try {
- $changelog = Api::getPhpfastcacheChangelog();
- $testHelper->assertPass(sprintf("Successfully retrieved PhpFastCache changelog:\n%s", $changelog));
-} catch (PhpfastcacheRootException $e) {
- $testHelper->assertFail(sprintf('Failed to retrieve the PhpFastCache changelog with the following error error: %s', $e->getMessage()));
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/AtomicOperations.test.php b/tests/cases/AtomicOperations.test.php
deleted file mode 100644
index cf9dcdc4f..000000000
--- a/tests/cases/AtomicOperations.test.php
+++ /dev/null
@@ -1,130 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Atomic Operations');
-$pool = CacheManager::getInstance('Memstatic');
-$testHelper->printInfoText('Testing APPEND/PREPEND methods...');
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set(['alpha', 'bravo']);
- $cacheItem->append('charlie');
- $pool->save($cacheItem);
-
- $target = ['alpha', 'bravo', 'charlie'];
- if(count(array_intersect($cacheItem->get(), $target)) === count($target)){
- $testHelper->assertPass('Atomic operation APPEND on ARRAY works as expected');
- } else {
- $testHelper->assertFail('Atomic operation APPEND on ARRAY did not worked as expected');
- }
-}
-
-// Reset pool
-unset($target, $cacheItem);
-$pool->clear();
-
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set('alpha_bravo');
- $cacheItem->append('_charlie');
- $pool->save($cacheItem);
-
- $target = 'alpha_bravo_charlie';
- if($cacheItem->get() === $target){
- $testHelper->assertPass('Atomic operation APPEND on STRING works as expected');
- } else {
- $testHelper->assertFail('Atomic operation APPEND on STRING did not worked as expected');
- }
-}
-
-// Reset pool
-unset($target, $cacheItem);
-$pool->clear();
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set(['bravo', 'charlie']);
- $cacheItem->prepend('alpha');
- $pool->save($cacheItem);
-
- $target = ['alpha', 'bravo', 'charlie'];
- if(count(array_intersect($cacheItem->get(), $target)) === count($target)){
- $testHelper->assertPass('Atomic operation PREPEND on ARRAY works as expected');
- } else {
- $testHelper->assertFail('Atomic operation PREPEND on ARRAY did not worked as expected');
- }
-}
-
-// Reset pool
-unset($target, $cacheItem);
-$pool->clear();
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set('bravo_charlie');
- $cacheItem->prepend('alpha_');
- $pool->save($cacheItem);
-
- $target = 'alpha_bravo_charlie';
- if($cacheItem->get() === $target){
- $testHelper->assertPass('Atomic operation PREPEND on STRING works as expected');
- } else {
- $testHelper->assertFail('Atomic operation PREPEND on STRING did not worked as expected');
- }
-}
-
-// Reset pool
-unset($target, $cacheItem);
-$pool->clear();
-
-$testHelper->printInfoText('Testing INCREMENT/DECREMENT methods...');
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set(1330);
- $cacheItem->increment(3 + 4);
- $pool->save($cacheItem);
-
- if($cacheItem->get() === 1337){
- $testHelper->assertPass('Atomic operation INCREMENT on INT works as expected');
- } else {
- $testHelper->assertFail('Atomic operation INCREMENT on INT did not worked as expected');
- }
-}
-
-// Reset pool
-unset($target, $cacheItem);
-$pool->clear();
-
-{
- $cacheItem = $pool->getItem($testHelper->getRandomKey());
- $cacheItem->set(1340);
- $cacheItem->decrement(4 - 1);
- $pool->save($cacheItem);
-
- if($cacheItem->get() === 1337){
- $testHelper->assertPass('Atomic operation DECREMENT on INT works as expected');
- } else {
- $testHelper->assertFail('Atomic operation DECREMENT on INT did not worked as expected');
- }
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/AttachingDetachingMethods.test.php b/tests/cases/AttachingDetachingMethods.test.php
deleted file mode 100644
index df07898dd..000000000
--- a/tests/cases/AttachingDetachingMethods.test.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheLogicException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Psr\Cache\CacheItemPoolInterface;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('[A|De]ttaching methods');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-/**
- * Testing memcached as it is declared in .travis.yml
- */
-$driverInstance = CacheManager::getInstance($defaultDriver);
-
-if (!is_object($driverInstance)) {
- $testHelper->assertFail('CacheManager::getInstance() returned an invalid variable type:' . gettype($driverInstance));
-} elseif (!($driverInstance instanceof CacheItemPoolInterface)) {
- $testHelper->assertFail('CacheManager::getInstance() returned an invalid class:' . get_class($driverInstance));
-} else {
- $key = 'test_attaching_detaching';
-
- $itemDetached = $driverInstance->getItem($key);
- $driverInstance->detachItem($itemDetached);
- $itemAttached = $driverInstance->getItem($key);
-
- if ($driverInstance->isAttached($itemDetached) !== true) {
- $testHelper->assertPass('ExtendedCacheItemPoolInterface::isAttached() identified $itemDetached as being detached.');
- } else {
- $testHelper->assertFail('ExtendedCacheItemPoolInterface::isAttached() failed to identify $itemDetached as to be detached.');
- }
-
- try {
- $driverInstance->attachItem($itemDetached);
- $testHelper->assertFail('ExtendedCacheItemPoolInterface::attachItem() attached $itemDetached without trowing an error.');
- } catch (PhpfastcacheLogicException $e) {
- $testHelper->assertPass('ExtendedCacheItemPoolInterface::attachItem() failed to attach $itemDetached by trowing a phpfastcacheLogicException exception.');
- }
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CacheClearSingleInstance.test.php b/tests/cases/CacheClearSingleInstance.test.php
deleted file mode 100644
index d2ad5d1c3..000000000
--- a/tests/cases/CacheClearSingleInstance.test.php
+++ /dev/null
@@ -1,51 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheInstanceNotFoundException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Clear single cache instance');
-$defaultDriver = (!empty($argv[1]) ? \ucfirst($argv[1]) : 'Files');
-$instanceId = str_shuffle(md5(\time() - \random_int(0, 86400)));
-$instanceId2 = str_shuffle(md5(\time() - \random_int(0, 86400)));
-$instanceId3 = str_shuffle(md5(\time() - \random_int(0, 86400)));
-$instanceId4 = str_shuffle(md5(\time() - \random_int(0, 86400)));
-
-$driverInstance = CacheManager::getInstance($defaultDriver, null, $instanceId);
-$driverInstance2 = CacheManager::getInstance($defaultDriver, null, $instanceId2);
-$driverInstance3 = CacheManager::getInstance($defaultDriver, null, $instanceId3);
-$driverInstance4 = CacheManager::getInstance($defaultDriver, null, $instanceId4);
-
-CacheManager::clearInstance($driverInstance2);
-
-$cacheInstances = CacheManager::getInstances();
-if (\count($cacheInstances) === 3) {
- $testHelper->assertPass('A single cache instance have been cleared');
-} else {
- $testHelper->assertFail('A single cache instance have NOT been cleared');
-}
-
-$driverInstance2Hash = spl_object_hash($driverInstance2);
-foreach ($cacheInstances as $cacheInstance) {
- $driverInstanceHash = spl_object_hash($cacheInstance);
- if ($driverInstanceHash !== $driverInstance2Hash) {
- $testHelper->assertPass("Compared cache instance #{$driverInstanceHash} does not match with previously cleared cache instance #" . $driverInstance2Hash);
- } else {
- $testHelper->assertFail("Compared cache instance #{$driverInstanceHash} unfortunately match with previously cleared cache instance #" . $driverInstance2Hash);
- }
-}
diff --git a/tests/cases/CacheContract.test.php b/tests/cases/CacheContract.test.php
deleted file mode 100644
index 47acf4f89..000000000
--- a/tests/cases/CacheContract.test.php
+++ /dev/null
@@ -1,143 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\CacheContract;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Psr\Cache\CacheItemInterface;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Cache Contract');
-$defaultDriver = (!empty($argv[ 1 ]) ? ucfirst($argv[ 1 ]) : 'Files');
-$cacheInstance = CacheManager::getInstance($defaultDriver);
-$cacheKey = 'cacheKey';
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-$cacheInstance->clear();
-
-/**
- * Missing cache item test
- */
-$cacheValue = (new CacheContract($cacheInstance))->get($cacheKey, static function () use ($testHelper, $RandomCacheValue) {
- if (func_get_arg(0) instanceof ExtendedCacheItemInterface) {
- $testHelper->assertPass('The callback has been received the cache item as a parameter (introduced in 8.0.6).');
- } else {
- $testHelper->assertFail('The callback has not received the cache item as a parameter (introduced in 8.0.6).');
- }
- /**
- * No parameters are passed
- * to this closure
- */
- $testHelper->printText('Entering in closure as the cache item does not come from the cache backend.');
-
- /**
- * Here's your database/webservice/etc. stuff
- */
-
- return $RandomCacheValue . '-1337';
-});
-
-if ($cacheValue === $RandomCacheValue . '-1337') {
- $testHelper->assertPass(sprintf('The cache contract successfully returned expected value "%s".', $cacheValue));
-} else {
- $testHelper->assertFail(sprintf('The cache contract returned an unexpected value "%s".', $cacheValue));
-}
-
-/**
- * Existing cache item test
- */
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-$cacheItem->set($RandomCacheValue);
-$cacheInstance->save($cacheItem);
-
-/**
- * Remove objects references
- */
-$cacheInstance->detachAllItems();
-unset($cacheItem);
-
-$cacheValue = (new CacheContract($cacheInstance))->get($cacheKey, static function () use ($cacheKey, $testHelper, $RandomCacheValue) {
- /**
- * No parameter are passed
- * to this closure
- */
- $testHelper->assertFail('Unexpected closure call.');
- return $RandomCacheValue . '-1337';
-});
-
-if ($cacheValue === $RandomCacheValue) {
- $testHelper->assertPass(sprintf('The cache contract successfully returned expected value "%s".', $cacheValue));
-} else {
- $testHelper->assertFail(sprintf('The cache contract returned an unexpected value "%s".', $cacheValue));
-}
-
-$cacheInstance->clear();
-
-/**
- * Test TTL
- * @since 7.0
- */
-$ttl = 5;
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-$cacheInstance->detachAllItems();
-unset($cacheItem);
-
-$cacheValue = (new CacheContract($cacheInstance))->get($cacheKey, static fn() => $RandomCacheValue, $ttl);
-
-$testHelper->printText(sprintf('Sleeping for %d seconds...', $ttl));
-sleep($ttl + 1);
-$cacheInstance->detachAllItems();
-$cacheItem = $cacheInstance->getItem($cacheKey);
-
-if (!$cacheItem->isHit()) {
- $testHelper->assertPass(sprintf('The cache contract ttl successfully expired the cache after %d seconds', $ttl));
-} else {
- $testHelper->assertFail(sprintf('The cache contract ttl does not expired the cache after %d seconds', $ttl));
-}
-
-/**
- * Test closure first argument
- * @since 8.0.6
- */
-$cacheInstance->clear();
-(new CacheContract($cacheInstance))->get($cacheKey, static function () use ($testHelper) {
- $args = func_get_args();
- if (isset($args[0]) && $args[0] instanceof CacheItemInterface) {
- $testHelper->assertPass('The callback has been received the cache item as the first parameter');
- } else {
- $testHelper->assertFail('The callback did not received the cache item as the first parameter');
- }
-});
-
-
-/**
- * Test callable cache contract syntax via __invoke()
- * @since 8.0.6
- */
-$cacheInstance->clear();
-try {
- $value = (new CacheContract($cacheInstance))($cacheKey, static function () use ($testHelper) {
- $testHelper->assertPass('The CacheContract class is callable via __invoke()');
- return null;
- });
-} catch (\Error $e) {
- $testHelper->assertFail('The CacheContract class is not callable via __invoke()');
-} catch (\Throwable $e) {
- $testHelper->assertFail('Got an unknown error: ' . $e->getMessage());
-}
-
-$cacheInstance->clear();
-$testHelper->terminateTest();
diff --git a/tests/cases/CacheInstanceId.test.php b/tests/cases/CacheInstanceId.test.php
deleted file mode 100644
index 53b62a7ff..000000000
--- a/tests/cases/CacheInstanceId.test.php
+++ /dev/null
@@ -1,41 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheInstanceNotFoundException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('New cache instance');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-$instanceId = str_shuffle(md5(time() - mt_rand(0, 86400)));
-
-$driverInstance = CacheManager::getInstance($defaultDriver, null, $instanceId);
-
-if ($driverInstance->getInstanceId() !== $instanceId) {
- $testHelper->assertFail('Unexpected instance ID: ' . $driverInstance->getInstanceId());
-} else {
- $testHelper->assertPass('Got expected instance ID: ' . $instanceId);
-}
-
-try {
- CacheManager::getInstanceById(str_shuffle($instanceId));
- $testHelper->assertFail('Non-existing instance ID has thrown no exception');
-} catch (PhpfastcacheInstanceNotFoundException $e) {
- $testHelper->assertPass('Non-existing instance ID has thrown an exception');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CacheItemAtomicMethods.test.php b/tests/cases/CacheItemAtomicMethods.test.php
deleted file mode 100644
index 7a9baa505..000000000
--- a/tests/cases/CacheItemAtomicMethods.test.php
+++ /dev/null
@@ -1,56 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheInstanceNotFoundException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Cache Item Atomic Methods');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-$driverInstance = CacheManager::getInstance($defaultDriver);
-$testItem = $driverInstance->getItem('test-item');
-$cacheTestData = 'I <3 PhpFastCache';
-
-$testItem->set($cacheTestData)->expiresAfter(600);
-$driverInstance->save($testItem);
-unset($testItem);
-$driverInstance->detachAllItems();
-
-$testItem = $driverInstance->getItem('test-item');
-
-if ($testItem->getLength() === \strlen($cacheTestData)) {
- $testHelper->assertPass('Atomic method getLength() returned the exact length');
-} else {
- $testHelper->assertPass('Atomic method getLength() returned an unexpected length' . $testItem->getLength());
-}
-
-if (!$testItem->isNull()) {
- $testHelper->assertPass('Atomic method isNull() returned FALSE');
-} else {
- $testHelper->assertPass('Atomic method isNull() returned TRUE');
-}
-
-if (!$testItem->isEmpty()) {
- $testHelper->assertPass('Atomic method isEmpty() returned FALSE');
-} else {
- $testHelper->assertPass('Atomic method isEmpty() returned TRUE');
-}
-
-
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CacheItemDetailedDate.test.php b/tests/cases/CacheItemDetailedDate.test.php
deleted file mode 100644
index 07dd760a3..000000000
--- a/tests/cases/CacheItemDetailedDate.test.php
+++ /dev/null
@@ -1,106 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Exceptions\PhpfastcacheLogicException;
-use Phpfastcache\CacheContract as CacheConditional;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Psr\Cache\CacheItemPoolInterface;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Cache option: itemDetailedDate');
-$defaultDriver = (!empty($argv[ 1 ]) ? ucfirst($argv[ 1 ]) : 'Files');
-$cacheInstance = CacheManager::getInstance($defaultDriver, new ConfigurationOption([
- 'itemDetailedDate' => true,
- 'path' => __DIR__ . '/../cache/'
-]));
-$cacheKey = 'cacheKey';
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-
-$testHelper->printText('Preparing cache test item...');
-$realCreationDate = new \DateTime();
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$cacheItem->set($RandomCacheValue)->expiresAfter(60);
-$cacheInstance->save($cacheItem);
-$cacheInstance->detachAllItems();
-$diffSeconds = 3;
-
-unset($cacheItem);
-for ($i = 0; $i < $diffSeconds; $i++) {
- $testHelper->printText(sprintf("Sleeping {$diffSeconds} seconds (%ds elapsed)", $i + 1));
- sleep(1);
-}
-$testHelper->printText('Triggering modification date...');
-
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$cacheItem->set(str_shuffle($RandomCacheValue));
-$realModificationDate = new \DateTime();
-$cacheInstance->save($cacheItem);
-$cacheInstance->detachAllItems();
-unset($cacheItem);
-
-for ($i = 0; $i < $diffSeconds; $i++) {
- $testHelper->printText(sprintf("Sleeping {$diffSeconds} additional seconds (%ds elapsed)", $i + 1));
- sleep(1);
-}
-$cacheItem = $cacheInstance->getItem($cacheKey);
-
-try {
- $creationDate = $cacheItem->getCreationDate();
- if ($creationDate instanceof \DateTimeInterface) {
- $testHelper->assertPass('The method getCreationDate() returned a DateTimeInterface object');
- if ($creationDate->format(DateTime::W3C) === $realCreationDate->format(DateTime::W3C)) {
- $testHelper->assertPass('The item creation date effectively represents the real creation date (obviously).');
- } else {
- $testHelper->assertFail('The item creation date does not represents the real creation date.');
- }
- } else {
- $testHelper->assertFail('The method getCreationDate() does not returned a DateTimeInterface object, got: ' . var_export($creationDate, true));
- }
-} catch (PhpfastcacheLogicException $e) {
- $testHelper->assertFail('The method getCreationDate() unexpectedly thrown a phpfastcacheLogicException');
-}
-
-try {
- $modificationDate = $cacheItem->getModificationDate();
- if ($modificationDate instanceof \DateTimeInterface) {
- $testHelper->assertPass('The method getModificationDate() returned a DateTimeInterface object');
- if ($modificationDate->format(DateTime::W3C) === $realModificationDate->format(DateTime::W3C)) {
- $testHelper->assertPass('The item modification date effectively represents the real modification date (obviously).');
- } else {
- $testHelper->assertFail('The item modification date does not represents the real modification date.');
- }
- /**
- * Using >= operator instead of === due to a possible micro time
- * offset that can often results to a value of 6 seconds (rounded)
- */
- if ($modificationDate->getTimestamp() - $cacheItem->getCreationDate()->getTimestamp() >= $diffSeconds) {
- $testHelper->assertPass("The item modification date is effectively {$diffSeconds} seconds greater than the creation date.");
- } else {
- $testHelper->assertFail('The item modification date effectively is not greater than the creation date.');
- }
- } else {
- $testHelper->assertFail('The method getModificationDate() does not returned a DateTimeInterface object, got: ' . var_export($modificationDate, true));
- }
-} catch (PhpfastcacheLogicException $e) {
- $testHelper->assertFail('The method getModificationDate() unexpectedly thrown a phpfastcacheLogicException');
-}
-
-$cacheInstance->clear();
-unset($cacheInstance);
-CacheManager::clearInstances();
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CacheSlamsProtection.test.php b/tests/cases/CacheSlamsProtection.test.php
deleted file mode 100644
index 20521ebb7..000000000
--- a/tests/cases/CacheSlamsProtection.test.php
+++ /dev/null
@@ -1,64 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\IOConfigurationOption;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Entities\ItemBatch;
-use Phpfastcache\EventManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Cache Slams Protection');
-$defaultDriver = (!empty($argv[ 1 ]) ? ucfirst($argv[ 1 ]) : 'Files');
-$driverInstance = CacheManager::getInstance($defaultDriver, new IOConfigurationOption([
- 'preventCacheSlams' => true,
- 'cacheSlamsTimeout' => 20
-]));
-
-if (!$testHelper->isHHVM()) {
- EventManager::getInstance()->onCacheGetItemInSlamBatch(function (ExtendedCacheItemPoolInterface $itemPool, ItemBatch $driverData, $cacheSlamsSpendSeconds) use ($testHelper) {
- $testHelper->printText("Looping in batch for {$cacheSlamsSpendSeconds} second(s) with a batch from " . $driverData->getItemDate()->format(\DateTime::W3C));
- });
-
- $testHelper->runSubProcess('CacheSlamsProtection');
- /**
- * Give some time to the
- * subprocess to start
- * just like a concurrent
- * php request
- */
- usleep(mt_rand(250000, 800000));
-
- $item = $driverInstance->getItem('TestCacheSlamsProtection');
-
- /**
- * @see CacheSlamsProtection.subprocess.php:28
- */
- if ($item->isHit() && $item->get() === 1337) {
- $testHelper->assertPass('The batch has expired and returned a non-empty item with expected value: ' . $item->get());
- } else {
- $testHelper->assertFail('The batch has expired and returned an empty item with expected value: ' . print_r($item->get(), true));
- }
-
- /**
- * Cleanup the driver
- */
- $driverInstance->deleteItem($item->getKey());
-} else {
- $testHelper->assertSkip('Test ignored on HHVM builds due to sub-process issues with C.I.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Casssandra.test.php b/tests/cases/Casssandra.test.php
deleted file mode 100644
index 9e04e5e31..000000000
--- a/tests/cases/Casssandra.test.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Apcu test (CRUD)');
-$pool = CacheManager::getInstance('Cassandra');
-$pool->clear();
-$testHelper->runCRUDTests($pool);
-$testHelper->terminateTest();
diff --git a/tests/cases/ClusterFullReplication.test.php b/tests/cases/ClusterFullReplication.test.php
deleted file mode 100644
index b37a8d287..000000000
--- a/tests/cases/ClusterFullReplication.test.php
+++ /dev/null
@@ -1,34 +0,0 @@
-ClusterFullReplication.test.php
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Api;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Cluster\AggregatorInterface;
-use Phpfastcache\Cluster\ClusterAggregator;
-use Phpfastcache\Exceptions\PhpfastcacheRootException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Full Replication Cluster');
-
-$clusterAggregator = new ClusterAggregator('test_20');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Redis'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Files'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Sqlite'));
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_FULL_REPLICATION);
-
-$testHelper->runCRUDTests($cluster);
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ClusterMasterSlaveReplication.test.php b/tests/cases/ClusterMasterSlaveReplication.test.php
deleted file mode 100644
index 53d20a878..000000000
--- a/tests/cases/ClusterMasterSlaveReplication.test.php
+++ /dev/null
@@ -1,90 +0,0 @@
-ClusterFullReplication.test.php
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Cluster\AggregatorInterface;
-use Phpfastcache\Cluster\ClusterAggregator;
-use Phpfastcache\Cluster\ItemAbstract;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Drivers\Failfiles\Driver as FailFilesDriver;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Master/Slave Replication Cluster');
-
-CacheManager::addCustomDriver('Failfiles', FailFilesDriver::class);
-$clusterAggregator = new ClusterAggregator('test_10');
-$unwantedPool = CacheManager::getInstance('Redis');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Failfiles'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Sqlite'));
-$clusterAggregator->aggregateDriver($unwantedPool);
-
-try {
- $cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_MASTER_SLAVE);
- $testHelper->assertFail('The Master/Slave cluster did not thrown an exception with more than 2 pools aggregated.');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('The Master/Slave cluster thrown an exception with more than 2 pools aggregated.');
-}
-$clusterAggregator->disaggregateDriver($unwantedPool);
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_MASTER_SLAVE);
-
-$testPasses = false;
-$cluster->getEventManager()->onCacheReplicationSlaveFallback(
- static function (ExtendedCacheItemPoolInterface $pool, string $actionName) use (&$testPasses) {
- if ($actionName === 'getItem') {
- $testPasses = true;
- }
- }
-);
-$cacheItem = $cluster->getItem('test-test');
-
-if ($testPasses && $cacheItem instanceof ItemAbstract) {
- $testHelper->assertPass('The Master/Slave cluster successfully switched to slave cluster after backend I/O error.');
-} else {
- $testHelper->assertFail('The Master/Slave cluster failed to switch to slave cluster after backend I/O error.');
-}
-unset($unwantedPool, $cacheItem, $testPasses, $cluster, $clusterAggregator);
-CacheManager::clearInstances();
-
-$clusterAggregator = new ClusterAggregator('test_20');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Redis'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Files'));
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_MASTER_SLAVE);
-$cluster->clear();
-$cacheKey = 'cache_' . \bin2hex(\random_bytes(12));
-$cacheValue = 'cache_' . \random_int(1000, 999999);
-$cacheItem = $cluster->getItem($cacheKey);
-
-$cacheItem->set($cacheValue);
-$cacheItem->expiresAfter(600);
-if ($cluster->save($cacheItem)) {
- $testHelper->assertPass('The Master/Slave cluster successfully saved an item.');
-} else {
- $testHelper->assertFail('The Master/Slave cluster failed to save an item.');
-}
-unset($clusterAggregator, $cluster, $cacheItem);
-CacheManager::clearInstances();
-
-$clusterAggregator = new ClusterAggregator('test_20');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Redis'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Files'));
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_MASTER_SLAVE);
-$cluster->clear();
-
-$testHelper->runCRUDTests($cluster);
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ClusterRandomReplication.test.php b/tests/cases/ClusterRandomReplication.test.php
deleted file mode 100644
index 777951348..000000000
--- a/tests/cases/ClusterRandomReplication.test.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Cluster\AggregatorInterface;
-use Phpfastcache\Cluster\ClusterAggregator;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-use Phpfastcache\Drivers\Sqlite\Config as SqliteConfig;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Master/Slave Replication Cluster');
-
-CacheManager::clearInstances();
-
-$clusterAggregator = new ClusterAggregator('test_20');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Redis'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Sqlite', new SqliteConfig(['securityKey' => 'unit_tests'])));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Files', new FilesConfig(['securityKey' => 'unit_tests'])));
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_RANDOM_REPLICATION);
-$cluster->clear();
-
-$testHelper->runCRUDTests($cluster);
-
-if($cluster->getClusterPools()[0]->isAggregatedBy() === $cluster){
- $testHelper->assertPass('The cluster aggregator set is the same as the cluster container.');
-} else {
- $testHelper->assertFail('The cluster aggregator set is NOT the same as the cluster container.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ClusterSemiReplication.test.php b/tests/cases/ClusterSemiReplication.test.php
deleted file mode 100644
index 49179d450..000000000
--- a/tests/cases/ClusterSemiReplication.test.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Api;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Cluster\AggregatorInterface;
-use Phpfastcache\Cluster\ClusterAggregator;
-use Phpfastcache\Exceptions\PhpfastcacheRootException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Semi Replication Cluster');
-
-$clusterAggregator = new ClusterAggregator('test_20');
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Files'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Redis'));
-$clusterAggregator->aggregateDriver(CacheManager::getInstance('Sqlite'));
-$cluster = $clusterAggregator->getCluster(AggregatorInterface::STRATEGY_SEMI_REPLICATION);
-$cluster->clear();
-$testHelper->runCRUDTests($cluster);
-$testHelper->terminateTest();
diff --git a/tests/cases/ConfigurationValidator.test.php b/tests/cases/ConfigurationValidator.test.php
deleted file mode 100644
index 66504fffe..000000000
--- a/tests/cases/ConfigurationValidator.test.php
+++ /dev/null
@@ -1,58 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidTypeException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Configuration validator');
-
-
-$tests = [
- [
- 'Files' => [
- 'path' => new \StdClass,
- ],
- ],
- [
- 'Files' => [
- 'htaccess' => new \StdClass,
- ],
- ],
- [
- 'Files' => [
- 'defaultTtl' => [],
- ],
- ],
- [
- 'Files' =>[
- 'unwantedOption' => new \StdClass,
- ],
- ],
-];
-
-foreach ($tests as $test) {
- try {
- CacheManager::getInstance(key($test), new FilesConfig(current($test)));
- $testHelper->assertFail('Configuration validator has failed to correctly validate a driver configuration option');
- } catch (PhpfastcacheInvalidTypeException|PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('Configuration validator has successfully validated a driver configuration option by throwing an Exception --- ' . $e->getMessage());
- }
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CoreDriverOverride.test.php b/tests/cases/CoreDriverOverride.test.php
deleted file mode 100644
index d0b3d03c8..000000000
--- a/tests/cases/CoreDriverOverride.test.php
+++ /dev/null
@@ -1,102 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\DriverTest\Files2\Config;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Exceptions\PhpfastcacheLogicException;
-use Phpfastcache\CacheContract as CacheConditional;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Core driver override');
-
-if (!class_exists(Phpfastcache\DriverTest\Files2\Item::class)
- || !class_exists(Phpfastcache\DriverTest\Files2\Driver::class)
- || !class_exists(Phpfastcache\DriverTest\Files2\Config::class)
-) {
- $testHelper->assertFail('The php classes of driver "Files2" do not exist');
- $testHelper->terminateTest();
-} else {
- $testHelper->assertPass('The php classes of driver "Files2" were found');
-}
-
-try {
- CacheManager::addCoreDriverOverride('Files2', \Phpfastcache\DriverTest\Files2\Driver::class);
- $testHelper->assertFail('No exception thrown while trying to override an non-existing driver');
-} catch (PhpfastcacheLogicException $e) {
- $testHelper->assertPass('An exception has been thrown while trying to override an non-existing driver');
-}
-
-try {
- CacheManager::addCoreDriverOverride('', \Phpfastcache\DriverTest\Files2\Driver::class);
- $testHelper->assertFail('No exception thrown while trying to override an empty driver');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('An exception has been thrown while trying to override an empty driver');
-}
-
-CacheManager::addCoreDriverOverride('Files', \Phpfastcache\DriverTest\Files2\Driver::class);
-
-$cacheInstance = CacheManager::getInstance('Files', new Config(['customOption' => true]));
-$cacheKey = 'cacheKey';
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-
-if ($cacheInstance instanceof \Phpfastcache\DriverTest\Files2\Driver) {
- $testHelper->assertPass('The cache instance is effectively an instance of an override class');
-} else {
- $testHelper->assertFail('The cache instance is not an instance of an override class');
-}
-
-/**
- * Existing cache item test
- */
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-$cacheItem->set($RandomCacheValue);
-$cacheInstance->save($cacheItem);
-
-/**
- * Remove objects references
- */
-$cacheInstance->detachAllItems();
-unset($cacheItem);
-
-$cacheValue = (new CacheConditional($cacheInstance))->get($cacheKey, function () use ($cacheKey, $testHelper, $RandomCacheValue) {
- /**
- * No parameter are passed
- * to this closure
- */
- $testHelper->assertFail('Unexpected closure call.');
- return $RandomCacheValue . '-1337';
-});
-
-if ($cacheValue === $RandomCacheValue) {
- $testHelper->assertPass(sprintf('The cache promise successfully returned expected value "%s".', $cacheValue));
-} else {
- $testHelper->assertFail(sprintf('The cache promise returned an unexpected value "%s".', $cacheValue));
-}
-
-CacheManager::removeCoreDriverOverride('Files');
-$cacheInstance = CacheManager::getInstance('Files');
-
-if ($cacheInstance instanceof \Phpfastcache\DriverTest\Files2\Driver) {
- $testHelper->assertFail('The cache instance is still an instance of an override class');
-} else {
- $testHelper->assertPass('The cache instance is no longer an instance of an override class');
-}
-
-$cacheInstance->clear();
-$testHelper->terminateTest();
diff --git a/tests/cases/Couchbasev3.test.php b/tests/cases/Couchbasev3.test.php
deleted file mode 100644
index 2f7f58d56..000000000
--- a/tests/cases/Couchbasev3.test.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Couchbasev3\Config as CouchbaseConfig;
-use Phpfastcache\Exceptions\PhpfastcacheDriverConnectException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Couchbasev3 driver');
-
-$config = new CouchbaseConfig();
-$config->setBucketName('phpfastcache');
-$config->setItemDetailedDate(true);
-try {
- $config->setUsername('test');
- $config->setPassword('phpfastcache');
- $config->setBucketName('phpfastcache');
- $config->setScopeName('_default');
- $config->setCollectionName('_default');
- $cacheInstance = CacheManager::getInstance('Couchbasev3', $config);
- $testHelper->runCRUDTests($cacheInstance);
-} catch (PhpfastcacheDriverConnectException $e) {
- $testHelper->assertSkip('Couchbase server unavailable: ' . $e->getMessage());
- $testHelper->terminateTest();
-}
-$testHelper->terminateTest();
diff --git a/tests/cases/CustomDefaultFileNameFunction.php b/tests/cases/CustomDefaultFileNameFunction.php
deleted file mode 100644
index 1518c5696..000000000
--- a/tests/cases/CustomDefaultFileNameFunction.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Drivers\Files\Driver;
-use Phpfastcache\EventManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Custom filename function');
-$driverInstance = CacheManager::getInstance(
- 'Files',
- new ConfigurationOption(
- [
- 'defaultFileNameHashFunction' => static function (string $str) {
- return hash('sha256', $str);
- }
- ]
- )
-);
-
-$testPasses = false;
-EventManager::getInstance()->onCacheWriteFileOnDisk(
- static function (ExtendedCacheItemPoolInterface $itemPool, $file) use ($driverInstance, &$testPasses) {
- /** @var $driverInstance Driver */
- $testPasses = strlen(basename($file, '.' . $driverInstance->getConfig()->getCacheFileExtension())) === 64;
- }
-);
-
-$item = $driverInstance->getItem('TestCustomDefaultFileNameFunction');
-$item->set(bin2hex(random_bytes(random_int(10, 100))));
-$driverInstance->save($item);
-
-if ($testPasses) {
- $testHelper->assertPass('Custom filename function returned expected hash length');
-} else {
- $testHelper->assertFail('Custom filename function did not returned expected hash length');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CustomDefaultKeyHashFunction.php b/tests/cases/CustomDefaultKeyHashFunction.php
deleted file mode 100644
index 9fa27d06b..000000000
--- a/tests/cases/CustomDefaultKeyHashFunction.php
+++ /dev/null
@@ -1,42 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Custom key hash function');
-$driverInstance = CacheManager::getInstance(
- 'sqlite',
- new ConfigurationOption(
- [
- 'defaultKeyHashFunction' => static function (string $str) {
- return hash('sha256', $str);
- }
- ]
- )
-);
-$item = $driverInstance->getItem('TestCustomDefaultKeyHashFunction');
-$item->set(bin2hex(random_bytes(random_int(10, 100))));
-$driverInstance->save($item);
-
-if (strlen($item->getEncodedKey()) === 64) {
- $testHelper->assertPass('Custom key hash function returned expected hash length');
-} else {
- $testHelper->assertFail('Custom key hash function did not returned expected hash length');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CustomDriver.test.php b/tests/cases/CustomDriver.test.php
deleted file mode 100644
index 6d49a2b41..000000000
--- a/tests/cases/CustomDriver.test.php
+++ /dev/null
@@ -1,73 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Fakefiles\Config;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Custom driver');
-
-if (!class_exists(Phpfastcache\Drivers\Fakefiles\Item::class)
- || !class_exists(Phpfastcache\Drivers\Fakefiles\Driver::class)
- || !class_exists(Phpfastcache\Drivers\Fakefiles\Config::class)
-) {
- $testHelper->assertFail('The php classes of driver "Fakefiles" do not exist');
- $testHelper->terminateTest();
-} else {
- $testHelper->assertPass('The php classes of driver "Fakefiles" were found');
-}
-
-try {
- CacheManager::addCustomDriver('Fakefiles', \Phpfastcache\Drivers\Fakefiles\Driver::class);
- $testHelper->assertPass('No exception thrown while trying to add a custom driver');
-} catch (\Throwable $e) {
- $testHelper->assertFail('An exception has been thrown while trying to add a custom driver');
-}
-
-try {
- CacheManager::addCustomDriver('Fakefiles', \Phpfastcache\Drivers\Fakefiles\Driver::class);
- $testHelper->assertFail('No exception thrown while trying to re-add a the same custom driver');
-} catch (\Throwable $e) {
- $testHelper->assertPass('An exception has been thrown while trying to re-add a the same custom driver');
-}
-
-try {
- CacheManager::addCustomDriver('', \Phpfastcache\Drivers\Fakefiles\Driver::class);
- $testHelper->assertFail('No exception thrown while trying to override an empty driver');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('An exception has been thrown while trying to override an empty driver');
-}
-
-try {
- $cacheInstance = CacheManager::getInstance('Fakefiles', new Config(['customOption' => true]));
- $testHelper->assertPass('The custom driver is unavailable at the moment and no exception has been thrown.');
-} catch (PhpfastcacheDriverCheckException $e) {
- $testHelper->assertPass('The custom driver is unavailable at the moment and the exception has been catch.');
-}
-
-CacheManager::removeCustomDriver('Fakefiles');
-
-try {
- $cacheInstance = CacheManager::getInstance('Fakefiles');
- $testHelper->assertPass('The custom driver has been removed but is still active.');
-} catch (PhpfastcacheDriverCheckException $e) {
- $testHelper->assertPass('The custom driver is unavailable at the moment and the exception has been catch.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/CustomKeyHashFunction.test.php b/tests/cases/CustomKeyHashFunction.test.php
deleted file mode 100644
index f264d4ab2..000000000
--- a/tests/cases/CustomKeyHashFunction.test.php
+++ /dev/null
@@ -1,41 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Custom key hash function');
-
-function myAwesomeHashFunction($string)
-{
- return 'customHash.' . sha1($string);
-}
-
-$cacheInstance = CacheManager::getInstance('Files', new ConfigurationOption(['defaultKeyHashFunction' => 'myAwesomeHashFunction']));
-
-$item = $cacheInstance->getItem(str_shuffle(uniqid('pfc', true)));
-$item->set(true)->expiresAfter(300);
-$cacheInstance->save($item);
-
-if ($item->getEncodedKey() === 'customHash.' . sha1($item->getKey())) {
- $testHelper->assertPass('The custom key hash function returned expected hash string: ' . $item->getEncodedKey());
-} else {
- $testHelper->assertFail('The custom key hash function returned unexpected hash string: ' . $item->getEncodedKey());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/DisabledStaticItemCaching.test.php b/tests/cases/DisabledStaticItemCaching.test.php
deleted file mode 100644
index 4601811ad..000000000
--- a/tests/cases/DisabledStaticItemCaching.test.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Entities\ItemBatch;
-use Phpfastcache\EventManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Testing disabling static item caching');
-$defaultDriver = (!empty($argv[ 1 ]) ? ucfirst($argv[ 1 ]) : 'Files');
-$driverInstance = CacheManager::getInstance($defaultDriver, new ConfigurationOption([
- 'useStaticItemCaching' => false,
-]));
-
-if (!$testHelper->isHHVM()) {
- $testHelper->runSubProcess('DisabledStaticItemCaching');
- /**
- * Give some time to the
- * subprocess to start
- * just like a concurrent
- * php request
- */
- $item = $driverInstance->getItem('TestUseStaticItemCaching');
- $item->set('654321-fedcba');
- $driverInstance->save($item);
- $testHelper->runSubProcess('DisabledStaticItemCaching');
- usleep(random_int(250000, 800000));
-
- // We don't want to clear cache instance since we disabled the static item caching
- $item = $driverInstance->getItem('TestUseStaticItemCaching');
-
- /**
- * @see CacheSlamsProtection.subprocess.php:28
- */
- if ($item->isHit() && $item->get() === 'abcdef-123456') {
- $testHelper->assertPass('The static item caching being disabled, the cache item has been fetched straight from backend.' . $item->get());
- } else {
- $testHelper->assertFail('The static item caching may not have been disabled since the cache item value does not match the expected value.');
- }
-
- /**
- * Cleanup the driver
- */
- $driverInstance->deleteItem($item->getKey());
-} else {
- $testHelper->assertSkip('Test ignored on HHVM builds due to sub-process issues with C.I.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/DriverIO.test.php b/tests/cases/DriverIO.test.php
deleted file mode 100644
index 034dffe8e..000000000
--- a/tests/cases/DriverIO.test.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Entities\DriverIO;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Driver list resolver');
-
-$cache = CacheManager::getInstance('Redis');
-
-for ($i=0; $i<10; $i++) {
- $testHelper->printNoteText(sprintf('Running CRUD tests, loop %d/10', $i));
- $testHelper->runCRUDTests($cache);
-}
-$driverIO = $cache->getIO();
-
-if ($driverIO instanceof DriverIO && $driverIO->getReadHit() && $driverIO->getReadMiss() && $driverIO->getWriteHit()) {
- $testHelper->assertPass('Driver IO entity returned some hit info.');
-} else {
- $testHelper->assertFail('Driver IO entity did not returned some hit info as expected.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/DriverListResolver.test.php b/tests/cases/DriverListResolver.test.php
deleted file mode 100644
index d6e7370ff..000000000
--- a/tests/cases/DriverListResolver.test.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Driver list resolver');
-
-$subClasses = [
- 'Config',
- 'Driver',
- 'Item',
-];
-
-$driverList = CacheManager::getDriverList();
-
-if(count($driverList)){
- foreach ($driverList as $driver) {
- foreach ($subClasses as $subClass) {
- $className = "Phpfastcache\\Drivers\\{$driver}\\{$subClass}";
- if (class_exists($className)) {
- $testHelper->assertPass(sprintf('Found the %s %s class: "%s"', $driver, $subClass, $className));
- } else {
- $testHelper->assertFail(sprintf('Class "%s" not found', $className));
- }
- }
- }
-} else {
- $testHelper->assertFail('Driver list is empty');
-}
-
-
-
-$testHelper->terminateTest();
diff --git a/tests/cases/EventManager.test.php b/tests/cases/EventManager.test.php
deleted file mode 100644
index cb632a2ce..000000000
--- a/tests/cases/EventManager.test.php
+++ /dev/null
@@ -1,94 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Event\EventReferenceParameter;
-use Phpfastcache\EventManager;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidTypeException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('EventManager (Unscoped)');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-$cacheInstance = CacheManager::getInstance($defaultDriver);
-$eventInstance = $cacheInstance->getEventManager();
-$testHelper->debugEvents($eventInstance);
-$eventInstance->onCacheSaveItem(static function (ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item) {
- if ($item->_getData() === 1000) {
- $item->increment(337);
- }
-});
-
-$eventInstance->onCacheItemSet(static function (ExtendedCacheItemInterface $item, EventReferenceParameter $eventReferenceParameter) use ($testHelper) {
- try{
- $eventReferenceParameter->setParameterValue(1000);
- $testHelper->assertPass('The event reference parameter accepted a value type change');
- } catch(PhpfastcacheInvalidTypeException){
- $testHelper->assertFail('The event reference parameter denied a value type change');
- }
-});
-
-$cacheKey = 'testItem';
-$cacheKey2 = 'testItem2';
-
-$item = $cacheInstance->getItem($cacheKey);
-$item->set(false)->expiresAfter(60);
-$cacheInstance->save($item);
-
-if ($cacheInstance->getItem($cacheKey)->get() === 1337) {
- $testHelper->assertPass('The dispatched event executed the custom callback to alter the item');
-} else {
- $testHelper->assertFail("The dispatched event is not working properly, the expected value '1337', got '" . $cacheInstance->getItem($cacheKey)->get() . "'");
-}
-$cacheInstance->clear();
-unset($item);
-$eventInstance->unbindAllEventCallbacks();
-$testHelper->debugEvents($eventInstance);
-
-$eventInstance->onCacheSaveMultipleItems(static function (ExtendedCacheItemPoolInterface $itemPool, EventReferenceParameter $eventReferenceParameter) use ($testHelper) {
- $parameterValue = $eventReferenceParameter->getParameterValue();
-
- try{
- $eventReferenceParameter->setParameterValue(null);
- $testHelper->assertFail('The event reference parameter accepted a value type change');
- } catch(PhpfastcacheInvalidTypeException){
- $testHelper->assertPass('The event reference parameter denied a value type change');
- $eventReferenceParameter->setParameterValue([]);
- }
-
- if (is_array($parameterValue) && count($parameterValue) === 2) {
- $testHelper->assertPass('The event reference parameter returned an array of 2 cache items');
- } else {
- $testHelper->assertFail('The event reference parameter returned an unexpected value');
- }
-});
-
-$item = $cacheInstance->getItem($cacheKey);
-$item2 = $cacheInstance->getItem($cacheKey2);
-$item->set(1000)->expiresAfter(60);
-$item2->set(2000)->expiresAfter(60);
-
-$saveMultipleResult = $cacheInstance->saveMultiple($item, $item2);
-
-if (!$saveMultipleResult) {
- $testHelper->assertPass('Method saveMultiple() returned false since it has nothing to save, as expected.');
-} else {
- $testHelper->assertFail('Method saveMultiple() unexpectedly returned true.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/EventManagerScoped.test.php b/tests/cases/EventManagerScoped.test.php
deleted file mode 100644
index 61efb9e96..000000000
--- a/tests/cases/EventManagerScoped.test.php
+++ /dev/null
@@ -1,136 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Event\EventReferenceParameter;
-use Phpfastcache\EventManager;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidTypeException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('EventManager (Scoped)');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-$filesCacheInstance = CacheManager::getInstance($defaultDriver);
-$redisCacheInstance = CacheManager::getInstance('redis');
-
-$globalEveryEventsEvents = [];
-$filesEveryEventsEventEvents = [];
-$redisEveryEventsEventEvents = [];
-
-$globalGetItemEventManagerCount = 0;
-$filesGetItemEventManagerCount = 0;
-$redisGetItemEventManagerCount = 0;
-
-EventManager::getInstance()->onEveryEvents(static function (string $eventName) use ($testHelper, &$globalEveryEventsEvents) {
- $testHelper->printInfoText(sprintf('[Global] Global "onEveryEvents" has been called for "%s" ', $eventName));
- $globalEveryEventsEvents[$eventName] = ($globalEveryEventsEvents[$eventName] ?? 0) + 1;
-}, 'GlobalEveryEvent');
-
-EventManager::getInstance()->onCacheGetItem(static function (ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item, string $eventName) use ($testHelper, &$globalGetItemEventManagerCount) {
- $testHelper->assertPass('[Global] Global event manager received events from multiple pool instances');
- $globalGetItemEventManagerCount++;
-});
-
-$filesCacheInstance->getEventManager()->onEveryEvents(static function (string $eventName) use ($testHelper, &$filesEveryEventsEventEvents) {
- $testHelper->printInfoText(sprintf('[Files] Scoped "onEveryEvents" has been called for "%s" ', $eventName));
- $filesEveryEventsEventEvents[$eventName] = ($filesEveryEventsEventEvents[$eventName] ?? 0) + 1;
-}, 'GlobalEveryEvent');
-
-
-$filesCacheInstance->getEventManager()->onCacheGetItem(static function (ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item, string $eventName) use ($testHelper, &$filesGetItemEventManagerCount) {
- if($itemPool->getDriverName() === 'Files') {
- $testHelper->assertPass('[Files] Scoped event manager received only events of its own pool instance');
- $filesGetItemEventManagerCount++;
- }
-});
-
-$redisCacheInstance->getEventManager()->onEveryEvents(static function (string $eventName) use ($testHelper, &$redisEveryEventsEventEvents) {
- $testHelper->printInfoText(sprintf('[Redis] Scoped "onEveryEvents" has been called for "%s" ', $eventName));
- $redisEveryEventsEventEvents[$eventName] = ($redisEveryEventsEventEvents[$eventName] ?? 0) + 1;
-}, 'GlobalEveryEvent');
-
-$redisCacheInstance->getEventManager()->onCacheGetItem(static function (ExtendedCacheItemPoolInterface $itemPool, ExtendedCacheItemInterface $item, string $eventName) use ($testHelper, &$redisGetItemEventManagerCount) {
- if($itemPool->getDriverName() === 'Redis') {
- $testHelper->assertPass('[Files] Scoped event manager received only events of its own pool instance');
- $redisGetItemEventManagerCount++;
- }
-});
-
-// Trigger "CacheGetItem" event
-$filesItem = $filesCacheInstance->getItem('FilesItem')->set('LoremIpsum');
-$redisItem = $redisCacheInstance->getItem('RedisItem')->set('LoremIpsum');
-
-$testHelper->printNewLine();
-if($globalGetItemEventManagerCount === 2) {
- $testHelper->assertPass('[Global] Unscoped listener has been fired exactly 2 times');
-} else {
- $testHelper->assertFail(sprintf('[Global] Unscoped listener has been fired exactly %s times instead of 2.', $globalGetItemEventManagerCount));
-}
-
-if($filesGetItemEventManagerCount === 1) {
- $testHelper->assertPass('[Files] Scoped listener has been fired exactly 1 time');
-} else {
- $testHelper->assertFail(sprintf('[Files] Scoped listener has been fired exactly %s times instead of 1.', $filesGetItemEventManagerCount));
-}
-
-if($redisGetItemEventManagerCount === 1) {
- $testHelper->assertPass('[Redis] Scoped listener has been fired exactly 1 time');
-} else {
- $testHelper->assertFail(sprintf('[Redis] Scoped listener has been fired exactly %s times instead of 1.', $redisGetItemEventManagerCount));
-}
-
-if($globalEveryEventsEvents['CacheGetItem'] === 2 && $globalEveryEventsEvents['CacheItemSet'] === 2) {
- $testHelper->assertPass('[Global] Unscoped listener has been fired exactly 2 times each CacheGetItem and CacheItemSet');
-} else {
- $testHelper->assertFail(
- sprintf(
- '[Global] Unscoped listener has been fired exactly %s times CacheGetItem and %s times CacheItemSet.',
- $globalEveryEventsEvents['CacheGetItem'] ?? 0,
- $globalEveryEventsEvents['CacheItemSet'] ?? 0,
- )
- );
-}
-
-if($filesEveryEventsEventEvents['CacheGetItem'] === 1 && $filesEveryEventsEventEvents['CacheItemSet'] === 1) {
- $testHelper->assertPass('[Files] Scoped listener has been fired exactly 1 times each CacheGetItem and CacheItemSet');
-} else {
- $testHelper->assertFail(
- sprintf(
- '[Files] Scoped listener has been fired exactly %s times CacheGetItem and %s times CacheItemSet.',
- $filesEveryEventsEventEvents['CacheGetItem'] ?? 0,
- $filesEveryEventsEventEvents['CacheItemSet'] ?? 0,
- )
- );
-}
-
-
-if($redisEveryEventsEventEvents['CacheGetItem'] === 1 && $redisEveryEventsEventEvents['CacheItemSet'] === 1) {
- $testHelper->assertPass('[Redis] Scoped listener has been fired exactly 1 times each CacheGetItem and CacheItemSet');
-} else {
- $testHelper->assertFail(
- sprintf(
- '[Redis] Scoped listener has been fired exactly %s times CacheGetItem and %s times CacheItemSet.',
- $redisEveryEventsEventEvents['CacheGetItem'] ?? 0,
- $redisEveryEventsEventEvents['CacheItemSet'] ?? 0,
- )
- );
-}
-
-
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ExtensionManager.test.php b/tests/cases/ExtensionManager.test.php
deleted file mode 100644
index bdff618af..000000000
--- a/tests/cases/ExtensionManager.test.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverNotFoundException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Exceptions\PhpfastcacheExtensionNotInstalledException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-require_once __DIR__ . '/../mock/Autoload.php';
-$testHelper = new TestHelper('Apcu test (CRUD)');
-
-try {
- $pool = CacheManager::getInstance('Arangodb');
- $testHelper->assertFail('CacheManager didnt thrown an Exception');
-} catch (PhpfastcacheExtensionNotInstalledException) {
- $testHelper->assertPass('CacheManager thrown a PhpfastcacheExtensionNotInstalledException.');
-} catch (\Throwable $e) {
- $testHelper->assertFail('CacheManager thrown a ' . $e::class);
-}
-
-try {
- $pool = CacheManager::getInstance(bin2hex(random_bytes(8)));
- $testHelper->assertFail('CacheManager didnt thrown an Exception');
-} catch (PhpfastcacheDriverNotFoundException $e) {
- if ($e::class === PhpfastcacheDriverNotFoundException::class) {
- $testHelper->assertPass('CacheManager thrown a PhpfastcacheDriverNotFoundException.');
- } else {
- $testHelper->assertFail('CacheManager thrown a ' . $e::class);
- }
-} catch (\Throwable $e) {
- $testHelper->assertFail('CacheManager thrown a ' . $e::class);
-}
-
-try {
- \Phpfastcache\ExtensionManager::registerExtension(
- 'Extensiontest',
- \Phpfastcache\Extensions\Drivers\Extensiontest\Driver::class
- );
- $testHelper->assertPass('Registered a test extension.');
-} catch (PhpfastcacheInvalidArgumentException) {
- $testHelper->assertFail('Failed to register a test extension.');
-}
-
-try {
- CacheManager::getInstance('Extensiontest');
- $testHelper->assertPass('Retrieved a test extension cache pool.');
-} catch (PhpfastcacheDriverNotFoundException) {
- $testHelper->assertFail('Failed to retrieve a test extension cache pool.');
-}
-
-
-$testHelper->terminateTest();
diff --git a/tests/cases/GetAllItems.test.php b/tests/cases/GetAllItems.test.php
deleted file mode 100644
index 239714eef..000000000
--- a/tests/cases/GetAllItems.test.php
+++ /dev/null
@@ -1,145 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Event\Event;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Exceptions\PhpfastcacheDriverConnectException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Exceptions\PhpfastcacheUnsupportedMethodException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Tests\Config\ConfigFactory;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Event\EventReferenceParameter;
-use Phpfastcache\EventManager;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-
-$testHelper = new TestHelper('Testing getAllItems() method');
-
-/**
- * https://github.com/PHPSocialNetwork/phpfastcache/wiki/%5BV5%CB%96%5D-Fetching-all-keys
- */
-EventManager::getInstance()->on([Event::CACHE_GET_ALL_ITEMS], static function(ExtendedCacheItemPoolInterface $driver, EventReferenceParameter $referenceParameter) use ($testHelper, &$eventFlag){
- $callback = $referenceParameter->getParameterValue();
- $referenceParameter->setParameterValue(function(string $pattern) use ($callback, &$eventFlag, $testHelper) {
- $eventFlag = true;
- $testHelper->printInfoText('The custom event Event::CACHE_GET_ALL_ITEMS has been called.');
- return $callback($pattern);
- });
-});
-
-$drivers = [
- 'Memory',
- 'Predis',
- 'Redis',
- 'RedisCluster',
-];
-
-$driversConfigs = ConfigFactory::getDefaultConfigs();
-foreach ($drivers as $i => $driverName) {
- $testHelper->printNoteText(
- sprintf(
- "Testing %s against getAllItems() method (%d /%d )",
- strtoupper($driverName),
- $i + 1,
- count($drivers),
- )
- );
- try {
- $poolCache = CacheManager::getInstance($driverName, $driversConfigs[$driverName] ?? null);
- } catch (PhpfastcacheDriverConnectException|PhpfastcacheDriverCheckException $e){
- $testHelper->assertSkip(
- sprintf(
- "Skipping %s against getAllItems() method (Caught %s : %s )",
- strtoupper($driverName),
- $e::class,
- $e->getMessage(),
- )
- );
- $testHelper->printNewLine();
- continue;
- }
-
- $eventFlag = false;
-
- $poolCache->clear();
- $item1 = $poolCache->getItem('cache-test1');
- $item2 = $poolCache->getItem('cache-test2');
- $item3 = $poolCache->getItem('cache-test3');
-
- $item1->set('test1')->expiresAfter(3600);
- $item2->set('test2')->expiresAfter(3600);
- $item3->set('test3')->expiresAfter(3600);
-
- $poolCache->saveMultiple($item1, $item2, $item3);
- $poolCache->detachAllItems();
- unset($item1, $item2, $item3);
-
-
- $items = $poolCache->getAllItems();
- $itemCount = count($items);
- if ($itemCount === 3) {
- $testHelper->assertPass('getAllItems() returned 3 cache items as expected.');
- } else {
- $testHelper->assertFail(sprintf('getAllItems() unexpectedly returned %d cache items.', $itemCount));
- }
-
- foreach ($items as $key => $item) {
- if ($item->isHit()) {
- $testHelper->assertPass(sprintf('Item #%s is hit.', $item->getKey()));
- } else {
- $testHelper->assertFail(sprintf('Item #%s is not hit.', $item->getKey()));
- }
-
- if ($key === $item->getKey()) {
- $testHelper->assertPass(sprintf('Cache item #%s object is identified by its cache key.', $item->getKey()));
- } else {
- $testHelper->assertFail(sprintf('Cache item #%s object is identified by "%s".', $item->getKey(), $key));
- }
- }
-
- $testHelper->printNoteText("Testing getAllItems() method (with pattern) ");
-
- try {
- $items = $poolCache->getAllItems('*test1*');
- if (count($items) === 1) {
- $testHelper->assertPass('Found 1 item using $pattern argument');
- } else {
- $testHelper->assertFail(sprintf('Found %d items using $pattern argument', count($items)));
- }
-
- } catch (PhpfastcacheInvalidArgumentException) {
- $testHelper->assertSkip("Pattern argument unsupported by $driverName driver");
- }
-
- $testHelper->printNewLine(1);
-}
-
-$filesCache = CacheManager::getInstance('Files');
-
-try {
- $filesCache->getAllItems();
-} catch (PhpfastcacheUnsupportedMethodException) {
- $testHelper->assertPass('getAllItems() is not supported by Files driver as expected and thrown a PhpfastcacheUnsupportedMethodException.');
-} catch (\Throwable $e) {
- $testHelper->assertFail(sprintf('getAllItems() returned a exception "%s" instead of a PhpfastcacheUnsupportedMethodException.', $e::class));
-}
-
-if ($eventFlag) {
- $testHelper->assertPass('The Event::CACHE_GET_ALL_ITEMS has been triggered allowing the callback to be customized.');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ItemTags.test.php b/tests/cases/ItemTags.test.php
deleted file mode 100644
index 9d0a2707a..000000000
--- a/tests/cases/ItemTags.test.php
+++ /dev/null
@@ -1,401 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Core\Item\TaggableCacheItemInterface;
-use Phpfastcache\Core\Pool\TaggableCacheItemPoolInterface;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Items tags features');
-$defaultDriver = (!empty($argv[ 1 ]) ? ucfirst($argv[ 1 ]) : 'Redis');
-$driverInstance = CacheManager::getInstance($defaultDriver);
-
-$driverInstance->clear();
-/**
- * Item tag test // Init tags/items
- */
-
-$createItemsCallback = static function () use ($driverInstance) {
- $item1 = $driverInstance->getItem('tag-test1');
- $item2 = $driverInstance->getItem('tag-test2');
- $item3 = $driverInstance->getItem('tag-test3');
-
- $item1->set('item-test_1')
- ->expiresAfter(600)
- ->addTag('tag-test_1')
- ->addTag('tag-test_all')
- ->addTag('tag-test_all2')
- ->addTag('tag-test_all3');
-
- $item2->set('item-test_2')
- ->expiresAfter(600)
- ->addTag('tag-test_1')
- ->addTag('tag-test_2')
- ->addTag('tag-test_all')
- ->addTag('tag-test_all2')
- ->addTag('tag-test_all3');
-
- $item3->set('item-test_3')
- ->expiresAfter(600)
- ->addTag('tag-test_1')
- ->addTag('tag-test_2')
- ->addTag('tag-test_3')
- ->addTag('tag-test_all')
- ->addTag('tag-test_all2')
- ->addTag('tag-test_all3')
- ->addTag('tag-test_all4');
-
- $driverInstance->saveMultiple($item1, $item2, $item3);
-
- return [
- 'item1' => $item1,
- 'item2' => $item2,
- 'item3' => $item3
- ];
-};
-
-$testHelper->printNoteText('##### TESTING POOL TAGS GETTERS');
-
-/**
- * Item tag test // Step 1
- */
-$testHelper->printNewLine()->printText('#1 Testing getter: getItemsByTag() with strategy TAG_STRATEGY_ONE // Expecting 3 results');
-$createItemsCallback();
-
-$tagsItems = $driverInstance->getItemsByTag('tag-test_all', TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE);
-if (is_array($tagsItems)) {
- if (count($tagsItems) === 3) {
- foreach ($tagsItems as $tagsItem) {
- if (!in_array($tagsItem->getKey(), ['tag-test1', 'tag-test2', 'tag-test3'])) {
- $testHelper->assertFail('STEP#1 // Got unexpected tagged item key:' . $tagsItem->getKey());
- goto itemTagTest2;
- }
- }
- $testHelper->assertPass('STEP#1 // Successfully retrieved 3 tagged item keys');
- } else {
- $testHelper->assertFail('STEP#1 //Got wrong count of item:' . count($tagsItems));
- goto itemTagTest2;
- }
-} else {
- $testHelper->assertFail('STEP#1 // Expected $tagsItems to be an array, got: ' . gettype($tagsItems));
- goto itemTagTest2;
-}
-
-/**
- * Item tag test // Step 2
- */
-itemTagTest2:
-$testHelper->printNewLine()->printText('#2 Testing getter: getItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting 3 results');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-
-$tagsItems = $driverInstance->getItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3'], TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-if (is_array($tagsItems)) {
- if (count($tagsItems) === 3) {
- foreach ($tagsItems as $tagsItem) {
- if (!in_array($tagsItem->getKey(), ['tag-test1', 'tag-test2', 'tag-test3'])) {
- $testHelper->assertFail('STEP#2 // Got unexpected tagged item key:' . $tagsItem->getKey());
- goto itemTagTest3;
- }
- }
- $testHelper->assertPass('STEP#2 // Successfully retrieved 3 tagged item key');
- } else {
- $testHelper->assertFail('STEP#2 // Got wrong count of item:' . count($tagsItems));
- goto itemTagTest3;
- }
-} else {
- $testHelper->assertFail('STEP#2 // Expected $tagsItems to be an array, got: ' . gettype($tagsItems));
- goto itemTagTest3;
-}
-
-/**
- * Item tag test // Step 3
- */
-itemTagTest3:
-$testHelper->printNewLine()->printText('#3 Testing getter: getItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting 1 result');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-
-$tagsItems = $driverInstance->getItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3', 'tag-test_all4'], TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-if (is_array($tagsItems)) {
- if (count($tagsItems) === 1) {
- if (isset($tagsItems['tag-test3'])) {
- if ($tagsItems['tag-test3']->getKey() !== 'tag-test3') {
- $testHelper->assertFail('STEP#3 // Got unexpected tagged item key:' . $tagsItems['tag-test3']->getKey());
- goto itemTagTest4;
- }
- $testHelper->assertPass('STEP#3 // Successfully retrieved 1 tagged item keys');
- } else {
- $testHelper->assertFail('STEP#3 // Got wrong array key, expected "tag-test3", got "' . key($tagsItems) . '"');
- goto itemTagTest4;
- }
- } else {
- $testHelper->assertFail('STEP#3 // Got wrong count of item:' . count($tagsItems));
- goto itemTagTest4;
- }
-} else {
- $testHelper->assertFail('STEP#3 // Expected $tagsItems to be an array, got: ' . gettype($tagsItems));
- goto itemTagTest4;
-}
-
-/**
- * Item tag test // Step 4
- */
-itemTagTest4:
-$testHelper->printNewLine()->printText('#4 Testing deleter: deleteItemsByTag() // Expecting no item left');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-$driverInstance->deleteItemsByTag('tag-test_all');
-
-if (count($driverInstance->getItemsByTag('tag-test_all')) > 0) {
- $testHelper->assertFail('[FAIL] STEP#4 // Getter getItemsByTag() found item(s), possible memory leak');
-} else {
- $testHelper->assertPass('STEP#4 // Getter getItemsByTag() found no item');
-}
-
-$i = 0;
-while (++$i <= 3) {
- if ($driverInstance->getItem("tag-test{$i}")->isHit()) {
- $testHelper->assertFail("STEP#4 // Item 'tag-test{$i}' should've been deleted and is still in cache storage");
- } else {
- $testHelper->assertPass("STEP#4 // Item 'tag-test{$i}' have been deleted and is no longer in cache storage");
- }
-}
-
-/**
- * Item tag test // Step 5
- */
-itemTagTest5:
-$testHelper->printNewLine()->printText('#5 Testing deleter: deleteItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting no item left');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-
-$driverInstance->deleteItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3'], TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-if (count($driverInstance->getItemsByTag('tag-test_all')) > 0) {
- $testHelper->assertFail('STEP#5 // Getter getItemsByTag() found item(s), possible memory leak');
-} else {
- $testHelper->assertPass('STEP#5 // Getter getItemsByTag() found no item');
-}
-
-$i = 0;
-while (++$i <= 3) {
- if ($driverInstance->getItem("tag-test{$i}")->isHit()) {
- $testHelper->assertFail("STEP#5 // Item 'tag-test{$i}' should've been deleted and is still in cache storage");
- } else {
- $testHelper->assertPass("STEP#5 // Item 'tag-test{$i}' have been deleted and is no longer in cache storage");
- }
-}
-
-/**
- * Item tag test // Step 6
- */
-itemTagTest6:
-$testHelper->printNewLine()->printText('#6 Testing deleter: deleteItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting a specific item to be deleted');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-
-/**
- * Only item 'item-test_3' got all those tags
- */
-$driverInstance->deleteItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3', 'tag-test_all4'], TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-if ($driverInstance->getItem('item-test_3')->isHit()) {
- $testHelper->assertFail('STEP#6 // Getter getItem() found item \'item-test_3\', possible memory leak');
-} else {
- $testHelper->assertPass('STEP#6 // Getter getItem() did not found item \'item-test_3\'');
-}
-
-/**
- * Item tag test // Step 7
- */
-itemTagTest7:
-$testHelper->printNewLine()->printText('#7 Testing appender: appendItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting items value to get an appended part of string');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-$appendStr = '$*#*$';
-$driverInstance->appendItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3'], $appendStr, TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-foreach ($driverInstance->getItems(['tag-test1', 'tag-test2', 'tag-test3']) as $item) {
- if (strpos($item->get(), $appendStr) === false) {
- $testHelper->assertFail("STEP#7 // Item '{$item->getKey()}' does not have the string part '{$appendStr}' in it's value");
- } else {
- $testHelper->assertPass("STEP#7 // Item 'tag-test{$item->getKey()}' does have the string part '{$appendStr}' in it's value");
- }
-}
-
-/**
- * Item tag test // Step 7
- */
-itemTagTest8:
-$testHelper->printNewLine()->printText('#8 Testing prepender: prependItemsByTags() with strategy TAG_STRATEGY_ALL // Expecting items value to get a prepended part of string');
-$driverInstance->deleteItems(['item-test_1', 'item-test_2', 'item-test_3']);
-$createItemsCallback();
-$prependStr = '&+_+&';
-$driverInstance->prependItemsByTags(['tag-test_all', 'tag-test_all2', 'tag-test_all3'], $prependStr, TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL);
-
-foreach ($driverInstance->getItems(['tag-test1', 'tag-test2', 'tag-test3']) as $item) {
- if (strpos($item->get(), $prependStr) === false) {
- $testHelper->assertFail("STEP#8 // Item '{$item->getKey()}' does not have the string part '{$prependStr}' in it's value");
- } else {
- $testHelper->assertPass("STEP#8 // Item 'tag-test{$item->getKey()}' does have the string part '{$prependStr}' in it's value");
- }
-}
-
-
-
-/**
- * Item tag test // Step 9
- */
-itemTagTest9:
-$testHelper->printNewLine()->printText('#9 Testing getter: getItemsByTags() with strategy TAG_STRATEGY_ONLY // Expecting 1 result');
-$driverInstance->clear();
-$createItemsCallback();
-
-$tagsItems = $driverInstance->getItemsByTags(['tag-test_1', 'tag-test_all', 'tag-test_all2', 'tag-test_all3'], TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY);
-
-if (is_array($tagsItems)) {
- if (count($tagsItems) === 1) {
- if (isset($tagsItems['tag-test1'])) {
- if ($tagsItems['tag-test1']->getKey() !== 'tag-test1') {
- $testHelper->assertFail('STEP#9 // Got unexpected tagged item key:' . $tagsItems['tag-test1']->getKey());
- goto itemTagTest10;
- }
- $testHelper->assertPass('STEP#9 // Successfully retrieved 1 tagged item keys');
- } else {
- $testHelper->assertFail('STEP#9 // Got wrong array key, expected "tag-test3", got "' . key($tagsItems) . '"');
- goto itemTagTest10;
- }
- } else {
- $testHelper->assertFail('STEP#9 // Got wrong count of item:' . count($tagsItems));
- goto itemTagTest10;
- }
-} else {
- $testHelper->assertFail('STEP#9 // Expected $tagsItems to be an array, got: ' . gettype($tagsItems));
- goto itemTagTest10;
-}
-
-/**
- * Item tag test // Step 10
- */
-itemTagTest10:
-$testHelper->printNewLine()->printText('#10 Testing getter: getItemsByTags() with strategy TAG_STRATEGY_ONLY // Expecting 0 result');
-$driverInstance->clear();
-$createItemsCallback();
-
-$tagsItems = $driverInstance->getItemsByTags(['tag-test_1', 'tag-test_all', 'tag-test_all2', /*'tag-test_all3'*/], TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY);
-
-if (is_array($tagsItems)) {
- if (count($tagsItems) === 0) {
- $testHelper->assertPass('STEP#10 // Successfully retrieved 0 tagged item keys');
- } else {
- $testHelper->assertFail('STEP#10 // Got wrong count of item:' . count($tagsItems));
- goto itemTagTest11;
- }
-} else {
- $testHelper->assertFail('STEP#10 // Expected $tagsItems to be an array, got: ' . gettype($tagsItems));
- goto itemTagTest11;
-}
-
-itemTagTest11:
-
-$testHelper->printNewLine()->printNoteText('##### TESTING ITEM TAGS HASSERS');
-
-$testHelper->printNewLine()->printText('#1 Testing ExtendedCacheItemInterface::hasTag()');
-$driverInstance->clear();
-$createItemsCallback();
-$cacheItem = $driverInstance->getItem('tag-test1');
-
-if ($cacheItem->hasTag('tag-test_1')) {
- $testHelper->assertPass('STEP#1 // Successfully found the expected tag');
-} else {
- $testHelper->assertFail('STEP#1 // Failed finding the expected tag');
-}
-
-if (!$cacheItem->hasTag('non_existing_tag')) {
- $testHelper->assertPass('STEP#2 // Successfully not found an unknown tag');
-} else {
- $testHelper->assertFail('STEP#2 // Failed not finding an unknown tag');
-}
-
-
-$testHelper->printNewLine()->printText('#2 Testing ExtendedCacheItemInterface::hasTags() with strategy "TAG_STRATEGY_ONE"');
-$driverInstance->clear();
-$createItemsCallback();
-$cacheItem = $driverInstance->getItem('tag-test2');
-
-if ($cacheItem->hasTags(['tag-test_1', 'tag-test_2'], TaggableCacheItemInterface::TAG_STRATEGY_ONE)) {
- $testHelper->assertPass('STEP#1 // Successfully finding both the known tags');
-} else {
- $testHelper->assertFail('STEP#1 // Failed finding both the known tags');
-}
-
-if ($cacheItem->hasTags(['tag-test_1', 'non_existing_tag'], TaggableCacheItemInterface::TAG_STRATEGY_ONE)) {
- $testHelper->assertPass('STEP#2 // Successfully finding one of the known tags');
-} else {
- $testHelper->assertFail('STEP#2 // Failed finding one of the known tags');
-}
-
-if (!$cacheItem->hasTags(['non_existing_tag', 'non_existing_tag2'], TaggableCacheItemInterface::TAG_STRATEGY_ONE)) {
- $testHelper->assertPass('STEP#3 // Successfully not finding one of the unknown tags');
-} else {
- $testHelper->assertFail('STEP#3 // Failed not finding one of the unknown tags');
-}
-
-$testHelper->printNewLine()->printText('#3 Testing ExtendedCacheItemInterface::hasTags() with strategy "TAG_STRATEGY_ALL"');
-$driverInstance->clear();
-$createItemsCallback();
-$cacheItem = $driverInstance->getItem('tag-test2');
-
-if ($cacheItem->hasTags(['tag-test_1', 'tag-test_2'], TaggableCacheItemInterface::TAG_STRATEGY_ALL)) {
- $testHelper->assertPass('STEP#1 // Successfully found both the known tags');
-} else {
- $testHelper->assertFail('STEP#1 // Failed finding both the known tags');
-}
-
-if ($cacheItem->hasTags(['tag-test_1', 'non_existing_tag'], TaggableCacheItemInterface::TAG_STRATEGY_ALL)) {
- $testHelper->assertPass('STEP#2 // Successfully not finding both of the known and unknown tags');
-} else {
- $testHelper->assertPass('STEP#2 // Failed not finding both of the known and unknown tags');
-}
-
-
-$testHelper->printNewLine()->printText('#4 Testing ExtendedCacheItemInterface::hasTags() with strategy "TAG_STRATEGY_ONLY"');
-$driverInstance->clear();
-$createItemsCallback();
-$cacheItem = $driverInstance->getItem('tag-test3');
-
-if ($cacheItem->hasTags($cacheItem->getTags(), TaggableCacheItemInterface::TAG_STRATEGY_ONLY)) {
- $testHelper->assertPass('STEP#1 // Successfully matching only and exclusively the known tags');
-} else {
- $testHelper->assertFail('STEP#1 // Failed matching only and exclusively the known tags');
-}
-
-if (!$cacheItem->hasTags(['tag-test_1', 'tag-test_2', /*'tag-test_3',*/ 'tag-test_all', 'tag-test_all2', 'tag-test_all3', 'tag-test_all4'], TaggableCacheItemInterface::TAG_STRATEGY_ONLY)) {
- $testHelper->assertPass('STEP#1 // Successfully not matching only the known tags with some of them omitted');
-} else {
- $testHelper->assertPass('STEP#1 // Failed not matching only the known tags with some of them omitted');
-}
-
-if (!$cacheItem->hasTags(array_merge($cacheItem->getTags(), ['non_existing_tag']), TaggableCacheItemInterface::TAG_STRATEGY_ONLY)) {
- $testHelper->assertPass('STEP#1 // Successfully matching only the known tags plus an unknown tag');
-} else {
- $testHelper->assertFail('STEP#1 // Failed matching only the known tags plus an unknown tag');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Memcache.test.php b/tests/cases/Memcache.test.php
deleted file mode 100644
index cf995df20..000000000
--- a/tests/cases/Memcache.test.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Memcache\Config as MemcacheConfig;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Memcache driver');
-
-
-$config = new MemcacheConfig([
- 'servers' => [
- [
- 'path' => '',
- 'host' => '127.0.0.1',
- 'port' => 11211,
- ]
- ]
-]);
-$config->setItemDetailedDate(true);
-$cacheInstance = CacheManager::getInstance('Memcache', $config);
-$testHelper->runCRUDTests($cacheInstance);
-$testHelper->terminateTest();
diff --git a/tests/cases/Memcached.test.php b/tests/cases/Memcached.test.php
deleted file mode 100644
index 51d8e4a78..000000000
--- a/tests/cases/Memcached.test.php
+++ /dev/null
@@ -1,88 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\Drivers\Memcached\Config as MemcachedConfig;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Memcached');
-
-$cacheInstanceDefSyntax = CacheManager::getInstance('Memcached');
-
-$cacheInstanceOldSyntax = CacheManager::getInstance('Memcached', new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'port' => 11211,
- 'saslUser' => null,
- 'saslPassword' => null,
- ]
- ]
-]));
-
-$cacheInstanceNewSyntax = CacheManager::getInstance('Memcached', new MemcachedConfig([
- 'host' => '127.0.0.1',
- 'port' => 11211,
-]));
-
-$cacheKey = 'cacheKey';
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-
-$cacheItem = $cacheInstanceDefSyntax->getItem($cacheKey);
-$cacheItem->set($RandomCacheValue)->expiresAfter(600);
-$cacheInstanceDefSyntax->save($cacheItem);
-unset($cacheItem);
-$cacheInstanceDefSyntax->detachAllItems();
-
-
-$cacheItem = $cacheInstanceOldSyntax->getItem($cacheKey);
-$cacheItem->set($RandomCacheValue)->expiresAfter(600);
-$cacheInstanceOldSyntax->save($cacheItem);
-unset($cacheItem);
-$cacheInstanceOldSyntax->detachAllItems();
-
-$cacheItem = $cacheInstanceNewSyntax->getItem($cacheKey);
-$cacheItem->set($RandomCacheValue)->expiresAfter(600);
-$cacheInstanceNewSyntax->save($cacheItem);
-unset($cacheItem);
-$cacheInstanceNewSyntax->detachAllItems();
-
-
-if ($cacheInstanceDefSyntax->getItem($cacheKey)->isHit()) {
- $testHelper->assertPass('The default Memcached syntax is working well');
-} else {
- $testHelper->assertFail('The default Memcached syntax is not working');
-}
-
-if ($cacheInstanceOldSyntax->getItem($cacheKey)->isHit()) {
- $testHelper->assertPass('The old Memcached syntax is working well');
-} else {
- $testHelper->assertFail('The old Memcached syntax is not working');
-}
-
-if ($cacheInstanceNewSyntax->getItem($cacheKey)->isHit()) {
- $testHelper->assertPass('The new Memcached syntax is working well');
-} else {
- $testHelper->assertFail('The new Memcached syntax is not working');
-}
-
-$cacheInstanceDefSyntax->clear();
-$cacheInstanceOldSyntax->clear();
-$cacheInstanceNewSyntax->clear();
-
-$testHelper->runCRUDTests($cacheInstanceNewSyntax);
-$testHelper->terminateTest();
diff --git a/tests/cases/Memory.test.php b/tests/cases/Memory.test.php
deleted file mode 100644
index 7aebcdaaa..000000000
--- a/tests/cases/Memory.test.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Memstatic driver');
-$cacheInstance = CacheManager::getInstance('Memory');
-
-$testHelper->runCRUDTests($cacheInstance);
-$testHelper->terminateTest();
diff --git a/tests/cases/NewCacheInstance.test.php b/tests/cases/NewCacheInstance.test.php
deleted file mode 100644
index bd1f67651..000000000
--- a/tests/cases/NewCacheInstance.test.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('New cache instance');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-/**
- * Testing memcached as it is declared in .travis.yml
- */
-$driverInstance = CacheManager::getInstance($defaultDriver);
-
-if (!is_object($driverInstance) || !($driverInstance instanceof ExtendedCacheItemPoolInterface)) {
- $testHelper->assertFail('CacheManager::getInstance() returned wrong data hint:' . gettype($driverInstance));
-} else {
- $testHelper->assertPass('CacheManager::getInstance() returned an expected object that implements ExtendedCacheItemPoolInterface');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Predis.test.php b/tests/cases/Predis.test.php
deleted file mode 100644
index 635b774cd..000000000
--- a/tests/cases/Predis.test.php
+++ /dev/null
@@ -1,32 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Predis\Config as PredisConfig;
-use Redis as RedisClient;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Predis bundled client');
-
-try {
- $cacheInstance = CacheManager::getInstance('Predis', new PredisConfig());
- $testHelper->runCRUDTests($cacheInstance);
-} catch (\RedisException $e) {
- $testHelper->assertFail('A Redis exception occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/PredisCustomClient.test.php b/tests/cases/PredisCustomClient.test.php
deleted file mode 100644
index 4e3e34787..000000000
--- a/tests/cases/PredisCustomClient.test.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Exceptions\PhpfastcacheDriverConnectException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Predis\Config as PredisConfig;
-use Predis\Client as PredisClient;
-use Predis\Connection\ConnectionException as PredisConnectionException;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Predis custom client');
-
-try {
- if (!class_exists(PredisClient::class)) {
- throw new PhpfastcacheDriverCheckException('Predis library is not installed');
- }
-
- $testHelper->mutePhpNotices();
-
- try{
- $predisClient = new PredisClient([
- 'host' => '127.0.0.1',
- 'port' => 6379,
- 'password' => null,
- 'database' => 0,
- ]);
- $predisClient->connect();
- }catch (PredisConnectionException $e){
- throw new PhpfastcacheDriverConnectException('Redis server unreachable.');
- }
-
- $cacheInstance = CacheManager::getInstance('Predis', (new PredisConfig())->setPredisClient($predisClient));
- $testHelper->runCRUDTests($cacheInstance);
-} catch (\RedisException $e) {
- $testHelper->assertFail('A Predis exception occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Psr16Adapter.test.php b/tests/cases/Psr16Adapter.test.php
deleted file mode 100644
index 383033630..000000000
--- a/tests/cases/Psr16Adapter.test.php
+++ /dev/null
@@ -1,132 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Helper\Psr16Adapter;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Psr16Adapter helper');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-$Psr16Adapter = new Psr16Adapter($defaultDriver);
-
-$value = str_shuffle(uniqid('pfc', true));
-
-if (!$Psr16Adapter->has('test-key')) {
- $testHelper->assertPass('1/9 Psr16 hasser returned expected boolean (false)');
-} else {
- $testHelper->assertFail('1/9 Psr16 hasser returned unexpected boolean (true)');
-}
-
-$testHelper->printNewLine()->printText('Setting up value to "test-key"...')->printNewLine();
-$Psr16Adapter->set('test-key', $value);
-
-if ($Psr16Adapter->get('test-key') === $value) {
- $testHelper->assertPass('2/9 Psr16 getter returned expected value: ' . $value);
-} else {
- $testHelper->assertFail('2/9 Psr16 getter returned unexpected value: ' . $value);
-}
-
-$testHelper->printNewLine()->printText('Deleting key "test-key"...')->printNewLine();
-$Psr16Adapter->delete('test-key');
-
-if (!$Psr16Adapter->has('test-key')) {
- $testHelper->assertPass('3/9 Psr16 hasser returned expected boolean (false)');
-} else {
- $testHelper->assertFail('3/9 Psr16 hasser returned unexpected boolean (true)');
-}
-
-$testHelper->printNewLine()->printText('Setting up value to "test-key, test-key2, test-key3"...')->printNewLine();
-$Psr16Adapter->setMultiple([
- 'test-key' => $value,
- 'test-key2' => $value,
- 'test-key3' => $value
-]);
-
-
-$values = $Psr16Adapter->getMultiple(['test-key', 'test-key2', 'test-key3']);
-if (count(array_filter($values)) === 3) {
- $testHelper->assertPass('4/9 Psr16 multiple getters returned expected values (3)');
-} else {
- $testHelper->assertFail('4/9 Psr16 getters(3) returned unexpected values.');
-}
-
-$values = $Psr16Adapter->getMultiple(new ArrayObject(['test-key', 'test-key2', 'test-key3']));
-if (count(array_filter($values)) === 3) {
- $testHelper->assertPass('5/9 Psr16 multiple getters with Traversable returned expected values (3)');
-} else {
- $testHelper->assertFail('5/9 Psr16 getters(3) with Traversable returned unexpected values.');
-}
-
-$testHelper->printNewLine()->printText('Clearing whole cache ...')->printNewLine();
-$Psr16Adapter->clear();
-
-$testHelper->printText('Setting up value to "test-key, test-key2, test-key3"...')->printNewLine();
-$Psr16Adapter->setMultiple([
- 'test-key' => $value,
- 'test-key2' => $value,
- 'test-key3' => $value
-]);
-
-if ($Psr16Adapter->has('test-key') && $Psr16Adapter->has('test-key2') && $Psr16Adapter->has('test-key3')) {
- $testHelper->assertPass('6/9 Psr16 hasser returned expected booleans (true)');
-} else {
- $testHelper->assertFail('6/9 Psr16 hasser returned one or more unexpected boolean (false)');
-}
-
-$testHelper->printNewLine()->printText('Clearing whole cache ...')->printNewLine();
-$Psr16Adapter->clear();
-
-$testHelper->printText('Setting multiple values using a Traversable to "test-key, test-key2, test-key3"...')->printNewLine();
-$Psr16Adapter->setMultiple(new ArrayObject([
- 'test-key' => $value,
- 'test-key2' => $value,
- 'test-key3' => $value
-]));
-
-if ($Psr16Adapter->has('test-key') && $Psr16Adapter->has('test-key2') && $Psr16Adapter->has('test-key3')) {
- $testHelper->assertPass('7/9 Psr16 hasser returned expected booleans (true)');
-} else {
- $testHelper->assertFail('7/9 Psr16 hasser returned one or more unexpected boolean (false)');
-}
-
-$testHelper->printNewLine()->printText('Deleting up keys "test-key, test-key2, test-key3"...')->printNewLine();
-$Psr16Adapter->deleteMultiple(['test-key', 'test-key2', 'test-key3']);
-
-if (!$Psr16Adapter->has('test-key') && !$Psr16Adapter->has('test-key2') && !$Psr16Adapter->has('test-key3')) {
- $testHelper->assertPass('8/9 Psr16 hasser returned expected booleans (false)');
-} else {
- $testHelper->assertFail('8/9 Psr16 hasser returned one or more unexpected boolean (true)');
-}
-
-$testHelper->printNewLine()->printText('Clearing whole cache ...')->printNewLine();
-$Psr16Adapter->clear();
-$testHelper->printText('Setting up value to "test-key, test-key2, test-key3"...')->printNewLine();
-$Psr16Adapter->setMultiple([
- 'test-key' => $value,
- 'test-key2' => $value,
- 'test-key3' => $value
-]);
-
-$testHelper->printText('Deleting up keys "test-key, test-key2, test-key3"... from a Traversable')->printNewLine();
-$traversable = new ArrayObject(['test-key', 'test-key2', 'test-key3']);
-$Psr16Adapter->deleteMultiple($traversable);
-
-if (!$Psr16Adapter->has('test-key') && !$Psr16Adapter->has('test-key2') && !$Psr16Adapter->has('test-key3')) {
- $testHelper->assertPass('9/9 Psr16 hasser returned expected booleans (false)');
-} else {
- $testHelper->assertFail('9/9 Psr16 hasser returned one or more unexpected boolean (true)');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Psr6InterfaceImplements.test.php b/tests/cases/Psr6InterfaceImplements.test.php
deleted file mode 100644
index 4ad6a62a9..000000000
--- a/tests/cases/Psr6InterfaceImplements.test.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Psr\Cache\CacheItemPoolInterface;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('PSR6 Interface Implements');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-
-/**
- * Testing memcached as it is declared in .travis.yml
- */
-$driverInstance = CacheManager::getInstance($defaultDriver);
-
-if (!is_object($driverInstance)) {
- $testHelper->assertFail('CacheManager::getInstance() returned an invalid variable type:' . gettype($driverInstance));
-} elseif (!($driverInstance instanceof CacheItemPoolInterface)) {
- $testHelper->assertFail('CacheManager::getInstance() returned an invalid class:' . get_class($driverInstance));
-} else {
- $testHelper->assertPass('CacheManager::getInstance() returned a valid CacheItemPoolInterface object: ' . get_class($driverInstance));
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/ReadWriteOperations.test.php b/tests/cases/ReadWriteOperations.test.php
deleted file mode 100644
index 129fa71ba..000000000
--- a/tests/cases/ReadWriteOperations.test.php
+++ /dev/null
@@ -1,87 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Read/Write operations (I/O)');
-CacheManager::setDefaultConfig(new ConfigurationOption(['path' => __DIR__ . '/../../cache']));
-
-/**
- * @var $items ExtendedCacheItemInterface[]
- */
-$items = [];
-$instances = [];
-$keys = [];
-
-$dirs = [
- __DIR__ . '/../var/cache-cache/IO-',
- sys_get_temp_dir() . '/phpfastcache/IO-1',
- sys_get_temp_dir() . '/phpfastcache/IO-2',
-];
-
-
-foreach ($dirs as $dirIndex => $dir) {
- for ($i = 1; $i <= 20; $i++) {
- $keys[ $dirIndex ][] = 'test' . $i;
- }
-
- for ($i = 1; $i <= 20; $i++) {
- $cacheInstanceName = 'cacheInstance' . $i;
-
- $instances[ $dirIndex ][ $cacheInstanceName ] = CacheManager::getInstance('Files', new FilesConfig([
- 'path' => $dir . str_pad($i, 3, '0', STR_PAD_LEFT),
- 'secureFileManipulation' => true,
- 'cacheFileExtension' => 'pfc',
- 'securityKey' => '_cache',
- ]));
-
- foreach ($keys[ $dirIndex ] as $index => $key) {
- $items[ $dirIndex ][ $index ] = $instances[ $dirIndex ][ $cacheInstanceName ]->getItem($key);
- $items[ $dirIndex ][ $index ]->set("test-$dirIndex-$index")->expiresAfter(600);
- $instances[ $dirIndex ][ $cacheInstanceName ]->saveDeferred($items[ $dirIndex ][ $index ]);
- }
- $instances[ $dirIndex ][ $cacheInstanceName ]->commit();
- $instances[ $dirIndex ][ $cacheInstanceName ]->detachAllItems();
- }
-
- foreach ($instances[ $dirIndex ] as $cacheInstanceName => $instance) {
- foreach ($keys[ $dirIndex ] as $index => $key) {
- if ($instances[ $dirIndex ][ $cacheInstanceName ]->getItem($key)->get() === "test-$dirIndex-$index") {
- $testHelper->assertPass("Item #{$key} of instance #{$cacheInstanceName} of dir #{$dirIndex} has returned the expected value (" . gettype("test-$dirIndex-$index") . ":'" . "test-$dirIndex-$index" . "')");
- } else {
- $testHelper->assertFail("Item #{$key} of instance #{$cacheInstanceName} of dir #{$dirIndex} returned an unexpected value (" . gettype($instances[ $dirIndex ][ $cacheInstanceName ]->getItem($key)
- ->get()) . ":'" . $instances[ $dirIndex ][ $cacheInstanceName ]->getItem($key)
- ->get() . "') expected (" . gettype("test-$dirIndex-$index") . ":'" . "test-$dirIndex-$index" . "') \n");
- }
- }
- $instances[ $dirIndex ][ $cacheInstanceName ]->detachAllItems();
- }
-}
-
-foreach ($dirs as $dirIndex => $dir) {
- for ($i = 1; $i <= 20; $i++) {
- $cacheInstanceName = 'cacheInstance' . $i;
-
- $testHelper->printDebugText(sprintf('Clearing cache instance %s#%s data', $dir, $cacheInstanceName));
- $instances[ $dirIndex ][ $cacheInstanceName ]->clear();
- }
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Redis.test.php b/tests/cases/Redis.test.php
deleted file mode 100644
index 4c8573df8..000000000
--- a/tests/cases/Redis.test.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Redis\Config as RedisConfig;
-use Redis as RedisClient;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Redis bundled client');
-
-try {
- if (!class_exists(RedisClient::class)) {
- throw new PhpfastcacheDriverCheckException('Unable to test Redis client because the extension seems to be missing');
- }
- $cacheInstance = CacheManager::getInstance('Redis', new RedisConfig());
- $testHelper->runCRUDTests($cacheInstance);
-} catch (\RedisException $e) {
- $testHelper->assertFail('A Redis exception occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/RedisCluster.test.php b/tests/cases/RedisCluster.test.php
deleted file mode 100644
index af75f362a..000000000
--- a/tests/cases/RedisCluster.test.php
+++ /dev/null
@@ -1,34 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Rediscluster\Config as RedisConfig;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Redis cluster');
-
-try {
- $config = new RedisConfig();
- $config->setClusters( '127.0.0.1:7001', '127.0.0.1:7002', '127.0.0.1:7003', '127.0.0.1:7004', '127.0.0.1:7005', '127.0.0.1:7006');
- $config->setOptPrefix('pfc_');
- $config->setSlaveFailover(\RedisCluster::FAILOVER_ERROR);
- $cacheInstance = CacheManager::getInstance('RedisCluster', $config);
- $testHelper->runCRUDTests($cacheInstance);
-} catch (\RedisException $e) {
- $testHelper->assertFail('A Redis exception occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/RedisCustomClient.test.php b/tests/cases/RedisCustomClient.test.php
deleted file mode 100644
index d175938c5..000000000
--- a/tests/cases/RedisCustomClient.test.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Exceptions\PhpfastcacheDriverConnectException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Redis\Config as RedisConfig;
-use Redis as RedisClient;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Redis custom client');
-
-try {
- if (!class_exists(RedisClient::class)) {
- throw new PhpfastcacheDriverCheckException('Unable to test Redis client because the extension seems to be missing');
- }
- try{
- $redisClient = new RedisClient();
- $redisClient->connect('127.0.0.1', 6379, 5);
- }catch (\RedisException $e){
- throw new PhpfastcacheDriverConnectException('Redis server unreachable.');
- }
-
- $redisClient->select(0);
- $cacheInstance = CacheManager::getInstance('Redis', (new RedisConfig())->setRedisClient($redisClient));
- $testHelper->runCRUDTests($cacheInstance);
-} catch (\RedisException $e) {
- $testHelper->assertFail('A Redis exception occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/RedisExpireTtl0.test.php b/tests/cases/RedisExpireTtl0.test.php
deleted file mode 100644
index 27dcfcb50..000000000
--- a/tests/cases/RedisExpireTtl0.test.php
+++ /dev/null
@@ -1,67 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('(P)Redis Expire TTL to 0');
-$cacheInstance = CacheManager::getInstance('Redis');
-$cacheKey = 'cacheKey';
-$RandomCacheValue = str_shuffle(uniqid('pfc', true));
-$loops = 10;
-
-$testHelper->printText('See https://redis.io/commands/setex');
-$testHelper->printText('See https://redis.io/commands/expire');
-$testHelper->printNewLine();
-
-for ($i = 0; $i <= $loops; $i++) {
- $cacheItem = $cacheInstance->getItem("{$cacheKey}-{$i}");
- $cacheItem->set($RandomCacheValue)
- ->expiresAt(new DateTime());
-
- $cacheInstance->saveDeferred($cacheItem);
-}
-
-try {
- $cacheInstance->commit();
- $testHelper->assertPass('The COMMIT operation has finished successfully');
-} catch (Predis\Response\ServerException $e) {
- if (strpos($e->getMessage(), 'setex')) {
- $testHelper->assertFail('The COMMIT operation has failed due to to an invalid time detection.');
- } else {
- $testHelper->assertFail('The COMMIT operation has failed due to to an unexpected error: ' . $e->getMessage());
- }
-}
-$cacheInstance->detachAllItems();
-
-$testHelper->printText('Sleeping a second...');
-
-
-sleep(1);
-
-for ($i = 0; $i <= $loops; $i++) {
- $cacheItem = $cacheInstance->getItem("{$cacheKey}-{$i}");
-
- if ($cacheItem->isHit()) {
- $testHelper->assertFail(sprintf('The cache item "%s" is considered as HIT with the following value: %s', $cacheItem->getKey(), $cacheItem->get()));
- } else {
- $testHelper->assertPass(sprintf('The cache item "%s" is not considered as HIT.', $cacheItem->getKey()));
- }
-}
-
-$cacheInstance->clear();
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Sqlite.test.php b/tests/cases/Sqlite.test.php
deleted file mode 100644
index e3bdfee21..000000000
--- a/tests/cases/Sqlite.test.php
+++ /dev/null
@@ -1,28 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Sqlite');
-CacheManager::setDefaultConfig(new ConfigurationOption(['path' => __DIR__ . '/../../cache']));
-
-$cacheInstance = CacheManager::getInstance('Sqlite');
-
-$testHelper->runCRUDTests($cacheInstance);
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Ssdb.test.php b/tests/cases/Ssdb.test.php
deleted file mode 100644
index 72b70316c..000000000
--- a/tests/cases/Ssdb.test.php
+++ /dev/null
@@ -1,28 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Ssdb\Config as SsdbConfig;
-use Redis as RedisClient;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('SSDB');
-
-$cacheInstance = CacheManager::getInstance('Ssdb', new SsdbConfig());
-$testHelper->runCRUDTests($cacheInstance);
-
-$testHelper->terminateTest();
diff --git a/tests/cases/UnsupportedKeyCharacters.test.php b/tests/cases/UnsupportedKeyCharacters.test.php
deleted file mode 100644
index f6d7032b2..000000000
--- a/tests/cases/UnsupportedKeyCharacters.test.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidArgumentException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Psr\Cache\CacheItemPoolInterface;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Unsupported key characters');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-$driverInstance = CacheManager::getInstance($defaultDriver);
-
-try {
- $driverInstance->getItem('test{test');
- $testHelper->assertFail('1/4 An unsupported key character did not get caught by regular expression');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('1/4 An unsupported key character has been caught by regular expression');
-}
-
-try {
- $driverInstance->getItem(':testtest');
- $testHelper->assertFail('2/4 An unsupported key character did not get caught by regular expression');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('2/4 An unsupported key character has been caught by regular expression');
-}
-
-try {
- $driverInstance->getItem('testtest}');
- $testHelper->assertFail('3/4 An unsupported key character did not get caught by regular expression');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertPass('3/4 An unsupported key character has been caught by regular expression');
-}
-
-try {
- $driverInstance->getItem('testtest');
- $testHelper->assertPass('4/4 No exception caught while trying with a key without unsupported character');
-} catch (PhpfastcacheInvalidArgumentException $e) {
- $testHelper->assertFail('4/4 An exception has been caught while trying with a key without unsupported character');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/cases/Wincache.test.php b/tests/cases/Wincache.test.php
deleted file mode 100644
index a43aea8d5..000000000
--- a/tests/cases/Wincache.test.php
+++ /dev/null
@@ -1,28 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Wincache\Config as WincacheConfig;
-use Redis as RedisClient;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Wincache');
-
-$cacheInstance = CacheManager::getInstance('Wincache', new WincacheConfig());
-$testHelper->runCRUDTests($cacheInstance);
-
-$testHelper->terminateTest();
diff --git a/tests/cases/subprocess/CacheSlamsProtection.subprocess.php b/tests/cases/subprocess/CacheSlamsProtection.subprocess.php
deleted file mode 100644
index 4490f0a75..000000000
--- a/tests/cases/subprocess/CacheSlamsProtection.subprocess.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\IOConfigurationOption;
-use Phpfastcache\Entities\ItemBatch;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../../vendor/autoload.php';
-
-$driverInstance = CacheManager::getInstance('Files', new IOConfigurationOption([
- 'preventCacheSlams' => true,
- 'cacheSlamsTimeout' => 15
-]));
-
-/**
- * Emulate an active ItemBatch
- */
-$batchItem = $driverInstance->getItem('TestCacheSlamsProtection');
-$batchItem->set(new ItemBatch($batchItem->getKey(), new \DateTime()))->expiresAfter(3600);
-$driverInstance->save($batchItem);
-
-sleep(mt_rand(5, 15));
-
-$batchItem->set(1337);
-$driverInstance->save($batchItem);
-
-exit(0);
diff --git a/tests/cases/subprocess/DisabledStaticItemCaching.subprocess.php b/tests/cases/subprocess/DisabledStaticItemCaching.subprocess.php
deleted file mode 100644
index 9ab475cfa..000000000
--- a/tests/cases/subprocess/DisabledStaticItemCaching.subprocess.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Entities\ItemBatch;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../../vendor/autoload.php';
-
-$driverInstance = CacheManager::getInstance('Files', new ConfigurationOption([
- 'useStaticItemCaching' => false,
-]));
-
-/**
- * Emulate an active ItemBatch
- */
-$batchItem = $driverInstance->getItem('TestUseStaticItemCaching');
-$batchItem->set('abcdef-123456');
-$driverInstance->save($batchItem);
-
-exit(0);
diff --git a/tests/issues/Github-373.test.php b/tests/issues/Github-373.test.php
deleted file mode 100644
index 3300c53d3..000000000
--- a/tests/issues/Github-373.test.php
+++ /dev/null
@@ -1,40 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #373 - Files driver issue after clearing cache');
-CacheManager::setDefaultConfig(new ConfigurationOption(['path' => __DIR__ . '/../../cache']));
-$cacheInstance = CacheManager::getInstance('Files');
-
-$key = 'test';
-$cacheItem = $cacheInstance->getItem($key);
-$cacheItem->set('value');
-
-$cacheInstance->save($cacheItem);
-$cacheInstance->deleteItem($key);
-$cacheInstance->clear();
-
-try {
- $has = $cacheInstance->hasItem($key);
- $testHelper->assertPass('No error thrown while trying to test if an item exists after clearing');
-} catch (Exception $e) {
- $testHelper->assertFail('An error has been thrown while trying to test if an item exists after clearing');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-392.test.php b/tests/issues/Github-392.test.php
deleted file mode 100644
index 671af1815..000000000
--- a/tests/issues/Github-392.test.php
+++ /dev/null
@@ -1,71 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #392 - Issue after calling removeTag');
-
-$InstanceCache = CacheManager::getInstance('Files');
-
-$CachedElement1 = $InstanceCache->getItem('el1');
-$CachedElement1->set('element1')->expiresAfter(600);
-$CachedElement1->addTags(array('tag_12'));
-$InstanceCache->save($CachedElement1);
-/**
- * var_dump($CachedElement1->getTags()); Outputs: tag_12
- */
-
-$CachedElement1 = $InstanceCache->getItem('el1');
-$CachedElement1->setTags(array('tag_34'));
-$InstanceCache->save($CachedElement1);
-/**
- * var_dump($CachedElement1->getTags()); Outputs: tag_34
- */
-
-$CachedElement1 = $InstanceCache->getItem('el1');
-$CachedElement1->removeTag('tag_12');
-
-/**
- * Save after removing a non existing tag: works as expected
- */
-try {
- $InstanceCache->save($CachedElement1);
- $testHelper->assertPass('Save after removing a non existing tag: works as expected');
-} catch (Exception $e) {
- $testHelper->assertFail('Save after removing a non existing tag failed with message: ' . $e->getMessage() . ' in ' . $e->getFile() . ' at line ' . $e->getLine());
-}
-/**
- * var_dump($CachedElement1->getTags()); Outputs: tag_34
- */
-
-$CachedElement1 = $InstanceCache->getItem('el1');
-$CachedElement1->removeTags(array('tag_34'));
-
-/**
- * Save after removing an existing tag: fails
- */
-try {
- $InstanceCache->save($CachedElement1);
- $testHelper->assertPass('Save after removing an existing tag');
-} catch (Exception $e) {
- $testHelper->assertFail('Save after removing an existing tag failed with message: ' . $e->getMessage() . ' in ' . $e->getFile() . ' at line ' . $e->getLine());
-}
-/**
- * var_dump($CachedElement1->getTags()); Outputs: empty
- */
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-467.test.php b/tests/issues/Github-467.test.php
deleted file mode 100644
index cc44bceea..000000000
--- a/tests/issues/Github-467.test.php
+++ /dev/null
@@ -1,47 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
-use Phpfastcache\Tests\Helper\TestHelper;
-use \Phpfastcache\Config\ConfigurationOption;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #467 - Allow to specify the file extension in the File Driver');
-CacheManager::setDefaultConfig(new ConfigurationOption(['path' => __DIR__ . '/../../cache']));
-
-try {
- $cacheInstance = CacheManager::getInstance('Files', new FilesConfig(['cacheFileExtension' => 'php']));
- $testHelper->assertFail('No error thrown while trying to setup a dangerous file extension');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('An error has been thrown while trying to setup a dangerous file extension');
-}
-
-try {
- $cacheInstance = CacheManager::getInstance('Files', new FilesConfig(['cacheFileExtension' => '.cache']));
- $testHelper->assertFail('No error thrown while trying to setup a dotted file extension');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('An error has been thrown while trying to setup a dotted file extension');
-}
-
-try {
- $cacheInstance = CacheManager::getInstance('Files', new FilesConfig(['cacheFileExtension' => 'cache']));
- $testHelper->assertPass('No error thrown while trying to setup a safe file extension');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertFail('An error has been thrown while trying to setup a safe file extension');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-522.test.php b/tests/issues/Github-522.test.php
deleted file mode 100644
index 822863836..000000000
--- a/tests/issues/Github-522.test.php
+++ /dev/null
@@ -1,78 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #522 - Predis returns wrong type hints');
-$testHelper->mutePhpNotices();
-// Hide php Redis extension notice by using a little @
-$cacheInstance = CacheManager::getInstance('Predis');
-$stringObject = new stdClass;
-$stringObject->test = '';
-
-try {
-
- /**
- * Clear Predis cache
- */
- $cacheInstance->clear();
- for ($i = 0; $i < 1000; $i++) {
- $stringObject->test .= md5(uniqid('pfc', true));
- }
- $stringObject->test = str_shuffle($stringObject->test);
-
- $item1 = $cacheInstance->getItem('item1');
- $item2 = $cacheInstance->getItem('item2');
- $item3 = $cacheInstance->getItem('item3');
-
- $item1->isHit() ?: $item1->set(clone $stringObject)->expiresAfter(20);
- $item2->isHit() ?: $item2->set(clone $stringObject)->expiresAfter(20);
- $item3->isHit() ?: $item3->set(clone $stringObject)->expiresAfter(20);
-
- $item1->isHit() ?: $cacheInstance->save($item1);
- $item2->isHit() ?: $cacheInstance->save($item2);
- $item3->isHit() ?: $cacheInstance->save($item3);
-
- $cacheInstance->deleteItem($item2->getKey());
- $cacheInstance->deleteItem($item3->getKey());
- $cacheInstance->detachAllItems();
- unset($item1, $item2, $item3);
-
- if ($cacheInstance->getItem('item1')->isHit() && $cacheInstance->getItem('item1')->get()->test === $stringObject->test) {
- $testHelper->assertPass('The cache item "item1" returned the expected value.');
- } else {
- $testHelper->assertFail('The cache item "item1" returned an expected value: ' . gettype($stringObject));
- }
-
- if (!$cacheInstance->getItem('item2')->isHit() && !$cacheInstance->getItem('item2')->isHit()) {
- $testHelper->assertPass('The cache items "item2, item3" are not stored in cache as expected.');
- } else {
- $testHelper->assertFail('The cache items "item2, item3" are unexpectedly stored in cache.');
- }
-
- $cacheInstance->clear();
-
- if (!$cacheInstance->getItem('item1')->isHit() && $cacheInstance->getItem('item1')->get() === null) {
- $testHelper->assertPass('After a cache clear the cache item "item1" is not stored in cache as expected.');
- } else {
- $testHelper->assertFail('After a cache clear the cache item "item1" is still unexpectedly stored in cache.');
- }
-} catch (\Throwable $e) {
- $testHelper->assertFail('The test did not ended well, an error occurred: ' . $e->getMessage());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-529.test.php b/tests/issues/Github-529.test.php
deleted file mode 100644
index 04f2b6079..000000000
--- a/tests/issues/Github-529.test.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #529 - Memory leak caused by item tags');
-// Hide php Redis extension notice by using a little @
-$cacheInstance = CacheManager::getInstance('Files');
-$string = uniqid('pfc', true);
-
-/**
- * Populate the cache with some data
- */
-[$item, $item2] = array_values($cacheInstance->getItems(['item1', 'item2']));
-
-$item->set($string)
- ->addTags(['tag-all', 'tag1'])
- ->expiresAfter(3600);
-
-$item2->set($string)
- ->addTags(['tag-all', 'tag2'])
- ->expiresAfter(3600);
-
-$cacheInstance->saveMultiple(...[$item, $item2]);
-$cacheInstance->detachAllItems();
-unset($item, $item2);
-
-/**
- * Destroy the populated items
- */
-$cacheInstance->deleteItemsByTag('tag-all');
-
-/**
- * First test memory, as we will write the item inside in the second test
- */
-$itemInstances = $testHelper->accessInaccessibleMember($cacheInstance, 'itemInstances');
-if (isset($itemInstances[$cacheInstance::DRIVER_TAGS_KEY_PREFIX . 'tag-all'])) {
- $testHelper->assertFail('The internal cache item tag is still stored in memory');
-} else {
- $testHelper->assertPass('The internal cache item tag is no longer stored in memory');
-}
-
-/**
- * Then test disk to see if the item is still there
- */
-if ($cacheInstance->getItem($cacheInstance::DRIVER_TAGS_KEY_PREFIX . 'tag-all')->isHit()) {
- $testHelper->assertFail('The internal cache item tag is still stored on disk');
-} else {
- $testHelper->assertPass('The internal cache item tag is no longer stored on disk');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-545.test.php b/tests/issues/Github-545.test.php
deleted file mode 100644
index 1b35fd13e..000000000
--- a/tests/issues/Github-545.test.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\Helper\Psr16Adapter;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #545 - Psr16Adapter get item even if it is expired');
-$defaultDriver = (!empty($argv[1]) ? ucfirst($argv[1]) : 'Files');
-$Psr16Adapter = new Psr16Adapter($defaultDriver);
-$ttl = 5;
-
-$testHelper->printText('Preparing test item...');
-$value = str_shuffle(uniqid('pfc', true));
-$Psr16Adapter->set('test-key', $value, $ttl);
-$testHelper->printText(sprintf('Sleeping for %d seconds...', $ttl + 1));
-
-sleep($ttl + 1);
-
-if (!$Psr16Adapter->has('test-key')) {
- $testHelper->assertPass('1/2 [Testing has()] Psr16 adapter does not return an expired cache item anymore');
-} else {
- $testHelper->assertFail('1/2 [Testing has()] Psr16 adapter returned an expired cache item');
-}
-
-if (!$Psr16Adapter->has('test-key')) {
- $testHelper->assertPass('2/2 [Testing get()] Psr16 adapter does not return an expired cache item anymore');
-} else {
- $testHelper->assertFail('2/2 [Testing get()] Psr16 adapter returned an expired cache item');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-560.test.php b/tests/issues/Github-560.test.php
deleted file mode 100644
index 30e03ec7b..000000000
--- a/tests/issues/Github-560.test.php
+++ /dev/null
@@ -1,64 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Config\ConfigurationOption;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #560 - Expiration date bug with sqlite driver');
-$defaultTTl = 60 * 60 * 24 * 31;
-$cacheInstance = CacheManager::getInstance('Sqlite', new ConfigurationOption([
- 'defaultTtl' => $defaultTTl
-]));
-
-/**
- * Clear the cache to avoid
- * unexpected results
- */
-$cacheInstance->clear();
-
-$cacheKey = uniqid('ck', true);
-$string = uniqid('pfc', true);
-$testHelper->printText('Preparing test item...');
-
-/**
- * Setup the cache item
- */
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$cacheItem->set($string);
-$cacheInstance->save($cacheItem);
-
-/**
- * Delete memory references
- * to be sure that the values
- * come from the cache itself
- */
-unset($cacheItem);
-$cacheInstance->detachAllItems();
-$cacheItem = $cacheInstance->getItem($cacheKey);
-
-/**
- * Round up to the nearest 10 to avoid a potential issue
- * due to the time spend to write the cache on disk that will
- * loss 1 second to the cache ttl :/
- */
-if ((int) ceil($cacheItem->getTtl() / 10) * 10 === $defaultTTl) {
- $testHelper->assertPass('The cache Item TTL matches the default TTL after 30 days.');
-} else {
- $testHelper->assertFail('The cache Item TTL des not matches the default TTL after 30 days, got the following value: ' . ceil($cacheItem->getTtl() / 10) * 10);
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-581.test.php b/tests/issues/Github-581.test.php
deleted file mode 100644
index 9c6903410..000000000
--- a/tests/issues/Github-581.test.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #581 - Files driver "securityKey" option configuration not working as documented');
-$cacheInstance = CacheManager::getInstance('Files');
-
-/**
- * Force the HTTP_HOST in CLI to
- * simulate a Web request
- */
-$_SERVER[ 'HTTP_HOST' ] = uniqid('test.', true) . '.pfc.net';
-
-/**
- * Clear the cache to avoid
- * unexpected results
- */
-$cacheInstance->clear();
-
-$cacheKey = uniqid('ck', true);
-$string = uniqid('pfc', true);
-$testHelper->printText('Preparing test item...');
-
-/**
- * Setup the cache item
- */
-$cacheItem = $cacheInstance->getItem($cacheKey);
-$cacheItem->set($string);
-$cacheInstance->save($cacheItem);
-unset($cacheItem);
-$cacheInstance->detachAllItems();
-
-if (strpos($cacheInstance->getPath(), 'phpfastcache' . DIRECTORY_SEPARATOR . $_SERVER[ 'HTTP_HOST' ]) !== false) {
- $testHelper->assertPass('The "securityKey" option in automatic mode writes the HTTP_HOST directory as expected.');
-} else {
- $testHelper->assertFail('The "securityKey" option in automatic mode leads to the following path: ' . $cacheInstance->getPath());
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-627.test.php b/tests/issues/Github-627.test.php
deleted file mode 100644
index 0e1ed13d3..000000000
--- a/tests/issues/Github-627.test.php
+++ /dev/null
@@ -1,82 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Tests\Helper\TestHelper;
-use Phpfastcache\Drivers\Redis\Config as RedisConfig;
-use Phpfastcache\Drivers\Predis\Config as PredisConfig;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #627 - Redis/Predis "prefix" option');
-$testHelper->mutePhpNotices();
-$redisInstance = CacheManager::getInstance('Redis', new RedisConfig(['optPrefix' => uniqid('pfc', true) . '_']));
-$predisInstance = CacheManager::getInstance('Predis', new PredisConfig(['optPrefix' => uniqid('pfc', true) . '_']));
-
-$testHelper->printInfoText('Testing Redis 1/2');
-
-/**
- * Clear the cache to avoid
- * unexpected results
- */
-$redisInstance->clear();
-
-$cacheKey = uniqid('ck', true);
-$string = uniqid('pfc', true);
-$testHelper->printText('Preparing test item...');
-
-/**
- * Setup the cache item
- */
-$cacheItem = $redisInstance->getItem($cacheKey);
-$cacheItem->set($string);
-$redisInstance->save($cacheItem);
-unset($cacheItem);
-$redisInstance->detachAllItems();
-
-if ($redisInstance->getItem($cacheKey)->isHit()) {
- $testHelper->assertPass('The cache item has been found in cache');
-} else {
- $testHelper->assertFail('The cache item was not found in cache');
-}
-
-$testHelper->printInfoText('Testing Predis 2/2');
-
-/**
- * Clear the cache to avoid
- * unexpected results
- */
-$predisInstance->clear();
-
-$cacheKey = uniqid('ck', true);
-$string = uniqid('pfc', true);
-$testHelper->printText('Preparing test item...');
-
-/**
- * Setup the cache item
- */
-$cacheItem = $predisInstance->getItem($cacheKey);
-$cacheItem->set($string);
-$predisInstance->save($cacheItem);
-unset($cacheItem);
-$predisInstance->detachAllItems();
-
-if ($predisInstance->getItem($cacheKey)->isHit()) {
- $testHelper->assertPass('The cache item has been found in cache');
-} else {
- $testHelper->assertFail('The cache item was not found in cache');
-}
-
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-675.test.php b/tests/issues/Github-675.test.php
deleted file mode 100644
index e571e9773..000000000
--- a/tests/issues/Github-675.test.php
+++ /dev/null
@@ -1,82 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Memcached\Config;
-use Phpfastcache\Exceptions\PhpfastcacheDriverException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #675 - Memcached ignores custom host/port configurations');
-
-try {
- $config = new Config();
- $config->setServers([
- [
- 'invalidHostKey' => '120.0.13.37',
- 'invalidPortKey' => 8080,
- 'saslUser' => false,
- 'saslPassword' => false,
- ]
- ]);
- $testHelper->assertFail('1/4 Memcached config accepted unknown key(s) from $servers array.');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('1/4 Memcached config detected unknown key(s) from $servers array: ' . $e->getMessage());
-}
-
-try {
- $config = new Config();
- $config->setServers([
- [
- 'host' => '120.0.13.37',
- 'unwantedKey' => '120.0.13.37',
- 'unwantedKey2' => '120.0.13.37',
- 'port' => 8080,
- 'saslUser' => false,
- 'saslPassword' => false,
- ]
- ]);
- $testHelper->assertFail('2/4 Memcached config accepted unwanted key(s) from $servers array.');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('2/4 Memcached config detected unwanted key(s) from $servers array: ' . $e->getMessage());
-}
-
-try {
- $config = new Config();
- $config->setServers([
- [
- 'host' => '120.0.13.37',
- 'port' => '8080',
- 'saslUser' => false,
- 'saslPassword' => false,
- ]
- ]);
- $testHelper->assertFail('3/4 Memcached config does not detected invalid types fort host and port');
-} catch (PhpfastcacheInvalidConfigurationException $e) {
- $testHelper->assertPass('3/4 Memcached config detected invalid types fort host and port: ' . $e->getMessage());
-}
-
-try {
- $config = new Config();
- $config->setHost('255.255.255.255');
- $config->setPort(1337);
- $cacheInstance = CacheManager::getInstance('Memcached', $config);
- $testHelper->assertFail('4/4 Memcached succeeded to connect with invalid host/port specified (used default combination of "$config->servers")');
-} catch (PhpfastcacheDriverException $e) {
- $testHelper->assertPass('4/4 Memcached failed to connect with invalid host/port specified');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-853.test.php b/tests/issues/Github-853.test.php
deleted file mode 100644
index bb9bdb20e..000000000
--- a/tests/issues/Github-853.test.php
+++ /dev/null
@@ -1,371 +0,0 @@
- https://www.phpfastcache.com
- * @author Georges.L (Geolim4)
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Memcached\Config as MemcachedConfig;
-use Phpfastcache\Drivers\Memcache\Config as MemcacheConfig;
-use Phpfastcache\Exceptions\PhpfastcacheDriverCheckException;
-use Phpfastcache\Exceptions\PhpfastcacheInvalidConfigurationException;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #675 - Configuration validation issue with Memcached socket (path)');
-
-/**
- * MEMCACHED ASSERTIONS
- */
-$testHelper->printInfoText('Testing MEMCACHED configuration validation errors...');
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => '',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] An empty host and path did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] An empty host and path thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => 'a/nice/path',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Both path and host configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Both path and host configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => 'a/nice/path',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Both path and port configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Both path and port configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => true,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Invalid non-string path value not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Invalid non-string path value thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => true,
- 'path' => '',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Invalid non-string host value not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Invalid non-string host value thrown an exception: ' . $e->getMessage());
-}
-
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] An host without port configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] An host without port configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'unknown_key_1' => '',
- 'unknown_key_2' => true,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Unknowns keys configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Unknowns keys configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => '',
- 'port' => 11211,
- 'saslUser' => true,
- 'saslPassword' => [1337],
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHED] Both saslUser and saslPassword misconfigurations did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHED] Both saslUser and saslPassword misconfigurations thrown an exception: ' . $e->getMessage());
-}
-
-
-/**
- * MEMCACHE ASSERTIONS
- */
-$testHelper->printNewLine();
-$testHelper->printInfoText('Testing MEMCACHE configuration validation errors...');
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => '',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] An empty host and path did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] An empty host and path thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => 'a/nice/path',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Both path and host configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Both path and host configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => 'a/nice/path',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Both path and port configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Both path and port configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => true,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Invalid non-string path value not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Invalid non-string path value thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => true,
- 'path' => '',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Invalid non-string host value not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Invalid non-string host value thrown an exception: ' . $e->getMessage());
-}
-
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] An host without port configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] An host without port configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'unknown_key_1' => '',
- 'unknown_key_2' => true,
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Unknowns keys configured did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Unknowns keys configured thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => 'a/nice/path',
- 'port' => 11211,
- 'saslUser' => 'lorem',
- 'saslPassword' => 'ipsum',
- ]
- ]
- ]);
- $testHelper->assertFail('[MEMCACHE] Unsupported SASL configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertPass('[MEMCACHE] Unsupported SASL configuration thrown an exception: ' . $e->getMessage());
-}
-
-/**
- * GOOD CONFIGURATIONS ASSERTIONS
- */
-$testHelper->printNewLine();
-$testHelper->printInfoText('Testing valid configurations...');
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => 'a/nice/path',
- 'port' => null,
- ]
- ]
- ]);
- $testHelper->assertPass('[MEMCACHE] Valid Memcache socket configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHE] Valid Memcache socket configuration thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcacheConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => '',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertPass('[MEMCACHE] Valid Memcache host configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHE] Valid Memcache host configuration thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '',
- 'path' => 'a/nice/path',
- 'port' => null,
- ]
- ]
- ]);
- $testHelper->assertPass('[MEMCACHED] Valid Memcached socket configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHED] Valid Memcached socket configuration thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => '',
- 'port' => 11211,
- ]
- ]
- ]);
- $testHelper->assertPass('[MEMCACHED] Valid Memcached host configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHED] Valid Memcached host configuration thrown an exception: ' . $e->getMessage());
-}
-
-try {
- new MemcachedConfig([
- 'servers' => [
- [
- 'host' => '127.0.0.1',
- 'path' => '',
- 'port' => 11211,
- 'saslUser' => 'lorem',
- 'saslPassword' => 'ipsum',
- ]
- ]
- ]);
- $testHelper->assertPass('[MEMCACHED] Valid Memcached host + SASL authentication configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHED] Valid Memcached host + SASL authentication configuration thrown an exception: ' . $e->getMessage());
-}
-
-/**
- * BASIC CONFIGURATIONS ASSERTIONS
- */
-$testHelper->printNewLine();
-$testHelper->printInfoText('Testing basic configurations...');
-
-try {
- CacheManager::getInstance('Memcached', new MemcachedConfig());
- $testHelper->assertPass('[MEMCACHED] Default configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHED] Default configuration thrown an exception: ' . $e->getMessage());
-} catch (PhpfastcacheDriverCheckException $e){
- // If the driver fails to initialize it is not an issue, the validation process has at least succeeded
- $testHelper->assertPass('[MEMCACHED] Default configuration did not thrown an exception (with failed driver initialization)');
-}
-
-try {
- CacheManager::getInstance('Memcache', new MemcacheConfig());
- $testHelper->assertPass('[MEMCACHE] Default configuration did not thrown an exception');
-} catch (PhpfastcacheInvalidConfigurationException $e){
- $testHelper->assertFail('[MEMCACHE] Default configuration thrown an exception: ' . $e->getMessage());
-} catch (PhpfastcacheDriverCheckException $e){
- // If the driver fails to initialize it is not an issue, the validation process has at least succeeded
- $testHelper->assertPass('[MEMCACHE] Default configuration did not thrown an exception (with failed driver initialization)');
-}
-
-$testHelper->terminateTest();
diff --git a/tests/issues/Github-860.test.php b/tests/issues/Github-860.test.php
deleted file mode 100644
index 6ff05159c..000000000
--- a/tests/issues/Github-860.test.php
+++ /dev/null
@@ -1,35 +0,0 @@
- https://www.phpfastcache.com
- * @author Georges.L (Geolim4)
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #860 - Cache item throw an error on reading with DateTimeImmutable date objects');
-
-$config = new FilesConfig();
-$testHelper->preConfigure($config);
-$cacheInstance = CacheManager::getInstance('Files', $config);
-$cacheInstance->clear();
-
-try {
- $key = 'pfc_' . bin2hex(random_bytes(12));
- $item = $cacheInstance->getItem($key);
- $item->set(random_int(1000, 999999))
- ->setExpirationDate(new DateTimeImmutable('+1 month'))
- ->setCreationDate(new DateTimeImmutable())
- ->setModificationDate(new DateTimeImmutable('+1 week'));
- $cacheInstance->save($item);
- $cacheInstance->detachAllItems();
- $item = $cacheInstance->getItem($key);
- $testHelper->assertPass('Github issue #860 have not regressed.');
-} catch (\TypeError $e) {
- $testHelper->assertFail('Github issue #860 have regressed, exception caught: ' . $e->getMessage());
-}
-
diff --git a/tests/issues/Github-893.test.php b/tests/issues/Github-893.test.php
deleted file mode 100644
index f4b8bcb2f..000000000
--- a/tests/issues/Github-893.test.php
+++ /dev/null
@@ -1,57 +0,0 @@
- https://www.phpfastcache.com
- * @author Georges.L (Geolim4)
- */
-
-use Phpfastcache\CacheManager;
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-use Phpfastcache\Tests\Helper\TestHelper;
-
-chdir(__DIR__);
-require_once __DIR__ . '/../../vendor/autoload.php';
-$testHelper = new TestHelper('Github issue #893 - getItemsByTag() - empty after one item has expired');
-
-$config = new FilesConfig();
-$testHelper->preConfigure($config);
-$cacheInstance = CacheManager::getInstance('Files', $config);
-$cacheInstance->clear();
-
-$testHelper->printInfoText('Creating cache item "key_1" & "key_2"...');
-
-$CachedString1 = $cacheInstance->getItem("key_1");
-if (is_null($CachedString1->get())) {
- $CachedString1->set("data1")->expiresAfter(10);
- $CachedString1->addTag("query");
- $cacheInstance->save($CachedString1);
-}
-
-
-$CachedString2 = $cacheInstance->getItem("key_2");
-if (is_null($CachedString2->get())) {
- $CachedString2->set("data2")->expiresAfter(5);
- $CachedString2->addTag("query");
- $cacheInstance->save($CachedString2);
-}
-
-$CachedString3 = $cacheInstance->getItem("key_3");
-if (is_null($CachedString3->get())) {
- $CachedString3->set("data3")->expiresAfter(4);
- $CachedString3->addTag("query");
- $cacheInstance->save($CachedString3);
-}
-
-$cacheInstance->detachAllItems();
-$testHelper->printInfoText('Items created and saved, sleeping 6 secondes to force "key_1" to expire');
-sleep(6);
-
-$cacheItems = $cacheInstance->getItemsByTag("query");
-
-if(count($cacheItems) === 1 && isset($cacheItems['key_1']) && $cacheItems['key_1']->get() === 'data1') {
- $testHelper->assertPass('getItemsByTag() has returned only cache item "key_1"');
-} else {
- $testHelper->assertFail(sprintf('getItemsByTag() returned unknown results: %d item(s)...', \count($cacheItems)));
-}
-
-$testHelper->terminateTest();
diff --git a/tests/lexer/LexerCheck.test.php b/tests/lexer/LexerCheck.test.php
deleted file mode 100644
index a27fb615d..000000000
--- a/tests/lexer/LexerCheck.test.php
+++ /dev/null
@@ -1,60 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-$pfcReadDir = static function ($dir, $ext = null) use (&$pfcReadDir) {
- $list = [[]];
- $dir .= '/';
- if (($res = opendir($dir)) === false) {
- exit(1);
- }
- while (($name = readdir($res)) !== false) {
- if ($name === '.' || $name === '..') {
- continue;
- }
- $name = $dir . $name;
- if (is_dir($name)) {
- $list[] = $pfcReadDir($name, $ext);
- } elseif (is_file($name)) {
- if (!is_null($ext) && substr(strrchr($name, '.'), 1) !== $ext) {
- continue;
- }
- $list[] = [$name];
- }
- }
-
- return array_merge(...$list);
-};
-
-$list = $pfcReadDir('./lib', 'php');
-
-foreach (array_map('realpath', $list) as $file) {
- $output = '';
- \exec(($testHelper->isHHVM() ? 'hhvm' : 'php') . ' -l "' . $file . '"', $output, $status);
-
- $output = trim(implode("\n", $output));
-
- if ($status !== 0) {
- $testHelper->assertFail($output ?: "Syntax error found in {$file}");
- } else {
- $testHelper->assertPass($output ?: "No syntax errors detected in {$file}");
- }
-}
-$testHelper->terminateTest();
diff --git a/tests/mock/Autoload.php b/tests/mock/Autoload.php
deleted file mode 100644
index adb25f1f8..000000000
--- a/tests/mock/Autoload.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-/**
- * Register Mock Autoload
- */
-\spl_autoload_register(function ($entity) {
- $module = \explode('\\', $entity, 2);
- if ($module[ 0 ] !== 'Phpfastcache') {
- /**
- * Not a part of phpFastCache file
- * then we return here.
- */
- return;
- }
-
- $entity = \str_replace('\\', '/', $entity);
- $path = __DIR__ . DIRECTORY_SEPARATOR . $entity . '.php';
-
- if (\is_readable($path)) {
- require_once $path;
- }
-});
diff --git a/tests/mock/Phpfastcache/DriverTest/Files2/Config.php b/tests/mock/Phpfastcache/DriverTest/Files2/Config.php
deleted file mode 100644
index 096a58362..000000000
--- a/tests/mock/Phpfastcache/DriverTest/Files2/Config.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\DriverTest\Files2;
-
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-
-/**
- * Class Config
- * @package Phpfastcache\DriverTest\Files2
- */
-class Config extends FilesConfig
-{
- /**
- * @var bool
- */
- protected $customOption = true;
-
- /**
- * @return bool
- */
- public function isCustomOption(): bool
- {
- return $this->customOption;
- }
-
- /**
- * @param bool $customOption
- * @return Config
- */
- public function setCustomOption(bool $customOption): Config
- {
- $this->customOption = $customOption;
- return $this;
- }
-}
diff --git a/tests/mock/Phpfastcache/DriverTest/Files2/Driver.php b/tests/mock/Phpfastcache/DriverTest/Files2/Driver.php
deleted file mode 100644
index df9eb9320..000000000
--- a/tests/mock/Phpfastcache/DriverTest/Files2/Driver.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\DriverTest\Files2;
-
-use Phpfastcache\Drivers\Files\Driver as FilesDriver;
-
-/**
- * Class Driver
- * @package Phpfastcache\DriverTest\Files2
- */
-class Driver extends FilesDriver
-{
-
-}
diff --git a/tests/mock/Phpfastcache/DriverTest/Files2/Item.php b/tests/mock/Phpfastcache/DriverTest/Files2/Item.php
deleted file mode 100644
index 928a83d1e..000000000
--- a/tests/mock/Phpfastcache/DriverTest/Files2/Item.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\DriverTest\Files2;
-
-use Phpfastcache\Drivers\Files\Item as FilesItem;
-
-/**
- * Class Item
- * @package Phpfastcache\DriverTest\Files2
- */
-class Item extends FilesItem
-{
-
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Failfiles/Config.php b/tests/mock/Phpfastcache/Drivers/Failfiles/Config.php
deleted file mode 100644
index 81e7a00f0..000000000
--- a/tests/mock/Phpfastcache/Drivers/Failfiles/Config.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Failfiles;
-
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-
-/**
- * Class Config
- * @package Phpfastcache\Drivers\Files2
- */
-class Config extends FilesConfig
-{
- /**
- * @var bool
- */
- protected $customOption = true;
-
- /**
- * @return bool
- */
- public function isCustomOption(): bool
- {
- return $this->customOption;
- }
-
- /**
- * @param bool $customOption
- * @return Config
- */
- public function setCustomOption(bool $customOption): Config
- {
- $this->customOption = $customOption;
- return $this;
- }
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Failfiles/Driver.php b/tests/mock/Phpfastcache/Drivers/Failfiles/Driver.php
deleted file mode 100644
index 02f60c190..000000000
--- a/tests/mock/Phpfastcache/Drivers/Failfiles/Driver.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Failfiles;
-
-use Phpfastcache\Core\Item\ExtendedCacheItemInterface;
-use Phpfastcache\Drivers\Files\Driver as FilesDriver;
-use Phpfastcache\Exceptions\PhpfastcacheDriverException;
-use Psr\Cache\CacheItemInterface;
-use Random\RandomException;
-
-/**
- * Class Driver
- * @package Phpfastcache\Drivers\Files2
- */
-class Driver extends FilesDriver
-{
- /**
- * @return bool
- * @throws PhpfastcacheDriverException
- */
- protected function driverRead(ExtendedCacheItemInterface $item): ?array
- {
- throw new PhpfastcacheDriverException('Error code found: ' . \bin2hex(\random_bytes(8)));
- }
-
- /**
- * @return bool
- * @throws PhpfastcacheDriverException
- */
- protected function driverWrite(ExtendedCacheItemInterface $item): bool
- {
- throw new PhpfastcacheDriverException('Error code found: ' . \bin2hex(\random_bytes(8)));
- }
-
- /**
- * @param string $key
- * @param string $encodedKey
- * @return bool
- * @throws PhpfastcacheDriverException
- * @throws RandomException
- */
- protected function driverDelete(string $key, string $encodedKey): bool
- {
- throw new PhpfastcacheDriverException('Error code found: ' . \bin2hex(\random_bytes(8)));
- }
-
- /**
- * @return bool
- * @throws PhpfastcacheDriverException
- */
- protected function driverClear(): bool
- {
- throw new PhpfastcacheDriverException('Error code found: ' . \bin2hex(\random_bytes(8)));
- }
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Failfiles/Item.php b/tests/mock/Phpfastcache/Drivers/Failfiles/Item.php
deleted file mode 100644
index 51ac3d243..000000000
--- a/tests/mock/Phpfastcache/Drivers/Failfiles/Item.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Failfiles;
-
-use Phpfastcache\Drivers\Files\Item as FilesItem;
-
-/**
- * Class Item
- * @package Phpfastcache\Drivers\Files2
- */
-class Item extends FilesItem
-{
-
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Fakefiles/Config.php b/tests/mock/Phpfastcache/Drivers/Fakefiles/Config.php
deleted file mode 100644
index a329e14ea..000000000
--- a/tests/mock/Phpfastcache/Drivers/Fakefiles/Config.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Fakefiles;
-
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-
-/**
- * Class Config
- * @package Phpfastcache\Drivers\Files2
- */
-class Config extends FilesConfig
-{
- /**
- * @var bool
- */
- protected $customOption = true;
-
- /**
- * @return bool
- */
- public function isCustomOption(): bool
- {
- return $this->customOption;
- }
-
- /**
- * @param bool $customOption
- * @return Config
- */
- public function setCustomOption(bool $customOption): Config
- {
- $this->customOption = $customOption;
- return $this;
- }
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Fakefiles/Driver.php b/tests/mock/Phpfastcache/Drivers/Fakefiles/Driver.php
deleted file mode 100644
index 6f15af7fc..000000000
--- a/tests/mock/Phpfastcache/Drivers/Fakefiles/Driver.php
+++ /dev/null
@@ -1,31 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Fakefiles;
-
-use Phpfastcache\Drivers\Files\Driver as FilesDriver;
-
-/**
- * Class Driver
- * @package Phpfastcache\Drivers\Files2
- */
-class Driver extends FilesDriver
-{
- /**
- * @return bool
- */
- public function driverCheck(): bool
- {
- return false;
- }
-}
diff --git a/tests/mock/Phpfastcache/Drivers/Fakefiles/Item.php b/tests/mock/Phpfastcache/Drivers/Fakefiles/Item.php
deleted file mode 100644
index 4baf7da53..000000000
--- a/tests/mock/Phpfastcache/Drivers/Fakefiles/Item.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Drivers\Fakefiles;
-
-use Phpfastcache\Drivers\Files\Item as FilesItem;
-
-/**
- * Class Item
- * @package Phpfastcache\Drivers\Files2
- */
-class Item extends FilesItem
-{
-
-}
diff --git a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Config.php b/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Config.php
deleted file mode 100644
index 1afb9bc12..000000000
--- a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Config.php
+++ /dev/null
@@ -1,42 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Extensions\Drivers\Extensiontest;
-
-use Phpfastcache\Drivers\Files\Config as FilesConfig;
-
-class Config extends FilesConfig
-{
- /**
- * @var bool
- */
- protected bool $customOption = true;
-
- /**
- * @return bool
- */
- public function isCustomOption(): bool
- {
- return $this->customOption;
- }
-
- /**
- * @param bool $customOption
- * @return Config
- */
- public function setCustomOption(bool $customOption): Config
- {
- $this->customOption = $customOption;
- return $this;
- }
-}
diff --git a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Driver.php b/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Driver.php
deleted file mode 100644
index 0e9647820..000000000
--- a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Driver.php
+++ /dev/null
@@ -1,21 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Extensions\Drivers\Extensiontest;
-
-use Phpfastcache\Drivers\Files\Driver as FilesDriver;
-
-class Driver extends FilesDriver
-{
-
-}
diff --git a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Item.php b/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Item.php
deleted file mode 100644
index 3ea8ad051..000000000
--- a/tests/mock/Phpfastcache/Extensions/Drivers/Extensiontest/Item.php
+++ /dev/null
@@ -1,22 +0,0 @@
-
- * @author Contributors https://github.com/PHPSocialNetwork/phpfastcache/graphs/contributors
- */
-
-namespace Phpfastcache\Extensions\Drivers\Extensiontest;
-
-use Phpfastcache\Drivers\Files\Item as FilesItem;
-
-
-class Item extends FilesItem
-{
-
-}