Whitespace character

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.

Overview

Relative widths of various spaces in Unicode

With many keyboard layouts, a horizontal whitespace character may be entered through the use of a spacebar. Horizontal whitespace may also be entered on many keyboards through the use of the Tab ↹ key, although the length of the space may vary. Vertical whitespace is a bit more varied as to how it is encoded, but the most obvious in typing is the ↵ Enter result which creates a 'newline' code sequence in applications programs. Older keyboards might instead say Return, abbreviating the typewriter keyboard meaning 'Carriage-Return' which generated an electromechanical return to the left stop (CR code in ASCII-hex &0D;) and a line feed or move to the next line (LF code in ASCII-hex &0A;); in some applications these were independently used to draw text cell based displays on monitors or for printing on tractor-guided printerswhich might also contain reverse motions/positioning code sequences allowing text-based output devices to achieve more sophisticated output. Many early computer games used such codes to draw a screen (e.g. Kingdom of Kroz), and word processing software would use this to produce printed effects such as bold, underline, and strikeout.

The term "whitespace" is based on the resulting appearance on ordinary paper. However they are coded inside an application, whitespace can be processed the same as any other character code and programs can do the proper action as defined for the context in which they occur.

Definition and ambiguity

The most common whitespace characters may be typed via the space bar or the tab key. Depending on context, a line-break generated by the return or enter key may be considered whitespace as well.

Unicode

The table below lists the twenty-five characters defined as whitespace ("WSpace=Y", "WS") characters in the Unicode Character Database.[1] 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.

Name Code point Width box May break? In
IDN?
Script Block General
category
Notes
character tabulationU+00099 YesNo CommonBasic LatinOther,
control
HT, Horizontal Tab. HTML/XML named entity: 	, LaTeX: '\tab'
line feedU+000A10 Is a line-break CommonBasic LatinOther,
control
LF, Line feed. HTML/XML named entity: 

line tabulationU+000B11 Is a line-break CommonBasic LatinOther,
control
VT, Vertical Tab
form feedU+000C12 Is a line-break CommonBasic LatinOther,
control
FF, Form feed
carriage returnU+000D13 Is a line-break CommonBasic LatinOther,
control
CR, Carriage return
spaceU+002032 YesNo CommonBasic LatinSeparator,
space
Most common (normal ASCII space)
next lineU+0085133 Is a line-break CommonLatin-1
Supplement
Other,
control
NEL, Next line
no-break spaceU+00A0160  NoNo CommonLatin-1
Supplement
Separator,
space
Non-breaking space: identical to U+0020, but not a point at which a line may be broken. HTML/XML named entity:  , LaTeX: '\ '
ogham space markU+16805760 YesNo OghamOghamSeparator,
space
Used for interword separation in Ogham text. Normally a vertical line in vertical text or a horizontal line in horizontal text, but may also be a blank space in "stemless" fonts. Requires an Ogham font.
en quadU+20008192  YesNo CommonGeneral
Punctuation
Separator,
space
Width of one en. U+2002 is canonically equivalent to this character; U+2002 is preferred.
em quadU+20018193 YesNo CommonGeneral
Punctuation
Separator,
space
Also known as "mutton quad". Width of one em. U+2003 is canonically equivalent to this character; U+2003 is preferred.
en spaceU+20028194 YesNo CommonGeneral
Punctuation
Separator,
space
Also known as "nut". Width of one en. U+2000 En Quad is canonically equivalent to this character; U+2002 is preferred. HTML/XML named entity:  , LaTeX: '\enspace'
em spaceU+20038195 YesNo CommonGeneral
Punctuation
Separator,
space
Also known as "mutton". Width of one em. U+2001 Em Quad is canonically equivalent to this character; U+2003 is preferred. HTML/XML named entity:  , LaTeX: '\quad'
three-per-em spaceU+20048196 YesNo CommonGeneral
Punctuation
Separator,
space
Also known as "thick space". One third of an em wide. HTML/XML named entity:  
four-per-em spaceU+20058197 YesNo CommonGeneral
Punctuation
Separator,
space
Also known as "mid space". One fourth of an em wide. HTML/XML named entity:  
six-per-em spaceU+20068198 YesNo CommonGeneral
Punctuation
Separator,
space
One sixth of an em wide. In computer typography, sometimes equated to U+2009.
figure spaceU+20078199 NoNo CommonGeneral
Punctuation
Separator,
space
Figure space. In fonts with monospaced digits, equal to the width of one digit. HTML/XML named entity:  
punctuation spaceU+20088200 YesNo CommonGeneral
Punctuation
Separator,
space
As wide as the narrow punctuation in a font, i.e. the advance width of the period or comma.[2] HTML/XML named entity:  
thin spaceU+20098201 YesNo CommonGeneral
Punctuation
Separator,
space
Thin space; one-fifth (sometimes one-sixth) of an em wide. Recommended for use as a thousands separator for measures made with SI units. Unlike U+2002 to U+2008, its width may get adjusted in typesetting.[3] HTML/XML named entity:  ; LaTeX: '\,'
hair spaceU+200A8202 YesNo CommonGeneral
Punctuation
Separator,
space
Thinner than a thin space. HTML/XML named entity:   (does not work in all browsers)
line separatorU+20288232 Is a line-break CommonGeneral
Punctuation
Separator,
line
paragraph separatorU+20298233 Is a line-break CommonGeneral
Punctuation
Separator,
paragraph
narrow no-break spaceU+202F8239 NoNo CommonGeneral
Punctuation
Separator,
space
Narrow no-break space. Similar in function to U+00A0 No-Break Space. When used with Mongolian, its width is usually one third of the normal space; in other context, its width sometimes resembles that of the Thin Space (U+2009).
medium mathematical spaceU+205F8287 YesNo CommonGeneral
Punctuation
Separator,
space
MMSP. Used in mathematical formulae. Four-eighteenths of an em.[4] In mathematical typography, the widths of spaces are usually given in integral multiples of an eighteenth of an em, and 4/18 em may be used in several situations, for example between the a and the + and between the + and the b in the expression a + b.[5] HTML/XML named entity:  
ideographic spaceU+300012288  YesNo CommonCJK Symbols
and
Punctuation
Separator,
space
As wide as a CJK character cell (fullwidth). Used, for example, in tai tou.
 Name  Code point Width box May break? In
IDN?
Script Block General
category
Notes
mongolian vowel separatorU+180E6158 YesNo MongolianMongolianOther,
Format
MVS. A narrow space character, used in Mongolian to cause the final two characters of a word to take on different shapes.[6] It is no longer classified as space character (i.e. in Zs category) in Unicode 6.3.0, even though it was in previous versions of the standard.
zero width spaceU+200B8203 YesNo ?General
Punctuation
Other,
Format
ZWSP, zero-width space. Used to indicate word boundaries to text processing systems when using scripts that do not use explicit spacing. It is similar to the soft hyphen, with the difference that the latter is used to indicate syllable boundaries, and should display a visible hyphen when the line breaks at it. HTML/XML named entity: ​[7][lower-alpha 3]
zero width non-joinerU+200C8204 YesContext-dependent[12] ?General
Punctuation
Other,
Format
ZWNJ, zero-width non-joiner. When placed between two characters that would otherwise be connected, a ZWNJ causes them to be printed in their final and initial forms, respectively. HTML/XML named entity: ‌
zero width joinerU+200D8205 YesContext-dependent[13] ?General
Punctuation
Other,
Format
ZWJ, zero-width joiner. When placed between two characters that would otherwise not be connected, a ZWJ causes them to be printed in their connected forms. Can also be used to display joining forms in isolation. Depending on whether a ligature or conjunct is expected by default, can either induce (as in emoji and in Sinhala) or suppress (as in Devanagari) substitution with a single glyph, whilst still permitting use of individual joining forms (unlike ZWNJ). HTML/XML named entity: ‍
word joinerU+20608288 NoNo ?General
Punctuation
Other,
Format
WJ, word joiner. Similar to U+200B, but not a point at which a line may be broken. HTML/XML named entity: ⁠
zero width non-breaking spaceU+FEFF65279 NoNo ?Arabic
Presentation
Forms-B
Other,
Format
Zero-width non-breaking space. Used primarily as a Byte Order Mark. Use as an indication of non-breaking is deprecated as of Unicode 3.2; see U+2060 instead.
  1. White_Space is a binary Unicode property.[lower-alpha 4]
  2. "Unicode 13.0 UCD: PropList.txt". 2019-11-27. Retrieved 2020-03-12.
  3. Although ​ is one HTML5 named entity for U+200B, the additional names NegativeMediumSpace, NegativeThickSpace, NegativeThinSpace and NegativeVeryThinSpace (which are names used in the Wolfram Language for negative-advance spaces, which it maps to the Private Use Area)[8][9][10][11] are also defined by HTML5 as aliases for U+200B (e.g. ​).[7]
  4. "Unicode Standard Annex #44, Unicode Character Database".

Substitute images

Unicode also provides some visible characters that can be used to represent various whitespace characters, in contexts where a visible symbol must be displayed:

Unicode space-illustrating characters (visible)
CodeDecimalNameBlock Display Description
U+00B7183Middle dotLatin-1 Supplement · Interpunct
Named entity: ·
U+21A18609Downwards two headed arrowArrows ECMA-17 / ISO 2047 symbol for form feed (page break)[14]
U+22618810Identical toMathematical
Operators
Amongst other uses, is the ECMA-17 / ISO 2047 symbol for line feed[14]
U+237D9085Shouldered open boxMiscellaneous Technical Used to indicate a NBSP
U+23CE9166Return symbolMiscellaneous Technical Symbol for a return key, which enters a line break
U+24099225Symbol for horizontal tabulationControl Pictures Substitutes for a tab character
U+240A9226Symbol for line feedControl Pictures Substitutes for a line feed
U+240B9227Symbol for vertical tabulationControl Pictures Substitutes for a vertical tab (line tab)
U+240C9228Symbol for form feedControl Pictures Substitutes for a form feed (page break)
U+240D9229Symbol for carriage returnControl Pictures Substitutes for a carriage return
U+24209248Symbol for spaceControl Pictures Substitutes for an ASCII space
U+24229250Blank symbolControl Pictures aka "substitute blank",[15] used in BCDIC,[15] EBCDIC,[15] ASCII-1963[15][16] etc. as a symbol for the word separator
U+24239251Open boxControl 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,[17] 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.
Named entity: ␣
U+24249252Symbol for newlineControl Pictures Substitutes for a line break
U+25B39651White up-pointing triangleGeometric Shapes Amongst other uses, is the ECMA-17 / ISO 2047 symbol for the ASCII space[14]
U+2A5B10843Logical Or with middle stemSupplemental
Mathematical
Operators
Amongst other uses, is the ECMA-17 / ISO 2047 symbol for vertical tab (line tab)[14]
U+2AAA10922Smaller thanSupplemental
Mathematical
Operators
Amongst other uses, is the ECMA-17 / ISO 2047 symbol for carriage return[14]
U+2AAB10923Larger thanSupplemental
Mathematical
Operators
Amongst other uses, is the ECMA-17 / ISO 2047 symbol for the tab character[14]
U+303712343Ideographic Telegraph Line Feed
Separator Symbol
CJK Symbols
and Punctuation
Graphic used for code 9999 in Chinese telegraph code, representing a line feed
  1. 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 +SPACE,[18]) displayed as "..." by the operating system's display driver.[19][20] It was therefore also known as "dot space" in conjunction with BBC BASIC.[19][20]
  • 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).[19][20]

Non-space blanks

  • 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.[21]
    • 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 ᅠ)).[22]
    • 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.[23][24]

Whitespace and digital typography

On-screen display

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.

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.[25] 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  , or the named entity  , but is not universally supported in browsers yet, as of 2016. The thin space is named entity   and numeric references   or  . 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 versus hair and thin spaces (as rendered by your browser)
Normal space with em dash left  right
Thin space with em dash leftright
Hair space with em dash left  right
No space with em dash leftright

Computing applications

Programming languages

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".[26] 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.[27]

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.

Markup languages

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.[28] 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.[29] 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.

File names

Such usage is similar to multiword file names written for operating systems and applications that are confused by embedded space codessuch 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".[15] It was used in BCDIC,[15] EBCDIC,[15] and ASCII-1963.[15]

See also

References

  1. "The Unicode Standard". Unicode Consortium.
  2. "Character design standards – space characters". Character design standards. Microsoft. 1998–1999. Archived from the original on August 23, 2000. Retrieved 2009-05-18.
  3. The Unicode Standard 5.0, printed edition, p.205
  4. "General Punctuation" (PDF). The Unicode Standard 5.1. Unicode Inc. 1991–2008. Retrieved 2009-05-13.
  5. Sargent, Murray III (2006-08-29). "Unicode Nearly Plain Text Encoding of Mathematics (Version 2)". Unicode Technical Note #28. Unicode Inc. pp. 19–20. Retrieved 2009-05-19.
  6. Gillam, Richard (2002). Unicode Demystified: A Practical Programmer's Guide to the Encoding Standard. Addison-Wesley. ISBN 0-201-70052-2.
  7. Hickson, Ian. "12.5 Named character references". HTML Standard. WHATWG.
  8. Wolfram. "\[NegativeThickSpace]". Wolfram Language Documentation.
  9. Wolfram. "\[NegativeMediumSpace]". Wolfram Language Documentation.
  10. Wolfram. "\[NegativeThinSpace]". Wolfram Language Documentation.
  11. Wolfram. "\[NegativeVeryThinSpace]". Wolfram Language Documentation.
  12. Faltstrom, P., ed. (August 2010). "Zero Width Non-Joiner". The Unicode Code Points and Internationalized Domain Names for Applications (IDNA). IETF. sec. A.1. doi:10.17487/RFC5892. RFC 5892. Retrieved September 4, 2019.
  13. Faltstrom, P., ed. (August 2010). "Zero Width Joiner". The Unicode Code Points and Internationalized Domain Names for Applications (IDNA). IETF. sec. A.2. doi:10.17487/RFC5892. RFC 5892. Retrieved September 4, 2019.
  14. European Computer Manufacturers Association (1968-11-28). Graphic Representation of the Control Characters of the ECMA 7-Bit Coded Character Set for Information Interchange (PDF). ECMA-17.
  15. Mackenzie, Charles E. (1980). Coded Character Sets, History and Development. The Systems Programming Series (1 ed.). Addison-Wesley Publishing Company, Inc. pp. 41, 47, 52, 102–103, 117, 119, 130, 132, 141, 148, 150–151, 212, 424. ISBN 978-0-201-14460-4. LCCN 77-90165. Retrieved 2016-05-22.
  16. "American Standard Code for Information Interchange, ASA X3.4-1963". American Standards Association (ASA). 1963-06-17.
  17. Niklaus Wirth, Programming in Modula-2
  18. "Cambridge Z88 User Guide". 4.7 (4th ed.). Cambridge Computer Limited. 2016 [1987]. Basic concepts - The keyboard. Archived from the original on 2016-12-12. Retrieved 2016-12-12.
  19. "Cambridge Z88 User Guide". 4.0 (4th ed.). Cambridge Computer Limited. 1987. Appendix D. Archived from the original on 2016-12-12. Retrieved 2016-12-12.
  20. "Cambridge Z88 User Guide". 4.7 (4th ed.). Cambridge Computer Limited. 2015 [1987]. Appendix D. Archived from the original on 2016-12-12. Retrieved 2016-12-12.
  21. Chung, Jaemin (2017-03-30). Proposal to add an informative note to U+3164 HANGUL FILLER (PDF). Unicode Consortium. UTC L2/17-081.
  22. Hangul Jamo (PDF). Unicode Consortium. 2020-10-25.
  23. "ibm-933_P110-1995". ICU Demonstration - Converter Explorer. International Components for Unicode.
  24. "ibm-933_P110-1995 (lead bytes 0E84)". ICU Demonstration - Converter Explorer. International Components for Unicode.
  25. Usage of the different dash types is illustrated, e.g., in The Chicago Manual of Style, §§ 6.80, 6.83–6.86
  26. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf Section 6.4, paragraph 3
  27. Fielding, R.; et al., "2.2 Basic Rules", Hypertext Transfer Protocol—HTTP/1.1, RFC 2616
  28. "3.3.3 Attribute-Value Normalization". Extensible Markup Language (XML) 1.0 (Fifth Edition). World Wide Web Consortium.
  29. "9.1 Whitespace". W3CHTML 4.01 Specification. World Wide Web Consortium.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.