diff options
author | Anthon van der Neut <anthon@mnt.org> | 2023-05-01 22:05:11 +0200 |
---|---|---|
committer | Anthon van der Neut <anthon@mnt.org> | 2023-05-01 22:05:11 +0200 |
commit | 7b9631c9b3f987d99888dea07893d4f77d772f34 (patch) | |
tree | 705d82c3d60faaa5007ebb692e24d2ef8184e126 | |
parent | 913318287aacca50246fd44fa5682e3907c1c78a (diff) | |
parent | 0db66d2aa3c5abe79e55017435894898a2ebe898 (diff) | |
download | ruamel.yaml-7b9631c9b3f987d99888dea07893d4f77d772f34.tar.gz |
Merge 449_secondary_tag_url_enc
-rw-r--r-- | _test/test_issues.py | 6 | ||||
-rw-r--r-- | _test/test_tag.py | 9 | ||||
-rw-r--r-- | emitter.py | 3 | ||||
-rw-r--r-- | scanner.py | 13 |
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: @@ -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 @@ -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() |