<commit_before>﻿WIP 2.3.5
FEATURES HIGHLIGHT:
 - Added new awesome vertex snapping feature on vertex drag. Many thanks to perturbare for this wonderful contibution! The feature is implemented around DragBehaviour class 
 and is represented in several new settings allowing the drag to be perform around some sort of virtual snap grid. Please read the comment for the DragBehaviour class for detailed info.
 - Added new feature & example preview in showcase app: graph data filtering. This feature allows you to filter the graph prior to layout generation or relayout based on the pipeline of 
 LogicCore::Filters that are processed sequentially. These filters can modify graph using custom logic. The output graph will be available for interaction along with the copy of the original 
 graph. User then may choose if he wish to revert graph to the original state or apply filter results permanently.

DETAILED CHANGELOG:
 - Added Universal Windows Application support and example project
 - Added StateStorage::ImportState() method to allow state import/export logic between several graphs
 - Added GraphArea::IsDisposed property that indicated that GraphArea object has been disposed and shouldn't be used anymore
 - Added GraphArea::CreateNewStateStorage() protected method to be able to implement custom state storage logic for GraphArea
 - Added ParameterizedLayoutAlgorithmBase::EnsureUniqueRandomInitialPositions property that enables unique random positions generation for layout algorithms. False by default, True for LinLog algorithm.
 - Added VertexControl::VCPRoot property whcih represents the VCP root container for easier runtime VCP management. To be able to use it you have to define PART_vcproot template element as Panel descendant.
 - Added new awesome vertex snapping feature on vertex drag (thanks to perturbare)
 - Added GraphArea::EnableVisualsCleanupOnRelayout property which is True by default. Specifies if visual graph should be cleaned up on relayout
 - Added methods LogicCore::PushFilters(), LogicCore::ApplyFilters() and LogicCore::PopFilters along with LogicCore::Filters property which implements graph data filtering feature
 - Added LogicCore::IsFiltered property to identify graph filtering state. If graph is filtered the filter results can be applied or popped back.
 - Fixed edge label positioning, now it is more accurate for pathed edges
 - Fixed LinLog negative energy issue (thanks to Katya)
 - Fixed one vertex ISOM algorithm exception (thanks to jorgensigvardsson)
 - Fixed external alg vertex sizes grab logic (thanks to ValentinMarinov)
 - Made StateStorage class extensible by adding virtual modifiers to methods
 - Improved algorithm factory logic to avoid graph type cast exceptions in some class declaration cases

RELEASE 2.3.4
DETAILED CHANGELOG:
 - Further improvements to printing logic. GraphArea::PrintDialog() method now takes print DPI as the first parameter and always fit content int page.

RELEASE 2.3.3
DETAILED CHANGELOG:<commit_msg>+ log fix<commit_after>﻿WIP 2.3.5
FEATURES HIGHLIGHT:
 - Added new awesome vertex snapping feature on vertex drag. Many thanks to perturbare for this wonderful contibution! The feature is implemented around DragBehaviour class 
 and is represented in several new settings allowing the drag to be perform around some sort of virtual snap grid. Please read the comment for the DragBehaviour class for detailed info.
 - Added new feature & example preview in showcase app: graph data filtering. This feature allows you to filter the graph prior to layout generation or relayout based on the pipeline of 
 LogicCore::Filters that are processed sequentially. These filters can modify graph using custom logic. The output graph will be available for interaction along with the copy of the original 
 graph. User then may choose if he wish to revert graph to the original state or apply filtering results permanently.
 Please read the details at: http://panthernet.ru/forum/index.php/topic/346-235-graph-data-filtering-features/

DETAILED CHANGELOG:
 - Added Universal Windows Application support and example project
 - Added StateStorage::ImportState() method to allow state import/export logic between several graphs
 - Added GraphArea::IsDisposed property that indicated that GraphArea object has been disposed and shouldn't be used anymore
 - Added GraphArea::CreateNewStateStorage() protected method to be able to implement custom state storage logic for GraphArea
 - Added ParameterizedLayoutAlgorithmBase::EnsureUniqueRandomInitialPositions property that enables unique random positions generation for layout algorithms. False by default, True for LinLog algorithm.
 - Added VertexControl::VCPRoot property whcih represents the VCP root container for easier runtime VCP management. To be able to use it you have to define PART_vcproot template element as Panel descendant.
 - Added new awesome vertex snapping feature on vertex drag (thanks to perturbare)
 - Added GraphArea::EnableVisualsCleanupOnRelayout property which is True by default. Specifies if visual graph should be cleaned up on relayout
 - Added methods LogicCore::PushFilters(), LogicCore::ApplyFilters() and LogicCore::PopFilters along with LogicCore::Filters property which implements graph data filtering feature
 - Added LogicCore::IsFiltered property to identify graph filtering state. If graph is filtered the filter results can be applied or popped back.
 - Fixed edge label positioning, now it is more accurate for pathed edges
 - Fixed LinLog negative energy issue (thanks to Katya)
 - Fixed one vertex ISOM algorithm exception (thanks to jorgensigvardsson)
 - Fixed external alg vertex sizes grab logic (thanks to ValentinMarinov)
 - Made StateStorage class extensible by adding virtual modifiers to methods
 - Improved algorithm factory logic to avoid graph type cast exceptions in some class declaration cases

RELEASE 2.3.4
DETAILED CHANGELOG:
 - Further improvements to printing logic. GraphArea::PrintDialog() method now takes print DPI as the first parameter and always fit content int page.

RELEASE 2.3.3
DETAILED CHANGELOG:
{'fraction_non_alphanumeric': 0.036205766710353866, 'fraction_numerical': 0.003931847968545216, 'mean_word_length': 5.105, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4787049', 'n_tokens_mistral': 1423, 'n_tokens_neox': 1341, 'n_words': 803}