-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstate.tex
255 lines (197 loc) · 5.94 KB
/
state.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
% ========================================================================
% PlantUML : a free UML diagram generator
% ========================================================================
%
% (C) Copyright 2009, Arnaud Roques
%
% Project Info: http://plantuml.sourceforge.net
%
% This file is part of PlantUML.
%
% PlantUML 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.
%
% PlantUML 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 Lesser General Public
% License for more details.
%
% You should have received a copy of the GNU General Public
% License along with this library; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
% USA.
%
% [Java is a trademark or registered trademark of Sun Microsystems, Inc.
% in the United States and other countries.]
%
% Original Author: Arnaud Roques
%
\section{State Diagram}
% ========================================================================
\subsection{Simple State}
\begin{description}
\item You can use \texttt{[*]} for the starting point and ending point of the
state diagram.
\item Use \texttt{-->} for arrows.
\end{description}
\begin{lstlisting}
@startuml
[*] --> State1
State1 --> [*]
State1 : this is a string
State1 : this is another string
State1 -> State2
State2 --> [*]
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=60mm]{state.png}
\end{center}
% ========================================================================
\newpage \subsection{Composite state}
A state can also be composite. You have to define it using the \texttt{state}
keywords and brackets.
\begin{lstlisting}
@startuml
[*] --> NotShooting
state NotShooting {
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
state Configuring {
[*] --> NewValueSelection
NewValueSelection --> NewValuePreview : EvNewValue
NewValuePreview --> NewValueSelection : EvNewValueRejected
NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
}
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=80mm]{state_001.png}
\end{center}
% ========================================================================
\newpage \subsection{Long name}
You can also use the \texttt{state} keyword to use long description for states.
\begin{lstlisting}
@startuml
[*] -> State1
State1 --> State2 : Succeeded
State1 --> [*] : Aborted
State2 --> State3 : Succeeded
State2 --> [*] : Aborted
state State3 {
state "Accumulate Enough Data\nLong State Name" as long1
long1 : Just a test
[*] --> long1
long1 --> long1 : New Data
long1 --> ProcessData : Enough Data
}
State3 --> State3 : Failed
State3 --> [*] : Succeeded / Save Result
State3 --> [*] : Aborted
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=110mm]{state_002.png}
\end{center}
% ========================================================================
\newpage \subsection{Concurrent state}
You can define concurrent state into a composite state using the "\texttt{--}"
symbol as separator.
\begin{lstlisting}
@startuml
[*] --> Active
state Active {
[*] -> NumLockOff
NumLockOff --> NumLockOn : EvNumLockPressed
NumLockOn --> NumLockOff : EvNumLockPressed
--
[*] -> CapsLockOff
CapsLockOff --> CapsLockOn : EvCapsLockPressed
CapsLockOn --> CapsLockOff : EvCapsLockPressed
--
[*] -> ScrollLockOff
ScrollLockOff --> ScrollLockOn : EvCapsLockPressed
ScrollLockOn --> ScrollLockOff : EvCapsLockPressed
}
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=150mm]{state_003.png}
\end{center}
% ========================================================================
\newpage \subsection{Arrow direction}
You can use \texttt{->} for horizontal arrows. It is possible to force arrow's
direction using the following syntax:
\begin{itemize}
\item \texttt{-down->} (default arrow)
\item \texttt{-right->} or \texttt{->}
\item \texttt{-left->}
\item \texttt{-up->}
\end{itemize}
\begin{lstlisting}
@startuml
[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=50mm]{state_004.png}
\end{center}
You can shorten the arrow by using only the first character of the direction
(for example, \texttt{-d-} instead of \texttt{-down-}) or the two first
characters (\texttt{-do-}).
Please note that you should not abuse this functionnality : \textit{GraphViz}
gives usually good results without tweaking.
% ========================================================================
\newpage \subsection{Note}
You can alse define notes using:
\begin{itemize}
\item \texttt{note left of},
\item \texttt{note right of},
\item \texttt{note top of},
\item \texttt{note bottom of}
\end{itemize}
keywords. You can also define notes on several lines.
\begin{lstlisting}
@startuml
[*] --> Active
Active --> Inactive
note left of Active : this is a short\nnote
note right of Inactive
A note can also
be defined on
several lines
end note
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=90mm]{state_005.png}
\end{center}
% ========================================================================
\newpage \subsection{More in notes}
You can put notes on composite states.
\begin{lstlisting}
@startuml
[*] --> NotShooting
state "Not Shooting State" as NotShooting {
state "Idle mode" as Idle
state "Configuring mode" as Configuring
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
note right of NotShooting : This is a note on a composite state
@enduml
\end{lstlisting}
\begin{center}
\includegraphics[width=90mm]{state_006.png}
\end{center}