IncludeCPP 3.7.21__py3-none-any.whl → 3.7.22__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- includecpp/__init__.py +1 -1
- includecpp/cli/commands.py +7 -1
- includecpp/core/cssl/cssl_parser.py +9 -5
- includecpp/core/cssl/cssl_runtime.py +134 -13
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/METADATA +1 -1
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/RECORD +10 -10
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/WHEEL +0 -0
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/entry_points.txt +0 -0
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/licenses/LICENSE +0 -0
- {includecpp-3.7.21.dist-info → includecpp-3.7.22.dist-info}/top_level.txt +0 -0
includecpp/__init__.py
CHANGED
includecpp/cli/commands.py
CHANGED
|
@@ -7720,7 +7720,13 @@ def cssl_doc(search, list_sections):
|
|
|
7720
7720
|
click.echo("Or use: includecpp cssl doc --list")
|
|
7721
7721
|
else:
|
|
7722
7722
|
# Full documentation mode
|
|
7723
|
-
|
|
7723
|
+
# Replace Unicode characters that may not be supported on all terminals
|
|
7724
|
+
safe_content = content.replace('✓', '[OK]').replace('✗', '[X]').replace('→', '->').replace('←', '<-').replace('•', '*').replace('─', '-').replace('│', '|').replace('└', '+').replace('├', '+').replace('▸', '>').replace('▾', 'v')
|
|
7725
|
+
try:
|
|
7726
|
+
click.echo_via_pager(safe_content)
|
|
7727
|
+
except UnicodeEncodeError:
|
|
7728
|
+
# Fallback: encode with errors='replace'
|
|
7729
|
+
click.echo(safe_content.encode('ascii', errors='replace').decode('ascii'))
|
|
7724
7730
|
else:
|
|
7725
7731
|
click.secho("Documentation file not found.", fg='yellow')
|
|
7726
7732
|
click.echo("Looking for: CSSL_DOCUMENTATION.md")
|
|
@@ -252,8 +252,15 @@ class CSSLLexer:
|
|
|
252
252
|
# $<name> shared object reference
|
|
253
253
|
self._read_shared_ref()
|
|
254
254
|
elif char == '%':
|
|
255
|
-
# %<name> captured reference
|
|
256
|
-
self.
|
|
255
|
+
# Check if this is %<name> captured reference or % modulo operator
|
|
256
|
+
next_char = self._peek(1)
|
|
257
|
+
if next_char and (next_char.isalpha() or next_char == '_'):
|
|
258
|
+
# %<name> captured reference (for infusion)
|
|
259
|
+
self._read_captured_ref()
|
|
260
|
+
else:
|
|
261
|
+
# % modulo operator
|
|
262
|
+
self._add_token(TokenType.MODULO, '%')
|
|
263
|
+
self._advance()
|
|
257
264
|
elif char == '&':
|
|
258
265
|
# & for references
|
|
259
266
|
if self._peek(1) == '&':
|
|
@@ -321,9 +328,6 @@ class CSSLLexer:
|
|
|
321
328
|
else:
|
|
322
329
|
# Already handled by // comment check above, but just in case
|
|
323
330
|
self._skip_comment()
|
|
324
|
-
elif char == '%':
|
|
325
|
-
self._add_token(TokenType.MODULO, '%')
|
|
326
|
-
self._advance()
|
|
327
331
|
elif char == '<':
|
|
328
332
|
self._read_less_than()
|
|
329
333
|
elif char == '>':
|
|
@@ -1554,13 +1554,112 @@ class CSSLRuntime:
|
|
|
1554
1554
|
|
|
1555
1555
|
# === DYNAMIC HELPERS ===
|
|
1556
1556
|
elif filter_type == 'dynamic':
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1557
|
+
if helper == 'content':
|
|
1558
|
+
# dynamic::content=VALUE - General content filter for any type
|
|
1559
|
+
# Filters elements where content equals VALUE
|
|
1560
|
+
if isinstance(result, (list, tuple)):
|
|
1561
|
+
# Filter list/tuple elements by content value
|
|
1562
|
+
result = [item for item in result if item == filter_val]
|
|
1563
|
+
elif isinstance(result, dict):
|
|
1564
|
+
# Filter dict by values matching filter_val
|
|
1565
|
+
result = {k: v for k, v in result.items() if v == filter_val}
|
|
1566
|
+
elif result == filter_val:
|
|
1567
|
+
pass # Keep result if it matches
|
|
1568
|
+
else:
|
|
1569
|
+
result = None
|
|
1570
|
+
elif helper == 'not':
|
|
1571
|
+
# dynamic::not=VALUE - Exclude elements equal to VALUE
|
|
1572
|
+
if isinstance(result, (list, tuple)):
|
|
1573
|
+
result = [item for item in result if item != filter_val]
|
|
1574
|
+
elif isinstance(result, dict):
|
|
1575
|
+
result = {k: v for k, v in result.items() if v != filter_val}
|
|
1576
|
+
elif result != filter_val:
|
|
1577
|
+
pass # Keep result if it doesn't match
|
|
1578
|
+
else:
|
|
1579
|
+
result = None
|
|
1580
|
+
elif helper == 'gt':
|
|
1581
|
+
# dynamic::gt=VALUE - Greater than
|
|
1582
|
+
if isinstance(result, (list, tuple)):
|
|
1583
|
+
result = [item for item in result if item > filter_val]
|
|
1584
|
+
elif result > filter_val:
|
|
1585
|
+
pass
|
|
1586
|
+
else:
|
|
1587
|
+
result = None
|
|
1588
|
+
elif helper == 'lt':
|
|
1589
|
+
# dynamic::lt=VALUE - Less than
|
|
1590
|
+
if isinstance(result, (list, tuple)):
|
|
1591
|
+
result = [item for item in result if item < filter_val]
|
|
1592
|
+
elif result < filter_val:
|
|
1593
|
+
pass
|
|
1594
|
+
else:
|
|
1595
|
+
result = None
|
|
1596
|
+
elif helper == 'gte':
|
|
1597
|
+
# dynamic::gte=VALUE - Greater than or equal
|
|
1598
|
+
if isinstance(result, (list, tuple)):
|
|
1599
|
+
result = [item for item in result if item >= filter_val]
|
|
1600
|
+
elif result >= filter_val:
|
|
1601
|
+
pass
|
|
1602
|
+
else:
|
|
1603
|
+
result = None
|
|
1604
|
+
elif helper == 'lte':
|
|
1605
|
+
# dynamic::lte=VALUE - Less than or equal
|
|
1606
|
+
if isinstance(result, (list, tuple)):
|
|
1607
|
+
result = [item for item in result if item <= filter_val]
|
|
1608
|
+
elif result <= filter_val:
|
|
1609
|
+
pass
|
|
1610
|
+
else:
|
|
1611
|
+
result = None
|
|
1612
|
+
elif helper == 'mod':
|
|
1613
|
+
# dynamic::mod=VALUE - Modulo filter (item % VALUE == 0)
|
|
1614
|
+
if isinstance(result, (list, tuple)):
|
|
1615
|
+
result = [item for item in result if isinstance(item, (int, float)) and item % filter_val == 0]
|
|
1616
|
+
elif isinstance(result, (int, float)) and result % filter_val == 0:
|
|
1617
|
+
pass
|
|
1618
|
+
else:
|
|
1619
|
+
result = None
|
|
1620
|
+
elif helper == 'range':
|
|
1621
|
+
# dynamic::range="min:max" - Filter values in range
|
|
1622
|
+
if isinstance(filter_val, str) and ':' in filter_val:
|
|
1623
|
+
parts = filter_val.split(':')
|
|
1624
|
+
min_val = int(parts[0]) if parts[0] else None
|
|
1625
|
+
max_val = int(parts[1]) if parts[1] else None
|
|
1626
|
+
if isinstance(result, (list, tuple)):
|
|
1627
|
+
def in_range(x):
|
|
1628
|
+
if min_val is not None and x < min_val:
|
|
1629
|
+
return False
|
|
1630
|
+
if max_val is not None and x > max_val:
|
|
1631
|
+
return False
|
|
1632
|
+
return True
|
|
1633
|
+
result = [item for item in result if in_range(item)]
|
|
1634
|
+
elif isinstance(result, (int, float)):
|
|
1635
|
+
if min_val is not None and result < min_val:
|
|
1636
|
+
result = None
|
|
1637
|
+
elif max_val is not None and result > max_val:
|
|
1638
|
+
result = None
|
|
1639
|
+
elif helper == 'even':
|
|
1640
|
+
# dynamic::even - Filter even numbers
|
|
1641
|
+
if isinstance(result, (list, tuple)):
|
|
1642
|
+
result = [item for item in result if isinstance(item, int) and item % 2 == 0]
|
|
1643
|
+
elif isinstance(result, int) and result % 2 == 0:
|
|
1644
|
+
pass
|
|
1645
|
+
else:
|
|
1646
|
+
result = None
|
|
1647
|
+
elif helper == 'odd':
|
|
1648
|
+
# dynamic::odd - Filter odd numbers
|
|
1649
|
+
if isinstance(result, (list, tuple)):
|
|
1650
|
+
result = [item for item in result if isinstance(item, int) and item % 2 != 0]
|
|
1651
|
+
elif isinstance(result, int) and result % 2 != 0:
|
|
1652
|
+
pass
|
|
1653
|
+
else:
|
|
1654
|
+
result = None
|
|
1562
1655
|
else:
|
|
1563
|
-
|
|
1656
|
+
# dynamic::VarName=VALUE - Match if variable equals value
|
|
1657
|
+
var_name = helper
|
|
1658
|
+
var_value = self.scope.get(var_name)
|
|
1659
|
+
if var_value == filter_val:
|
|
1660
|
+
pass # Keep result
|
|
1661
|
+
else:
|
|
1662
|
+
result = None
|
|
1564
1663
|
|
|
1565
1664
|
# === SQL HELPERS ===
|
|
1566
1665
|
elif filter_type == 'sql':
|
|
@@ -1853,14 +1952,36 @@ class CSSLRuntime:
|
|
|
1853
1952
|
final_value = [current_value, source]
|
|
1854
1953
|
elif mode == 'move':
|
|
1855
1954
|
final_value = source
|
|
1856
|
-
#
|
|
1955
|
+
# Remove filtered elements from source (not clear entirely)
|
|
1857
1956
|
if isinstance(source_node, ASTNode):
|
|
1858
|
-
if
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1957
|
+
if filter_info:
|
|
1958
|
+
# Get original source value
|
|
1959
|
+
original_source = self._evaluate(source_node)
|
|
1960
|
+
if isinstance(original_source, list) and isinstance(final_value, list):
|
|
1961
|
+
# Remove filtered items from original list
|
|
1962
|
+
remaining = [item for item in original_source if item not in final_value]
|
|
1963
|
+
if source_node.type == 'identifier':
|
|
1964
|
+
self.scope.set(source_node.value, remaining)
|
|
1965
|
+
elif source_node.type == 'module_ref':
|
|
1966
|
+
self._set_module_value(source_node.value, remaining)
|
|
1967
|
+
elif source_node.type == 'member_access':
|
|
1968
|
+
self._set_member(source_node, remaining)
|
|
1969
|
+
else:
|
|
1970
|
+
# Single value filter - set source to None
|
|
1971
|
+
if source_node.type == 'identifier':
|
|
1972
|
+
self.scope.set(source_node.value, None)
|
|
1973
|
+
elif source_node.type == 'module_ref':
|
|
1974
|
+
self._set_module_value(source_node.value, None)
|
|
1975
|
+
elif source_node.type == 'member_access':
|
|
1976
|
+
self._set_member(source_node, None)
|
|
1977
|
+
else:
|
|
1978
|
+
# No filter - clear entire source
|
|
1979
|
+
if source_node.type == 'identifier':
|
|
1980
|
+
self.scope.set(source_node.value, None)
|
|
1981
|
+
elif source_node.type == 'module_ref':
|
|
1982
|
+
self._set_module_value(source_node.value, None)
|
|
1983
|
+
elif source_node.type == 'member_access':
|
|
1984
|
+
self._set_member(source_node, None)
|
|
1864
1985
|
else:
|
|
1865
1986
|
final_value = source
|
|
1866
1987
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
includecpp/__init__.py,sha256=
|
|
1
|
+
includecpp/__init__.py,sha256=I8UAmvZc1D4Tu6GT2QK0sNoj4q5i2dhrR0Isyb0tJRA,1673
|
|
2
2
|
includecpp/__init__.pyi,sha256=uSDYlbqd2TinmrdepmE_zvN25jd3Co2cgyPzXgDpopM,7193
|
|
3
3
|
includecpp/__main__.py,sha256=d6QK0PkvUe1ENofpmHRAg3bwNbZr8PiRscfI3-WRfVg,72
|
|
4
4
|
includecpp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
includecpp/cli/__init__.py,sha256=Yda-4a5QJb_tKu35YQNfc5lu-LewTsM5abqNNkzS47M,113
|
|
6
|
-
includecpp/cli/commands.py,sha256=
|
|
6
|
+
includecpp/cli/commands.py,sha256=HDoRuPEPTzxZQcR4rF45GrRVtcw3zDj6cGiwLCZB44Y,349597
|
|
7
7
|
includecpp/cli/config_parser.py,sha256=KveeYUg2TA9sC5hKVzYYfgdNm2WfLG5y7_yxgBWn9yM,4886
|
|
8
8
|
includecpp/core/__init__.py,sha256=L1bT6oikTjdto-6Px7DpjePtM07ymo3Bnov1saZzsGg,390
|
|
9
9
|
includecpp/core/ai_integration.py,sha256=PW6yFDqdXjfchpfKTKg59AOLhLry9kqJEGf_65BztrY,87603
|
|
@@ -25,8 +25,8 @@ includecpp/core/cssl/cssl_builtins.py,sha256=r-FX4WQeKxerkepqodIiwhtL_kxxa4PJym_
|
|
|
25
25
|
includecpp/core/cssl/cssl_builtins.pyi,sha256=3ai2V4LyhzPBhAKjRRf0rLVu_bg9ECmTfTkdFKM64iA,127430
|
|
26
26
|
includecpp/core/cssl/cssl_events.py,sha256=nupIcXW_Vjdud7zCU6hdwkQRQ0MujlPM7Tk2u7eDAiY,21013
|
|
27
27
|
includecpp/core/cssl/cssl_modules.py,sha256=cUg0-zdymMnWWTsA_BUrW5dx4R04dHpKcUhm-Wfiwwo,103006
|
|
28
|
-
includecpp/core/cssl/cssl_parser.py,sha256=
|
|
29
|
-
includecpp/core/cssl/cssl_runtime.py,sha256=
|
|
28
|
+
includecpp/core/cssl/cssl_parser.py,sha256=G9DxPLcmR7rhQvrxskp4Y8l8nXQy0tymkUVpsWWS6VM,116027
|
|
29
|
+
includecpp/core/cssl/cssl_runtime.py,sha256=1z_TecgGmMjiO5RiI_eQeebToyFKZvdpbFU61b6XRUQ,152125
|
|
30
30
|
includecpp/core/cssl/cssl_syntax.py,sha256=bgo3NFehoPTQa5dqwNd_CstkVGVCNYAXbGYUcu5BEN0,16982
|
|
31
31
|
includecpp/core/cssl/cssl_types.py,sha256=gVjtfxk0Uzfj-H7_LD79oqspFMYDf79ZrRrlZk8eAEs,50647
|
|
32
32
|
includecpp/generator/__init__.py,sha256=Rsy41bwimaEloD3gDRR_znPfIJzIsCFuWZgCTJBLJlc,62
|
|
@@ -43,9 +43,9 @@ includecpp/vscode/cssl/images/cssl.png,sha256=BxAGsnfS0ZzzCvqV6Zb1OAJAZpDUoXlR86
|
|
|
43
43
|
includecpp/vscode/cssl/images/cssl_pl.png,sha256=z4WMk7g6YCTbUUbSFk343BO6yi_OmNEVYkRenWGydwM,799
|
|
44
44
|
includecpp/vscode/cssl/snippets/cssl.snippets.json,sha256=l4SCEPR3CsPxA8HIVLKYY__I979TfKzYWtH1KYIsboo,33062
|
|
45
45
|
includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json,sha256=XKRLBOHlCqDDnGPvmNHDQPsIMR1UD9PBaJIlgZOiPqM,21173
|
|
46
|
-
includecpp-3.7.
|
|
47
|
-
includecpp-3.7.
|
|
48
|
-
includecpp-3.7.
|
|
49
|
-
includecpp-3.7.
|
|
50
|
-
includecpp-3.7.
|
|
51
|
-
includecpp-3.7.
|
|
46
|
+
includecpp-3.7.22.dist-info/licenses/LICENSE,sha256=fWCsGGsiWZir0UzDd20Hh-3wtRyk1zqUntvtVuAWhvc,1093
|
|
47
|
+
includecpp-3.7.22.dist-info/METADATA,sha256=XgO09qXzPsH5vKUtuvQ8ptcv9plaocylViuM4c4V2p0,32122
|
|
48
|
+
includecpp-3.7.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
49
|
+
includecpp-3.7.22.dist-info/entry_points.txt,sha256=6A5Mif9gi0139Bf03W5plAb3wnAgbNaEVe1HJoGE-2o,59
|
|
50
|
+
includecpp-3.7.22.dist-info/top_level.txt,sha256=RFUaR1KG-M6mCYwP6w4ydP5Cgc8yNbP78jxGAvyjMa8,11
|
|
51
|
+
includecpp-3.7.22.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|