summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2023-05-01 22:05:11 +0200
committerAnthon van der Neut <anthon@mnt.org>2023-05-01 22:05:11 +0200
commit7b9631c9b3f987d99888dea07893d4f77d772f34 (patch)
tree705d82c3d60faaa5007ebb692e24d2ef8184e126
parent913318287aacca50246fd44fa5682e3907c1c78a (diff)
parent0db66d2aa3c5abe79e55017435894898a2ebe898 (diff)
downloadruamel.yaml-7b9631c9b3f987d99888dea07893d4f77d772f34.tar.gz
Merge 449_secondary_tag_url_enc
-rw-r--r--_test/test_issues.py6
-rw-r--r--_test/test_tag.py9
-rw-r--r--emitter.py3
-rw-r--r--scanner.py13
4 files changed, 27 insertions, 4 deletions
diff --git a/_test/test_issues.py b/_test/test_issues.py
index ec90555..d722b74 100644
--- a/_test/test_issues.py
+++ b/_test/test_issues.py
@@ -864,6 +864,12 @@ class TestIssues:
"""
d = na_round_trip(inp) # NOQA
+ def test_issue_449(self):
+ inp = """\
+ emoji_index: !!python/name:materialx.emoji.twemoji
+ """
+ d = na_round_trip(inp) # NOQA
+
# @pytest.mark.xfail(strict=True, reason='bla bla', raises=AssertionError)
# def test_issue_ xxx(self) -> None:
# inp = """
diff --git a/_test/test_tag.py b/_test/test_tag.py
index bb20621..40e3f69 100644
--- a/_test/test_tag.py
+++ b/_test/test_tag.py
@@ -65,6 +65,15 @@ class TestIndentFailures:
language: python
""")
+ def test_spec_6_26_tag_shorthands(self):
+ round_trip("""\
+ %TAG !e! tag:example.com,2000:app/
+ ---
+ - !local foo
+ - !!str bar
+ - !e!tag%21 baz
+ """)
+
class TestRoundTripCustom:
def test_X1(self) -> None:
diff --git a/emitter.py b/emitter.py
index 72ea661..3d168db 100644
--- a/emitter.py
+++ b/emitter.py
@@ -92,6 +92,7 @@ class Emitter:
DEFAULT_TAG_PREFIXES = {
'!': '!',
'tag:yaml.org,2002:': '!!',
+ '!!': '!!',
}
# fmt: on
@@ -955,7 +956,7 @@ class Emitter:
def prepare_tag(self, tag: Any) -> Any:
if not tag:
raise EmitterError('tag must not be empty')
- if tag == '!':
+ if tag == '!' or tag == '!!':
return tag
handle = None
suffix = tag
diff --git a/scanner.py b/scanner.py
index 09fd2ad..2bc199f 100644
--- a/scanner.py
+++ b/scanner.py
@@ -1036,6 +1036,13 @@ class Scanner:
srp = self.reader.peek
start_mark = self.reader.get_mark()
ch = srp(1)
+ short_handle = '!'
+ if ch == '!':
+ short_handle = '!!'
+ self.reader.forward()
+ srp = self.reader.peek
+ ch = srp(1)
+
if ch == '<':
handle = None
self.reader.forward(2)
@@ -1050,7 +1057,7 @@ class Scanner:
self.reader.forward()
elif ch in _THE_END_SPACE_TAB:
handle = None
- suffix = '!'
+ suffix = short_handle
self.reader.forward()
else:
length = 1
@@ -1061,11 +1068,11 @@ class Scanner:
break
length += 1
ch = srp(length)
- handle = '!'
+ handle = short_handle
if use_handle:
handle = self.scan_tag_handle('tag', start_mark)
else:
- handle = '!'
+ handle = short_handle
self.reader.forward()
suffix = self.scan_tag_uri('tag', start_mark)
ch = srp()