1 /*
2  * hunt-time: A time library for D programming language.
3  *
4  * Copyright (C) 2015-2018 HuntLabs
5  *
6  * Website: https://www.huntlabs.net/
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 module hunt.markdown.internal.util.Common;
12 
13 public import std.traits;
14 public import std.array;
15 
16 string MakeGlobalVar(T)(string var, string init = null)
17 {
18     string str;
19     str ~= `__gshared ` ~ T.stringof ~ ` _` ~ var ~ `;`;
20     str ~= "\r\n";
21     if (init is null)
22     {
23         str ~= `public static ref ` ~ T.stringof ~ ` ` ~ var ~ `()
24             {
25                 static if(isAggregateType!(`~ T.stringof ~`))
26                 {
27                     if(_` ~ var ~ ` is null)
28                     {
29                         _`~ var ~ `= new ` ~ T.stringof ~ `();
30                     }
31                 }
32                 else static if(isArray!(`~ T.stringof ~ `))
33                 {
34                     if(_` ~ var ~ `.length == 0 )
35                     {
36                         _`~ var ~ `= new ` ~ T.stringof ~ `;
37                     }
38                 }
39                 else
40                 {
41                     if(_` ~ var ~ ` == `~ T.stringof.replace("[]","") ~`.init )
42                     {
43                         _`~ var ~ `= new ` ~ T.stringof ~ `();
44                     }
45                 }
46                 
47                 return _` ~ var ~ `;
48             }`;
49     }
50     else
51     {
52         str ~= `public static ref ` ~ T.stringof ~ ` ` ~ var ~ `()
53             {
54                 static if(isAggregateType!(`~ T.stringof ~`))
55                 {
56                     if(_` ~ var ~ ` is null)
57                     {
58                         _`~ var ~ `= ` ~ init ~ `;
59                     }
60                 }
61                 else static if(isArray!(`~ T.stringof ~ `))
62                 {
63                     if(_` ~ var ~ `.length == 0 )
64                     {
65                         _`~ var ~ `= ` ~ init ~ `;
66                     }
67                 }
68                 else
69                 {
70                     if(_` ~ var ~ ` == `~ T.stringof.replace("[]","") ~`.init )
71                     {
72                         _`~ var ~ `= ` ~ init ~ `;
73                     }
74                 }
75                
76                 return _` ~ var ~ `;
77             }`;
78     }
79 
80     return str;
81 }
82 
83