From 57456705bde897511f2a8430428708ffa45b581d Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sun, 27 Feb 2022 11:42:20 +0100 Subject: [PATCH] Added svg formatter for diagrams stored in git to minimize diffs --- Makefile | 1 + docs/test_cases/t00002_class.svg | 152 ++++++----- docs/test_cases/t00003_class.svg | 116 +++++---- docs/test_cases/t00004_class.svg | 101 ++++---- docs/test_cases/t00005_class.svg | 259 ++++++++++--------- docs/test_cases/t00006_class.svg | 375 ++++++++++++++++------------ docs/test_cases/t00007_class.svg | 95 +++---- docs/test_cases/t00008_class.svg | 130 ++++++---- docs/test_cases/t00009_class.svg | 132 +++++----- docs/test_cases/t00010_class.svg | 122 +++++---- docs/test_cases/t00011_class.svg | 85 ++++--- docs/test_cases/t00012_class.svg | 223 ++++++++++------- docs/test_cases/t00013_class.svg | 258 +++++++++++-------- docs/test_cases/t00014_class.svg | 252 +++++++++++-------- docs/test_cases/t00015_class.svg | 91 +++---- docs/test_cases/t00016_class.svg | 121 +++++---- docs/test_cases/t00017_class.svg | 245 ++++++++++-------- docs/test_cases/t00018_class.svg | 101 ++++---- docs/test_cases/t00019_class.svg | 211 +++++++++------- docs/test_cases/t00020_class.svg | 208 ++++++++------- docs/test_cases/t00021_class.svg | 207 ++++++++------- docs/test_cases/t00022_class.svg | 89 ++++--- docs/test_cases/t00023_class.svg | 128 +++++----- docs/test_cases/t00024_class.svg | 126 +++++----- docs/test_cases/t00025_class.svg | 157 +++++++----- docs/test_cases/t00026_class.svg | 179 +++++++------ docs/test_cases/t00027_class.svg | 253 +++++++++++-------- docs/test_cases/t00028_class.svg | 296 ++++++++++++---------- docs/test_cases/t00029_class.svg | 151 +++++------ docs/test_cases/t00030_class.svg | 123 +++++---- docs/test_cases/t00031_class.svg | 156 +++++++----- docs/test_cases/t00032_class.svg | 180 +++++++------ docs/test_cases/t00033_class.svg | 172 +++++++------ docs/test_cases/t00034_class.svg | 138 +++++----- docs/test_cases/t00035_class.svg | 90 ++++--- docs/test_cases/t00036_class.svg | 138 +++++----- docs/test_cases/t20001_sequence.svg | 95 ++++--- docs/test_cases/t20002_sequence.svg | 70 ++++-- docs/test_cases/t30001_package.svg | 90 +++---- docs/test_cases/t30002_package.svg | 176 ++++++------- docs/test_cases/t30003_package.svg | 69 +++-- docs/test_cases/t30004_package.svg | 94 +++---- docs/test_cases/t30005_package.svg | 91 ++++--- docs/test_cases/t30006_package.svg | 71 +++--- docs/test_cases/t30007_package.svg | 81 +++--- docs/test_cases/t90000_class.svg | 80 +++--- util/format_svg.py | 51 ++++ 47 files changed, 3852 insertions(+), 2977 deletions(-) create mode 100755 util/format_svg.py diff --git a/Makefile b/Makefile index 3dc88576..fa43cc4f 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ test_plantuml: test document_test_cases: test_plantuml python3 util/generate_test_cases_docs.py + python3 util/format_svg.py docs/test_cases/*.svg clanguml_diagrams: debug mkdir -p docs/diagrams diff --git a/docs/test_cases/t00002_class.svg b/docs/test_cases/t00002_class.svg index 9af0b1d9..63e03bea 100644 --- a/docs/test_cases/t00002_class.svg +++ b/docs/test_cases/t00002_class.svg @@ -1,67 +1,85 @@ -Afoo_a() = 0 : voidfoo_c() = 0 : voidBfoo_a() : voidCfoo_c() : voidDas : std::vector<A*>foo_a() : voidfoo_c() : voidEas : std::vector<A*>foo_a() : voidfoo_c() : voidBase abstract interface.asas \ No newline at end of file + + + + + + + + + + + + + + A + + + + foo_a() = 0 : void + + foo_c() = 0 : void + + + + B + + + + foo_a() : void + + + + C + + + + foo_c() : void + + + + D + + + as : std::vector<A*> + + + foo_a() : void + + foo_c() : void + + + + E + + + as : std::vector<A*> + + + foo_a() : void + + foo_c() : void + + + Base abstract interface. + + + + + + + + as + + + + + + + + as + + + + + + diff --git a/docs/test_cases/t00003_class.svg b/docs/test_cases/t00003_class.svg index e5fc59cf..48241701 100644 --- a/docs/test_cases/t00003_class.svg +++ b/docs/test_cases/t00003_class.svg @@ -1,46 +1,70 @@ -Apublic_member : intstatic_int : intstatic_const_int : int constauto_member : unsigned long constprotected_member : intprivate_member : inta : intb : intc : intA() : voidA(int i) : voidA(A&& ) : voidA(A const& ) : void~A() : voidbasic_method() : voidstatic_method() : intconst_method() const : voidauto_method() : intdouble_int(int const i) : intsum(double const a, double const b) : doubledefault_int(int i = 12) : intdefault_string(int i, std::string s = "abc") : std::stringcreate_from_int(int i) : Aprotected_method() : voidprivate_method() : voidcompare : std::function<bool(int const)> \ No newline at end of file + + + + + + + + + + + + + + A + + + public_member : int + + static_int : int + + static_const_int : int const + + auto_member : unsigned long const + + protected_member : int + + private_member : int + + a : int + + b : int + + c : int + + + A() : void + + A(int i) : void + + A(A&& ) : void + + A(A const& ) : void + + ~A() : void + + basic_method() : void + + static_method() : int + + const_method() const : void + + auto_method() : int + + double_int(int const i) : int + + sum(double const a, double const b) : double + + default_int(int i = 12) : int + + default_string(int i, std::string s = "abc") : std::string + + create_from_int(int i) : A + + protected_method() : void + + private_method() : void + + compare : std::function<bool(int const)> + + diff --git a/docs/test_cases/t00004_class.svg b/docs/test_cases/t00004_class.svg index e673475c..baf5ccb3 100644 --- a/docs/test_cases/t00004_class.svg +++ b/docs/test_cases/t00004_class.svg @@ -1,46 +1,55 @@ -Afoo() const : voidfoo2() const : voidAALightsGreenYellowRedAAA \ No newline at end of file + + + + + + + + + + + + + + A + + + + foo() const : void + + foo2() const : void + + + + AA + + + + + + Lights + + Green + Yellow + Red + + + + + AAA + + + + + + + + + + + + + + + + diff --git a/docs/test_cases/t00005_class.svg b/docs/test_cases/t00005_class.svg index 6e548328..8adb2e51 100644 --- a/docs/test_cases/t00005_class.svg +++ b/docs/test_cases/t00005_class.svg @@ -1,112 +1,147 @@ -ABCDEFGHIJKRsome_int : intsome_int_pointer : int*some_int_pointer_pointer : int**some_int_reference : int&a : Ab : B*c : C&d : D const*e : E const&f : F&&g : G**h : H***i : I*&j : J volatile*k : K*+a+b+c+d+e+f+g+h+i+j+k \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + B + + + + + + C + + + + + + D + + + + + + E + + + + + + F + + + + + + G + + + + + + H + + + + + + I + + + + + + J + + + + + + K + + + + + + R + + + some_int : int + + some_int_pointer : int* + + some_int_pointer_pointer : int** + + some_int_reference : int& + + a : A + + b : B* + + c : C& + + d : D const* + + e : E const& + + f : F&& + + g : G** + + h : H*** + + i : I*& + + j : J volatile* + + k : K* + + + + +a + + + +b + + + +c + + + +d + + + +e + + + +f + + + +g + + + +h + + + +i + + + +j + + + +k + + diff --git a/docs/test_cases/t00006_class.svg b/docs/test_cases/t00006_class.svg index cc402db1..08005a56 100644 --- a/docs/test_cases/t00006_class.svg +++ b/docs/test_cases/t00006_class.svg @@ -1,160 +1,215 @@ -ABCDEFGHIJKLMNNNNNNcustom_containerTdata : std::vector<T>custom_containerERa : std::vector<A>b : std::vector<B*>c : std::map<int,C>d : std::map<int,D*>e : custom_container<E>f : std::vector<std::vector<F>>g : std::map<int,std::vector<G*>>h : std::array<H,10>i : std::array<I*,5>j : J[10]k : K*[20]lm : std::vector<std::pair<L,M>>ns : std::tuple<N,NN,NNN>+a+b+c+d+e+f+g+h+i+j+klmlmnsnsns \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + B + + + + + + C + + + + + + D + + + + + + E + + + + + + F + + + + + + G + + + + + + H + + + + + + I + + + + + + J + + + + + + K + + + + + + L + + + + + + M + + + + + + N + + + + + + NN + + + + + + NNN + + + + + + custom_container + + T + + + data : std::vector<T> + + + + + custom_container + + E + + + + + + R + + + a : std::vector<A> + + b : std::vector<B*> + + c : std::map<int,C> + + d : std::map<int,D*> + + e : custom_container<E> + + f : std::vector<std::vector<F>> + + g : std::map<int,std::vector<G*>> + + h : std::array<H,10> + + i : std::array<I*,5> + + j : J[10] + + k : K*[20] + + lm : std::vector<std::pair<L,M>> + + ns : std::tuple<N,NN,NNN> + + + + + + + + +a + + + +b + + + +c + + + +d + + + +e + + + +f + + + +g + + + +h + + + +i + + + +j + + + +k + + + + lm + + + + lm + + + + ns + + + + ns + + + + ns + + diff --git a/docs/test_cases/t00007_class.svg b/docs/test_cases/t00007_class.svg index 616fa5f8..4e78c6cc 100644 --- a/docs/test_cases/t00007_class.svg +++ b/docs/test_cases/t00007_class.svg @@ -1,44 +1,51 @@ -ABCRa : std::unique_ptr<A>b : std::shared_ptr<B>c : std::weak_ptr<C>+a+b+c \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + B + + + + + + C + + + + + + R + + + a : std::unique_ptr<A> + + b : std::shared_ptr<B> + + c : std::weak_ptr<C> + + + + +a + + + +b + + + +c + + diff --git a/docs/test_cases/t00008_class.svg b/docs/test_cases/t00008_class.svg index ab9cfcdc..9ea74662 100644 --- a/docs/test_cases/t00008_class.svg +++ b/docs/test_cases/t00008_class.svg @@ -1,54 +1,76 @@ -AT,P,CMP,int Nvalue : Tpointer : T*reference : T&values : std::vector<P>ints : std::array<int,N>comparator : CMPVectorTvalues : std::vector<T>BT,C<>template_template : C<T>Bint,VectorDints : B<int,Vector>add(int i) : voidints \ No newline at end of file + + + + + + + + + + + + + + A + + T,P,CMP,int N + + + value : T + + pointer : T* + + reference : T& + + values : std::vector<P> + + ints : std::array<int,N> + + comparator : CMP + + + + + Vector + + T + + + values : std::vector<T> + + + + + B + + T,C<> + + + template_template : C<T> + + + + + B + + int,Vector + + + + + + D + + + ints : B<int,Vector> + + + add(int i) : void + + + + + + ints + + diff --git a/docs/test_cases/t00009_class.svg b/docs/test_cases/t00009_class.svg index ae6fd8b0..6c28d9fd 100644 --- a/docs/test_cases/t00009_class.svg +++ b/docs/test_cases/t00009_class.svg @@ -1,56 +1,76 @@ -ATvalue : TAintAstd::stringAstd::vector<std::string>Baint : A<int>astring : A<std::string>*avector : A<std::vector<std::string>>&aintastringavector \ No newline at end of file + + + + + + + + + + + + + + A + + T + + + value : T + + + + + A + + int + + + + + + A + + std::string + + + + + + A + + std::vector<std::string> + + + + + + B + + + aint : A<int> + + astring : A<std::string>* + + avector : A<std::vector<std::string>>& + + + + + + + + + + + aint + + + + astring + + + + avector + + diff --git a/docs/test_cases/t00010_class.svg b/docs/test_cases/t00010_class.svg index 03bd89fc..ca16e0e4 100644 --- a/docs/test_cases/t00010_class.svg +++ b/docs/test_cases/t00010_class.svg @@ -1,52 +1,70 @@ -AT,Pfirst : Tsecond : PAT,std::stringBTastring : A<T,std::string>BintCaintstring : B<int>astringaintstring \ No newline at end of file + + + + + + + + + + + + + + A + + T,P + + + first : T + + second : P + + + + + A + + T,std::string + + + + + + B + + T + + + astring : A<T,std::string> + + + + + B + + int + + + + + + C + + + aintstring : B<int> + + + + + + + astring + + + + + + aintstring + + diff --git a/docs/test_cases/t00011_class.svg b/docs/test_cases/t00011_class.svg index 67d574c1..c26f4fc1 100644 --- a/docs/test_cases/t00011_class.svg +++ b/docs/test_cases/t00011_class.svg @@ -1,38 +1,47 @@ -DTvalue : TAfoo() : voidBm_a : A*foo() : void«friend»m_a \ No newline at end of file + + + + + + + + + + + + + + D + + T + + + value : T + + + + + A + + + + foo() : void + + + + B + + + m_a : A* + + + foo() : void + + + «friend» + + + + m_a + + diff --git a/docs/test_cases/t00012_class.svg b/docs/test_cases/t00012_class.svg index 77b37438..b4f026b4 100644 --- a/docs/test_cases/t00012_class.svg +++ b/docs/test_cases/t00012_class.svg @@ -1,90 +1,133 @@ -AT,Ts...value : Tvalues : intBint Is...ints : std::array<int,sizeof...(Is)>CT,int Is...ints : std::array<T,sizeof...(Is)>Aint,std::string,floatAint,std::string,boolB3,2,1B1,1,1,1Cstd::map<int,std::vector<std::vector<std::vector<std::string>>>>,3,3,3Ra1 : A<int,std::string,float>a2 : A<int,std::string,bool>b1 : B<3,2,1>b2 : B<1,1,1,1>c1 : C<std::map<int,std::vector<std::vector<std::vector<std::string>>>>,3,3,3>Long template annotationa1a2b1b2c1 \ No newline at end of file + + + + + + + + + + + + + + A + + T,Ts... + + + value : T + + values : int + + + + + B + + int Is... + + + + ints : std::array<int,sizeof...(Is)> + + + + C + + T,int Is... + + + + ints : std::array<T,sizeof...(Is)> + + + + A + + int,std::string,float + + + + + + A + + int,std::string,bool + + + + + + B + + 3,2,1 + + + + + + B + + 1,1,1,1 + + + + + + C + + std::map<int,std::vector<std::vector<std::vector<std::string>>>>,3,3,3 + + + + + + R + + + a1 : A<int,std::string,float> + + a2 : A<int,std::string,bool> + + b1 : B<3,2,1> + + b2 : B<1,1,1,1> + + c1 : C<std::map<int,std::vector<std::vector<std::vector<std::string>>>>,3,3,3> + + + + Long template annotation + + + + + + + + + + + + + + a1 + + + + a2 + + + + b1 + + + + b2 + + + + c1 + + diff --git a/docs/test_cases/t00013_class.svg b/docs/test_cases/t00013_class.svg index c6c989a1..b68e16ff 100644 --- a/docs/test_cases/t00013_class.svg +++ b/docs/test_cases/t00013_class.svg @@ -1,110 +1,148 @@ -ABCD::FTf : TAa : intBb : intCc : intDd : intprint(R* r) : voidETe : TEintFintEstd::stringRestring : E<std::string>get_a(A* a) : intget_b(B& b) : intget_const_b(B const& b) : intget_c(C c) : intget_d(D&& d) : intget_d2(D&& d) : intget_e(E<T> e) : Tget_int_e(E<int> const& e) : intget_int_e2(E<int>& e) : intget_f(F<T> const& f) : Tget_int_f(F<int> const& f) : intestring \ No newline at end of file + + + + + + + + + + + + + + ABCD::F + + T + + + f : T + + + + + A + + + a : int + + + + + B + + + b : int + + + + + C + + + c : int + + + + + D + + + d : int + + + print(R* r) : void + + + + E + + T + + + e : T + + + + + E + + int + + + + + + F + + int + + + + + + E + + std::string + + + + + + R + + + estring : E<std::string> + + + get_a(A* a) : int + + get_b(B& b) : int + + get_const_b(B const& b) : int + + get_c(C c) : int + + get_d(D&& d) : int + + get_d2(D&& d) : int + + get_e(E<T> e) : T + + get_int_e(E<int> const& e) : int + + get_int_e2(E<int>& e) : int + + get_f(F<T> const& f) : T + + get_int_f(F<int> const& f) : int + + + + + + + + + + + + + + + + + + + + + + + + + + + + estring + + diff --git a/docs/test_cases/t00014_class.svg b/docs/test_cases/t00014_class.svg index 461ae116..8cfdf0b9 100644 --- a/docs/test_cases/t00014_class.svg +++ b/docs/test_cases/t00014_class.svg @@ -1,102 +1,150 @@ -AT,Pt : Tp : PAT,std::stringBvalue : std::stringAbool,std::stringAStringfloatAStringintAStringstd::stringGeneralCallbackAIntStringGeneralCallbackRboolstring : A<bool,std::string>floatstring : AString<float>intstring : AIntStringstringstring : AStringStringbs : BVectorbs2 : BVector2cb : GeneralCallback<AIntString>vcb : VoidCallbackboolstringfloatstringintstringstringstringbsbs2cbvcb \ No newline at end of file + + + + + + + + + + + + + + A + + T,P + + + t : T + + p : P + + + + + A + + T,std::string + + + + + + B + + + value : std::string + + + + + A + + bool,std::string + + + + + + AString + + float + + + + + + AString + + int + + + + + + AString + + std::string + + + + + + GeneralCallback + + AIntString + + + + + + GeneralCallback + + + + + + R + + + boolstring : A<bool,std::string> + + floatstring : AString<float> + + intstring : AIntString + + stringstring : AStringString + + bs : BVector + + bs2 : BVector2 + + cb : GeneralCallback<AIntString> + + vcb : VoidCallback + + + + + + + + + + + + + + + boolstring + + + + floatstring + + + + intstring + + + + stringstring + + + + bs + + + + bs2 + + + + cb + + + + vcb + + diff --git a/docs/test_cases/t00015_class.svg b/docs/test_cases/t00015_class.svg index 48ecd9ce..ed1cc348 100644 --- a/docs/test_cases/t00015_class.svg +++ b/docs/test_cases/t00015_class.svg @@ -1,43 +1,48 @@ -ns1::Ans1::ns2_v0_9_0::Ans1::Anonns3::ns1::ns2::Anonns3::B \ No newline at end of file + + + + + + + + + + + + + + ns1::A + + + + + + ns1::ns2_v0_9_0::A + + + + + + ns1::Anon + + + + + + ns3::ns1::ns2::Anon + + + + + + ns3::B + + + + + + + + + + diff --git a/docs/test_cases/t00016_class.svg b/docs/test_cases/t00016_class.svg index ed7797a1..5707acb9 100644 --- a/docs/test_cases/t00016_class.svg +++ b/docs/test_cases/t00016_class.svg @@ -1,53 +1,68 @@ -is_numeric<>value : enumis_numericcharvalue : enumis_numericunsigned charvalue : enumis_numericintvalue : enumis_numericboolvalue : enum \ No newline at end of file + + + + + + + + + + + + + + is_numeric<> + + + value : enum + + + + + is_numeric + + char + + + value : enum + + + + + is_numeric + + unsigned char + + + value : enum + + + + + is_numeric + + int + + + value : enum + + + + + is_numeric + + bool + + + value : enum + + + + + + + + + + + diff --git a/docs/test_cases/t00017_class.svg b/docs/test_cases/t00017_class.svg index 5be5275c..163ffe65 100644 --- a/docs/test_cases/t00017_class.svg +++ b/docs/test_cases/t00017_class.svg @@ -1,110 +1,135 @@ -ABCDEFGHIJKRsome_int : intsome_int_pointer : int*some_int_pointer_pointer : int**some_int_reference : int&R(int& some_int, C& cc, E const& ee, F&& ff, I*& ii) : void-c-e-f-i-a-b-d-g-h-j-k \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + B + + + + + + C + + + + + + D + + + + + + E + + + + + + F + + + + + + G + + + + + + H + + + + + + I + + + + + + J + + + + + + K + + + + + + R + + + some_int : int + + some_int_pointer : int* + + some_int_pointer_pointer : int** + + some_int_reference : int& + + + R(int& some_int, C& cc, E const& ee, F&& ff, I*& ii) : void + + + + + -c + + + + + -e + + + + + -f + + + + + -i + + + -a + + + -b + + + -d + + + -g + + + -h + + + -j + + + -k + + diff --git a/docs/test_cases/t00018_class.svg b/docs/test_cases/t00018_class.svg index 76cdd262..6d09b37a 100644 --- a/docs/test_cases/t00018_class.svg +++ b/docs/test_cases/t00018_class.svg @@ -1,43 +1,58 @@ -impl::widgetn : intdraw(widget const& w) const : voiddraw(widget const& w) : voidwidget(int n) : voidwidgetpImpl : std::unique_ptr<impl::widget>draw() const : voiddraw() : voidshown() const : boolwidget(int ) : void~widget() : voidwidget(widget&& ) : voidwidget(widget const& ) : voidoperator=(widget&& ) : widget&operator=(widget const& ) : widget&pImpl \ No newline at end of file + + + + + + + + + + + + + + impl::widget + + + n : int + + + draw(widget const& w) const : void + + draw(widget const& w) : void + + widget(int n) : void + + + + widget + + + pImpl : std::unique_ptr<impl::widget> + + + draw() const : void + + draw() : void + + shown() const : bool + + widget(int ) : void + + ~widget() : void + + widget(widget&& ) : void + + widget(widget const& ) : void + + operator=(widget&& ) : widget& + + operator=(widget const& ) : widget& + + + + + + pImpl + + diff --git a/docs/test_cases/t00019_class.svg b/docs/test_cases/t00019_class.svg index 11452e5d..5ff485e8 100644 --- a/docs/test_cases/t00019_class.svg +++ b/docs/test_cases/t00019_class.svg @@ -1,89 +1,122 @@ -Layer2LowerLayerall_calls_count() const : intBaseBase() : void~Base() : voidm1() : intm2() : std::stringLayer1LowerLayerm1() : intm2() : std::stringLayer3LowerLayerm_m1_calls : intm_m2_calls : intm1() : intm2() : std::stringm1_calls() const : intm2_calls() const : intLayer3BaseLayer2Layer3<Base>Layer1Layer2<Layer3<Base>>Alayers : std::unique_ptr<Layer1<Layer2<Layer3<Base>>>>layers \ No newline at end of file + + + + + + + + + + + + + + Layer2 + + LowerLayer + + + + all_calls_count() const : int + + + + Base + + + + Base() : void + + ~Base() : void + + m1() : int + + m2() : std::string + + + + Layer1 + + LowerLayer + + + + m1() : int + + m2() : std::string + + + + Layer3 + + LowerLayer + + + m_m1_calls : int + + m_m2_calls : int + + + m1() : int + + m2() : std::string + + m1_calls() const : int + + m2_calls() const : int + + + + Layer3 + + Base + + + + + + Layer2 + + Layer3<Base> + + + + + + Layer1 + + Layer2<Layer3<Base>> + + + + + + A + + + layers : std::unique_ptr<Layer1<Layer2<Layer3<Base>>>> + + + + + + + + + + + + + + + + + + + + + + + layers + + diff --git a/docs/test_cases/t00020_class.svg b/docs/test_cases/t00020_class.svg index ec08620a..9024cd8d 100644 --- a/docs/test_cases/t00020_class.svg +++ b/docs/test_cases/t00020_class.svg @@ -1,94 +1,114 @@ -ProductA~ProductA() : voidsell(int price) const = 0 : boolProductA1sell(int price) const : boolProductA2sell(int price) const : boolProductB~ProductB() : voidbuy(int price) const = 0 : boolProductB1buy(int price) const : boolProductB2buy(int price) const : boolAbstractFactorymake_a() const = 0 : std::unique_ptr<ProductA>make_b() const = 0 : std::unique_ptr<ProductB>Factory1make_a() const : std::unique_ptr<ProductA>make_b() const : std::unique_ptr<ProductB>Factory2make_a() const : std::unique_ptr<ProductA>make_b() const : std::unique_ptr<ProductB> \ No newline at end of file + + + + + + + + + + + + + + ProductA + + + + ~ProductA() : void + + sell(int price) const = 0 : bool + + + + ProductA1 + + + + sell(int price) const : bool + + + + ProductA2 + + + + sell(int price) const : bool + + + + ProductB + + + + ~ProductB() : void + + buy(int price) const = 0 : bool + + + + ProductB1 + + + + buy(int price) const : bool + + + + ProductB2 + + + + buy(int price) const : bool + + + + AbstractFactory + + + + make_a() const = 0 : std::unique_ptr<ProductA> + + make_b() const = 0 : std::unique_ptr<ProductB> + + + + Factory1 + + + + make_a() const : std::unique_ptr<ProductA> + + make_b() const : std::unique_ptr<ProductB> + + + + Factory2 + + + + make_a() const : std::unique_ptr<ProductA> + + make_b() const : std::unique_ptr<ProductB> + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/test_cases/t00021_class.svg b/docs/test_cases/t00021_class.svg index 0400be70..dc51718b 100644 --- a/docs/test_cases/t00021_class.svg +++ b/docs/test_cases/t00021_class.svg @@ -1,95 +1,112 @@ -Visitor~Visitor() : voidvisit_A(A const& item) const = 0 : voidvisit_B(B const& item) const = 0 : voidVisitor1visit_A(A const& item) const : voidvisit_B(B const& item) const : voidVisitor2visit_A(A const& item) const : voidvisit_B(B const& item) const : voidVisitor3visit_A(A const& item) const : voidvisit_B(B const& item) const : voidItem~Item() : voidaccept(Visitor const& visitor) const = 0 : voidAaccept(Visitor const& visitor) const : voidBaccept(Visitor const& visitor) const : void \ No newline at end of file + + + + + + + + + + + + + + Visitor + + + + ~Visitor() : void + + visit_A(A const& item) const = 0 : void + + visit_B(B const& item) const = 0 : void + + + + Visitor1 + + + + visit_A(A const& item) const : void + + visit_B(B const& item) const : void + + + + Visitor2 + + + + visit_A(A const& item) const : void + + visit_B(B const& item) const : void + + + + Visitor3 + + + + visit_A(A const& item) const : void + + visit_B(B const& item) const : void + + + + Item + + + + ~Item() : void + + accept(Visitor const& visitor) const = 0 : void + + + + A + + + + accept(Visitor const& visitor) const : void + + + + B + + + + accept(Visitor const& visitor) const : void + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/test_cases/t00022_class.svg b/docs/test_cases/t00022_class.svg index e286fcf2..643e1fca 100644 --- a/docs/test_cases/t00022_class.svg +++ b/docs/test_cases/t00022_class.svg @@ -1,41 +1,48 @@ -Atemplate_method() : voidmethod1() = 0 : voidmethod2() = 0 : voidA1method1() : voidmethod2() : voidA2method1() : voidmethod2() : void \ No newline at end of file + + + + + + + + + + + + + + A + + + + template_method() : void + + method1() = 0 : void + + method2() = 0 : void + + + + A1 + + + + method1() : void + + method2() : void + + + + A2 + + + + method1() : void + + method2() : void + + + + + + diff --git a/docs/test_cases/t00023_class.svg b/docs/test_cases/t00023_class.svg index 4d394d1f..bf2a2775 100644 --- a/docs/test_cases/t00023_class.svg +++ b/docs/test_cases/t00023_class.svg @@ -1,58 +1,70 @@ -Strategy~Strategy() : voidalgorithm() = 0 : voidStrategyAalgorithm() : voidStrategyBalgorithm() : voidStrategyCalgorithm() : voidContextm_strategy : std::unique_ptr<Strategy>Context(std::unique_ptr<Strategy> strategy) : voidapply() : voidm_strategy \ No newline at end of file + + + + + + + + + + + + + + Strategy + + + + ~Strategy() : void + + algorithm() = 0 : void + + + + StrategyA + + + + algorithm() : void + + + + StrategyB + + + + algorithm() : void + + + + StrategyC + + + + algorithm() : void + + + + Context + + + m_strategy : std::unique_ptr<Strategy> + + + Context(std::unique_ptr<Strategy> strategy) : void + + apply() : void + + + + + + + + + + + + m_strategy + + diff --git a/docs/test_cases/t00024_class.svg b/docs/test_cases/t00024_class.svg index 4c02ceb0..7cd8c584 100644 --- a/docs/test_cases/t00024_class.svg +++ b/docs/test_cases/t00024_class.svg @@ -1,56 +1,70 @@ -Target~Target() : voidm1() = 0 : voidm2() = 0 : voidTarget1m1() : voidm2() : voidTarget2m1() : voidm2() : voidProxym_target : std::shared_ptr<Target>Proxy(std::shared_ptr<Target> target) : voidm1() : voidm2() : voidm_target \ No newline at end of file + + + + + + + + + + + + + + Target + + + + ~Target() : void + + m1() = 0 : void + + m2() = 0 : void + + + + Target1 + + + + m1() : void + + m2() : void + + + + Target2 + + + + m1() : void + + m2() : void + + + + Proxy + + + m_target : std::shared_ptr<Target> + + + Proxy(std::shared_ptr<Target> target) : void + + m1() : void + + m2() : void + + + + + + + + + + m_target + + + + diff --git a/docs/test_cases/t00025_class.svg b/docs/test_cases/t00025_class.svg index 8650a211..92f28c28 100644 --- a/docs/test_cases/t00025_class.svg +++ b/docs/test_cases/t00025_class.svg @@ -1,67 +1,90 @@ -Target1m1() : voidm2() : voidTarget2m1() : voidm2() : voidProxyTm_target : std::shared_ptr<T>Proxy(std::shared_ptr<T> target) : voidm1() : voidm2() : voidProxyTarget1ProxyTarget2ProxyHolderproxy1 : Proxy<Target1>proxy2 : Proxy<Target2>proxy1proxy2 \ No newline at end of file + + + + + + + + + + + + + + Target1 + + + + m1() : void + + m2() : void + + + + Target2 + + + + m1() : void + + m2() : void + + + + Proxy + + T + + + m_target : std::shared_ptr<T> + + + Proxy(std::shared_ptr<T> target) : void + + m1() : void + + m2() : void + + + + Proxy + + Target1 + + + + + + Proxy + + Target2 + + + + + + ProxyHolder + + + proxy1 : Proxy<Target1> + + proxy2 : Proxy<Target2> + + + + + + + + + + + + + proxy1 + + + + proxy2 + + diff --git a/docs/test_cases/t00026_class.svg b/docs/test_cases/t00026_class.svg index c5ad1cc0..5cf2fe41 100644 --- a/docs/test_cases/t00026_class.svg +++ b/docs/test_cases/t00026_class.svg @@ -1,73 +1,106 @@ -MementoTm_value : TMemento(T&& v) : voidvalue() const : TOriginatorTm_value : TOriginator(T&& v) : voidmemoize_value() const : Memento<T>load(Memento<T> const& m) : voidprint() const : voidset(T&& v) : voidCaretakerTm_mementos : std::unordered_map<std::string,Memento<T>>state(std::string const& n) : Memento<T>&set_state(std::string const& s, Memento<T>&& m) : voidCaretakerstd::stringOriginatorstd::stringStringMementocaretaker : Caretaker<std::string>originator : Originator<std::string>m_mementoscaretakeroriginator \ No newline at end of file + + + + + + + + + + + + + + Memento + + T + + + m_value : T + + + Memento(T&& v) : void + + value() const : T + + + + Originator + + T + + + m_value : T + + + Originator(T&& v) : void + + memoize_value() const : Memento<T> + + load(Memento<T> const& m) : void + + print() const : void + + set(T&& v) : void + + + + Caretaker + + T + + + m_mementos : std::unordered_map<std::string,Memento<T>> + + + state(std::string const& n) : Memento<T>& + + set_state(std::string const& s, Memento<T>&& m) : void + + + + Caretaker + + std::string + + + + + + Originator + + std::string + + + + + + StringMemento + + + caretaker : Caretaker<std::string> + + originator : Originator<std::string> + + + + + + + + + m_mementos + + + + + + + + caretaker + + + + originator + + diff --git a/docs/test_cases/t00027_class.svg b/docs/test_cases/t00027_class.svg index 222ab061..87cee6b1 100644 --- a/docs/test_cases/t00027_class.svg +++ b/docs/test_cases/t00027_class.svg @@ -1,105 +1,148 @@ -Shapedisplay() = 0 : void~Shape() : voidLineT<>display() : voidTextT<>display() : voidShapeDecoratordisplay() = 0 : voidColorTdisplay() : voidWeightTdisplay() : voidLineColor,WeightLineColorTextColor,WeightTextColorWindowborder : Line<Color,Weight>divider : Line<Color>title : Text<Color,Weight>description : Text<Color>borderdividertitledescription \ No newline at end of file + + + + + + + + + + + + + + Shape + + + + display() = 0 : void + + ~Shape() : void + + + + Line + + T<> + + + + display() : void + + + + Text + + T<> + + + + display() : void + + + + ShapeDecorator + + + + display() = 0 : void + + + + Color + + T + + + + display() : void + + + + Weight + + T + + + + display() : void + + + + Line + + Color,Weight + + + + + + Line + + Color + + + + + + Text + + Color,Weight + + + + + + Text + + Color + + + + + + Window + + + border : Line<Color,Weight> + + divider : Line<Color> + + title : Text<Color,Weight> + + description : Text<Color> + + + + + + + + + + + + + + + + + + + + + border + + + + divider + + + + title + + + + description + + diff --git a/docs/test_cases/t00028_class.svg b/docs/test_cases/t00028_class.svg index 87c260c5..eb76b63f 100644 --- a/docs/test_cases/t00028_class.svg +++ b/docs/test_cases/t00028_class.svg @@ -1,133 +1,163 @@ -AA class note.A class note.BB class note.B class note.CC class note.C class note.DDclassnote.Dclassnote.ETparam : TE template class note.GFonetwothreeF enum note.F enum note.EintRaaa : Abbb : B*ccc : C&ddd : std::vector<std::shared_ptr<D>>eee : E<int>ggg : G**R(C& c) : voidR class note.R class note.cccaaabbbdddeeeggg \ No newline at end of file + + + + + + + + + + + + + + A + + + + + A class note. + + + A class note. + + + + B + + + + + B class note. + + + B class note. + + + + C + + + + + C class note. + + + C class note. + + + + D + + + + + D + class + note. + + + D + class + note. + + + + E + + T + + + param : T + + + + E template class note. + + + + G + + + + + + F + + one + two + three + + + + F enum note. + + + F enum note. + + + + E + + int + + + + + + R + + + aaa : A + + bbb : B* + + ccc : C& + + ddd : std::vector<std::shared_ptr<D>> + + eee : E<int> + + ggg : G** + + + R(C& c) : void + + + R class note. + + + R class note. + + + + + + + + + + + ccc + + + + aaa + + + + bbb + + + + ddd + + + + eee + + + + ggg + + diff --git a/docs/test_cases/t00029_class.svg b/docs/test_cases/t00029_class.svg index f5a44483..5fb8b499 100644 --- a/docs/test_cases/t00029_class.svg +++ b/docs/test_cases/t00029_class.svg @@ -1,70 +1,81 @@ -ACTparam : TEonetwothreeG1G2G3G4Rg1 : G1g3 : G3&g4 : std::shared_ptr<G4>g1g4 \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + C + + T + + + param : T + + + + + E + + one + two + three + + + + + G1 + + + + + + G2 + + + + + + G3 + + + + + + G4 + + + + + + R + + + g1 : G1 + + g3 : G3& + + g4 : std::shared_ptr<G4> + + + + + g1 + + + + g4 + + diff --git a/docs/test_cases/t00030_class.svg b/docs/test_cases/t00030_class.svg index 735fb9f2..ff438e89 100644 --- a/docs/test_cases/t00030_class.svg +++ b/docs/test_cases/t00030_class.svg @@ -1,52 +1,71 @@ -ABCDRaaa : Abbb : std::vector<B>ccc : std::vector<C>ddd : Daaabbb0..11..*ccc0..11..5ddd1 \ No newline at end of file + + + + + + + + + + + + + + A + + + + + + B + + + + + + C + + + + + + D + + + + + + R + + + aaa : A + + bbb : std::vector<B> + + ccc : std::vector<C> + + ddd : D + + + + + aaa + + + + bbb + 0..1 + 1..* + + + + ccc + 0..1 + 1..5 + + + + ddd + 1 + + diff --git a/docs/test_cases/t00031_class.svg b/docs/test_cases/t00031_class.svg index 175622b1..78b68bb8 100644 --- a/docs/test_cases/t00031_class.svg +++ b/docs/test_cases/t00031_class.svg @@ -1,63 +1,93 @@ -ABonetwothreeCTttt : TDCintRaaa : A*bbb : std::vector<B>ccc : C<int>ddd : D*aaabbbcccddd \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + A + + + + + + B + + one + two + three + + + + + + C + + T + + + ttt : T + + + + + D + + + + + + C + + int + + + + + + R + + + aaa : A* + + bbb : std::vector<B> + + ccc : C<int> + + ddd : D* + + + + + + + aaa + + + + bbb + + + + ccc + + + + ddd + + diff --git a/docs/test_cases/t00032_class.svg b/docs/test_cases/t00032_class.svg index ce226d29..d84a400f 100644 --- a/docs/test_cases/t00032_class.svg +++ b/docs/test_cases/t00032_class.svg @@ -1,82 +1,98 @@ -BaseTBaseAoperator()() : voidBoperator()() : voidCoperator()() : voidOverloadT,L,Ts...counter : LOverloadTBase,int,A,B,CRoverload : Overload<TBase,int,A,B,C>overload \ No newline at end of file + + + + + + + + + + + + + + Base + + + + + + TBase + + + + + + A + + + + operator()() : void + + + + B + + + + operator()() : void + + + + C + + + + operator()() : void + + + + Overload + + T,L,Ts... + + + counter : L + + + + + Overload + + TBase,int,A,B,C + + + + + + R + + + overload : Overload<TBase,int,A,B,C> + + + + + + + + + + + + + + + + + + + + + + + + + overload + + diff --git a/docs/test_cases/t00033_class.svg b/docs/test_cases/t00033_class.svg index 3f2ba4d5..368fba71 100644 --- a/docs/test_cases/t00033_class.svg +++ b/docs/test_cases/t00033_class.svg @@ -1,74 +1,98 @@ -ATaaa : TBTbbb : TCTccc : TDddd : intCDBstd::unique_ptr<C<D>>AB<std::unique_ptr<C<D>>>Rabc : A<B<std::unique_ptr<C<D>>>>abc \ No newline at end of file + + + + + + + + + + + + + + A + + T + + + aaa : T + + + + + B + + T + + + bbb : T + + + + + C + + T + + + ccc : T + + + + + D + + + ddd : int + + + + + C + + D + + + + + + B + + std::unique_ptr<C<D>> + + + + + + A + + B<std::unique_ptr<C<D>>> + + + + + + R + + + abc : A<B<std::unique_ptr<C<D>>>> + + + + + + + + + + + + + + + + + abc + + diff --git a/docs/test_cases/t00034_class.svg b/docs/test_cases/t00034_class.svg index a06629a6..886adb30 100644 --- a/docs/test_cases/t00034_class.svg +++ b/docs/test_cases/t00034_class.svg @@ -1,60 +1,78 @@ -Voidoperator==(Void const& ) const : booloperator!=(Void const& ) const : boollift_voidTlift_voidvoiddrop_voidTdrop_voidVoidARla : lift_void_t<A>*lv : lift_void_t<void>*la \ No newline at end of file + + + + + + + + + + + + + + Void + + + + operator==(Void const& ) const : bool + + operator!=(Void const& ) const : bool + + + + lift_void + + T + + + + + + lift_void + + void + + + + + + drop_void + + T + + + + + + drop_void + + Void + + + + + + A + + + + + + R + + + la : lift_void_t<A>* + + lv : lift_void_t<void>* + + + + + + + + + la + + diff --git a/docs/test_cases/t00035_class.svg b/docs/test_cases/t00035_class.svg index 46f289d8..38d5d469 100644 --- a/docs/test_cases/t00035_class.svg +++ b/docs/test_cases/t00035_class.svg @@ -1,48 +1,42 @@ -TopLeftCenterBottomRight \ No newline at end of file + + + + + + + + + + + + + + Top + + + + + + Left + + + + + + Center + + + + + + Bottom + + + + + + Right + + + + diff --git a/docs/test_cases/t00036_class.svg b/docs/test_cases/t00036_class.svg index e628e932..8c605353 100644 --- a/docs/test_cases/t00036_class.svg +++ b/docs/test_cases/t00036_class.svg @@ -1,62 +1,76 @@ -ns1ns11ns111ns2ns22clangumlEblueyellowATa : TAintBa_int : A<int>Ca_int \ No newline at end of file + + + + + + + + + + + + + ns1 + + + ns11 + + + ns111 + + + ns2 + + + ns22 + + + clanguml + + + + E + + blue + yellow + + + + + A + + T + + + a : T + + + + + A + + int + + + + + + B + + + a_int : A<int> + + + + + C + + + + + + + + a_int + + diff --git a/docs/test_cases/t20001_sequence.svg b/docs/test_cases/t20001_sequence.svg index 8253e215..bbbcbdff 100644 --- a/docs/test_cases/t20001_sequence.svg +++ b/docs/test_cases/t20001_sequence.svg @@ -1,32 +1,63 @@ -tmain()tmain()BBAAwrap_add3()add3()add()log_result()log_result()Main test function \ No newline at end of file + + + + + + + + + + + + + + + + + + + + tmain() + + tmain() + + B + + B + + A + + A + + + + + + + + wrap_add3() + + + add3() + + + + + add() + + + + + log_result() + + + + + log_result() + + + + + Main test function + + diff --git a/docs/test_cases/t20002_sequence.svg b/docs/test_cases/t20002_sequence.svg index e316b7f8..d8e94f30 100644 --- a/docs/test_cases/t20002_sequence.svg +++ b/docs/test_cases/t20002_sequence.svg @@ -1,23 +1,47 @@ -m1()m1()m2()m2()m3()m3()m4()m4()m2()m3()m4() \ No newline at end of file + + + + + + + + + + + + + + + + + + + m1() + + m1() + + m2() + + m2() + + m3() + + m3() + + m4() + + m4() + + + + + + m2() + + + m3() + + + m4() + + diff --git a/docs/test_cases/t30001_package.svg b/docs/test_cases/t30001_package.svg index 0b9ac111..5fe708ff 100644 --- a/docs/test_cases/t30001_package.svg +++ b/docs/test_cases/t30001_package.svg @@ -1,44 +1,46 @@ -AAABAAAAABBBBBAAABBBBBA AAA note... \ No newline at end of file + + + + + + + + + + + + + A + + + AA + + + B + + + AA + + + AAA + + + BBB + + + BB + + + AAA + + + BBB + + + BB + + + A AAA note... + + + diff --git a/docs/test_cases/t30002_package.svg b/docs/test_cases/t30002_package.svg index 5bacd6c5..1c52a720 100644 --- a/docs/test_cases/t30002_package.svg +++ b/docs/test_cases/t30002_package.svg @@ -1,84 +1,92 @@ -AAABBBA1A2A3A4A5A6A7A8A9A10A11A12A13BBB \ No newline at end of file + + + + + + + + + + + + + A + + + AA + + + B + + + BB + + + A1 + + + A2 + + + A3 + + + A4 + + + A5 + + + A6 + + + A7 + + + A8 + + + A9 + + + A10 + + + A11 + + + A12 + + + A13 + + + BBB + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/test_cases/t30003_package.svg b/docs/test_cases/t30003_package.svg index f1feab21..5c271413 100644 --- a/docs/test_cases/t30003_package.svg +++ b/docs/test_cases/t30003_package.svg @@ -1,35 +1,34 @@ -ns1ns3«deprecated»ns1ns2_v1_0_0ns2_v0_9_0«deprecated»ns2 \ No newline at end of file + + + + + + + + + + + + + ns1 + + + ns3 + «deprecated» + + + ns1 + + + ns2_v1_0_0 + + + ns2_v0_9_0 + «deprecated» + + + ns2 + + + + diff --git a/docs/test_cases/t30004_package.svg b/docs/test_cases/t30004_package.svg index 8591f854..c31fa15a 100644 --- a/docs/test_cases/t30004_package.svg +++ b/docs/test_cases/t30004_package.svg @@ -1,47 +1,47 @@ -APackage AAA.Package BBB.CCCC package note.Another CCC note.We skipped DDD.AAABBBCCCEEE \ No newline at end of file + + + + + + + + + + + + + A + + + Package AAA. + + + Package BBB. + + + CCCC package note. + + + Another CCC note. + + + We skipped DDD. + + + AAA + + + BBB + + + CCC + + + EEE + + + + + + + diff --git a/docs/test_cases/t30005_package.svg b/docs/test_cases/t30005_package.svg index f0ed020d..961fed2c 100644 --- a/docs/test_cases/t30005_package.svg +++ b/docs/test_cases/t30005_package.svg @@ -1,48 +1,43 @@ -AAABBBCCCAAABBBCCC \ No newline at end of file + + + + + + + + + + + + + A + + + AA + + + B + + + BB + + + C + + + CC + + + AAA + + + BBB + + + CCC + + + + + + diff --git a/docs/test_cases/t30006_package.svg b/docs/test_cases/t30006_package.svg index 92daf49f..bdb0cbb4 100644 --- a/docs/test_cases/t30006_package.svg +++ b/docs/test_cases/t30006_package.svg @@ -1,38 +1,33 @@ -BACTop A note.Bottom A note. \ No newline at end of file + + + + + + + + + + + + + B + + + A + + + C + + + Top A note. + + + Bottom A note. + + + + + + + + diff --git a/docs/test_cases/t30007_package.svg b/docs/test_cases/t30007_package.svg index b3794762..5ab9d3b9 100644 --- a/docs/test_cases/t30007_package.svg +++ b/docs/test_cases/t30007_package.svg @@ -1,45 +1,36 @@ -ABAACCompare layout with t30006.Bottom A note. \ No newline at end of file + + + + + + + + + + + + + A + + + B + + + AA + + + C + + + Compare layout with t30006. + + + Bottom A note. + + + + + + + + diff --git a/docs/test_cases/t90000_class.svg b/docs/test_cases/t90000_class.svg index a5beec6d..37c80296 100644 --- a/docs/test_cases/t90000_class.svg +++ b/docs/test_cases/t90000_class.svg @@ -1,33 +1,47 @@ -Fooint valueArrayListThis is a very important class.This is afloating noteThis note is connectedto several objects.Boo \ No newline at end of file + + + + + + + + + + + + + + Foo + + + int value + + + + + ArrayList + + + + + This is a very important class. + + + This is a + floating note + + + This note is connected + to several objects. + + + + Boo + + + + + + + + diff --git a/util/format_svg.py b/util/format_svg.py new file mode 100755 index 00000000..1539f88d --- /dev/null +++ b/util/format_svg.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 + +## +## util/format_svg.py +## +## Copyright (c) 2021-2022 Bartek Kryza +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + +import sys +from lxml import etree + +def main(argv): + if len(argv) < 1: + print('Usage: \n') + print('\t\t ./format_svg.py input_file1.svg input_file2.svg ...\n') + sys.exit(1) + + for inputfile in argv: + # Read svg file contents + with open(inputfile, 'r') as f: + xml = f.read() + + # Parse SVG XML + tree = etree.fromstring(bytes(xml, encoding='utf8')) + + # Remove comments from SVG, to minimize diff + # when updating diagrams in Git + comments = tree.xpath('//comment()') + + for c in comments: + p = c.getparent() + p.remove(c) + + # Overwrite the input svg properly formatted + etree.ElementTree(tree).write(inputfile, encoding='utf-8', pretty_print=True) + + +if __name__ == "__main__": + main(sys.argv[1:]) \ No newline at end of file