├── .editorconfig
├── .gitattributes
├── .gitignore
├── Analytics
├── Error.cs
├── ErrorEvent.cs
├── Errors.cs
├── Exception.Generic.cs
├── ILog.cs
├── Log.cs
├── LogEntry.cs
├── Message.cs
├── Result.cs
├── ResultLevel.cs
├── ResultTypes.cs
├── Success.Generic.cs
├── Success.cs
├── Warning.cs
├── Warnings.cs
└── XLog.cs
├── Base
├── Base.cs
├── Checkable.cs
├── Disposable.cs
├── Lockable.cs
├── Namable.cs
├── NamableCategory.cs
├── Savable.cs
└── Updatable.cs
├── Collections
├── CollectionChangedEvent.cs
├── Generic
│ ├── ImmutableCollection.Base.cs
│ ├── ImmutableCollection.cs
│ ├── ObjectDictionary.cs
│ └── StringDictionary.cs
├── ICollectionChanged.cs
├── IGroup.cs
├── ILimit.cs
├── Limit.cs
├── ObjectModel
│ ├── ChangeCollection.cs
│ ├── GroupCollection.cs
│ ├── GroupItem.cs
│ ├── IItemChanged.cs
│ ├── NamableCollection.cs
│ ├── ObservableCollection.cs
│ └── ObservableHistory.cs
└── Serialization
│ └── IWriter.cs
├── Conversion
└── IConvert.cs
├── Core.csproj
├── Core.csproj.user
├── Core
├── Accessor.cs
├── Array.cs
├── Attribute.cs
├── Attributes.cs
├── Copy.cs
├── Current.cs
├── Handle.cs
├── Instances.cs
├── Resource.cs
├── Try.cs
└── While.cs
├── Data
├── DataFolders.cs
├── SortDescription.cs
└── SortDirection.cs
├── Enum
├── Appearance.cs
├── CardinalDirection.cs
├── Exclusivity.cs
├── LeftRight.cs
├── Quality.cs
├── RelativeDirection.cs
├── TopBottom.cs
└── Types.cs
├── Input
├── BooleanEvent.cs
├── CanceledEvent.cs
├── ChangedEvent.cs
├── CheckedEvent.cs
├── DefaultEvent.cs
├── LockedEvent.cs
├── Modified.cs
├── SelectedEvent.cs
└── WeakEvent.cs
├── Interface
├── IChange.cs
├── ICheck.cs
├── IContainer.cs
├── IDescription.cs
├── IEntry.cs
├── IFind.cs
├── IGeneric.cs
├── ILock.cs
├── IModify.cs
├── IName.cs
├── IParse.cs
├── IPropertyChanged.cs
├── IRange.Generic.cs
├── IRange.cs
├── IReset.cs
├── IRotate.cs
├── ISelect.cs
├── ISubscribe.cs
└── IUnsubscribe.cs
├── LICENSE
├── Linq
├── Array.Generic.cs
├── Array.cs
├── Assembly.cs
├── Boolean.cs
├── Bullets.cs
├── Convert.cs
├── DateTime.cs
├── Double.cs
├── Enum.cs
├── Expression.cs
├── ICollection.cs
├── ICommand.cs
├── IDictionary.cs
├── IEnumerable.Generic.cs
├── IEnumerable.cs
├── IList.Generic.cs
├── IList.cs
├── IMatrix.cs
├── IPropertyChanged.cs
├── IRange.Generic.cs
├── IVector.cs
├── Int32.cs
├── MemberInfo.cs
├── MethodInfo.cs
├── Object.Generic.cs
├── Object.cs
├── Stack.cs
├── Stream.cs
├── String.cs
├── TimeSpan.cs
├── TimeZone.cs
├── Type.cs
├── Unit.cs
└── Version.cs
├── Local
├── CultureAttribute.cs
└── Language.cs
├── Logo.png
├── Models
├── ViewModel.Generic.cs
└── ViewModel.cs
├── Numerics
├── Angle.cs
├── AngleUnit.cs
├── Axis2D.cs
├── Axis3D.cs
├── Dimensions.cs
├── Formula.cs
├── Formulas.cs
├── IMatrix.cs
├── IPoint2.cs
├── ISize.cs
├── IVector.cs
├── Line.cs
├── LineCollection.cs
├── M.cs
├── MLine.cs
├── MRange.cs
├── MRegion.cs
├── MSize.cs
├── MVector2.cs
├── MVector3.cs
├── MVector4.cs
├── MathParser.cs
├── Matrix.Generic.cs
├── Matrix.cs
├── Number.cs
├── NumberFormat.cs
├── NumberOperation.cs
├── NumberStyle.cs
├── NumberType.cs
├── One.cs
├── Operators.cs
├── Point2.Generic.cs
├── Point2.cs
├── Quadrants.cs
├── Random.cs
├── Range.cs
├── RangeFormat.cs
├── Shapes2.cs
├── Shapes3.cs
├── SizeProperty.cs
├── UDouble.cs
├── USingle.cs
├── Unit.cs
├── Vector.Byte.cs
├── Vector.Generic.cs
├── Vector.cs
└── VectorType.cs
├── Properties
└── AssemblyInfo.cs
├── Reflection
├── AssemblyContext.cs
├── AssemblyInfo.cs
├── AssemblySource.cs
├── AssemblyType.cs
├── ICloneHandler.cs
└── MemberView.cs
├── Serialization
├── BinarySerializer.cs
├── ISerialize.cs
├── SerializationType.cs
└── XmlCallbackSerializer.cs
├── Storage
├── Extensions.cs
├── FileAttribute.cs
├── FileSize.cs
├── FileSizeFormat.cs
└── StoragePath.cs
├── Text
├── Bullets.cs
├── Characters.cs
├── Encoding.cs
├── Expressions.cs
├── StringType.cs
├── SymmetricAlgorithm.cs
└── Wrapping.cs
├── Threading
├── IMethod.cs
├── Method.cs
├── Operation.cs
├── OperationType.cs
├── Queue.cs
├── TaskManagement.cs
└── TaskQueue.cs
├── Time
├── BaseTimer.cs
├── Meridiem.cs
├── Relativity.cs
├── TickEvent.cs
├── TimeZone.cs
└── Timer.cs
├── project.json
├── project.lock.json
└── readme.md
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.cs]
2 |
3 | # IDE0022: Use block body for methods
4 | csharp_style_expression_bodied_methods =true:silent
5 | csharp_style_expression_bodied_local_functions=true:silent
6 | csharp_style_expression_bodied_lambdas=true:silent
7 | csharp_style_expression_bodied_operators=true:silent
8 | csharp_style_expression_bodied_constructors=true:silent
9 |
10 | # IDE0011: Add braces
11 | csharp_prefer_braces = false
12 |
13 | # IDE0036: Order modifiers
14 | dotnet_diagnostic.IDE0036.severity = none
15 |
16 | [*.{cs,vb}]
17 | dotnet_style_predefined_type_for_locals_parameters_members=true:silent
18 |
19 | # IDE0040: Add accessibility modifiers
20 | dotnet_style_require_accessibility_modifiers = never
21 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Windows image file caches
2 | Thumbs.db
3 | ehthumbs.db
4 |
5 | # Folder config file
6 | Desktop.ini
7 |
8 | # Recycle Bin used on file shares
9 | $RECYCLE.BIN/
10 |
11 | # Windows Installer files
12 | *.cab
13 | *.msi
14 | *.msm
15 | *.msp
16 |
17 | # Other
18 | .vs
19 | bin
20 | obj
21 |
22 | # Windows shortcuts
23 | *.lnk
24 |
25 | # =========================
26 | # Operating System Files
27 | # =========================
28 |
29 | # OSX
30 | # =========================
31 |
32 | .DS_Store
33 | .AppleDouble
34 | .LSOverride
35 |
36 | # Thumbnails
37 | ._*
38 |
39 | # Files that might appear in the root of a volume
40 | .DocumentRevisions-V100
41 | .fseventsd
42 | .Spotlight-V100
43 | .TemporaryItems
44 | .Trashes
45 | .VolumeIcon.icns
46 |
47 | # Directories potentially created on remote AFP share
48 | .AppleDB
49 | .AppleDesktop
50 | Network Trash Folder
51 | Temporary Items
52 | .apdisk
53 |
--------------------------------------------------------------------------------
/Analytics/Error.cs:
--------------------------------------------------------------------------------
1 | using Imagin.Core.Linq;
2 | using System;
3 | using System.Xml.Serialization;
4 |
5 | namespace Imagin.Core.Analytics;
6 |
7 | /// Represents an unsuccessful that encapsulates an .
8 | [Serializable]
9 | public class Error : Result
10 | {
11 | [XmlAttribute]
12 | public string FullName { get => Get(""); set => Set(value); }
13 |
14 | [XmlElement]
15 | public Error Inner { get => Get(); set => Set(value); }
16 |
17 | [XmlAttribute]
18 | public string Name { get => Get(""); set => Set(value); }
19 |
20 | [XmlElement]
21 | public string StackTrace { get => Get(""); set => Set(value); }
22 |
23 | [XmlIgnore]
24 | public override ResultTypes Type => ResultTypes.Error;
25 |
26 | public Error() : this(new Exception()) { }
27 |
28 | public Error(object message) : this(new Exception($"{message}")) { }
29 |
30 | public Error(Exception exception) : base(exception.Message)
31 | {
32 | exception = exception ?? new Exception();
33 |
34 | Inner
35 | = exception.InnerException != null
36 | ? new Error(exception.InnerException)
37 | : null;
38 |
39 | Text
40 | = exception.Message;
41 | Name
42 | = exception.GetType().GetAttribute()?.Name ?? exception.GetType().Name;
43 | FullName
44 | = exception.GetType().FullName;
45 | StackTrace
46 | = exception.StackTrace;
47 | }
48 | }
--------------------------------------------------------------------------------
/Analytics/ErrorEvent.cs:
--------------------------------------------------------------------------------
1 | using Imagin.Core.Input;
2 |
3 | namespace Imagin.Core.Analytics;
4 |
5 | public delegate void ErrorEventHandler(object sender, ErrorEventArgs e);
6 |
7 | public class ErrorEventArgs : EventArgs
8 | {
9 | public ErrorEventArgs(Error input) : base(input) { }
10 | }
--------------------------------------------------------------------------------
/Analytics/Errors.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Imagin.Core;
4 |
5 | public class ChildNotFoundException : Exception
6 | {
7 | public ChildNotFoundException() : base($"'{typeof(Parent).FullName}' must have logical or visual child of type '{typeof(Child).FullName}'.") { }
8 | }
9 |
10 | public class DeserializationFailedException : Exception
11 | {
12 | public DeserializationFailedException(Type type, Exception inner = null) : base($"'{type.FullName}' failed to deserialize.", inner) { }
13 | }
14 |
15 | public class ExternalChangeException