Msc-generator Changelog

What's new in Msc-generator 7.2

Mar 3, 2022
  • gui/win: Added searchable example library to help learning the languages
  • gui: now you can open the documentation from the help
  • all: Allow specifying font languages for Linux and Mac, this helps selecting the correct font. E.g., use the l(ja) text escape to select Japanese charset
  • gui: Now the Welcome screen shows recent directories, Ctrl+N starts a new file of the current language and Ctrl+W opens the Welcome screen
  • gui: now we save dirty documents every second and offer recovering them in the case of a crash
  • block: fix size attributes with compound values [width/height/size=A+B]
  • graph, block: fonts now can be set via the -F command-line option (-L for blocks, too)
  • cli: The -q switch will suppress the ‘Success.’ prompt on success, besides the progress. -Pno will only suppress progress reports, but will print ‘Success.’
  • Moved the project to GitLab and setting up automated tests. These caught many hidden errors and bugs, which we have fixed

New in Msc-generator 7.1 (Nov 26, 2021)

  • gui: Added the command-line GUI for Linux, MaxOS and Windows
  • Use msc-gen --gui to start
  • gui: Editor search and replace (7.1)
  • gui: Element controls added to collapse/expand group entities and boxes (signalling charts) and clusters (graphs). (7.1)
  • gui: Added autosave (turned on by default) (7.1)
  • drop files to the GUI to open them (7.1)
  • gui: Smooth window resize on Windows (7.1)
  • gui: File selection dialog box with colors and bold font (7.1)
  • gui: F5 also compiles (7.1, thanks Pontus)
  • gui: Backspace now works in hint mode (7.1, thanks Gabor)
  • maggot: deprecated and removed
  • A homebrew package now exists for MacOS
  • block: The auto_create chart option has been renamed to pedantic (to be in line with other languages). Settings of ‘pedantic’ in the GUI now take effect for block diagrams, too. (7.1)
  • graph: cluster labels now display correctly (7.1)
  • Transparency is now supported for PNG images, as well. As part of this, the default background is set to white in all languages and you explicitly need to use background.color=none; for signalling charts and block diagrams or bgcolor=none; for graphs to achieve transparent background. (7.1)

New in Msc-generator 6.5.0 (Sep 3, 2021)

  • block: added manhattan routing

New in Msc-generator 6.4.5 (Jul 22, 2021)

  • GUI: Added the ability to rename entity, block and node names (in signalling charts, block diagrams and graphs, respectively) in the internal editor. This does not change the label of these elements as visible in the compiled graphics, but the ID used to refer to them in the source text.
  • GUI: Fixed Bug #29, #36 about Copying/Pasting Unicode characters (Thanks Martijn and Jean-Luc!)
  • GUI: Fixed something related to FR #30 (Thanks Sebastian!)
  • Block: Fixed Bug #30 and improved block layout speed of Bug #37 (Thanks Martijn and Ben!)
  • All: Define and use empty styles all you like.
  • Block: Added def.db shape to the design lib.
  • Signalling: Allow shape.size=auto for entities (6.4.5, Thanks Attila!)
  • Signalling: fix: labels with empty first lines (6.4.5, Thanks Attila!)

New in Msc-generator 6.4.4 (Jul 7, 2021)

  • What is new in 6.4.4 (Compared to 6.3.13):
  • GUI: Added the ability to rename entity, block and node names (in signalling charts, block diagrams and graphs, respectively) in the internal editor. This does not change the label of these elements as visible in the compiled graphics, but the ID used to refer to them in the source text
  • GUI: Fixed Bug #29, #36 about Copying/Pasting Unicode characters (Thanks Martijn and Jean-Luc!)
  • GUI: Fixed something related to FR #30 (Thanks Sebastian!)
  • block: Fixed Bug #30 and improved block layout speed of Bug #37 (Thanks Martijn and Ben!)

New in Msc-generator 6.3.7 (Nov 20, 2018)

  • With Msc-generator you can generate various from tex-tual descriptions. This allows easy editing and over-view and is a viable alternative to mouse-based tools, such as Visio or PowerPoint. Currently three types of charts are supported: signaling charts, graphs and ex-perimental block diagrams. It is expected that more types of charts (flowcharts, class diagrams and wave-form diagrams, for example) will be added.
  • The language used by Msc-generator for graphs is the DOT language of the graphviz tool. The language for signaling charts and block diagrams resembles DOT and' is documented in detail in the accompanying pdf file or Windows help.
  • Msc-generator works both as a command-line tool and as an OLE server application (enabling you to embed charts to presentations or documents and to edit them by double-clicking on them). A Linux port is also maintained for the command-line part. There is a sim-plistic GUI (called maggot)

New in Msc-generator 6.3.6 (Nov 7, 2018)

  • GUI, all: fixed bugs #27
  • GUI: fixed bug #33
  • block: fixed feature requests #25-#27

New in Msc-generator 6.3.2 (Jan 9, 2018)

  • GUI, all: fixed bugs #24-25

New in Msc-generator 6.3 (Jan 3, 2018)

  • GUI: Added the ability to embed chart text into PNG files, as maggot does. Now you can Open and Save as PNG files.
  • maggot: Added the ability to work with all chart types supported by Msc-generator.
  • maggot: Added Ctrl+Space auto-completion and hinting.
  • maggot: Added TAB smart indenting and auto-indenting.
  • all: Hinting now avoid erroneously expanding a hint when any identifier is acceptable.

New in Msc-generator 6.2 RC 2 (Dec 19, 2017)

  • block: Added automatic mechanisms to prevent arrows/lines that start/end at the same block overlap from one another.
  • block: Added the ability to specify arrow direction for coordinates.
  • block: Now hints are provided for ports of shapes defined in the main file (and not just in the design lib).
  • GUI: Added option to remove line numbering
  • GUI: Added option to highlight the current line. Now you can also select full lines by clicking between the line number and the line.
  • backend: lot of tedious improvements to the contour library
  • Fixed bugs #16-#23

New in Msc-generator 6.1 (Nov 4, 2017)

  • block: Modified defaults. Default margin and internal margin is now 10 pixels (in- stead of 2). (The internal margin of shapes and boxes containing just labels defaults to zero.) content_margin is set to no by default, thus the margin of blocks inside a container is not considered when calculating the size of the container, just to space them to one another.
  • Default arrow routing is curvy not polygon. Lines will have the default routing of straight (crossing any block in the way). Default arrow distance from blocks is now
  • 5. When specifying a port and/or a direction, the arrow goes 10 pixels away from the block in the direction specified.
  • The default label is now "*" which will substitute to the name of the block (if any).
  • block: Added horizontal and vertical arrow routing methods.
  • block: Modified alignment attributes. The top, bottom, left, right attributes (and attribute values) now refer to the visible side of the block and not the outer margin as before. Consequently the vtop, vbottom, vleft, vright attributes and attribute values (which so far referred to the visible sides) are removed and the mtop, mbottom, mleft, mright are introduced, which refer to the outer margin. Also, so far if you wanted to align to the upper fifth of the visible part of, say block A (ignoring outer margin) you had to say center=A@v20%, now you need to say center=A@20%. If you want to align to the upper fifth between the top and bottom margin, now just say center=A@m20%. This change is, because I expect people to want to align the visible parts of blocks, and not to something invisible (a margin) around them.
  • block: Now the language allows changing the attributes of a block after definition. Just type the name of the block followed by attributes (possibly a colon label). You can also do this for several blocks in one go by listing them with commas: a, b [line.color=red]; This is useful if you want to specify the same attribute to many blocks and don’t want to repeat them (nor want to change the running style via use).
  • block: You can also automatically create blocks that are mentioned in an arrow, line or an attribute update construct as above. So you no longer have to say box a; box b; a->b; You can simply say a->b;. This behavior can be disabled by setting the auto_create chart option to no.
  • block: Added ports to blocks. Ports are a specific location for the shape, which can be the endpoint for lines and arrows. Each shape can define its own ports using the P command in defshape. Referring to the port is via the @ symbol, like block1@port1-
  • block2@port2; For boxes, the ports top, topleft, bottom, bottomright, etc. are defined. For any block, you can also use a compass point n, ne, e, se, s, sw, w, nw or indicate a number [-360..360], which is interpreted in degrees clockwise, with 0 pointing to north (=top). The resulting port will be where the line from the center of the block in the direction specified crosses the outer contour of the block. (Each port can also specify the direction (see below), if you use a compass point or a number, that will also be the direction the arrow leaves the block.) If you specify no port, just a block, the arrow will start from the centerpoint of the block (plus modifiers see below).
  • block: Added directions to ports. After specifying the port, you can also specify what direction the arrow or line shall leave or arrive to the block. The direction is in degrees same as above. So, block@left@0 will start an arrow on the left of the block but upwards. You can also use the built-in compass point names n, ne, e, se, s, sw, w, nw; or perp which will make the arrow leave the block perpendicular to the contour of the
  • block. Thus box@80@perp will make the arrow leave left. Note that you can specify distance for the blocks starting or ending an arrow - it will determine, how wide an arc at the start or end of the arrow will be.
  • block: You can influence where the arrow or line actually starts or ends, by appending coordinates. Adding a +x<number> or -x<number> will shift the starting or endpoint of the arrow to the right or left (resp) by the specified number of pixels. You can also add +x<number>% or -x<number>%, which will use the width of the block to determine how much to shift. Using y instead of x you can shift vertically. For example, saying a+y5->b+y5; will make the arrow lower than the centerline of a and b (assuming a row). You can add as many such modifiers as you want (together with the number only one, see the next bullet).
  • block: You can now append a signed number to the specification of an arrow end, like a+5->b@port-10; This will make the arrow longer (positive value) or shorter (negative value). This can be specified mixed with +x and +y modifiers (see above), but is applied last. So first we determine the start and endpoints and directions using ports and +x +y modifiers and direction specifiers, then route the arrow, finally truncate or enlengthen it.
  • block: You can completely omit block names from coordinates. Thus (10,10)-(20,20) is a valid arrow. These numbers are interpreted from the inner margin
  • of the block the arrow is defined within. They also make the block auto-scale to be at least as big the coordinates specify. You can also refer to your parent, by (10%,10%)-(20%,20%) or in combination, like (10%+5,10%)->(0,0). You can also specify the m letter in front of these, in this case the coordinate is interpreted by ignoring the inner margin. For blocks this is the inner side of the block line, for shapes this is the box specified by the T command.
  • block: added container_shape default style for shapes having content. Also added refinement styles for solid, dashed, dotted and double-lined lines (so that we can make them straight routed by default). These goven how a==b; will look like, for example.
  • block: the draw_before and draw_after attributes are now mutually exclusive. Setting one will silently clear the other. They can also be part of styles and can be used in use commands to make all subsequent arrows or blocks be drawn before or after another block (or set of blocks).
  • backend: Added the text.gap attribute setting all four text margins to the same value.
  • GUI: Added the Technical Info checkbox to perferences. Setting it will make the
  • GUI show compilation statistics and diagnostic.
  • commandline: The same Technical Info is available via the -TI switch.

New in Msc-generator 6.1 Beta 2 (Oct 27, 2017)

  • block: Modified defaults: default margin and internal margin is now 10 (instead of 2), content_margin is set to no by default, thus the margin of blocks inside a container is not considered, when calculating the size of the container, just to space them to one another. (The internal margin of shapes and boxes containing just labels defaults to zero.) Default arrow distance is now 5. When an arrow starts or ends at a block (and not a coordinate) and has an arrow direction specified then distance for the starting or ending block will be 10 by default (to be equal to the default margin). Default arrow routing is ‘curvy’ not ‘polygon’. Lines will have the default routing of ‘straight’ (crossing any block in the way). The default label is now “*” which will substitute to the name of the block (if any).
  • block: Modified alignment attributes. The ‘top’, ‘bottom’, ‘left’, ‘right’ attributes (and attribute values) now refer to the visible side of the block and not the outer margin as before. Consequently the ‘vtop’, ‘vbottom’, ‘vleft’, ‘vright’ attributes and attribute values (which so far referred to the visible sides) are removed and the ‘mtop’, ‘mbottom’, ‘mleft’, ‘mright’ are introduced, which refer to the outer margin. Also, so far if you wanted to align to the upper fifth of the visible part of, say block ‘A’ (ignoring outer margin) you had to say ‘center=A@v20%’, now you need to say ‘center=A@20%’. If you want to align to the upper fifth between the top and bottom margin, now just say ‘center=A@m20%’. This change is, because I expect people to want to align the visible parts of blocks, and not to something invisible (a margin) around them.
  • block: Now the language allows changing the attributes of a block after definition. Just type the name of the block followed by attributes (possibly a colon label). You can also do this for several blocks in one go by listing them with commas: “a, b [line.color=red];” This is useful if you want to specify the same attribute to many blocks and don’t want to repeat them (nor want to change the running style via “use”).
  • block: You can also automatically create blocks that are mentioned in an arrow, line or an attribute update construct as above. So you no longer have to say “box a; box b; a->b;” You can simply say “a->b;”. This behavior can be disabled by setting ‘auto_create=no’. Note that previously (or with ‘auto_create=no’) you could specify an arrow (for drawing earlier) and define its blocks later. So “a->c; box c; box b; box a;” was the same as “box c; box b; box a; a->b;”, except that in the former the arrow was drawn first. If you specify the former with ‘auto_create=yes’, there will be two blocks named ‘a’ and two blocks named ‘c’ and the arrow will complain about ambiguity.
  • block: Added ports to blocks. Ports are a specific location for the shape, which can be the endpoint for lines and arrows. Each shape can define its own ports using the ‘P’ command. Referring to the port is via the ‘@’ symbol, like “block1@port1->block2@port2;” For boxes, the ports ‘top’, ‘topleft, ‘bottom’, ‘bottomright’, etc. are defined. For any block, you can also use a compass point "n","ne","e","se","s","sw","w","nw" or indicate a number [-360..360], which is interpreted in degrees clockwise, with 0 pointing to north (=top). The resulting port will be where the line from the center of the block in the direction specified crosses the outer contour of the block. (Each port can also specify the direction (see below), if you use a compass point or a number, that will also be the direction the arrow leaves the block.) If you specify no port, just a block, the arrow will start from the centerpoint of the block (plus modifiers see below).
  • block: Added directions to ports. After specifying the port, you can also specify what direction the arrow or line shall leave or arrive to the block. The direction is in degrees same as above. So, block@left@0 will start an arrow on the left of the block but upwards. You can also use the built-in compass point names "n","ne","e","se","s","sw","w","nw"; or “perp” which will make the arrow leave the block perpendicular to the contour of the block. Thus box@80@perp will make the arrow leave left. Note that you can specify distance for the blocks starting or ending an arrow – it will determine, how wide an arc at the start or end of the arrow will be. Experiment with “a@n->b@n [distance=a@5, distance=b@10]” by changing the numbers.
  • block: You can influence where the arrow or line actually starts or ends, by appending coordinates. Adding a +x<number> or -x<number> will shift the starting or endpoint of the arrow to the right or left (resp) by the specified number of pixels. You can also add +x<number>% or -x<number>%, which will use the width of the block to determine how much to shift. Using ‘y’ instead of ‘x’ you can shift vertically. For example, saying a+y5->b+y5; will make the arrow lower than the centerline of a and b (assuming a row). You can add as many such modifiers as you want (together with the number only one, see the next bullet).
  • block: You can now append a signed number to the specification of an arrow end, like a+5->b@port-10; This will make the arrow longer (lipositive value) or shorter (negative value). This can be specified mixed with +x and +y modifiers (see above), but is applied last. So first we determine the start and endpoints and directions using ports and +x +y modifiers and direction specifiers, then route the arrow, finally truncate or enlengthen it.
  • block: You can completely omit block names from coordinates. Thus (10,10)->(20,20) is a valid arrow. These numbers are interpreted from the inner margin of the block the arrow is defined within. They also make the block auto-scale to be at least as big the coordinates specify. You can also refer to your parent, by (10%,10%)->(20%,20%) or in combination, like (10%+5,10%)->(0,0). You can also specify the ‘m’ letter in front of these, in this case the coordinate is interpreted by ignoring the inner margin. For blocks this is the inner side of the block line, for shapes this is the box specified by the ‘T’ command.
  • block: added ‘container_shape’ default style for shapes having content. Also added ‘--', ‘++, ‘..’, ‘==’ refinement styles for solid, dashed, dotted and double-lined lines (so that we can make them ‘straight’ routed by default). These goven how a==b; will look like, for example.
  • block: the ‘draw_before’ and ‘draw_after’ attributes are now mutually exclusive. Setting one will silently clear the other. They can also be part of styles and can be used in ‘use’ commands to make all subsequent arrows or blocks be drawn before or after another block (or set of blocks).
  • backend: Added the text.gap attribute setting all four text margins to the same value.

New in Msc-generator 6.0 RC 1 (Sep 1, 2017)

  • block: Added Block Diagrams. This is an new language that will be worked on more. Please check it out and provide feedback
  • maggot: Added a simple GUI for Linux, called ‘maggot’. See Ubuntu install instructions below
  • GUI: Added line numbering to the internal editor
  • all: Added variable support for all languages
  • all: Fixed an issue with nested if then else statements (Bug #11, Thanks Seth)
  • graph: Fixed handling escape characters in labels (Thanks, Martijn)
  • graph: “edge [attr=value]” instructions now also change all edge refinement styles (to mimic graphviz behaviour better)
  • GUI: small fixes with indenting and save

New in Msc-generator 5.5 (Apr 6, 2017)

  • What is new in 5.5:
  • command-line: Added --tei-mode option for text editor integration. Hopefully this will result in a Linux GUI.
  • doc: added table of contents to the PDF doc (Feature req #7)
  • signalling: Use solo 'show;', 'hide;', 'activate;', 'deactivate;' commands applying to all entities defined so far (Feature req #8)
  • signalling: Added block comments (/*...*/) and C++ style line comments (//) (Feature req #9)

New in Msc-generator 5.3.5 (Sep 29, 2016)

  • signaling: Added two new kinds of symbols: cross and shape. The latter allows showing any user-defined shape at any location.
  • signaling: Added a simpler symbol syntax. Simply saying ‘symbol arc at b+’ will place a circle left of the entity line of entity ‘b’.
  • backend: Added the S(shape|height|fillcolor) text escape sequence to insert arbitrary shapes into any label. This works for both signaling charts and graphwiz graphs. Height is optional and defaults to font height, fillcolor is also optional and defaults to transparent. E.g., saying
  • a->b: This is me: S(def.actor);” will place a small human at the end.
  • signaling: Adding the “large=yes” attribute to group entities will draw a shaded box behind the child entities at the full length of the chart instead of a group entity heading.
  • signaling: It is now possible to place a marker at the centerline of an arrow or box. Use the “centerline” attribute of the mark command placed after the arrow in question, like: “mark marker_name [centerline=yes];”
  • signalling: Added two new arrow sizes (both smaller than tiny): ‘epsilon’ and ‘spot’ (5.3.5)
  • signalling: Added graphviz-style arrowhead definitions. Like ‘arrow.gvtype=redtinydotsmallbluenormal’. (5.3.5)
  • signalling: Fixed large entity drawing (bug #4, 5.3.2)
  • signalling: Fixed referenced arrow’s number is not showing (bug #7, 5.3.3)
  • graph: Added the “newrank=true” graph attribute, triggering the new (and much better dot layout algorithm of graphviz).
  • graph: Now you can specify subgraph attributes at the subgraph header, like: “subgraph cluster_one [label=”one”] {…}” instead of specifying them inside the curly braces. You can also use colon labels.
  • graph: Added the “cluster” keyword. Now instead of “subgraph cluster_one::one” you can simply say “cluser one {…}”
  • graph: fixed Bug#3: Some collapsed clusters cannot be re-opened (3.5.6,)
  • backend: Chart specific paremters (like –prevent-mscgen) are now interpreted correctly (5.3.1)
  • GUI: The GUI now warns if the opened file changes on disk during editing.
  • GUI: Box collapse with signalling charts now work much better (5.3.1)
  • GUI: Fixed AutoSplit and window splitting in general (bug #6, 5.3.2)
  • installer: re-added the Visual C++ redistributable from the install, since the update of Visual Studio did not fix the bug (see known bugs below).

New in Msc-generator 5.2 (Sep 19, 2016)

  • signalling: Added the ability to start/end arrows at other places than an entity. Use a->|; or |->b; to start/end just before or after an entity. For a more elaborate specification use “a-> end after c +10;” or “->d start before b +10;”.
  • signalling: Added the ability to concatenate arrows via the join keyword. Joined arrows are laid out vertically aligned by their center line. Joining allows you to specify different labels and arrowheads for each segment of a join series; or even joining a block arrow to a regular one. It also allows you multi-segment arrows where the message does not follow entity ordering, but zig-zags between entities.
  • signalling: It is also possible to join arrows and boxes, in which case arrows connect to the left or right side of boxes.
  • installer: removed the Visual C++ redistributable from the install, since an update of Visual Studio now gives hope that it is no longer needed
  • installer: removed the extension .msc from file associations of the GUI. This is because it conflicts with Microsoft Common Management Console documents having the same extension. (In all other aspects support for .msc extended files as signaling charts is retained.)

New in Msc-generator 5.1 (Sep 19, 2016)

  • backend: fixed: SVG cannot render mesh gradients.
  • signalling: fixed: "a--b: {a -> b;};" is uncollapsable.
  • signalling: fixed really long note with pointed tip
  • signalling: fixed: aline is not effective.
  • GUI: Added document autosave and recovery. Charts are now saved every 5 seconds. In case of a crash, the program is restarted and you can recover your work.
  • GUI: Revamped tracking mode to be able to select multiple elements simultaneously. You can also use F4 in the internal editor to highlight elements under the cursor. Good when discussing a chart.
  • GUI: Added font selector for internal editor to the ribbon
  • GUI: fixed: internal editor resets zoom when undoing.
  • GUI: Change hint popup text size with editor font and zoom
  • GUI: Added a text bubble when closing internal editor to explain how to turn it back on. I got so many requests on how to re-open the internal editor…
  • GUI: Added support for high-resolution screens
  • GUI: Added context menu to internal editor (via right-click)

New in Msc-generator 5.0.6 (Jan 25, 2016)

  • KNOWN BUG: Many people reported that after installing Msc-generator on windows the “api-ms-win-crt-runtime-l1-1-0.dll” is missing and the program does not start. As a workaround I am now supplying an EXE installer, which installs VC redistributable before Msc-generator. Sometimes it helps.

New in Msc-generator 5.0.0 (Jan 25, 2016)

  • Introduced support for multiple types of charts. Msc-genertor now supports graphviz graphs in addition to signaling charts. This is especially useful on Windows, where graphs can now be included as OLE objects in documents. On Linux, one could consider using Msc-generator for one of the graph extensions below.
  • From now on changes, additions and bug descriptions will indicate which component of Msc-generator is impacted.
  • Graph:
  • Added shadows and double/triple line support, not existing in graphviz (neither do the features below).
  • You can now specify labels via the double-colon syntax, while using the text formatting escapes of signaling charts, such as
  • “node:: label in \bbold;”
  • (Formatting escapes do not work with nodes of shape “record”.)
  • Added graph designs and collapse/expand support on the GUI
  • Added the ability to define and use styles
  • Added new edge symbols, like “=>”, “->>” or “>>”. Also added reverse and bidirectional versions. Similar to signaling charts you can redefine what these mean in style.
  • Setting “pedantic=false” (default now) will suppress errors when mixing directed and undirected graphs and edges.
  • Signalling:
  • "fill.gradient" can now take a number in degrees, to have linear gradients in arbitrary angles.
  • Added the ability to draw elements before drawing the background. Use draw_time=before_background. This is useful for partially transparent or partially covering backgrounds.
  • GUI:
  • Added document auto save and recovery. Charts are now saved every 5 seconds. In case of a crash, the program is restarted and you can recover your work.
  • Many fixes and upgrades to the coloring and command-line engines.
  • Note that 5.0 OLE embedded objects cannot be read by prior versions at all, but of course this version (5.0) can read all objects embedded by all previous versions.

New in Msc-generator 4.6 RC 2 (May 12, 2015)

  • Added international support. Msc-generator now understands UTF-8 and UTF-16 input. Element labels can contain non-ASCII characters, which are rendered on output graphics. In addition, entity, color and style names can also contain non-ASCII characters.
  • Internationalization support has also been added to the Windows GUI. The internal editor can work with international characters, including coloring and hints. Since not all Windows fonts can display all international characters, a font selector is added to preferences. Since this made the number of preferences large, they have been split to two ribbon tabs.
  • Upgraded to cairo (the 2D library behind Msc-generator) v1.14.2. In theory this should make Msc-generator faster and more stable.

New in Msc-generator 3.7.4 Beta (Nov 26, 2013)

  • Added the ability to import graphical shapes for entity headings. A new file format is defined to describe these shapes (see ‘default.shape’ in the program directory) and the ‘shape’ and ‘shape.size’ attribute is added to entities, to select a particular shape.
  • Added new vertical constructs: braces, ranges and more as an additional way to group or annotate a set of elements or to show the timespan of a process. These also include ‘pointers’ which are useful to show timers.
  • Verticals now may have horizontally typeset text (which is not rotated by 90 degrees). Simply use the ‘side=end’ attribute. For such horizontal labels word wrapping can also be applied, but then the width of the available space needs to be specified via the ‘text.width’ attribute.
  • Reworked spacing for verticals. Now if you only refer to markers in a vertical that are specified earlier than the vertical, then verticals space and get spaced correctly.
  • Reworked how the user can add additional designs and shapes. Now Msc-generator searches a user-specific folder for files of ‘*.shape’ and ‘*.signalling’ and reads them at startup. On Windows, this folder is the “%AppData%\Msc-generator\” (the roaming version), on Linux it is the “~/.msc-genrc” directory (or something pointed to by MSC_GEN_RC).

New in Msc-generator 3.7 (Nov 12, 2013)

  • Added the ability to express message loss. Simply add an asterisk (‘*’) at the point where a message is lost such as 'a->b->*c;'.
  • Added a new keyword “overlap” which is similar to “parallel” and can be prepended to any arrow, box, separator and so on. It will result in subsequent elements laid out potentially overlapping with the element marked with “overlap”. A prime use is crossing arrows.
  • Added a new attribute “slant_depth” to arrows as an alternative way to express slanted arrows. Instead of the angle (via the “angle” attribute) one can specify how many pixels shall the end of the arrow be lower than its start.
  • Added overlay colors, which at assignment do not replace an existing color, but are combined with it through overlaying. For example, 'a->b [color=++white,128]' makes everything a bit whiter.
  • Color definitions no longer have to be quoted, so this is now valid 'a->b [color=blue+50]'.
  • Making the side of the chart auto-size, so even with fixed horizontal scaling nothing gets outside on the left and right.
  • Smaller fixes.

New in Msc-generator 3.6.4 (Nov 8, 2013)

  • Added the ability to express message loss. Simply add an asterisk (‘*’) at the point where a message is lost such as 'a->b->*c;'.
  • Added a new keyword “overlap” which is similar to “parallel” and can be prepended to any arrow, box, separator and so on. It will result in subsequent elements laid out potentially overlapping with the element marked with “overlap”. A prime use is crossing arrows.
  • Added a new attribute “slant_depth” to arrows as an alternative way to express slanted arrows. Instead of the angle (via the “angle” attribute) one can specify how many pixels shall the end of the arrow be lower than its start.
  • Added overlay colors, which at assignment do not replace an existing color, but are combined with it through overlaying. For example, 'a->b [color=++white,128]' makes everything a bit whiter.
  • Color definitions no longer have to be quoted, so this is now valid 'a->b [color=blue+50]'.
  • Making the side of the chart auto-size, so even with fixed horizontal scaling nothing gets outside on the left and right.
  • Smaller fixes.

New in Msc-generator 3.6.3 (Nov 5, 2013)

  • Added the ability to express message loss. Simply add an asterisk (‘*’) at the point where a message is lost such as 'a->b->*c;'.
  • Added overlay colors, which at assignment do not replace an existing color, but are combined with it through overlaying. For example, 'a->b [color=++white,128]' makes everything a bit whiter.
  • Color definitions no longer have to be quoted, so this is now valid 'a->b [color=blue+50]'.
  • Making the side of the chart auto-size, so even with fixed horizontal scaling nothing gets outside on the left and right.
  • Smaller fixes.

New in Msc-generator 3.6 (Nov 5, 2013)

  • Added support to drawing charts on standard paper sizes. This includes the generation of multi-page PDF files if the chart contains multiple pages. On the command line -p turns this mode on and specifies paper size, -m can be used to set margins, while -s can be used to adjust the size of the chart on the page. Use va and -ha to set the vertical and horizontal alignment to up/center/down or left/center/right, resp. (Thanks Michael.) On the Windows GUI these parameters are applied at printing and can be set in Print Preview.
  • Added support for automatic pagination. On the command line it can be used in combination with the -p option and can be invoked with -a. Use -ah to also insert an automatic heading at the top of each page. (No heading is added for manually inserted page breaks (using the newpage; command).) On the GUI two new checkboxes are available to turn on these features.
  • Added a new chart option auto_heading which can take yes or no and defaults to no. Setting it yes will automatically add a heading after manually inserted page breaks. These headings are visible only if the chart is printed per page. If all of it is viewed, they are not visible. (This behavior is in line with how automatically inserted page breaks behave. Having this behavior for manual page breaks allow seamless mix of manual and automatic page breaks.) Individual newpage commands also take this as an attribute and can be used to override the chart option. The chart option can also be made part of a chart design.
  • Added support for word wrapping. Up to v3.5 the width of labels on arrows or boxes were determined from the word wrapping specified by the user in the input file. Lines were broken where the user has broken lines and at '\n' escapes. If word wrapping is on (governed by the text.wrap attribute for each label, or by the same chart option globally), user line breaks are ignored and labels attempt to fill the available space. ('\n' line breaks are still honoured.) This is especially useful with fixed horizontal scaling (and not with hscale=auto). Since notes have no inherent size even with fixed horizontal scaling, you can specify a width for a word-wrapped note using the width attribute.
  • Added endnotes. These are comments that are displayed at the end of the chart, not at the side. You can either use the endnote command or specify the side=end attribute for a comment.
  • Added the comment.text and comment.side chart options, they set the text style and position of comments globally and are equal to redefining the comment style.
  • Reworked the layout algorithm for parallel blocks. Now the nudge; command is no longer needed (see the example in the tutorial). You can return to the old algorithm by setting the classic_parallel_layout chart option to yes.
  • Changed the behavior of “activate” and “deactivate” keywords (used to activate and deactivate entities). If placed right after an arrow, they will take effect at the tip of the arrow, not below it. If you want to change status after the arrow, use the [activate=yes/no] attribute of the entities instead of the keywords.
  • Added options to the GUI for automatic pagination. They appear on the last panel of the ribbon. The scale option is needed, since if the scale is larger, less of the chart fits to one page and automatic page breaks fall to different places. The options also appear during print preview.
  • Added a progress bar to the GUI and made both chart compilation and color syntax parsing parallel (the latter only to some extent). This (hopefully) made the tool much more responsive for large charts.
  • Added a -i command-line option and “ismap” as an output format (generating an empty server-side image map) for mscgen and Doxygen compatibility. For Doxygen to use msc-generator, simply rename msc-gen{.exe} to mscgen{.exe} and tell its location to Doxygen. Then you can use the full msc-generator syntax in Doxygen’s “\msc” sections.
  • Rearranged the internals to reduce memory consumption significantly and also for some speed increases.
  • Fixed a bug: Element references (\r escape) were not working correctly.
  • Fixed a bug: Empty boxes without entities specified, no longer span outside the chart
  • Fixed a bug: Quoted text parsing failed with escaped quotation marks.
  • Fixed many other bugs, from various reports.

New in Msc-generator 3.5 (May 3, 2012)

  • Now you can annotate the chart using the ‘note’ and ‘comment’ commands.
  • place a floating callout onto the chart, whereas comments are listed on the side.
  • Added the ‘title’ and ‘subtitle’ commands to enable headings on charts.
  • Introduced the notion of full designs and partial designs. Added the ‘msc+=’ option to add a partial design. Now it is allowed to set the chart background in a chart design.
  • Also added a few new designs.
  • Added the ability to refer to other elements in labels. First name an element using the ‘refname’ attribute (use an arbitrary string) then use the ‘\r(name)’ escape in a label to insert the number of the element. If the named element has no label or number, nothing will be inserted. Note that you cannot name an entity like this.
  • Several bugfixes in layout and drawing engines.

New in Msc-generator 3.4.9 (Nov 9, 2011)

  • Updated the Windows user interface to use a ribbon. I believe this takes a bit of time to get used to but then is more comfortable.
  • Removed the ability to do in-place OLE activation. This was ugly anyway.
  • Added the ability to link to charts, in addition to embedding them in container documents.
  • A suspected bug in Word 2003 prevents linking to a chart embedded in a Word document.
  • Added new entity attribute ‘active’ that allows to draw entity bars instead of just lines. The fill of the bar can be set via the ‘vfill’ entity attribute.
  • Added ‘hspace’ command, allowing to require horizontal space between two (not necessarily
  • neighbouring) entities, when scaling is set to automatic via ‘hscale=auto;’.
  • Added ‘vspace’ command, allowing to insert arbitraty vertical space.
  • Added some limited ability to draw onto the chart canvas. Right now circles (ellipses) and rectangles can be drawn. See Section 5.13 [Free Drawing], page 62 for details.
  • Added the ‘angle’ attribute to arrows and block arrows, which will make the arrow
  • slanted (downwards) by the degrees specified. You can also use the ‘angle’ chart option
  • to set a default for all arrows thereafter.
  • Several bugfixes in layout and drawing engines.