# Milsymbol Documentation ## Installing You can download the latest release directly from GitHub if you want to: https://github.com/spatialillusions/milsymbol/releases/latest You can also get milsymbol using npm: ``` npm install milsymbol --save ``` AMD, CommonJS, and vanilla environments are supported. The module is always named 'milsymbol' and in vanilla, a 'ms' global is exported: ```html ``` In a framework like [Dojo](https://dojotoolkit.org) you can load milsymbol like this: ```html ``` This way of loading milsymbol makes it possible to use Dojo from an external source, like js.arcgis.com. If you only are using it with local sources or if you are uploading it to ArcGIS Web AppBuilder, you can rebuild it by running `npm run build-amd`, and now you can `require(["app/milsymbol"].....` if _milsymbol.js_ is placed in your app folder. See more about building under [Building milsymbol](#building-milsymbol). # Creating military unit symbols Each symbol created with milsymbol is its own object and the properties of the object can be updated or added after that the symbol object is created. The symbol object also has methods to provide the symbol in different formats and to provide information about the created symbol. All functionality in milsymbol is normally found under the `ms` namespace, but if you have imported milsymbol to another variable, you will have to use that instead of `ms`. ## ms.Symbol(_arg1, arg2 ... argN_) Initiates a new symbol object, where arg1-argN are options objects. If you provide an argument that isn't an object we will assume that it is the SIDC for the symbol. Even if options can be provided or updated after the symbol object is created, the performance will be better if you provide them directly when you create the symbol, or to provide no arguments at all, this is because every time you update some options the symbol will automatically be updated. ```javascript var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 }); ``` Once you have initiated your symbol, you can use different methods to request rendering of the symbol or get information about the symbol. It is also possible to chain methods directly to the initiation: ```javascript var symbol = new ms.Symbol("SFG-UCI----D", { size: 30 }).asSVG(); ``` **General options** It is possible to add any custom options to your options object as well as the options listed below. | Option | Type | Default | Description | | ------ | ------ | ------- | ----------------------- | | sidc | String | '' | The SIDC for the symbol | **Modifier options** The following options are modifiers, text or graphical, that are defined in the standard documents. | Option | Type | Default | Description | | --------------------- | ------ | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | additionalInformation | String | '' | A text modifier for units, equipment, and installations; content is implementation specific.
**Field H** _20 Characters_ | | altitudeDepth | String | '' | A text modifier for units, equipment, and installations, that displays either altitude flight level, depth for submerged objects; or height of equipment or structures on the ground.
**Field X** _14 Characters_ | | combatEffectiveness | String | '' | A text modifier for units and installations that indicates unit effectiveness or installation capability.
**Field K** _5 Characters_ | | commonIdentifier | String | '' | Example: "Hawk" for Hawk SAM system.
**Field AF** | | country | String | '' | Three letter representing the country.
**Field AC** | | direction | Number | undefined | At the moment all directions should be in degrees and not in mils. Set to an undefined to remove the direction arrow.
**Field Q** | | dtg | String | '' | A text modifier for units, equipment, and installations that displays DTG format: DDHHMMSSZMONYYYY or "O/O" for on order.
**Field W** _16 Characters_ | | engagementBar | String | '' | Engagement bar text, shall be arranged as follows: A:BBB-CC.
**Field AO** | | engagementType | String | '' | Engagement bar type, should be one of the following "TARGET", "NON-TARGET", or "EXPIRED" | | equipmentTeardownTime | String | '' | Equipment teardown time in minutes.
**Field AE** | | evaluationRating | String | '' | A text modifier for units, equipment, and installations that consists of a one-letter reliability rating and a one-number credibility rating.
**Field J** _2 Characters_ | | guardedUnit | String | '' | During ballistic missile defence, some tracks are designated as guarded by a particular unit.
**Field AQ** _2 Characters_ | | headquartersElement | String | '' | Example: Tactical Operations Centre put as 'TOC'.
**Field AH** | | higherFormation | String | '' | A text modifier for units that indicates number or title of higher echelon command (corps are designated by Roman numerals).
**Field M** _21 Characters_ | | hostile | String | '' | A text modifier for equipment; letters "ENY" denote hostile symbols.
**Field N** _3 Characters_ | | iffSif | String | '' | A text modifier displaying IFF/SIF Identification modes and codes.
**Field P** _5 Characters_ | | location | String | '' | A text modifier for units, equipment, and installations that displays a symbol's location in degrees, minutes, and seconds (or in UTM or other applicable display format).
**Field Y** _19 Characters_ | | platformType | String | '' | "ELNOT" or "CENOT"
**Field AD** | | quantity | String | '' | A text modifier in an equipment symbol that identifies the number of items present.
**Field C** or **Field R** _9 Characters_ | | reinforcedReduced | String | '' | A text modifier in a unit symbol that displays (+) for reinforced, (-) for reduced, (±) reinforced and reduced.
**Field F** _3 Characters_ | | sigint | String | '' | M = Mobile, S = Static, or U = Uncertain.
**Field R2** | | specialDesignator | String | '' | Special track designators, such as Non-Real Time (NRT) and Tactically Significant (SIG) tracks, are denoted here.
**Field AR** _3 Characters_ | | signatureEquipment | String | '' | A text modifier for hostile equipment; "!" indicates detectable electronic signatures.
**Field L** _1 Character_ | | specialHeadquarters | String | '' | A text modifier for units; indicator is contained inside the frame; contains the name of the special C2 Headquarters.
**Field AA** _9 Characters_ | | speed | String | '' | A text modifier for units and equipment that displays velocity as set forth in MIL-STD-6040.
**Field Z** _8 Characters_ | | speedLeader | Number | 0 | This is the length of the speed leader in pixels, this will be independet of the size of the symbol. | | staffComments | String | '' | A text modifier for units, equipment and installations; content is implementation specific.
**Field G** _20 Characters_ | | targetNumber | String | '' | A six character text modifier used in Fire Support operations to uniquely designate targets in accordance with STANAG 2147, where characters 1 and 2 are alphabetic, and characters 3-6 are numeric: AANNNN.
**Field AP** _6 Characters_ | | type | String | '' | A text modifier for equipment that indicates types of equipment.
**Field V** _24 Characters_ | | uniqueDesignation | String | '' | A text modifier for units, equipment, and installations that uniquely identifies a particular symbol or track number. Identifies acquisitions number when used with SIGINT symbology.
**Field T** _21 Characters_ | **Style options** The following options are style options that changes the look of the symbol in different ways. | Option | Type | Default | Description | | -------------------- | ------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | alternateMedal | Boolean | false | MIL-STD-2525D lets you choose between MEDAL and alternate MEDAL icons for mine warfare symbols, the default in milsymbol is using MEDAL icons, but you can change this using setting this property to true. | | civilianColor | Boolean | true | 2525C specifics purple as an optional color for civilian symbols. Of course we like color so we set this as default. | | colorMode | ColorMode or String | 'Light' | This is the option for setting what Color object to use for the fill of the symbols. It can be set to a Color object, or a string representing the name of a registered Color object. You can use ms.ColorMode to create a new color mode, or ms.getColorMode to get an existing color mode. **Note that the string is not a single color, it is a name of a registered color mode**, by default "Light", "Medium", and "Dark" are registered color modes. | | fill | Boolean | true | Should your symbol be filled with color. | | fillColor | String | "" | Override the fill color of the symbol with any color string. | | fillOpacity | Number | 1 | The opacity of the symbol fill color. | | fontfamily | String | 'Arial' | Changes the font family for all texts surrounding the icon. | | frame | Boolean | true | Should your symbol have a frame. All symbols support to be unframed, not just the ones specified in 2525B. | | frameColor | ColorMode | false | Changes the color of the frame of the symbol | | hqStaffLength | Number | undefined | Overrides the global Headquarters staff length | | icon | Boolean | true | Should your symbol have an icon. | | infoBackground | ColorMode or String | "" | Changes the color of the information background | | infoBackgroundFrame | ColorMode or String | "" | Changes the color of the frame of the information background | | iconColor | ColorMode | false | Changes the color of the icon of the symbol | | infoColor | ColorMode or String | Same color as the frame outline | This will be used for texts in the text fields surrounding the symbol. It is a ColorMode, or a string color that is either a keyword or a numerical RGB specification. | | infoFields | Boolean | true | If you have set some text fields and direction but don't want them to be displayed you can set infoFields to false. This makes it possible to initiate the object with all information you got but not display it. | | infoOutlineColor | String or `false` | rgb(239, 239, 239) | The color of the outline that should be drawn around text fields, or `false` to use the value of `outlineColor`. | | infoOutlineWidth | Number or `false` | false | The width of the outline that should be drawn around text fields, or `false` to use the value of `outlineWidth`. | | infoSize | Number | 40 | The size of the text fields surrounding the symbol. This is relative to the size of the symbol, so you can consider 40 to be 40% of the default size that is 100. | | monoColor | String | '' | A color that is either a keyword or a numerical RGB specification. If you set this the symbol will be monochrome and unfilled using the color provided. | | outlineColor | ColorMode or String | rgb(239, 239, 239) | A color that is either a keyword or a numerical RGB specification. The color of the outline of the symbol, if any. Defaults to an off-white color. | | outlineWidth | Number | 0 | The width of the outline that should be drawn around all symbol parts, if any. | | padding | Number | 0 | Milsymbol usually tries to fit the bounds for the symbol as snug as possible, but in some cases you want to add some extra padding around your symbol, then simply set this option to any number. | | size | Number | 100 | The L value for your symbol, where the L value is the width of the icon octagon. | | simpleStatusModifier | Boolean | false | Should the symbol use simplified status modifiers, this is the default for unfilled symbols and can be forced for filled symbols using this option. | | standard | String | '' | This is a way to override the default standard set for milsymbol. You can set this variable to "2525" or "APP6" depending on what standard you prefer. | | square | Boolean | false | Should the symbol be square with the insertion point in the center. | | strokeWidth | Number | 3 | The stroke width of the symbol. | **Returns** ```javascript Object this ``` --- ### asCanvas(_factor_) Returns the symbol as a Canvas Element. It is possible to provide a resolution factor if a symbol with a higher resolution is wanted, this won't affect numbers reported by `getSize()`, `getAnchor()` or `getOctagonAnchor()`. **Returns** ```javascript Canvas Element ``` --- ### asDOM() Returns the symbol as a SVG DOM Element. **Returns** ```javascript DOM Element ``` --- ### asSVG() Returns the symbol as a SVG string. **Returns** ```javascript String; ``` --- ### getAnchor() Getting the anchor point where the symbol should be inserted measured from the top left corner of the symbol. **Returns** ```javascript Object {x:Number, y:Number} ``` --- ### getColors() Gets the colors used for this symbol. **Returns** ```javascript Object { black: ColorMode, // Black parts of the symbol. fillColor: ColorMode, // Symbol fill color. frameColor: ColorMode, // Symbol frame color. iconColor: ColorMode, // Icon color. iconFillColor: ColorMode, // Icon fill color. none: ColorMode, // Transparent parts of the symbol. white: ColorMode // White parts of the symbol. } ``` --- ### getMetadata() Gets all metadata that is computed for the SIDC of this symbol. **Returns** ```javascript Object { activity: Boolean, // Is it an Activity affiliation: String, // Affiliation it is shown as (Friend/Hostile...) baseAffilation: String, // Affiliation it belongs to (Friend/Hostile...) baseDimension: String, // Dimension it belongs to (Air/Ground...) baseGeometry: Object, // Geometry is a combination of dimension and affiliation (AirFriend/GroundHostile...) civilian: Boolean, // Is it Civilian condition: String, // What condition is it in context: String, // Context of the symbol (Reality/Exercise...) dimension: String, // Dimension it is shown as (Air/Ground...) for example Ground Equipment is shown with the same shape as Sea. dimensionUnknown: Boolean, // Is the dimension unknown echelon: String, //What echelon (Platoon/Company...) faker: Boolean, // Is it a Faker fenintDummy: Boolean, // Is it a feint/dummy fill: Boolean, // Standard says it should be filled frame: Boolean, // Standard says it should be framed functionid: String, // Part of SIDC referring to the icon. headquarters: Boolean, // Is it a Headquarters installation: Boolean, // Is it an Instalation joker: Boolean, // Is it a Joker mobility: String, // What mobility (Tracked/Sled...) notpresent: String, // Is it Anticipated or Pending numberSIDC: Boolean, // Is the SIDC number based space: Boolean, // Is it in Space taskForce: Boolean // Is it a task force } ``` --- ### getOptions(_includeStyle_) Get the options that are set on the symbol. If includeStyle is set to `false` style information will not be included in the returned options if it is set to `true` or left out style information will be included in the returned options. **Returns** ```javascript Object; ``` --- ### getOctagonAnchor() Getting the center of the symbol octagon measured from the top left corner of the symbol. **Returns** ```javascript Object {x:Number, y:Number} ``` --- ### getSize() Gets the size of the current symbol. **Returns** ```javascript Object {width:Number, height:Number} ``` --- ### getStyle() Gets the style part of the symbol options of the current symbol. **Returns** ```javascript Object; ``` --- ### isValid(_extended_) If extended is set to `true` it will return an object with the validity of different parts of the symbol code, if extended is omitted or set to false it will return a boolean representing if it was possible to find an icon for the provided SIDC or not. In the future, this might validate other parameters as well. **Returns** ```javascript Boolean or Object ``` --- ### setOptions(_arg1, arg2 ... argN_) This sets the options for a symbol and updates the symbol, the arguments are options Objects in the same way as when you create a new symbol, where an updated SIDC can be included in the options object (`sidc: String`). If setOptions is called without an options object, the symbol is simply updated. **Returns** ```javascript this; ``` --- ### toDataURL() Returns the SVG of a symbol as a base 64 encoded string, this can be useful in some cases where you want to assign the output as a source for an image element. If you want a PNG as a base 64 encoded string, simply call `.asCanvas().toDataURL()`. **Returns** ```javascript String; ``` --- # Developing milsymbol This describes more advanced development with milsymbol, this includes adding your own symbols, overwriting existing icons and in other ways modifying the standard output from milsymbol. The base concept for milsymbol has been that everything that is used internally to build up the symbols should be possible to modify, this makes it possible to do everything from changing colors to adding completely new parts to the generated symbols. All the following code can be used to inject functionality into milsymbol externally, but you can also choose to build your own version of milsymbol. ## Building milsymbol Milsymbol is built using [webpack](https://webpack.js.org), and if you installed milsymbol npm everything you need to build milsymbol should have been installed as well since they are listed as devDependencies in package.json, if you don't have npm installed, you will have to install it to build milsymbol. The structure of the code is that the webpack config (_webpack.config.js_) is located in the root directory, and the entry point (_index.js_) and all other source code is under `/src`. Once you have changed the parts of the code that you want to change, you simply run: ``` npm run build ``` Webpack will then build milsymbol and minify the output into `/dist`. It is also possible to build an un-minified version of milsymbol by running: ``` npm run build-dev ``` And finally tests are located in the `/test` and you can run the tests by running: ``` npm run test ``` ## Draw instruction The symbols in milsymbol are drawn using JSON draw instructions `drawInstruction`, these are then converted into Canvas draw instructions, or SVG output. If you are creating your own JSON geometries for usage in milsymbol, they should have the origo at 100,100, and the hight and width of the icon octagon is 100. There is a sample SVG representing the symbol octagon available in the `dev folder. The following different kinds of draw instructions can be used in milsymbol: ```javascript Object { type: 'path', d: String, // SVG path data fill: String, // Fill color or set to false if none fillopacity: Number, // Fill opacity {Optional} stroke: String, // Stroke color or set to false if none strokedasharray: String, // {Optional} strokewidth: Number, // Width of the stroke {Optional} } ``` ```javascript Object { type: 'circle', cx: Number, // Center x cy: Number, // Center y r: Number, // Radius fill: String, // Fill color or set to false if none fillopacity: Number, // Fill opacity {Optional} stroke: String, // Stroke color or set to false if none strokedasharray: String, // {Optional} strokewidth: Number, // Width of the stroke {Optional} } ``` ```javascript Object { type: 'text', x: Number, y: Number, textanchor: String, fontsize: Number, fontfamily: String, fontweight: String, fill: String, // Fill color or set to false if none fillopacity: Number, // Fill opacity {Optional} stroke: String, // Stroke color or set to false if none strokedasharray: String, // {Optional} strokewidth: Number, // Width of the stroke {Optional} } ``` ```javascript Object { type: 'translate', x: Number, // Move x y: Number, // Move y draw: drawInstruction } ``` ```javascript Object { type: 'rotate', degree: Number, // Rotation angle x: Number, // Rotate center x y: Number, // Rotate center y draw: drawInstruction } ``` ```javascript Object { type: 'scale', factor: Number, // Factor to scale draw: drawInstruction } ``` ```javascript Object { type: 'svg', svg: String // Full SVG XML } ``` Several draw instructions can be grouped together in an Array to for a more complex part of a symbol, this is also a `drawInstruction` and the code will handle both Objects and Arrays. ```javascript Array [ drawInstruction, drawInstruction, drawInstruction, drawInstruction, ... ] ``` --- ## ms.BBox({box}) ```javascript Object { x1: Number, // Left coordinate {Optional} y1: Number, // Top coordinate {Optional} x2: Number, // Right coordinate {Optional} y2: Number, // Bottom coordinate {Optional} } ``` Creates a bounding box Object. It is initiated with an optional object. Values that are omitted will default to 100, and if an object isn't provided all values will default to 100. **Returns** ```javascript Object { x1: Number, // Left coordinate y1: Number, // Top coordinate x2: Number, // Right coordinate y2: Number, // Bottom coordinate width: Function, // Returns box width height: Function, // Returns box height merge(box): Function // Merges one box with another and returns the original box } ``` ## ms.ColorMode(civilian, friend, hostile, neutral, unknown) ```javascript civilian: String, friend: String, hostile: String, neutral: String, unknown: String, ``` Creates a ColorMode Object with colors used for different affiliations. **Returns** ```javascript Object { Civilian: String, Friend: String, Hostile: String, Neutral: String, Unknown: String } ``` --- ## ms.addIconParts(iconFunction) ```javascript iconFunction: Function; ``` Adds an icon function to milsymbol. All icons on the symbols in milsymbol are built by different icon parts, it can be one for Infantry and one for Armor, add them together and you will have the icon for Armored Infantry. By reusing icon parts as much as possible the size of milsymbol is reduced. If you want to override built-in icon parts or add new to use with custom SIDC, you can do this by adding an icon function. Example: ```javascript ms.addIconParts(function( iconParts, metadata, colors, std2525, monoColor, alternateMedal ) { /* iconParts: Object - The existing object of icon parts metadata: Object - properties object colors: Object - color object std2525: Boolean - Is it 2525 then true, otherwise false alternateMedal: Boolean - true/false for sea mine stuff */ // Adding a custom part for tactical graphics iconParts["TP.HARBOR"] = { type: "path", fill: false, d: "M 80,140 50,60 150,60 120,140" }; /* Since we are modifying directly to the existing object of icon parts, we don't have to return anything. */ }); ``` **Returns** ```javascript Object ms ``` ## ms.addLabelOverrides(labelFunction, type) ```javascript labelFunction: Function, type: String // 'letter' or 'number' depending on the type of the SIDC ``` Adds label overrides to milsymbol. If you have some symbols that you want to have labels that differ from how ordinary symbols are labeled, such as tactical graphics, you can add label override functions that place the labels differently. Example: ```javascript ms.addLabelOverrides( function tacticalPoints(sidc) { /* sidc: Object - The existing object of label overrides */ /* Creates an override for SIDC 'G-G-GPPK--', each option listed will be applied to the text drawInstruction */ sidc["G-G-GPPK--"] = { additionalInformation: { stroke: false, textanchor: "middle", x: 100, y: -70, fontsize: 40 }, hostile: { stroke: false, textanchor: "start", x: 150, y: 45, fontsize: 40 }, uniqueDesignation: { stroke: false, textanchor: "start", x: 150, y: 0, fontsize: 80 }, dtg: { stroke: false, textanchor: "end", x: 50, y: -30, fontsize: 40 }, dtg1: { stroke: false, textanchor: "end", x: 50, y: 10, fontsize: 40 } }; /* Since we are modifying directly to the existing object of overrides, we don't have to return anything. */ }, "letter" //Setting letter as SIDC type ); ``` **Returns** ```javascript Object ms ``` ## ms.addSIDCicons(sidcFunction, type) ```javascript sidcFunction: Function, type: String // 'letter' or 'number' depending on the type on the SIDC ``` Adds a function for creating icons representing different SIDCs. It is possible to add custom SIDC, or to modify existing SIDC by adding a custom SIDC function. Example: ```javascript ms.addSIDCicons( function tacticalPoints(sidc, bbox, icnParts, std2525) { /* sidc: Object - The existing object of SIDC bbox: Object - The existing object of Bounding Boxes for SIDC iconParts: Object - The existing object of icon parts std2525: Boolean - Is it 2525 then true, otherwise false */ // Creating a new SIDC sidc["G-T-D-----"] = icn["TP.DESTROY"]; bbox["G-T-D-----"] = { x1: 0, x2: 200, y1: 40, y2: 160 }; // If we don't provide a bounding box, it will be set to the bounds of the icon octagon sidc["G-T-I-----"] = icn["TP.INTERDICT"]; /* Since we are modifying directly to the existing object of SIDCs, we don't have to return anything. */ }, "letter" //Setting letter as SIDC type ); ``` **Returns** ```javascript Object ms ``` ## ms.addSymbolPart(part) ```javascript part: function ``` Adds a new symbol function to milsymbol. A symbol function is a function that returns an Object with two drawInstruction and one bounding box, like this: ```javascript Object { pre: drawInstruction, // This is to be drawn before anything else post: drawInstruction, // This is to be drawn after anything else bbox: bbox // The bounding box of the added drawInstructions } ``` By inserting a pre and a post drawInstruction, we are able to draw parts of the symbol that requires information, such as bounding boxes, previously drawn, but to draw them before the other parts are drawn. It's quite clever, trust me. **Returns** ```javascript Object ms ``` ## ms.getColorMode(mode) ```javascript mode: String; // Name of a color mode registered with setColorMode ``` Gets a color mode that has been registered with `setColorMode`. When milsymbol is initiated the following color modes are registered automatically: | Color mode name | Description | | --------------- | ------------------------------------------------- | | Light | Light fill colors. | | Medium | Medium fill colors. | | Dark | Dark fill colors. | | FrameColor | Frame colors for unfilled symbols. | | IconColor | Icon colors for unfilled and unframed symbols. | | Black | This is all black. | | White | This is all white. | | OffWhite | This is off white, used for white parts of icons. | | None | This is no color, used to turn colors off. | **Returns** ```javascript Object { Civilian: String, Friend: String, Hostile: String, Neutral: String, Unknown: String } ``` ## ms.getDashArrays() Gets the different dash arrays used for dashed lines. **Returns** ```javascript Object { pending: String, // The value for the stroke-dasharray used for symbols with a pending status. anticipated: String, // The value for the stroke-dasharray used for symbols with an anticipated status. feintDummy: String // The value for the stroke-dasharray used for the feint/dummy modifier. } ``` ## ms.getHqStaffLength() Gets the length of the HQ staff used for HQ symbols. **Returns** ```javascript Number; ``` ## ms.getSymbolParts() This gets all symbol functions that have been inserted by `ms.addSymbolPart`. **Returns** ```javascript Array [ symbolFunction, symbolFunction, symbolFunction, ... ] ``` ## ms.getVersion() Gets the version of milsymbol. **Returns** ```javascript String; ``` ## ms.outline(drawInstruction, outline, stroke, color) ```javascript drawInstruction: drawInstruction, outline: Number, stroke: Number, color: String ``` Takes the drawInstruction in the input and modifies them so that they only are stroked. Outline is the outline width, stroke is the original stroke width, and color is the color the outline should have. **Returns** ```javascript Array or Object ``` ## ms.setColorMode(name, colormode) ```javascript name: String, colormode: ColorMode ``` Register a ColorMode with a name or override an existing ColorMode. **Returns** ```javascript Object ColorMode ``` ## ms.setDashArrays(pending, anticipated, feintDummy) ```javascript pending: String, // The value for the stroke-dasharray used for symbols with a pending status. anticipated: String, // The value for the stroke-dasharray used for symbols with an anticipated status. feintDummy: String // The value for the stroke-dasharray used for the feint/dummy modifier. ``` Sets the dash arrays used for dashed lines. Example: ```javascript var dashObj = ms.setDashArrays("4,4", "8,12", "8,8"); ``` **Returns** ```javascript Object { pending: String, anticipated: String, feintDummy: String } ``` ## ms.setHqStaffLength(staff_length) ```javascript staf_length: Number; ``` Sets the length of the HQ staff used for HQ symbols. **Returns** ```javascript Number; ``` ## ms.setStandard(standard) ```javascript standard: String; // '2525' or 'APP6' ``` This sets the preferred standard. Sometimes APP6 and 2525 differ in symbols. Default we are using 2525 symbology, but you can select to follow APP6 instead. (All possible SIDC will have some kind of symbol no matter setting, so you will always get a symbol.) **Returns** ```javascript Boolean; // true if the standard was set, otherwise false ``` ## ms.setSymbolParts(parts) ```javascript parts: Array; // Array of symbolFunctions ``` Replaces the current symbol functions with an Array of symbol functions. This can be used to modify the symbol functions that are built into milsymbol. **Returns** ```javascript Object ms ```