14
14
15
15
mutable struct DefaultSpec
16
16
typechar:: Char
17
+ kwargs:: Any
17
18
fspec:: FormatSpec
18
- DefaultSpec (c:: AbstractChar ) = new (Char (c), FormatSpec (c))
19
+ end
20
+
21
+ DefaultSpec (c:: AbstractChar ) = DefaultSpec (Char (c), (), FormatSpec (c))
22
+ function DefaultSpec (c:: AbstractChar , syms... ; kwargs... )
23
+ # otherwise update the spec
24
+ if isempty (syms)
25
+ DefaultSpec (Char (c), kwargs, FormatSpec (c; kwargs... ))
26
+ else
27
+ kw = _add_kwargs_from_symbols (kwargs, syms... )
28
+ DefaultSpec (Char (c), tuple (kw... ), FormatSpec (c; kw... ))
29
+ end
19
30
end
20
31
21
32
const DEFAULT_FORMATTERS = Dict {DataType, DefaultSpec} ()
@@ -28,17 +39,17 @@ default_spec!(::Type{T}, c::AbstractChar) where {T} =
28
39
default_spec! (:: Type{T} , :: Type{K} ) where {T,K} =
29
40
(DEFAULT_FORMATTERS[T] = DEFAULT_FORMATTERS[K]; nothing )
30
41
31
- # seed it with some basic default formatters
32
- for (t, c) in [(Integer,' d' ), (AbstractFloat,' f' ), (AbstractChar,' c' ), (AbstractString,' s' )]
33
- default_spec! (t, c)
34
- end
42
+ default_spec! (:: Type{T} , c:: AbstractChar , syms... ; kwargs... ) where {T} =
43
+ (DEFAULT_FORMATTERS[T] = DefaultSpec (c, syms... ; kwargs... ); nothing )
35
44
36
- reset! (:: Type{T} ) where {T} =
37
- (dspec = default_spec (T); dspec. fspec = FormatSpec (dspec. typechar); nothing )
45
+ function reset! (:: Type{T} ) where {T}
46
+ dspec = default_spec (T)
47
+ dspec. fspec = FormatSpec (dspec. typechar; dspec. kwargs... )
48
+ nothing
49
+ end
38
50
39
51
# --------------------------------------------------------------------------------------------------
40
52
41
-
42
53
function _add_kwargs_from_symbols (kwargs, syms:: Symbol... )
43
54
d = Dict {Symbol, Any} (kwargs)
44
55
for s in syms
@@ -66,6 +77,8 @@ default_spec(::Type{<:Integer}) = DEFAULT_FORMATTERS[Integer]
66
77
default_spec (:: Type{<:AbstractFloat} ) = DEFAULT_FORMATTERS[AbstractFloat]
67
78
default_spec (:: Type{<:AbstractString} ) = DEFAULT_FORMATTERS[AbstractString]
68
79
default_spec (:: Type{<:AbstractChar} ) = DEFAULT_FORMATTERS[AbstractChar]
80
+ default_spec (:: Type{<:AbstractIrrational} ) = DEFAULT_FORMATTERS[AbstractIrrational]
81
+ default_spec (:: Type{<:Number} ) = DEFAULT_FORMATTERS[Number]
69
82
70
83
default_spec (:: Type{T} ) where {T} =
71
84
get (DEFAULT_FORMATTERS, T) do
@@ -200,3 +213,16 @@ function fmt(x, syms::Symbol...; kwargs...)
200
213
d = _add_kwargs_from_symbols (kwargs, syms... )
201
214
fmt (x; d... )
202
215
end
216
+
217
+ # --------------------------------------------------------------------------------------------------
218
+
219
+ # seed it with some basic default formatters
220
+ for (t, c) in [(Integer,' d' ),
221
+ (AbstractFloat,' f' ),
222
+ (AbstractChar,' c' ),
223
+ (AbstractString,' s' )]
224
+ default_spec! (t, c)
225
+ end
226
+
227
+ default_spec! (Number, ' s' , :right )
228
+ default_spec! (AbstractIrrational, ' s' , :right )
0 commit comments