|
20 | 20 | from qgis.PyQt.Qt import QPointF, QSize, QFont, QFontDatabase, QColor, QImage, QRegularExpression
|
21 | 21 | from qgis.core import *
|
22 | 22 | from .. import utils
|
| 23 | +from itertools import repeat |
23 | 24 |
|
24 | 25 |
|
25 | 26 | class PropertyType(enum.Enum):
|
@@ -1134,6 +1135,12 @@ def parse_discrete(json_list: list, context: QgsMapBoxGlStyleConversionContext):
|
1134 | 1135 | return case_str
|
1135 | 1136 |
|
1136 | 1137 |
|
| 1138 | +def parse_concat(json_list: list, context: QgsMapBoxGlStyleConversionContext): |
| 1139 | + concat_items = list(map(parse_expression, json_list[1:], repeat(context))) |
| 1140 | + concat_str = f"concat({','.join(concat_items)})" |
| 1141 | + return concat_str |
| 1142 | + |
| 1143 | + |
1137 | 1144 | def parse_array_stops(stops: list, multiplier: (int, float)):
|
1138 | 1145 | if len(stops) < 2:
|
1139 | 1146 | return
|
@@ -1375,6 +1382,9 @@ def parse_join_style(style: str):
|
1375 | 1382 |
|
1376 | 1383 | def parse_expression(json_expr, context):
|
1377 | 1384 | """ Parses expression into QGIS expression string """
|
| 1385 | + if isinstance(json_expr, str): |
| 1386 | + return QgsExpression.quotedValue(json_expr) |
| 1387 | + |
1378 | 1388 | op = json_expr[0]
|
1379 | 1389 |
|
1380 | 1390 | if op in ('all', "any", "none"):
|
@@ -1455,6 +1465,8 @@ def parse_expression(json_expr, context):
|
1455 | 1465 | elif op == "literal":
|
1456 | 1466 | field_name, field_is_expression = process_label_field(json_expr[1])
|
1457 | 1467 | return field_name
|
| 1468 | + elif op == "concat": |
| 1469 | + return parse_concat(json_expr, context) |
1458 | 1470 | else:
|
1459 | 1471 | context.pushWarning(f"{context.layerId()}: Skipping unsupported expression.")
|
1460 | 1472 | return
|
|
0 commit comments