22uid : Ubiquity.NET.Versioning
33remarks : *content
44---
5- This namespace contains the stand alone versioning support for the different forms of version
6- information supported.
5+ This namespace contains the stand alone versioning support for the different forms of
6+ version information supported.
77
88### Class Diagram
99The following diagram serves to illustrates the primary relationships between the various
@@ -55,32 +55,35 @@ classDiagram
5555 CSemVerCI "1" *-- CSemVer:BaseVersion
5656```
5757> [ !IMPORTANT]
58- > There is no inheritance between a ` SemVer ` , ` CSemVer ` , and ` CSemVerCI ` . While conversion does
59- > exist they are not completely compatible due the constraints of ALWAYS comparing case
60- > insensitive for ` CSemVer ` and ` CSemVerCI `
58+ > There is no inheritance between a ` SemVer ` , ` CSemVer ` , and ` CSemVerCI ` . While
59+ > conversion is possible in many cases they are not completely compatible due the
60+ > constraints on ranges and rules of ALWAYS comparing case insensitive for ` CSemVer `
61+ > and ` CSemVerCI `
6162
6263The primary differences between a generic SemVer, a CSemVer and CSemVerCI is in how the
63- sequence of pre-release versioning components is handled and the constraints placed on the
64- Major, Minor and Patch version numbers.
64+ sequence of pre-release versioning components is handled and the constraints placed on
65+ the Major, Minor and Patch version numbers.
6566
6667> [ !NOTE]
67- > A SemVer technically has no constraints on the range of the integral components and thus
68- > a ` BigInteger ` is used. Though, in practical terms, if any of the components exceeds the
69- > size of ` UInt64 ` there's probably something wrong with how the thing the version applies
70- > to is versioned :confused : . More realistically, CSemVer[ -CI] constrains the integral
71- > components to specific ranges to allow conversion to an ordered version and ` FileVersionQuad ` .
68+ > A SemVer technically has no constraints on the range of the integral components and
69+ > thus a ` BigInteger ` is used. Though, in practical terms, if any of the components
70+ > exceeds the size of ` UInt64 ` there's probably something wrong with how the thing the
71+ > version applies to is versioned :confused : . More realistically, CSemVer[ -CI]
72+ > constrains the integral components to specific ranges to allow conversion to an ordered
73+ > version and ` FileVersionQuad ` .
7274
7375
7476> [ !IMPORTANT]
75- > A CSemVer[ -CI] is *** ALWAYS*** ordered using a case-insensitive comparison for AlphaNumeric
76- > Identifiers in the version. Sadly, the SemVer spec is not explicit on the point of case
77- > sensitivity and various major implementations for popular frameworks have chosen different
78- > approaches. Thus a consumer of a pure SemVer needs to know which kind of comparison to use
79- > in order to get correct results.
80- > Due to the ambiguity of case sensitivity in ordering, it is recommended that all uses of
81- > SemVer in the real world use ALL the same case (All * UPPER* or all * lower* ). This avoids
82- > the confusion and produces correct ordering no matter what variant of comparison a consumer
83- > uses. Problems come when the version uses a * Mixed* case format.
77+ > A CSemVer[ -CI] is *** ALWAYS*** ordered using a case-insensitive comparison for
78+ > AlphaNumeric Identifiers in the version. Sadly, the SemVer spec is not explicit on the
79+ > point of case sensitivity and various major implementations for popular frameworks have
80+ > chosen different approaches. Thus a consumer of a pure SemVer needs to know which kind
81+ > of comparison to use in order to get correct results.
82+ >
83+ > Due to the ambiguity of case sensitivity in ordering, it is recommended that all uses
84+ > of SemVer in the real world use ALL the same case (All * UPPER* or all * lower* ). This
85+ > avoids the confusion and produces correct ordering no matter what variant of comparison
86+ > a consumer uses. Problems come when the version uses a * Mixed* case format.
8487
8588### CSemVer Constraints on the integral components
8689In particular the values are constrained
@@ -93,11 +96,11 @@ as follows:
9396| Patch | [ 0-9999] |
9497
9598## CSemVer constraints on the release sequence
96- Technically, SemVer does not limit the number of components to a pre-release value. It could
97- be ANY finite set. This is, of course unreasonable in the real world so CSemVer places
98- constraints on the number of components AND attributes particular meaning to each part. A
99- CSemVer may have up to three pre-release components that are interpreted according to the
100- following table:
99+ Technically, SemVer does not limit the number of components to a pre-release value. It
100+ could be ANY finite set. This is, of course unreasonable in the real world so CSemVer
101+ places constraints on the number of components AND attributes particular meaning to each
102+ part. A CSemVer may have up to three pre-release components that are interpreted
103+ according to the following table:
101104
102105| Index | Name | Description |
103106| -------| ------| -------------|
@@ -121,14 +124,14 @@ The names of a pre-release are constrained in CSemVer[-CI] to the following:<sup
121124
122125------
123126<sup ><a id =" footnote_1 " >1</a ></sup > This library does NOT support the short form of names in a
124- CSemVer. The exact string representation of the short form of a CSemVer as specified is not
125- entirely clear. (see:[ this issue] ( https://github.com/CK-Build/csemver.org/issues/2 ) ) This
126- implementation has chosen to ignore the short form completely. Based on what little is said
127- about it int the spec, it was created to support a limitation in NuGet v2, which is now
128- obsolete. Thus, the libraries do not support producing strings using the short form, nor do
129- they recognize one when parsing.
130-
131- <sup ><a id =" footnote_2 " >2</a ></sup > ` prerelease ` is always considered valid as well. Internally
132- it is automatically converted to the shorter ` pre ` form.
127+ CSemVer. The exact string representation of the short form of a CSemVer as specified is
128+ not entirely clear. (see:[ this issue] ( https://github.com/CK-Build/csemver.org/issues/2 ) )
129+ This implementation has chosen to ignore the short form completely. Based on what little
130+ is said about it in the spec, it was created to support a limitation in NuGet v2, which
131+ is now obsolete. Thus, the libraries do not support producing strings using the short
132+ form, nor do they recognize one when parsing.
133+
134+ <sup ><a id =" footnote_2 " >2</a ></sup > ` prerelease ` is always considered valid as well.
135+ Internally it is automatically converted to the shorter ` pre ` form.
133136
134137----
0 commit comments