summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-05-23 19:55:14 +0000
committerKarl Berry <karl@freefriends.org>2022-05-23 19:55:14 +0000
commit9bc5428d15299f7f617a06b76e9dab76044437ce (patch)
treede3efb141dabc5eb909bdbfd98c1ae75dce15320
parent1d4ce619745b89d1f9a73d075f19d5f2167d8d87 (diff)
pgf-umlcd (23may22)
git-svn-id: svn://tug.org/texlive/trunk@63378 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/COPYING21
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-GPL2.txt339
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-LPPL1.3c.txt416
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/README3
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/README.md15
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/RELEASE_NOTES.md12
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/demo/color.tex14
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/demo/multiple-inheritance.tex16
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/description.html2
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.pdfbin269669 -> 233921 bytes
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.tex15
-rw-r--r--Master/texmf-dist/tex/latex/pgf-umlcd/pgf-umlcd.sty353
-rw-r--r--Master/texmf-dist/tex/latex/pgf-umlcd/tikzlibraryumlcd.code.tex402
13 files changed, 1243 insertions, 365 deletions
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/COPYING b/Master/texmf-dist/doc/latex/pgf-umlcd/COPYING
index 71917be32ee..6d137c2a21e 100644
--- a/Master/texmf-dist/doc/latex/pgf-umlcd/COPYING
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/COPYING
@@ -1,14 +1,11 @@
This file is part of pgf-umlcd.
-pgf-umlcd is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-pgf-umlcd is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Foobar. If not, see <http://www.gnu.org/licenses/>. \ No newline at end of file
+Copyright 2009-2020 Yuan Xu
+
+pgf-umlcd is licensed under the terms of the The LaTeX Project Public License (LPPL) 1.3c, or
+alternatively under the terms of the General Public License (GPL) Version 2.
+
+The terms of each license can be found in the source repository:
+
+LaTeX Project Public License: doc/latex/pgf-umlcd/LICENSE-LPPL1.3c.txt
+General Public License 2: doc/latex/pgf-umlcd/LICENSE-GPL2.txt
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-GPL2.txt b/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-GPL2.txt
new file mode 100644
index 00000000000..d159169d105
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-GPL2.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-LPPL1.3c.txt b/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-LPPL1.3c.txt
new file mode 100644
index 00000000000..22443139013
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/LICENSE-LPPL1.3c.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/README b/Master/texmf-dist/doc/latex/pgf-umlcd/README
deleted file mode 100644
index 5cc6fbf3a01..00000000000
--- a/Master/texmf-dist/doc/latex/pgf-umlcd/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Some LaTeX macros for UML Class Diagrams.
-Home page of project: http://pgf-umlcd.googlecode.com/
-Please read pgf-umlcd-manual.pdf for more information.
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/README.md b/Master/texmf-dist/doc/latex/pgf-umlcd/README.md
new file mode 100644
index 00000000000..6eff10fba28
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/README.md
@@ -0,0 +1,15 @@
+# pgf-umlcd
+
+![CI](https://github.com/pgf-tikz/pgf/workflows/CI/badge.svg)
+
+Some LaTeX macros for UML Class Diagrams.
+
+Please go to the official repository at https://github.com/pgf-tikz/pgf-umlcd
+or the official mailing list at https://tug.org/mailman/listinfo/pgf-tikz to
+submit bug reports, request new features, etc.
+
+Please read pgf-umlcd-manual.pdf for more information.
+
+## License
+
+pgf-umlcd is released under the terms of both the LPPL v1.3c and the GPL v2.
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/RELEASE_NOTES.md b/Master/texmf-dist/doc/latex/pgf-umlcd/RELEASE_NOTES.md
new file mode 100644
index 00000000000..818c0d327fd
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/RELEASE_NOTES.md
@@ -0,0 +1,12 @@
+# Bug fixes
+
+This release contains mostly bugfixes but also some grand internal restructuring
+of the package. However, the latter should not be visible to the end user. If
+you encounter breakages please raise an issue on GitHub.
+
+- Patch for multiple inheritance
+- Add color settings, thanks Maarten van Dessel
+- Add support for static classes analogue to abstract classes
+- Changed from above/below to auto in association et al. Added possibility of optional argument
+- Move anchor=north before this umlcd style
+- Start rewrite as a TikZ library
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/demo/color.tex b/Master/texmf-dist/doc/latex/pgf-umlcd/demo/color.tex
new file mode 100644
index 00000000000..798f4ae1416
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/demo/color.tex
@@ -0,0 +1,14 @@
+\renewcommand{\umltextcolor}{red}
+\renewcommand{\umlfillcolor}{green}
+\renewcommand{\umldrawcolor}{blue}
+
+\begin{tikzpicture}
+ \begin{class}[text width=8cm]{ClassName}{0,0}
+ \attribute{name : attribute type}
+ \attribute{name : attribute type = default value}
+
+ \operation{name(parameter list) : type of value returned}
+ % virtual operation
+ \operation[0]{name(parameters list) : type of value returned}
+ \end{class}
+\end{tikzpicture} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/demo/multiple-inheritance.tex b/Master/texmf-dist/doc/latex/pgf-umlcd/demo/multiple-inheritance.tex
new file mode 100644
index 00000000000..d97c5140ef8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/demo/multiple-inheritance.tex
@@ -0,0 +1,16 @@
+\begin{tikzpicture}%[show background grid]
+ \begin{class}[text width = 2cm]{TArg}{0, 0}
+ \end{class}
+
+ \begin{class}[text width = 2cm]{TGroup}{5, 0}
+ \end{class}
+
+ \begin{class}[text width = 2cm]{TProgInit}{10, 0}
+ \end{class}
+
+ \begin{class}[text width = 2cm]{TProgram}{5, -2}
+ \inherit{TProgInit}
+ \inherit{TGroup}
+ \inherit{TArg}
+ \end{class}
+\end{tikzpicture}
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/description.html b/Master/texmf-dist/doc/latex/pgf-umlcd/description.html
new file mode 100644
index 00000000000..d077a85ed2f
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/description.html
@@ -0,0 +1,2 @@
+<p>Some LaTeX macros for UML Class Diagrams.<a data-cke-saved-href="/pkg/pgf" href="/pkg/pgf">pgf</a><br></p>
+
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.pdf b/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.pdf
index 7e6fea67e19..6f9d497a2f5 100644
--- a/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.pdf
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.tex b/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.tex
index 17a6edc6fdf..393d436b635 100644
--- a/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.tex
+++ b/Master/texmf-dist/doc/latex/pgf-umlcd/pgf-umlcd-manual.tex
@@ -68,7 +68,7 @@ keywordstyle=\color{blue}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{Drawing UML Class Diagram by using \texttt{pgf-umlcd}}
\author{\href{mailto:xuyuan.cn@gmail.com}{Yuan Xu}}
-\date{\today{}~(v0.2.1)}
+\date{\today{}~(v0.3)}
\maketitle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -112,6 +112,8 @@ The \lstinline|\umlnote| use the same syntax as tikz command
\subsection{Inheritance and implement}
\subsubsection{Inheritance}
\demo{inheritance}
+\subsubsection{Multiple Inheritance}
+\demo{multiple-inheritance}
\subsubsection{Implement an interface}
\demo{implement-interface}
@@ -132,6 +134,13 @@ The \lstinline|\umlnote| use the same syntax as tikz command
\subsection{Package}
\demo{package}
+\section{Customization}
+\subsection{Color settings}
+The color of digram is defined by \lstinline|\umltextcolor|, \lstinline|\umldrawcolor| and \lstinline|\umlfillcolor|, such as:
+
+\demo{color}
+
+
\section{Examples}
\subsection{Abstract Factory}
\example{abstract-factory}
@@ -140,7 +149,9 @@ The \lstinline|\umlnote| use the same syntax as tikz command
Many people contributed to \texttt{pgf-umlcd} by reporting problems,
suggesting various improvements or submitting code. Here is a list of
these people: \href{mailto:martin.quinson@loria.fr}{Martin Quinson},
-and \href{mailto:johannes_pieper@yahoo.de}{Johannes Pieper}.
+\href{mailto:johannes_pieper@yahoo.de}{Johannes Pieper},
+\href{mailto:lwghsh@gmail.com}{sh w},
+and \href{mailto:maartenvandessel@hotmail.com}{Maarten van Dessel}.
\end{document}
%%% Local Variables:
diff --git a/Master/texmf-dist/tex/latex/pgf-umlcd/pgf-umlcd.sty b/Master/texmf-dist/tex/latex/pgf-umlcd/pgf-umlcd.sty
index 0062909b8d7..3d37e9b69e3 100644
--- a/Master/texmf-dist/tex/latex/pgf-umlcd/pgf-umlcd.sty
+++ b/Master/texmf-dist/tex/latex/pgf-umlcd/pgf-umlcd.sty
@@ -1,353 +1,10 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Start of pgf-umlcd.sty
-%
-% Some macros for UML Class Diagrams.
-% Home page of project: http://pgf-umlcd.googlecode.com/
-% Author: Xu Yuan <xu@informatik.hu-berlin.de>, Humboldt University, Berlin
-% Style from: http://www.ibm.com/developerworks/cn/rational/r-uml/
-%
-
+% SPDX-License-Identifier: GPL-2.0-only OR LPPL-1.3c
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{pgf-umlcd}[2011/10/01 v0.3dev Some LaTeX macros for
-UML Class Diagrams.]
+\ProvidesPackage{pgf-umlcd}[2022/05/22 v0.3 Some LaTeX macros for UML Class Diagrams.]
\RequirePackage{tikz}
+\usetikzlibrary{umlcd}
-\usetikzlibrary{arrows,shapes.multipart,backgrounds,fit}
-\tikzstyle{help lines}+=[blue!50,very thin,dashed]
-
-\newcommand{\umltextcolor}{black}
-\newcommand{\umldrawcolor}{purple}
-\newcommand{\umlfillcolor}{yellow!20}
-\tikzstyle{umlcolor}=[color=\umldrawcolor,fill=\umlfillcolor,text=\umltextcolor]
-\tikzstyle{umlcd style}=[umlcolor, >=angle 90]
-
-\tikzstyle{package}=[matrix, column sep=1mm, row sep=1cm, node distance=2cm]
-\tikzstyle{packagename}=[rectangle, minimum height=2em]
-
-\tikzstyle{umlcd style implement line}=[color=\umldrawcolor, open triangle 45-,dashed]
-\tikzstyle{objectline}=[color=\umldrawcolor, diamond->]
-\tikzstyle{umlcd style inherit line}=[color=\umldrawcolor, open triangle 45-]
-\tikzstyle{splitline}=[color=\umldrawcolor, dotted,font=\itshape]
-
-\tikzstyle{umlcd style class}=[rectangle split, rectangle split parts=3,
-every text node part/.style={text centered},
-draw, minimum height=2em, umlcolor, minimum width=2cm, text width=5cm,
-minimum height=1cm, node distance=2cm]
-
-
-\tikzstyle{umlcd style dashed line}=[color=\umldrawcolor, >=angle 90,dashed]
-
-\tikzstyle{umlcd style school}=[]
-\newif\ifschool\schoolfalse
-\DeclareOption{school}{\tikzstyle{umlcd style school}=[rounded corners] \schooltrue}
-\newif\ifsimplified\simplifiedfalse
-\DeclareOption{simplified}{\simplifiedtrue}
+\DeclareOption{school}{\tikzset{umlcd style school/.style={rounded corners}}\pgfumlcd@schooltrue}
+\DeclareOption{simplified}{\pgfumlcd@simplifiedtrue}
\ProcessOptions\relax
-
-
-% declare layers
-\pgfdeclarelayer{background}
-\pgfdeclarelayer{connectionlayers}
-\pgfsetlayers{background,connectionlayers,main}
-
-\newcounter{umlcdClassAttributesNum}
-\newcounter{umlcdClassOperationsNum}
-\newcounter{umlcdClassAbstractClassNum}
-\newcounter{umlcdClassInterfaceNum}
-\newcounter{umlcdClassSplitPartNum}
-
-\def\umlcdPackageFit{}
-
-\newenvironment{class}[3][]%
-{
-\begin{classAndInterfaceCommon}{#1}{#2}{#3}
-}%
-{\calcuateNumberOfParts{}
-\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
- {\textbf{\umlcdClassName}
-\insertAttributesAndOperations{}
-};
-
-\end{classAndInterfaceCommon}
-}
-
-\newenvironment{interface}[3][]%
-{
-\begin{classAndInterfaceCommon}{#1}{#2}{#3}
-}%
-{\calcuateNumberOfParts{}
-\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
- {$<<$interface$>>$ \\ \textbf{\umlcdClassName}
-\insertAttributesAndOperations{}
-};
-
-\end{classAndInterfaceCommon}
-}
-
-\newenvironment{abstractclass}[3][]%
-{
-\begin{classAndInterfaceCommon}{#1}{#2}{#3}
-}%
-{\calcuateNumberOfParts{}
-\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
- {$<<$abstract$>>$ \\ \textbf{\umlcdClassName}
-\insertAttributesAndOperations{}
-};
-
-\end{classAndInterfaceCommon}
-}
-
-% TODO: here the name of \umlcdClassName and \umlObjectName should be
-% switched, it is only for reusing \classAndInterfaceCommon at the
-% moment.
-\newenvironment{object}[3][]%
-{
-\begin{classAndInterfaceCommon}{#1}{#2}{#3}
-\def\@instanceOf{}
-\def\@@instanceOf{}
-}%
-{
- % customized
- \ifsimplified
- \calcuateNumberOfParts{}
- \else
- \ifnum\c@umlcdClassOperationsNum>0
- \setcounter{umlcdClassSplitPartNum}{3}
- \protected@xdef\umlcdSplitPart{3}
- \else
- \setcounter{umlcdClassSplitPartNum}{2}
- \protected@xdef\umlcdSplitPart{2}
- \fi
- \fi
-
- \ifx\@instanceOf\@@instanceOf
- \def\umldObjectName{\umlcdClassName}
- \else
- \def\umldObjectName{\umlcdClassName : \@instanceOf}
- \fi
-
-\node[this umlcd style, anchor=north, umlcd style school] (\umlcdClassName) at (\umlcdClassPos)
- { \ifschool
- \textbf{\umldObjectName}
- \else
- \underline{\textbf{\umldObjectName}}
- \fi
- \insertAttributesAndOperations{}
-};
-
-\end{classAndInterfaceCommon}
-}
-
-\newcommand*{\insertAttributesAndOperations}
-{
- \ifnum\c@umlcdClassSplitPartNum>1
- \nodepart{second}
- \fi
- \umlcdClassAttributes
- \ifnum\c@umlcdClassSplitPartNum>2
- \nodepart{third}
- \fi
- \umlcdClassOperations
-}
-
-\newcommand*{\calcuateNumberOfParts}
-{
- % calcuate the number of parts
- \ifsimplified
- \setcounter{umlcdClassSplitPartNum}{1}
- \ifnum\c@umlcdClassAttributesNum>0
- \stepcounter{umlcdClassSplitPartNum}
- \fi
- \ifnum\c@umlcdClassOperationsNum>0
- \stepcounter{umlcdClassSplitPartNum}
- \fi
- \else
- \setcounter{umlcdClassSplitPartNum}{3}% three parts by default
- \fi
-
- \protected@xdef\umlcdSplitPart{3}
- \ifnum\c@umlcdClassSplitPartNum=1
- \protected@xdef\umlcdSplitPart{1}
- \fi
- \ifnum\c@umlcdClassSplitPartNum=2
- \protected@xdef\umlcdSplitPart{2}
- \fi
-}
-
-\newenvironment*{classAndInterfaceCommon}[3]
-{
-\def\umlcdClassName{#2}%
-\def\umlcdClassPos{#3}
-\def\umlcdClassAttributes{}%
-\def\umlcdClassOperations{}%
-\def\umlcdClassAbstractClass{}%
-\def\umlcdClassInterface{}%
-\setcounter{umlcdClassAttributesNum}{0}%
-\setcounter{umlcdClassOperationsNum}{0}%
-\setcounter{umlcdClassAbstractClassNum}{0}%
-\setcounter{umlcdClassInterfaceNum}{0}%
-\tikzstyle{this umlcd style}=[umlcd style class, rectangle split
- parts=\umlcdSplitPart, #1]
-}%
-{
-%% connections
-\begin{pgfonlayer}{connectionlayers}
-\ifnum\c@umlcdClassAbstractClassNum>0
-\foreach \c in {\umlcdClassAbstractClass}{
- \draw [umlcd style inherit line] (\c) -- (\umlcdClassName);
-}
-\fi
-
-\ifnum\c@umlcdClassInterfaceNum>0
-\foreach \c in {\umlcdClassInterface}{
- \draw [umlcd style implement line] (\c) -- (\umlcdClassName);
-}
-\fi
-\end{pgfonlayer}
-
-%% add to fit
-\let\umlcdPackageFitOld\umlcdPackageFit
-\protected@xdef\umlcdPackageFit{\umlcdPackageFitOld (\umlcdClassName)}
-}
-
-\newcommand{\attribute}[1]{%
-\ifnum\c@umlcdClassAttributesNum=0
-\protected@xdef\umlcdClassAttributes{#1}
-\else
-\let\umlcdClassAttributesOld\umlcdClassAttributes
-\protected@xdef\umlcdClassAttributes{\umlcdClassAttributesOld \ \newline
- #1}
-\fi
-\stepcounter{umlcdClassAttributesNum}
-}
-
-\newcommand{\operation}[2][1]{%
-\stepcounter{umlcdClassOperationsNum}
-
-\def\virtualoperation{#2}
-\ifnum0=#1
-\def\virtualoperation{\textit{#2}}
-\fi
-
-\ifnum\c@umlcdClassOperationsNum=1
-\protected@xdef\umlcdClassOperations{\virtualoperation}
-\else
-\let\umlcdClassOperationsOld\umlcdClassOperations
-\protected@xdef\umlcdClassOperations{\umlcdClassOperationsOld \ \newline
- \virtualoperation}
-\fi
-}
-
-\newcommand{\inherit}[1]
-{
-\stepcounter{umlcdClassAbstractClassNum}
-\ifnum\c@umlcdClassAbstractClassNum=1
-\protected@xdef\umlcdClassAbstractClass{#1}
-\else
-\let\umlcdClassAbstractClassOld\umlcdClassAbstractClass
-\protected@xdef\umlcdClassAbstractClass{\umlcdClassAbstractClassOld,
- #1}
-\fi
-}
-
-\newcommand{\implement}[1]
-{
-\stepcounter{umlcdClassInterfaceNum}
-\ifnum\c@umlcdClassInterfaceNum=1
-\protected@xdef\umlcdClassInterface{#1}
-\else
-\let\umlcdClassInterfaceOld\umlcdClassInterface
-\protected@xdef\umlcdClassInterface{\umlcdClassInterfaceOld,
- #1}
-\fi
-}
-
-\newcommand{\instanceOf}[1]{\def\@instanceOf{#1}}
-
-\newcommand{\association}[6]{
-\draw [umlcd style] (#1) -- (#4)
-node[near start, above]{#2}
-node[near start, below]{#3}
-node[near end, above]{#5}
-node[near end, below]{#6};
-}
-
-\newcommand{\unidirectionalAssociation}[4]{
-\draw [umlcd style, ->] (#1) -- (#4)
-node[near end, above]{#2}
-node[near end, below]{#3};
-}
-
-\newcommand{\aggregation}[4]
-{
-\draw[umlcd style, open diamond->] (#1) -- (#4)
-node[near end, above]{#2}
-node[near end, below]{#3};
-}
-
-\newcommand{\composition}[4]
-{
-\draw[umlcd style, fill=\umldrawcolor, diamond->] (#1) -- (#4)
-node[near end, above]{#2}
-node[near end, below]{#3};
-}
-
-\newenvironment{package}[1]{
-\def\umlcdPackageFit{}
-\def\umlcdPackageName{#1}
-}{
- \begin{pgfonlayer}{background}
- \node[umlcd style, draw, inner sep=0.5cm, fit = \umlcdPackageFit] (\umlcdPackageName) {};
- \node[umlcd style, draw, outer ysep=-0.5, anchor=south west] (\umlcdPackageName caption) at
- (\umlcdPackageName.north west) {\umlcdPackageName};
- \end{pgfonlayer}
-}
-
-\newcommand{\switchUmlcdSchool}{
- \ifschool
- \tikzstyle{umlcd style school}=[]
- \schoolfalse
- \else
- \tikzstyle{umlcd style school}=[rounded corners]
- \schooltrue
- \fi
-}
-
-\pgfdeclareshape{umlcdnote}{
-\inheritsavedanchors[from=rectangle] % this is nearly a rectangle
-\inheritanchorborder[from=rectangle]
-\inheritanchor[from=rectangle]{center}
-\inheritanchor[from=rectangle]{north}
-\inheritanchor[from=rectangle]{south}
-\inheritanchor[from=rectangle]{west}
-\inheritanchor[from=rectangle]{east}
-% ... and possibly more
-\backgroundpath{% this is new
-% store lower right in xa/ya and upper right in xb/yb
-\southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
-\northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
-% compute corner of flipped page
-\pgf@xc=\pgf@xb \advance\pgf@xc by-10pt % this should be a parameter
-\pgf@yc=\pgf@yb \advance\pgf@yc by-10pt
-% construct main path
-\pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
-\pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
-\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
-\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
-\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
-\pgfpathclose
-% add little corner
-\pgfpathmoveto{\pgfpoint{\pgf@xc}{\pgf@yb}}
-\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
-\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
-\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
-}
-}
-
-\newcommand{\umlnote}[1][]{
- \node[umlcd style, anchor=north, draw,shape=umlcdnote, text width=4cm, #1]
-}
-
-%%% End of pgf-umlcd.sty
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/pgf-umlcd/tikzlibraryumlcd.code.tex b/Master/texmf-dist/tex/latex/pgf-umlcd/tikzlibraryumlcd.code.tex
new file mode 100644
index 00000000000..63b05580f7e
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pgf-umlcd/tikzlibraryumlcd.code.tex
@@ -0,0 +1,402 @@
+% SPDX-License-Identifier: GPL-2.0-only OR LPPL-1.3c
+
+\usetikzlibrary{arrows,shapes.multipart,backgrounds,fit}
+
+%
+% Utilities
+%
+
+\def\pgfumlcd@ifx#1#2{%
+ \ifx#1#2%
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi}
+
+\def\pgfumlcd@ifdim#1#2#3{%
+ \ifdim\dimexpr#1\relax#2\dimexpr#3\relax
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi}
+
+\def\pgfumlcd@ifnum#1#2#3{%
+ \ifnum\numexpr#1\relax#2\numexpr#3\relax
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi}
+
+\def\pgfumlcd@newif#1{%
+ \csname newif\expandafter\endcsname\csname ifpgfumlcd@#1\endcsname
+ \expandafter\def\csname pgfumlcd@if#1\expandafter\endcsname\expandafter{%
+ \csname ifpgfumlcd@#1\endcsname
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi}%
+}
+
+\expandafter\let\expandafter\pgfumlcd@xdef\csname\ifcsname protected@xdef\endcsname protected@\fi xdef\endcsname
+
+\def\umltextcolor{black}
+\def\umldrawcolor{purple}
+\def\umlfillcolor{yellow!20}
+
+\tikzset{%
+ help lines/.append style = {blue!50,very thin,dashed},
+ umlcolor/.style = {color=\umldrawcolor,fill=\umlfillcolor,text=\umltextcolor},
+ umlcd style/.style = {umlcolor, >=angle 90},
+ package/.style = {matrix, column sep=1mm, row sep=1cm, node distance=2cm},
+ packagename/.style = {rectangle, minimum height=2em},
+ umlcd style implement line/.style = {color=\umldrawcolor, open triangle 45-,dashed},
+ objectline/.style = {color=\umldrawcolor, diamond->},
+ umlcd style inherit line/.style = {color=\umldrawcolor, open triangle 45-},
+ splitline/.style = {color=\umldrawcolor, dotted,font=\pgfutil@font@itshape},
+ umlcd style class/.style = {rectangle split, rectangle split parts=3,
+ every text node part/.style={text centered},
+ draw, minimum height=2em, umlcolor, minimum width=2cm, text width=5cm,
+ minimum height=1cm, node distance=2cm},
+ umlcd style dashed line/.style = {color=\umldrawcolor, >=angle 90,dashed},
+ umlcd style school/.style = {},
+}
+
+\pgfumlcd@newif{school}
+\pgfumlcd@newif{simplified}
+
+% declare layers
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{connectionlayers}
+\pgfsetlayers{background,connectionlayers,main}
+
+\newcount\pgfumlcd@ClassAttributesNum
+\newcount\pgfumlcd@ClassOperationsNum
+\newcount\pgfumlcd@ClassAbstractClassNum
+\newcount\pgfumlcd@ClassInterfaceNum
+\newcount\pgfumlcd@ClassSplitPartNum
+
+\def\pgfumlcd@PackageFit{}
+
+\def\pgfumlcd@class{\pgfutil@ifnextchar[{\pgfumlcd@class@}{\pgfumlcd@class@[]}}
+\def\pgfumlcd@class@[#1]#2#3{%
+ \pgfumlcd@classAndInterfaceCommon{#1}{#2}{#3}%
+}
+\def\endpgfumlcd@class{%
+ \pgfumlcd@calcuateNumberOfParts{}%
+ \node[anchor=north,this umlcd style] (\pgfumlcd@ClassName) at (\pgfumlcd@ClassPos) {%
+ {\pgfutil@font@bfseries\pgfumlcd@ClassName} % <-- explicit space
+ \pgfumlcd@insertAttributesAndOperations{}%
+ };%
+ \endpgfumlcd@classAndInterfaceCommon
+}
+
+\def\pgfumlcd@interface{\pgfutil@ifnextchar[{\pgfumlcd@interface@}{\pgfumlcd@interface@[]}}
+\def\pgfumlcd@interface@[#1]#2#3{%
+ \pgfumlcd@classAndInterfaceCommon{#1}{#2}{#3}%
+}
+\def\endpgfumlcd@interface{%
+ \pgfumlcd@calcuateNumberOfParts{}%
+ \node[anchor=north,this umlcd style] (\pgfumlcd@ClassName) at (\pgfumlcd@ClassPos) {%
+ $<<$interface$>>$\break
+ {\pgfutil@font@bfseries\pgfumlcd@ClassName} % <-- explicit space
+ \pgfumlcd@insertAttributesAndOperations{}%
+ };%
+ \endpgfumlcd@classAndInterfaceCommon
+}
+
+\def\pgfumlcd@abstractclass{\pgfutil@ifnextchar[{\pgfumlcd@abstractclass@}{\pgfumlcd@abstractclass@[]}}
+\def\pgfumlcd@abstractclass@[#1]#2#3{%
+ \pgfumlcd@classAndInterfaceCommon{#1}{#2}{#3}%
+}
+\def\endpgfumlcd@abstractclass{%
+ \pgfumlcd@calcuateNumberOfParts{}
+ \node[anchor=north,this umlcd style] (\pgfumlcd@ClassName) at (\pgfumlcd@ClassPos) {%
+ $<<$abstract$>>$\break
+ {\pgfutil@font@bfseries\pgfumlcd@ClassName} % <-- explicit space
+ \pgfumlcd@insertAttributesAndOperations{}%
+ };%
+ \endpgfumlcd@classAndInterfaceCommon
+}
+
+\def\pgfumlcd@staticclass{\pgfutil@ifnextchar[{\pgfumlcd@staticclass@}{\pgfumlcd@staticclass@[]}}
+\def\pgfumlcd@staticclass@[#1]#2#3{%
+ \pgfumlcd@classAndInterfaceCommon{#1}{#2}{#3}%
+}
+\def\endpgfumlcd@staticclass{%
+ \pgfumlcd@calcuateNumberOfParts{}
+ \node[anchor=north,this umlcd style] (\pgfumlcd@ClassName) at (\pgfumlcd@ClassPos) {%
+ $<<$static$>>$\break
+ {\pgfutil@font@bfseries\pgfumlcd@ClassName} % <-- explicit space
+ \pgfumlcd@insertAttributesAndOperations{}%
+ };%
+ \endpgfumlcd@classAndInterfaceCommon
+}
+
+% TODO: here the name of \pgfumlcd@ClassName and \umlObjectName should be
+% switched, it is only for reusing \classAndInterfaceCommon at the
+% moment.
+\def\pgfumlcd@object{\pgfutil@ifnextchar[{\pgfumlcd@object@}{\pgfumlcd@object@[]}}
+\def\pgfumlcd@object@[#1]#2#3{%
+ \pgfumlcd@classAndInterfaceCommon{#1}{#2}{#3}%
+ \def\pgfumlcd@@instanceOf{}
+}
+\def\endpgfumlcd@object{%
+ % customized
+ \pgfumlcd@ifsimplified{%
+ \pgfumlcd@calcuateNumberOfParts{}%
+ }{%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassOperationsNum}{>}{0}{%
+ \pgfumlcd@ClassSplitPartNum=3
+ \pgfumlcd@xdef\pgfumlcd@SplitPart{3}%
+ }{%
+ \pgfumlcd@ClassSplitPartNum=2
+ \pgfumlcd@xdef\pgfumlcd@SplitPart{2}%
+ }%
+ }%
+ \pgfumlcd@ifx{\pgfumlcd@@instanceOf}{\pgfutil@empty}{%
+ \def\pgfumlcd@ObjectName{\pgfumlcd@ClassName}%
+ }{%
+ \def\pgfumlcd@ObjectName{\pgfumlcd@ClassName : \pgfumlcd@@instanceOf}%
+ }%
+ \node[anchor=north,this umlcd style,umlcd style school] (\pgfumlcd@ClassName) at (\pgfumlcd@ClassPos) {%
+ \pgfumlcd@ifschool{%
+ {\pgfutil@font@bfseries\pgfumlcd@ObjectName}%
+ }{%
+ \underline{\pgfutil@font@bfseries\pgfumlcd@ObjectName}%
+ } % <-- explicit space
+ \pgfumlcd@insertAttributesAndOperations{}%
+ };%
+ \endpgfumlcd@classAndInterfaceCommon
+}
+
+\def\pgfumlcd@insertAttributesAndOperations{%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassSplitPartNum}{>}{1}{%
+ \nodepart{second}%
+ }{}%
+ \pgfumlcd@ClassAttributes
+ \pgfumlcd@ifnum{\pgfumlcd@ClassSplitPartNum}{>}{2}{%
+ \nodepart{third}%
+ }{}%
+ \pgfumlcd@ClassOperations
+}
+
+\def\pgfumlcd@calcuateNumberOfParts{%
+ % calcuate the number of parts
+ \pgfumlcd@ifsimplified{%
+ \pgfumlcd@ClassSplitPartNum=1
+ \pgfumlcd@ifnum{\pgfumlcd@ClassAttributesNum}{>}{0}{%
+ \advance\pgfumlcd@ClassSplitPartNum by 1
+ }{}%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassOperationsNum}{>}{0}{%
+ \advance\pgfumlcd@ClassSplitPartNum by 1
+ }{}%
+ }{%
+ \pgfumlcd@ClassSplitPartNum=3 % three parts by default
+ }%
+ \pgfumlcd@xdef\pgfumlcd@SplitPart{3}
+ \pgfumlcd@ifnum{\pgfumlcd@ClassSplitPartNum}{=}{1}{%
+ \pgfumlcd@xdef\pgfumlcd@SplitPart{1}%
+ }{}%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassSplitPartNum}{=}{2}{%
+ \pgfumlcd@xdef\pgfumlcd@SplitPart{2}%
+ }{}%
+}
+
+\def\pgfumlcd@classAndInterfaceCommon#1#2#3{%
+ \def\pgfumlcd@ClassName{#2}%
+ \def\pgfumlcd@ClassPos{#3}
+ \def\pgfumlcd@ClassAttributes{}%
+ \def\pgfumlcd@ClassOperations{}%
+ \def\pgfumlcd@ClassAbstractClass{}%
+ \def\pgfumlcd@ClassInterface{}%
+ \pgfumlcd@ClassAttributesNum=0
+ \pgfumlcd@ClassOperationsNum=0
+ \pgfumlcd@ClassAbstractClassNum=0
+ \pgfumlcd@ClassInterfaceNum=0
+ \tikzset{%
+ this umlcd style/.style={%
+ umlcd style class,%
+ rectangle split parts=\pgfumlcd@SplitPart,%
+ #1}%
+ }
+}%
+\def\endpgfumlcd@classAndInterfaceCommon{%
+ %% connections
+ \pgfonlayer{connectionlayers}%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassAbstractClassNum}{>}{0}{%
+ \foreach \c in \pgfumlcd@ClassAbstractClass {%
+ \draw [umlcd style inherit line] (\c) -- (\pgfumlcd@ClassName);%
+ }%
+ }{}%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassInterfaceNum}{>}{0}{%
+ \foreach \c in \pgfumlcd@ClassInterface {%
+ \draw [umlcd style implement line] (\c) -- (\pgfumlcd@ClassName);%
+ }%
+ }{}%
+ \endpgfonlayer
+ %% add to fit
+ \let\pgfumlcd@PackageFitOld\pgfumlcd@PackageFit
+ \pgfumlcd@xdef\pgfumlcd@PackageFit{\pgfumlcd@PackageFitOld (\pgfumlcd@ClassName)}%
+}
+
+\def\pgfumlcd@attribute#1{%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassAttributesNum}{=}{0}{%
+ \pgfumlcd@xdef\pgfumlcd@ClassAttributes{#1}%
+ }{%
+ \let\pgfumlcd@ClassAttributesOld\pgfumlcd@ClassAttributes
+ \pgfumlcd@xdef\pgfumlcd@ClassAttributes{\pgfumlcd@ClassAttributesOld\break#1}%
+ }%
+ \advance\pgfumlcd@ClassAttributesNum by 1
+}
+
+\def\pgfumlcd@operation{\pgfutil@ifnextchar[{\pgfumlcd@operation@}{\pgfumlcd@operation@[1]}}
+\def\pgfumlcd@operation@[#1]#2{%
+ \advance\pgfumlcd@ClassOperationsNum by 1
+ \def\pgfumlcd@virtualoperation{#2}
+ \pgfumlcd@ifnum{0}{=}{#1}{%
+ \def\pgfumlcd@virtualoperation{{\pgfutil@font@itshape#2}}%
+ }{}%
+ \pgfumlcd@ifnum{\pgfumlcd@ClassOperationsNum}{=}{1}{%
+ \pgfumlcd@xdef\pgfumlcd@ClassOperations{\pgfumlcd@virtualoperation}%
+ }{%
+ \let\pgfumlcd@ClassOperationsOld\pgfumlcd@ClassOperations
+ \pgfumlcd@xdef\pgfumlcd@ClassOperations{\pgfumlcd@ClassOperationsOld\break\pgfumlcd@virtualoperation}%
+ }%
+}
+
+\def\pgfumlcd@inherit#1{%
+ \advance\pgfumlcd@ClassAbstractClassNum by 1
+ \pgfumlcd@ifnum{\pgfumlcd@ClassAbstractClassNum}{=}{1}{%
+ \pgfumlcd@xdef\pgfumlcd@ClassAbstractClass{#1}%
+ }{%
+ \let\pgfumlcd@ClassAbstractClassOld\pgfumlcd@ClassAbstractClass
+ \pgfumlcd@xdef\pgfumlcd@ClassAbstractClass{\pgfumlcd@ClassAbstractClassOld, #1}%
+ }%
+}
+
+\def\pgfumlcd@implement#1{%
+ \advance\pgfumlcd@ClassInterfaceNum by 1
+ \pgfumlcd@ifnum{\pgfumlcd@ClassInterfaceNum}{=}{1}{%
+ \pgfumlcd@xdef\pgfumlcd@ClassInterface{#1}
+ }{%
+ \let\pgfumlcd@ClassInterfaceOld\pgfumlcd@ClassInterface
+ \pgfumlcd@xdef\pgfumlcd@ClassInterface{\pgfumlcd@ClassInterfaceOld, #1}
+ }%
+}
+
+\def\pgfumlcd@instanceOf#1{\def\pgfumlcd@@instanceOf{#1}}
+
+\def\pgfumlcd@association{\pgfutil@ifnextchar[{\pgfumlcd@association@}{\pgfumlcd@association@[]}}
+\def\pgfumlcd@association@[#1]#2#3#4#5#6#7{%
+ \draw [umlcd style,#1] (#2) -- (#5)
+ node[near start, auto]{#3}
+ node[near start, auto, swap]{#4}
+ node[near end, auto]{#6}
+ node[near end, auto, swap]{#7};%
+}
+
+\def\pgfumlcd@unidirectionalAssociation{%
+ \pgfutil@ifnextchar[{\pgfumlcd@unidirectionalAssociation@}{\pgfumlcd@unidirectionalAssociation@[]}}
+\def\pgfumlcd@unidirectionalAssociation@[#1]#2#3#4#5{%
+ \draw [umlcd style,->,#1] (#2) -- (#5)
+ node[near end, auto]{#3}
+ node[near end, auto, swap]{#4};%
+}
+
+\def\pgfumlcd@aggregation{\pgfutil@ifnextchar[{\pgfumlcd@aggregation@}{\pgfumlcd@aggregation@[]}}
+\def\pgfumlcd@aggregation@[#1]#2#3#4#5{%
+ \draw[umlcd style,open diamond->,#1] (#2) -- (#5)
+ node[near end, auto]{#3}
+ node[near end, auto, swap]{#4};%
+}
+
+\def\pgfumlcd@composition{\pgfutil@ifnextchar[{\pgfumlcd@composition@}{\pgfumlcd@composition@[]}}
+\def\pgfumlcd@composition@[#1]#2#3#4#5{%
+ \draw[umlcd style,fill=\umldrawcolor,diamond->,#1] (#2) -- (#5)
+ node[near end, auto]{#3}
+ node[near end, auto, swap]{#4};%
+}
+
+\def\pgfumlcd@package#1{%
+ \def\pgfumlcd@PackageFit{}%
+ \def\pgfumlcd@PackageName{#1}%
+}
+\def\endpgfumlcd@package{%
+ \pgfonlayer{background}%
+ \node[umlcd style,draw,inner sep=0.5cm,fit=\pgfumlcd@PackageFit] (\pgfumlcd@PackageName) {};%
+ \node[umlcd style,draw,outer ysep=-0.5,anchor=south west] (\pgfumlcd@PackageName caption) at
+ (\pgfumlcd@PackageName.north west) {\pgfumlcd@PackageName};%
+ \endpgfonlayer
+}
+
+\def\switchUmlcdSchool{%
+ \pgfumlcd@ifschool{%
+ \tikzset{umlcd style school/.style={}}%
+ \pgfumlcd@schoolfalse
+ }{%
+ \tikzset{umlcd style school/.style = {rounded corners}}%
+ \pgfumlcd@schooltrue
+ }%
+}
+
+\pgfdeclareshape{umlcdnote}{%
+ \inheritsavedanchors[from=rectangle]% this is nearly a rectangle
+ \inheritanchorborder[from=rectangle]%
+ \inheritanchor[from=rectangle]{center}%
+ \inheritanchor[from=rectangle]{north}%
+ \inheritanchor[from=rectangle]{south}%
+ \inheritanchor[from=rectangle]{west}%
+ \inheritanchor[from=rectangle]{east}%
+ % ... and possibly more
+ \backgroundpath{% this is new
+ % store lower right in xa/ya and upper right in xb/yb
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ % compute corner of flipped page
+ \pgf@xc=\pgf@xb \advance\pgf@xc by-10pt % this should be a parameter
+ \pgf@yc=\pgf@yb \advance\pgf@yc by-10pt
+ % construct main path
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}%
+ \pgfpathclose
+ % add little corner
+ \pgfpathmoveto{\pgfpoint{\pgf@xc}{\pgf@yb}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}%
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}%
+ }%
+}
+
+\def\pgfumlcd@umlnote{\pgfutil@ifnextchar[{\pgfumlcd@umlnote@}{\pgfumlcd@umlnote@[]}}
+\def\pgfumlcd@umlnote@[#1]{%
+ \node[anchor=north,draw,shape=umlcdnote,text width=4cm,umlcd style,#1]%
+}
+
+\tikzaddtikzonlycommandshortcutlet{\class}{\pgfumlcd@class}
+\tikzaddtikzonlycommandshortcutlet{\endclass}{\endpgfumlcd@class}
+\tikzaddtikzonlycommandshortcutlet{\interface}{\pgfumlcd@interface}
+\tikzaddtikzonlycommandshortcutlet{\endinterface}{\endpgfumlcd@interface}
+\tikzaddtikzonlycommandshortcutlet{\abstractclass}{\pgfumlcd@abstractclass}
+\tikzaddtikzonlycommandshortcutlet{\endabstractclass}{\endpgfumlcd@abstractclass}
+\tikzaddtikzonlycommandshortcutlet{\staticclass}{\pgfumlcd@staticclass}
+\tikzaddtikzonlycommandshortcutlet{\endstaticclass}{\endpgfumlcd@staticclass}
+\tikzaddtikzonlycommandshortcutlet{\object}{\pgfumlcd@object}
+\tikzaddtikzonlycommandshortcutlet{\endobject}{\endpgfumlcd@object}
+\tikzaddtikzonlycommandshortcutlet{\classAndInterfaceCommon}{\pgfumlcd@classAndInterfaceCommon}
+\tikzaddtikzonlycommandshortcutlet{\endclassAndInterfaceCommon}{\endpgfumlcd@classAndInterfaceCommon}
+\tikzaddtikzonlycommandshortcutlet{\package}{\pgfumlcd@package}
+\tikzaddtikzonlycommandshortcutlet{\endpackage}{\endpgfumlcd@package}
+
+\tikzaddtikzonlycommandshortcutlet{\attribute}{\pgfumlcd@attribute}
+\tikzaddtikzonlycommandshortcutlet{\operation}{\pgfumlcd@operation}
+\tikzaddtikzonlycommandshortcutlet{\inherit}{\pgfumlcd@inherit}
+\tikzaddtikzonlycommandshortcutlet{\implement}{\pgfumlcd@implement}
+\tikzaddtikzonlycommandshortcutlet{\instanceOf}{\pgfumlcd@instanceOf}
+\tikzaddtikzonlycommandshortcutlet{\association}{\pgfumlcd@association}
+\tikzaddtikzonlycommandshortcutlet{\unidirectionalAssociation}{\pgfumlcd@unidirectionalAssociation}
+\tikzaddtikzonlycommandshortcutlet{\aggregation}{\pgfumlcd@aggregation}
+\tikzaddtikzonlycommandshortcutlet{\composition}{\pgfumlcd@composition}
+\tikzaddtikzonlycommandshortcutlet{\umlnote}{\pgfumlcd@umlnote}