IncludeCPP 3.7.4__py3-none-any.whl → 3.7.6__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 CHANGED
@@ -2,7 +2,7 @@ from .core.cpp_api import CppApi
2
2
  from .core import cssl_bridge as CSSL
3
3
  import warnings
4
4
 
5
- __version__ = "3.7.4"
5
+ __version__ = "3.7.6"
6
6
  __all__ = ["CppApi", "CSSL"]
7
7
 
8
8
  # Module-level cache for C++ modules
@@ -7480,13 +7480,12 @@ def cssl_exec(path, code):
7480
7480
  # Execute
7481
7481
  click.secho("--- Output ---", fg='green')
7482
7482
  try:
7483
- result = cssl_lang.exec(source)
7483
+ result = cssl_lang.run(source)
7484
7484
 
7485
7485
  # Output is already printed to stdout during execution via runtime.output()
7486
- # No need to print buffer again - this was causing double output
7487
-
7488
- if result is not None:
7489
- click.echo(f"Result: {result}")
7486
+ # Don't print "Result:" automatically - users should use printl() for output
7487
+ # This prevents unwanted output for function calls like: Function();
7488
+ pass
7490
7489
 
7491
7490
  except Exception as e:
7492
7491
  click.secho(f"CSSL Error: {e}", fg='red')
@@ -7595,75 +7594,95 @@ def cssl_doc(search, list_sections):
7595
7594
  click.secho("=" * 50, fg='cyan')
7596
7595
  click.echo()
7597
7596
 
7598
- # Split into sections (## headers)
7599
- sections = re.split(r'(?=^## )', content, flags=re.MULTILINE)
7600
-
7601
- found_sections = []
7602
- for section in sections:
7603
- if search.lower() in section.lower():
7604
- found_sections.append(section)
7605
-
7606
- if found_sections:
7607
- # Also find specific lines with the search term
7608
- all_lines = content.split('\n')
7609
- matching_lines = []
7610
- for i, line in enumerate(all_lines):
7611
- if search.lower() in line.lower():
7612
- # Get context (2 lines before and after)
7613
- start = max(0, i - 2)
7614
- end = min(len(all_lines), i + 3)
7615
- context = '\n'.join(all_lines[start:end])
7616
- if context not in matching_lines:
7617
- matching_lines.append((i + 1, context))
7618
-
7619
- # Show summary
7620
- click.secho(f"Found in {len(found_sections)} section(s):", fg='green')
7621
- for section in found_sections:
7622
- # Extract section title
7623
- title_match = re.match(r'^##\s+(.+)$', section, re.MULTILINE)
7624
- if title_match:
7625
- click.echo(f" - {title_match.group(1)}")
7597
+ # Split into subsections (### headers) for focused results
7598
+ subsections = re.split(r'(?=^### )', content, flags=re.MULTILINE)
7626
7599
 
7627
- click.echo()
7600
+ # Also split into main sections (## headers)
7601
+ main_sections = re.split(r'(?=^## )', content, flags=re.MULTILINE)
7628
7602
 
7629
- # Show matching contexts with highlighting
7630
- click.secho("Matching content:", fg='yellow', bold=True)
7631
- click.secho("-" * 50, fg='yellow')
7603
+ # Find matching subsections (### level) - most focused
7604
+ matching_subsections = []
7605
+ for subsection in subsections:
7606
+ if search.lower() in subsection.lower():
7607
+ # Extract title
7608
+ title_match = re.match(r'^###\s+(.+)$', subsection, re.MULTILINE)
7609
+ if title_match:
7610
+ # Trim subsection to just the content until next ### or ##
7611
+ lines = subsection.split('\n')
7612
+ trimmed_lines = []
7613
+ for line in lines:
7614
+ if line.startswith('## ') and not line.startswith('### '):
7615
+ break
7616
+ trimmed_lines.append(line)
7617
+ matching_subsections.append((title_match.group(1), '\n'.join(trimmed_lines)))
7618
+
7619
+ if matching_subsections:
7620
+ click.secho(f"Found {len(matching_subsections)} matching subsection(s):", fg='green')
7621
+ click.echo()
7632
7622
 
7633
- for line_num, context in matching_lines[:15]: # Limit to 15 matches
7634
- click.echo(f"\nLine {line_num}:")
7635
- # Highlight the search term
7623
+ # Show focused subsections (limit output)
7624
+ for title, sub_content in matching_subsections[:5]:
7625
+ click.secho(f"### {title}", fg='yellow', bold=True)
7626
+ # Highlight search term in content
7636
7627
  highlighted = re.sub(
7637
7628
  f'({re.escape(search)})',
7638
7629
  click.style(r'\1', fg='green', bold=True),
7639
- context,
7630
+ sub_content,
7640
7631
  flags=re.IGNORECASE
7641
7632
  )
7642
- click.echo(highlighted)
7643
- click.echo("-" * 30)
7644
-
7645
- if len(matching_lines) > 15:
7646
- click.echo(f"\n... and {len(matching_lines) - 15} more matches")
7647
-
7648
- # Offer to show full sections
7649
- click.echo()
7650
- click.secho("Full sections containing your search:", fg='cyan')
7651
- click.echo("(Scroll or pipe to a file for full content)")
7652
- click.echo()
7653
-
7654
- for section in found_sections:
7655
- click.echo(section)
7633
+ # Limit lines per subsection
7634
+ lines = highlighted.split('\n')
7635
+ if len(lines) > 30:
7636
+ click.echo('\n'.join(lines[:30]))
7637
+ click.secho(f" ... ({len(lines) - 30} more lines)", fg='cyan')
7638
+ else:
7639
+ click.echo(highlighted)
7640
+ click.echo()
7641
+ click.secho("-" * 40, fg='cyan')
7656
7642
  click.echo()
7657
7643
 
7644
+ if len(matching_subsections) > 5:
7645
+ click.secho(f"... and {len(matching_subsections) - 5} more subsections", fg='cyan')
7646
+ click.echo("Use --list to see all sections")
7658
7647
  else:
7659
- click.secho(f"No matches found for '{search}'", fg='yellow')
7660
- click.echo()
7661
- click.echo("Try searching for:")
7662
- click.echo(" - Keywords: class, function, define, open, global")
7663
- click.echo(" - Syntax: $, @, ::, this->, <<==, <==")
7664
- click.echo(" - Types: string, int, stack, vector, map, json")
7665
- click.echo()
7666
- click.echo("Or use: includecpp cssl doc --list")
7648
+ # Fall back to main section search (## level)
7649
+ found_sections = []
7650
+ for section in main_sections:
7651
+ if search.lower() in section.lower():
7652
+ title_match = re.match(r'^##\s+(.+)$', section, re.MULTILINE)
7653
+ if title_match:
7654
+ found_sections.append((title_match.group(1), section))
7655
+
7656
+ if found_sections:
7657
+ click.secho(f"Found in {len(found_sections)} section(s):", fg='green')
7658
+ for title, _ in found_sections:
7659
+ click.echo(f" - {title}")
7660
+ click.echo()
7661
+
7662
+ # Show first matching section, trimmed
7663
+ title, section = found_sections[0]
7664
+ click.secho(f"## {title}", fg='yellow', bold=True)
7665
+ highlighted = re.sub(
7666
+ f'({re.escape(search)})',
7667
+ click.style(r'\1', fg='green', bold=True),
7668
+ section,
7669
+ flags=re.IGNORECASE
7670
+ )
7671
+ lines = highlighted.split('\n')
7672
+ if len(lines) > 40:
7673
+ click.echo('\n'.join(lines[:40]))
7674
+ click.secho(f"\n... ({len(lines) - 40} more lines in this section)", fg='cyan')
7675
+ else:
7676
+ click.echo(highlighted)
7677
+ else:
7678
+ click.secho(f"No matches found for '{search}'", fg='yellow')
7679
+ click.echo()
7680
+ click.echo("Try searching for:")
7681
+ click.echo(" - Keywords: class, function, define, open, global, shuffled")
7682
+ click.echo(" - Syntax: $, @, ::, this->, <<==, <==, #$")
7683
+ click.echo(" - Types: string, int, stack, vector, map, json")
7684
+ click.echo()
7685
+ click.echo("Or use: includecpp cssl doc --list")
7667
7686
  else:
7668
7687
  # Full documentation mode
7669
7688
  click.echo_via_pager(content)
@@ -1,6 +1,6 @@
1
1
  # CSSL - C-Style Scripting Language
2
2
 
3
- > Version 3.7.2 | A modern scripting language with C++-style syntax and unique features like CodeInfusion and BruteInjection.
3
+ > Version 3.7.6 | A modern scripting language with C++-style syntax and unique features like CodeInfusion and BruteInjection.
4
4
 
5
5
  ---
6
6
 
@@ -41,22 +41,25 @@
41
41
  ```python
42
42
  from includecpp import CSSL
43
43
 
44
- # Initialize CSSL
45
- CSSL.CsslLang()
46
-
47
- # Execute code
48
- CSSL.exec("""
44
+ # Execute code (v3.7.6+: use run() instead of exec())
45
+ CSSL.run("""
49
46
  printl("Hello CSSL!");
50
47
  """)
51
48
 
52
49
  # With parameters and return value
53
- result = CSSL.exec("""
50
+ result = CSSL.run("""
54
51
  string name = parameter.get(0);
55
52
  printl("Hello " + name);
56
53
  parameter.return(true);
57
54
  """, "World")
58
55
 
59
56
  print(result) # True
57
+
58
+ # Create typed scripts and modules (v3.7.6+)
59
+ main = CSSL.script("cssl", '''printl("Main");''')
60
+ payload = CSSL.script("cssl-pl", '''void helper() { printl("Helper!"); }''')
61
+ mod = CSSL.makemodule(main, payload, "mymod")
62
+ mod.helper() # Call function directly
60
63
  ```
61
64
 
62
65
  ### CLI Execution
@@ -701,12 +704,24 @@ super void forceRun() {
701
704
 
702
705
  ### shuffled
703
706
 
704
- Allows multiple return values.
707
+ Allows multiple return values with tuple unpacking.
705
708
 
706
709
  ```cssl
707
710
  shuffled string getNames() {
708
711
  return "Alice", "Bob", "Charlie";
709
712
  }
713
+
714
+ // Tuple unpacking (v3.7.6+)
715
+ a, b, c = getNames();
716
+ printl(a); // "Alice"
717
+ printl(b); // "Bob"
718
+ printl(c); // "Charlie"
719
+
720
+ // Works with any types
721
+ shuffled getValues() {
722
+ return "text", 42, true;
723
+ }
724
+ name, num, flag = getValues();
710
725
  ```
711
726
 
712
727
  ---
@@ -1143,6 +1158,10 @@ print(stats.total) # 50 - Persisted!
1143
1158
 
1144
1159
  CodeInfusion enables modifying functions at runtime.
1145
1160
 
1161
+ > **Important**: Injection operators must be written **without spaces**:
1162
+ > - ✓ `func() <<==` / `func() +<<==` / `func() -<<==` (correct)
1163
+ > - ✗ `func() < <==` / `func() + <<==` / `func() - <<==` (wrong)
1164
+
1146
1165
  ### <<== (Replace)
1147
1166
 
1148
1167
  Replaces function content.
@@ -1629,23 +1629,42 @@ class CSSLParser:
1629
1629
  return ASTNode('c_for_update', value={'var': var_name, 'op': 'none'})
1630
1630
 
1631
1631
  def _parse_python_style_for(self) -> ASTNode:
1632
- """Parse Python-style for loop: for (i in range(...)) { }
1632
+ """Parse Python-style for loop: for (i in range(...)) { } or for (item in collection) { }
1633
1633
 
1634
1634
  Supports:
1635
1635
  for (i in range(n)) { } - 0 to n-1
1636
1636
  for (i in range(start, end)) { } - start to end-1
1637
1637
  for (i in range(start, end, step)) { }
1638
+ for (item in collection) { } - iterate over list/vector
1639
+ for (item in @global_collection) { } - iterate over global
1638
1640
  """
1639
1641
  var_name = self._advance().value
1640
1642
  self._expect(TokenType.KEYWORD) # 'in'
1641
1643
 
1642
- # 'range' can be keyword or identifier
1644
+ # Check if this is range() or collection iteration
1645
+ is_range = False
1643
1646
  if self._check(TokenType.KEYWORD) and self._peek().value == 'range':
1644
1647
  self._advance() # consume 'range' keyword
1648
+ is_range = True
1645
1649
  elif self._check(TokenType.IDENTIFIER) and self._peek().value == 'range':
1646
1650
  self._advance() # consume 'range' identifier
1647
- else:
1648
- self.error(f"Expected 'range', got {self._peek().value}")
1651
+ is_range = True
1652
+
1653
+ # If not range, parse as collection iteration
1654
+ if not is_range:
1655
+ iterable = self._parse_expression()
1656
+ self._expect(TokenType.PAREN_END)
1657
+
1658
+ node = ASTNode('foreach', value={'var': var_name, 'iterable': iterable}, children=[])
1659
+ self._expect(TokenType.BLOCK_START)
1660
+
1661
+ while not self._check(TokenType.BLOCK_END) and not self._is_at_end():
1662
+ stmt = self._parse_statement()
1663
+ if stmt:
1664
+ node.children.append(stmt)
1665
+
1666
+ self._expect(TokenType.BLOCK_END)
1667
+ return node
1649
1668
 
1650
1669
  self._expect(TokenType.PAREN_START)
1651
1670
  first_arg = self._parse_expression()
@@ -1757,11 +1776,31 @@ class CSSLParser:
1757
1776
  return node
1758
1777
 
1759
1778
  def _parse_return(self) -> ASTNode:
1760
- value = None
1779
+ """Parse return statement, supporting multiple values for shuffled functions.
1780
+
1781
+ Syntax:
1782
+ return; // Return None
1783
+ return value; // Return single value
1784
+ return a, b, c; // Return multiple values (for shuffled)
1785
+ """
1786
+ values = []
1761
1787
  if not self._check(TokenType.SEMICOLON) and not self._check(TokenType.BLOCK_END):
1762
- value = self._parse_expression()
1788
+ values.append(self._parse_expression())
1789
+
1790
+ # Check for comma-separated return values (shuffled return)
1791
+ while self._check(TokenType.COMMA):
1792
+ self._advance() # consume comma
1793
+ values.append(self._parse_expression())
1794
+
1763
1795
  self._match(TokenType.SEMICOLON)
1764
- return ASTNode('return', value=value)
1796
+
1797
+ if len(values) == 0:
1798
+ return ASTNode('return', value=None)
1799
+ elif len(values) == 1:
1800
+ return ASTNode('return', value=values[0])
1801
+ else:
1802
+ # Multiple return values - create tuple return
1803
+ return ASTNode('return', value={'multiple': True, 'values': values})
1765
1804
 
1766
1805
  def _parse_super_function(self) -> ASTNode:
1767
1806
  """Parse super-function for .cssl-pl payload files.
@@ -1873,6 +1912,25 @@ class CSSLParser:
1873
1912
  def _parse_expression_statement(self) -> Optional[ASTNode]:
1874
1913
  expr = self._parse_expression()
1875
1914
 
1915
+ # === TUPLE UNPACKING: a, b, c = shuffled_func() ===
1916
+ # Check if we have comma-separated identifiers before =
1917
+ if expr.type == 'identifier' and self._check(TokenType.COMMA):
1918
+ targets = [expr]
1919
+ while self._match(TokenType.COMMA):
1920
+ next_expr = self._parse_expression()
1921
+ if next_expr.type == 'identifier':
1922
+ targets.append(next_expr)
1923
+ else:
1924
+ # Not a simple identifier list, this is something else
1925
+ # Restore and fall through to normal parsing
1926
+ break
1927
+
1928
+ # Check if followed by =
1929
+ if self._match(TokenType.EQUALS):
1930
+ value = self._parse_expression()
1931
+ self._match(TokenType.SEMICOLON)
1932
+ return ASTNode('tuple_assignment', value={'targets': targets, 'value': value})
1933
+
1876
1934
  # === BASIC INJECTION: <== (replace target with source) ===
1877
1935
  if self._match(TokenType.INJECT_LEFT):
1878
1936
  # Check if this is a createcmd injection with a code block
@@ -963,10 +963,20 @@ class CSSLRuntime:
963
963
 
964
964
  # Bind parameters - handle both positional and named arguments
965
965
  for i, param in enumerate(params):
966
- # Extract param name from dict format: {'name': 'a', 'type': 'int'}
967
- param_name = param['name'] if isinstance(param, dict) else param
968
-
969
- if param_name in kwargs:
966
+ # Extract param name and type from dict format: {'name': 'a', 'type': 'int'}
967
+ if isinstance(param, dict):
968
+ param_name = param['name']
969
+ param_type = param.get('type', '')
970
+ else:
971
+ param_name = param
972
+ param_type = ''
973
+
974
+ # Check if this is an 'open' parameter - receives all args as a list
975
+ if param_type == 'open' or param_name == 'Params':
976
+ # 'open Params' receives all arguments as a list
977
+ new_scope.set(param_name, list(args))
978
+ new_scope.set('Params', list(args)) # Also set 'Params' for OpenFind
979
+ elif param_name in kwargs:
970
980
  # Named argument takes priority
971
981
  new_scope.set(param_name, kwargs[param_name])
972
982
  elif i < len(args):
@@ -1176,8 +1186,20 @@ class CSSLRuntime:
1176
1186
  return None
1177
1187
 
1178
1188
  def _exec_return(self, node: ASTNode) -> Any:
1179
- """Execute return statement"""
1180
- value = self._evaluate(node.value) if node.value else None
1189
+ """Execute return statement.
1190
+
1191
+ Supports multiple return values for shuffled functions:
1192
+ return a, b, c; // Returns tuple (a, b, c)
1193
+ """
1194
+ if node.value is None:
1195
+ raise CSSLReturn(None)
1196
+
1197
+ # Check if this is a multiple return value
1198
+ if isinstance(node.value, dict) and node.value.get('multiple'):
1199
+ values = [self._evaluate(v) for v in node.value.get('values', [])]
1200
+ raise CSSLReturn(tuple(values))
1201
+
1202
+ value = self._evaluate(node.value)
1181
1203
  raise CSSLReturn(value)
1182
1204
 
1183
1205
  def _exec_break(self, node: ASTNode) -> Any:
@@ -1804,6 +1826,36 @@ class CSSLRuntime:
1804
1826
 
1805
1827
  return value
1806
1828
 
1829
+ def _exec_tuple_assignment(self, node: ASTNode) -> Any:
1830
+ """Execute tuple unpacking assignment: a, b, c = shuffled_func()
1831
+
1832
+ Used with shuffled functions that return multiple values.
1833
+ """
1834
+ targets = node.value.get('targets', [])
1835
+ value = self._evaluate(node.value.get('value'))
1836
+
1837
+ # Convert value to list if it's a tuple or iterable
1838
+ if isinstance(value, (list, tuple)):
1839
+ values = list(value)
1840
+ elif hasattr(value, '__iter__') and not isinstance(value, (str, dict)):
1841
+ values = list(value)
1842
+ else:
1843
+ # Single value - assign to first target only
1844
+ values = [value]
1845
+
1846
+ # Assign values to targets
1847
+ for i, target in enumerate(targets):
1848
+ if i < len(values):
1849
+ var_name = target.value if isinstance(target, ASTNode) else target
1850
+ self.scope.set(var_name, values[i])
1851
+ else:
1852
+ # More targets than values - set to None
1853
+ var_name = target.value if isinstance(target, ASTNode) else target
1854
+ self.scope.set(var_name, None)
1855
+
1856
+ # Assignment statements don't produce a visible result
1857
+ return None
1858
+
1807
1859
  def _exec_expression(self, node: ASTNode) -> Any:
1808
1860
  """Execute expression statement"""
1809
1861
  return self._evaluate(node.value)
@@ -6,14 +6,12 @@
6
6
  "brackets": [
7
7
  ["{", "}"],
8
8
  ["[", "]"],
9
- ["(", ")"],
10
- ["<", ">"]
9
+ ["(", ")"]
11
10
  ],
12
11
  "autoClosingPairs": [
13
12
  { "open": "{", "close": "}" },
14
13
  { "open": "[", "close": "]" },
15
14
  { "open": "(", "close": ")" },
16
- { "open": "<", "close": ">" },
17
15
  { "open": "\"", "close": "\"", "notIn": ["string"] },
18
16
  { "open": "'", "close": "'", "notIn": ["string", "comment"] }
19
17
  ],
@@ -21,7 +19,6 @@
21
19
  ["{", "}"],
22
20
  ["[", "]"],
23
21
  ["(", ")"],
24
- ["<", ">"],
25
22
  ["\"", "\""],
26
23
  ["'", "'"]
27
24
  ],
@@ -3,15 +3,18 @@
3
3
  "name": "CSSL",
4
4
  "scopeName": "source.cssl",
5
5
  "patterns": [
6
+ { "include": "#super-functions" },
6
7
  { "include": "#comments" },
7
8
  { "include": "#strings" },
8
9
  { "include": "#numbers" },
9
10
  { "include": "#class-definition" },
11
+ { "include": "#sql-types" },
10
12
  { "include": "#keywords" },
11
13
  { "include": "#types" },
12
14
  { "include": "#function-modifiers" },
13
15
  { "include": "#injection-operators" },
14
16
  { "include": "#namespace-functions" },
17
+ { "include": "#iterator-methods" },
15
18
  { "include": "#filter-helpers" },
16
19
  { "include": "#this-access" },
17
20
  { "include": "#captured-references" },
@@ -19,12 +22,26 @@
19
22
  { "include": "#shared-references" },
20
23
  { "include": "#instance-references" },
21
24
  { "include": "#module-references" },
25
+ { "include": "#reference-operator" },
26
+ { "include": "#method-calls" },
22
27
  { "include": "#function-calls" },
23
28
  { "include": "#builtins" },
24
29
  { "include": "#operators" },
25
30
  { "include": "#constants" }
26
31
  ],
27
32
  "repository": {
33
+ "super-functions": {
34
+ "patterns": [
35
+ {
36
+ "name": "markup.bold.super.builtin.cssl",
37
+ "match": "#\\$(run|exec|printl|init)\\b"
38
+ },
39
+ {
40
+ "name": "markup.bold.super.call.cssl",
41
+ "match": "#\\$[a-zA-Z_][a-zA-Z0-9_]*"
42
+ }
43
+ ]
44
+ },
28
45
  "comments": {
29
46
  "patterns": [
30
47
  {
@@ -49,6 +66,10 @@
49
66
  "name": "constant.character.escape.cssl",
50
67
  "match": "\\\\."
51
68
  },
69
+ {
70
+ "name": "variable.other.interpolated.fstring.cssl",
71
+ "match": "\\{[a-zA-Z_][a-zA-Z0-9_]*\\}"
72
+ },
52
73
  {
53
74
  "name": "variable.other.interpolated.cssl",
54
75
  "match": "<[a-zA-Z_][a-zA-Z0-9_]*>"
@@ -118,6 +139,18 @@
118
139
  }
119
140
  ]
120
141
  },
142
+ "sql-types": {
143
+ "patterns": [
144
+ {
145
+ "name": "support.type.sql.table.cssl",
146
+ "match": "\\bsql::table::(space|Section|limited|protected)\\b"
147
+ },
148
+ {
149
+ "name": "support.type.sql.cssl",
150
+ "match": "\\bsql::(table|data|data__list|sync|db)\\b"
151
+ }
152
+ ]
153
+ },
121
154
  "keywords": {
122
155
  "patterns": [
123
156
  {
@@ -130,7 +163,7 @@
130
163
  },
131
164
  {
132
165
  "name": "keyword.other.cssl",
133
- "match": "\\b(service-init|service-run|service-include|struct|structure|define|main|package|package-includes|exec|as|global|include|get|payload)\\b"
166
+ "match": "\\b(service-init|service-run|service-include|struct|structure|define|main|package|package-includes|exec|as|global|include|get|payload|convert)\\b"
134
167
  },
135
168
  {
136
169
  "name": "keyword.operator.logical.cssl",
@@ -146,18 +179,26 @@
146
179
  "patterns": [
147
180
  {
148
181
  "name": "storage.type.primitive.cssl",
149
- "match": "\\b(int|string|float|bool|void|json|dynamic)\\b"
182
+ "match": "\\b(int|string|float|bool|void|json|dynamic|auto|long|double)\\b"
150
183
  },
151
184
  {
152
185
  "name": "storage.type.container.cssl",
153
- "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|instance)\\b"
186
+ "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|instance|tuple|set|queue)\\b"
154
187
  },
155
188
  {
156
189
  "name": "storage.type.generic.cssl",
157
- "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|instance)\\s*<",
190
+ "match": "\\b(array|vector|stack|list|dictionary|dict|map|datastruct|dataspace|shuffled|iterator|combo|openquote|instance|tuple|set|queue)\\s*<",
158
191
  "captures": {
159
192
  "1": { "name": "storage.type.container.cssl" }
160
193
  }
194
+ },
195
+ {
196
+ "name": "storage.type.map-literal.cssl",
197
+ "match": "\\bmap\\s*<[^>]+>\\s*\\{"
198
+ },
199
+ {
200
+ "name": "storage.type.combo-open.cssl",
201
+ "match": "\\bcombo\\s*<\\s*open\\s*&"
161
202
  }
162
203
  ]
163
204
  },
@@ -165,19 +206,27 @@
165
206
  "patterns": [
166
207
  {
167
208
  "name": "storage.modifier.cssl",
168
- "match": "\\b(undefined|open|closed|private|virtual|meta|super|sqlbased)\\b"
209
+ "match": "\\b(undefined|open|closed|private|virtual|meta|super|sqlbased|protected|limited)\\b"
169
210
  }
170
211
  ]
171
212
  },
172
213
  "injection-operators": {
173
214
  "patterns": [
174
215
  {
175
- "name": "keyword.operator.injection.infuse.cssl",
176
- "match": "(\\+<<==|<<==|-<<==|==>>\\+|==>>|-==>>)"
216
+ "name": "entity.name.tag.infuse.cssl",
217
+ "match": "(\\+<<==|<<==|-<<==)"
218
+ },
219
+ {
220
+ "name": "entity.name.tag.infuse.out.cssl",
221
+ "match": "(==>>\\+|==>>|-==>>)"
177
222
  },
178
223
  {
179
224
  "name": "keyword.operator.injection.brute.cssl",
180
- "match": "(\\+<==|<==|-<==|==>\\+|==>|-==>)"
225
+ "match": "(\\+<==|<==|-<==)"
226
+ },
227
+ {
228
+ "name": "keyword.operator.injection.brute.out.cssl",
229
+ "match": "(==>\\+|==>|-==>)"
181
230
  },
182
231
  {
183
232
  "name": "keyword.operator.flow.cssl",
@@ -189,7 +238,7 @@
189
238
  "patterns": [
190
239
  {
191
240
  "name": "support.function.namespace.json.cssl",
192
- "match": "\\bjson::(read|write|parse|stringify|pretty|get|set|has|keys|values|merge)\\b"
241
+ "match": "\\bjson::(read|write|parse|stringify|pretty|get|set|has|keys|values|merge|key|value)\\b"
193
242
  },
194
243
  {
195
244
  "name": "support.function.namespace.instance.cssl",
@@ -198,6 +247,26 @@
198
247
  {
199
248
  "name": "support.function.namespace.string.cssl",
200
249
  "match": "\\bstring::(where|contains|not|startsWith|endsWith|length|lenght|cut|cutAfter|value)\\b"
250
+ },
251
+ {
252
+ "name": "support.function.namespace.sql.cssl",
253
+ "match": "\\bsql::(connect|load|save|update|sync|Structured)\\b"
254
+ },
255
+ {
256
+ "name": "support.function.namespace.combo.cssl",
257
+ "match": "\\bcombo::(filterdb|blocked|like)\\b"
258
+ }
259
+ ]
260
+ },
261
+ "iterator-methods": {
262
+ "patterns": [
263
+ {
264
+ "name": "support.function.iterator.cssl",
265
+ "match": "::iterator::(set|move|insert|pop|task|dtask|read|write)\\b"
266
+ },
267
+ {
268
+ "name": "support.function.like.cssl",
269
+ "match": "::like\\s*="
201
270
  }
202
271
  ]
203
272
  },
@@ -205,7 +274,7 @@
205
274
  "patterns": [
206
275
  {
207
276
  "name": "support.function.filter.cssl",
208
- "match": "\\b(string|integer|json|array|vector|combo|dynamic|sql)::(where|contains|not|startsWith|endsWith|length|lenght|key|value|index|filterdb|blocked|data)\\b"
277
+ "match": "\\[(string|integer|json|array|vector|combo|dynamic|sql)::(where|contains|not|startsWith|endsWith|length|lenght|key|value|index|filterdb|blocked|data)\\s*=?"
209
278
  }
210
279
  ]
211
280
  },
@@ -269,6 +338,22 @@
269
338
  }
270
339
  ]
271
340
  },
341
+ "reference-operator": {
342
+ "patterns": [
343
+ {
344
+ "name": "keyword.operator.reference.cssl",
345
+ "match": "&(?=[a-zA-Z_@])"
346
+ }
347
+ ]
348
+ },
349
+ "method-calls": {
350
+ "patterns": [
351
+ {
352
+ "name": "support.function.method.cssl",
353
+ "match": "\\.(push_back|append|insert|fill|at|is|read|write|content|save|where|load|update|oqt|connect|Structured|create|Queue|sync|pop|end|get|set|has|keys|values|convert)\\b"
354
+ }
355
+ ]
356
+ },
272
357
  "function-calls": {
273
358
  "patterns": [
274
359
  {
@@ -293,7 +378,7 @@
293
378
  },
294
379
  {
295
380
  "name": "support.function.builtin.special.cssl",
296
- "match": "\\b(OpenFind|share|shared)\\b"
381
+ "match": "\\b(OpenFind|share|shared|include)\\b"
297
382
  },
298
383
  {
299
384
  "name": "support.variable.builtin.parameter.cssl",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: IncludeCPP
3
- Version: 3.7.4
3
+ Version: 3.7.6
4
4
  Summary: Professional C++ Python bindings with type-generic templates, pystubs and native threading
5
5
  Home-page: https://github.com/liliassg/IncludeCPP
6
6
  Author: Lilias Hatterscheidt
@@ -1,9 +1,9 @@
1
- includecpp/__init__.py,sha256=U1Oe_B1GhcdlcFarJUW7D823p6nVlB9suWIvQhhXTmM,1672
1
+ includecpp/__init__.py,sha256=B6a0CroJHkuHfRN0gAFLyQZaafrI8Wb8pysFveVSTas,1672
2
2
  includecpp/__init__.pyi,sha256=c4gZW7_XQXcp6FBcTi5W7zXTmCtbgQhlC4cyeVqtRRM,7253
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=-fuSeL2Rrag5tBIoE5Mxz7Y4dsGA6sogwINtKWSTXFE,344523
6
+ includecpp/cli/commands.py,sha256=9PAYEMbixk2EvorcwZunSRJbyAdPSzt67NsVM5qdjLQ,346027
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
@@ -19,14 +19,14 @@ includecpp/core/exceptions.py,sha256=szeF4qdzi_q8hBBZi7mJxkliyQ0crplkLYe0ymlBGtk
19
19
  includecpp/core/path_discovery.py,sha256=jI0oSq6Hsd4LKXmU4dOiGSrXcEO_KWMXfQ5_ylBmXvU,2561
20
20
  includecpp/core/project_ui.py,sha256=la2EQZKmUkJGuJxnbs09hH1ZhBh9bfndo6okzZsk2dQ,141134
21
21
  includecpp/core/settings_ui.py,sha256=B2SlwgdplF2KiBk5UYf2l8Jjifjd0F-FmBP0DPsVCEQ,11798
22
- includecpp/core/cssl/CSSL_DOCUMENTATION.md,sha256=ect_C81V4IiMYUGNj61O2dg0SMZgO9_Sv26lkLM2qNs,40035
22
+ includecpp/core/cssl/CSSL_DOCUMENTATION.md,sha256=47sUPO-FMq_8_CrJBZFoFBgSO3gSi5zoB1Xp7oeifho,40773
23
23
  includecpp/core/cssl/__init__.py,sha256=TYRlyheTw5OYkkmUxJYpAjyyQShu6NF4igYZYE76eR0,1811
24
24
  includecpp/core/cssl/cssl_builtins.py,sha256=MJtWF7PeWkasxxkpN2zaCjeIJoQw5BPy-jQNYberMQo,85010
25
25
  includecpp/core/cssl/cssl_builtins.pyi,sha256=Zc__PCO9FDaTPPG92zgK6_QoeMohbs0xlv6YGPubEdQ,31010
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=qml36aY0j0_trVWNUH3VxexeKld429s3ucAM3FyfbIA,110619
29
- includecpp/core/cssl/cssl_runtime.py,sha256=FLsfIsLER9NTjUZw_97w3xWltVNOGsYWzCWkDMLnUQY,129599
28
+ includecpp/core/cssl/cssl_parser.py,sha256=pOWe6kle4EvXLai3DNHfLcYGeb568EQ8upxscVVR5m0,113161
29
+ includecpp/core/cssl/cssl_runtime.py,sha256=3b14wEWvLpFDVA0r0pyNqy02l7s9FTdXQd61BdpPlZg,131780
30
30
  includecpp/core/cssl/cssl_syntax.py,sha256=vgI-dgj6gs9cOHwNRff6JbwZZYW_fYutnwCkznlgZiE,17006
31
31
  includecpp/core/cssl/cssl_types.py,sha256=XftmkvjxL-mKMz6HiTtnruG6P7haM21gFm7P9Caovug,48213
32
32
  includecpp/generator/__init__.py,sha256=Rsy41bwimaEloD3gDRR_znPfIJzIsCFuWZgCTJBLJlc,62
@@ -37,13 +37,13 @@ includecpp/generator/type_resolver.h,sha256=ZsaxQqcCcKJJApYn7KOp2dLlQ1VFVG_oZDja
37
37
  includecpp/templates/cpp.proj.template,sha256=Iy-L8I4Cl3tIgBMx1Qp5h6gURvkqOAqyodVHuDJ0Luw,359
38
38
  includecpp/vscode/__init__.py,sha256=yLKw-_7MTX1Rx3jLk5JjharJQfFXbwtZVE7YqHpM7yg,39
39
39
  includecpp/vscode/cssl/__init__.py,sha256=rQJAx5X05v-mAwqX1Qb-rbZO219iR73MziFNRUCNUIo,31
40
- includecpp/vscode/cssl/language-configuration.json,sha256=vBZSVBpV0UFlTO4d0aQrhTpR4lHje0Tb2n889k9W_Uc,986
40
+ includecpp/vscode/cssl/language-configuration.json,sha256=61Q00cKI9may5L8YpxMmvfo6PAc-abdJqApfR85DWuw,904
41
41
  includecpp/vscode/cssl/package.json,sha256=MWWIRLUnGvadWzEyfWdykUZHTsrG18sqpn5US5sXqac,1435
42
42
  includecpp/vscode/cssl/snippets/cssl.snippets.json,sha256=l4SCEPR3CsPxA8HIVLKYY__I979TfKzYWtH1KYIsboo,33062
43
- includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json,sha256=FODjb4v7K9qScxmiUP4HLgTNk6nDHF_HMqUA2HfyzLM,12747
44
- includecpp-3.7.4.dist-info/licenses/LICENSE,sha256=fWCsGGsiWZir0UzDd20Hh-3wtRyk1zqUntvtVuAWhvc,1093
45
- includecpp-3.7.4.dist-info/METADATA,sha256=2FvXv35JJsnkcLsCBr0gTG6VSryzuqZUEWyVk4oNkrc,32122
46
- includecpp-3.7.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
- includecpp-3.7.4.dist-info/entry_points.txt,sha256=6A5Mif9gi0139Bf03W5plAb3wnAgbNaEVe1HJoGE-2o,59
48
- includecpp-3.7.4.dist-info/top_level.txt,sha256=RFUaR1KG-M6mCYwP6w4ydP5Cgc8yNbP78jxGAvyjMa8,11
49
- includecpp-3.7.4.dist-info/RECORD,,
43
+ includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json,sha256=t_AjAgZl16ugNhuU-OlIb4Q6SCOLsnQ3DPK2R0xotGk,16091
44
+ includecpp-3.7.6.dist-info/licenses/LICENSE,sha256=fWCsGGsiWZir0UzDd20Hh-3wtRyk1zqUntvtVuAWhvc,1093
45
+ includecpp-3.7.6.dist-info/METADATA,sha256=4GXuFRMpXcGjvxCEL0TvzbKDdW6bNUQHDJYh9bLQcao,32122
46
+ includecpp-3.7.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
+ includecpp-3.7.6.dist-info/entry_points.txt,sha256=6A5Mif9gi0139Bf03W5plAb3wnAgbNaEVe1HJoGE-2o,59
48
+ includecpp-3.7.6.dist-info/top_level.txt,sha256=RFUaR1KG-M6mCYwP6w4ydP5Cgc8yNbP78jxGAvyjMa8,11
49
+ includecpp-3.7.6.dist-info/RECORD,,