In computer programming, whitespace is any character or series of characters that represent horizontal or vertical space in typography. When rendered, a whitespace character does not correspond to a visible mark, but typically does occupy an area on a page. For example, the common whitespace symbol U+0020 SPACE (also ASCII 32) represents a blank space punctuation character in text, used as a word divider in Western scripts.
With many keyboard layouts, a whitespace character may be entered by pressing . Horizontal whitespace may also be entered on many keyboards with the key, although the length of the space may vary. Vertical whitespace may be input by typing , which creates a 'newline' code sequence in most programs. In some systems has a separate meaning but in others the two are conflated. Many early computer games used whitespace characters to draw a screen (e.g. Kingdom of Kroz).
The term "whitespace" is based on the appearance of the characters on ordinary paper. However, within an application, whitespace characters can be processed in the same way as any other character code and different programs may define their own semantics for the characters.
The table below lists the twenty-five characters defined as whitespace ("WSpace=Y", "WS") characters in the Unicode Character Database. Seventeen use a definition of whitespace consistent with the algorithm for bidirectional writing ("Bidirectional Character Type=WS") and are known as "Bidi-WS" characters. The remaining characters may also be used, but are not of this "Bidi" type.
Note: Depending on the browser and fonts used to view the following table, not all spaces may be displayed properly.
Unicode also provides some visible characters that can be used to represent various whitespace characters, in contexts where a visible symbol must be displayed:
|U+00B7||183||Middle dot||Latin-1 Supplement||·||Interpunct|
|U+21A1||8609||Downwards two headed arrow||Arrows||↡|
|≡||Amongst other uses, is the ECMA-17 / ISO 2047 symbol for line feed|
|U+237D||9085||Shouldered open box||Miscellaneous Technical||⍽||Used to indicate a NBSP|
|U+23CE||9166||Return symbol||Miscellaneous Technical||⏎||Symbol for a return key, which enters a line break|
|U+2409||9225||Symbol for horizontal tabulation||Control Pictures||␉||Substitutes for a tab character|
|U+240A||9226||Symbol for line feed||Control Pictures||␊||Substitutes for a line feed|
|U+240B||9227||Symbol for vertical tabulation||Control Pictures||␋||Substitutes for a vertical tab (line tab)|
|U+240C||9228||Symbol for form feed||Control Pictures||␌||Substitutes for a form feed (page break)|
|U+240D||9229||Symbol for carriage return||Control Pictures||␍||Substitutes for a carriage return|
|U+2420||9248||Symbol for space||Control Pictures||␠||Substitutes for an ASCII space|
|U+2422||9250||Blank symbol||Control Pictures||␢||aka "substitute blank", used in BCDIC, EBCDIC, ASCII-1963 etc. as a symbol for the word separator|
|U+2423||9251||Open box||Control Pictures||␣||Used in block letter handwriting at least since the 1980s when it is necessary to explicitly indicate the number of space characters (e.g. when programming with pen and paper). Used in a textbook (published 1982, 1984, 1985, 1988 by Springer-Verlag) on Modula-2, a programming language where space codes require explicit indication. Also used in the keypad[n 1] of the Texas Instruments' TI-8x series of graphing calculators.|
|U+2424||9252||Symbol for newline||Control Pictures||␤||Substitutes for a line break|
|U+25B3||9651||White up-pointing triangle||Geometric Shapes||△||Amongst other uses, is the ECMA-17 / ISO 2047 symbol for the ASCII space|
|U+2A5B||10843||Logical Or with middle stem||Supplemental
|⩛||Amongst other uses, is the ECMA-17 / ISO 2047 symbol for vertical tab (line tab)|
|⪪||Amongst other uses, is the ECMA-17 / ISO 2047 symbol for carriage return|
|⪫||Amongst other uses, is the ECMA-17 / ISO 2047 symbol for the tab character|
|U+3037||12343||Ideographic Telegraph Line Feed
|〷||Graphic used for code 9999 in Chinese telegraph code, representing a line feed|
- ↑ Above the zero "0" or negative "(‒)" key.
- Exact space
- The Cambridge Z88 provided a special "exact space" (code point 160 aka 0xA0) (invokable by key shortcut ), displayed as "…" by the operating system's display driver. It was therefore also known as "dot space" in conjunction with BBC BASIC.
- Under code point 224 (0xE0) the computer also provided a special three-character-cells-wide SPACE symbol
"SPC"(analogous to Unicode's single-cell-wide U+2420).
- The Braille Patterns Unicode block contains U+2800 ⠀ BRAILLE PATTERN BLANK (HTML
⠀), a Braille pattern with no dots raised. Some fonts display the character as a fixed-width blank, however the Unicode standard explicitly states that it does not act as a space.
- Unicode's coverage of the Korean alphabet includes several code points which represent the absence of a written letter, and thus do not display a glyph:
- Unicode includes a Hangul Filler character in the Hangul Compatibility Jamo block (U+3164 ㅤ HANGUL FILLER (HTML
ㅤ)). This is classified as a letter, but displayed as an empty space, like a Hangul block containing no jamo. It is used in KS X 1001 Hangul combining sequences to introduce them or denote the absence of a letter in a position, but not in Unicode's combining jamo system.
- Unicode's combining jamo system uses similar Hangul Choseong Filler and Hangul Jungseong Filler characters to denote the absence of a letter in initial or medial position within a syllable block, which are included in the Hangul Jamo block (U+115F ᅟ HANGUL CHOSEONG FILLER (HTML
ᅟ), U+1160 ᅠ HANGUL JUNGSEONG FILLER (HTML
- Additionally, a Halfwidth Hangul Filler is included in the Halfwidth and Fullwidth Forms (U+FFA0 ﾠ HALFWIDTH HANGUL FILLER (HTML
ﾠ)), which is used when mapping from encodings which include characters from both Johab (or Wansung) and N-byte Hangul (or its EBCDIC counterpart), such as IBM-933, which includes both Johab and EBCDIC fillers.
- Unicode includes a Hangul Filler character in the Hangul Compatibility Jamo block (U+3164 ㅤ HANGUL FILLER (HTML
Whitespace and digital typography
Text editors, word processors, and desktop publishing software differ in how they represent whitespace on the screen, and how they represent spaces at the ends of lines longer than the screen or column width. In some cases, spaces are shown simply as blank space; in other cases they may be represented by an interpunct or other symbols. Many different characters (described below) could be used to produce spaces, and non-character functions (such as margins and tab settings) can also affect whitespace.
Many of the Unicode space characters were created for compatibility with classic print typography.
Even if digital typography has algorithmic kerning and justification, those space characters can be used to supplement the electronic formatting when needed.
Variable-width general-purpose space
In computer character encodings, there is a normal general-purpose space (Unicode character U+0020) whose width will vary according to the design of the typeface. Typical values range from 1/5 em to 1/3 em (in digital typography an em is equal to the nominal size of the font, so for a 10-point font the space will probably be between 2 and 3.3 points). Sophisticated fonts may have differently sized spaces for bold, italic, and small-caps faces, and often compositors will manually adjust the width of the space depending on the size and prominence of the text.
In addition to this general-purpose space, it is possible to encode a space of a specific width. See the table below for a complete list.
Hair spaces around dashes
Em dashes used as parenthetical dividers, and en dashes when used as word joiners, are usually set continuous with the text. However, such a dash can optionally be surrounded with a hair space, U+200A, or thin space, U+2009. The hair space can be written in HTML by using the numeric character references
, or the named entity
, but is not universally supported in browsers yet, (As of 2016) The thin space is named entity
and numeric references
. These spaces are much thinner than a normal space (except in a monospaced (non-proportional) font), with the hair space being the thinner of the two.
|Normal space with em dash||left — right|
|Thin space with em dash||left — right|
|Hair space with em dash||left — right|
|No space with em dash||left—right|
In programming language syntax, spaces are frequently used to explicitly separate tokens. In most languages multiple whitespace characters are treated the same as a single whitespace character (outside of quoted strings); such languages are called free-form. In a few languages, including Haskell, occam, ABC, and Python, whitespace and indentation are used for syntactical purposes. In the satirical language called Whitespace, whitespace characters are the only valid characters for programming, while any other characters are ignored.
Excessive use of whitespace, especially trailing whitespace at the end of lines, is considered a nuisance. However correct use of whitespace can make the code easier to read and help group related logic.
Most languages only recognize ASCII characters as whitespace, or in some cases Unicode newlines as well, but not most of the characters listed above. The C language defines whitespace characters to be "space, horizontal tab, new-line, vertical tab, and form-feed". The HTTP network protocol requires different types of whitespace to be used in different parts of the protocol, such as: only the space character in the status line, CRLF at the end of a line, and "linear whitespace" in header values.
Command line user interfaces
In commands processed by command processors, e.g., in scripts and typed in, the space character can cause problems as it has two possible functions: as part of a command or parameter, or as a parameter or name separator. Ambiguity can be prevented either by prohibiting embedded spaces, or by enclosing a name with embedded spaces between quote characters.
Some markup languages, such as SGML, preserve whitespace as written.
Web markup languages such as XML and HTML treat whitespace characters specially, including space characters, for programmers' convenience. One or more space characters read by conforming display-time processors of those markup languages are collapsed to 0 or 1 space, depending on their semantic context. For example, double (or more) spaces within text are collapsed to a single space, and spaces which appear on either side of the "
=" that separates an attribute name from its value have no effect on the interpretation of the document. Element end tags can contain trailing spaces, and empty-element tags in XML can contain spaces before the "
/>". In these languages, unnecessary whitespace increases the file size, and so may slow network transfers. On the other hand, unnecessary whitespace can also inconspicuously mark code, similar to, but less obvious than comments in code. This can be desirable to prove an infringement of license or copyright that was committed by copying and pasting.
In XML attribute values, sequences of whitespace characters are treated as a single space when the document is read by a parser. Whitespace in XML element content is not changed in this way by the parser, but an application receiving information from the parser may choose to apply similar rules to element content. An XML document author can use the
xml:space="preserve" attribute on an element to instruct the parser to discourage the downstream application from altering whitespace in that element's content.
In most HTML elements, a sequence of whitespace characters is treated as a single inter-word separator, which may manifest as a single space character when rendering text in a language that normally inserts such space between words. Conforming HTML renderers are required to apply a more literal treatment of whitespace within a few prescribed elements, such as the
pre tag and any element for which CSS has been used to apply
pre-like whitespace processing. In such elements, space characters will not be "collapsed" into inter-word separators.
In both XML and HTML, the non-breaking space character, along with other non-"standard" spaces, is not treated as collapsible "whitespace", so it is not subject to the rules above.
Such usage is similar to multiword file names written for operating systems and applications that are confused by embedded space codes—such file names instead use an underscore (_) as a word separator, as_in_this_phrase.
Another such symbol was U+2422 ␢ BLANK SYMBOL. This was used in the early years of computer programming when writing on coding forms. Keypunch operators immediately recognized the symbol as an "explicit space". It was used in BCDIC, EBCDIC, and ASCII-1963.
- Carriage return
- Em (typography)
- En (typography)
- Form feed
- Indent style
- Line feed
- Programming style
- Prosigns for Morse code
- Regular expression for the white-space character class.
- Space bar
- Space (punctuation)
- Tab key
- Trimming (computer programming)
- Whitespace (programming language)
- Zero-width space
- ↑ "The Unicode Standard". Unicode Consortium. http://unicode.org/versions/latest/.
- ↑ 2.0 2.1 2.2 2.3 2.4 Cite error: Invalid
<ref>tag; no text was provided for refs named
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Coded Character Sets, History and Development (1 ed.). Addison-Wesley Publishing Company, Inc.. 1980. pp. 41, 47, 52, 102–103, 117, 119, 130, 132, 141, 148, 150–151, 212, 424. ISBN 978-0-201-14460-4. https://books.google.com/books?id=6-tQAAAAMAAJ. Retrieved 2016-05-22. 
- ↑ "American Standard Code for Information Interchange, ASA X3.4-1963". American Standards Association (ASA). 1963-06-17. https://www.sr-ix.com/Archive/CharCodeHist/X3.4-1963/index.html.
- ↑ Niklaus Wirth, Programming in Modula-2
- ↑ "Cambridge Z88 User Guide". Cambridge Computer Limited. 2016. Basic concepts - The keyboard. https://cambridgez88.jira.com/wiki/display/UG/The+keyboard.
- ↑ 7.0 7.1 7.2 "Cambridge Z88 User Guide". Cambridge Computer Limited. 1987. Appendix D. https://cambridgez88.jira.com/wiki/display/UG40/Appendix+D+-+Character+set.
- ↑ 8.0 8.1 8.2 "Cambridge Z88 User Guide". Cambridge Computer Limited. 2015. Appendix D. https://cambridgez88.jira.com/wiki/display/UG/Appendix+D+-+Character+set.
- ↑ Unicode chart U+2800, braille patterns
- ↑ Chung, Jaemin (2017-03-30), Proposal to add an informative note to U+3164 HANGUL FILLER, Unicode Consortium, UTC L2/17-081, https://unicode.org/L2/L2017/17081-hangul-filler.pdf
- ↑ Hangul Jamo, Unicode Consortium, 2020-10-25, http://www.unicode.org/charts/PDF/U1100.pdf
- ↑ "ibm-933_P110-1995". ICU Demonstration - Converter Explorer. International Components for Unicode. http://icu-project.org/icu-bin/convexp?conv=ibm-933.
- ↑ "ibm-933_P110-1995 (lead bytes 0E84)". ICU Demonstration - Converter Explorer. International Components for Unicode. http://icu-project.org/icu-bin/convexp?conv=ibm-933&b=0E84&s=ALL.
- ↑ "Chapter 6 — Writing Systems and Punctuation". The Unicode Standard 15.0, electronic edition. Unicode Consortium. 2022-09-13. pp. 12-13 (267-268). https://www.unicode.org/versions/Unicode15.0.0/ch06.pdf. Retrieved 2022-12-23. "The fixed-width space characters (U+2000..U+200A) are derived from conventional (hot lead) typography. Algorithmic kerning and justification in computerized typography do not use these characters. However, where they are used (for example, in typesetting mathematical formulae), their width is generally font-specified, and they typically do not expand during justification. The exception is U+2009 thin space, which sometimes gets adjusted."
- ↑ Usage of the different dash types is illustrated, e.g., in The Chicago Manual of Style, §§ 6.80, 6.83–6.86
- ↑ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf Section 6.4, paragraph 3
- ↑ Fielding, R. (June 1999), "2.2 Basic Rules", Hypertext Transfer Protocol—HTTP/1.1, doi:10.17487/RFC2616
- ↑ "3.3.3 Attribute-Value Normalization". Extensible Markup Language (XML) 1.0 (Fifth Edition). World Wide Web Consortium. http://www.w3.org/TR/REC-xml/#AVNormalize.
- ↑ "9.1 Whitespace". W3CHTML 4.01 Specification. World Wide Web Consortium. http://www.w3.org/TR/html4/struct/text.html#h-9.1.
Original source: https://en.wikipedia.org/wiki/Whitespace character. Read more