@@ -105,10 +105,9 @@ CommentChar :: SourceCharacter but not LineTerminator
105
105
GraphQL source documents may contain single-line comments, starting with the
106
106
{` # ` } marker.
107
107
108
- A comment can contain any Unicode code point in {SourceCharacter} except
109
- {LineTerminator} so a comment always consists of all code points starting with
110
- the {` # ` } character up to but not including the {LineTerminator} (or end of the
111
- source).
108
+ A comment can contain any {SourceCharacter} except {LineTerminator} so a comment
109
+ always consists of all {SourceCharacter} starting with the {` # ` } character up to
110
+ but not including the {LineTerminator} (or end of the source).
112
111
113
112
Comments are {Ignored} like white space and may appear after any token, or
114
113
before a {LineTerminator}, and have no significance to the semantic meaning of a
@@ -831,13 +830,10 @@ BlockStringCharacter ::
831
830
- SourceCharacter but not ` """ ` or ` \""" `
832
831
- ` \""" `
833
832
834
- {StringValue} is a sequence of characters wrapped in quotation marks (U+0022).
835
- (ex. {` "Hello World" ` }). White space and other characters ignored in other parts
836
- of a GraphQL document are significant within a string value.
837
-
838
- A {StringValue} is evaluated to a Unicode text value, a sequence of Unicode
839
- scalar values, by interpreting all escape sequences using the static semantics
840
- defined below.
833
+ A {StringValue} is evaluated to a _ Unicode text value_ , a sequence of _ Unicode
834
+ scalar value_ , by interpreting all escape sequences using the static semantics
835
+ defined below. White space and other characters ignored in other parts of a
836
+ GraphQL document are significant within a string value.
841
837
842
838
The empty string {` "" ` } must not be followed by another {` " ` } otherwise it would
843
839
be interpreted as the beginning of a block string. As an example, the source
@@ -846,29 +842,30 @@ empty strings.
846
842
847
843
** Escape Sequences**
848
844
849
- In a single-quoted {StringValue}, any Unicode scalar value may be expressed
845
+ In a single-quoted {StringValue}, any _ Unicode scalar value _ may be expressed
850
846
using an escape sequence. GraphQL strings allow both C-style escape sequences
851
847
(for example ` \n ` ) and two forms of Unicode escape sequences: one with a
852
848
fixed-width of 4 hexadecimal digits (for example ` \u000A ` ) and one with a
853
849
variable-width most useful for representing a _ supplementary character_ such as
854
850
an Emoji (for example ` \u{1F4A9} ` ).
855
851
856
852
The hexadecimal number encoded by a Unicode escape sequence must describe a
857
- Unicode scalar value, otherwise parsing should stop with an early error. For
858
- example both sources ` "\uDEAD" ` and ` "\u{110000}" ` should not be considered
859
- valid {StringValue}.
853
+ Unicode scalar value, otherwise must result in a parse error. For example both
854
+ sources ` "\uDEAD" ` and ` "\u{110000}" ` should not be considered valid
855
+ {StringValue}.
860
856
861
857
Escape sequences are only meaningful within a single-quoted string. Within a
862
858
block string, they are simply that sequence of characters (for example
863
859
` """\n""" ` represents the Unicode text [ U+005C, U+006E] ). Within a comment an
864
860
escape sequence is not a significant sequence of characters. They may not appear
865
861
elsewhere in a GraphQL document.
866
862
867
- Since {StringCharacter} must not contain some characters, escape sequences must
868
- be used to represent these characters. All other escape sequences are optional
869
- and unescaped non-ASCII Unicode characters are allowed within strings. If using
870
- GraphQL within a system which only supports ASCII, then escape sequences may be
871
- used to represent all Unicode characters outside of the ASCII range.
863
+ Since {StringCharacter} must not contain some code points directly (for example,
864
+ a {LineTerminator}), escape sequences must be used to represent them. All other
865
+ escape sequences are optional and unescaped non-ASCII Unicode characters are
866
+ allowed within strings. If using GraphQL within a system which only supports
867
+ ASCII, then escape sequences may be used to represent all Unicode characters
868
+ outside of the ASCII range.
872
869
873
870
For legacy reasons, a _ supplementary character_ may be escaped by two
874
871
fixed-width unicode escape sequences forming a _ surrogate pair_ . For example the
@@ -880,9 +877,10 @@ such code points.
880
877
When producing a {StringValue}, implementations should use escape sequences to
881
878
represent non-printable control characters (U+0000 to U+001F and U+007F to
882
879
U+009F). Other escape sequences are not necessary, however an implementation may
883
- use escape sequences to represent any other range of code points. If an
884
- implementation chooses to escape a _ supplementary character_ , it should not use
885
- a fixed-width surrogate pair unicode escape sequence.
880
+ use escape sequences to represent any other range of code points (for example,
881
+ when producing ASCII-only output). If an implementation chooses to escape a
882
+ _ supplementary character_ , it should only use a variable-width unicode escape
883
+ sequence.
886
884
887
885
** Block Strings**
888
886
@@ -940,11 +938,11 @@ string.
940
938
941
939
** Static Semantics**
942
940
943
- A {StringValue} describes a Unicode text value, a sequence of * Unicode scalar
944
- value * s . These semantics describe how to apply the {StringValue} grammar to a
941
+ A {StringValue} describes a Unicode text value, a sequence of _ Unicode scalar
942
+ value _ . These semantics describe how to apply the {StringValue} grammar to a
945
943
source text to evaluate a Unicode text. Errors encountered during this
946
944
evaluation are considered a failure to apply the {StringValue} grammar to a
947
- source and result in a parsing error.
945
+ source and must result in a parsing error.
948
946
949
947
StringValue :: ` "" `
950
948
@@ -965,7 +963,7 @@ StringCharacter :: `\u` EscapedUnicode
965
963
within {EscapedUnicode}.
966
964
- Assert {value} is a within the _ Unicode scalar value_ range (>= 0x0000 and <=
967
965
0xD7FF or >= 0xE000 and <= 0x10FFFF).
968
- - Return the code point {value}.
966
+ - Return the _ Unicode scalar value _ {value}.
969
967
970
968
StringCharacter :: ` \u ` HexDigit HexDigit HexDigit HexDigit ` \u ` HexDigit
971
969
HexDigit HexDigit HexDigit
@@ -981,8 +979,8 @@ HexDigit HexDigit HexDigit
981
979
- Otherwise:
982
980
- Assert {leadingValue} is within the _ Unicode scalar value_ range.
983
981
- Assert {trailingValue} is within the _ Unicode scalar value_ range.
984
- - Return the sequence of the code point {leadingValue} followed by the code
985
- point {trailingValue}.
982
+ - Return the sequence of the _ Unicode scalar value _ {leadingValue} followed by
983
+ the _ Unicode scalar value _ {trailingValue}.
986
984
987
985
Note: If both escape sequences encode a _ Unicode scalar value_ , then this
988
986
semantic is identical to applying the prior semantic on each fixed-width escape
@@ -991,19 +989,19 @@ value_.
991
989
992
990
StringCharacter :: ` \ ` EscapedCharacter
993
991
994
- - Return the code point represented by {EscapedCharacter} according to the table
995
- below.
996
-
997
- | Escaped Character | Code Point | Character Name |
998
- | ----------------- | ---------- | ---------------------------- |
999
- | {` " ` } | U+0022 | double quote |
1000
- | {` \ ` } | U+005C | reverse solidus (back slash) |
1001
- | {` / ` } | U+002F | solidus (forward slash) |
1002
- | {` b ` } | U+0008 | backspace |
1003
- | {` f ` } | U+000C | form feed |
1004
- | {` n ` } | U+000A | line feed (new line) |
1005
- | {` r ` } | U+000D | carriage return |
1006
- | {` t ` } | U+0009 | horizontal tab |
992
+ - Return the _ Unicode scalar value _ represented by {EscapedCharacter} according
993
+ to the table below.
994
+
995
+ | Escaped Character | Scalar Value | Character Name |
996
+ | ----------------- | ------------ | ---------------------------- |
997
+ | {` " ` } | U+0022 | double quote |
998
+ | {` \ ` } | U+005C | reverse solidus (back slash) |
999
+ | {` / ` } | U+002F | solidus (forward slash) |
1000
+ | {` b ` } | U+0008 | backspace |
1001
+ | {` f ` } | U+000C | form feed |
1002
+ | {` n ` } | U+000A | line feed (new line) |
1003
+ | {` r ` } | U+000D | carriage return |
1004
+ | {` t ` } | U+0009 | horizontal tab |
1007
1005
1008
1006
StringValue :: ` """ ` BlockStringCharacter\* ` """ `
1009
1007
0 commit comments