|
1 | 1 | # Copyright: 2011,2012 MoinMoin:ThomasWaldmann |
| 2 | +# Copyright: 2024 MoinMoin:UlrichB |
2 | 3 | # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. |
3 | 4 |
|
4 | 5 | """ |
@@ -110,6 +111,23 @@ def name_validator(element, state): |
110 | 111 | return True |
111 | 112 |
|
112 | 113 |
|
| 114 | +def itemlink_validator(element, state): |
| 115 | + """an itemlink""" |
| 116 | + if element.raw is Unset: |
| 117 | + element.set(state[keys.NAME]) |
| 118 | + v = element.value |
| 119 | + if not isinstance(v, str): |
| 120 | + return False |
| 121 | + if v != v.strip(): |
| 122 | + return False |
| 123 | + if v.startswith("/") or v.endswith("/"): |
| 124 | + element.add_error("Itemlink may not start or end with '/'.") |
| 125 | + return False |
| 126 | + if "//" in v: # empty ancestor name is invalid |
| 127 | + return False |
| 128 | + return True |
| 129 | + |
| 130 | + |
113 | 131 | def tag_validator(element, state): |
114 | 132 | """ |
115 | 133 | a tag |
@@ -395,7 +413,7 @@ def subscription_validator(element, state): |
395 | 413 | String.named(keys.HASH_ALGORITHM).validated_by(hash_validator), |
396 | 414 | String.named(keys.DATAID).validated_by(uuid_validator).using(optional=True), |
397 | 415 | # markup items may have this: |
398 | | - List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(wikiname_validator)).using(optional=True), |
| 416 | + List.named(keys.ITEMLINKS).of(String.named("itemlink").validated_by(itemlink_validator)).using(optional=True), |
399 | 417 | List.named(keys.ITEMTRANSCLUSIONS) |
400 | 418 | .of(String.named("itemtransclusion").validated_by(wikiname_validator)) |
401 | 419 | .using(optional=True), |
|
0 commit comments