Download the PHP package wandersonwhcr/romans without Composer
On this page you can find all versions of the php package wandersonwhcr/romans. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download wandersonwhcr/romans
More information about wandersonwhcr/romans
Files in wandersonwhcr/romans
Package romans
Short Description A Simple PHP Roman Numerals Library
License MIT
Informations about the package romans
romans
A Simple PHP Roman Numerals Library
Usage
This library includes a simple couple of filters to convert a string
with
Roman number to an int
that represents the input as decimal and decimal int
to a string
with Roman number as result.
Installation
This package uses
Composer as default
repository. You can install it adding the name of package in require
section
of composer.json
, pointing to the last stable version.
Also, Romans uses Semantic Versioning. The following package versions support these PHP releases:
- Romans
1.0.*
: PHP^7.0
(Augustus) - Romans
1.1.*
: PHP^7.0
(Tiberius) - Romans
1.2.*
: PHP>=7.4
(Caligula) - Romans
1.3.*
: PHP>=7.4
(Claudius) - Romans
1.4.*
: PHP>=7.4
(Nero) - Romans
1.5.*
: PHP>=8.0
(Galba)
Integrations
This library can be used as dependency for projects, making integrations with libraries or frameworks easier. If you want to add more items in this list, please, open an issue or create a pull request, adding your project alphabetically.
- Illuminate Romans: Laravel Illuminate Romans Integration
- Kirby Romans: Kirby CMS Integration
- Laminas Romans: Laminas Project Romans Integration
- Plates Romans Extension: Plates Extension
- Twig Roman Numerals Extension: Twig Extension (Symfony, WordPress + Timber)
Zend Romans: Zend Framework Romans IntegrationDEPRECATED
Advanced Usage
The Romans
package uses a Lexer-Parser approach and a Deterministic Finite
Automaton (DFA) to convert Roman number to int
, using a Grammar Token library.
Exception Handling
The filter RomanToInt
uses Lexer to tokenize the input and Parser to build the
int
number. When errors are found, the Lexer or Parser throw Exceptions to
notify the problem with a specific code.
You can use this structure to validate Roman numbers, adding a try..catch
block to check if $input
is valid. Also, you can validate if an int
can be
filtered to Roman using an IntToRoman
filter.
Zero
The zero value is represented as string
"N"
, the initial of nulla or
nihil, the Latin word for "nothing" (see references).
Cache
This package uses PSR-6 Caching Interface
to improve execution, mainly over loops (like while
or foreach
) using cache
libraries. Any PSR-6 implementation can be used and we suggest
Symfony Cache package.
Development
You can use Docker Compose to build an image and run a container to develop and test this package.
Techniques
This section describes techniques used by this package to convert Roman numbers
into int
and vice-versa.
Lexer-Parser
A Lexer-Parser approach was chosen because the validating and reading of Roman
numbers are more simplified: the Lexer is responsible for reading and transform
the input into tokens, validating content at char level; and the Parser is
responsible for transform tokens into numbers, validating content at position
level and converting to int
through a DFA.
Wikipedia says that "lexical analysis is the process of converting a sequence of characters into a sequence of tokens", that "is a structure representing a lexeme that explicity indicates its categorization for the purpose of parsing". Even, Wikipedia says that "parsing or syntax analysis is the process of analysing symbols conforming to the rules of a formal grammar".
This structure makes easier the development of a structure responsible to read
an input string
, converting it to another structure according to specific
charset and its position inside input.
Deterministic Finite Automaton (DFA)
A DFA was developed to check if a string
with Roman number is valid. This
technique was choiced because other implementations simply convert the input
without checking rules, like four chars sequentially.
The current automaton definition is declared below.
References
- Rapid Tables: How to Convert Roman Numerals to Numbers
- Wikipedia: Zero in Roman Numerals
- Wikipedia: Lexical Analysis
- Wikipedia: Parsing
- Wikipedia: Deterministic Finite Automaton
License
This package is opensource and available under MIT license described in LICENSE.