diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index fc23aac..4107283 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1402,23 +1402,6 @@
},
"install-path": "../ralouphie/getallheaders"
},
- {
- "name": "renanbr/bibtex-parser",
- "version": "2.2",
- "version_normalized": "2.2.0.0",
- "source": {
- "type": "git",
- "url": "git://github.com/lavaux/bibtex-parser.git",
- "reference": "patch-1"
- },
- "dist": {
- "type": "zip",
- "url": "https://github.com/lavaux/bibtex-parser/archive/patch-1.zip"
- },
- "type": "library",
- "installation-source": "dist",
- "install-path": "../renanbr/bibtex-parser"
- },
{
"name": "stevenmaguire/oauth2-bitbucket",
"version": "3.0.0",
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 3ed47b6..16bfab1 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -220,15 +220,6 @@
'aliases' => array(),
'dev_requirement' => false,
),
- 'renanbr/bibtex-parser' => array(
- 'pretty_version' => '2.2',
- 'version' => '2.2.0.0',
- 'reference' => 'patch-1',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../renanbr/bibtex-parser',
- 'aliases' => array(),
- 'dev_requirement' => false,
- ),
'stevenmaguire/oauth2-bitbucket' => array(
'pretty_version' => '3.0.0',
'version' => '3.0.0.0',
diff --git a/vendor/renanbr/bibtex-parser/LICENSE b/vendor/renanbr/bibtex-parser/LICENSE
deleted file mode 100644
index 05cbcd3..0000000
--- a/vendor/renanbr/bibtex-parser/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (c) 2017 Renan de Lima Barbosa
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/renanbr/bibtex-parser/Makefile b/vendor/renanbr/bibtex-parser/Makefile
deleted file mode 100644
index 4094b83..0000000
--- a/vendor/renanbr/bibtex-parser/Makefile
+++ /dev/null
@@ -1,74 +0,0 @@
-ifeq ($(shell type podman > /dev/null 2>&1; echo $$?), 0)
- ENGINE ?= podman
-else ifeq ($(shell type docker > /dev/null 2>&1; echo $$?), 0)
- ENGINE ?= docker
-endif
-
-PHP_VERSION ?= 7.4
-
-IMAGE_BASE = jakzal/phpqa:php$(PHP_VERSION)
-IMAGE = renanbr/bibtex-parser:php$(PHP_VERSION)
-LABEL = maintainer=renanbr-bibtex-parser
-
-RUN = $(ENGINE) run --init -it --rm -v "$(CURDIR):/project" -w /project
-
-.DEFAULT_GOAL := help
-
-help: ## Display this message help
- @make -v | head -n 1
- @awk '\
- BEGIN {\
- FS = ":.*##";\
- printf "\n\033[33mUsage:\033[0m\n [PHP_VERSION=major.minor] make [target]\n\n\033[33mAvailable targets:\033[0m\n" \
- } /^[a-zA-Z0-9_-]+:.*?##/ { \
- printf " \033[32m%-18s\033[0m %s\n", $$1, $$2 \
- } /^##/ { \
- printf "\033[33m %s\033[0m\n", substr($$0, 4) \
- }' $(MAKEFILE_LIST)
-.PHONY: help
-
-## Checks
-
-check: static-analysis cs-check test ## Run all checks
-
-static-analysis: vendor ## Run static analysis
- $(RUN) $(IMAGE) phpstan analyse --verbose
-.PHONY: static-analysis
-
-cs-check: check-engine ## Check for coding standards violations
- mkdir -p var
- $(RUN) $(IMAGE_BASE) php-cs-fixer fix --dry-run --verbose
-.PHONY: cs-check
-
-test: vendor ## Run tests
- $(RUN) $(IMAGE) php -d pcov.enabled=1 ./vendor/bin/phpunit --testdox --coverage-text --verbose
-.PHONY: test
-
-## Fixers
-
-cs-fix: check-engine ## Fix coding standards
- mkdir -p var
- $(RUN) $(IMAGE_BASE) php-cs-fixer fix
-.PHONY: cs-fix
-
-## Misc
-
-clean: check-engine ## Clean up workspace
- $(RUN) $(IMAGE_BASE) rm -rf composer.lock var/ vendor/
- $(ENGINE) image rm --force $$($(ENGINE) images --filter "label=$(LABEL)" --quiet) 2>&1 | true
-.PHONY: clean
-
-vendor: build-image
- $(RUN) $(IMAGE) composer install -vvv
-
-## Container engine
-
-check-engine:
-ifeq ($(ENGINE),)
- $(error "Container engine not found. Did you install podman or docker?")
-endif
-.PHONY: check-engine
-
-build-image: check-engine
- $(ENGINE) build --tag $(IMAGE) --build-arg FROM=$(IMAGE_BASE) --label $(LABEL) .docker/
-.PHONY: build-image
diff --git a/vendor/renanbr/bibtex-parser/README.md b/vendor/renanbr/bibtex-parser/README.md
deleted file mode 100644
index 0a3860e..0000000
--- a/vendor/renanbr/bibtex-parser/README.md
+++ /dev/null
@@ -1,569 +0,0 @@
-
PHP BibTeX Parser 2.x
-
- This is a
- BibTeX
- parser written in
- PHP.
-
-
-
-
-
-
-
-
-
-
-![Tests](https://github.com/renanbr/bibtex-parser/workflows/Tests/badge.svg)
-[![codecov](https://codecov.io/gh/renanbr/bibtex-parser/branch/master/graph/badge.svg)](https://codecov.io/gh/renanbr/bibtex-parser)
-![Static Analysis](https://github.com/renanbr/bibtex-parser/workflows/Static%20Analysis/badge.svg)
-![Coding Standards](https://github.com/renanbr/bibtex-parser/workflows/Coding%20Standards/badge.svg)
-
-You are browsing the documentation of **BibTeX Parser 2.x**, the latest version.
-
-## Table of contents
-
-* [Installing](#installing)
-* [Usage](#usage)
-* [Vocabulary](#vocabulary)
-* [Processors](#processors)
- * [Tag name case](#tag-name-case)
- * [Authors and editors](#authors-and-editors)
- * [Keywords](#keywords)
- * [Date](#date)
- * [Fill missing tag](#fill-missing-tag)
- * [Trim tags](#trim-tags)
- * [Determine URL from the DOI](#determine-url-from-the-doi)
- * [LaTeX to unicode](#latex-to-unicode)
- * [Custom](#custom)
-* [Handling errors](#handling-errors)
-* [Advanced usage](#advanced-usage)
-
-## Installing
-
-```bash
-composer require renanbr/bibtex-parser
-```
-
-## Usage
-
-```php
-use RenanBr\BibTexParser\Listener;
-use RenanBr\BibTexParser\Parser;
-use RenanBr\BibTexParser\Processor;
-
-require 'vendor/autoload.php';
-
-$bibtex = <<addProcessor(new Processor\TagNameCaseProcessor(CASE_LOWER));
-// $listener->addProcessor(new Processor\NamesProcessor());
-// $listener->addProcessor(new Processor\KeywordsProcessor());
-// $listener->addProcessor(new Processor\DateProcessor());
-// $listener->addProcessor(new Processor\FillMissingProcessor([/* ... */]));
-// $listener->addProcessor(new Processor\TrimProcessor());
-// $listener->addProcessor(new Processor\UrlFromDoiProcessor());
-// $listener->addProcessor(new Processor\LatexToUnicodeProcessor());
-// ... you can append as many Processors as you want
-
-// Create a Parser and attach the listener
-$parser = new Parser();
-$parser->addListener($listener);
-
-// Parse the content, then read processed data from the Listener
-$parser->parseString($bibtex); // or parseFile('/path/to/file.bib')
-$entries = $listener->export();
-
-print_r($entries);
-```
-
-This will output:
-
-```
-Array
-(
- [0] => Array
- (
- [_type] => article
- [citation-key] => einstein1916relativity
- [title] => Relativity: The Special and General Theory
- [author] => Einstein, Albert
- [year] => 1916
- )
-)
-```
-
-## Vocabulary
-
-[BibTeX] is all about "entry", "tag's name" and "tag's content".
-
-> A [BibTeX] **entry** consists of the type (the word after @), a citation-key and a number of tags which define various characteristics of the specific [BibTeX] entry.
-> (...) A [BibTeX] **tag** is specified by its **name** followed by an equals sign, and the **content**.
-
-Source: http://www.bibtex.org/Format/
-
-Note:
-This library considers "type" and "citation-key" as tags.
-This behavior can be changed [implementing your own Listener](#advanced-usage).
-
-## Processors
-
-`Processor` is a [callable] that receives an entry as argument and returns a modified entry.
-
-This library contains three main parts:
-
-- `Parser` class, responsible for detecting units inside a [BibTeX] input;
-- `Listener` class, responsible for gathering units and transforming them into a list of entries;
-- `Processor` classes, responsible for manipulating entries.
-
-Despite you can't configure the `Parser`, you can append as many `Processor` as you want to the `Listener` through `Listener::addProcessor()` before exporting the contents.
-Be aware that `Listener` provides, by default, these features:
-
-- Found entries are reachable through `Listener::export()` method;
-- [Tag content concatenation](http://www.bibtex.org/Format/);
- - e.g. `hello # " world"` tag's content will generate `hello world` [string]
-- [Tag content abbreviation handling](http://www.bibtex.org/Format/);
- - e.g. `@string{foo="bar"} @misc{bar=foo}` will make `$entries[1]['bar']` assume `bar` as value
-- Publication's type exposed as `_type` tag;
-- Citation key exposed as `citation-key` tag;
-- Original entry text exposed as `_original` tag.
-
-This project ships some useful processors.
-
-### Tag name case
-
-In [BibTeX] the tag's names aren't case-sensitive.
-This library exposes entries as [array], in which keys are case-sensitive.
-To avoid this misunderstanding, you can force the tags' name character case using `TagNameCaseProcessor`.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\TagNameCaseProcessor;
-
-$listener->addProcessor(new TagNameCaseProcessor(CASE_UPPER)); // or CASE_LOWER
-```
-
-```bib
-@article{
- title={BibTeX rocks}
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [TYPE] => article
- [TITLE] => BibTeX rocks
- )
-)
-```
-
-
-
-### Authors and editors
-
-[BibTeX] recognizes four parts of an author's name: First Von Last Jr.
-If you would like to parse the `author` and `editor` tags included in your entries, you can use the `NamesProcessor` class.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\NamesProcessor;
-
-$listener->addProcessor(new NamesProcessor());
-```
-
-```bib
-@article{
- title={Relativity: The Special and General Theory},
- author={Einstein, Albert}
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => article
- [title] => Relativity: The Special and General Theory
- [author] => Array
- (
- [0] => Array
- (
- [first] => Albert
- [von] =>
- [last] => Einstein
- [jr] =>
- )
- )
- )
-)
-```
-
-
-
-### Keywords
-
-The `keywords` tag contains a list of expressions represented as [string], you might want to read them as an [array] instead.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\KeywordsProcessor;
-
-$listener->addProcessor(new KeywordsProcessor());
-```
-
-```bib
-@misc{
- title={The End of Theory: The Data Deluge Makes the Scientific Method Obsolete},
- keywords={big data, data deluge, scientific method}
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => misc
- [title] => The End of Theory: The Data Deluge Makes the Scientific Method Obsolete
- [keywords] => Array
- (
- [0] => big data
- [1] => data deluge
- [2] => scientific method
- )
- )
-)
-```
-
-
-
-### Date
-
-It adds a new tag `_date` as [DateTimeImmutable].
-This processor adds the new tag **if and only if** this the tags `month` and `year` are fulfilled.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\DateProcessor;
-
-$listener->addProcessor(new DateProcessor());
-```
-
-```bib
-@misc{
- month="1~oct",
- year=2000
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => misc
- [month] => 1~oct
- [year] => 2000
- [_date] => DateTimeImmutable Object
- (
- [date] => 2000-10-01 00:00:00.000000
- [timezone_type] => 3
- [timezone] => UTC
- )
- )
-)
-```
-
-
-
-### Fill missing tag
-
-It puts a default value to some missing field.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\FillMissingProcessor;
-
-$listener->addProcessor(new FillMissingProcessor([
- 'title' => 'This entry has no title',
- 'year' => 1970,
-]));
-```
-
-```bib
-@misc{
-}
-
-@misc{
- title="I do exist"
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => misc
- [title] => This entry has no title
- [year] => 1970
- )
- [1] => Array
- (
- [type] => misc
- [title] => I do exist
- [year] => 1970
- )
-)
-```
-
-
-
-### Trim tags
-
-Apply [trim()] to all tags.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\TrimProcessor;
-
-$listener->addProcessor(new TrimProcessor());
-```
-
-```bib
-@misc{
- title=" too much space "
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => misc
- [title] => too much space
- )
-
-)
-```
-
-
-
-### Determine URL from the DOI
-
-Sets `url` tag with [DOI] if `doi` tag is present and `url` tag is missing.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\UrlFromDoiProcessor;
-
-$listener->addProcessor(new UrlFromDoiProcessor());
-```
-
-```bib
-@misc{
- doi="qwerty"
-}
-
-@misc{
- doi="azerty",
- url="http://example.org"
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => misc
- [doi] => qwerty
- [url] => https://doi.org/qwerty
- )
-
- [1] => Array
- (
- [type] => misc
- [doi] => azerty
- [url] => http://example.org
- )
-)
-```
-
-
-
-### LaTeX to unicode
-
-[BibTeX] files store [LaTeX] contents.
-You might want to read them as unicode instead.
-The `LatexToUnicodeProcessor` class solves this problem, but before adding the processor to the listener you must:
-
-- [install Pandoc](http://pandoc.org/installing.html) in your system; and
-- add [ryakad/pandoc-php](https://github.com/ryakad/pandoc-php) or [ueberdosis/pandoc](https://github.com/ueberdosis/pandoc) as a dependency of your project.
-
-Usage
-
-```php
-use RenanBr\BibTexParser\Processor\LatexToUnicodeProcessor;
-
-$listener->addProcessor(new LatexToUnicodeProcessor());
-```
-
-```bib
-@article{
- title={Caf\\'{e}s and bars}
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => article
- [title] => Cafés and bars
- )
-)
-```
-
-
-
-Note: Order matters, add this processor as the last.
-
-### Custom
-
-The `Listener::addProcessor()` method expects a [callable] as argument.
-In the example shown below, we append the text `with laser` to the `title` tags for all entries.
-
-Usage
-
-```php
-$listener->addProcessor(static function (array $entry) {
- $entry['title'] .= ' with laser';
- return $entry;
-});
-```
-
-```
-@article{
- title={BibTeX rocks}
-}
-```
-
-```
-Array
-(
- [0] => Array
- (
- [type] => article
- [title] => BibTeX rocks with laser
- )
-)
-```
-
-
-
-## Handling errors
-
-This library throws two types of exception: `ParserException` and `ProcessorException`.
-The first one may happen during the data extraction.
-When it occurs it probably means the parsed BibTeX isn't valid.
-The second exception may happen during the data processing.
-When it occurs it means the listener's processors can't handle properly the data found.
-Both implement `ExceptionInterface`.
-
-```php
-use RenanBr\BibTexParser\Exception\ExceptionInterface;
-use RenanBr\BibTexParser\Exception\ParserException;
-use RenanBr\BibTexParser\Exception\ProcessorException;
-
-try {
- // ... parser and listener configuration
-
- $parser->parseFile('/path/to/file.bib');
- $entries = $listener->export();
-} catch (ParserException $exception) {
- // The BibTeX isn't valid
-} catch (ProcessorException $exception) {
- // Listener's processors aren't able to handle data found
-} catch (ExceptionInterface $exception) {
- // Alternatively, you can use this exception to catch all of them at once
-}
-```
-
-## Advanced usage
-
-The core of this library contains these main classes:
-
-- `RenanBr\BibTexParser\Parser` responsible for detecting units inside a [BibTeX] input;
-- `RenanBr\BibTexParser\ListenerInterface` responsible for treating units found.
-
-You can attach listeners to the parser through `Parser::addListener()`.
-The parser is able to detect [BibTeX] units, such as "type", "tag's name", "tag's content".
-As the parser finds a unit, it triggers the listeners attached to it.
-
-You can code your own listener! All you have to do is handle units.
-
-```php
-namespace RenanBr\BibTexParser;
-
-interface ListenerInterface
-{
- /**
- * Called when an unit is found.
- *
- * @param string $text The original content of the unit found.
- * Escape character will not be sent.
- * @param string $type The type of unit found.
- * It can assume one of Parser's constant value.
- * @param array $context Contains details of the unit found.
- */
- public function bibTexUnitFound($text, $type, array $context);
-}
-```
-
-`$type` may assume one of these values:
-
-- `Parser::TYPE`
-- `Parser::CITATION_KEY`
-- `Parser::TAG_NAME`
-- `Parser::RAW_TAG_CONTENT`
-- `Parser::BRACED_TAG_CONTENT`
-- `Parser::QUOTED_TAG_CONTENT`
-- `Parser::ENTRY`
-
-`$context` is an [array] with these keys:
-
-- `offset` contains the `$text`'s beginning position.
- It may be useful, for example, to [seek on a file pointer](https://php.net/fseek);
-- `length` contains the original `$text`'s length.
- It may differ from [string] length sent to the listener because may there are escaped characters.
-
-[BibTeX]: https://tug.org/bibtex/
-[DOI]: https://www.doi.org/
-[DateTimeImmutable]: https://www.php.net/manual/class.datetimeimmutable.php
-[LaTeX]: https://www.latex-project.org/
-[array]: https://php.net/manual/language.types.array.php
-[callable]: https://php.net/manual/en/language.types.callable.php
-[string]: https://php.net/manual/language.types.string.php
-[trim()]: https://www.php.net/trim
diff --git a/vendor/renanbr/bibtex-parser/composer.json b/vendor/renanbr/bibtex-parser/composer.json
deleted file mode 100644
index 2bbbabc..0000000
--- a/vendor/renanbr/bibtex-parser/composer.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "renanbr/bibtex-parser",
- "type": "library",
- "description": "BibTex Parser provides an API to read .bib files programmatically",
- "keywords": [
- "bib",
- "bibtex",
- "latex",
- "parser",
- "bibliography",
- "citation",
- "cite"
- ],
- "license": "MIT",
- "authors": [
- {
- "name": "Renan de Lima Barbosa",
- "email": "renandelima@gmail.com"
- }
- ],
- "require": {
- "php": ">=5.6.0"
- },
- "require-dev": {
- "phpunit/phpunit": ">=5.7",
- "ryakad/pandoc-php": "^1.0"
- },
- "suggest": {
- "ryakad/pandoc-php": "Needed to support LaTeX decoder in class RenanBr\\BibTexParser\\Processor\\LatexToUnicodeProcessor",
- "ueberdosis/pandoc": "Alternate Pandoc PHP package which (if available) will be preferred over ryakad/pandoc-php"
- },
- "config": {
- "sort-packages": true
- },
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "RenanBr\\BibTexParser\\": "src/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "RenanBr\\BibTexParser\\Test\\": "tests/"
- }
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Exception/ExceptionInterface.php b/vendor/renanbr/bibtex-parser/src/Exception/ExceptionInterface.php
deleted file mode 100644
index 4cecdcb..0000000
--- a/vendor/renanbr/bibtex-parser/src/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Exception;
-
-/**
- * Interface for package exceptions.
- */
-interface ExceptionInterface
-{
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Exception/ParserException.php b/vendor/renanbr/bibtex-parser/src/Exception/ParserException.php
deleted file mode 100644
index f2d8803..0000000
--- a/vendor/renanbr/bibtex-parser/src/Exception/ParserException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Exception;
-
-use Exception;
-
-class ParserException extends Exception implements ExceptionInterface
-{
- /**
- * @param string $character
- * @param int $line
- * @param int $column
- */
- public static function unexpectedCharacter($character, $line, $column)
- {
- // Avoid var_export() weird treatment for \0
- $character = "\0" === $character ? "'\\0'" : var_export($character, true);
-
- return new self(sprintf(
- 'Unexpected character %s at line %d column %d',
- $character,
- $line,
- $column
- ));
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Exception/ProcessorException.php b/vendor/renanbr/bibtex-parser/src/Exception/ProcessorException.php
deleted file mode 100644
index a453f39..0000000
--- a/vendor/renanbr/bibtex-parser/src/Exception/ProcessorException.php
+++ /dev/null
@@ -1,18 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Exception;
-
-use Exception;
-
-class ProcessorException extends Exception implements ExceptionInterface
-{
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Listener.php b/vendor/renanbr/bibtex-parser/src/Listener.php
deleted file mode 100644
index 91be372..0000000
--- a/vendor/renanbr/bibtex-parser/src/Listener.php
+++ /dev/null
@@ -1,109 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser;
-
-class Listener implements ListenerInterface
-{
- /** @var array */
- private $entries = [];
-
- /**
- * Current tag name.
- *
- * Indicates where to save contents when triggered by the parser.
- *
- * @var string
- */
- private $currentTagName;
-
- /** @var array */
- private $processors = [];
-
- /** @var array */
- private $processed = [];
-
- /**
- * @return array all entries found during parsing process
- */
- public function export()
- {
- $offset = \count($this->processed);
- $missing = \array_slice($this->entries, $offset);
- foreach ($this->processors as $processor) {
- $missing = array_filter(array_map($processor, $missing));
- }
- $this->processed = array_merge($this->processed, $missing);
-
- return $this->processed;
- }
-
- /**
- * @param callable $processor Function to be applied to every BibTeX entry.
- * The processor given must return the modified entry.
- * Processors will be applied in the same order in which they were added.
- * The suggested signature is:
- * function (array $entry): array
- */
- public function addProcessor(callable $processor)
- {
- $this->processors[] = $processor;
- }
-
- public function bibTexUnitFound($text, $type, array $context)
- {
- switch ($type) {
- case Parser::TYPE:
- // Starts a new entry
- $this->entries[] = [
- '_type' => $text,
- 'type' => $text, // compatibility
- ];
- break;
-
- case Parser::CITATION_KEY:
- $index = \count($this->entries) - 1;
- $this->entries[$index]['citation-key'] = $text;
- break;
-
- case Parser::TAG_NAME:
- // Saves tag into the current entry
- $index = \count($this->entries) - 1;
- $this->currentTagName = $text;
- $this->entries[$index][$this->currentTagName] = null;
- break;
-
- case Parser::RAW_TAG_CONTENT:
- // Searches for an abbreviation
- foreach ($this->entries as $entry) {
- if ('string' === $entry['type'] && \array_key_exists($text, $entry)) {
- $text = $entry[$text];
- break;
- }
- }
- // no break
-
- case Parser::BRACED_TAG_CONTENT:
- case Parser::QUOTED_TAG_CONTENT:
- // Appends content into the current tag
- if (null !== $text) {
- $index = \count($this->entries) - 1;
- $this->entries[$index][$this->currentTagName] .= $text;
- }
- break;
-
- case Parser::ENTRY:
- $index = \count($this->entries) - 1;
- $this->entries[$index]['_original'] = $text;
- break;
- }
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/ListenerInterface.php b/vendor/renanbr/bibtex-parser/src/ListenerInterface.php
deleted file mode 100644
index b5f4f85..0000000
--- a/vendor/renanbr/bibtex-parser/src/ListenerInterface.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser;
-
-interface ListenerInterface
-{
- /**
- * Called when an unit is found.
- *
- * @param string $text The original content of the unit found.
- * Escape character will not be sent.
- * @param string $type The type of unit found.
- * It can assume one of Parser's constant value.
- * @param array $context contains details of the unit found
- */
- public function bibTexUnitFound($text, $type, array $context);
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Parser.php b/vendor/renanbr/bibtex-parser/src/Parser.php
deleted file mode 100644
index 1f83785..0000000
--- a/vendor/renanbr/bibtex-parser/src/Parser.php
+++ /dev/null
@@ -1,566 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser;
-
-use ErrorException;
-use RenanBr\BibTexParser\Exception\ParserException;
-
-class Parser
-{
- const TYPE = 'type';
- const CITATION_KEY = 'citation_key';
- const TAG_NAME = 'tag_name';
- const RAW_TAG_CONTENT = 'raw_tag_content';
- const BRACED_TAG_CONTENT = 'braced_tag_content';
- const QUOTED_TAG_CONTENT = 'quoted_tag_content';
- const ENTRY = 'entry';
-
- const NONE = 'none';
- const COMMENT = 'comment';
- const FIRST_TAG_NAME = 'first_tag_name';
- const POST_TYPE = 'post_type';
- const POST_TAG_NAME = 'post_tag_name';
- const PRE_TAG_CONTENT = 'pre_tag_content';
-
- /** @var string */
- private $state;
-
- /** @var string */
- private $buffer;
-
- /** @var int|null */
- private $bufferOffset;
-
- /** @var array|null */
- private $firstTagSnapshot;
-
- /** @var string|null */
- private $originalEntryBuffer;
-
- /** @var int|null */
- private $originalEntryOffset;
-
- /** @var bool */
- private $skipOriginalEntryReading;
-
- /** @var int */
- private $line;
-
- /** @var int */
- private $column;
-
- /** @var int */
- private $offset;
-
- /** @var bool */
- private $isTagContentEscaped;
-
- /** @var bool */
- private $mayConcatenateTagContent;
-
- /** @var string|null */
- private $tagContentDelimiter;
-
- /** @var int */
- private $braceLevel;
-
- /** @var ListenerInterface[] */
- private $listeners = [];
-
- public function addListener(ListenerInterface $listener)
- {
- $this->listeners[] = $listener;
- }
-
- /**
- * @param string $file
- *
- * @throws ParserException if $file given is not a valid BibTeX
- * @throws ErrorException if $file given is not readable
- */
- public function parseFile($file)
- {
- $handle = @fopen($file, 'r');
- if (!$handle) {
- throw new ErrorException(sprintf('Unable to open %s', $file));
- }
- try {
- $this->reset();
- while (!feof($handle)) {
- $buffer = fread($handle, 128);
- $this->parse($buffer);
- }
- $this->throwExceptionIfReadingEntry("\0");
- } finally {
- fclose($handle);
- }
- }
-
- /**
- * @param string $string
- *
- * @throws ParserException if $string given is not a valid BibTeX
- */
- public function parseString($string)
- {
- $this->reset();
- $this->parse($string);
- $this->throwExceptionIfReadingEntry("\0");
- }
-
- /**
- * @param string $text
- */
- private function parse($text)
- {
- $length = mb_strlen($text);
- for ($position = 0; $position < $length; ++$position) {
- $char = mb_substr($text, $position, 1);
- $this->read($char);
- if ("\n" === $char) {
- ++$this->line;
- $this->column = 1;
- } else {
- ++$this->column;
- }
- ++$this->offset;
- }
- }
-
- private function reset()
- {
- $this->state = self::NONE;
- $this->buffer = '';
- $this->firstTagSnapshot = null;
- $this->originalEntryBuffer = null;
- $this->originalEntryOffset = null;
- $this->skipOriginalEntryReading = false;
- $this->line = 1;
- $this->column = 1;
- $this->offset = 0;
- $this->mayConcatenateTagContent = false;
- $this->isTagContentEscaped = false;
- $this->tagContentDelimiter = null;
- $this->braceLevel = 0;
- }
-
- // ----- Readers -----------------------------------------------------------
-
- /**
- * @param string $char
- */
- private function read($char)
- {
- $previousState = $this->state;
-
- switch ($this->state) {
- case self::NONE:
- $this->readNone($char);
- break;
- case self::COMMENT:
- $this->readComment($char);
- break;
- case self::TYPE:
- $this->readType($char);
- break;
- case self::POST_TYPE:
- $this->readPostType($char);
- break;
- case self::FIRST_TAG_NAME:
- case self::TAG_NAME:
- $this->readTagName($char);
- break;
- case self::POST_TAG_NAME:
- $this->readPostTagName($char);
- break;
- case self::PRE_TAG_CONTENT:
- $this->readPreTagContent($char);
- break;
- case self::RAW_TAG_CONTENT:
- $this->readRawTagContent($char);
- break;
- case self::QUOTED_TAG_CONTENT:
- case self::BRACED_TAG_CONTENT:
- $this->readDelimitedTagContent($char);
- break;
- }
-
- $this->readOriginalEntry($char, $previousState);
- }
-
- /**
- * @param string $char
- */
- private function readNone($char)
- {
- if ('@' === $char) {
- $this->state = self::TYPE;
- } elseif (!$this->isWhitespace($char)) {
- $this->state = self::COMMENT;
- }
- }
-
- /**
- * @param string $char
- */
- private function readComment($char)
- {
- if ($this->isWhitespace($char)) {
- $this->state = self::NONE;
- }
- }
-
- /**
- * @param string $char
- */
- private function readType($char)
- {
- if (preg_match('/^[a-zA-Z]$/', $char)) {
- $this->appendToBuffer($char);
- } else {
- $this->throwExceptionIfBufferIsEmpty($char);
-
- // Skips @comment type
- if ('comment' === mb_strtolower($this->buffer)) {
- $this->skipOriginalEntryReading = true;
- $this->buffer = '';
- $this->bufferOffset = null;
- $this->state = self::COMMENT;
- $this->readComment($char);
-
- return;
- }
-
- $this->triggerListenersWithCurrentBuffer();
-
- // once $char isn't a valid character
- // it must be interpreted as POST_TYPE
- $this->state = self::POST_TYPE;
- $this->readPostType($char);
- }
- }
-
- /**
- * @param string $char
- */
- private function readPostType($char)
- {
- if ('{' === $char) {
- $this->state = self::FIRST_TAG_NAME;
- } elseif (!$this->isWhitespace($char)) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- /**
- * @param string $char
- */
- private function readTagName($char)
- {
- if (preg_match('/^[a-zA-Z0-9_\&\+:\-\.\/\x{00C0}-\x{01FF}]$/u', $char)) {
- $this->appendToBuffer($char);
- } elseif ($this->isWhitespace($char) && empty($this->buffer)) {
- // Skips because we didn't start reading
- } elseif ('}' === $char && empty($this->buffer)) {
- // No tag name found, $char is just closing current entry
- $this->state = self::NONE;
- } else {
- $this->throwExceptionIfBufferIsEmpty($char);
-
- if (self::FIRST_TAG_NAME === $this->state) {
- // Takes a snapshot of current state to be triggered later as
- // tag name or citation key, see readPostTagName()
- $this->firstTagSnapshot = $this->takeBufferSnapshot();
- } else {
- // Current buffer is a simple tag name
- $this->triggerListenersWithCurrentBuffer();
- }
-
- // Once $char isn't a valid tag name character, it must be
- // interpreted as post tag name
- $this->state = self::POST_TAG_NAME;
- $this->readPostTagName($char);
- }
- }
-
- /**
- * @param string $char
- */
- private function readPostTagName($char)
- {
- if ('=' === $char) {
- // First tag name isn't a citation key, because it has content
- $this->triggerListenersWithFirstTagSnapshotAs(self::TAG_NAME);
- $this->state = self::PRE_TAG_CONTENT;
- } elseif ('}' === $char) {
- // First tag name is a citation key, because $char closes entry and
- // lets first tag without value
- $this->triggerListenersWithFirstTagSnapshotAs(self::CITATION_KEY);
- $this->state = self::NONE;
- } elseif (',' === $char) {
- // First tag name is a citation key, because $char moves to the next
- // tag and lets first tag without value
- $this->triggerListenersWithFirstTagSnapshotAs(self::CITATION_KEY);
- $this->state = self::TAG_NAME;
- } elseif (!$this->isWhitespace($char)) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- /**
- * @param string $char
- */
- private function readPreTagContent($char)
- {
- if (preg_match('/^[a-zA-Z0-9]$/', $char)) {
- // When concatenation is available it means there is already a
- // defined value, and parser expect a concatenator, a tag separator
- // or an entry closing char as next $char
- $this->throwExceptionAccordingToConcatenationAvailability($char, true);
- $this->state = self::RAW_TAG_CONTENT;
- $this->readRawTagContent($char);
- } elseif ('"' === $char) {
- // The exception is here for the same reason of the first case
- $this->throwExceptionAccordingToConcatenationAvailability($char, true);
- $this->tagContentDelimiter = '"';
- $this->state = self::QUOTED_TAG_CONTENT;
- } elseif ('{' === $char) {
- // The exception is here for the same reason of the first case
- $this->throwExceptionAccordingToConcatenationAvailability($char, true);
- $this->tagContentDelimiter = '}';
- $this->state = self::BRACED_TAG_CONTENT;
- } elseif ('#' === $char) {
- $this->throwExceptionAccordingToConcatenationAvailability($char, false);
- $this->mayConcatenateTagContent = false;
- } elseif (',' === $char) {
- $this->throwExceptionAccordingToConcatenationAvailability($char, false);
- $this->mayConcatenateTagContent = false;
- $this->state = self::TAG_NAME;
- } elseif ('}' === $char) {
- $this->throwExceptionAccordingToConcatenationAvailability($char, false);
- $this->mayConcatenateTagContent = false;
- $this->state = self::NONE;
- } elseif (!$this->isWhitespace($char)) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- /**
- * @param string $char
- */
- private function readRawTagContent($char)
- {
- if (preg_match('/^[a-zA-Z0-9_\+:\-\.\/]$/', $char)) {
- $this->appendToBuffer($char);
- } else {
- $this->throwExceptionIfBufferIsEmpty($char);
- $this->triggerListenersWithCurrentBuffer();
-
- // once $char isn't a valid character
- // it must be interpreted as TAG_CONTENT
- $this->mayConcatenateTagContent = true;
- $this->state = self::PRE_TAG_CONTENT;
- $this->readPreTagContent($char);
- }
- }
-
- /**
- * @param string $char
- */
- private function readDelimitedTagContent($char)
- {
- if ($this->isTagContentEscaped) {
- $this->isTagContentEscaped = false;
- if ($this->tagContentDelimiter !== $char && '\\' !== $char && '%' !== $char) {
- $this->appendToBuffer('\\');
- }
- $this->appendToBuffer($char);
- } elseif ('}' === $this->tagContentDelimiter && '{' === $char) {
- ++$this->braceLevel;
- $this->appendToBuffer($char);
- } elseif ($this->tagContentDelimiter === $char) {
- if (0 === $this->braceLevel) {
- $this->triggerListenersWithCurrentBuffer();
- $this->mayConcatenateTagContent = true;
- $this->state = self::PRE_TAG_CONTENT;
- } else {
- --$this->braceLevel;
- $this->appendToBuffer($char);
- }
- } elseif ('\\' === $char) {
- $this->isTagContentEscaped = true;
- } else {
- $this->appendToBuffer($char);
- }
- }
-
- /**
- * @param string $char
- * @param string $previousState
- */
- private function readOriginalEntry($char, $previousState)
- {
- if ($this->skipOriginalEntryReading) {
- $this->originalEntryBuffer = '';
- $this->originalEntryOffset = null;
- $this->skipOriginalEntryReading = false;
-
- return;
- }
-
- // Checks whether we are reading an entry character or not
- $isPreviousStateEntry = $this->isEntryState($previousState);
- $isCurrentStateEntry = $this->isEntryState($this->state);
- $isEntry = $isPreviousStateEntry || $isCurrentStateEntry;
- if (!$isEntry) {
- return;
- }
-
- // Appends $char to the original entry buffer
- if (empty($this->originalEntryBuffer)) {
- $this->originalEntryOffset = $this->offset;
- }
- $this->originalEntryBuffer .= $char;
-
- // Sends original entry to the listeners when $char closes an entry
- $isClosingEntry = $isPreviousStateEntry && !$isCurrentStateEntry;
- if ($isClosingEntry) {
- $this->triggerListeners($this->originalEntryBuffer, self::ENTRY, [
- 'offset' => $this->originalEntryOffset,
- 'length' => $this->offset - $this->originalEntryOffset + 1,
- ]);
- $this->originalEntryBuffer = '';
- $this->originalEntryOffset = null;
- }
- }
-
- // ----- Listener triggers -------------------------------------------------
-
- /**
- * @param string $text
- * @param string $type
- */
- private function triggerListeners($text, $type, array $context)
- {
- foreach ($this->listeners as $listener) {
- $listener->bibTexUnitFound($text, $type, $context);
- }
- }
-
- private function triggerListenersWithCurrentBuffer()
- {
- $snapshot = $this->takeBufferSnapshot();
- $text = $snapshot['text'];
- $context = $snapshot['context'];
- $this->triggerListeners($text, $this->state, $context);
- }
-
- /**
- * @param string $type
- */
- private function triggerListenersWithFirstTagSnapshotAs($type)
- {
- if (empty($this->firstTagSnapshot)) {
- return;
- }
- $text = $this->firstTagSnapshot['text'];
- $context = $this->firstTagSnapshot['context'];
- $this->firstTagSnapshot = null;
- $this->triggerListeners($text, $type, $context);
- }
-
- // ----- Buffer tools ------------------------------------------------------
-
- /**
- * @param string $char
- */
- private function appendToBuffer($char)
- {
- if (empty($this->buffer)) {
- $this->bufferOffset = $this->offset;
- }
- $this->buffer .= $char;
- }
-
- /**
- * @return array
- */
- private function takeBufferSnapshot()
- {
- $snapshot = [
- 'text' => $this->buffer,
- 'context' => [
- 'offset' => $this->bufferOffset,
- 'length' => $this->offset - $this->bufferOffset,
- ],
- ];
- $this->bufferOffset = null;
- $this->buffer = '';
-
- return $snapshot;
- }
-
- // ----- Exception throwers ------------------------------------------------
-
- /**
- * @param string $char
- * @param bool $availability
- */
- private function throwExceptionAccordingToConcatenationAvailability($char, $availability)
- {
- if ($availability === $this->mayConcatenateTagContent) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- /**
- * @param string $char
- */
- private function throwExceptionIfBufferIsEmpty($char)
- {
- if (empty($this->buffer)) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- /**
- * @param string $char
- */
- private function throwExceptionIfReadingEntry($char)
- {
- if ($this->isEntryState($this->state)) {
- throw ParserException::unexpectedCharacter($char, $this->line, $this->column);
- }
- }
-
- // ----- Auxiliaries -------------------------------------------------------
-
- /**
- * @param string $state
- *
- * @return bool
- */
- private function isEntryState($state)
- {
- return self::NONE !== $state && self::COMMENT !== $state;
- }
-
- /**
- * @param string $char
- *
- * @return bool
- */
- private function isWhitespace($char)
- {
- return ' ' === $char || "\t" === $char || "\n" === $char || "\r" === $char;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/DateProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/DateProcessor.php
deleted file mode 100644
index e07ee10..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/DateProcessor.php
+++ /dev/null
@@ -1,58 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-use DateTimeImmutable;
-
-class DateProcessor
-{
- use TagSearchTrait;
- const TAG_NAME = '_date';
-
- /**
- * @var string
- */
- private $tagName;
-
- /**
- * @param string $tagName
- */
- public function __construct($tagName = null)
- {
- $this->tagName = $tagName ?: self::TAG_NAME;
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $yearTag = $this->tagSearch('year', array_keys($entry));
- $monthTag = $this->tagSearch('month', array_keys($entry));
- if (null !== $yearTag && null !== $monthTag) {
- $year = (int) $entry[$yearTag];
- $monthArray = explode('~', $entry[$monthTag]);
- if (2 === \count($monthArray)) {
- list($day, $month) = $monthArray;
- $day = (int) $day;
- $dateMonthNumber = date_parse($month);
- $month = $dateMonthNumber['month'] ?: null;
- if (checkdate($month, $day, $year)) {
- $timestamp = mktime(0, 0, 0, $month, $day, $year);
- $entry[$this->tagName] = new DateTimeImmutable(date('Y-m-d', $timestamp), new \DateTimeZone('UTC'));
- }
- }
- }
-
- return $entry;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/FillMissingProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/FillMissingProcessor.php
deleted file mode 100644
index aefbad9..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/FillMissingProcessor.php
+++ /dev/null
@@ -1,40 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-class FillMissingProcessor
-{
- use TagSearchTrait;
-
- /**
- * @var array
- */
- protected $missingFields;
-
- public function __construct(array $missingFields)
- {
- $this->missingFields = $missingFields;
- }
-
- public function __invoke(array $entry)
- {
- $tags = array_keys($entry);
-
- foreach ($this->missingFields as $tag => $value) {
- if (!$this->tagSearch($tag, $tags)) {
- $entry[$tag] = $value;
- }
- }
-
- return $entry;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/KeywordsProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/KeywordsProcessor.php
deleted file mode 100644
index 1f19b6b..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/KeywordsProcessor.php
+++ /dev/null
@@ -1,38 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-/**
- * Splits tags contents as array.
- */
-class KeywordsProcessor
-{
- use TagCoverageTrait;
-
- public function __construct()
- {
- $this->setTagCoverage(['keywords']);
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $covered = $this->getCoveredTags(array_keys($entry));
- foreach ($covered as $tag) {
- $entry[$tag] = preg_split('/, |; /', $entry[$tag]);
- }
-
- return $entry;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/LatexToUnicodeProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/LatexToUnicodeProcessor.php
deleted file mode 100644
index f5eec61..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/LatexToUnicodeProcessor.php
+++ /dev/null
@@ -1,104 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-use Composer\InstalledVersions;
-use Exception;
-use Pandoc\Pandoc;
-use RenanBr\BibTexParser\Exception\ProcessorException;
-use RuntimeException;
-
-/**
- * Translates LaTeX texts to unicode.
- */
-class LatexToUnicodeProcessor
-{
- use TagCoverageTrait;
-
- /** @var (callable(string): string)|null */
- private $converter;
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $covered = $this->getCoveredTags(array_keys($entry));
- foreach ($covered as $tag) {
- // Translate string
- if (\is_string($entry[$tag])) {
- $entry[$tag] = $this->decode($entry[$tag]);
- continue;
- }
-
- // Translate array
- if (\is_array($entry[$tag])) {
- array_walk_recursive($entry[$tag], function (&$text) {
- if (\is_string($text)) {
- $text = $this->decode($text);
- }
- });
- }
- }
-
- return $entry;
- }
-
- /**
- * @param mixed $text
- *
- * @return string
- */
- private function decode($text)
- {
- try {
- return \call_user_func($this->getConverter(), $text);
- } catch (Exception $exception) {
- throw new ProcessorException(sprintf('Error while processing LaTeX to Unicode: %s', $exception->getMessage()), 0, $exception);
- }
- }
-
- /**
- * @return (callable(string): string)
- */
- private function getConverter()
- {
- if ($this->converter) {
- return $this->converter;
- }
-
- if (InstalledVersions::isInstalled('ueberdosis/pandoc')) {
- $pandoc = new Pandoc();
-
- return $this->converter = static function ($text) use ($pandoc) {
- // @phpstan-ignore-next-line
- return mb_substr($pandoc->input($text)->execute([
- '--from', 'latex',
- '--to', 'plain',
- '--wrap', 'none',
- ]), 0, -1);
- };
- } elseif (InstalledVersions::isInstalled('ryakad/pandoc-php')) {
- $pandoc = new Pandoc();
-
- return $this->converter = static function ($text) use ($pandoc) {
- return $pandoc->runWith($text, [
- 'from' => 'latex',
- 'to' => 'plain',
- 'wrap' => 'none',
- ]);
- };
- }
-
- throw new RuntimeException('Pandoc wrapper not installed. Try running "composer require ueberdosis/pandoc"');
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/NamesProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/NamesProcessor.php
deleted file mode 100644
index 2d832eb..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/NamesProcessor.php
+++ /dev/null
@@ -1,243 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-use RenanBr\BibTexParser\Exception\ProcessorException;
-
-/**
- * Splits names in four parts: First Von Last Jr.
- *
- * This class includes source code adapted from the Structures_BibTex package,
- * (c) Elmar Pitschke , included here under PHP license:
- * http://www.php.net/license/3_0.txt
- *
- * @author Andre Chalom
- *
- * @see https://github.com/pear/Structures_BibTex
- */
-class NamesProcessor
-{
- use TagCoverageTrait;
-
- public function __construct()
- {
- $this->setTagCoverage(['author', 'editor']);
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $covered = $this->getCoveredTags(array_keys($entry));
- foreach ($covered as $tag) {
- $entry[$tag] = $this->extractAuthors($entry[$tag]);
- }
-
- return $entry;
- }
-
- /**
- * Extracting the authors.
- *
- * @param string $entry The entry with the authors
- *
- * @return array the extracted authors
- *
- * @author Elmar Pitschke
- */
- private function extractAuthors($entry)
- {
- // Sanitizes the entry to remove unwanted whitespace
- $entry = trim(preg_replace('/\s+/', ' ', $entry));
-
- $authorarray = [];
- $authorarray = explode(' and ', $entry);
- for ($i = 0; $i < \count($authorarray); ++$i) {
- $author = trim($authorarray[$i]);
- /*The first version of how an author could be written (First von Last)
- has no commas in it*/
- $first = '';
- $von = '';
- $last = '';
- $jr = '';
- if (false === mb_strpos($author, ',')) {
- $tmparray = [];
- $tmparray = preg_split('/[\s\~]/', $author);
- $size = \count($tmparray);
- if (1 === $size) { //There is only a last
- $last = $tmparray[0];
- } elseif (2 === $size) { //There is a first and a last
- $first = $tmparray[0];
- $last = $tmparray[1];
- } else {
- $invon = false;
- $inlast = false;
- for ($j = 0; $j < ($size - 1); ++$j) {
- if ($inlast) {
- $last .= ' '.$tmparray[$j];
- } elseif ($invon) {
- try {
- $case = $this->determineCase($tmparray[$j]);
-
- if ((0 === $case) || (-1 === $case)) { //Change from von to last
- //You only change when there is no more lower case there
- $islast = true;
- for ($k = ($j + 1); $k < ($size - 1); ++$k) {
- try {
- $futurecase = $this->determineCase($tmparray[$k]);
- if (0 === $futurecase) {
- $islast = false;
- }
- } catch (ProcessorException $sbe) {
- // Ignore
- }
- }
- if ($islast) {
- $inlast = true;
- if (-1 === $case) { //Caseless belongs to the last
- $last .= ' '.$tmparray[$j];
- } else {
- $von .= ' '.$tmparray[$j];
- }
- } else {
- $von .= ' '.$tmparray[$j];
- }
- } else {
- $von .= ' '.$tmparray[$j];
- }
- } catch (ProcessorException $sbe) {
- // Ignore
- }
- } else {
- try {
- $case = $this->determineCase($tmparray[$j]);
- if (0 === $case) { //Change from first to von
- $invon = true;
- $von .= ' '.$tmparray[$j];
- } else {
- $first .= ' '.$tmparray[$j];
- }
- } catch (ProcessorException $sbe) {
- // Ignore
- }
- }
- }
- //The last entry is always the last!
- $last .= ' '.$tmparray[$size - 1];
- }
- } else { //Version 2 and 3
- $tmparray = [];
- $tmparray = explode(',', $author);
- //The first entry must contain von and last
- $vonlastarray = [];
- $vonlastarray = explode(' ', $tmparray[0]);
- $size = \count($vonlastarray);
- if (1 === $size) { //Only one entry->got to be the last
- $last = $vonlastarray[0];
- } else {
- $inlast = false;
- for ($j = 0; $j < ($size - 1); ++$j) {
- if ($inlast) {
- $last .= ' '.$vonlastarray[$j];
- } else {
- if (0 !== ($this->determineCase($vonlastarray[$j]))) { //Change from von to last
- $islast = true;
- for ($k = ($j + 1); $k < ($size - 1); ++$k) {
- try {
- $case = $this->determineCase($vonlastarray[$k]);
- if (0 === $case) {
- $islast = false;
- }
- } catch (ProcessorException $sbe) {
- // Ignore
- }
- }
- if ($islast) {
- $inlast = true;
- $last .= ' '.$vonlastarray[$j];
- } else {
- $von .= ' '.$vonlastarray[$j];
- }
- } else {
- $von .= ' '.$vonlastarray[$j];
- }
- }
- }
- $last .= ' '.$vonlastarray[$size - 1];
- }
- //Now we check if it is version three (three entries in the array (two commas)
- if (3 === \count($tmparray)) {
- $jr = $tmparray[1];
- }
- //Everything in the last entry is first
- $first = $tmparray[\count($tmparray) - 1];
- }
- $authorarray[$i] = ['first' => trim($first), 'von' => trim($von), 'last' => trim($last), 'jr' => trim($jr)];
- }
-
- return $authorarray;
- }
-
- /**
- * Case Determination according to the needs of BibTex.
- *
- * To parse the Author(s) correctly a determination is needed
- * to get the Case of a word. There are three possible values:
- * - Upper Case (return value 1)
- * - Lower Case (return value 0)
- * - Caseless (return value -1)
- *
- * @param string $word
- *
- * @throws ProcessorException
- *
- * @return int The Case
- *
- * @author Elmar Pitschke
- */
- private function determineCase($word)
- {
- $ret = -1;
- $trimmedword = trim($word);
- /*We need this variable. Without the next of would not work
- (trim changes the variable automatically to a string!)*/
- if (\is_string($word) && (mb_strlen($trimmedword) > 0)) {
- $i = 0;
- $found = false;
- $openbrace = 0;
- while (!$found && ($i <= mb_strlen($word))) {
- $letter = mb_substr($trimmedword, $i, 1);
- $ord = \ord($letter);
- if (123 === $ord) { //Open brace
- ++$openbrace;
- }
- if (125 === $ord) { //Closing brace
- --$openbrace;
- }
- if (($ord >= 65) && ($ord <= 90) && (0 === $openbrace)) { //The first character is uppercase
- $ret = 1;
- $found = true;
- } elseif (($ord >= 97) && ($ord <= 122) && (0 === $openbrace)) { //The first character is lowercase
- $ret = 0;
- $found = true;
- } else { //Not yet found
- ++$i;
- }
- }
- } else {
- throw new ProcessorException('Could not determine case on word: '.$word);
- }
-
- return $ret;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/TagCoverageTrait.php b/vendor/renanbr/bibtex-parser/src/Processor/TagCoverageTrait.php
deleted file mode 100644
index 6bbea3d..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/TagCoverageTrait.php
+++ /dev/null
@@ -1,63 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-trait TagCoverageTrait
-{
- use TagSearchTrait;
-
- /** @var array */
- private $tagCoverageList = [
- '_original',
- '_type',
- ];
-
- /** @var string */
- private $tagCoverageStrategy = 'blacklist';
-
- /**
- * @param array $tags List of tags to be covered
- * @param string $strategy Can assume "whitelist" (default) or "blacklist"
- */
- public function setTagCoverage($tags, $strategy = null)
- {
- $this->tagCoverageList = $tags;
- $this->tagCoverageStrategy = $strategy ?: 'whitelist';
- }
-
- /**
- * Calculates which tags are covered.
- *
- * The search performed internally is case-insensitive.
- *
- * @return array
- */
- protected function getCoveredTags(array $tags)
- {
- // Finds for actual tag names
- $matched = [];
- foreach ($this->tagCoverageList as $original) {
- $actual = $this->tagSearch($original, $tags);
- if (null !== $actual) {
- $matched[] = $actual;
- }
- }
-
- // Whitelist
- if ('whitelist' === $this->tagCoverageStrategy) {
- return $matched;
- }
-
- // Blacklist
- return array_values(array_diff($tags, $matched));
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/TagNameCaseProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/TagNameCaseProcessor.php
deleted file mode 100644
index ad6dda8..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/TagNameCaseProcessor.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-/**
- * Change the case of all tag names.
- */
-class TagNameCaseProcessor
-{
- /** @var int */
- private $case;
-
- /**
- * @param int $case
- */
- public function __construct($case)
- {
- $this->case = $case;
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- return array_change_key_case($entry, $this->case);
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/TagSearchTrait.php b/vendor/renanbr/bibtex-parser/src/Processor/TagSearchTrait.php
deleted file mode 100644
index 99ab10e..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/TagSearchTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-trait TagSearchTrait
-{
- /**
- * Searches for the actual name of a tag.
- *
- * The search performed is case-insensitive.
- *
- * @param string $needle
- *
- * @return string|null
- */
- protected function tagSearch($needle, array $haystack)
- {
- foreach ($haystack as $actual) {
- if (0 === strcasecmp($needle, $actual)) {
- return $actual;
- }
- }
-
- return null;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/TrimProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/TrimProcessor.php
deleted file mode 100644
index bc77595..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/TrimProcessor.php
+++ /dev/null
@@ -1,58 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-/**
- * @author Florent DESPIERRES
- */
-class TrimProcessor
-{
- use TagCoverageTrait;
-
- public function __construct(array $fields = null)
- {
- if ($fields) {
- $this->setTagCoverage($fields);
- }
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $covered = $this->getCoveredTags(array_keys($entry));
- foreach ($covered as $tag) {
- $entry[$tag] = $this->trim($entry[$tag]);
- }
-
- return $entry;
- }
-
- private function trim($value)
- {
- if (\is_array($value)) {
- $trimmed = [];
- foreach ($value as $key => $subValue) {
- $trimmed[$key] = $this->trim($subValue);
- }
-
- return $trimmed;
- }
-
- if (\is_string($value)) {
- return trim($value);
- }
-
- return $value;
- }
-}
diff --git a/vendor/renanbr/bibtex-parser/src/Processor/UrlFromDoiProcessor.php b/vendor/renanbr/bibtex-parser/src/Processor/UrlFromDoiProcessor.php
deleted file mode 100644
index 7309a6a..0000000
--- a/vendor/renanbr/bibtex-parser/src/Processor/UrlFromDoiProcessor.php
+++ /dev/null
@@ -1,49 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace RenanBr\BibTexParser\Processor;
-
-class UrlFromDoiProcessor
-{
- use TagSearchTrait;
-
- const FORMAT = 'https://doi.org/%s';
-
- /**
- * @var string
- */
- private $urlFormat;
-
- /**
- * @param string $urlFormat
- */
- public function __construct($urlFormat = null)
- {
- $this->urlFormat = $urlFormat ?: self::FORMAT;
- }
-
- /**
- * @return array
- */
- public function __invoke(array $entry)
- {
- $doiTag = $this->tagSearch('doi', array_keys($entry));
- $urlTag = $this->tagSearch('url', array_keys($entry));
- if (null === $urlTag && null !== $doiTag) {
- $doiValue = $entry[$doiTag];
- if (\is_string($doiValue) && '' !== $doiValue) {
- $entry['url'] = sprintf($this->urlFormat, $doiValue);
- }
- }
-
- return $entry;
- }
-}