From 9e929f43e73dcdada925eabbc641133414ddef33 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sun, 26 Jul 2020 17:38:23 +0300 Subject: [PATCH 01/18] ArrFilter ArrTransform --- .../SortArrays/QuickSortFunctional.pas | 13 ++---- bin/Lib/PABCSystem.pas | 46 ++++++++++--------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas b/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas index e57eef174..349681aab 100644 --- a/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas +++ b/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas @@ -1,13 +1,10 @@ // Быстрая сортировка Ч. Хоара -// Неэффективный алгоритм, иллюстрирующмй суть -function QS(a: array of integer): array of integer; -begin +// Неэффективный код, иллюстрирующий суть алгоритма +function QS(a: array of integer): array of integer := if a.Length < 2 then - Result := a - else Result := QS(a[1:].Where(y->y<=a[0]).ToArray) + |a[0]| + QS(a[1:].Where(y->y>a[0]).ToArray) - //QS(ArrGen(a[1:],y->y<=a[0])) - //QS(|y:y in a[1:] where y<=a[0]|) -end; + a + else + QS(ArrFilter(a[1:],y->y<=a[0])) + |a[0]| + QS(ArrFilter(a[1:],y->y>a[0])); begin var a := ArrRandom(20); diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index c0d260e4a..a29ade576 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -2224,6 +2224,11 @@ function ArrGen(count: integer; first, second: T; next: (T,T) ->T): array of /// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; +/// Возвращает массив из элементов массива a, удовлетворяющих условию condition +function ArrFilter(a: array of T; condition: T->boolean): array of T; +/// Возвращает по массиву a массив, преобразованный по правилу convert +function ArrTransform(a: array of T; convert: T->T1): array of T1; + /// Возвращает массив из n целых, введенных с клавиатуры function ReadArrInteger(n: integer): array of integer; /// Возвращает массив из n целых int64, введенных с клавиатуры @@ -4732,32 +4737,29 @@ begin Result := a; end; -{function ListWhile(first: T; next: Func; pred: Predicate): List; +function ArrTransform(a: array of T; convert: T->T1): array of T1; begin - var a := new List; - var x := first; - while pred(x) do - begin - a.Add(x); - x := next(x); - end; - Result := a; + var n := a.Length; + var a1 := new T1[n]; + for var i:=0 to n-1 do + a1[i] := convert(a[i]); + Result := a1; end; -function ListWhile(first,second: T; next: Func2; pred: Predicate): List; +function ArrFilter(a: array of T; condition: T->boolean): array of T; begin - var a := new List; - var x := first; - var y := second; - while pred(x) do - begin - a.Add(x); - var z := next(x,y); - x := y; - y := z; - end; - Result := a; -end;} + var n := a.Length; + var a1 := new T[n]; + var j := 0; + for var i:=0 to n-1 do + if condition(a[i]) then + begin + a1[j] := a[i]; + j += 1; + end; + SetLength(a1,j); + Result := a1; +end; function ArrFill(count: integer; x: T): array of T; begin From 9ae473518a137c9c7e2aefed29836abb25236e5b Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Mon, 27 Jul 2020 10:13:32 +0300 Subject: [PATCH 02/18] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20ArrFilte?= =?UTF-8?q?r=20=D0=B8=20ArrTransform.=20=D0=95=D1=81=D1=82=D1=8C=20=D1=81?= =?UTF-8?q?=D0=B8=D0=BD=D0=BE=D0=BD=D0=B8=D0=BC=D1=8B:=20a.ConvertAll=20?= =?UTF-8?q?=D0=B8=20a.FindAll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- .../SortArrays/QuickSortFunctional.pas | 2 +- Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/PABCSystem.pas | 46 ++++++++++--------- bin/Lib/PABCSystem.pas | 14 +++--- 7 files changed, 38 insertions(+), 34 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 8bbcf8c3d..2982cadff 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2595"; + public const string Revision = "2596"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 4f169b13c..7ee14efe4 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=6 -%REVISION%=2595 %COREVERSION%=3 +%REVISION%=2596 +%MINOR%=6 %MAJOR%=3 diff --git a/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas b/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas index 349681aab..d9e929a2b 100644 --- a/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas +++ b/InstallerSamples/Algorithms/SortArrays/QuickSortFunctional.pas @@ -4,7 +4,7 @@ function QS(a: array of integer): array of integer := if a.Length < 2 then a else - QS(ArrFilter(a[1:],y->y<=a[0])) + |a[0]| + QS(ArrFilter(a[1:],y->y>a[0])); + QS(a[1:].FindAll(y->y<=a[0])) + a[:1] + QS(a[1:].FindAll(y->y>a[0])); begin var a := ArrRandom(20); diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 15b13dd63..02eba4a48 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2595 +3.6.3.2596 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index d22bcb03c..0e67ff2a5 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2595' +!define VERSION '3.6.3.2596' diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index c0d260e4a..a29ade576 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2224,6 +2224,11 @@ function ArrGen(count: integer; first, second: T; next: (T,T) ->T): array of /// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; +/// Возвращает массив из элементов массива a, удовлетворяющих условию condition +function ArrFilter(a: array of T; condition: T->boolean): array of T; +/// Возвращает по массиву a массив, преобразованный по правилу convert +function ArrTransform(a: array of T; convert: T->T1): array of T1; + /// Возвращает массив из n целых, введенных с клавиатуры function ReadArrInteger(n: integer): array of integer; /// Возвращает массив из n целых int64, введенных с клавиатуры @@ -4732,32 +4737,29 @@ begin Result := a; end; -{function ListWhile(first: T; next: Func; pred: Predicate): List; +function ArrTransform(a: array of T; convert: T->T1): array of T1; begin - var a := new List; - var x := first; - while pred(x) do - begin - a.Add(x); - x := next(x); - end; - Result := a; + var n := a.Length; + var a1 := new T1[n]; + for var i:=0 to n-1 do + a1[i] := convert(a[i]); + Result := a1; end; -function ListWhile(first,second: T; next: Func2; pred: Predicate): List; +function ArrFilter(a: array of T; condition: T->boolean): array of T; begin - var a := new List; - var x := first; - var y := second; - while pred(x) do - begin - a.Add(x); - var z := next(x,y); - x := y; - y := z; - end; - Result := a; -end;} + var n := a.Length; + var a1 := new T[n]; + var j := 0; + for var i:=0 to n-1 do + if condition(a[i]) then + begin + a1[j] := a[i]; + j += 1; + end; + SetLength(a1,j); + Result := a1; +end; function ArrFill(count: integer; x: T): array of T; begin diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index a29ade576..bfef6f463 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -2224,10 +2224,12 @@ function ArrGen(count: integer; first, second: T; next: (T,T) ->T): array of /// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; -/// Возвращает массив из элементов массива a, удовлетворяющих условию condition -function ArrFilter(a: array of T; condition: T->boolean): array of T; -/// Возвращает по массиву a массив, преобразованный по правилу convert -function ArrTransform(a: array of T; convert: T->T1): array of T1; +// Возвращает массив из элементов массива a, удовлетворяющих условию condition +// a.FindAll +//function ArrFilter(a: array of T; condition: T->boolean): array of T; +// Возвращает по массиву a массив, преобразованный по правилу convert +// a.ConvertAll +//function ArrTransform(a: array of T; convert: T->T1): array of T1; /// Возвращает массив из n целых, введенных с клавиатуры function ReadArrInteger(n: integer): array of integer; @@ -4737,7 +4739,7 @@ begin Result := a; end; -function ArrTransform(a: array of T; convert: T->T1): array of T1; +{function ArrTransform(a: array of T; convert: T->T1): array of T1; begin var n := a.Length; var a1 := new T1[n]; @@ -4759,7 +4761,7 @@ begin end; SetLength(a1,j); Result := a1; -end; +end;} function ArrFill(count: integer; x: T): array of T; begin From 85b2d98f2e4ba6153ad0304063e865687a95dabf Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Mon, 27 Jul 2020 23:13:08 +0300 Subject: [PATCH 03/18] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- Localization/DefaultLang.resources | Bin 94998 -> 95065 bytes Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- .../StandardSyntaxConverter.cs | 2 +- TestSuite/CompilationSamples/PABCSystem.pas | 14 +- .../Closure/CapturedVariablesTreeBuilder.cs | 5 + .../TreeConversion/syntax_tree_visitor.cs | 201 +++++++++++++++--- bin/Lng/Eng/SemanticErrors_ms.dat | 1 + bin/Lng/Rus/SemanticErrors_ms.dat | 1 + 11 files changed, 189 insertions(+), 45 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2982cadff..2be4eddb3 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2596"; + public const string Revision = "2603"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 7ee14efe4..e736c766f 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=2596 %MINOR%=6 +%REVISION%=2603 +%COREVERSION%=3 %MAJOR%=3 diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index da4f35610833b739db6184f12e140301aaf8c46a..8fa9e22ca7ddaeb9848375774ee04200ecbb72b4 100644 GIT binary patch delta 70 zcmV-M0J;B`<^|d21(4tYb+O@sn-En{OhsQ$QeRU=QB_4wLq(GTToWDY?(p*E<{;?n c=pgUz@$2Q}?&9F`cvtXRI)&Th`UH||9 delta 19 bcmccljCI;G)(H<7jW#}Pn!S11oXyt&YBmcN diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 02eba4a48..cdb9ce778 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2596 +3.6.3.2603 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 0e67ff2a5..0fa7746b4 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2596' +!define VERSION '3.6.3.2603' diff --git a/SyntaxTreeConverters/StandardSyntaxConverter.cs b/SyntaxTreeConverters/StandardSyntaxConverter.cs index d9b886219..ddccb9410 100644 --- a/SyntaxTreeConverters/StandardSyntaxConverter.cs +++ b/SyntaxTreeConverters/StandardSyntaxConverter.cs @@ -45,7 +45,7 @@ namespace PascalABCCompiler.SyntaxTreeConverters IndexVisitor.New.ProcessNode(root); // assign_tuple и assign_var_tuple - AssignTuplesDesugarVisitor.New.ProcessNode(root); + //AssignTuplesDesugarVisitor.New.ProcessNode(root); // slice_expr и slice_expr_question SliceDesugarVisitor.New.ProcessNode(root); diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index a29ade576..bfef6f463 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2224,10 +2224,12 @@ function ArrGen(count: integer; first, second: T; next: (T,T) ->T): array of /// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; -/// Возвращает массив из элементов массива a, удовлетворяющих условию condition -function ArrFilter(a: array of T; condition: T->boolean): array of T; -/// Возвращает по массиву a массив, преобразованный по правилу convert -function ArrTransform(a: array of T; convert: T->T1): array of T1; +// Возвращает массив из элементов массива a, удовлетворяющих условию condition +// a.FindAll +//function ArrFilter(a: array of T; condition: T->boolean): array of T; +// Возвращает по массиву a массив, преобразованный по правилу convert +// a.ConvertAll +//function ArrTransform(a: array of T; convert: T->T1): array of T1; /// Возвращает массив из n целых, введенных с клавиатуры function ReadArrInteger(n: integer): array of integer; @@ -4737,7 +4739,7 @@ begin Result := a; end; -function ArrTransform(a: array of T; convert: T->T1): array of T1; +{function ArrTransform(a: array of T; convert: T->T1): array of T1; begin var n := a.Length; var a1 := new T1[n]; @@ -4759,7 +4761,7 @@ begin end; SetLength(a1,j); Result := a1; -end; +end;} function ArrFill(count: integer; x: T): array of T; begin diff --git a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs index f3675450b..e9b677fda 100644 --- a/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs +++ b/TreeConverter/LambdaExpressions/Closure/CapturedVariablesTreeBuilder.cs @@ -69,6 +69,11 @@ namespace TreeConverter.LambdaExpressions.Closure // Не обходить проверочные узлы в визиторе строительства дерева - SSM 1.05.17 } + public override void visit(assign_var_tuple assvartup) + { + _visitor.ProcessNode(assvartup); + } + public override void visit(var_def_statement varDefStmt) { if (varDefStmt.inital_value != null) diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 5fa78dc93..dc4ffd6fb 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -17439,6 +17439,44 @@ namespace PascalABCCompiler.TreeConverter throw new NotSupportedError(get_location(_expression)); } + public void visit_statement_list_internal(SyntaxTree.statement_list _statement_list) + { + statements_list stl = new statements_list(get_location(_statement_list), get_location_with_check(_statement_list.left_logical_bracket), get_location_with_check(_statement_list.right_logical_bracket)); + + for (var i = 0; i < _statement_list.subnodes.Count; i++) // SSM 13.10.16 - поменял т.к. собираюсь менять узлы в процессе обхода + { + statement syntax_statement = _statement_list.subnodes[i]; + try + { + statement_node semantic_statement = convert_strong(syntax_statement); + if (semantic_statement != null) + { + if (stl.statements.Count > 0 && stl.statements[0] is basic_function_call && i == 2) + { + base_function_call bfc = stl.statements[0] as basic_function_call; + if (bfc.type != null && bfc.type.name.Contains("<>local_variables_class") && (semantic_statement is compiled_constructor_call || semantic_statement is common_constructor_call) + && !context.converted_func_stack.Empty && context.converted_func_stack.top() is common_method_node && (context.converted_func_stack.top() as common_method_node).is_constructor) + stl.statements.AddElementFirst(semantic_statement); + else + stl.statements.AddElement(semantic_statement); + } + else + stl.statements.AddElement(semantic_statement); + } + context.allow_inherited_ctor_call = false; + } + catch (Errors.Error ex) + { + if (ThrowCompilationError || ex is MemberIsNotDeclaredInType || ex is UndefinedNameReference)//TODO: add interface + throw ex; + else + ErrorsList.Add(ex); + } + } + + return_value(stl); + } + public override void visit(SyntaxTree.statement_list _statement_list) { #region MikhailoMMX, обработка omp parallel section @@ -20658,89 +20696,186 @@ namespace PascalABCCompiler.TreeConverter ProcessNode(av.new_addr_value); // обойти десахарное } + private void CheckUnpacking(expression ex, out expression_node sem_ex, out bool IsTuple, out bool IsSequence, int countvars, syntax_tree_node stn) + { + sem_ex = convert_strong(ex); + sem_ex = convert_if_typed_expression_to_function_call(sem_ex); + var t = ConvertSemanticTypeNodeToNETType(sem_ex.type); + if (t == null) + AddError(sem_ex.location, "TUPLE_OR_SEQUENCE_EXPECTED"); + IsTuple = false; + IsSequence = false; + if (t.FullName.StartsWith("System.Tuple")) + IsTuple = true; + if (!IsTuple) + { + if (t.Name.Equals("IEnumerable`1") || t.GetInterface("IEnumerable`1") != null) + IsSequence = true; + } + if (!IsTuple && !IsSequence) + { + AddError(sem_ex.location, "TUPLE_OR_SEQUENCE_EXPECTED"); + } + if (IsTuple) + { + if (countvars > t.GetGenericArguments().Count()) + AddError(get_location(stn), "TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT"); + } + } + + private addressed_value UnpackingExpr(int i, bool IsTuple, bool IsSequence, string tname) + { + addressed_value dn = null; + if (IsTuple) + dn = new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())); + else if (IsSequence) + { + dn = new dot_node(new ident(tname), new ident("ElementAt")); + var pars = new SyntaxTree.expression_list(new int32_const(i)); + + dn = new method_call(dn, pars); + } + return dn; + } + public override void visit(SyntaxTree.assign_tuple asstup) // сахарный узел { - AddError(get_location(asstup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", asstup.GetType().Name); + //AddError(get_location(asstup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", asstup.GetType().Name); - /*semantic_check_assign_tuple(asstup); + + CheckUnpacking(asstup.expr, out var sem_ex, out var IsTuple, out var IsSequence, asstup.vars.variables.Count(), asstup.vars); + var sem_node = new SyntaxTree.semantic_addr_value(sem_ex); // чтобы два раза не делать convert_strong + + //semantic_check_assign_tuple(asstup.vars, asstup.expr); var tname = "#temp_var" + UniqueNumStr(); - //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - var tt = new var_statement(new ident(tname), asstup.expr); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - var st = new statement_list(new SyntaxTree.empty_statement()); + var tt = new var_statement(new ident(tname), sem_node /*asstup.expr*/); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название + var st = new statement_list(); st.Add(tt); var n = asstup.vars.variables.Count(); for (var i = 0; i < n; i++) { - var a = new assign(asstup.vars.variables[i], new dot_node(new ident(tname), - new ident("Item" + (i + 1).ToString())), Operators.Assignment, + var a = new assign(asstup.vars.variables[i], + //new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())), + UnpackingExpr(i, IsTuple, IsSequence, tname), + Operators.Assignment, asstup.vars.variables[i].source_context); st.Add(a); } - //visit(st); - // Замена 1 оператор на 1 оператор - всё OK - ReplaceUsingParent(asstup, st);*/ + visit(st); } public override void visit(SyntaxTree.assign_var_tuple assvartup) // сахарный узел { - AddError(get_location(assvartup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", assvartup.GetType().Name); + //AddError(get_location(assvartup), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", assvartup.GetType().Name); - /*check_sugared(assvartup); + CheckUnpacking(assvartup.expr, out var sem_ex, out var IsTuple, out var IsSequence, assvartup.idents.idents.Count(), assvartup.idents); + + /*var sem_ex = convert_strong(assvartup.expr); + sem_ex = convert_if_typed_expression_to_function_call(sem_ex); + var t = ConvertSemanticTypeNodeToNETType(sem_ex.type); + if (t == null) + AddError(sem_ex.location, "TUPLE_OR_SEQUENCE_EXPECTED"); + + var IsTuple = false; + var IsSequence = false; + if (t.FullName.StartsWith("System.Tuple")) + IsTuple = true; + if (!IsTuple) + { + if (t.Name.Equals("IEnumerable`1") || t.GetInterface("IEnumerable`1") != null) + IsSequence = true; + } + if (!IsTuple && !IsSequence) + { + AddError(sem_ex.location, "TUPLE_OR_SEQUENCE_EXPECTED"); + } + + if (IsTuple) + { + var nn = assvartup.idents.idents.Count(); + if (nn > t.GetGenericArguments().Count()) + AddError(get_location(assvartup.idents), "TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT"); + }*/ + + + // В зависимости от типа выражения по-разному распаковывать + // Распаковывать можно только для кортежей или последовательностей + // if IsTuple ... + // if IsSequence ... + // else AddError(либо кортеж либо последовательность) + + var sem_node = new SyntaxTree.semantic_addr_value(sem_ex); // чтобы два раза не делать convert_strong + + //semantic_check_assign_var_tuple(assvartup.idents, sem_node /*assvartup.expr*/); var tname = "#temp_var" + UniqueNumStr(); - var tt = new var_statement(new ident(tname), assvartup.expr); // тут для assvartup.expr внутри повторно вызывается convert_strong, это плохо, но если там лямбда, то иначе - с semantic_addr_value - не работает!!! - //var tt = new var_statement(new ident(tname), new semantic_addr_value(expr)); // тут semantic_addr_value хранит на самом деле expr - просто неудачное название - //visit(tt); // обходится первый элемент - вместо asstup + var tt = new var_statement(new ident(tname), sem_node /*assvartup.expr*/); - var sl = new List(); - sl.Add(new SyntaxTree.empty_statement()); - sl.Add(tt); // он же помещается в новое синтаксическое дерево + var sl = new statement_list(); + sl.Add(tt); var n = assvartup.idents.idents.Count(); for (var i = 0; i < n; i++) { + /*addressed_value dn = null; + if (IsTuple) + dn = new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())); + else if (IsSequence) + { + dn = new dot_node(new ident(tname), new ident("ElementAt")); + var pars = new SyntaxTree.expression_list(new int32_const(i)); + + dn = new method_call(dn,pars); + }*/ + var rr = assvartup.idents.idents[i] as ident; - var a = new var_statement(rr, - new dot_node(new ident(tname),new ident("Item" + (i + 1).ToString())), + var a = new var_statement(rr, + //new dot_node(new ident(tname),new ident("Item" + (i + 1).ToString())), + //dn, + UnpackingExpr(i, IsTuple, IsSequence, tname), assvartup.idents.idents[i].source_context ); - // Остальные элементы обходить не надо (!!!уже надо!) - они обходятся на следующих итерациях при обходе внешнего statement_list - //visit(a); sl.Add(a); } - ReplaceStatementUsingParent(assvartup, sl);*/ + visit_statement_list_internal(sl); } public override void visit(var_tuple_def_statement vtd) { - AddError(get_location(vtd), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", vtd.GetType().Name); + //AddError(get_location(vtd), "SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR", vtd.GetType().Name); // Состоит из var_def_statements. Некоторые являются var_tuple_def_statement // Их надо найти и сделать несколько секций variable_definitions - без семантических проверок. // Каждую var_tuple_def_statement надо заменить на assign_var_tuple - одну на секцию variable_definitions // А потом оставшаяся часть визитора сделает семантические проверки - /*var tname = "#temp_var" + UniqueNumStr(); - var vd = new List(); - vd.Add(new semantic_check_sugared_var_def_statement_node(typeof(assign_var_tuple), new List { vtd.vars, vtd.inital_value }, vtd.source_context)); // Это нужно для проверок на этапе преобразования в семантику - visit(vd[0]); + CheckUnpacking(vtd.inital_value, out var sem_ex, out var IsTuple, out var IsSequence, vtd.vars.idents.Count(), vtd.vars); + var sem_node = new SyntaxTree.semantic_addr_value(sem_ex); // чтобы два раза не делать convert_strong + + //semantic_check_assign_var_tuple(vtd.vars, vtd.inital_value); + + var tname = "#temp_var" + UniqueNumStr(); + //var vd = new List(); + //vd.Add(new semantic_check_sugared_var_def_statement_node(typeof(assign_var_tuple), new List { vtd.vars, vtd.inital_value }, vtd.source_context)); // Это нужно для проверок на этапе преобразования в семантику + //visit(vd[0]); + var tt1 = new var_def_statement(new ident(tname), vtd.inital_value); - vd.Add(tt1); + ProcessNode(tt1); var nn = vtd.vars.idents.Count(); for (var i = 0; i < nn; i++) { var a = new var_def_statement(vtd.vars.idents[i], - new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())), + UnpackingExpr(i, IsTuple, IsSequence, tname), + //new dot_node(new ident(tname), new ident("Item" + (i + 1).ToString())), vtd.vars.idents[i].source_context); - vd.Add(a); + ProcessNode(a); } - - ReplaceVarTupleDefStatementUsingParent(vtd, vd);*/ } + public void ReplaceVarTupleDefStatementUsingParent(var_tuple_def_statement from, IEnumerable to) { foreach (var x in to) diff --git a/bin/Lng/Eng/SemanticErrors_ms.dat b/bin/Lng/Eng/SemanticErrors_ms.dat index bd5248d43..a26dee7e7 100644 --- a/bin/Lng/Eng/SemanticErrors_ms.dat +++ b/bin/Lng/Eng/SemanticErrors_ms.dat @@ -1,6 +1,7 @@ %PREFIX%=SEMANTICERROR_ CAN_NOT_READ=Can not read data of this type TUPLE_EXPECTED=Tuple expected +TUPLE_OR_SEQUENCE_EXPECTED=Tuple or sequence expected TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT=Too many elements on the left side of tuple assignment ONLY_BASE_ASSIGNMENT_FOR_TUPLE=Tuple allows only base assignment := TUPLE_TYPE_ERROR=Bad element in Tuple type diff --git a/bin/Lng/Rus/SemanticErrors_ms.dat b/bin/Lng/Rus/SemanticErrors_ms.dat index 4f28b55b6..240fb5f76 100644 --- a/bin/Lng/Rus/SemanticErrors_ms.dat +++ b/bin/Lng/Rus/SemanticErrors_ms.dat @@ -1,6 +1,7 @@ %PREFIX%=SEMANTICERROR_ CAN_NOT_READ=Нельзя считывать данные этого типа TUPLE_EXPECTED=Ожидался кортеж +TUPLE_OR_SEQUENCE_EXPECTED=Ожидался кортеж или последовательность TOO_MANY_ELEMENTS_ON_LEFT_SIDE_OF_TUPLE_ASSIGNMRNT=Слишком много элементов в левой части при присваивании кортежа ONLY_BASE_ASSIGNMENT_FOR_TUPLE=Для кортежа допустимо только обычное присваивание := TUPLE_TYPE_ERROR=Ошибочная конструкция при построении типа кортежа From b0ea0a30cae0e7a8f2398c59fe670a1a15c6e05c Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Tue, 28 Jul 2020 10:11:48 +0300 Subject: [PATCH 04/18] =?UTF-8?q?SF=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=81=20=D0=BA=D0=BE=D1=80=D0=BE=D1=82=D0=BA=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/Lib/PABCSystem.pas | 5 ++- bin/Lib/SF.pas | 88 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index bfef6f463..3baaf5af1 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -2122,6 +2122,9 @@ procedure Reverse(var s: string); procedure Reverse(var s: string; index, count: integer); /// Перемешивает динамический массив случайным образом procedure Shuffle(a: array of T); +/// Возвращает, совпадают ли массивы +function ArrEqual(a, b: array of T): boolean; + /// Сравнивает матрицы на равенство function MatrEqual(a, b: array [,] of T): boolean; /// Перемешивает список случайным образом @@ -2254,8 +2257,6 @@ function ReadArrReal(prompt: string; n: integer): array of real; /// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры function ReadArrString(prompt: string; n: integer): array of string; -/// Возвращает, совпадают ли массивы -function ArrEqual(a, b: array of T): boolean; // ----------------------------------------------------- //>> Подпрограммы для создания двумерных динамических массивов # Subroutines for matrixes diff --git a/bin/Lib/SF.pas b/bin/Lib/SF.pas index f4f8a9f10..d683205f8 100644 --- a/bin/Lib/SF.pas +++ b/bin/Lib/SF.pas @@ -11,6 +11,7 @@ function RI64 := ReadInt64; function RR := ReadReal; function RC := ReadChar; function RS := ReadString; +function RL := ReadLexem; function RlnI := ReadlnInteger; function RlnBI := ReadlnBigInteger; @@ -68,36 +69,123 @@ function Prln(Self: char): char; extensionmethod := Self.Println; function Prln(Self: boolean): boolean; extensionmethod := Self.Println; function Prln(Self: string): string; extensionmethod := Self.Println; +/// Записывает в min значение x если xmax procedure ReMax(var max: integer; x: integer); begin if x > max then max := x end; +/// Записывает в min значение x если xmax procedure ReMax(var max: real; x: real); begin if x > max then max := x end; +/// Преобразует строку в целое function ToI(Self: string); extensionmethod := Self.ToInteger; +/// Преобразует строку в вещественное function ToR(Self: string); extensionmethod := Self.ToReal; +/// Преобразует строку в массив целых +function ToIs(Self: string); extensionmethod := Self.ToIntegers; + +/// Преобразует строку в массив вещественных +function ToRs(Self: string); extensionmethod := Self.ToReals; + function operator-(c,c1: char): integer; extensionmethod := Ord(c) - Ord(c1); +/// Возвращает длину строки function Len(Self: string): integer; extensionmethod := Self.Length; +/// Возвращает длину массива +function Len(Self: array of T): integer; extensionmethod := Self.Length; + +/// Возвращает среднее элементов последовательности +function Av(Self: sequence of integer): real; extensionmethod := Self.Average; +/// Возвращает среднее элементов последовательности +function Av(Self: sequence of real): real; extensionmethod := Self.Average; + +function Dst(Self: sequence of T): sequence of T; extensionmethod := Self.Distinct; + +function Ord(Self: sequence of T): sequence of T; extensionmethod := Self.Order; +function OrdD(Self: sequence of T): sequence of T; extensionmethod := Self.OrderDescending; + +/// Преобразует последовательность в строку +function Str(Self: sequence of T): string; extensionmethod := Self.JoinToString; + +/// Выводит последовательность, разделяя элементы пробелами +function Pr(Self: sequence of T): sequence of T; extensionmethod := Self.Print; +/// Выводит последовательность, разделяя элементы пробелами, и переходит на новую строку +function Prln(Self: sequence of T): sequence of T; extensionmethod := Self.Println; + +/// Возвращает инвертированную последовательность +function Rev(Self: sequence of T): sequence of T; extensionmethod := Self.Reverse; + +/// Преобразует последовательность, используя функцию transform +function Sel(Self: sequence of T; transform: T->T1): sequence of T1; extensionmethod := Self.Select(transform); + +/// Фильтрует последовательность по условию cond +function Wh(Self: sequence of T; cond: T->boolean): sequence of T; extensionmethod := Self.Where(cond); + +/// Преобразует последовательность в массив +function ToA(Self: sequence of T): array of T; extensionmethod := Self.ToArray; + +/// Преобразует последовательность в список +function ToL(Self: sequence of T): List; extensionmethod := Self.ToList; + +/// Преобразует последовательность в HashSet +function ToHS(Self: sequence of T): HashSet; extensionmethod := Self.ToHashSet; +/// Преобразует последовательность в SortedSet +function ToSS(Self: sequence of T): SortedSet; extensionmethod := Self.ToSortedSet; + +/// Преобразует последовательность в HashSet +function HS(s: sequence of T): HashSet := s.ToHashSet; +/// Преобразует последовательность в SortedSet +function SS(s: sequence of T): SortedSet := s.ToSortedSet; + +/// Инвертирует последовательность +procedure Rev(a: array of T) := Reverse(a); + +/// Возвращает индекс минимального элемента +function IMin(Self: array of T): integer; extensionmethod; where T: IComparable; +begin + Result := Self.IndexMin; +end; + +/// Возвращает индекс максимального элемента +function IMax(Self: array of T): integer; extensionmethod; where T: IComparable; +begin + Result := Self.IndexMax; +end; + +/// Возвращает True если массивы равны +function Eq(Self,b: array of T): boolean; extensionmethod := Self.ArrEqual(b); + +/// Возвращает в виде массива все элементы, удовлетворяющие cond +function Filt(Self: array of T; cond: T->boolean): array of T; extensionmethod := Self.FindAll(cond); + +/// Возвращает массив с элементами, преобразованными по правилу transform +function Tr(Self: array of T; transform: T->T): array of T; extensionmethod := Self.ConvertAll(transform); + +/// Преобразует массив по правилу transform +procedure Tr(a: array of T; transform: T->T) := a.Transform(transform); + + end. \ No newline at end of file From 15a94452162f8843d791ed4e743618aa35bb954d Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Wed, 29 Jul 2020 11:29:51 +0300 Subject: [PATCH 05/18] =?UTF-8?q?x=20=E2=86=92=20x=20(=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=BB=D0=BE=D1=87=D0=BA=D0=B0=20:))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit |1,2,3|.Print --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- .../PascalABCParserNewSaushkin/ABCPascal.cs | 1524 ++++++++--------- .../PascalABCParserNewSaushkin/ABCPascal.lex | 4 +- .../PascalABCParserNewSaushkin/ABCPascal.y | 8 +- .../ABCPascalYacc.cs | 946 +++++----- Parsers/PascalABCParserNewSaushkin/PABC.ymc | 1 + Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- SyntaxTree/tree/SyntaxTreeStreamReader.cs | 2 +- SyntaxTree/tree/SyntaxTreeStreamWriter.cs | 2 +- SyntaxTree/tree/Tree.cs | 2 +- SyntaxTree/tree/tree.xml | 2 +- TestSuite/CompilationSamples/PABCSystem.pas | 7 +- TestSuite/CompilationSamples/SF.pas | 91 + bin/Lib/PABCSystem.pas | 2 +- bin/Lib/SF.pas | 3 + 17 files changed, 1347 insertions(+), 1257 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2be4eddb3..9dc1e9936 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2603"; + public const string Revision = "2604"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index e736c766f..4cfaf70d5 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=6 -%REVISION%=2603 %COREVERSION%=3 +%REVISION%=2604 +%MINOR%=6 %MAJOR%=3 diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index bee8217d1..46d40d6fc 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs @@ -1,9 +1,9 @@ // // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 -// Machine: IVAN-PC -// DateTime: 26.07.2020 13:45:30 -// UserName: Ivan +// Machine: DESKTOP-G8V08V4 +// DateTime: 29.07.2020 11:15:11 +// UserName: ????????? // GPLEX input file // GPLEX frame file // @@ -124,8 +124,8 @@ namespace GPPGParserScanner enum Result {accept, noMatch, contextFound}; - const int maxAccept = 70; - const int initial = 71; + const int maxAccept = 69; + const int initial = 70; const int eofNum = 0; const int goStart = -1; const int INITIAL = 0; @@ -177,65 +177,65 @@ public PT parsertools; } }; - static int[] startState = new int[] {71, 108, 109, 110, 110, 111, + static int[] startState = new int[] {70, 106, 107, 108, 108, 109, 0}; #region TwoLevelCharacterMap // - // There are 50 equivalence classes + // There are 48 equivalence classes // There are 256 character sequence regions // There are 47 tables, 12032 entries // static sbyte[] mLo0 = new sbyte[256] { -/* '\0' */ 5, 44, 5, 5, 5, 5, 5, 5, 5, 12, 0, 5, 5, 6, 5, 5, +/* '\0' */ 5, 42, 5, 5, 5, 5, 5, 5, 5, 12, 0, 5, 5, 6, 5, 5, /* '\x10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\x20' */ 12, 29, 5, 11, 4, 5, 13, 49, 7, 9, 8, 24, 14, 25, 16, 1, -/* '0' */ 46, 46, 31, 46, 46, 46, 46, 46, 46, 30, 15, 17, 27, 23, 26, 20, -/* '@' */ 22, 47, 47, 47, 47, 48, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* 'P' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 18, 5, 19, 28, 21, -/* '`' */ 5, 41, 47, 47, 47, 32, 47, 45, 45, 37, 45, 45, 45, 42, 39, 38, -/* 'p' */ 34, 45, 35, 36, 40, 45, 45, 45, 33, 43, 45, 3, 10, 2, 5, 5, +/* '\x20' */ 12, 5, 5, 11, 4, 5, 13, 47, 7, 9, 8, 24, 14, 25, 16, 1, +/* '0' */ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 15, 17, 27, 23, 26, 20, +/* '@' */ 22, 45, 45, 45, 45, 46, 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* 'P' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 18, 5, 19, 28, 21, +/* '`' */ 5, 39, 45, 45, 45, 30, 45, 43, 43, 35, 43, 43, 43, 40, 37, 36, +/* 'p' */ 32, 43, 33, 34, 38, 43, 43, 43, 31, 41, 43, 3, 10, 2, 5, 5, /* '\x80' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\x90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\xA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 5, 5, 5, 5, 5, -/* '\xB0' */ 5, 5, 5, 5, 5, 45, 5, 5, 5, 5, 45, 5, 5, 5, 5, 5, -/* '\xC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\xD0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\xE0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\xF0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\xA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 5, 5, 5, 5, 5, +/* '\xB0' */ 5, 5, 5, 5, 5, 43, 5, 5, 5, 5, 43, 5, 5, 5, 5, 5, +/* '\xC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\xD0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\xE0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\xF0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo1 = new sbyte[256] { -/* '\u0100' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0110' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0120' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0130' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0140' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0150' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0160' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0170' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0180' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0190' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u01F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u0100' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0110' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0120' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0130' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0140' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0150' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0160' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0170' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0180' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0190' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u01F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo2 = new sbyte[256] { -/* '\u0200' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0210' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0220' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0230' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0240' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0250' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0260' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0270' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0280' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0290' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u02A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u02B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u02C0' */ 45, 45, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u02D0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u02E0' */ 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 5, +/* '\u0200' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0210' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0220' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0230' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0240' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0250' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0260' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0270' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0280' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0290' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u02A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u02B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u02C0' */ 43, 43, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u02D0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u02E0' */ 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 5, /* '\u02F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo3 = new sbyte[256] { /* '\u0300' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -245,83 +245,83 @@ public PT parsertools; /* '\u0340' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0350' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 5, 5, -/* '\u0380' */ 5, 5, 5, 5, 5, 5, 45, 5, 45, 45, 45, 5, 45, 5, 45, 45, -/* '\u0390' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u03A0' */ 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u03B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u03C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u03D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u03E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u03F0' */ 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u0370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 5, 5, +/* '\u0380' */ 5, 5, 5, 5, 5, 5, 43, 5, 43, 43, 43, 5, 43, 5, 43, 43, +/* '\u0390' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u03A0' */ 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u03B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u03C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u03D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u03E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u03F0' */ 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo4 = new sbyte[256] { -/* '\u0400' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0410' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0420' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0430' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0440' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0450' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0460' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0470' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0480' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\u0490' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u04F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u0400' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0410' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0420' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0430' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0440' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0450' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0460' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0470' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0480' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\u0490' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u04F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo5 = new sbyte[256] { -/* '\u0500' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0510' */ 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0500' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0510' */ 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0520' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0530' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0540' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0550' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 45, 5, 5, 5, 5, 5, 5, -/* '\u0560' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0570' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0580' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0530' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0540' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0550' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 43, 5, 5, 5, 5, 5, 5, +/* '\u0560' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0570' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0580' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0590' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u05C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u05D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u05E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\u05F0' */ 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; +/* '\u05D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u05E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\u05F0' */ 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo6 = new sbyte[256] { /* '\u0600' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0610' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0620' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0630' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\u0640' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, +/* '\u0620' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0630' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\u0640' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, /* '\u0650' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0660' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, -/* '\u0670' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0680' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0690' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u06A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u06B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u06C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u06D0' */ 45, 45, 45, 45, 5, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u06E0' */ 5, 5, 5, 5, 5, 45, 45, 5, 5, 5, 5, 5, 5, 5, 45, 45, -/* '\u06F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 5, 5, 45 }; +/* '\u0660' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, +/* '\u0670' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0680' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0690' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u06A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u06B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u06C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u06D0' */ 43, 43, 43, 43, 5, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u06E0' */ 5, 5, 5, 5, 5, 43, 43, 5, 5, 5, 5, 5, 5, 5, 43, 43, +/* '\u06F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 5, 5, 43 }; static sbyte[] mLo7 = new sbyte[256] { /* '\u0700' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0710' */ 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0720' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +/* '\u0710' */ 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0720' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, /* '\u0730' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0740' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, -/* '\u0750' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0760' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, +/* '\u0740' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, +/* '\u0750' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0760' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, /* '\u0770' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0780' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0790' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u07A0' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u07B0' */ 5, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u07C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\u07D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u07E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\u07F0' */ 5, 5, 5, 5, 45, 45, 5, 5, 5, 5, 45, 5, 5, 5, 5, 5 }; +/* '\u0780' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0790' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u07A0' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u07B0' */ 5, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u07C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\u07D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u07E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\u07F0' */ 5, 5, 5, 5, 43, 43, 5, 5, 5, 5, 43, 5, 5, 5, 5, 5 }; static sbyte[] mLo8 = new sbyte[256] { /* '\u0800' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0810' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -340,117 +340,117 @@ public PT parsertools; /* '\u08E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u08F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo9 = new sbyte[256] { -/* '\u0900' */ 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0910' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0920' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0930' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 45, 5, 5, +/* '\u0900' */ 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0910' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0920' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0930' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 43, 5, 5, /* '\u0940' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0950' */ 45, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0960' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0970' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, -/* '\u0980' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 45, -/* '\u0990' */ 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u09A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u09B0' */ 45, 5, 45, 5, 5, 5, 45, 45, 45, 45, 5, 5, 5, 45, 5, 5, -/* '\u09C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 5, -/* '\u09D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 5, 45, -/* '\u09E0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u09F0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; +/* '\u0950' */ 43, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0960' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0970' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, +/* '\u0980' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 43, +/* '\u0990' */ 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u09A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u09B0' */ 43, 5, 43, 5, 5, 5, 43, 43, 43, 43, 5, 5, 5, 43, 5, 5, +/* '\u09C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 5, +/* '\u09D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 5, 43, +/* '\u09E0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u09F0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo10 = new sbyte[256] { -/* '\u0A00' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 45, -/* '\u0A10' */ 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0A20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0A30' */ 45, 5, 45, 45, 5, 45, 45, 5, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\u0A00' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 43, +/* '\u0A10' */ 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0A20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0A30' */ 43, 5, 43, 43, 5, 43, 43, 5, 43, 43, 5, 5, 5, 5, 5, 5, /* '\u0A40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0A50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 5, 45, 5, +/* '\u0A50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 5, 43, 5, /* '\u0A60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0A70' */ 5, 5, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0A80' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, -/* '\u0A90' */ 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0AA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0AB0' */ 45, 5, 45, 45, 5, 45, 45, 45, 45, 45, 5, 5, 5, 45, 5, 5, +/* '\u0A70' */ 5, 5, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0A80' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, +/* '\u0A90' */ 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0AA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0AB0' */ 43, 5, 43, 43, 5, 43, 43, 43, 43, 43, 5, 5, 5, 43, 5, 5, /* '\u0AC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0AD0' */ 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0AE0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0AD0' */ 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0AE0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0AF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo11 = new sbyte[256] { -/* '\u0B00' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 45, -/* '\u0B10' */ 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0B20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0B30' */ 45, 5, 45, 45, 5, 45, 45, 45, 45, 45, 5, 5, 5, 45, 5, 5, +/* '\u0B00' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 43, +/* '\u0B10' */ 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0B20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0B30' */ 43, 5, 43, 43, 5, 43, 43, 43, 43, 43, 5, 5, 5, 43, 5, 5, /* '\u0B40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0B50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 5, 45, -/* '\u0B60' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0B70' */ 5, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0B80' */ 5, 5, 5, 45, 5, 45, 45, 45, 45, 45, 45, 5, 5, 5, 45, 45, -/* '\u0B90' */ 45, 5, 45, 45, 45, 45, 5, 5, 5, 45, 45, 5, 45, 5, 45, 45, -/* '\u0BA0' */ 5, 5, 5, 45, 45, 5, 5, 5, 45, 45, 45, 5, 5, 5, 45, 45, -/* '\u0BB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\u0B50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 5, 43, +/* '\u0B60' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0B70' */ 5, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0B80' */ 5, 5, 5, 43, 5, 43, 43, 43, 43, 43, 43, 5, 5, 5, 43, 43, +/* '\u0B90' */ 43, 5, 43, 43, 43, 43, 5, 5, 5, 43, 43, 5, 43, 5, 43, 43, +/* '\u0BA0' */ 5, 5, 5, 43, 43, 5, 5, 5, 43, 43, 43, 5, 5, 5, 43, 43, +/* '\u0BB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\u0BC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0BF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo12 = new sbyte[256] { -/* '\u0C00' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\u0C10' */ 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0C20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0C30' */ 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\u0C00' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\u0C10' */ 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0C20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0C30' */ 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\u0C40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0C60' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0C60' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0C70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0C80' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\u0C90' */ 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0CA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0CB0' */ 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 5, 5, 5, 45, 5, 5, +/* '\u0C80' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\u0C90' */ 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0CA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0CB0' */ 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 5, 5, 5, 43, 5, 5, /* '\u0CC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0CD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 5, -/* '\u0CE0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0CD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 5, +/* '\u0CE0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0CF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo13 = new sbyte[256] { -/* '\u0D00' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\u0D10' */ 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0D20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\u0D30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\u0D00' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\u0D10' */ 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0D20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\u0D30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\u0D40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0D60' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0D60' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0D70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0D80' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0D90' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\u0DA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0DB0' */ 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, 5, -/* '\u0DC0' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0D80' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0D90' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\u0DA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0DB0' */ 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, 5, +/* '\u0DC0' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo14 = new sbyte[256] { -/* '\u0E00' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0E10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0E20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0E30' */ 45, 5, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0E40' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0E00' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0E10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0E20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0E30' */ 43, 5, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0E40' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0E70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0E80' */ 5, 45, 45, 5, 45, 5, 5, 45, 45, 5, 45, 5, 5, 45, 5, 5, -/* '\u0E90' */ 5, 5, 5, 5, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, -/* '\u0EA0' */ 5, 45, 45, 45, 5, 45, 5, 45, 5, 5, 45, 45, 5, 45, 45, 45, -/* '\u0EB0' */ 45, 5, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 5, 5, -/* '\u0EC0' */ 45, 45, 45, 45, 45, 5, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0ED0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 5, 5, +/* '\u0E80' */ 5, 43, 43, 5, 43, 5, 5, 43, 43, 5, 43, 5, 5, 43, 5, 5, +/* '\u0E90' */ 5, 5, 5, 5, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, +/* '\u0EA0' */ 5, 43, 43, 43, 5, 43, 5, 43, 5, 5, 43, 43, 5, 43, 43, 43, +/* '\u0EB0' */ 43, 5, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 5, 5, +/* '\u0EC0' */ 43, 43, 43, 43, 43, 5, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0ED0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 5, 5, /* '\u0EE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0EF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo15 = new sbyte[256] { -/* '\u0F00' */ 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u0F00' */ 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F20' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0F30' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0F40' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, -/* '\u0F50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u0F60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, +/* '\u0F40' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, +/* '\u0F50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u0F60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, /* '\u0F70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u0F80' */ 5, 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 5, 5, 5, 5, +/* '\u0F80' */ 5, 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 5, 5, 5, 5, /* '\u0F90' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FA0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FB0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -459,161 +459,161 @@ public PT parsertools; /* '\u0FE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u0FF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo16 = new sbyte[256] { -/* '\u1000' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1010' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1020' */ 45, 45, 5, 45, 45, 45, 45, 45, 5, 45, 45, 5, 5, 5, 5, 5, +/* '\u1000' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1010' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1020' */ 43, 43, 5, 43, 43, 43, 43, 43, 5, 43, 43, 5, 5, 5, 5, 5, /* '\u1030' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1040' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1050' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1050' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1070' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1080' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1090' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u10A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u10B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u10C0' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u10D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u10E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u10F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, 5, 5 }; +/* '\u10A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u10B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u10C0' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u10D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u10E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u10F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, 5, 5 }; static sbyte[] mLo17 = new sbyte[256] { -/* '\u1100' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1110' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1120' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1130' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1140' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1150' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 45, -/* '\u1160' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1170' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1180' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1190' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11A0' */ 45, 45, 45, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u11F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5 }; +/* '\u1100' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1110' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1120' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1130' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1140' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1150' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 43, +/* '\u1160' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1170' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1180' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1190' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11A0' */ 43, 43, 43, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u11F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo18 = new sbyte[256] { -/* '\u1200' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1210' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1220' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1230' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1240' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 5, 5, -/* '\u1250' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, 45, 45, 45, 45, 5, 5, -/* '\u1260' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1270' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1280' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 5, 5, -/* '\u1290' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u12A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u12B0' */ 45, 5, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u12C0' */ 45, 5, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u12D0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u12E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u12F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u1200' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1210' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1220' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1230' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1240' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 5, 5, +/* '\u1250' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, 43, 43, 43, 43, 5, 5, +/* '\u1260' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1270' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1280' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 5, 5, +/* '\u1290' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u12A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u12B0' */ 43, 5, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u12C0' */ 43, 5, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u12D0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u12E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u12F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo19 = new sbyte[256] { -/* '\u1300' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1310' */ 45, 5, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1320' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1330' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1340' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1350' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, +/* '\u1300' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1310' */ 43, 5, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1320' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1330' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1340' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1350' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, /* '\u1360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1380' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +/* '\u1380' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, /* '\u1390' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u13A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u13B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u13C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u13D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u13E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u13F0' */ 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; +/* '\u13A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u13B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u13C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u13D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u13E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u13F0' */ 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo20 = new sbyte[256] { -/* '\u1400' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1410' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1420' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1430' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1440' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1450' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1460' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1470' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1480' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1490' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u14F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u1400' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1410' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1420' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1430' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1440' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1450' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1460' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1470' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1480' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1490' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u14F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo22 = new sbyte[256] { -/* '\u1600' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1610' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1620' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1630' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1640' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1650' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1660' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 45, -/* '\u1670' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1680' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1690' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\u16A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u16B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u16C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u16D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u16E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, +/* '\u1600' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1610' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1620' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1630' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1640' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1650' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1660' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 43, +/* '\u1670' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1680' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1690' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\u16A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u16B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u16C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u16D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u16E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, /* '\u16F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo23 = new sbyte[256] { -/* '\u1700' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\u1710' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1720' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1730' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1740' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1750' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1760' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\u1770' */ 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1780' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1790' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u17A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u17B0' */ 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1700' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\u1710' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1720' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1730' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1740' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1750' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1760' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\u1770' */ 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1780' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1790' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u17A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u17B0' */ 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u17C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u17D0' */ 5, 5, 5, 5, 5, 5, 5, 45, 5, 5, 5, 5, 45, 5, 5, 5, +/* '\u17D0' */ 5, 5, 5, 5, 5, 5, 5, 43, 5, 5, 5, 5, 43, 5, 5, 5, /* '\u17E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u17F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo24 = new sbyte[256] { /* '\u1800' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1810' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1820' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1830' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1840' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1850' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1860' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1870' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1880' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1890' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u18A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, +/* '\u1820' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1830' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1840' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1850' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1860' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1870' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1880' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1890' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u18A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, /* '\u18B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u18F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo25 = new sbyte[256] { -/* '\u1900' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1910' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, +/* '\u1900' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1910' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, /* '\u1920' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1930' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1940' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1950' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1960' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\u1970' */ 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1980' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1990' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u19A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\u1950' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1960' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\u1970' */ 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1980' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1990' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u19A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\u19B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u19C0' */ 5, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u19C0' */ 5, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u19F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo26 = new sbyte[256] { -/* '\u1A00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1A10' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1A00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1A10' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A20' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A30' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1A40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -629,11 +629,11 @@ public PT parsertools; /* '\u1AE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1AF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo27 = new sbyte[256] { -/* '\u1B00' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1B10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1B20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1B30' */ 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u1B40' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, +/* '\u1B00' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1B10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1B20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1B30' */ 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u1B40' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, /* '\u1B50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1B70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -646,56 +646,56 @@ public PT parsertools; /* '\u1BE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1BF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo29 = new sbyte[256] { -/* '\u1D00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1D90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1DA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1DB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +/* '\u1D00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1D90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1DA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1DB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, /* '\u1DC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u1DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo30 = new sbyte[256] { -/* '\u1E00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1E90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, -/* '\u1EA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1EB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1EC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1ED0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1EE0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1EF0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5 }; +/* '\u1E00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1E90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, +/* '\u1EA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1EB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1EC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1ED0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1EE0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1EF0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo31 = new sbyte[256] { -/* '\u1F00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1F10' */ 45, 45, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\u1F20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1F30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1F40' */ 45, 45, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\u1F50' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, 45, 5, 45, 5, 45, -/* '\u1F60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1F70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\u1F80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1F90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1FA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u1FB0' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, -/* '\u1FC0' */ 5, 5, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, -/* '\u1FD0' */ 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, -/* '\u1FE0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, -/* '\u1FF0' */ 5, 5, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5 }; +/* '\u1F00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1F10' */ 43, 43, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\u1F20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1F30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1F40' */ 43, 43, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\u1F50' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, 43, 5, 43, 5, 43, +/* '\u1F60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1F70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\u1F80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1F90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1FA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u1FB0' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, +/* '\u1FC0' */ 5, 5, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, +/* '\u1FD0' */ 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, +/* '\u1FE0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, +/* '\u1FF0' */ 5, 5, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5 }; static sbyte[] mLo32 = new sbyte[256] { /* '\u2000' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2010' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -704,9 +704,9 @@ public PT parsertools; /* '\u2040' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2050' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2070' */ 5, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, +/* '\u2070' */ 5, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, /* '\u2080' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2090' */ 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2090' */ 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -714,16 +714,16 @@ public PT parsertools; /* '\u20E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u20F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo33 = new sbyte[256] { -/* '\u2100' */ 5, 5, 45, 5, 5, 5, 5, 45, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\u2110' */ 45, 45, 45, 45, 5, 45, 5, 5, 5, 45, 45, 45, 45, 45, 5, 5, -/* '\u2120' */ 5, 5, 5, 5, 45, 5, 45, 5, 45, 5, 45, 45, 45, 45, 5, 45, -/* '\u2130' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, -/* '\u2140' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 5, 5, 5, 5, 45, 5, +/* '\u2100' */ 5, 5, 43, 5, 5, 5, 5, 43, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\u2110' */ 43, 43, 43, 43, 5, 43, 5, 5, 5, 43, 43, 43, 43, 43, 5, 5, +/* '\u2120' */ 5, 5, 5, 5, 43, 5, 43, 5, 43, 5, 43, 43, 43, 43, 5, 43, +/* '\u2130' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, +/* '\u2140' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 5, 5, 5, 5, 43, 5, /* '\u2150' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2160' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2170' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2180' */ 5, 5, 5, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2190' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2180' */ 5, 5, 5, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2190' */ 5, 5, 29, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -731,117 +731,117 @@ public PT parsertools; /* '\u21E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u21F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo44 = new sbyte[256] { -/* '\u2C00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2C10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2C20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u2C30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2C40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2C50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u2C60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, -/* '\u2C70' */ 5, 5, 5, 5, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2C80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2C90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2CA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2CB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2CC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2CD0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2CE0' */ 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2C00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2C10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2C20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u2C30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2C40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2C50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u2C60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, +/* '\u2C70' */ 5, 5, 5, 5, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2C80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2C90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2CA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2CB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2CC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2CD0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2CE0' */ 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2CF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo45 = new sbyte[256] { -/* '\u2D00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D20' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2D30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D60' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, +/* '\u2D00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D20' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2D30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D60' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 43, /* '\u2D70' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2D80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u2D90' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u2DA0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u2DB0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u2DC0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\u2DD0' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, +/* '\u2D80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u2D90' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u2DA0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u2DB0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u2DC0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\u2DD0' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, /* '\u2DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u2DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo48 = new sbyte[256] { -/* '\u3000' */ 5, 5, 5, 5, 5, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u3000' */ 5, 5, 5, 5, 5, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u3010' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u3020' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u3030' */ 5, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 45, 45, 5, 5, 5, -/* '\u3040' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3050' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3060' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3070' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3080' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3090' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 45, 45, 45, -/* '\u30A0' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u30B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u30C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u30D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u30E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u30F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45 }; +/* '\u3030' */ 5, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 43, 43, 5, 5, 5, +/* '\u3040' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3050' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3060' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3070' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3080' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3090' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 43, 43, 43, +/* '\u30A0' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u30B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u30C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u30D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u30E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u30F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43 }; static sbyte[] mLo49 = new sbyte[256] { -/* '\u3100' */ 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3110' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3120' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, -/* '\u3130' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3140' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3150' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3160' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3170' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u3180' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, +/* '\u3100' */ 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3110' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3120' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, +/* '\u3130' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3140' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3150' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3160' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3170' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u3180' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, /* '\u3190' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u31A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u31B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u31A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u31B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u31E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\u31F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\u31F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo77 = new sbyte[256] { -/* '\u4D00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4D90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4DA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u4DB0' */ 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\u4D00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4D90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4DA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u4DB0' */ 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u4DF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo159 = new sbyte[256] { -/* '\u9F00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9F90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9FA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\u9FB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, +/* '\u9F00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9F90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9FA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\u9FB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, /* '\u9FC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\u9FF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo164 = new sbyte[256] { -/* '\uA400' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA410' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA420' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA430' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA440' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA450' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA460' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA470' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA480' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, +/* '\uA400' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA410' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA420' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA430' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA440' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA450' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA460' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA470' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA480' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, /* '\uA490' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA4B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -851,7 +851,7 @@ public PT parsertools; /* '\uA4F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo167 = new sbyte[256] { /* '\uA700' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uA710' */ 5, 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 5, 5, 5, 5, 5, +/* '\uA710' */ 5, 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 5, 5, 5, 5, 5, /* '\uA720' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA730' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA740' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -867,14 +867,14 @@ public PT parsertools; /* '\uA7E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA7F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo168 = new sbyte[256] { -/* '\uA800' */ 45, 45, 5, 45, 45, 45, 5, 45, 45, 45, 45, 5, 45, 45, 45, 45, -/* '\uA810' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA820' */ 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uA800' */ 43, 43, 5, 43, 43, 43, 5, 43, 43, 43, 43, 5, 43, 43, 43, 43, +/* '\uA810' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA820' */ 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA830' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uA840' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA850' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA860' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uA870' */ 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uA840' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA850' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA860' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uA870' */ 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA880' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA890' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8A0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -884,73 +884,73 @@ public PT parsertools; /* '\uA8E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uA8F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo215 = new sbyte[256] { -/* '\uD700' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD710' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD720' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD730' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD740' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD750' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD760' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD770' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD780' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD790' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uD7A0' */ 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uD700' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD710' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD720' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD730' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD740' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD750' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD760' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD770' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD780' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD790' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uD7A0' */ 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7B0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7C0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uD7F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo250 = new sbyte[256] { -/* '\uFA00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\uFA30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA40' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\uFA70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFA90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFAA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFAB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFAC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFAD0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\uFA00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\uFA30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA40' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\uFA70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFA90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFAA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFAB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFAC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFAD0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\uFAE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFAF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mLo251 = new sbyte[256] { -/* '\uFB00' */ 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFB10' */ 5, 5, 5, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 45, 5, 45, -/* '\uFB20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\uFB30' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 5, 45, 5, -/* '\uFB40' */ 45, 45, 5, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFB50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFB60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFB70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFB80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFB90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFBA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFBB0' */ 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uFB00' */ 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uFB10' */ 5, 5, 5, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 43, 5, 43, +/* '\uFB20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\uFB30' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 5, 43, 5, +/* '\uFB40' */ 43, 43, 5, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFB50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFB60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFB70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFB80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFB90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFBA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFBB0' */ 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFBC0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFBD0' */ 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFBE0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFBF0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\uFBD0' */ 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFBE0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFBF0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mLo253 = new sbyte[256] { -/* '\uFD00' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD10' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, +/* '\uFD00' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD10' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, /* '\uFD40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFD50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD60' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFD90' */ 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFDA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFDB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFDC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\uFD50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD60' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFD90' */ 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFDA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFDB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFDC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFDD0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFDE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFDF0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5 }; +/* '\uFDF0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5 }; static sbyte[] mLo254 = new sbyte[256] { /* '\uFE00' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -959,30 +959,30 @@ public PT parsertools; /* '\uFE40' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE50' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFE60' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFE70' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFE80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFE90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFEA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFEB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFEC0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFED0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFEE0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFEF0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5 }; +/* '\uFE70' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFE80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFE90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFEA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFEB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFEC0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFED0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFEE0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFEF0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5 }; static sbyte[] mLo255 = new sbyte[256] { /* '\uFF00' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFF10' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\uFF20' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFF30' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\uFF40' */ 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFF50' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, -/* '\uFF60' */ 5, 5, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFF70' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFF80' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFF90' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFFA0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\uFFB0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\uFFC0' */ 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\uFFD0' */ 5, 5, 45, 45, 45, 45, 45, 45, 5, 5, 45, 45, 45, 5, 5, 5, +/* '\uFF20' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFF30' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\uFF40' */ 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFF50' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, +/* '\uFF60' */ 5, 5, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFF70' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFF80' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFF90' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFFA0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\uFFB0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\uFFC0' */ 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\uFFD0' */ 5, 5, 43, 43, 43, 43, 43, 43, 5, 5, 43, 43, 43, 5, 5, 5, /* '\uFFE0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\uFFF0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; @@ -1008,99 +1008,99 @@ public PT parsertools; #region CompressedCharacterMap // - // There are 50 equivalence classes + // There are 48 equivalence classes // There are 21 character sequence regions // There are 6 tables, 1255 entries // There are 15 runs, 0 singletons // Decision tree depth is 5 // static sbyte[] mapC0 = new sbyte[251] { -/* '\U00010000' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, -/* '\U00010010' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010020' */ 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010030' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 5, 45, -/* '\U00010040' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\U00010050' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, +/* '\U00010000' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, +/* '\U00010010' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010020' */ 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010030' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 5, 43, +/* '\U00010040' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\U00010050' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, /* '\U00010060' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010070' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\U00010080' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010090' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100C0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000100F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45 }; +/* '\U00010080' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010090' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100C0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000100F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 }; static sbyte[] mapC2 = new sbyte[256] { -/* '\U00010300' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010310' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, +/* '\U00010300' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010310' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, /* '\U00010320' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\U00010330' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010340' */ 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, 5, 5, 5, 5, +/* '\U00010330' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010340' */ 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, 5, 5, 5, 5, /* '\U00010350' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010360' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U00010370' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\U00010380' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010390' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 5, -/* '\U000103A0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000103B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U000103C0' */ 45, 45, 45, 45, 5, 5, 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, +/* '\U00010380' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010390' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 5, +/* '\U000103A0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000103B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U000103C0' */ 43, 43, 43, 43, 5, 5, 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, /* '\U000103D0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U000103E0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* '\U000103F0' */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; static sbyte[] mapC5 = new sbyte[64] { -/* '\U00010800' */ 45, 45, 45, 45, 45, 45, 5, 5, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\U00010810' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010820' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010830' */ 45, 45, 45, 45, 45, 45, 5, 45, 45, 5, 5, 5, 45, 5, 5, 45 }; +/* '\U00010800' */ 43, 43, 43, 43, 43, 43, 5, 5, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\U00010810' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010820' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010830' */ 43, 43, 43, 43, 43, 43, 5, 43, 43, 5, 5, 5, 43, 5, 5, 43 }; static sbyte[] mapC9 = new sbyte[52] { -/* '\U00010A00' */ 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -/* '\U00010A10' */ 45, 45, 45, 45, 5, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010A20' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U00010A30' */ 45, 45, 45, 45 }; +/* '\U00010A00' */ 43, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, +/* '\U00010A10' */ 43, 43, 43, 43, 5, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010A20' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U00010A30' */ 43, 43, 43, 43 }; static sbyte[] mapC13 = new sbyte[338] { -/* '\U0001D400' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D410' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D420' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D430' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D440' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D450' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D460' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D470' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D480' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D490' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\U0001D4A0' */ 5, 5, 45, 5, 5, 45, 45, 5, 5, 45, 45, 45, 45, 5, 45, 45, -/* '\U0001D4B0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 5, 45, 45, 45, -/* '\U0001D4C0' */ 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D4D0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D4E0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D4F0' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D500' */ 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 5, 5, 45, 45, 45, -/* '\U0001D510' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\U0001D520' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D530' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 5, -/* '\U0001D540' */ 45, 45, 45, 45, 45, 5, 45, 5, 5, 5, 45, 45, 45, 45, 45, 45, -/* '\U0001D550' */ 45, 5 }; +/* '\U0001D400' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D410' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D420' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D430' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D440' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D450' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D460' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D470' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D480' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D490' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\U0001D4A0' */ 5, 5, 43, 5, 5, 43, 43, 5, 5, 43, 43, 43, 43, 5, 43, 43, +/* '\U0001D4B0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 5, 43, 43, 43, +/* '\U0001D4C0' */ 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D4D0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D4E0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D4F0' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D500' */ 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 5, 5, 43, 43, 43, +/* '\U0001D510' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\U0001D520' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D530' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 5, +/* '\U0001D540' */ 43, 43, 43, 43, 43, 5, 43, 5, 5, 5, 43, 43, 43, 43, 43, 43, +/* '\U0001D550' */ 43, 5 }; static sbyte[] mapC15 = new sbyte[294] { -/* '\U0001D6A6' */ 5, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D6B6' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, -/* '\U0001D6C6' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D6D6' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D6E6' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D6F6' */ 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D706' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\U0001D716' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D726' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, -/* '\U0001D736' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D746' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\U0001D756' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D766' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, -/* '\U0001D776' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D786' */ 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D796' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D7A6' */ 45, 45, 45, 5, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -/* '\U0001D7B6' */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 5, 45, 45, -/* '\U0001D7C6' */ 45, 45, 45, 45, 45, 45 }; +/* '\U0001D6A6' */ 5, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D6B6' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, +/* '\U0001D6C6' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D6D6' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D6E6' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D6F6' */ 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D706' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\U0001D716' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D726' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, +/* '\U0001D736' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D746' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\U0001D756' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D766' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, +/* '\U0001D776' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D786' */ 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D796' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D7A6' */ 43, 43, 43, 5, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, +/* '\U0001D7B6' */ 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 43, 43, +/* '\U0001D7C6' */ 43, 43, 43, 43, 43, 43 }; static sbyte MapC(int code) { // '\U00010000' <= code <= '\U0010FFFF' @@ -1116,7 +1116,7 @@ public PT parsertools; return mapC2[code - 66304]; else // '\U00010400' <= code <= '\U000107FF' if (code < 66718) // '\U00010400' <= code <= '\U0001049D' - return (sbyte)45; + return (sbyte)43; else // '\U0001049E' <= code <= '\U000107FF' return (sbyte)5; else // '\U00010800' <= code <= '\U00010A33' @@ -1127,7 +1127,7 @@ public PT parsertools; return (sbyte)5; else // '\U00010900' <= code <= '\U00010A33' if (code < 67862) // '\U00010900' <= code <= '\U00010915' - return (sbyte)45; + return (sbyte)43; else // '\U00010916' <= code <= '\U00010A33' if (code < 68096) // '\U00010916' <= code <= '\U000109FF' return (sbyte)5; @@ -1139,7 +1139,7 @@ public PT parsertools; if (code < 73728) // '\U00010A34' <= code <= '\U00011FFF' return (sbyte)5; else // '\U00012000' <= code <= '\U0001236E' - return (sbyte)45; + return (sbyte)43; else // '\U0001236F' <= code <= '\U0001D6A5' if (code < 119808) // '\U0001236F' <= code <= '\U0001D3FF' return (sbyte)5; @@ -1147,7 +1147,7 @@ public PT parsertools; if (code < 120146) // '\U0001D400' <= code <= '\U0001D551' return mapC13[code - 119808]; else // '\U0001D552' <= code <= '\U0001D6A5' - return (sbyte)45; + return (sbyte)43; else // '\U0001D6A6' <= code <= '\U0010FFFF' if (code < 173783) // '\U0001D6A6' <= code <= '\U0002A6D6' if (code < 120780) // '\U0001D6A6' <= code <= '\U0001D7CB' @@ -1156,13 +1156,13 @@ public PT parsertools; if (code < 131072) // '\U0001D7CC' <= code <= '\U0001FFFF' return (sbyte)5; else // '\U00020000' <= code <= '\U0002A6D6' - return (sbyte)45; + return (sbyte)43; else // '\U0002A6D7' <= code <= '\U0010FFFF' if (code < 194560) // '\U0002A6D7' <= code <= '\U0002F7FF' return (sbyte)5; else // '\U0002F800' <= code <= '\U0010FFFF' if (code < 195102) // '\U0002F800' <= code <= '\U0002FA1D' - return (sbyte)45; + return (sbyte)43; else // '\U0002FA1E' <= code <= '\U0010FFFF' return (sbyte)5; } @@ -1177,57 +1177,56 @@ public PT parsertools; return MapC(code); } - static Table[] NxS = new Table[113] { + static Table[] NxS = new Table[111] { /* NxS[ 0] */ new Table(0, 0, 0, null), -/* NxS[ 1] */ new Table(1, 23, -1, new sbyte[] {59, -1, -1, -1, -1, -1, +/* NxS[ 1] */ new Table(1, 23, -1, new sbyte[] {58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 60}), + 59}), /* NxS[ 2] */ new Table(0, 0, -1, null), -/* NxS[ 3] */ new Table(4, 1, -1, new sbyte[] {107}), -/* NxS[ 4] */ new Table(30, 20, -1, new sbyte[] {56, 56, 56, -1, -1, -1, - -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, 56, 56, 56, 106}), -/* NxS[ 5] */ new Table(8, 1, -1, new sbyte[] {55}), -/* NxS[ 6] */ new Table(8, 16, -1, new sbyte[] {53, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 54}), +/* NxS[ 3] */ new Table(4, 1, -1, new sbyte[] {105}), +/* NxS[ 4] */ new Table(30, 18, -1, new sbyte[] {55, -1, -1, -1, -1, -1, + -1, -1, -1, 55, -1, -1, -1, -1, 55, 55, 55, 104}), +/* NxS[ 5] */ new Table(8, 1, -1, new sbyte[] {54}), +/* NxS[ 6] */ new Table(8, 16, -1, new sbyte[] {52, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 53}), /* NxS[ 7] */ new Table(0, 0, -1, null), /* NxS[ 8] */ new Table(0, 0, -1, null), -/* NxS[ 9] */ new Table(44, 38, 49, new sbyte[] {-1, 49, 50, 49, 49, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, -1, 50, 50}), -/* NxS[ 10] */ new Table(21, 28, -1, new sbyte[] {28, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, -1, 28, -1, 28, 28}), +/* NxS[ 9] */ new Table(42, 36, 48, new sbyte[] {-1, 48, 49, 48, 48, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1}), +/* NxS[ 10] */ new Table(21, 26, -1, new sbyte[] {27, -1, -1, -1, -1, -1, + -1, -1, -1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -1, + 27, -1, 27, 27}), /* NxS[ 11] */ new Table(0, 0, -1, null), -/* NxS[ 12] */ new Table(23, 1, -1, new sbyte[] {48}), -/* NxS[ 13] */ new Table(16, 1, -1, new sbyte[] {47}), +/* NxS[ 12] */ new Table(23, 1, -1, new sbyte[] {47}), +/* NxS[ 13] */ new Table(16, 1, -1, new sbyte[] {46}), /* NxS[ 14] */ new Table(0, 0, -1, null), /* NxS[ 15] */ new Table(0, 0, -1, null), /* NxS[ 16] */ new Table(0, 0, -1, null), -/* NxS[ 17] */ new Table(16, 5, -1, new sbyte[] {44, -1, 45, -1, 46}), -/* NxS[ 18] */ new Table(21, 28, -1, new sbyte[] {28, -1, -1, -1, -1, -1, - -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, -1, 28, 28, 28, 28}), +/* NxS[ 17] */ new Table(16, 5, -1, new sbyte[] {43, -1, 44, -1, 45}), +/* NxS[ 18] */ new Table(21, 26, -1, new sbyte[] {27, -1, -1, -1, -1, -1, + -1, -1, -1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -1, + 27, 27, 27, 27}), /* NxS[ 19] */ new Table(0, 0, -1, null), /* NxS[ 20] */ new Table(0, 0, -1, null), -/* NxS[ 21] */ new Table(23, 1, -1, new sbyte[] {43}), -/* NxS[ 22] */ new Table(23, 4, -1, new sbyte[] {41, -1, -1, 42}), -/* NxS[ 23] */ new Table(23, 1, -1, new sbyte[] {40}), -/* NxS[ 24] */ new Table(23, 5, -1, new sbyte[] {35, -1, -1, 36, 77}), +/* NxS[ 21] */ new Table(23, 1, -1, new sbyte[] {42}), +/* NxS[ 22] */ new Table(23, 4, -1, new sbyte[] {40, -1, -1, 41}), +/* NxS[ 23] */ new Table(23, 1, -1, new sbyte[] {39}), +/* NxS[ 24] */ new Table(23, 5, -1, new sbyte[] {34, -1, -1, 35, 75}), /* NxS[ 25] */ new Table(0, 0, -1, null), -/* NxS[ 26] */ new Table(30, 1, -1, new sbyte[] {76}), -/* NxS[ 27] */ new Table(16, 33, -1, new sbyte[] {73, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 27, 27, 74, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 27, -1, 74}), -/* NxS[ 28] */ new Table(21, 28, -1, new sbyte[] {28, -1, -1, -1, -1, -1, - -1, -1, -1, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, -1, 28, 28, 28, 28}), -/* NxS[ 29] */ new Table(0, 0, -1, null), -/* NxS[ 30] */ new Table(49, 2, 72, new sbyte[] {31, -1}), -/* NxS[ 31] */ new Table(49, 1, -1, new sbyte[] {72}), -/* NxS[ 32] */ new Table(30, 17, -1, new sbyte[] {32, 32, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), -/* NxS[ 33] */ new Table(30, 19, -1, new sbyte[] {33, 33, 74, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 74}), +/* NxS[ 26] */ new Table(0, 0, -1, null), +/* NxS[ 27] */ new Table(21, 26, -1, new sbyte[] {27, -1, -1, -1, -1, -1, + -1, -1, -1, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -1, + 27, 27, 27, 27}), +/* NxS[ 28] */ new Table(0, 0, -1, null), +/* NxS[ 29] */ new Table(16, 31, -1, new sbyte[] {72, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 29, -1, 73}), +/* NxS[ 30] */ new Table(47, 2, 71, new sbyte[] {31, -1}), +/* NxS[ 31] */ new Table(47, 1, -1, new sbyte[] {71}), +/* NxS[ 32] */ new Table(44, 1, -1, new sbyte[] {32}), +/* NxS[ 33] */ new Table(30, 17, -1, new sbyte[] {73, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 73}), /* NxS[ 34] */ new Table(0, 0, -1, null), /* NxS[ 35] */ new Table(0, 0, -1, null), /* NxS[ 36] */ new Table(0, 0, -1, null), @@ -1242,89 +1241,83 @@ public PT parsertools; /* NxS[ 45] */ new Table(0, 0, -1, null), /* NxS[ 46] */ new Table(0, 0, -1, null), /* NxS[ 47] */ new Table(0, 0, -1, null), -/* NxS[ 48] */ new Table(0, 0, -1, null), -/* NxS[ 49] */ new Table(21, 28, -1, new sbyte[] {49, -1, -1, -1, -1, -1, - -1, -1, -1, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, -1, 49, 49, 49, 49}), -/* NxS[ 50] */ new Table(30, 17, -1, new sbyte[] {50, 50, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 50}), +/* NxS[ 48] */ new Table(21, 26, -1, new sbyte[] {48, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, -1, + 48, 48, 48, 48}), +/* NxS[ 49] */ new Table(44, 1, -1, new sbyte[] {49}), +/* NxS[ 50] */ new Table(0, 13, -1, new sbyte[] {50, -1, -1, -1, -1, -1, + 50, -1, -1, -1, -1, -1, 50}), /* NxS[ 51] */ new Table(0, 13, -1, new sbyte[] {51, -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, -1, 51}), -/* NxS[ 52] */ new Table(0, 13, -1, new sbyte[] {52, -1, -1, -1, -1, -1, - 52, -1, -1, -1, -1, -1, 52}), +/* NxS[ 52] */ new Table(0, 0, -1, null), /* NxS[ 53] */ new Table(0, 0, -1, null), /* NxS[ 54] */ new Table(0, 0, -1, null), -/* NxS[ 55] */ new Table(0, 0, -1, null), -/* NxS[ 56] */ new Table(30, 19, -1, new sbyte[] {56, 56, 56, -1, -1, -1, - -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, 56, 56, 56}), -/* NxS[ 57] */ new Table(49, 1, -1, new sbyte[] {106}), -/* NxS[ 58] */ new Table(0, 0, -1, null), -/* NxS[ 59] */ new Table(0, 7, 59, new sbyte[] {-1, 59, 59, 59, 59, 59, +/* NxS[ 55] */ new Table(30, 17, -1, new sbyte[] {55, -1, -1, -1, -1, -1, + -1, -1, -1, 55, -1, -1, -1, -1, 55, 55, 55}), +/* NxS[ 56] */ new Table(47, 1, -1, new sbyte[] {104}), +/* NxS[ 57] */ new Table(0, 0, -1, null), +/* NxS[ 58] */ new Table(0, 7, 58, new sbyte[] {-1, 58, 58, 58, 58, 58, -1}), +/* NxS[ 59] */ new Table(0, 0, -1, null), /* NxS[ 60] */ new Table(0, 0, -1, null), /* NxS[ 61] */ new Table(0, 0, -1, null), /* NxS[ 62] */ new Table(0, 0, -1, null), -/* NxS[ 63] */ new Table(0, 0, -1, null), -/* NxS[ 64] */ new Table(9, 1, -1, new sbyte[] {65}), +/* NxS[ 63] */ new Table(9, 1, -1, new sbyte[] {64}), +/* NxS[ 64] */ new Table(0, 0, -1, null), /* NxS[ 65] */ new Table(0, 0, -1, null), -/* NxS[ 66] */ new Table(0, 0, -1, null), -/* NxS[ 67] */ new Table(1, 1, -1, new sbyte[] {70}), -/* NxS[ 68] */ new Table(4, 1, -1, new sbyte[] {112}), -/* NxS[ 69] */ new Table(0, 0, -1, null), -/* NxS[ 70] */ new Table(0, 7, 70, new sbyte[] {-1, 70, 70, 70, 70, 70, +/* NxS[ 66] */ new Table(1, 1, -1, new sbyte[] {69}), +/* NxS[ 67] */ new Table(4, 1, -1, new sbyte[] {110}), +/* NxS[ 68] */ new Table(0, 0, -1, null), +/* NxS[ 69] */ new Table(0, 7, 69, new sbyte[] {-1, 69, 69, 69, 69, 69, -1}), -/* NxS[ 71] */ new Table(44, 38, 28, new sbyte[] {29, 28, 27, 28, 28, 30, +/* NxS[ 70] */ new Table(42, 36, 27, new sbyte[] {28, 27, 29, 27, 27, 30, -1, 1, 2, 3, 4, 2, -1, 5, 6, 7, 8, 9, -1, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27}), -/* NxS[ 72] */ new Table(49, 2, 72, new sbyte[] {31, -1}), -/* NxS[ 73] */ new Table(30, 17, -1, new sbyte[] {33, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33}), -/* NxS[ 74] */ new Table(24, 23, -1, new sbyte[] {75, 75, -1, -1, -1, -1, - 32, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 32}), -/* NxS[ 75] */ new Table(30, 17, -1, new sbyte[] {32, 32, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), -/* NxS[ 76] */ new Table(31, 1, -1, new sbyte[] {34}), -/* NxS[ 77] */ new Table(32, 9, -1, new sbyte[] {78, -1, -1, -1, 79, -1, - -1, -1, 80}), -/* NxS[ 78] */ new Table(33, 1, -1, new sbyte[] {94}), -/* NxS[ 79] */ new Table(40, 1, -1, new sbyte[] {85}), -/* NxS[ 80] */ new Table(43, 1, -1, new sbyte[] {81}), -/* NxS[ 81] */ new Table(34, 1, -1, new sbyte[] {82}), -/* NxS[ 82] */ new Table(32, 1, -1, new sbyte[] {83}), -/* NxS[ 83] */ new Table(26, 1, -1, new sbyte[] {84}), -/* NxS[ 84] */ new Table(26, 1, -1, new sbyte[] {37}), -/* NxS[ 85] */ new Table(41, 1, -1, new sbyte[] {86}), + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}), +/* NxS[ 71] */ new Table(47, 2, 71, new sbyte[] {31, -1}), +/* NxS[ 72] */ new Table(44, 1, -1, new sbyte[] {33}), +/* NxS[ 73] */ new Table(24, 21, -1, new sbyte[] {74, 74, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), +/* NxS[ 74] */ new Table(44, 1, -1, new sbyte[] {32}), +/* NxS[ 75] */ new Table(30, 9, -1, new sbyte[] {76, -1, -1, -1, 77, -1, + -1, -1, 78}), +/* NxS[ 76] */ new Table(31, 1, -1, new sbyte[] {92}), +/* NxS[ 77] */ new Table(38, 1, -1, new sbyte[] {83}), +/* NxS[ 78] */ new Table(41, 1, -1, new sbyte[] {79}), +/* NxS[ 79] */ new Table(32, 1, -1, new sbyte[] {80}), +/* NxS[ 80] */ new Table(30, 1, -1, new sbyte[] {81}), +/* NxS[ 81] */ new Table(26, 1, -1, new sbyte[] {82}), +/* NxS[ 82] */ new Table(26, 1, -1, new sbyte[] {36}), +/* NxS[ 83] */ new Table(39, 1, -1, new sbyte[] {84}), +/* NxS[ 84] */ new Table(38, 1, -1, new sbyte[] {85}), +/* NxS[ 85] */ new Table(30, 1, -1, new sbyte[] {86}), /* NxS[ 86] */ new Table(40, 1, -1, new sbyte[] {87}), -/* NxS[ 87] */ new Table(32, 1, -1, new sbyte[] {88}), -/* NxS[ 88] */ new Table(42, 1, -1, new sbyte[] {89}), -/* NxS[ 89] */ new Table(32, 1, -1, new sbyte[] {90}), -/* NxS[ 90] */ new Table(39, 1, -1, new sbyte[] {91}), -/* NxS[ 91] */ new Table(40, 1, -1, new sbyte[] {92}), -/* NxS[ 92] */ new Table(26, 1, -1, new sbyte[] {93}), -/* NxS[ 93] */ new Table(26, 1, -1, new sbyte[] {38}), -/* NxS[ 94] */ new Table(34, 1, -1, new sbyte[] {95}), -/* NxS[ 95] */ new Table(35, 1, -1, new sbyte[] {96}), -/* NxS[ 96] */ new Table(32, 1, -1, new sbyte[] {97}), -/* NxS[ 97] */ new Table(36, 1, -1, new sbyte[] {98}), +/* NxS[ 87] */ new Table(30, 1, -1, new sbyte[] {88}), +/* NxS[ 88] */ new Table(37, 1, -1, new sbyte[] {89}), +/* NxS[ 89] */ new Table(38, 1, -1, new sbyte[] {90}), +/* NxS[ 90] */ new Table(26, 1, -1, new sbyte[] {91}), +/* NxS[ 91] */ new Table(26, 1, -1, new sbyte[] {37}), +/* NxS[ 92] */ new Table(32, 1, -1, new sbyte[] {93}), +/* NxS[ 93] */ new Table(33, 1, -1, new sbyte[] {94}), +/* NxS[ 94] */ new Table(30, 1, -1, new sbyte[] {95}), +/* NxS[ 95] */ new Table(34, 1, -1, new sbyte[] {96}), +/* NxS[ 96] */ new Table(34, 1, -1, new sbyte[] {97}), +/* NxS[ 97] */ new Table(35, 1, -1, new sbyte[] {98}), /* NxS[ 98] */ new Table(36, 1, -1, new sbyte[] {99}), /* NxS[ 99] */ new Table(37, 1, -1, new sbyte[] {100}), -/* NxS[ 100] */ new Table(38, 1, -1, new sbyte[] {101}), -/* NxS[ 101] */ new Table(39, 1, -1, new sbyte[] {102}), -/* NxS[ 102] */ new Table(26, 1, -1, new sbyte[] {103}), -/* NxS[ 103] */ new Table(26, 1, -1, new sbyte[] {39}), -/* NxS[ 104] */ new Table(0, 13, -1, new sbyte[] {51, -1, -1, -1, -1, -1, - 51, -1, -1, -1, -1, 105, 51}), -/* NxS[ 105] */ new Table(0, 13, -1, new sbyte[] {52, -1, -1, -1, -1, -1, - 52, -1, -1, -1, -1, -1, 52}), -/* NxS[ 106] */ new Table(49, 2, 106, new sbyte[] {57, -1}), -/* NxS[ 107] */ new Table(0, 7, 107, new sbyte[] {-1, 107, 58, 107, 107, 107, +/* NxS[ 100] */ new Table(26, 1, -1, new sbyte[] {101}), +/* NxS[ 101] */ new Table(26, 1, -1, new sbyte[] {38}), +/* NxS[ 102] */ new Table(0, 13, -1, new sbyte[] {50, -1, -1, -1, -1, -1, + 50, -1, -1, -1, -1, 103, 50}), +/* NxS[ 103] */ new Table(0, 13, -1, new sbyte[] {51, -1, -1, -1, -1, -1, + 51, -1, -1, -1, -1, -1, 51}), +/* NxS[ 104] */ new Table(47, 2, 104, new sbyte[] {56, -1}), +/* NxS[ 105] */ new Table(0, 7, 105, new sbyte[] {-1, 105, 57, 105, 105, 105, -1}), -/* NxS[ 108] */ new Table(2, 1, 61, new sbyte[] {62}), -/* NxS[ 109] */ new Table(8, 1, 63, new sbyte[] {64}), -/* NxS[ 110] */ new Table(0, 0, -1, null), -/* NxS[ 111] */ new Table(1, 3, 66, new sbyte[] {67, 66, 68}), -/* NxS[ 112] */ new Table(0, 7, 112, new sbyte[] {-1, 112, 69, 112, 112, 112, +/* NxS[ 106] */ new Table(2, 1, 60, new sbyte[] {61}), +/* NxS[ 107] */ new Table(8, 1, 62, new sbyte[] {63}), +/* NxS[ 108] */ new Table(0, 0, -1, null), +/* NxS[ 109] */ new Table(1, 3, 65, new sbyte[] {66, 65, 67}), +/* NxS[ 110] */ new Table(0, 7, 110, new sbyte[] {-1, 110, 68, 110, 110, 110, -1}), }; @@ -1335,7 +1328,7 @@ int NextState() { unchecked { int rslt; int idx = Map(code) - NxS[state].min; - if (idx < 0) idx += 50; + if (idx < 0) idx += 48; if ((uint)idx >= (uint)NxS[state].rng) rslt = NxS[state].dflt; else rslt = NxS[state].nxt[idx]; return rslt; @@ -1761,7 +1754,6 @@ yylval = new Union(); yylval.op = new op_type_node(Operators.Division); return ( case 2: case 4: case 9: - case 26: case 30: parsertools.AddErrorFromResource("UNEXPECTED_SYMBOL{0}",CurrentLexLocation, yytext); return -1; @@ -1829,13 +1821,10 @@ yylval = new Union(); yylval.op = new op_type_node(Operators.Less); return (int) case 25: yylval = new Union(); yylval.op = new op_type_node(Operators.Deref); return (int)Tokens.tkDeref; break; - case 27: -yylval = new Union(); - currentLexLocation = CurrentLexLocation; - yylval.ex = parsertools.create_int_const(yytext,currentLexLocation); - return (int)Tokens.tkInteger; + case 26: +yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; break; - case 28: + case 27: string cur_yytext = yytext; int res = Keywords.KeywordOrIDToken(cur_yytext); currentLexLocation = CurrentLexLocation; @@ -2037,9 +2026,15 @@ string cur_yytext = yytext; } return res; break; - case 29: + case 28: return (int)Tokens.INVISIBLE; break; + case 29: +yylval = new Union(); + currentLexLocation = CurrentLexLocation; + yylval.ex = parsertools.create_int_const(yytext,currentLexLocation); + return (int)Tokens.tkInteger; + break; case 31: yylval = new Union(); currentLexLocation = CurrentLexLocation; @@ -2054,89 +2049,86 @@ yylval = new Union(); return (int)Tokens.tkFloat; break; case 34: -yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; - break; - case 35: yylval = new Union(); yylval.op = new op_type_node(Operators.LessEqual); return (int)Tokens.tkLowerEqual; break; - case 36: + case 35: yylval = new Union(); yylval.op = new op_type_node(Operators.NotEqual); return (int)Tokens.tkNotEqual; break; - case 37: + case 36: return (int)Tokens.tkParseModeType; break; - case 38: + case 37: return (int)Tokens.tkParseModeStatement; break; - case 39: + case 38: return (int)Tokens.tkParseModeExpression; break; - case 40: + case 39: yylval = new Union(); yylval.op = new op_type_node(Operators.GreaterEqual); return (int)Tokens.tkGreaterEqual; break; - case 41: + case 40: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentSubtraction); return (int)Tokens.tkMinusEqual; break; - case 42: + case 41: yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; break; - case 43: + case 42: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentAddition); return (int)Tokens.tkPlusEqual; break; - case 44: + case 43: return (int)Tokens.tkQuestionPoint; break; - case 45: + case 44: return (int)Tokens.tkQuestionSquareOpen; break; - case 46: + case 45: return (int)Tokens.tkDoubleQuestion; break; - case 47: + case 46: return (int)Tokens.tkDotDot; break; - case 48: + case 47: yylval = new Union(); yylval.op = new op_type_node(Operators.Assignment); return (int)Tokens.tkAssign; break; - case 49: + case 48: yylval = new Union(); yylval.id = new ident(yytext,CurrentLexLocation); return (int)Tokens.tkDirectiveName; break; - case 50: + case 49: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.stn = parsertools.create_sharp_char_const(yytext,currentLexLocation); return (int)Tokens.tkAsciiChar; break; - case 51: + case 50: yylval = new Union(); yylval.ti = new token_info("##",CurrentLexLocation); return (int)Tokens.tkShortProgram; break; - case 52: + case 51: yylval = new Union(); yylval.ti = new token_info("###",CurrentLexLocation); return (int)Tokens.tkShortSFProgram; break; - case 53: + case 52: yylval = new Union(); yylval.op = new op_type_node(Operators.Power); return (int)Tokens.tkStarStar; break; - case 54: + case 53: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentMultiplication); return (int)Tokens.tkMultEqual; break; - case 55: + case 54: BEGIN(COMMENT1); break; - case 56: + case 55: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_hex_const(yytext,currentLexLocation); return (int)Tokens.tkHex; break; - case 57: + case 56: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.stn = parsertools.create_format_string_const(yytext,currentLexLocation); return (int)Tokens.tkFormatStringLiteral; break; - case 58: + case 57: if (parsertools.build_tree_for_formatter) break; @@ -2192,36 +2184,36 @@ if (parsertools.build_tree_for_formatter) Defines.Remove(directiveparam); } break; - case 59: + case 58: { } break; - case 60: + case 59: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentDivision); return (int)Tokens.tkDivEqual; break; - case 61: + case 60: { } break; + case 61: +BEGIN(INITIAL); + break; case 62: -BEGIN(INITIAL); - break; case 63: - case 64: { } break; + case 64: +BEGIN(INITIAL); + break; case 65: -BEGIN(INITIAL); - break; case 66: case 67: - case 68: { } break; - case 69: + case 68: parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); parsertools.CheckDirectiveParams(directivename,directiveparam); // directivename in UPPERCASE! if (directivename == "IFDEF") @@ -2253,7 +2245,7 @@ parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); BEGIN(INITIAL); } break; - case 70: + case 69: { } diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex index 0778f463b..16effda02 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex @@ -218,7 +218,9 @@ UNICODEARROW \x890 "<>" { yylval = new Union(); yylval.op = new op_type_node(Operators.NotEqual); return (int)Tokens.tkNotEqual; } "^" { yylval = new Union(); yylval.op = new op_type_node(Operators.Deref); return (int)Tokens.tkDeref; } "->" { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; } -\x2192 { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; } + +\u2192 { yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; } + \<\\> { return (int)Tokens.tkParseModeExpression; } \<\\> { return (int)Tokens.tkParseModeStatement; } \<\\> { return (int)Tokens.tkParseModeType; } diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index da221a9d4..9ac01f4f0 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -3934,10 +3934,6 @@ factor { $$ = new pascal_set_constant($2 as expression_list, @$); } - | tkVertParen elem_list tkVertParen - { - $$ = new array_const_new($2 as expression_list, @$); - } | tkNot factor { $$ = new un_expr($2, $1.type, @$); @@ -4110,6 +4106,10 @@ variable } $$ = new slice_expr_question($1 as addressed_value,fe.expr,fe.format1,fe.format2,@$); } + | tkVertParen elem_list tkVertParen + { + $$ = new array_const_new($2 as expression_list, @$); + } | variable tkRoundOpen optional_expr_list tkRoundClose { $$ = new method_call($1 as addressed_value,$3 as expression_list, @$); diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index d99da2a5d..82564329c 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -1,9 +1,9 @@ // (see accompanying GPPGcopyright.rtf) // GPPG version 1.3.6 -// Machine: IVAN-PC -// DateTime: 26.07.2020 13:45:32 -// UserName: Ivan +// Machine: DESKTOP-G8V08V4 +// DateTime: 29.07.2020 11:15:12 +// UserName: ????????? // Input file // options: no-lines gplex @@ -296,43 +296,43 @@ public partial class GPPGParser: ShiftReduceParser tkVertParen, elem_list, tkVertParen -{ - CurrentSemanticValue.ex = new array_const_new(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 737: // factor -> tkNot, factor + case 736: // factor -> tkNot, factor { CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 738: // factor -> sign, factor + case 737: // factor -> sign, factor { if (ValueStack[ValueStack.Depth-2].op.type == Operators.Minus) { @@ -6345,96 +6340,96 @@ public partial class GPPGParser: ShiftReduceParser tkDeref, factor + case 738: // factor -> tkDeref, factor { CurrentSemanticValue.ex = new index(ValueStack[ValueStack.Depth-1].ex, true, CurrentLocationSpan); } break; - case 740: // factor -> var_reference + case 739: // factor -> var_reference { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 741: // factor -> tuple + case 740: // factor -> tuple { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 742: // literal_or_number -> literal + case 741: // literal_or_number -> literal { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 743: // literal_or_number -> unsigned_number + case 742: // literal_or_number -> unsigned_number { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 744: // var_question_point -> variable, tkQuestionPoint, variable + case 743: // var_question_point -> variable, tkQuestionPoint, variable { CurrentSemanticValue.ex = new dot_question_node(ValueStack[ValueStack.Depth-3].ex as addressed_value,ValueStack[ValueStack.Depth-1].ex as addressed_value,CurrentLocationSpan); } break; - case 745: // var_question_point -> variable, tkQuestionPoint, var_question_point + case 744: // var_question_point -> variable, tkQuestionPoint, var_question_point { CurrentSemanticValue.ex = new dot_question_node(ValueStack[ValueStack.Depth-3].ex as addressed_value,ValueStack[ValueStack.Depth-1].ex as addressed_value,CurrentLocationSpan); } break; - case 746: // var_reference -> var_address, variable + case 745: // var_reference -> var_address, variable { CurrentSemanticValue.ex = NewVarReference(ValueStack[ValueStack.Depth-2].stn as get_address, ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); } break; - case 747: // var_reference -> variable + case 746: // var_reference -> variable { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 748: // var_reference -> var_question_point + case 747: // var_reference -> var_question_point { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 749: // var_address -> tkAddressOf + case 748: // var_address -> tkAddressOf { CurrentSemanticValue.stn = NewVarAddress(CurrentLocationSpan); } break; - case 750: // var_address -> var_address, tkAddressOf + case 749: // var_address -> var_address, tkAddressOf { CurrentSemanticValue.stn = NewVarAddress(ValueStack[ValueStack.Depth-2].stn as get_address, CurrentLocationSpan); } break; - case 751: // attribute_variable -> simple_type_identifier, optional_expr_list_with_bracket + case 750: // attribute_variable -> simple_type_identifier, optional_expr_list_with_bracket { CurrentSemanticValue.stn = new attribute(null, ValueStack[ValueStack.Depth-2].td as named_type_reference, ValueStack[ValueStack.Depth-1].stn as expression_list, CurrentLocationSpan); } break; - case 752: // attribute_variable -> template_type, optional_expr_list_with_bracket + case 751: // attribute_variable -> template_type, optional_expr_list_with_bracket { CurrentSemanticValue.stn = new attribute(null, ValueStack[ValueStack.Depth-2].td as named_type_reference, ValueStack[ValueStack.Depth-1].stn as expression_list, CurrentLocationSpan); } break; - case 753: // dotted_identifier -> identifier + case 752: // dotted_identifier -> identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } break; - case 754: // dotted_identifier -> dotted_identifier, tkPoint, identifier_or_keyword + case 753: // dotted_identifier -> dotted_identifier, tkPoint, identifier_or_keyword { CurrentSemanticValue.ex = new dot_node(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); } break; - case 755: // variable_as_type -> dotted_identifier + case 754: // variable_as_type -> dotted_identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex;} break; - case 756: // variable_as_type -> dotted_identifier, template_type_params + case 755: // variable_as_type -> dotted_identifier, template_type_params { CurrentSemanticValue.ex = new ident_with_templateparams(ValueStack[ValueStack.Depth-2].ex as addressed_value, ValueStack[ValueStack.Depth-1].stn as template_param_list, CurrentLocationSpan); } break; - case 757: // variable_or_literal_or_number -> variable + case 756: // variable_or_literal_or_number -> variable { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 758: // variable_or_literal_or_number -> literal_or_number + case 757: // variable_or_literal_or_number -> literal_or_number { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 759: // variable -> identifier + case 758: // variable -> identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } break; - case 760: // variable -> operator_name_ident + case 759: // variable -> operator_name_ident { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 761: // variable -> tkInherited, identifier + case 760: // variable -> tkInherited, identifier { CurrentSemanticValue.ex = new inherited_ident(ValueStack[ValueStack.Depth-1].id.name, CurrentLocationSpan); } break; - case 762: // variable -> tkRoundOpen, expr, tkRoundClose + case 761: // variable -> tkRoundOpen, expr, tkRoundClose { if (!parsertools.build_tree_for_formatter) { @@ -6444,18 +6439,18 @@ public partial class GPPGParser: ShiftReduceParser sizeof_expr + case 762: // variable -> sizeof_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 764: // variable -> typeof_expr + case 763: // variable -> typeof_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 765: // variable -> literal_or_number, tkPoint, identifier_or_keyword + case 764: // variable -> literal_or_number, tkPoint, identifier_or_keyword { CurrentSemanticValue.ex = new dot_node(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); } break; - case 766: // variable -> variable_or_literal_or_number, tkSquareOpen, expr_list, + case 765: // variable -> variable_or_literal_or_number, tkSquareOpen, expr_list, // tkSquareClose { var el = ValueStack[ValueStack.Depth-2].stn as expression_list; // SSM 10/03/16 @@ -6474,7 +6469,7 @@ public partial class GPPGParser: ShiftReduceParser variable, tkQuestionSquareOpen, format_expr, tkSquareClose + case 766: // variable -> variable, tkQuestionSquareOpen, format_expr, tkSquareClose { var fe = ValueStack[ValueStack.Depth-2].ex as format_expr; // SSM 9/01/17 if (!parsertools.build_tree_for_formatter) @@ -6487,6 +6482,11 @@ public partial class GPPGParser: ShiftReduceParser tkVertParen, elem_list, tkVertParen +{ + CurrentSemanticValue.ex = new array_const_new(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; case 768: // variable -> variable, tkRoundOpen, optional_expr_list, tkRoundClose { CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value,ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index 24435c450..ee2f89ed5 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -275,5 +275,6 @@ script= + diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index cdb9ce778..4cc0b3877 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2603 +3.6.3.2604 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 0fa7746b4..3f04c1a78 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2603' +!define VERSION '3.6.3.2604' diff --git a/SyntaxTree/tree/SyntaxTreeStreamReader.cs b/SyntaxTree/tree/SyntaxTreeStreamReader.cs index 655e81b51..9513c68fb 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamReader.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamReader.cs @@ -4426,7 +4426,7 @@ namespace PascalABCCompiler.SyntaxTree public void read_array_const_new(array_const_new _array_const_new) { - read_expression(_array_const_new); + read_addressed_value(_array_const_new); _array_const_new.elements = _read_node() as expression_list; } diff --git a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs index 19a9bd3f0..a924a86d0 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs @@ -6917,7 +6917,7 @@ namespace PascalABCCompiler.SyntaxTree public void write_array_const_new(array_const_new _array_const_new) { - write_expression(_array_const_new); + write_addressed_value(_array_const_new); if (_array_const_new.elements == null) { bw.Write((byte)0); diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs index 1c77cfb11..7605d2ed2 100644 --- a/SyntaxTree/tree/Tree.cs +++ b/SyntaxTree/tree/Tree.cs @@ -54037,7 +54037,7 @@ namespace PascalABCCompiler.SyntaxTree /// /// [Serializable] - public partial class array_const_new : expression + public partial class array_const_new : addressed_value { /// diff --git a/SyntaxTree/tree/tree.xml b/SyntaxTree/tree/tree.xml index 9012bdd69..86ab98f1d 100644 --- a/SyntaxTree/tree/tree.xml +++ b/SyntaxTree/tree/tree.xml @@ -3270,7 +3270,7 @@ - + diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index bfef6f463..b8ab8c372 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -1941,7 +1941,7 @@ function TryReadIntegerFromString(s: string; var from: integer; var res: integer function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; ///-procedure Val(s: string; var value: число; var err: integer); -/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. +/// Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value. ///Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: integer; var err: integer); ///-- @@ -2122,6 +2122,9 @@ procedure Reverse(var s: string); procedure Reverse(var s: string; index, count: integer); /// Перемешивает динамический массив случайным образом procedure Shuffle(a: array of T); +/// Возвращает, совпадают ли массивы +function ArrEqual(a, b: array of T): boolean; + /// Сравнивает матрицы на равенство function MatrEqual(a, b: array [,] of T): boolean; /// Перемешивает список случайным образом @@ -2254,8 +2257,6 @@ function ReadArrReal(prompt: string; n: integer): array of real; /// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры function ReadArrString(prompt: string; n: integer): array of string; -/// Возвращает, совпадают ли массивы -function ArrEqual(a, b: array of T): boolean; // ----------------------------------------------------- //>> Подпрограммы для создания двумерных динамических массивов # Subroutines for matrixes diff --git a/TestSuite/CompilationSamples/SF.pas b/TestSuite/CompilationSamples/SF.pas index f4f8a9f10..c414e4a0b 100644 --- a/TestSuite/CompilationSamples/SF.pas +++ b/TestSuite/CompilationSamples/SF.pas @@ -11,6 +11,7 @@ function RI64 := ReadInt64; function RR := ReadReal; function RC := ReadChar; function RS := ReadString; +function RL := ReadLexem; function RlnI := ReadlnInteger; function RlnBI := ReadlnBigInteger; @@ -68,36 +69,126 @@ function Prln(Self: char): char; extensionmethod := Self.Println; function Prln(Self: boolean): boolean; extensionmethod := Self.Println; function Prln(Self: string): string; extensionmethod := Self.Println; +/// Записывает в min значение x если xmax procedure ReMax(var max: integer; x: integer); begin if x > max then max := x end; +/// Записывает в min значение x если xmax procedure ReMax(var max: real; x: real); begin if x > max then max := x end; +/// Преобразует строку в целое function ToI(Self: string); extensionmethod := Self.ToInteger; +/// Преобразует строку в вещественное function ToR(Self: string); extensionmethod := Self.ToReal; +/// Преобразует строку в массив целых +function ToIs(Self: string); extensionmethod := Self.ToIntegers; + +/// Преобразует строку в массив вещественных +function ToRs(Self: string); extensionmethod := Self.ToReals; + function operator-(c,c1: char): integer; extensionmethod := Ord(c) - Ord(c1); +/// Возвращает длину строки function Len(Self: string): integer; extensionmethod := Self.Length; +/// Возвращает длину массива +function Len(Self: array of T): integer; extensionmethod := Self.Length; + +/// Возвращает среднее элементов последовательности +function Av(Self: sequence of integer): real; extensionmethod := Self.Average; +/// Возвращает среднее элементов последовательности +function Av(Self: sequence of real): real; extensionmethod := Self.Average; + +function Dst(Self: sequence of T): sequence of T; extensionmethod := Self.Distinct; + +function Ord(Self: sequence of T): sequence of T; extensionmethod := Self.Order; +function OrdD(Self: sequence of T): sequence of T; extensionmethod := Self.OrderDescending; + +/// Преобразует последовательность в строку +function Str(Self: sequence of T): string; extensionmethod := Self.JoinToString; + +/// Выводит последовательность, разделяя элементы пробелами +function Pr(Self: sequence of T): sequence of T; extensionmethod := Self.Print; +/// Выводит последовательность, разделяя элементы пробелами, и переходит на новую строку +function Prln(Self: sequence of T): sequence of T; extensionmethod := Self.Println; + +/// Возвращает инвертированную последовательность +function Rev(Self: sequence of T): sequence of T; extensionmethod := Self.Reverse; + +/// Преобразует последовательность, используя функцию transform +function Sel(Self: sequence of T; transform: T->T1): sequence of T1; extensionmethod := Self.Select(transform); + +/// Фильтрует последовательность по условию cond +function Wh(Self: sequence of T; cond: T->boolean): sequence of T; extensionmethod := Self.Where(cond); + +/// Преобразует последовательность в массив +function ToA(Self: sequence of T): array of T; extensionmethod := Self.ToArray; + +/// Преобразует последовательность в список +function ToL(Self: sequence of T): List; extensionmethod := Self.ToList; + +/// Преобразует последовательность в HashSet +function ToHS(Self: sequence of T): HashSet; extensionmethod := Self.ToHashSet; +/// Преобразует последовательность в SortedSet +function ToSS(Self: sequence of T): SortedSet; extensionmethod := Self.ToSortedSet; + +/// Преобразует последовательность в HashSet +function HS(s: sequence of T): HashSet := s.ToHashSet; +/// Преобразует последовательность в SortedSet +function SS(s: sequence of T): SortedSet := s.ToSortedSet; + +/// Инвертирует последовательность +procedure Rev(a: array of T) := Reverse(a); + +/// Возвращает индекс минимального элемента +function IMin(Self: array of T): integer; extensionmethod; where T: IComparable; +begin + Result := Self.IndexMin; +end; + +/// Возвращает индекс максимального элемента +function IMax(Self: array of T): integer; extensionmethod; where T: IComparable; +begin + Result := Self.IndexMax; +end; + +/// Возвращает True если массивы равны +function Eq(Self,b: array of T): boolean; extensionmethod := Self.ArrEqual(b); + +/// Возвращает в виде массива все элементы, удовлетворяющие cond +function Filt(Self: array of T; cond: T->boolean): array of T; extensionmethod := Self.FindAll(cond); + +/// Возвращает массив с элементами, преобразованными по правилу transform +function Tr(Self: array of T; transform: T->T): array of T; extensionmethod := Self.ConvertAll(transform); + +/// Преобразует массив по правилу transform +procedure Tr(a: array of T; transform: T->T) := a.Transform(transform); + +/// Возвращает индекс последнего элемента массива +function H(Self: array of T): integer; extensionmethod := Self.High; + + end. \ No newline at end of file diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 3baaf5af1..b8ab8c372 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -1941,7 +1941,7 @@ function TryReadIntegerFromString(s: string; var from: integer; var res: integer function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; ///-procedure Val(s: string; var value: число; var err: integer); -/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. +/// Преобразует строковое представление s целого или вещественного числа к числовому значению и записывает его в переменную value. ///Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: integer; var err: integer); ///-- diff --git a/bin/Lib/SF.pas b/bin/Lib/SF.pas index d683205f8..c414e4a0b 100644 --- a/bin/Lib/SF.pas +++ b/bin/Lib/SF.pas @@ -187,5 +187,8 @@ function Tr(Self: array of T; transform: T->T): array of T; extensionmethod : /// Преобразует массив по правилу transform procedure Tr(a: array of T; transform: T->T) := a.Transform(transform); +/// Возвращает индекс последнего элемента массива +function H(Self: array of T): integer; extensionmethod := Self.High; + end. \ No newline at end of file From a4804f31a3d647b69965da68f43c8392f6a76b1b Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sat, 1 Aug 2020 00:13:27 +0300 Subject: [PATCH 06/18] =?UTF-8?q?Controls=20-=20=D0=BF=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CodeCompletion/DomSyntaxTreeVisitor.cs | 10 +- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- .../Graphics/Controls/cc10_ComboBox.pas | 27 ++++ .../Graphics/Controls/cc11_ComboBox2.pas | 22 +++ .../Graphics/Controls/cc12_Wrapping.pas | 18 +++ .../Controls/cc13_Заголовки.pas | 38 +++++ .../Graphics/Controls/cc14_Canvas.pas | 17 +++ .../Graphics/Controls/cc15_ListView.pas | 23 +++ .../Graphics/Controls/cc16_Countries.pas | 19 +++ .../Graphics/Controls/cc17_CalcIdea.pas | 14 ++ .../Graphics/Controls/cc18_SimpleCalc.pas | 30 ++++ .../Graphics/Controls/cc19_StatusBar.pas | 17 +++ .../Graphics/Controls/cc1_All.pas | 34 +++++ .../Graphics/Controls/cc20_Menu.pas | 17 +++ .../Graphics/Controls/cc20_Menu2.pas | 10 ++ .../Graphics/Controls/cc21_FileDialogs.pas | 39 +++++ .../Graphics/Controls/cc22_MsgBox.pas | 19 +++ .../Controls/cc23_Random3DSpheres.pas | 13 ++ .../Graphics/Controls/cc24_RGB.pas | 32 ++++ .../Graphics/Controls/cc2_All2.pas | 59 ++++++++ .../Graphics/Controls/cc3_All3.pas | 34 +++++ .../Graphics/Controls/cc4_ButtonClick.pas | 19 +++ .../Graphics/Controls/cc5_CheckBoxes.pas | 20 +++ .../Graphics/Controls/cc6_CheckBoxes2.pas | 33 ++++ .../Graphics/Controls/cc7_RadioButtons.pas | 26 ++++ .../Graphics/Controls/cc8_MoveObject.pas | 28 ++++ .../Graphics/Controls/cc8a_MoveObject.pas | 27 ++++ .../Graphics/Controls/cc9_ListBox.pas | 28 ++++ Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/GraphWPF.pas | 26 ++-- TestSuite/CompilationSamples/GraphWPFBase.pas | 19 ++- TestSuite/CompilationSamples/PABCSystem.pas | 4 +- bin/Lib/Controls.pas | 141 ++++++++++++++---- bin/Lib/GraphWPF.pas | 26 ++-- bin/Lib/GraphWPFBase.pas | 19 ++- bin/Lib/PABCSystem.pas | 4 +- bin/template.pct | 3 + 39 files changed, 849 insertions(+), 76 deletions(-) create mode 100644 InstallerSamples/Graphics/Controls/cc10_ComboBox.pas create mode 100644 InstallerSamples/Graphics/Controls/cc11_ComboBox2.pas create mode 100644 InstallerSamples/Graphics/Controls/cc12_Wrapping.pas create mode 100644 InstallerSamples/Graphics/Controls/cc13_Заголовки.pas create mode 100644 InstallerSamples/Graphics/Controls/cc14_Canvas.pas create mode 100644 InstallerSamples/Graphics/Controls/cc15_ListView.pas create mode 100644 InstallerSamples/Graphics/Controls/cc16_Countries.pas create mode 100644 InstallerSamples/Graphics/Controls/cc17_CalcIdea.pas create mode 100644 InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas create mode 100644 InstallerSamples/Graphics/Controls/cc19_StatusBar.pas create mode 100644 InstallerSamples/Graphics/Controls/cc1_All.pas create mode 100644 InstallerSamples/Graphics/Controls/cc20_Menu.pas create mode 100644 InstallerSamples/Graphics/Controls/cc20_Menu2.pas create mode 100644 InstallerSamples/Graphics/Controls/cc21_FileDialogs.pas create mode 100644 InstallerSamples/Graphics/Controls/cc22_MsgBox.pas create mode 100644 InstallerSamples/Graphics/Controls/cc23_Random3DSpheres.pas create mode 100644 InstallerSamples/Graphics/Controls/cc24_RGB.pas create mode 100644 InstallerSamples/Graphics/Controls/cc2_All2.pas create mode 100644 InstallerSamples/Graphics/Controls/cc3_All3.pas create mode 100644 InstallerSamples/Graphics/Controls/cc4_ButtonClick.pas create mode 100644 InstallerSamples/Graphics/Controls/cc5_CheckBoxes.pas create mode 100644 InstallerSamples/Graphics/Controls/cc6_CheckBoxes2.pas create mode 100644 InstallerSamples/Graphics/Controls/cc7_RadioButtons.pas create mode 100644 InstallerSamples/Graphics/Controls/cc8_MoveObject.pas create mode 100644 InstallerSamples/Graphics/Controls/cc8a_MoveObject.pas create mode 100644 InstallerSamples/Graphics/Controls/cc9_ListBox.pas diff --git a/CodeCompletion/DomSyntaxTreeVisitor.cs b/CodeCompletion/DomSyntaxTreeVisitor.cs index 341973cb8..7573f744d 100644 --- a/CodeCompletion/DomSyntaxTreeVisitor.cs +++ b/CodeCompletion/DomSyntaxTreeVisitor.cs @@ -2736,9 +2736,13 @@ namespace CodeCompletion } if (cur_scope != null && _program_module.program_block.program_code != null) { - cur_scope.body_loc = new location(_program_module.program_block.program_code.left_logical_bracket.source_context.end_position.line_num, - _program_module.program_block.program_code.left_logical_bracket.source_context.end_position.column_num, - _program_module.program_block.program_code.source_context.end_position.line_num, _program_module.program_block.program_code.source_context.end_position.column_num, + var left_line_num = _program_module.program_block.program_code.left_logical_bracket.source_context.end_position.line_num; + var left_column_num = _program_module.program_block.program_code.left_logical_bracket.source_context.end_position.column_num; + var right_line_num = _program_module.program_block.program_code.source_context.end_position.line_num; + var right_column_num = _program_module.program_block.program_code.source_context.end_position.column_num; + cur_scope.body_loc = new location(left_line_num, + left_column_num, + right_line_num, right_column_num, doc); _program_module.program_block.program_code.visit(this); } diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 9dc1e9936..035a1024b 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2604"; + public const string Revision = "2607"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 4cfaf70d5..67621ca1f 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=2604 %MINOR%=6 +%REVISION%=2607 +%COREVERSION%=3 %MAJOR%=3 diff --git a/InstallerSamples/Graphics/Controls/cc10_ComboBox.pas b/InstallerSamples/Graphics/Controls/cc10_ComboBox.pas new file mode 100644 index 000000000..9b8da1a62 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc10_ComboBox.pas @@ -0,0 +1,27 @@ +// Модуль Controls - элемент управления "Список" и использование словаря +uses Controls,GraphWPF; + +begin + Window.Title := 'Столицы стран'; + LeftPanel(150,Colors.Orange); + var l := ComboBox('Список стран'); + l.Tooltip := 'Выбери страну - отобразится столица'; + l.Add('Россия'); + l.Add('США'); + l.Add('Китай'); + l.Add('Германия'); + l.Add('Франция'); + + var d := Dict(('Россия','Москва'), + ('США','Вашингтон'), + ('Китай','Пекин'), + ('Германия','Берлин'), + ('Франция','Париж') + ); + + Font.Size := 70; + l.SelectionChanged := procedure -> begin + Window.Clear; + DrawText(GraphWindow.ClientRect,d[l.SelectedText]); + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc11_ComboBox2.pas b/InstallerSamples/Graphics/Controls/cc11_ComboBox2.pas new file mode 100644 index 000000000..ba766b416 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc11_ComboBox2.pas @@ -0,0 +1,22 @@ +// Модуль Controls - элемент управления "ComboBox" и графики функций +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - элемент управления "ComboBox" и графики функций'; + LeftPanel(150, Colors.Orange); + var cb := ComboBox('Графики функций'); + cb.AddRange('x*sin(x)','exp(x)','x*x','sin(x)-cos(2.5*x)'); + + var Redraw: procedure := () -> begin + case cb.SelectedIndex of + 0: DrawGraph(x->x*sin(x)); + 1: DrawGraph(x->exp(x)); + 2: DrawGraph(x->x*x); + 3: DrawGraph(x->sin(x)-cos(2.5*x)); + end; + end; + + cb.SelectionChanged := Redraw; + OnResize := Redraw; + Redraw; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc12_Wrapping.pas b/InstallerSamples/Graphics/Controls/cc12_Wrapping.pas new file mode 100644 index 000000000..713feb38e --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc12_Wrapping.pas @@ -0,0 +1,18 @@ +// Модуль Controls - режим Wrapping для TextBlock +uses GraphWPF,Controls; + +function R := Random(-7,7); + +begin + Window.Title := 'Модуль Controls - режим Wrapping для TextBlock'; + LeftPanel(150,Colors.Orange); + var b := Button('No Wrap'); + b.Tooltip := 'Нажмите для изменения режима переноса слов'; + + var tb1 := TextBlock('Этот текст не помещается на одной строке и в режиме Wrapping автоматически переносится'); + b.Click := procedure → begin + tb1.Wrapping := not tb1.Wrapping; + b.Text := if tb1.Wrapping then 'Wrap' else 'No Wrap'; + end; + var tb := TextBlock('Этот текст усекается,'#10'но можно явно'#10'разделять на строки'); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas b/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas new file mode 100644 index 000000000..d7b704399 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas @@ -0,0 +1,38 @@ +// Модуль Controls - элементы управления с заголовками +uses Controls, GraphWPF; + +begin + Window.Title := 'Модуль Controls - все элементы управления с заголовками'; + LeftPanel(170, Colors.Orange); + + var b := Button('Заголовки включены'); + + var tb := new TextBoxWPF('TextBox'); + tb.Height := 40; + tb.Text := 'Несколько строк текста'; + tb.Wrapping := True; + + var ib := new IntegerBoxWPF('IntegerBox', 0, 10); + var lb := new ListBoxWPF('ListBox',100); + lb.AddRange('1 2 3 4 5'.ToWords); + var cb := new ComboBoxWPF('ComboBox'); + cb.AddRange('1 2 3 4 5'.ToWords); + + b.Click := procedure -> begin + if b.Text = 'Заголовки включены' then + b.Text := 'Заголовки выключены' + else b.Text := 'Заголовки включены'; + if tb.Title = '' then + tb.Title := 'Заголовок' + else tb.Title := ''; + if ib.Title = '' then + ib.Title := 'Заголовок' + else ib.Title := ''; + if lb.Title = '' then + lb.Title := 'Заголовок' + else lb.Title := ''; + if cb.Title = '' then + cb.Title := 'Заголовок' + else cb.Title := ''; + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc14_Canvas.pas b/InstallerSamples/Graphics/Controls/cc14_Canvas.pas new file mode 100644 index 000000000..844ac4dfb --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc14_Canvas.pas @@ -0,0 +1,17 @@ +// Модуль Controls - замена графической панели на элемент управления "Канва" +uses Controls,GraphWPF; + +begin + Window.Title := 'Модуль Controls - замена графической панели на элемент управления "Канва"'; + var left := LeftPanel(150,Colors.Orange); + var can := SetMainControl.AsCanvas; + can.Color := Colors.AntiqueWhite; + + Button(100,100,'На Канве можно располагать элементы'); + Button(50,300,'в любом месте,'); + TextBlock(150,500,'указывая их координаты'); + + // Смена активной панели + SetActivePanel(left); + Button('Закрыть').Click := procedure → Window.Close; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc15_ListView.pas b/InstallerSamples/Graphics/Controls/cc15_ListView.pas new file mode 100644 index 000000000..25bcfe8a8 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc15_ListView.pas @@ -0,0 +1,23 @@ +// Модуль Controls - замена графического окна элементом "ListView" +uses Controls,GraphWPF; + +type My = auto class + i,j: integer; +public + property Поле1: integer read i; + property Поле2: integer read j; +end; + +begin + Window.Title := 'Модуль Controls - замена графического окна элементом "ListView"'; + LeftPanel(150,Colors.Orange); + + var l := SetMainControl.AsListView; + + // Заполнение объектами класса, у которых есть публичные свойства + l.Fill(Arr(new My(2,5),new My(4,6))); + + Button('Очистить список').Click := procedure -> l.Clear; + Button('Заполнить данными').Click := procedure -> l.Fill(|('Иванов',20),('Петров',19)|); + Button('Заполнить заголовки').Click := procedure -> l.SetHeaders('Фамилия','Возраст'); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc16_Countries.pas b/InstallerSamples/Graphics/Controls/cc16_Countries.pas new file mode 100644 index 000000000..02008d8e8 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc16_Countries.pas @@ -0,0 +1,19 @@ +// Модуль Controls - визуализация запросов к базе данных +uses GraphWPF,Controls,ABCDatabases; + +begin + Window.Title := 'Модуль Controls - визуализация запросов к базе данных'; + LeftPanel(150,Colors.Orange); + var l := SetMainControl.AsListView; + + var страны := ЗаполнитьМассивСтран; + l.Fill(страны); + + Button('Все').Click := procedure -> l.Fill(страны); + + Button('Азия').Click := procedure -> + l.Fill(страны.Where(страна -> страна.Континент='Азия')); + + Button('Сорт по населению').Click := procedure -> + l.Fill(страны.OrderByDescending(s -> s.Население)); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc17_CalcIdea.pas b/InstallerSamples/Graphics/Controls/cc17_CalcIdea.pas new file mode 100644 index 000000000..ac030bdc3 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc17_CalcIdea.pas @@ -0,0 +1,14 @@ +// Модуль Controls - Калькулятор Light +uses Controls,GraphWPF; + +begin + Window.Title := 'Калькулятор Light'; + LeftPanel(150, Colors.Orange); + var tb := SetMainControl.AsTextBox; + tb.FontSize := 30; + var x := IntegerBox('X:',1,9); + var y := IntegerBox('Y:',1,9); + Button('Sum').Click := procedure -> begin + tb.Println($'{x.Value} + {y.Value} = {x.Value + y.Value}'); + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas b/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas new file mode 100644 index 000000000..e92f47dd6 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas @@ -0,0 +1,30 @@ +// Модуль Controls - Калькулятор +uses Controls,GraphWPF; + +begin + Window.Title := 'Калькулятор с выводом в TextBox'; + LeftPanel(150, Colors.Orange); + var tb := SetMainControl.AsTextBox; + tb.FontSize := 30; + var x := IntegerBox('X:'); + var y := IntegerBox('Y:'); + + var cb := new ComboBoxWPF('Операция'); + cb.AddRange('+','-','*','/'); + + var b := Button('+'); + b.Click := procedure -> begin + case cb.SelectedString of + string('+'): tb.Println($'{x.Value} + {y.Value} = {x.Value + y.Value}'); + string('-'): tb.Println($'{x.Value} - {y.Value} = {x.Value - y.Value}'); + string('*'): tb.Println($'{x.Value} * {y.Value} = {x.Value * y.Value}'); + string('/'): tb.Println($'{x.Value} / {y.Value} = {x.Value / y.Value}'); + end; + x.Value := Random(0,10); + y.Value := Random(0,10); + end; + + cb.SelectionChanged := procedure -> begin + b.Text := cb.SelectedString + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc19_StatusBar.pas b/InstallerSamples/Graphics/Controls/cc19_StatusBar.pas new file mode 100644 index 000000000..0be2ecb95 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc19_StatusBar.pas @@ -0,0 +1,17 @@ +// Модуль Controls - StatusBar +uses Controls,GraphWPF; + +begin + Window.Title := 'Модуль Controls - StatusBar'; + var l := LeftPanel(150,Colors.Orange); + l.Tooltip := 'Измените размеры окна'; + var sb := StatusBar(24,55); + sb.AddText('',55); + Button('Очистить поле W').Click := procedure -> sb.ItemText[0] := ''; + Button('Очистить поле H').Click := procedure -> sb.ItemText[1] := ''; + OnResize := () -> begin + sb.ItemText[0] := 'W=' + Window.Width.Round; + sb.ItemText[1] := 'H=' + Window.Height.Round; + end; + OnResize(); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc1_All.pas b/InstallerSamples/Graphics/Controls/cc1_All.pas new file mode 100644 index 000000000..9d195f324 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc1_All.pas @@ -0,0 +1,34 @@ +// Модуль Controls - все элементы управления +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - все элементы управления'; + // Обычно элементы управления размещаются на панели - левой или правой + LeftPanel(160,Colors.Orange); + + Button('Кнопка'); + CheckBox('Флажок'); + RadioButton('Переключатель 1'); + RadioButton('Переключатель 2'); + TextBox('Поле ввода текста'); + var ib := IntegerBox('Поле ввода целого',0,10); + ib.Tooltip := 'Покрутите колёсико мыши для изменения значения'; + var l := ListBox('Список стран'); + l.Height := 110; + l.Add('Россия'); + l.Add('США'); + l.Add('Китай'); + l.Add('Германия'); + l.Add('Франция'); + var cb := ComboBox('Выпадающий список'); + cb.AddRange('Россия','США','Китай','Германия','Франция'); + + TextBlock('Слайдер'); + Slider(0,10); + TextBlock('Блок текста'); + IntegerBlock('Блок целого:',64); + RealBlock('Блок вещественного:',3.5); + + var s := StatusBar; + s.Text := 'Строка статуса'; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc20_Menu.pas b/InstallerSamples/Graphics/Controls/cc20_Menu.pas new file mode 100644 index 000000000..576c6d93f --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc20_Menu.pas @@ -0,0 +1,17 @@ +// Модуль Controls - меню +uses Controls,GraphWPF; + +begin + LeftPanel(150, Colors.Orange); + var m := new MenuWPF; + var mi1 := m.Add('File'); + mi1.Add('New'); + mi1.Add('Open'); + mi1.Add('Save'); + mi1.AddSeparator; + mi1.Add('Exit').Click := procedure->Window.Close; + //mi1.Add('Exit',procedure->Window.Close); + m.Add('Edit'); + m.Add('Options'); + var mi := m.Add('Help'); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc20_Menu2.pas b/InstallerSamples/Graphics/Controls/cc20_Menu2.pas new file mode 100644 index 000000000..6d1cd4bb5 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc20_Menu2.pas @@ -0,0 +1,10 @@ +// Модуль Controls - меню 2 +uses Controls,GraphWPF; + +begin + LeftPanel(150, Colors.Orange); + var m := new MenuWPF; + m.AddRange('File','Edit','Options','Help'); + m[0].AddRange('New','Open','Save','-','Exit'); + m[0][3].Click := procedure->Window.Close; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc21_FileDialogs.pas b/InstallerSamples/Graphics/Controls/cc21_FileDialogs.pas new file mode 100644 index 000000000..ea5f7a9a0 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc21_FileDialogs.pas @@ -0,0 +1,39 @@ +// Модуль Controls - OpenFileDialog и SaveFileDialog +uses Controls,GraphWPF; + +begin + Window.Title := 'Модуль Controls - OpenFileDialog и SaveFileDialog'; + LeftPanel(150, Colors.Orange); + var tb := SetMainControl.AsTextBox; + tb.FontSize := 16; + tb.ReadOnly := False; + tb.FontName := 'Courier new Cyr'; + + var dopen := new OpenFileDialogWPF('c:\PABCWork.NET','Программы|*.pas'); + var dSave := new SaveFileDialogWPF('c:\PABCWork.NET','Программы|*.pas'); + + var OpenHandler: procedure := procedure -> begin + var res := dopen.ShowDialog; + if res then + tb.Text := ReadAllText(dopen.FileName); + end; + var SaveHandler: procedure := procedure -> begin + var res := dSave.ShowDialog; + if res then + WriteAllText(dSave.FileName,tb.Text); + end; + + var bOpen := Button('Open'); + bOpen.Click := OpenHandler; + + var bSave := Button('Save'); + bSave.Click := SaveHandler; + + var m := Menu; + var m1 := m.Add('File'); + var mm1 := m1.Add('Open'); + mm1.Click := OpenHandler; + m1.Add('Save',SaveHandler); + m1.AddSeparator; + m1.Add('Exit',procedure->Window.Close); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc22_MsgBox.pas b/InstallerSamples/Graphics/Controls/cc22_MsgBox.pas new file mode 100644 index 000000000..89cce8fac --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc22_MsgBox.pas @@ -0,0 +1,19 @@ +// Модуль Controls - MessageBox +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - MessageBox'; + LeftPanel(150, Colors.Orange); + Button('MsgBoxOK').Click := () -> MessageBox.Show('Сообщение','Заголовок'); + Button('MsgBoxYesNo').Click := () -> begin + if MessageBox.Show('Сообщение','Заголовок',MessageBoxButton.YesNo) = MessageBoxResult.Yes then + Print('Yes') + else Print('No'); + end; + Button('MsgBoxWithQuestion').Click := () -> begin + if MessageBox.Show('Вы уверены?','Заголовок',MessageBoxButton.YesNo,MessageBoxImage.Question) + = MessageBoxResult.Yes then + Print('Уверен') + else Print('Нет'); + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc23_Random3DSpheres.pas b/InstallerSamples/Graphics/Controls/cc23_Random3DSpheres.pas new file mode 100644 index 000000000..6505ad008 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc23_Random3DSpheres.pas @@ -0,0 +1,13 @@ +// Случайные шары +uses Graph3D,Controls; + +function R := Random(-7,7); + +begin + Window.Title := 'Случайные шары'; + LeftPanel(150,Colors.Orange); + var b := new ButtonWPF('Создать шар'); + b.Click := () → begin + Sphere(P3D(R,R,R),1); + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc24_RGB.pas b/InstallerSamples/Graphics/Controls/cc24_RGB.pas new file mode 100644 index 000000000..a76b0b0c0 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc24_RGB.pas @@ -0,0 +1,32 @@ +// Смешение цветов RGB +uses GraphWPF,Controls; + +begin + Window.Title := 'Цвета'; + Font.Size := 40; + LeftPanel(150); + + var rb := IntegerBlock('Красный:'); + rb.Margin := 3; + var r := Slider(0,255,255,16); + var gb := IntegerBlock('Зеленый:'); + gb.Margin := 3; + var g := Slider(0,255,255,16); + var bb := IntegerBlock('Синий:'); + bb.Margin := 3; + var b := Slider(0,255,255,16); + + Button('Выход').Click := procedure -> Window.Close; + + var p: procedure := ()-> begin + Window.Clear(RGB(r.Value.Round,g.Value.Round,b.Value.Round)); + rb.Value := r.Value.Round; + gb.Value := g.Value.Round; + bb.Value := b.Value.Round; + DrawText(GraphWindow.ClientRect,$'R={rb.Value}, G={gb.Value}, B={bb.Value}'); + end; + r.ValueChanged := p; + g.ValueChanged := p; + b.ValueChanged := p; + p; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc2_All2.pas b/InstallerSamples/Graphics/Controls/cc2_All2.pas new file mode 100644 index 000000000..58fc3c8de --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc2_All2.pas @@ -0,0 +1,59 @@ +// Модуль Controls - элементы управления на основной панели +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - элементы управления на основной панели'; + + var x := 10; + var w := 140; + Button(x,10,'Кнопка',w); + CheckBox(x,43,'Флажок'); + RadioButton(x,70,'Переключатель 1'); + RadioButton(x,97,'Переключатель 2'); + TextBox(x,120,'Поле ввода текста',w); + var ib0 := IntegerBox(x,172,'Поле ввода целого',0,10,w); + ib0.Tooltip := 'Покрутите колёсико мыши для изменения значения'; + var l0 := ListBox(x,221,'Список стран',w); + l0.Height := 110; + l0.Add('Россия'); + l0.Add('США'); + l0.Add('Китай'); + l0.Add('Германия'); + l0.Add('Франция'); + var cb0 := ComboBox(x,362,'Выпадающий список',w); + cb0.AddRange('Россия','США','Китай','Германия','Франция'); + + TextBlock(x,414,'Слайдер'); + Slider(x,434,0,10,w); + TextBlock(x,469,'Блок текста',w); + IntegerBlock(x,488,'Блок целого:',w,64); + RealBlock(x,507,'Блок вещественного:',w,3.5); + + LeftPanel(160,Colors.Orange); + + Button('Кнопка'); + CheckBox('Флажок'); + RadioButton('Переключатель 1'); + RadioButton('Переключатель 2'); + TextBox('Поле ввода текста'); + var ib := IntegerBox('Поле ввода целого',0,10); + ib.Tooltip := 'Покрутите колёсико мыши для изменения значения'; + var l := ListBox('Список стран'); + l.Height := 110; + l.Add('Россия'); + l.Add('США'); + l.Add('Китай'); + l.Add('Германия'); + l.Add('Франция'); + var cb := ComboBox('Выпадающий список'); + cb.AddRange('Россия','США','Китай','Германия','Франция'); + + TextBlock('Слайдер'); + Slider(0,10); + TextBlock('Блок текста'); + IntegerBlock('Блок целого:',64); + RealBlock('Блок вещественного:',3.5); + + var s := StatusBar; + s.Text := 'Строка статуса'; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc3_All3.pas b/InstallerSamples/Graphics/Controls/cc3_All3.pas new file mode 100644 index 000000000..04692f327 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc3_All3.pas @@ -0,0 +1,34 @@ +// Модуль Controls - создание элементов вызовом конструктора +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - создание элементов вызовом конструктора + правая панель'; + // Размещение элементов на правой ранели + new RightPanelWPF(160,Colors.Orange); + + new ButtonWPF('Кнопка'); + new CheckBoxWPF('Флажок'); + new RadioButtonWPF('Переключатель 1'); + new RadioButtonWPF('Переключатель 2'); + new TextBoxWPF('Поле ввода текста'); + var ib := new IntegerBoxWPF('Поле ввода целого',0,10); + ib.Tooltip := 'Покрутите колёсико мыши для изменения значения'; + var l := new ListBoxWPF('Список стран'); + l.Height := 110; + l.Add('Россия'); + l.Add('США'); + l.Add('Китай'); + l.Add('Германия'); + l.Add('Франция'); + var cb := new ComboBoxWPF('Выпадающий список'); + cb.AddRange('Россия','США','Китай','Германия','Франция'); + + new TextBlockWPF('Слайдер'); + new SliderWPF(0,10); + new TextBlockWPF('Блок текста'); + new IntegerBlockWPF('Блок целого:',64); + new RealBlockWPF('Блок вещественного:',3.5); + + var s := new StatusBarWPF; + s.Text := 'Строка статуса'; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc4_ButtonClick.pas b/InstallerSamples/Graphics/Controls/cc4_ButtonClick.pas new file mode 100644 index 000000000..463d39486 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc4_ButtonClick.pas @@ -0,0 +1,19 @@ +// Модуль Controls - кнопки и их обработчики +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - кнопки и их обработчики'; + var p := LeftPanel; + p.Color := Colors.Orange; + + Button('Случайный цвет').Click := () -> begin + Window.Clear(RandomColor); + end; + + var b2 := Button('Плюс'); + b2.Click := procedure -> + if b2.Text = 'Плюс' then b2.Text := 'Минус' else b2.Text := 'Плюс'; + + var b1 := Button('Закрыть окно'); + b1.Click := procedure -> Window.Close; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc5_CheckBoxes.pas b/InstallerSamples/Graphics/Controls/cc5_CheckBoxes.pas new file mode 100644 index 000000000..f909cb743 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc5_CheckBoxes.pas @@ -0,0 +1,20 @@ +// Модуль Controls - флажки +uses GraphWPF,Controls; + +begin + Window.Title := 'Модуль Controls - флажки'; + + var p := LeftPanel(170,Colors.Orange); + + var b1 := Button('Переключить флажок 1'); + var b2 := Button('Переключить флажок 2'); + var b3 := Button('Переключить флажок 3'); + + var cb1 := new CheckBoxWPF('Флажок 1'); + var cb2 := new CheckBoxWPF('Флажок 2'); + var cb3 := new CheckBoxWPF('Флажок 3'); + + b1.Click := procedure -> cb1.Checked := not cb1.Checked; + b2.Click := procedure -> cb2.Checked := not cb2.Checked; + b3.Click := procedure -> cb3.Checked := not cb3.Checked; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc6_CheckBoxes2.pas b/InstallerSamples/Graphics/Controls/cc6_CheckBoxes2.pas new file mode 100644 index 000000000..7af4f754d --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc6_CheckBoxes2.pas @@ -0,0 +1,33 @@ +// Модуль Controls - флажки +uses WPFObjects,Controls; + +begin + Window.Title := 'Модуль Controls - флажки'; + + LeftPanel(170); + + var tb := TextBlock('Параметры круга:'); + tb.Margin := 12; + + var cb1 := new CheckBoxWPF('Заливка'); + var cb2 := new CheckBoxWPF('Жирная граница'); + var cb3 := new CheckBoxWPF('С текстом'); + + var c := new CircleWPF(GraphWindow.Center,60,Colors.White,1); + + cb1.Click := procedure -> begin + if cb1.Checked then + c.Color := Colors.Green + else c.Color := Colors.White + end; + cb2.Click := procedure -> begin + if cb2.Checked then + c.BorderWidth := 4 + else c.BorderWidth := 1 + end; + cb3.Click := procedure -> begin + if cb3.Checked then + c.Text := 'Текст' + else c.Text := '' + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc7_RadioButtons.pas b/InstallerSamples/Graphics/Controls/cc7_RadioButtons.pas new file mode 100644 index 000000000..b01f0738f --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc7_RadioButtons.pas @@ -0,0 +1,26 @@ +// Модуль Controls - переключатели +uses WPFObjects,Controls; + +begin + Window.Title := 'Модуль Controls - переключатели'; + LeftPanel(150,Colors.Beige); + + var tb := TextBlock('Цвет круга:'); + //tb.Margin := 12; + + var rb1 := new RadioButtonWPF('Красный'); + var rb2 := new RadioButtonWPF('Зелёный'); + var rb3 := new RadioButtonWPF('Синий'); + + var c := new CircleWPF(GraphWindow.Center,60,Colors.White,1); + + rb1.Click := procedure -> begin + c.Color := Colors.Red; + end; + rb2.Click := procedure -> begin + c.Color := Colors.Green; + end; + rb3.Click := procedure -> begin + c.Color := Colors.Blue; + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc8_MoveObject.pas b/InstallerSamples/Graphics/Controls/cc8_MoveObject.pas new file mode 100644 index 000000000..197f6ee3a --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc8_MoveObject.pas @@ -0,0 +1,28 @@ +// Модуль Controls - кнопки управления перемещением + клавиатура +uses WPFObjects,Controls; + +begin + Window.Title := 'Модуль Controls - кнопки управления перемещением + клавиатура'; + + LeftPanel; + + var c := new CircleWPF(GraphWindow.Center,30,Colors.Blue); + + OnKeyDown := k -> begin + case k of + Key.Left: c.MoveOn(-2,0); + Key.Right: c.MoveOn(2,0); + Key.Up: c.MoveOn(0,-2); + Key.Down: c.MoveOn(0,2); + end; + end; + + var l := Button('Left'); + var r := Button('Right'); + var u := Button('Up'); + var d := Button('Down'); + l.Click := ()->c.MoveOn(-2,0); + r.Click := ()->c.MoveOn(2,0); + u.Click := ()->c.MoveOn(0,-2); + d.Click := ()->c.MoveOn(0,2); +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc8a_MoveObject.pas b/InstallerSamples/Graphics/Controls/cc8a_MoveObject.pas new file mode 100644 index 000000000..29d2f1894 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc8a_MoveObject.pas @@ -0,0 +1,27 @@ +// Модуль Controls - IntegerBlock, IntegerBox и перемещение объекта +uses WPFObjects,Controls; + +begin + Window.Title := 'Модуль Controls - IntegerBlock, IntegerBox и перемещение объекта'; + + LeftPanel; + + var c := new CircleWPF(300,300,30,Colors.Blue); + + var X := IntegerBox('X:',0,600); + X.Value := 300; + var Y := IntegerBox('Y:',0,600); + Y.Value := 300; + + var XX := IntegerBlock('X:',300); + var YY := IntegerBlock('Y:',300); + + X.ValueChanged := procedure → begin + c.Center := Pnt(X.Value,Y.Value); + XX.Value := X.Value; + end; + Y.ValueChanged := procedure → begin + c.Center := Pnt(X.Value,Y.Value); + YY.Value := Y.Value; + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc9_ListBox.pas b/InstallerSamples/Graphics/Controls/cc9_ListBox.pas new file mode 100644 index 000000000..6b91faf9a --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc9_ListBox.pas @@ -0,0 +1,28 @@ +// Модуль Controls - элемент управления "Список" и использование словаря +uses Controls,GraphWPF; + +begin + Window.Title := 'Столицы стран'; + LeftPanel(150,Colors.Orange); + var l := ListBox('Список стран'); + //l.Tooltip := 'Выбери страну - отобразится столица'; + l.Height := 110; + l.Add('Россия'); + l.Add('США'); + l.Add('Китай'); + l.Add('Германия'); + l.Add('Франция'); + + var d := Dict(('Россия','Москва'), + ('США','Вашингтон'), + ('Китай','Пекин'), + ('Германия','Берлин'), + ('Франция','Париж') + ); + + Font.Size := 70; + l.SelectionChanged := procedure -> begin + Window.Clear; + DrawText(GraphWindow.ClientRect,'Столица:'+#10+d[l.SelectedText]); + end; +end. \ No newline at end of file diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 4cc0b3877..25a575f1f 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2604 +3.6.3.2607 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 3f04c1a78..9511fd679 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2604' +!define VERSION '3.6.3.2607' diff --git a/TestSuite/CompilationSamples/GraphWPF.pas b/TestSuite/CompilationSamples/GraphWPF.pas index e5d77d634..8aec0dc6b 100644 --- a/TestSuite/CompilationSamples/GraphWPF.pas +++ b/TestSuite/CompilationSamples/GraphWPF.pas @@ -58,7 +58,6 @@ type //{{{--doc: Конец секции 1 }}} -function GetBrush(c: Color): GBrush; function GetFontFamily(name: string): FontFamily; @@ -630,20 +629,8 @@ procedure __FinalizeModule__; implementation -var BrushesDict := new Dictionary; var FontFamiliesDict := new Dictionary; -function GetBrush(c: Color): GBrush; -begin - if not (c in BrushesDict) then - begin - var b := new SolidColorBrush(c); - BrushesDict[c] := b; - Result := b - end - else Result := BrushesDict[c]; -end; - function GetFontFamily(name: string): FontFamily; begin if not (name in FontFamiliesDict) then @@ -1494,6 +1481,7 @@ type Pen.Color := Colors.Black; var n := Round(w / 1); + if n<=0 then exit; var pp := PartitionPoints(a, b, n); var fff: real -> Point := xx -> Pnt(x + mx * (xx - a), y + my * (max - f(xx).Clamp(min,max))); //pp.Select(x->(x,f(x))).PrintLines; @@ -1523,8 +1511,11 @@ procedure DrawGraph(f: real -> real; a, b, min, max: real; title: string) := Dra procedure DrawGraph(f: real -> real; a, b: real; x, y, w, h: real; title: string); begin var n := Round(w / 1); - var q := PartitionPoints(a, b, n); - DrawGraph(f, a, b, q.Min(f), q.Max(f), x, y, w, h, title) + if n<=0 then exit; + var q := PartitionPoints(a, b, n).ToArray; + var mi := q.Min(f); + var ma := q.Max(f); + DrawGraph(f, a, b, mi, ma, x, y, w, h, title); end; procedure DrawGraph(f: real -> real; a, b: real; r: GRect; title: string) := DrawGraph(f, a, b, r.X, r.Y, r.Width, r.Height, title); @@ -1929,6 +1920,8 @@ GraphWPFWindow = class(GMainWindow) public procedure InitMainGraphControl; override; begin + var g := Content as DockPanel; + host1 := new Canvas; host := new MyVisualHost(); host1.ClipToBounds := True; @@ -1938,7 +1931,6 @@ public host.DataContext := sz; end; // Всегда последнее - var g := MainPanel; var dpiXProperty := typeof(SystemParameters).GetProperty('DpiX', BindingFlags.NonPublic or BindingFlags.Static); var dpiYProperty := typeof(SystemParameters).GetProperty('Dpi', BindingFlags.NonPublic or BindingFlags.Static); @@ -2004,7 +1996,7 @@ begin app.Dispatcher.UnhandledException += (o, e) -> begin Println(e.Exception.Message); - if e.Exception.InnerException<>nil then + if e.Exception.InnerException <> nil then Println(e.Exception.InnerException.Message); halt; end; diff --git a/TestSuite/CompilationSamples/GraphWPFBase.pas b/TestSuite/CompilationSamples/GraphWPFBase.pas index 854cab21a..db3ccf4a1 100644 --- a/TestSuite/CompilationSamples/GraphWPFBase.pas +++ b/TestSuite/CompilationSamples/GraphWPFBase.pas @@ -11,12 +11,14 @@ unit GraphWPFBase; uses System.Windows; uses System.Windows.Controls; +uses System.Windows.Media; type /// Тип цвета GColor = System.Windows.Media.Color; /// Тип прямоугольника GRect = System.Windows.Rect; + GBrush = System.Windows.Media.Brush; GWindow = System.Windows.Window; GMainWindow = class(GWindow) @@ -56,6 +58,19 @@ var app: Application; MainWindow: GMainWindow; +var BrushesDict := new Dictionary; + +function GetBrush(c: GColor): GBrush; +begin + if not (c in BrushesDict) then + begin + var b := new SolidColorBrush(c); + BrushesDict[c] := b; + Result := b + end + else Result := BrushesDict[c]; +end; + procedure Invoke(d: System.Delegate; params args: array of object) := app.Dispatcher.Invoke(d, args); procedure InvokeP(p: procedure(r: real); r: real) := Invoke(p,r); @@ -303,6 +318,8 @@ begin end; end; -begin +initialization __InitModule; + +finalization end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index b8ab8c372..b254e7b7a 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -4545,9 +4545,9 @@ end; function Range(a, b: real; n: integer): sequence of real; begin if n = 0 then - raise new System.ArgumentException('n=0'); + raise new System.ArgumentException('Range: n=0'); if n < 0 then - raise new System.ArgumentException('n<0'); + raise new System.ArgumentException('Range: n<0'); var r := a; var h := (b - a) / n; for var i := 0 to n do diff --git a/bin/Lib/Controls.pas b/bin/Lib/Controls.pas index afa8d4ca1..108229040 100644 --- a/bin/Lib/Controls.pas +++ b/bin/Lib/Controls.pas @@ -1,11 +1,11 @@ // Copyright (©) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) -///Модуль элементов управления для GraphWPF и WPFObjects +///Модуль элементов управления для GraphWPF, WPFObjects и Graph3D unit Controls; interface -uses GraphWPFBase,GraphWPF; +uses GraphWPFBase; uses System.Windows; uses System.Windows.Media; uses System.Windows.Media.Imaging; @@ -33,8 +33,11 @@ type Key = System.Windows.Input.Key; var - ActivePanel: GPanel; + _ActivePanel: GPanel; GlobalHMargin := 12; + +function __ActivePanelInternal: GPanel; +procedure __SetActivePanelInternal(p: GPanel); procedure Invoke(d: System.Delegate; params args: array of object); procedure InvokeP(p: procedure(r: real); r: real); @@ -67,7 +70,8 @@ type end; DockPanel.SetDock(bb, d); MainDockPanel.children.Insert(0, bb); - ActivePanel := p; + //ActivePanel := p; + __SetActivePanelInternal(p); end; procedure SetColorP(c: GColor); begin @@ -75,15 +79,23 @@ type bb.Background := p.Background end; function GetColorP := (p.Background as SolidColorBrush).Color; + procedure SetTTP(s: string); + begin + p.ToolTip := s; + end; public constructor Create(wh: real := 150; d: Dock := Dock.Left; c: Color := PanelsColor; internalMargin: real := 10); begin Invoke(CreateP,wh,d,c,internalMargin); end; + /// Цвет property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + /// Ширина внутренней границы property InternalMargin: real read InvokeReal(()->p.Margin.Left) write Invoke(procedure -> p.Margin := new System.Windows.Thickness(internalMargin), value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->p.ToolTip as string) write Invoke(SetTTP, value); end; /// Класс левой панели @@ -113,7 +125,7 @@ type begin element := el; element.Focusable := False; - if ActivePanel is StackPanel(var sp) then + if __ActivePanelInternal is StackPanel(var sp) then if sp.Orientation = Orientation.Vertical then element.Margin := new Thickness(0,0,0,GlobalHMargin); //else element.Margin := new Thickness(0,0,GlobalHMargin,0); @@ -124,12 +136,13 @@ type end; if width>0 then element.Width := width; - ActivePanel.Children.Add(element); + __ActivePanelInternal.Children.Add(element); end; procedure SetWP(w: real) := element.Width := w; procedure SetHP(h: real) := element.Height := h; procedure SetMP(m: real) := element.Margin := new Thickness(0,0,0,m); + procedure SetTTP(s: string) := element.Tooltip := s; procedure SetEP(enabled: boolean) := element.IsEnabled := enabled; public /// Ширина элемента управления @@ -140,6 +153,8 @@ type property Margin: real read InvokeReal(()->element.Margin.Bottom) write Invoke(SetMP, value); /// Активирован ли элемент управления property Enabled: boolean read InvokeBoolean(()->element.IsEnabled) write Invoke(SetEP, value); + /// Всплывающая подсказка + property Tooltip: string read Invokestring(()->element.ToolTip as string) write Invoke(SetTTP, value); end; CommonControlWPF = class(CommonElementWPF) @@ -234,7 +249,7 @@ type procedure CreatePXY(x, y: real; Txt: string; width: real; fontsize: real); begin Init0(new GTextBlock, width, x, y); - Margin := 3; + //Margin := 3; Text := Txt; Self.FontSize := fontSize; end; @@ -243,6 +258,8 @@ type procedure SetTextP(t: string) := tb.Text := t; procedure SetFontSizeP(sz: real) := tb.FontSize := sz; procedure SetFontNameP(name: string) := tb.FontFamily := new FontFamily(name); + procedure SetTextWrappingP(value: boolean) := if value then tb.TextWrapping := TextWrapping.Wrap else + tb.TextWrapping := TextWrapping.NoWrap; public constructor Create(Txt: string; fontsize: real := 12):= Invoke(CreateP, Txt, fontsize); constructor Create(x, y: real; Txt: string; width: real := 0; fontSize: real := 12):= Invoke(CreatePXY, x, y, Txt, width, fontSize); @@ -253,6 +270,9 @@ type property FontSize: real read InvokeReal(()->tb.FontSize) write Invoke(SetFontSizeP, value); virtual; /// Имя шрифта property FontName: string write Invoke(SetFontNameP, value); virtual; + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tb.TextWrapping = TextWrapping.Wrap) + write Invoke(SetTextWrappingP, value); virtual; end; /// Элемент управления "Целое число" @@ -282,7 +302,7 @@ type message: string; procedure CreatePXY(x, y: real; message: string; width: real; initValue: real := 0; fontSize: real := 12); begin - inherited CreatePXY(x,y,message + ' ' + initValue, width, fontSize); + inherited CreatePXY(x,y,message + ' ' + initValue.ToString(FracDigits), width, fontSize); Self.message := message; val := initValue; end; @@ -351,7 +371,7 @@ type /// Очистка текста в текстовом поле procedure Clear := Text := ''; /// Разрешено ли ручное редактирование текста - property Focusable: boolean read InvokeBoolean(()->not element.Focusable) write Invoke(SetReadOnlyP,value); + property ReadOnly: boolean read InvokeBoolean(()->not element.Focusable) write Invoke(SetReadOnlyP,value); end; ///!# @@ -420,21 +440,21 @@ type Init1(new TextBox, title, width, x, y); //tbx.TextWrapping := TextWrapping.Wrap; tbx.Text := txt; - tbx.TextChanged += (o,e) -> if TextChanged <> nil then TextChanged; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; end; procedure CreateAsMainControlP; begin element := CreateStackPanel(new TextBox,''); - Multiline := True; - tbx.TextChanged += (o,e) -> if TextChanged <> nil then TextChanged; + Wrapping := True; + tbx.TextChanged += (o,e) -> if ValueChanged <> nil then ValueChanged; MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); MainDockPanel.children.Add(element); end; procedure CreateP(title,text: string) := CreatePXY(-1,-1,title,text,0); constructor Create(i: integer) := Invoke(CreateAsMainControlP); public - /// Событие "текст изменился" - TextChanged: procedure; + /// Событие "значение изменилось" + ValueChanged: procedure; constructor Create(title: string := '') := Invoke(CreateP, title, ''); constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title,'', width); @@ -442,8 +462,8 @@ type procedure Clear := Text := ''; /// Текст в текстовом поле property Text: string read InvokeString(()->tbx.Text) write Invoke(SetTextP, value); - /// Разрешено ли несколько строк в текстовом поле - property MultiLine: boolean read InvokeBoolean(()->tbx.TextWrapping = TextWrapping.Wrap) write Invoke(SetMultiLineP, value); + /// Включён ли режим переноса слов + property Wrapping: boolean read InvokeBoolean(()->tbx.TextWrapping = TextWrapping.Wrap) write Invoke(SetMultiLineP, value); end; /// Элемент управления "Целое поле" @@ -572,14 +592,17 @@ type /// Событие, возникающее при изменении текущего выделения SelectionChanged: procedure; constructor Create(title: string := '') := Invoke(CreateP, title); - constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title,'', width); + constructor Create(x,y: real; title: string := ''; width: real := 120) := Invoke(CreatePXY, x, y, title, width); /// Добавляет элемент в список procedure Add(s: string) := Invoke(AddP, s); /// Добавляет набор элементов в список procedure AddRange(params ss: array of string) := Invoke(AddRangeP, ss); /// Выбранная строка - function SelectedString := InvokeString(()->cb.SelectedItem as string); + function SelectedText := InvokeString(()->cb.SelectedItem as string); + /// Индекс выбранной строки + function SelectedIndex := InvokeInteger(()->cb.SelectedIndex); + property Items[i: integer]: string read InvokeString(()->cb.Items[i] as string); default; end; /// Элемент управления "Слайдер" @@ -652,7 +675,7 @@ type property Checked: boolean read InvokeBoolean(()->cb.IsChecked.Value) write Invoke(procedure(t: boolean) -> cb.IsChecked := t, value); end; - /// Элемент управления "Радиокнопка" + /// Элемент управления "Переключатель" RadioButtonWPF = class(ClickableControlWPF) private property rb: RadioButton read element as RadioButton; @@ -731,7 +754,8 @@ type element.Focusable := False; MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); MainDockPanel.children.Add(can); - ActivePanel := can; + __SetActivePanelInternal(can); + //ActivePanel := can; end; constructor (i: integer) := Invoke(CreatePP); // фиктивный первый параметр procedure SetColorP(c: GColor); @@ -977,6 +1001,17 @@ function RealBlock(message: string; initValue: real := 0; fontSize: real := 12): /// Элемент управления "Вещественное число" с заданными координатами function RealBlock(x, y: real; message: string; width: real := 0; initValue: real := 0; fontSize: real := 12): RealBlockWPF; +/// Элемент управления "Флажок" +function CheckBox(text: string): CheckBoxWPF; +/// Элемент управления "Флажок" с заданными координатами +function CheckBox(x, y: real; text: string; width: real := 0): CheckBoxWPF; + +/// Элемент управления "Переключатель" +function RadioButton(text: string): RadioButtonWPF; +/// Элемент управления "Переключатель" с заданными координатами +function RadioButton(x, y: real; text: string; width: real := 0): RadioButtonWPF; + + /// Элемент управления "Текстовое поле с заголовком" function TextBox(text: string := ''): TextBoxWPF; /// Элемент управления "Текстовое поле с заголовком" с заданными координатами @@ -1030,18 +1065,23 @@ function StatusBar(height: real := 24; itemWidth: real := 0): StatusBarWPF; /// Пустой блок для задания промежутков между компонентами procedure EmptyBlock(sz: integer := 16); +/// Установка активной панели, на которую размещаются элементы управления +procedure SetActivePanel(p: PanelWPF); + + + /// Графическое окно -function Window: WindowTypeWPF; +//function Window: WindowType; implementation -uses GraphWPF; +//uses GraphWPF; uses System.Windows; uses System.Windows.Controls; uses System.Windows.Controls.Primitives; uses System.Windows.Media.Imaging; -function Window: WindowTypeWPF := GraphWPF.Window; +//function Window: WindowType := GraphWPF.Window; function Button(Txt: string; fontSize: real): ButtonWPF := ButtonWPF.Create(Txt,fontSize); function Button(x, y: real; Txt: string; width: real; fontSize: real): ButtonWPF := ButtonWPF.Create(x, y, Txt, width, fontSize); @@ -1055,6 +1095,12 @@ function IntegerBlock(x, y: real; message: string; width: real; initValue: integ function RealBlock(message: string; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(message, initValue, fontSize); function RealBlock(x, y: real; message: string; width: real; initValue: real; fontSize: real): RealBlockWPF := RealBlockWPF.Create(x,y,message,width,initValue,fontSize); +function CheckBox(text: string): CheckBoxWPF := CheckBoxWPF.Create(text); +function CheckBox(x, y: real; text: string; width: real): CheckBoxWPF := CheckBoxWPF.Create(x,y,text,width); + +function RadioButton(text: string): RadioButtonWPF := RadioButtonWPF.Create(text); +function RadioButton(x, y: real; text: string; width: real): RadioButtonWPF := RadioButtonWPF.Create(x,y,text,width); + function TextBox(text: string): TextBoxWPF := TextBoxWPF.Create(text); function TextBox(x, y: real; text: string; width: real): TextBoxWPF := TextBoxWPF.Create(x,y,text,width); @@ -1116,15 +1162,54 @@ begin Result := flds.OrderBy(f->f.CustomAttributes.FirstOrDefault?.ToString ?? 'NoAttr').Select(f->f.Name); end; -procedure Invoke(d: System.Delegate; params args: array of object) := GraphWPFBase.Invoke(d, args); -procedure InvokeP(p: procedure(r: real); r: real) := GraphWPFBase.Invoke(p,r); -function Invoke(d: Func0): T := T(app.Dispatcher.Invoke(d)); +type ControlsCannotBeRunWithoutGraphModules = class(System.ApplicationException) end; + +procedure Invoke(d: System.Delegate; params args: array of object); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(d, args); +end; + +procedure InvokeP(p: procedure(r: real); r: real); +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + GraphWPFBase.Invoke(p,r); +end; + +function Invoke(d: Func0): T; +begin + if app = nil then + raise new ControlsCannotBeRunWithoutGraphModules('Модуль Controls должен испольоваться только совместно с модулями GraphWPF и WPFObjects либо Graph3D'); + Result := T(app.Dispatcher.Invoke(d)); +end; + +procedure __SetActivePanelInternal(p: GPanel); +begin + Invoke(()->begin + _ActivePanel := p; + end); +end; + +procedure SetActivePanel(p: PanelWPF); +begin + __SetActivePanelInternal(p.p) +end; procedure SetActivePanelInit; begin - ActivePanel := MainWindow.MainPanel.Children[0] as GPanel + __SetActivePanelInternal(MainWindow.MainPanel.Children[0] as GPanel); + //ActivePanel := MainWindow.MainPanel.Children[0] as GPanel end; +function __ActivePanelInternal: GPanel; begin - Invoke(SetActivePanelInit); + if _ActivePanel = nil then + Invoke(SetActivePanelInit); + Result := _ActivePanel; +end; + +initialization +finalization end. \ No newline at end of file diff --git a/bin/Lib/GraphWPF.pas b/bin/Lib/GraphWPF.pas index 4a896a82f..2b3470104 100644 --- a/bin/Lib/GraphWPF.pas +++ b/bin/Lib/GraphWPF.pas @@ -58,7 +58,6 @@ type //{{{--doc: Конец секции 1 }}} -function GetBrush(c: Color): GBrush; function GetFontFamily(name: string): FontFamily; @@ -630,20 +629,8 @@ procedure __FinalizeModule__; implementation -var BrushesDict := new Dictionary; var FontFamiliesDict := new Dictionary; -function GetBrush(c: Color): GBrush; -begin - if not (c in BrushesDict) then - begin - var b := new SolidColorBrush(c); - BrushesDict[c] := b; - Result := b - end - else Result := BrushesDict[c]; -end; - function GetFontFamily(name: string): FontFamily; begin if not (name in FontFamiliesDict) then @@ -1494,6 +1481,7 @@ type Pen.Color := Colors.Black; var n := Round(w / 1); + if n<=0 then exit; var pp := PartitionPoints(a, b, n); var fff: real -> Point := xx -> Pnt(x + mx * (xx - a), y + my * (max - f(xx).Clamp(min,max))); //pp.Select(x->(x,f(x))).PrintLines; @@ -1523,8 +1511,11 @@ procedure DrawGraph(f: real -> real; a, b, min, max: real; title: string) := Dra procedure DrawGraph(f: real -> real; a, b: real; x, y, w, h: real; title: string); begin var n := Round(w / 1); - var q := PartitionPoints(a, b, n); - DrawGraph(f, a, b, q.Min(f), q.Max(f), x, y, w, h, title) + if n<=0 then exit; + var q := PartitionPoints(a, b, n).ToArray; + var mi := q.Min(f); + var ma := q.Max(f); + DrawGraph(f, a, b, mi, ma, x, y, w, h, title); end; procedure DrawGraph(f: real -> real; a, b: real; r: GRect; title: string) := DrawGraph(f, a, b, r.X, r.Y, r.Width, r.Height, title); @@ -1929,6 +1920,8 @@ GraphWPFWindow = class(GMainWindow) public procedure InitMainGraphControl; override; begin + var g := Content as DockPanel; + host1 := new Canvas; host := new MyVisualHost(); host1.ClipToBounds := True; @@ -1938,7 +1931,6 @@ public host.DataContext := sz; end; // Всегда последнее - var g := MainPanel; var dpiXProperty := typeof(SystemParameters).GetProperty('DpiX', BindingFlags.NonPublic or BindingFlags.Static); var dpiYProperty := typeof(SystemParameters).GetProperty('Dpi', BindingFlags.NonPublic or BindingFlags.Static); @@ -2004,7 +1996,7 @@ begin app.Dispatcher.UnhandledException += (o, e) -> begin Println(e.Exception.Message); - if e.Exception.InnerException<>nil then + if e.Exception.InnerException <> nil then Println(e.Exception.InnerException.Message); halt; end; diff --git a/bin/Lib/GraphWPFBase.pas b/bin/Lib/GraphWPFBase.pas index 854cab21a..db3ccf4a1 100644 --- a/bin/Lib/GraphWPFBase.pas +++ b/bin/Lib/GraphWPFBase.pas @@ -11,12 +11,14 @@ unit GraphWPFBase; uses System.Windows; uses System.Windows.Controls; +uses System.Windows.Media; type /// Тип цвета GColor = System.Windows.Media.Color; /// Тип прямоугольника GRect = System.Windows.Rect; + GBrush = System.Windows.Media.Brush; GWindow = System.Windows.Window; GMainWindow = class(GWindow) @@ -56,6 +58,19 @@ var app: Application; MainWindow: GMainWindow; +var BrushesDict := new Dictionary; + +function GetBrush(c: GColor): GBrush; +begin + if not (c in BrushesDict) then + begin + var b := new SolidColorBrush(c); + BrushesDict[c] := b; + Result := b + end + else Result := BrushesDict[c]; +end; + procedure Invoke(d: System.Delegate; params args: array of object) := app.Dispatcher.Invoke(d, args); procedure InvokeP(p: procedure(r: real); r: real) := Invoke(p,r); @@ -303,6 +318,8 @@ begin end; end; -begin +initialization __InitModule; + +finalization end. \ No newline at end of file diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index b8ab8c372..b254e7b7a 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -4545,9 +4545,9 @@ end; function Range(a, b: real; n: integer): sequence of real; begin if n = 0 then - raise new System.ArgumentException('n=0'); + raise new System.ArgumentException('Range: n=0'); if n < 0 then - raise new System.ArgumentException('n<0'); + raise new System.ArgumentException('Range: n<0'); var r := a; var h := (b - a) / n; for var i := 0 to n do diff --git a/bin/template.pct b/bin/template.pct index 878af5251..69027c32d 100644 --- a/bin/template.pct +++ b/bin/template.pct @@ -112,6 +112,9 @@ end; [ar] array of |; +[a] +→| + [try] try | From 5404728fdb7065c10ee4252057c0d67e9e85660c Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sat, 1 Aug 2020 11:29:09 +0300 Subject: [PATCH 07/18] case s of '1' end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit допускаются символы в case по строкам --- .../Graphics/Controls/cc18_SimpleCalc.pas | 26 +++++++++++---- .../WPFObjects/StartStopMoveRotation.pas | 32 +++++++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 2 ++ bin/Lib/WPFObjects.pas | 2 ++ 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 InstallerSamples/Graphics/WPFObjects/StartStopMoveRotation.pas diff --git a/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas b/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas index e92f47dd6..f28cadba6 100644 --- a/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas +++ b/InstallerSamples/Graphics/Controls/cc18_SimpleCalc.pas @@ -8,23 +8,37 @@ begin tb.FontSize := 30; var x := IntegerBox('X:'); var y := IntegerBox('Y:'); + x.Value := Random(0,10); + y.Value := Random(0,10); var cb := new ComboBoxWPF('Операция'); cb.AddRange('+','-','*','/'); + var count := 0; + var sb := StatusBar; + sb.Text := 'Количество вычислений: ' + count; + var b := Button('+'); b.Click := procedure -> begin - case cb.SelectedString of - string('+'): tb.Println($'{x.Value} + {y.Value} = {x.Value + y.Value}'); - string('-'): tb.Println($'{x.Value} - {y.Value} = {x.Value - y.Value}'); - string('*'): tb.Println($'{x.Value} * {y.Value} = {x.Value * y.Value}'); - string('/'): tb.Println($'{x.Value} / {y.Value} = {x.Value / y.Value}'); + case cb.SelectedText of + '+': tb.Println($'{x.Value} + {y.Value} = {x.Value + y.Value}'); + '-': tb.Println($'{x.Value} - {y.Value} = {x.Value - y.Value}'); + '*': tb.Println($'{x.Value} * {y.Value} = {x.Value * y.Value}'); + '/': tb.Println($'{x.Value} / {y.Value} = {x.Value / y.Value}'); end; x.Value := Random(0,10); y.Value := Random(0,10); + count += 1; + sb.Text := 'Количество вычислений: ' + count; + end; + + Button('Очистить').Click := () -> begin + count := 0; + sb.Text := 'Количество вычислений: ' + count; + tb.Clear; end; cb.SelectionChanged := procedure -> begin - b.Text := cb.SelectedString + b.Text := cb.SelectedText end; end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/WPFObjects/StartStopMoveRotation.pas b/InstallerSamples/Graphics/WPFObjects/StartStopMoveRotation.pas new file mode 100644 index 000000000..0b0a911d6 --- /dev/null +++ b/InstallerSamples/Graphics/WPFObjects/StartStopMoveRotation.pas @@ -0,0 +1,32 @@ +// Модуль Controls - StatusBar +uses Controls,WPFObjects; + +// Управление свойствами объекта, связанными с перемещением и поворотом. +// В OnDrawFrame объект сам себя перерисовывает +begin + Window.Title := 'Модуль Controls - StatusBar'; + var l := LeftPanel(180,Colors.Orange); + + var c := new RectangleWPF(50,200,80,50,Colors.Green); + c.Direction := (1,0); + c.Velocity := 0; + c.Tag := 0; // скорость поворота + + OnDrawFrame := dt -> begin + c.MoveTime(dt); + c.RotateAngle += integer(c.Tag) * dt; + end; + + Button('Начать перемещение').Click := procedure -> begin + c.Velocity := 30; + end; + Button('Закончить перемещение').Click := procedure -> begin + c.Velocity := 0; + end; + Button('Начать поворот').Click := procedure -> begin + c.Tag := 30; + end; + Button('Закончить поворот').Click := procedure -> begin + c.Tag := 0; + end; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index dc4ffd6fb..f5922af35 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -10583,6 +10583,8 @@ namespace PascalABCCompiler.TreeConverter foreach (SyntaxTree.expression expr in cv.conditions.expressions) { expression_node cn = convert_strong(expr); + if (cn.type == SystemLibrary.SystemLibrary.char_type) + cn = convertion_data_and_alghoritms.convert_type(cn, SystemLibrary.SystemLibrary.string_type); if (cn.type != SystemLibrary.SystemLibrary.string_type) AddError(new CanNotConvertTypes(cn, cn.type, SystemLibrary.SystemLibrary.string_type, cn.location)); string_const_node scn = convert_string_const_to_switch(cn, cn.location); diff --git a/bin/Lib/WPFObjects.pas b/bin/Lib/WPFObjects.pas index ad729e806..f8d46bbfa 100644 --- a/bin/Lib/WPFObjects.pas +++ b/bin/Lib/WPFObjects.pas @@ -404,6 +404,8 @@ type begin Result := (Left < 0) or (Top < 0) or (Right > GraphWindow.Width) or (Bottom > GraphWindow.Height); end; + /// Tag хранит любые присоединённые характеристики объекта + auto property Tag: object; end; // ----------------------------------------------------- From d333587d46a8ab7451cafa89d3ecd13e546a10d0 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sat, 1 Aug 2020 16:04:54 +0300 Subject: [PATCH 08/18] fix #2287 --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 ++-- Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/WPFObjects.pas | 2 ++ TestSuite/opImplicit.pas | 9 +++++++++ TreeConverter/TreeRealization/generics.cs | 1 + 7 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 TestSuite/opImplicit.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 035a1024b..1724cf8b7 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2607"; + public const string Revision = "2608"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 67621ca1f..18fb2f30a 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=6 -%REVISION%=2607 %COREVERSION%=3 +%REVISION%=2608 +%MINOR%=6 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 25a575f1f..e99562a0e 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2607 +3.6.3.2608 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 9511fd679..7c175e287 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2607' +!define VERSION '3.6.3.2608' diff --git a/TestSuite/CompilationSamples/WPFObjects.pas b/TestSuite/CompilationSamples/WPFObjects.pas index ad729e806..f8d46bbfa 100644 --- a/TestSuite/CompilationSamples/WPFObjects.pas +++ b/TestSuite/CompilationSamples/WPFObjects.pas @@ -404,6 +404,8 @@ type begin Result := (Left < 0) or (Top < 0) or (Right > GraphWindow.Width) or (Bottom > GraphWindow.Height); end; + /// Tag хранит любые присоединённые характеристики объекта + auto property Tag: object; end; // ----------------------------------------------------- diff --git a/TestSuite/opImplicit.pas b/TestSuite/opImplicit.pas new file mode 100644 index 000000000..0e140f461 --- /dev/null +++ b/TestSuite/opImplicit.pas @@ -0,0 +1,9 @@ +type + t1 = class + static function operator implicit(o: T): t1 := new t1; + end; + +begin + var a: t1 := 'abcde'; + Assert(a <> nil); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index cbbd330d8..af23b9f87 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -1629,6 +1629,7 @@ namespace PascalABCCompiler.TreeRealization { cmn.return_variable = (orig_fn as common_function_node)?.return_variable; } + cmn.IsOperator = orig_fn.IsOperator; return cmn; } From ec918d645d99715e00e8c4f8117a2599c71c8bd7 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sat, 1 Aug 2020 17:49:54 +0300 Subject: [PATCH 09/18] fix #2285 --- TreeConverter/TreeConversion/syntax_tree_visitor.cs | 7 +++++++ bin/Lng/Eng/SemanticErrors_ms.dat | 3 ++- bin/Lng/Rus/SemanticErrors_ms.dat | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index f5922af35..3581e39f8 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -16386,6 +16386,13 @@ namespace PascalABCCompiler.TreeConverter if (_var_def_statement.vars_type != null) { tn = convert_strong(_var_def_statement.vars_type); + + if (tn.type_special_kind != SemanticTree.type_special_kind.array_kind && + _var_def_statement.inital_value is SyntaxTree.array_const ac) + { + AddError(get_location(_var_def_statement), "IMPOSSIBLE_TO_CONVERT_ARRAY_CONST_TO_{0}", tn); + } + //LambdaHelper.InferTypesFromVarStmt(tn, _var_def_statement.inital_value as SyntaxTree.function_lambda_definition, this); //lroman// if (tn.IsStatic && _var_def_statement.vars.idents[0].name != YieldHelpers.YieldConsts.Self) // SSM 10/07/19 fix #1639 в статическом классе можно только фиктивное поле с именем YieldHelpers.YieldConsts.Self описать - для того чтобы посмотреть на семантике его тип!!! AddError(get_location(_var_def_statement), "VARIABLES_OF_STATIC_CLASS_NOT_ALLOWED"); diff --git a/bin/Lng/Eng/SemanticErrors_ms.dat b/bin/Lng/Eng/SemanticErrors_ms.dat index a26dee7e7..e39f63f1d 100644 --- a/bin/Lng/Eng/SemanticErrors_ms.dat +++ b/bin/Lng/Eng/SemanticErrors_ms.dat @@ -44,4 +44,5 @@ EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Explicit type casts for lamb STATIC_CLASS_CANNOT_HAVE_PREDEFINITION=Static class cannot be predefined OPERATIONS_CANNOT_BE_CALLED_USING_THIS_SYNTAX=Operations cannot be called using this syntax MEMBER_{0}_OF_TYPE_{1}_CANNOT_BE_FOUND_IN_THE_CONTEEXT_OF_FUNCTION_WITH_YIELD=Name {0} cannot be found in type {1} in the context of function with yield statement -UNCOMPARABLE_TYPES_IN_ARRAY_CONST=Uncomparable types in array initializers \ No newline at end of file +UNCOMPARABLE_TYPES_IN_ARRAY_CONST=Uncomparable types in array initializers +IMPOSSIBLE_TO_CONVERT_ARRAY_CONST_TO_{0}=It is impossible to convert array initializer to type {0} \ No newline at end of file diff --git a/bin/Lng/Rus/SemanticErrors_ms.dat b/bin/Lng/Rus/SemanticErrors_ms.dat index 240fb5f76..4c3f71bbb 100644 --- a/bin/Lng/Rus/SemanticErrors_ms.dat +++ b/bin/Lng/Rus/SemanticErrors_ms.dat @@ -44,4 +44,5 @@ EXPLICIT_CASTS_FOR_LAMBDA_EXPRESSIONS_ARE_FORBIDDEN=Явные приведен STATIC_CLASS_CANNOT_HAVE_PREDEFINITION=Статический класс не может иметь предописание OPERATIONS_CANNOT_BE_CALLED_USING_THIS_SYNTAX=Операции нельзя вызывать, используя данный синтаксис MEMBER_{0}_OF_TYPE_{1}_CANNOT_BE_FOUND_IN_THE_CONTEEXT_OF_FUNCTION_WITH_YIELD=Имя {0} не удаётся найти в типе {1} в контексте функции с оператором yield -UNCOMPARABLE_TYPES_IN_ARRAY_CONST=Несовместимые типы при задании массива \ No newline at end of file +UNCOMPARABLE_TYPES_IN_ARRAY_CONST=Несовместимые типы при задании массива +IMPOSSIBLE_TO_CONVERT_ARRAY_CONST_TO_{0}=Невозможно преобразовать инициализатор массива к типу {0} \ No newline at end of file From c0906732a5c7c318f530d5e2db00b7b4db12b337 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Mon, 3 Aug 2020 21:26:25 +0300 Subject: [PATCH 10/18] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20Controls=20=D0=B8=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=85=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=85=20Pyramid=20Prism=20=D0=B2=20Graph3D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- .../Controls/cc13_Заголовки.pas | 18 +- .../Graphics/Controls/cc15_ListView.pas | 5 +- .../Graphics/Controls/cc16a_CountyCapital.pas | 20 +++ .../Graphics/Controls/cc1_All.pas | 3 +- .../Graphics/Controls/cc24_RGB.pas | 24 +-- .../Graphics/Controls/cc25_Gr3DProperties.pas | 28 +++ .../Graphics/Controls/cc2_All2.pas | 10 +- .../Graphics/Controls/cc3_All3.pas | 3 +- Localization/DefaultLang.resources | Bin 95065 -> 95237 bytes Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- SyntaxTree/tree/NodesBuilder.cs | 14 ++ .../TreeConversion/syntax_tree_visitor.cs | 4 +- bin/Lib/Controls.pas | 163 +++++++++++++++--- bin/Lib/Graph3D.pas | 40 ++--- bin/Lng/Eng/SemanticErrors_nv.dat | 3 + bin/Lng/Rus/SemanticErrors_nv.dat | 1 + 19 files changed, 256 insertions(+), 90 deletions(-) create mode 100644 InstallerSamples/Graphics/Controls/cc16a_CountyCapital.pas create mode 100644 InstallerSamples/Graphics/Controls/cc25_Gr3DProperties.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 1724cf8b7..0e9bc1f43 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "6"; public const string Build = "3"; - public const string Revision = "2608"; + public const string Revision = "2613"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 18fb2f30a..9c3d8e8a2 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=2608 %MINOR%=6 +%REVISION%=2613 +%COREVERSION%=3 %MAJOR%=3 diff --git a/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas b/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas index d7b704399..965b7b052 100644 --- a/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas +++ b/InstallerSamples/Graphics/Controls/cc13_Заголовки.pas @@ -17,22 +17,16 @@ begin lb.AddRange('1 2 3 4 5'.ToWords); var cb := new ComboBoxWPF('ComboBox'); cb.AddRange('1 2 3 4 5'.ToWords); + var sl := new SliderWPF('Slider:'); b.Click := procedure -> begin if b.Text = 'Заголовки включены' then b.Text := 'Заголовки выключены' else b.Text := 'Заголовки включены'; - if tb.Title = '' then - tb.Title := 'Заголовок' - else tb.Title := ''; - if ib.Title = '' then - ib.Title := 'Заголовок' - else ib.Title := ''; - if lb.Title = '' then - lb.Title := 'Заголовок' - else lb.Title := ''; - if cb.Title = '' then - cb.Title := 'Заголовок' - else cb.Title := ''; + tb.TitleVisible := not tb.TitleVisible; + ib.TitleVisible := not ib.TitleVisible; + lb.TitleVisible := not lb.TitleVisible; + cb.TitleVisible := not cb.TitleVisible; + sl.TitleVisible := not sl.TitleVisible; end; end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc15_ListView.pas b/InstallerSamples/Graphics/Controls/cc15_ListView.pas index 25bcfe8a8..490f2e1f2 100644 --- a/InstallerSamples/Graphics/Controls/cc15_ListView.pas +++ b/InstallerSamples/Graphics/Controls/cc15_ListView.pas @@ -2,10 +2,7 @@ uses Controls,GraphWPF; type My = auto class - i,j: integer; -public - property Поле1: integer read i; - property Поле2: integer read j; + Поле1,Поле2: integer; end; begin diff --git a/InstallerSamples/Graphics/Controls/cc16a_CountyCapital.pas b/InstallerSamples/Graphics/Controls/cc16a_CountyCapital.pas new file mode 100644 index 000000000..370190e93 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc16a_CountyCapital.pas @@ -0,0 +1,20 @@ +uses GraphWPF, Controls, ABCDatabases; + +begin + Window.Title := 'Столицы стран'; + LeftPanel(220, Colors.LightGoldenrodYellow); + var страны := ЗаполнитьМассивСтран; + + var a := ListBox('Страны',550); + a.AddRange(страны.ConvertAll(страна -> страна.Название)); + + var d := DictStr; + foreach var страна in страны do + d[страна.Название] := страна.Столица; + + Font.Size := 70; + a.SelectionChanged := procedure -> begin + Window.Clear; + DrawText(GraphWindow.ClientRect,d[a.SelectedText]) + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc1_All.pas b/InstallerSamples/Graphics/Controls/cc1_All.pas index 9d195f324..6c0692d10 100644 --- a/InstallerSamples/Graphics/Controls/cc1_All.pas +++ b/InstallerSamples/Graphics/Controls/cc1_All.pas @@ -23,8 +23,7 @@ begin var cb := ComboBox('Выпадающий список'); cb.AddRange('Россия','США','Китай','Германия','Франция'); - TextBlock('Слайдер'); - Slider(0,10); + Slider('Слайдер:',0,10); TextBlock('Блок текста'); IntegerBlock('Блок целого:',64); RealBlock('Блок вещественного:',3.5); diff --git a/InstallerSamples/Graphics/Controls/cc24_RGB.pas b/InstallerSamples/Graphics/Controls/cc24_RGB.pas index a76b0b0c0..22d684a07 100644 --- a/InstallerSamples/Graphics/Controls/cc24_RGB.pas +++ b/InstallerSamples/Graphics/Controls/cc24_RGB.pas @@ -6,24 +6,16 @@ begin Font.Size := 40; LeftPanel(150); - var rb := IntegerBlock('Красный:'); - rb.Margin := 3; - var r := Slider(0,255,255,16); - var gb := IntegerBlock('Зеленый:'); - gb.Margin := 3; - var g := Slider(0,255,255,16); - var bb := IntegerBlock('Синий:'); - bb.Margin := 3; - var b := Slider(0,255,255,16); + var r := Slider('Красный: ',0,255,255,16); + var g := Slider('Зеленый: ',0,255,255,16); + var b := Slider('Синий: ',0,255,255,16); - Button('Выход').Click := procedure -> Window.Close; + Button('Выход').Click := procedure → Window.Close; - var p: procedure := ()-> begin - Window.Clear(RGB(r.Value.Round,g.Value.Round,b.Value.Round)); - rb.Value := r.Value.Round; - gb.Value := g.Value.Round; - bb.Value := b.Value.Round; - DrawText(GraphWindow.ClientRect,$'R={rb.Value}, G={gb.Value}, B={bb.Value}'); + var p: procedure := () → begin + var c := RGB(r.Value,g.Value,b.Value); + Window.Clear(c); + DrawText(GraphWindow.ClientRect,$'R={c.R}, G={c.G}, B={c.B}'); end; r.ValueChanged := p; g.ValueChanged := p; diff --git a/InstallerSamples/Graphics/Controls/cc25_Gr3DProperties.pas b/InstallerSamples/Graphics/Controls/cc25_Gr3DProperties.pas new file mode 100644 index 000000000..91ee6a624 --- /dev/null +++ b/InstallerSamples/Graphics/Controls/cc25_Gr3DProperties.pas @@ -0,0 +1,28 @@ +// Модуль Controls +uses Graph3D, Controls; + +begin + var l := LeftPanel(200, Colors.LightGoldenrodYellow); + + var height := IntegerBox('Высота:', 1, 15); + height.Value := 5; + height.Tooltip := 'Покрутите колёсико мыши'; + var radius := IntegerBox('Радиус:', 1, 6); + radius.Value := 2; + radius.Tooltip := 'Покрутите колёсико мыши'; + var sides := Slider('Количество сторон: ', 3, 20); + sides.Frequency := 1; + sides.Value := 5; + + var p := Pyramid(Origin, sides.Value, height.Value, radius.Value, Colors.Green); + + height.ValueChanged := procedure -> begin + p.Height := height.Value; + end; + radius.ValueChanged := procedure -> begin + p.Radius := radius.Value; + end; + sides.ValueChanged := procedure -> begin + p.Sides := sides.Value; + end; +end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/Controls/cc2_All2.pas b/InstallerSamples/Graphics/Controls/cc2_All2.pas index 58fc3c8de..5b9a62f8d 100644 --- a/InstallerSamples/Graphics/Controls/cc2_All2.pas +++ b/InstallerSamples/Graphics/Controls/cc2_All2.pas @@ -23,11 +23,10 @@ begin var cb0 := ComboBox(x,362,'Выпадающий список',w); cb0.AddRange('Россия','США','Китай','Германия','Франция'); - TextBlock(x,414,'Слайдер'); - Slider(x,434,0,10,w); + Slider(x,414,'Слайдер:',0,10,w); TextBlock(x,469,'Блок текста',w); - IntegerBlock(x,488,'Блок целого:',w,64); - RealBlock(x,507,'Блок вещественного:',w,3.5); + IntegerBlock(x,497,'Блок целого:',w,64); + RealBlock(x,526,'Блок вещественного:',w,3.5); LeftPanel(160,Colors.Orange); @@ -48,8 +47,7 @@ begin var cb := ComboBox('Выпадающий список'); cb.AddRange('Россия','США','Китай','Германия','Франция'); - TextBlock('Слайдер'); - Slider(0,10); + Slider('Слайдер:',0,10); TextBlock('Блок текста'); IntegerBlock('Блок целого:',64); RealBlock('Блок вещественного:',3.5); diff --git a/InstallerSamples/Graphics/Controls/cc3_All3.pas b/InstallerSamples/Graphics/Controls/cc3_All3.pas index 04692f327..603bc0c6c 100644 --- a/InstallerSamples/Graphics/Controls/cc3_All3.pas +++ b/InstallerSamples/Graphics/Controls/cc3_All3.pas @@ -23,8 +23,7 @@ begin var cb := new ComboBoxWPF('Выпадающий список'); cb.AddRange('Россия','США','Китай','Германия','Франция'); - new TextBlockWPF('Слайдер'); - new SliderWPF(0,10); + new SliderWPF('Слайдер:',0,10); new TextBlockWPF('Блок текста'); new IntegerBlockWPF('Блок целого:',64); new RealBlockWPF('Блок вещественного:',3.5); diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index 8fa9e22ca7ddaeb9848375774ee04200ecbb72b4..55686245d872bdef6f376ba62cf80b600d0d242a 100644 GIT binary patch delta 151 zcmV;I0BHZ&<^_f51(4tZA#<_f@T_7)4uNetYQcqAtQdCJrli{u$2=U_X>GAU7;IqiD Fk;6DKSXcl6 delta 33 rcmV++0N($F=mpv41(4tZb#k%d@T`;7O%t<8uH^xf1Jn_-hp>LbGGh_F diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index e99562a0e..e7f533f4e 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.6.3.2608 +3.6.3.2613 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 7c175e287..0f3aeaacc 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.6.3.2608' +!define VERSION '3.6.3.2613' diff --git a/SyntaxTree/tree/NodesBuilder.cs b/SyntaxTree/tree/NodesBuilder.cs index 99a139d7c..0560d7e0b 100644 --- a/SyntaxTree/tree/NodesBuilder.cs +++ b/SyntaxTree/tree/NodesBuilder.cs @@ -215,6 +215,20 @@ namespace PascalABCCompiler.SyntaxTree } } + // добавление свойств - временно убрал т.к. свойства нельзя передавать как var-параметры + // По идее если это делать, то поля переименовывать везде в классе!!! + /*for (var i=0; i new ident("f" + x.name.ToLower(), x.source_context)).ToList(); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 3581e39f8..1521e13f5 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -16387,7 +16387,9 @@ namespace PascalABCCompiler.TreeConverter { tn = convert_strong(_var_def_statement.vars_type); - if (tn.type_special_kind != SemanticTree.type_special_kind.array_kind && + if (tn.type_special_kind != SemanticTree.type_special_kind.array_kind && + tn.type_special_kind != SemanticTree.type_special_kind.array_wrapper && + !tn.BaseFullName.StartsWith("System.Tuple") && _var_def_statement.inital_value is SyntaxTree.array_const ac) { AddError(get_location(_var_def_statement), "IMPOSSIBLE_TO_CONVERT_ARRAY_CONST_TO_{0}", tn); diff --git a/bin/Lib/Controls.pas b/bin/Lib/Controls.pas index 108229040..2387f7283 100644 --- a/bin/Lib/Controls.pas +++ b/bin/Lib/Controls.pas @@ -24,6 +24,7 @@ type GPanel = System.Windows.Controls.Panel; GControl = System.Windows.Controls.Control; GStatusBar = System.Windows.Controls.Primitives.StatusBar; + Orientation = System.Windows.Controls.Orientation; MessageBox = System.Windows.MessageBox; MessageBoxButton = System.Windows.MessageBoxButton; MessageBoxResult = System.Windows.MessageBoxResult; @@ -181,6 +182,35 @@ type /// Событие нажатия на элемент управления Click: procedure; end; + + StackPanelWPF = class(CommonControlWPF) + private + property sp: StackPanel read element as StackPanel; + procedure CreateP(Orient: Orientation; width,height: real); + begin + element := new StackPanel; + element.Focusable := False; + if width>0 then + element.Width := width; + if height>0 then + element.Height := height; + sp.Orientation := Orient; + __ActivePanelInternal.Children.Add(sp); + _ActivePanel := sp; + end; + procedure SetColorP(c: GColor); + begin + sp.Background := GetBrush(c); + end; + function GetColorP := (sp.Background as SolidColorBrush).Color; + procedure SetTTP(s: string); + begin + sp.ToolTip := s; + end; + public + constructor (Orient: Orientation; width: real := 0; height: real := 0) := Invoke(CreateP,Orient,width,height); + property Color: GColor read Invoke&(GetColorP) write Invoke(SetColorP, value); + end; /// Элемент управления "Изображение" ImageWPF = class(CommonControlWPF) @@ -200,7 +230,6 @@ type MainDockPanel.children.RemoveAt(MainDockPanel.children.Count-1); MainDockPanel.children.Add(im); end; - private function GetNameP: string; begin Result := (im.Source as BitmapImage).UriSource.AbsolutePath @@ -386,6 +415,12 @@ type else tb.Visibility := System.Windows.Visibility.Visible; tb.Text := t; end; + procedure SetTitleVisibilityP(v: boolean); + begin + if v then + tb.Visibility := System.Windows.Visibility.Visible + else tb.Visibility := System.Windows.Visibility.Collapsed; + end; procedure SetHP(h: real) := MainElement.Height := h; function CreateStackPanel(el: FrameworkElement; title: string): StackPanel; @@ -418,7 +453,10 @@ type end; public /// Заголовок - property Title: string read InvokeString(()->tb.Text) write Invoke(SetTitleP, value); + property Title: string read InvokeString(()->tb.Text) write Invoke(SetTitleP, value); virtual; + /// Видим ли заголовок + property TitleVisible: boolean read InvokeBoolean(()->tb.Visibility <> System.Windows.Visibility.Collapsed) + write Invoke(SetTitleVisibilityP, value); virtual; /// Высота элемента управления property Height: real read InvokeReal(()->MainElement.ActualHeight) write Invoke(SetHP, value); override; /// Размер шрифта @@ -605,10 +643,10 @@ type property Items[i: integer]: string read InvokeString(()->cb.Items[i] as string); default; end; - /// Элемент управления "Слайдер" - SliderWPF = class(CommonControlWPF) + SliderBase = class(ControlWithTitleWPF) private - function sl: Slider := element as Slider; + titl: string; // часть заголовка без числа + function sl: Slider := MainElement as Slider; function GetMinimum: real := InvokeReal(()->sl.Minimum); procedure SetMinimumP(r: real) := sl.Minimum := r; procedure SetMinimum(r: real) := Invoke(SetMinimumP, r); @@ -621,11 +659,18 @@ type function GetFrequency: real := InvokeReal(()->sl.TickFrequency); procedure SetFrequencyP(r: real) := sl.TickFrequency := r; procedure SetFrequency(r: real) := Invoke(SetFrequencyP, r); - protected - procedure CreatePXY(x,y: real; min, max, val, freq: real; width: real); + private + procedure CreatePXY(x,y: real; title: string; min, max, val, freq: real; width: real); begin - Init0(new Slider,width,x,y); - sl.ValueChanged += procedure(o, e) -> ValueChangedP; + Init1(new Slider,title,width,x,y); + Remainder(title,min, max, val, freq); + end; + procedure Remainder(tit: string; min, max, val, freq: real); + begin + titl := tit; + sl.ValueChanged += procedure(o, e) -> if ValueChanged <> nil then ValueChanged; + sl.ValueChanged += procedure(o, e) -> if title <> '' then tb.Text := Title + ' ' + sl.Value; + if titl <> '' then tb.Text := Title + ' ' + sl.Value; sl.TickPlacement := System.Windows.Controls.Primitives.TickPlacement.BottomRight; sl.Minimum := min; sl.Maximum := max; @@ -634,15 +679,62 @@ type sl.TickFrequency := (max-min)/10 else sl.TickFrequency := freq; sl.Foreground := Brushes.Black; + sl.IsSnapToTickEnabled := True; + end; + procedure CreateP(title: string; min, max, val, freq: real) := CreatePXY(-1, -1, title, min, max, val, freq, 0); + procedure SetTitleP1(tit: string); + begin + titl := tit; + SetTitleP(tit +' ' + sl.Value); end; - procedure CreateP(min, max, val, freq: real) := CreatePXY(-1,-1,min, max, val, freq, 0); - - procedure ValueChangedP := if ValueChanged <> nil then ValueChanged; public /// Событие, возникающее при изменении значения ValueChanged: procedure; - constructor Create(min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, min, max, val, freq); - constructor Create(x,y: real; min, max: real; width: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreatePXY, x,y,min, max, val, freq, width); + /// Заголовок + property Title: string read InvokeString(()->titl) write Invoke(SetTitleP1, value); override; + end; + + /// Элемент управления "Слайдер" с целыми значениями + SliderWPF = class(SliderBase) + private + procedure CreatePXYI(x,y: real; title: string; min, max, val, freq: integer; width: integer); + begin + Init1(new Slider,title,width,x,y); + if freq<=0 then + freq := (max-min) div 10; + if freq = 0 then + freq := 1; + Remainder(title,min, max, val, freq); + end; + procedure CreatePI(title: string; min, max, val, freq: integer) := CreatePXYI(-1, -1, title, min, max, val, freq, 0); + public + constructor Create(min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, '', min, max, val, freq); + constructor Create(title: string := ''); + begin + Create(title, 0, 10, 0); + end; + constructor Create(title: string; min, max: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePI, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0) + := Invoke(CreatePXYI, x,y,title,min, max, val, freq, width); + /// Минимальное значение + property Minimum: integer read GetMinimum.Round write SetMinimum(value); + /// Максимальное значение + property Maximum: integer read GetMaximum.Round write SetMaximum(value); + /// Текущее значение + property Value: integer read GetValue.Round write SetValue(value); + /// Интервал между делениями + property Frequency: integer read GetFrequency.Round write SetFrequency(value); + end; + + /// Элемент управления "Слайдер" с вещественными значениями + SliderRealWPF = class(SliderBase) + public + constructor Create(min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, '', min, max, val, freq); + constructor Create(title: string := '') := Create(title, 0, 10, 0); + constructor Create(title: string; min, max: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreateP, title, min, max, val, freq); + constructor Create(x,y: real; title: string; min, max: real; width: real; val: real := real.MinValue; freq: real := 0) := Invoke(CreatePXY, x,y,title,min, max, val, freq, width); /// Минимальное значение property Minimum: real read GetMinimum write SetMinimum; /// Максимальное значение @@ -1029,12 +1121,23 @@ function ListBox(title: string := ''; height: real := 150): ListBoxWPF; /// Элемент управления "Список" с заданными координатами function ListBox(x,y: real; title: string := ''; width: real := 150; height: real := 150): ListBoxWPF; +/// Элемент управления "Слайдер с вещественными значениями" +function SliderReal(title: string := ''): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений и заголовком +function SliderReal(title: string; min,max: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданным диапазоном значений +function SliderReal(min, max: real; val: real := real.MaxValue; freq: real := 0): SliderRealWPF; +/// Элемент управления "Слайдер с вещественными значениями" с заданными координатами +function SliderReal(x,y: real; title: string; min,max: real; width: real; val: real := real.MinValue; freq: real := 0): SliderRealWPF; + /// Элемент управления "Слайдер" -function Slider(): SliderWPF; +function Slider(title: string := ''): SliderWPF; +/// Элемент управления "Слайдер" с заданным диапазоном значений и заголовком +function Slider(title: string; min,max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; /// Элемент управления "Слайдер" с заданным диапазоном значений -function Slider(min,max: real; val: real := real.MinValue; freq: real := 0): SliderWPF; +function Slider(min, max: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; /// Элемент управления "Слайдер" с заданными координатами -function Slider(x,y: real; min,max: real; width: real; val: real := real.MinValue; freq: real := 0): SliderWPF; +function Slider(x,y: real; title: string; min,max: integer; width: integer; val: integer := integer.MinValue; freq: integer := 0): SliderWPF; /// Элемент управления "Изображение" function Image(name: string): ImageWPF; @@ -1111,18 +1214,34 @@ function IntegerBox(x, y: real; title: string; min,max: integer; width: real) := function ListBox(title: string; height: real): ListBoxWPF := ListBoxWPF.Create(title,height); function ListBox(x,y: real; title: string; width: real; height: real): ListBoxWPF := ListBoxWPF.Create(x,y,title,width,height); -function Slider: SliderWPF := SliderWPF.Create(0, 10, 0, 0); -function Slider(min, max, val, freq: real): SliderWPF; +function SliderReal(title: string): SliderRealWPF := SliderRealWPF.Create(title,0, 10, 0, 0); +function SliderReal(title: string; min, max, val, freq: real): SliderRealWPF; begin if val = real.MinValue then val := min; - Result := SliderWPF.Create(min, max, val, freq); + Result := SliderRealWPF.Create(title, min, max, val, freq); +end; +function SliderReal(min, max, val, freq: real): SliderRealWPF := SliderReal('',min, max, val, freq); +function SliderReal(x,y: real; title: string; min,max,width,val,freq: real): SliderRealWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderRealWPF.Create(x, y, title, min, max, width, val, freq); end; -function Slider(x,y,min,max,width,val,freq: real): SliderWPF; + +function Slider(title: string): SliderWPF := SliderWPF.Create(title); +function Slider(title: string; min, max, val, freq: integer): SliderWPF; begin if val = real.MinValue then val := min; - Result := SliderWPF.Create(x, y, min, max, width, val, freq); + Result := SliderWPF.Create(title, min, max, val, freq); +end; +function Slider(min, max, val, freq: integer): SliderWPF := Slider('',min, max, val, freq); +function Slider(x,y: real; title: string; min,max,width,val,freq: integer): SliderWPF; +begin + if val = real.MinValue then + val := min; + Result := SliderWPF.Create(x, y, title, min, max, width, val, freq); end; function Image(name: string): ImageWPF := new ImageWPF(name); diff --git a/bin/Lib/Graph3D.pas b/bin/Lib/Graph3D.pas index bc33b6b0a..9ab008773 100644 --- a/bin/Lib/Graph3D.pas +++ b/bin/Lib/Graph3D.pas @@ -2206,15 +2206,15 @@ type procedure SetN(n: integer); function GetN: integer; protected - function CreateObject: Object3D; override := new PrismT(X, Y, Z, N, Radius, Height, Material.Clone); + function CreateObject: Object3D; override := new PrismT(X, Y, Z, Sides, Radius, Height, Material.Clone); public constructor(x, y, z: real; N: integer; r, h: real; m: Gmaterial); /// Радиус правильной призмы property Radius: real read GetR write SetR; /// Высота правильной призмы property Height: real read GetH write SetH; -/// Количество углов правильной призмы - property N: integer read GetN write SetN; +/// Количество боковых граней правильной призмы + property Sides: integer read GetN write SetN; /// Возвращает клон правильной призмы function Clone := (inherited Clone) as PrismT; end; @@ -2226,15 +2226,15 @@ type PyramidT = class(PrismT) private protected - function CreateObject: Object3D; override := new PyramidT(X, Y, Z, N, Radius, Height, Material.Clone); + function CreateObject: Object3D; override := new PyramidT(X, Y, Z, Sides, Radius, Height, Material.Clone); public constructor(x, y, z: real; N: integer; r, h: real; m: GMaterial); /// Радиус правильной пирамиды property Radius: real read GetR write SetR; /// Высота правильной пирамиды property Height: real read GetH write SetH; -/// Количество углов правильной пирамиды - property N: integer read GetN write SetN; +/// Количество боковых граней правильной пирамиды + property Sides: integer read GetN write SetN; /// Возвращает клон правильной пирамиды function Clone := (inherited Clone) as PyramidT; end; @@ -2288,8 +2288,8 @@ type begin var pc := new Point3DCollection; - var a := PartitionPoints(0, 2 * Pi, N).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).ToArray; - var b := PartitionPoints(0, 2 * Pi, N).Select(x -> P3D(fr * cos(x), fr * sin(x), fh)).ToArray; + var a := PartitionPoints(0, 2 * Pi, Sides).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).ToArray; + var b := PartitionPoints(0, 2 * Pi, Sides).Select(x -> P3D(fr * cos(x), fr * sin(x), fh)).ToArray; for var i := 0 to a.High - 1 do begin pc.Add(a[i]); @@ -2320,12 +2320,12 @@ type end; protected - function CreateObject: Object3D; override := new PrismTWireframe(X, Y, Z, N, Radius, Height, (model as LinesVisual3D).Thickness, (model as LinesVisual3D).Color); + function CreateObject: Object3D; override := new PrismTWireframe(X, Y, Z, Sides, Radius, Height, (model as LinesVisual3D).Thickness, (model as LinesVisual3D).Color); public function Points: Point3DCollection; virtual; begin - var a := PartitionPoints(0, 2 * Pi, N).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).SkipLast; - var b := PartitionPoints(0, 2 * Pi, N).Select(x -> P3D(fr * cos(x), fr * sin(x), fh)).SkipLast; + var a := PartitionPoints(0, 2 * Pi, Sides).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).SkipLast; + var b := PartitionPoints(0, 2 * Pi, Sides).Select(x -> P3D(fr * cos(x), fr * sin(x), fh)).SkipLast; var pc := new Point3DCollection(a + b); Result := pc; @@ -2338,8 +2338,8 @@ type property Radius: real read fr write SetR; /// Высота проволочной правильной призмы property Height: real read fh write SetH; -/// Количество углов проволочной правильной призмы - property N: integer read fn write SetN; +/// Количество боковых граней проволочной правильной призмы + property Sides: integer read fn write SetN; /// Цвет проволоки правильной призмы property Color: GColor read GetC write SetC; override; /// Толщина проволоки правильной призмы @@ -2352,13 +2352,13 @@ type /// Класс проволочной правильной пирамиды PyramidTWireframe = class(PrismTWireframe) protected - function CreateObject: Object3D; override := new PyramidTWireframe(X, Y, Z, N, Radius, Height, (model as LinesVisual3D).Thickness, (model as LinesVisual3D).Color); + function CreateObject: Object3D; override := new PyramidTWireframe(X, Y, Z, Sides, Radius, Height, (model as LinesVisual3D).Thickness, (model as LinesVisual3D).Color); private function CreatePoints: Point3DCollection; override; begin var pc := new Point3DCollection; - var a := PartitionPoints(0, 2 * Pi, N).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).ToArray; + var a := PartitionPoints(0, 2 * Pi, Sides).Select(x -> P3D(fr * cos(x), fr * sin(x), 0)).ToArray; var b := P3D(0, 0, fh); for var i := 0 to a.High - 1 do begin @@ -2377,8 +2377,8 @@ type property Radius: real read fr write SetR; /// Высота проволочной правильной пирамиды property Height: real read fh write SetH; -/// Количество углов проволочной правильной пирамиды - property N: integer read fn write SetN; +/// Количество боковых граней проволочной правильной пирамиды + property Sides: integer read fn write SetN; /// Цвет проволоки правильной пирамиды property Color: GColor read GetC write SetC; override; /// Толщина проволоки правильной пирамиды @@ -3373,15 +3373,15 @@ function FileModel3D(p: Point3D; fname: string; m: Material): FileModelT := File function Prism(x, y, z: real; Sides: integer; Height, Radius: real; m: Material): PrismT := Inv(()->PrismT.Create(x, y, z, Sides, Radius, Height, m)); -function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PrismT := Prism(p.X, p.Y, p.Z, Sides, Radius, Height, m); +function Prism(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PrismT := Prism(p.X, p.Y, p.Z, Sides, Height, Radius, m); function PrismWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := Inv(()->PrismTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); -function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := PrismWireFrame(p.x, p.y, p.z, Sides, Radius, Height, thickness, c); +function PrismWireFrame(p: Point3D; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PrismTWireFrame := PrismWireFrame(p.x, p.y, p.z, Sides, Height, Radius, thickness, c); function Pyramid(x, y, z: real; Sides: integer; Height, Radius: real; m: Material): PyramidT := Inv(()->PyramidT.Create(x, y, z, Sides, Radius, Height, m)); -function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PyramidT := Pyramid(p.X, p.Y, p.Z, Sides, Radius, Height, m); +function Pyramid(p: Point3D; Sides: integer; Height, Radius: real; m: Material): PyramidT := Pyramid(p.X, p.Y, p.Z, Sides, Height, Radius, m); function PyramidWireFrame(x, y, z: real; Sides: integer; Height, Radius: real; Thickness: real; c: Color): PyramidTWireFrame := Inv(()->PyramidTWireFrame.Create(x, y, z, Sides, Radius, Height, thickness, c)); diff --git a/bin/Lng/Eng/SemanticErrors_nv.dat b/bin/Lng/Eng/SemanticErrors_nv.dat index 3fda3ed18..658b656ab 100644 --- a/bin/Lng/Eng/SemanticErrors_nv.dat +++ b/bin/Lng/Eng/SemanticErrors_nv.dat @@ -3,6 +3,9 @@ NAME_CANNOT_HAVE_GENERIC_PARAMETERS_{0}=Name {0} can not have generic parameters AUTO_CLASS_MUST_NOT_HAVE_POINTERS=Auto class can not have fields of pointer type AUTO_CLASS_MUST_NOT_HAVE_PARENTS=Auto class can not have parents +AUTO_CLASS_MUST_NOT_HAVE_UNNAMED_ENUMS=Auto class can not have fields with unnamed enums type +AUTO_CLASS_MUST_NOT_HAVE_EVENTS=Auto class can not have events +AUTO_CLASS_MUST_NOT_HAVE_PROPERTIES=Auto class can not have properties UNDEFINED_NAME_REFERENCE_{0}=Undefined name reference '{0}' TWO_TYPE_CONVERTIONS_POSSIBLE_FIRST_TYPE_{0}_SECOND_TYE_{1}=Two type of convertions are possible: to type '{0}' and to type '{1}' CAN_NOT_CONVERT_TYPES_FROM_{0}_TO_{1}=Incompatible types: '{0}' and '{1}' diff --git a/bin/Lng/Rus/SemanticErrors_nv.dat b/bin/Lng/Rus/SemanticErrors_nv.dat index 11093f963..5eb1601a8 100644 --- a/bin/Lng/Rus/SemanticErrors_nv.dat +++ b/bin/Lng/Rus/SemanticErrors_nv.dat @@ -5,6 +5,7 @@ AUTO_CLASS_MUST_NOT_HAVE_POINTERS=Авто класс не может иметь AUTO_CLASS_MUST_NOT_HAVE_PARENTS=Авто класс не может иметь предков AUTO_CLASS_MUST_NOT_HAVE_UNNAMED_ENUMS=Авто класс не может иметь полей с неименованными перечислимыми типами AUTO_CLASS_MUST_NOT_HAVE_EVENTS=Авто класс не может иметь поля, являющиеся событиями +AUTO_CLASS_MUST_NOT_HAVE_PROPERTIES=Авто класс не может иметь свойства UNDEFINED_NAME_REFERENCE_{0}=Неизвестное имя '{0}' TWO_TYPE_CONVERTIONS_POSSIBLE_FIRST_TYPE_{0}_SECOND_TYE_{1}=Возможны два преобразования типа: к типу {0} и к типу {1} CAN_NOT_CONVERT_TYPES_FROM_{0}_TO_{1}=Нельзя преобразовать тип {0} к {1} From 077950e5ebb177f45895cfcabc61a96097b5c211 Mon Sep 17 00:00:00 2001 From: SunSerega Date: Tue, 4 Aug 2020 02:26:50 +0300 Subject: [PATCH 11/18] update OpenCLABC --- .../OpenGL и OpenCL/OpenCL/MatrMlt.cl | 6 +- .../OpenGL и OpenCL/OpenCL/MatrMlt.pas | 15 +- .../OpenCL/SimpleAddition.pas | 15 +- .../MatrMlt.cl | 6 +- .../MatrMlt.pas | 20 +- .../SimpleAddition.pas | 11 +- .../OpenCLABC/Wait очереди/2.pas | 20 +- .../0.cl | 11 + .../Использовать.pas | 24 + .../Прекомпилировать.pas | 8 + ...ользованию OpenGL и OpenCL.html | 87 +- .../Справка OpenCLABC.html | 919 +- .../Справка OpenGLABC.html | 27 +- ReleaseGenerators/sect_Core.nsh | 9 +- bin/Lib/Internal/OpenCLABCBase.pas | 7679 +++++++++++++++++ bin/Lib/Internal/OpenGLABCBase.pas | 4 + bin/Lib/OpenCL.pas | 1330 ++- bin/Lib/OpenCLABC.pas | 4089 +-------- bin/Lib/OpenGL.pas | 3326 ++++--- bin/Lib/OpenGLABC.pas | 4 +- 20 files changed, 11624 insertions(+), 5986 deletions(-) create mode 100644 InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/0.cl create mode 100644 InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas create mode 100644 InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Прекомпилировать.pas create mode 100644 bin/Lib/Internal/OpenCLABCBase.pas create mode 100644 bin/Lib/Internal/OpenGLABCBase.pas diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCL/MatrMlt.cl b/InstallerSamples/OpenGL и OpenCL/OpenCL/MatrMlt.cl index 4d0836be0..1481c2b62 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCL/MatrMlt.cl +++ b/InstallerSamples/OpenGL и OpenCL/OpenCL/MatrMlt.cl @@ -1,11 +1,10 @@  -__kernel void MatrMltMatr(__global double* A, __global double* B, __global double* C, __global int* gW) +__kernel void MatrMltMatr(__global double* A, __global double* B, __global double* C, int W) { int cX = get_global_id(0); int cY = get_global_id(1); - int W = *gW; double sum = 0.0; for (int i=0; i, - B.NewQueue.AddWriteArray(B_Mart) as CommandQueue, + A.NewQueue.AddWriteArray2&(A_Matr), + B.NewQueue.AddWriteArray2&(B_Mart), C, - N.NewQueue.AddWriteValue(MatrW) as CommandQueue + W ) as CommandQueue; var Otp_C_Q := - C.NewQueue.AddReadArray(A_Matr) as CommandQueue + + C.NewQueue.AddReadArray2&(A_Matr) + HPQ(()-> lock output do begin @@ -74,13 +74,13 @@ begin var Calc_V2_Q := code['MatrMltVec'].NewQueue.AddExec1(MatrW, C, - V1.NewQueue.AddWriteArray(V1_Arr) as CommandQueue, + V1.NewQueue.AddWriteArray1&(V1_Arr), V2, - N // значение записывается в Calc_C_Q, тут можно использовать уже готовое + W ) as CommandQueue; var Otp_V2_Q := - V2.NewQueue.AddReadArray(V1_Arr) as CommandQueue + + V2.NewQueue.AddReadArray1&(V1_Arr) + HPQ(()-> lock output do begin diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas index b7816a2c6..500a05763 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/0Простейшие примеры/SimpleAddition.pas @@ -4,23 +4,24 @@ begin // Чтение и компиляция .cl файла - var prog := new ProgramCode(ReadAllText('SimpleAddition.cl')); + var prog := new ProgramCode(Context.Default, ReadAllText('SimpleAddition.cl')); // Подготовка параметров - var A := new Buffer( 10 * sizeof(integer) ); // Буфер достаточно размера, чтоб хранить 10 элементов типа "integer" + var A := new Buffer( 10 * sizeof(integer) ); // Буфер достаточного размера, чтобы хранить 10 элементов типа "integer" // Выполнение prog['TEST'].Exec1(10, // используем 10 ядер - A.NewQueue.AddFillValue(1) // заполняем весь буфер значениями (1), прямо перед выполнением. Тип значения integer, потому что это тип по-умолчанию для целых чисел - as CommandQueue //ToDo нужно только из за issue компилятора #1981, иначе получаем странную ошибку. Когда исправят - можно будет убрать + // Заполняем весь буфер значениями (1), прямо перед выполнением + // Тип значения integer, потому что это тип по-умолчанию для целых чисел + A.NewQueue.AddFillValue(1) ); // Чтение и вывод результата - A.GetArray1&.Println; // читаем всё содержимое как одномерный массив с элементами типа "integer" + A.GetArray1&.Println; // Читаем всё содержимое как одномерный массив с элементами типа "integer" end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas index 91b799f6e..b498002f8 100644 --- a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Wait очереди/2.pas @@ -4,24 +4,28 @@ uses NamedQData; begin // График выполнения очередей: // - // A1--B1--C1------D1 + // A1--B1--C1------E1 // \ / // \ / - // A2------B2--C2--D2 + // A2------C2--D2--E2 // var A1 := NamedQ('A1'); - var B1 := NamedQ('B1'); - var C1 := NamedQ('C1'); - var D1 := NamedQ('D1'); var A2 := NamedQ('A2'); - var B2 := NamedQ('B2'); + + var B1 := NamedQ('B1'); + + var C1 := NamedQ('C1'); var C2 := NamedQ('C2'); + var D2 := NamedQ('D2'); + var E1 := NamedQ('E1'); + var E2 := NamedQ('E2'); + Context.Default.SyncInvoke( - ( A1 + B1 + C1 + WaitFor(C2) + D1 ) * - ( A2 + WaitFor(B1) + B2 + C2 + D2 ) + ( A1 + B1 + C1 + WaitFor(D2) + E1 ) * + ( A2 + WaitFor(B1) + C2 + D2 + E2 ) ); end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/0.cl b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/0.cl new file mode 100644 index 000000000..938330885 --- /dev/null +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/0.cl @@ -0,0 +1,11 @@ + + + +__kernel void TEST(__global int* message) +{ + int gid = get_global_id(0); // номер текущего вызова TEST + + message[gid] += gid; +} + + diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas new file mode 100644 index 000000000..006c47b33 --- /dev/null +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Использовать.pas @@ -0,0 +1,24 @@ +uses OpenCLABC; + +begin + + // Запустите "Прекомпилировать.pas", чтобы создать этот файл + {$resource 0.cl.temp_bin} + + var prog := ProgramCode.DeserializeFrom(Context.Default, + System.Reflection.Assembly.GetExecutingAssembly.GetManifestResourceStream('0.cl.temp_bin') + ); + + // Дальше всё так же как в "0Простейшие примеры\SimpleAddition" + + var A := new Buffer( 10 * sizeof(integer) ); + + prog['TEST'].Exec1(10, + + A.NewQueue.AddFillValue(1) + + ); + + A.GetArray1&.Println; + +end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Прекомпилировать.pas b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Прекомпилировать.pas new file mode 100644 index 000000000..bd770ff96 --- /dev/null +++ b/InstallerSamples/OpenGL и OpenCL/OpenCLABC/Прекомпиляция ProgramCode/Прекомпилировать.pas @@ -0,0 +1,8 @@ +uses OpenCLABC; + +begin + var prog := new ProgramCode(Context.Default, ReadAllText('0.cl')); + var f := System.IO.File.Create('0.cl.temp_bin'); + prog.SerializeTo(f); + f.Close; +end. \ No newline at end of file diff --git a/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html b/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html index b6edac128..d4f0bb17f 100644 --- a/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html +++ b/InstallerSamples/OpenGL и OpenCL/Гайд по использованию OpenGL и OpenCL.html @@ -71,13 +71,27 @@ body { } .ps-page-name { cursor: pointer; - padding: 1; + padding: 1; } /* ============================== *\ page display \* ============================== */ +blockquote > *:first-child { + margin-top: 0; +} +blockquote > *:last-child { + margin-bottom: 0; +} +blockquote { + margin-left: 0; + margin-right: 0; + padding: 12px; + border-left: 5px solid #d0d0d0; + background-color: #f7f7f7; +} + .smart-link { color: blue; cursor: pointer; @@ -99,7 +113,6 @@ body { .code-block { display: inline-block; cursor: text; - background: #F0F0F0; border-radius: 3px; padding: 4px; @@ -121,9 +134,13 @@ body { box-shadow: -2px 2px 3px #0000004a; background: linear-gradient(0deg, #f0f0f0, white); } -.inline-code { +.inline-code, .code-block { background: #F0F0F0; } +blockquote .inline-code, +blockquote .code-block { + background: #DEDEDE; +} .code-keyword { font-weight: bold; @@ -903,7 +920,8 @@ window.onload = ()=>{

Если в кратце:

Есть платформа .Net, объединяющая много языков программирования. В том числе C# и PascalABC.NET.

.exe и .dll созданные такими языками содержат код в особом виде, позволяющем легко подключать -.dll (и теоретически .exe, но это плохо) созданные на 1 .Net языке к программе на любом другом .Net языке.

+.dll (и теоретически .exe, но это плохо) созданные на 1 .Net языке к программе на любом другом .Net языке.
+(в паскале это делается с помощью $reference)

Такие .exe и .dll называются управляемыми. .exe и .dll созданные на любом другом (то есть не .Net) языке называются неуправляемыми.

OpenCL.dll и OpenGL.dll созданы на- и для языков C/C++, поэтому являются неуправляемыми.

@@ -911,7 +929,7 @@ window.onload = ()=>{