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