diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..304707b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,44 @@
+# Specifies intentionally untracked files to ignore when using Git
+# http://git-scm.com/docs/gitignore
+
+*~
+*.sw[mnpcod]
+.tmp
+*.tmp
+*.tmp.*
+*.sublime-project
+*.sublime-workspace
+.DS_Store
+Thumbs.db
+UserInterfaceState.xcuserstate
+$RECYCLE.BIN/
+
+*.log
+log.txt
+npm-debug.log*
+
+/.idea
+/.ionic
+/.sass-cache
+/.sourcemaps
+/.versions
+/.vscode
+/coverage
+/dist
+/node_modules
+/platforms
+/plugins
+/www
+
+
+bin/
+tmp/
+.metadata
+.classpath
+.settings
+.project
+
+.gradle
+
+target/
+build/
\ No newline at end of file
diff --git a/Changelog.md b/Changelog.md
deleted file mode 100644
index ab29a47..0000000
--- a/Changelog.md
+++ /dev/null
@@ -1,211 +0,0 @@
-# SerialX 1.0.0 (beta)
-
-Release date: 8.14.2020 (Evening)
-
-What was added:
-* Serializer utility class.
-* 2 build-in protocols.
-#
-
-# SerialX 1.0.5 (beta)
-
-Release date: 8.20.2020 (Night)
-
-What was added:
-* Ability to generate comments.
-* Fixing some small bugs.
-#
-
-# SerialX 1.0.6
-
-Release date: 8.22.2020 (Noon)
-
-What was added:
-* Improveing way to serialize numbers.
-* Adding suffixes fot double "d", short "s" and byte "y"!
-* Java Base64 serialized object now does not need to start with "#"!
-* Objects serialized using protocol with no arguments will now not by serialized with null argument!
-* Repairing an error with long suffix!
-#
-
-# SerialX 1.1.0
-
-Release date: 9.22.2020 (Afternoon)
-
-What was added:
-* Adding decimal number formatter!
-* "unserialize" method in SerializationProtocol now throws Exception which makes reflection stuff easier!
-* Fixing some problems such as "Too big objects simply disappear during serialization!"
-* Better optimization. Improving the performance of Serializing and Unserializing astronomically!
-* Some characters now can be serialized using regular Java way for example 'a'! However SerialX syntax characters such as { or } must be still serialized using ASCII code!
-Numbers must have additional character behind for example '4/' otherwise they will be taken as ASCII code!
-* Some new methods and stuff!
-#
-
-# SerialX 1.1.2
-
-Release date: 9.27.2020 (Evening)
-
-What was added:
-* Integers now can be serialized using Java binary and hexadecimal form (0b1111, 0xffff)!
-* Numbers can be separated with underscore (just like in Java)!
-* Fixing the bug when formatter mess up decimals suffixes and integers!
-#
-
-# SerialX 1.1.5
-
-Release date: 12.6.2020 (Evening)
-
-What was added:
-* Variable system! Now "order" is not only possibility.
-* Functions working with variable system!
-* Functions that allows you to insert custom code (comments and stuff)!
-* Fixing "long-lived" bugs such as the on with double slash comment, hopefuly for the last!
-#
-
-# SerialX 1.2.0_pre - V2
-
-Release date: 3.18.2021 (Afternoon)
-
-What was added:
-* New Scope object that are now values and variables loaded in to so now its not necesarry to load indepednent values and variables separatly!
-* Scope is the physical manifestation of loaded content in your program!
-* Ability to create sub-scopes / neasted scopes in side of parent scopes or file itself similarly to JSON! For example: { \/\*scope\*\/ }
-* Ability to serialize string normaly in quotes like in java! But certain syntactical characters from SerialX cant be present!
-* "splitValues" method was removed becasue it was out of purpous of library itself.
-* Comma now works as semicolon!
-* Tremendous reading performence boost! Large quantity reading is now up to 50x faster than in previous version.
-* Fixing a bug when order of elements being messed up during serialization.
-* Fixing a bug with hexadecimal and binary number formats.
-* Fixing some other less important bugs.
-* Note: Since this is pre release, there are probably some bugs but hopefully nothing totaly broken. Also this prerelease can only read scopes, not write!
-#
-
-# SerialX 1.2.2
-
-Release date: 4.11.2021 (Afternoon)
-
-What was added:
-* Ability to serialize Scope object!
-* Ability to clone Objects using Serializer!
-* Ability to instantiate any object using Serializer by calling shortest public constructor!
-* Now you can access Java utility from SerialX, you can invoke public static methods and fields directly from SerialX!
-* SelfSerializable interface which gives you ability to serialize objects without protocol by calling public constructors!
-* Static field "new" to obtain clone of variable and "class" to obtain class of variables value!
-* 4 new protocols:
- * MapProtocol - to serialize maps!
- * ScopeProtocol (reading only) to read scopes using protocol!
- * AutoProtocol - will automatically serialize selected fields with getters and setters!
- * EnumProtocol - to serialize any java enum!
- * SelfSerializableProtocol - operates with SelfSerializable interface!
-* Tremendous writing performance boost! Large quantity writing is now up to 80x faster than in previous version.
-* Eliminating usage of Regex completely which results into even faster reading!
-* Now you can access variables of scopes by "." directly in SerialX!
-* Fixing bug when blank characters despair from string, also now string can contains any character except quote and nextline!
-* SerialX API is now partially opensource, the sources are included in main Jar, however according to the License you cant appropriate any of this code without including its origins!
-#
-
-# SerialX 1.2.5
-
-Release date: 4.11.2021 (Afternoon)
-
-What was added:
-* Serializer can now serialize into any Appendable which includes all Writers, StringBuilder and many others which gives you a lot of opportunities!
-* Serializer can now read from any CharSequence or any Reader object!
-* Serializer is now fully capable of reading JSON!
-* Serializer can read specific object or variable while ignoring any other stuff which saves a lot of performance (this is experimental)!
-* Slight increase of reading performance!
-* Utility to work with JSON like JsonScope!
-* A lot of new utility in Scope object such as filtering or object transformation!
-* Small bugs fixed!
-#
-
-# SerialX 1.3.0
-
-Release date: 8.8.2021 (Night)
-
-What was added:
-* Revelation of compiler that is now Recursive descent parser that is customizable and configurable.
-* Structure of entire API was generally reorganized in to 3 main sections:
- * Serializer - which is main class that operates entire API. Is responsible for input and output, formatting and general utility!
- * DataParser and DataConverter API - is recursive descent parser itself that is responsible for converting objects to strings and parsing them back! In default SerialX API implementation now known as JUSS (Java universal serial script) are these parsers and converters available:
- * NumberConverter - for converting and parsing numbers (integers, decimals, hexa, bin)!
- * BooleanConverter - for converting and parsing booleans!
- * CharacterConverter - for converting and parsing chars!
- * StringConverter - for converting and parsing strings ("Hello world!", "And others...")!
- * NullConverter - for converting and parsing null!
- * ObjectConverter - for converting and parsing SerializationProtocol expressions and Scopes!
- * VariableConverter - for converting and parsing JUSS variables (Map.Entry)!
- * SerializableBase64Converter - for converting and parsing Base64 expressions (java.io.Serializable)!
- * ArrayConverter - for converting and parsing primitive arrays!
- ##
- * OperationGroups - for parsing expression groups such as (5 + 5) / 2
- * ArithmeticOperators - for parsing arithmetic expression such as 2 + 5 * 4 ** 2
- * LogicalOperators - for parsing logical expression such as true && false || true
- * ComparisonOperators - for comparing objects, for instance 6 > 5
- * ConditionalAssignmentOperators - that provides ternary operator (?:) and null coalescing (??)
- * NegationOperator - to negate stuff, for example !true
- ##
- * As mentioned. you can create your own parsers or even replace already existing ones with yours!
- * SerializationProtocol API - long known protocol system for more complex objects. It contains 8 protocols as before! Now protocols are operated by ObjectConverter!
-* New import system that allows you to import some class once with certain alias and then use it with that alias, similar to java!
-* Too big integers are now automatically converted into long without necessarily of using L suffix!
-* Small new syntax features and alot of small enhancements (shortened version of variable being initialized to scope)!
-* Alot of string utility methods from Serializer become public and some were moved into converters where they are mainly used!
-* Registry object which is Collection type that can store only one instance per class!
-* Some new functions in Scope!
-* Deprecated methods were removed!
-* Source code was excluded from main jar to save space and is now available in separate src.zip file! Now on java doc files will not be provided and src.zip should be used instead!
-* Small bugs fixed but there were alot of internal changes in this update so they might be another bugs so I encourage you to report any bug you encounter!
-#
-
-# SerialX 1.3.2
-
-Release date: 10.25.2021 (Morning)
-
-What was added:
-* Serializer now abstract class which inherits Scope so now it is Scope that can serialize itself! Serialization and deserialization methods are now not static and original functionality has been split into two separated objects that inherit Serializer:
- * JussSerializer - which is responsible for serializing and deserializing objects using Juss format (original functionality of Serializer).
- * JsonSerializer - which is responsible for serializing and deserializing objects using Json format (successors of JsonSelxUtils)
-* JsonSelxUtils was replaced with JsonSerializer that is capable of both reading and writing Json!
-* Main formatting and reading algorithms can be now overridden by extending JsonSerializer, JussSerializer or Serializer!
-* Ability to set multiple variables on one value, for example x = y = z = 5
-* Ability to remove multiple variables by setting them on null!
-* Variables of scope are now settable from outer world, for example someScope.x = 9
-* Compare identity operator (triple equals) was added and transtype comparison logic was changed, mainly between primitive datatypes!
-* Logical operators now have higher precedence over comparison operators by default!
-* Logic behind operators can now be overridden by extending belonging operator DataParser!
-* Adding some new utility and functionalities!
-* Small syntax features (scopes now don't have to be separated with semicolon if they are in new line)!
-* Package name was renamed from "ugp.org.SerialX" to "org.ugp.serialx"!
-* Fixing some bugs with formatting and reading!
-#
-
-# SerialX 1.3.5
-
-Release date: imminent...
-
-What was added:
-* Scope was split into 2 separate classes:
- * GenericScope - that allows you to set generic types of keys and values. Furthermore, it can be serialized with generic types preserved!
- * Scope - that you already know which poses the same functionality as before now as a child class of GenericScope!
-* Imports system was redesigned and splitted into multiple separate classes, each handling some part of functionality!
- * Also imports are now Serializer specific rather than global!
-* Precedence of ConditionalAssignmentOperators ?: and ?? was slightly altered to closely resemble behavior of these operators in other languages. Also, these operators now can be nested without necessity of ().
-* Parser API (DataParser and DataConverter) was redesigned and is now handled by ParserRegistry which can provide additional functionality such as caching to improve performance!
-* Serialization syntax of Serializable objects using Base64 via SerializableBase64Converter was slightly altered to mitigate conflicts with the rest of JUSS syntax!
-* New "from/into API" which is now part of the Scope that allows you to map almost any java object into a scope and any scope into corresponding java object!
-* AutoProtocol is now based on "from/into API" making it more flexible!
-* New UniversalObjectInstantiationProtocol that can deserialize any object by calling its constructor (something similar to ObjectClass::new)!
-* SerializationProtocols now have a "mode" that can define what they can do!
-* JsonSerializer will now serialize JUSS protocols as JSON objects to achieve more JSON compatibility out of the box!
-* LogProvider which is now responsible for logging errors and allows you to implement your own form of logging!
-* SerializationDebugger that provides ability to debug serialization and deserialization!
-* New utility across API and small new functionalities and changes!
-* Fixing bugs (hopefully not adding new ones):
- * Long live bug with // and /* comments in strings now fixed for good (I hope...)
- * Bug with wrong formatting when serializing Json in Juss and revers!
- * Some other small ones!
-* New examples were added!
-* Source code is now also available in "dev" branch!
-#
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 7212173..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Based on MIT License
-
-Copyright (c) USP 2019-2020 | Peto
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated files, to deal
-in the Software without restriction, including without limitation the rights
-to use, copy or modify copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-Permission to publish, distribute, sublicense or sell for example as content of some game or application is allowed
-subject to the following conditions: Indication of the original source (https://github.com/PetoPetko/Java-SerialX/).
-
-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/README.md b/README.md
index f0b7292..8f0b6c0 100644
--- a/README.md
+++ b/README.md
@@ -1,134 +1,2 @@
-# Java-SerialX
-SerialX is a powerful utility library to serialize objects in Java. Serialization means storing Java objects and values into file.
-SerialX is improving regular Java Base64 serialization and adding serialization protocols that you can create for objects that cant be serialized using regular way. For example final non-serializable objects, 3rd party objects and others. SerialX API is storing objects into JSON like "programming" language (data format) called JUSS (Java universal serial script) which shares common functionality with JSON and provides more customizability and extended functionality! This allows you to serialize multiple objects into one string or also into file. But unlike to JSON, JUSS general conception is based on determinate order of arguments or values we can say. Latest versions also provides variable system (keys, values) similar to JSON. But in JUSS these variables can be overided and can interact with each other and can be used multiple times. Nowadays SerialX provides recursive descent parser that can be modified so you can create your own data structures! In other words SerialX allows you to serialize **anything**, it's pretty simple to use and practically limitless!
-## Brief overview of working concept and advantages compared to regular serialization:
-**Regular java serialization** is strongly based on some kind of "magic" or we can say "godly reflection" which will reflectivly read all fields of object includeing private and final ones and then interprets it as Base64 string. And during deserialization it will create an empty instance of object absolutly ignoring its constructors by using some "magic" compilator process to create it instad, and then it will violently write all serialized field again includeing private and final ones which is realy not the best aproach! Also this alows you to serialize only instances of java.io.Serializable and all field must be instances of Serializable as well which is also not the most usefull thing!
-Compare to this, **SerialX API** is doing everything programmatically. SerialX API uses ``SerializationProtocol``s that are registred in ``ProtocolRegistry``, each working for certain class! ``SerializationProtocol`` contains 2 methods, ``serialize(T object)`` and ``unserialize(Object[] args)``. ``serialize(T object)`` method obtains certain object to serialize and its job is to turn this object into array of objects that we can then reconstruct this exact object from, such as constructor arguments! These arguments are then paste into ``Serializer`` and ``Serializer`` serialize them into mentioned SerialX API data storage format. During deserialization, ``Serializer`` first takes givven data serialized in SerialX, unserialize them into array of objects and this array is then paste into ``unserialize(Object[] args)`` method of certain ``SerializationProtocol`` as argument. Job of ``unserialize(Object[] args)`` method is to create an new instance of serialized object ``T`` from givven arguments! Evrything in this function is controlled by you and you can write them by your self which gives you an absolute control!
-Note: Since 1.3.0, protocols are operated by DataParsers and are mainly used for more complex objects. Also Object to String conversion is now done by DataConverter and String - Object is done by DataParsers and further by protocols!
-**Advantages and goals:**
-* Overcoming most of regular serialization problems such as bypassing constructor!
-* Powerful and highly costomizable/opinionated, you have control over stuff via protocols and recursive descent parser!
-* Programmaticall, meaning you can decide how objects will be serialized and deserialized!
-* Fast, SerialX solution is almost always far more faster than regular serialization!
-* Readable, It depends but SerialX formats are supposed to be pretty readable for humans and should be also pretty intuitive for learning and writing!
-* Data types recognision, SerialX defaultly supports all primitve datatypes from java and also objects (done with protocols) compare to Json for instance!
-* Small storage requirements, as you can see belove SerialX is often times far smaller than Json not even mentioning XML!
-* Quantity, SerialX can serialize multiple objects into one file or string!
-* Fully compatible with JSON!
-* Very easy to use, at the begining all what you need to know is ``Serializer.SerializeTo(file, objects)`` for serializing and ``Serializer.LoadFrom(file)`` for deserializing!
-* Recursive descent parser that is fully customizable and can be used to parse and convert potentialy anything from JSON to CSS!
-
-## Comparison: XML (.xml) vs Json (.json) vs YAML (.yml) vs JUSS (.juss or .srlx)
-Sample object:
-```
-public class Foo
-{
- double val1 = 55, val2 = 455.45;
- float val3 = 236.12F;
- boolean flag = true;
-
- public double getVal1()
- {
- return val1;
- }
- public void setVal1(double val1)
- {
- this.val1 = val1;
- }
- public double getVal2()
- {
- return val2;
- }
- public void setVal2(double val2)
- {
- this.val2 = val2;
- }
- public float getVal3()
- {
- return val3;
- }
- public void setVal3(float val3)
- {
- this.val3 = val3;
- }
- public boolean isFlag()
- {
- return flag;
- }
- public void setFlag(boolean flag)
- {
- this.flag = flag;
- }
-}
-```
-##
-Serialized via **XMLDecoder for XML:**
-```
-
-
Serialized via **JACKSONE (hypothetical) for Json:**
-```
-...
-{
- "val1" : 55.0,
- "val2" : 455.45,
- "val3" : 236.12,
- "flag" : true
-}
-```
-
Serialized via **(hypothetical) YAML:**
-```
-val1: 55.0
-val2: 455.45
-val3: 236.12
-flag: true
-```
-
Serialized via **SerialX for JUSS (protocol):**
-```
-some.package.Foo 55D 455.45 236.12F T;
-```
-## After introduction of variables in 1.1.5 and scope in 1.2.0:
-Serialized via **SerialX for JUSS (protocol + scope):**
-```
-some.package.Foo {
- val1 = 55D,
- val2 = 455.45,
- val3 = 236.12F,
- flag = T
-}
-```
-
Serialized via **SerialX for JUSS (scope only):**
-```
-{
- val1 = 55D,
- val2 = 455.45,
- val3 = 236.12F,
- flag = T
-}
-```
-
Maybe it is a question of formating but JUSS with protocol will be the shortest one anyway. Because, in this case, instead of having some sort of key to the value you simply have its order (index)!
-And value's data type is specified by suffix if it is a primitive data type or simply by package name as the first argument in case of an object! Other arguments (count, order, type) are then specified by a SerializationProtocol! Generally, one line means one object, one value (separated by spaces) means one argument!
-Note: Since there is variable system in 1.1.5, the order of values is now not the only option to obtain an object or value!
-
-## Info
-* If you want to add or see issues just click on [Issues section](https://github.com/PetoPetko/Java-SerialX/issues) in up.
-* If you want to comment or suggest an feature use [Discussions section](https://github.com/PetoPetko/Java-SerialX/discussions).
-* If you want to see or learn some things about library then see the documentation or Sample Open Source Implementation.
-* If you want to download library, dont use commits section, use [Releases section](https://github.com/PetoPetko/Java-SerialX/releases) or click that big green button "Clone or download" to download the latest version.
-* And if you want to see changelog open [changelog file](Changelog.md) or use [Releases section](https://github.com/PetoPetko/Java-SerialX/releases) too.
+# Java-SerialX dev
+This branch is used for testing and stuff!
diff --git a/SerialX-core/build.gradle b/SerialX-core/build.gradle
new file mode 100644
index 0000000..66d8920
--- /dev/null
+++ b/SerialX-core/build.gradle
@@ -0,0 +1,10 @@
+/*
+ * This file was generated by the Gradle 'init' task.
+ */
+
+plugins {
+ id 'org.ugp.java-conventions'
+}
+
+group = 'org.ugp.serialx'
+description = 'SerialX core'
diff --git a/SerialX-core/pom.xml b/SerialX-core/pom.xml
new file mode 100644
index 0000000..561fa3b
--- /dev/null
+++ b/SerialX-core/pom.xml
@@ -0,0 +1,15 @@
+
+ * Note: Variables are managed and accessed classically via {@link Map} methods such as put(KeyT key, Object)
and array of independent values is accessed by via {@link List} methods such as add(Object)
and get(int)
+ * Also this is java representation of JUSS GenericScope group such as:
+ *
+ *
+ * {
+ * //This is generic scope in JUSS! Variable keys are generic!
+ * }
+ *
+ *
+ *
+ * @author PETO
+ *
+ * @since 1.2.0
+ *
+ * @param