Index: doc/next-tutorial.html
===================================================================
diff -u -r5bcfa978f7b42933cd499264abc4679093e8182d -rdc4e18f42355dbf473140da723940832c3aba2ba
--- doc/next-tutorial.html (.../next-tutorial.html) (revision 5bcfa978f7b42933cd499264abc4679093e8182d)
+++ doc/next-tutorial.html (.../next-tutorial.html) (revision dc4e18f42355dbf473140da723940832c3aba2ba)
@@ -860,7 +860,26 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Stack {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ | nx::Class create Stack {
+} |
Typically, classes are defined in NX via nx::Class create, followed
by the name of the new class (here: Stack). The definition of the
stack placed between curly braces and contains here just the method
@@ -935,7 +954,25 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
Now we want to use the stack. The code snippet in Listing 3 shows how to use the class Stack in a script.
Since NX is based on Tcl, the script will be called with the Tcl shell
tclsh. In the Tcl shell we have to require package nx to use the
@@ -1017,7 +1054,22 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create stack {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ | nx::Object create stack {
:variable things {}
@@ -1031,7 +1083,7 @@
set :things [lrange ${:things} 1 end]
return $top
}
-}
+} |
The example in Listing 5 defines the
object stack in a very similar way as the class Stack. But the
following points are different.
@@ -1104,7 +1156,31 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-nx::Class create Safety {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ | nx::Class create Safety {
+} |
Note that all the methods of the class Safety end with next.
This command is a primitive command of NX, which calls the
same-named method with the same argument list as the current
@@ -1152,7 +1228,29 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
% package require nx
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ | % package require nx
2.0
% source Stack.tcl
::Stack
@@ -1173,7 +1271,7 @@
::Stack ::nx::Object
% s2 info precedence
-::Safety ::Stack ::nx::Object
+::Safety ::Stack ::nx::Object |
When the method push of s2 is called, first the method of the
mixin class Safety will be invoked that increments the counter and
continues with next to call the shadowed method, here the method
@@ -1215,13 +1313,20 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
The difference to the case with the per-object mixin is that now,
Safety is mixed into the definition of SafeStack. Therefore, all
instances of the class SafeStack (here the instance s3) will be
@@ -1259,7 +1364,18 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
Stack create s4 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ | Stack create s4 {
+} |
The program snippet in Listing 12 defines an instance s4 of the class
Stack and provides an object specific method for push to implement
an integer stack. The method pull is the same for the integer stack
@@ -1295,7 +1411,17 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create IntegerStack -superclass Stack {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ | nx::Class create IntegerStack -superclass Stack {
+} |
An alternative approach is shown in
Listing 13, where the class
IntegerStack is defined, using the same method definition
@@ -1341,7 +1467,31 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Stack2 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ | nx::Class create Stack2 {
:public class method available_stacks {} {
return [llength [:info instances]]
@@ -1364,7 +1514,7 @@
Stack2 create s1
Stack2 create s2
-puts [Stack2 available_stacks]
+puts [Stack2 available_stacks] |
The class Stack2 in Listing 14 consists of the
earlier definition of the class Stack and is extended by the
class-specific method available_stacks, which returns the
@@ -1435,7 +1585,18 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Foo {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ | nx::Class create Foo {
:method foo args {...}
+} |
Listing 16 shows a method foo
of some class Foo referring to differently scoped variables.
@@ -1489,7 +1650,34 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
By defining name and birthday as properties of Person, NX
provides automatically accessor methods with the same name. The
accessors methods (or shortly called "accessors") provide read and
@@ -1561,7 +1749,22 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Base {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ | nx::Class create Base {
:variable x 1
}
@@ -1575,7 +1778,7 @@
Derived create d1
+ |
Note that the variable definitions are inherited in the same way as
properties. The example in Listing 19 shows a
class Derived that inherits from Base. When an instance d1 is
@@ -1592,7 +1795,26 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Base2 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ | nx::Class create Base2 {
:method init {} {
set :x 1
@@ -1610,7 +1832,7 @@
}
Derived2 create d2
+Derived2 create d2 |
In many other object oriented languages, the instance variables are
initialized solely by the constructor (similar to class Derived2 in
Listing 20). This approach is certainly
@@ -1652,7 +1874,21 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
In the example above we create a class Dog with a scripted method
named bark. The method body defines the code, which is executed when
the method is invoked. In this example, the method bar prints out a
@@ -1711,7 +1947,32 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Dog {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ | nx::Class create Dog {
:public method bark {} { puts "[self] Bark, bark, bark." }
:method init {} { Tail create [self]::tail}
}
@@ -1735,7 +1996,7 @@
fido::tail length 10
fido::tail length "Hello"
+fido::tail length "Hello" |
Listing 22 shows an extended example, where every dog
has a tail. The object tail is created as a subobject of the dog in
the constructor init. The subobject can be accessed by providing the
@@ -1755,7 +2016,26 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Dog {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ | nx::Class create Dog {
:public method bark {} { puts "[self] Bark, bark, bark." }
:method init {} {
Tail create [self]::tail
@@ -1773,7 +2053,7 @@
fido wag
+fido wag |
Listing 23 again extends the example by adding a
forwarder named wag to the object (e.g. fido). The forwarder
redirects all calls of the form fido wag with arbitrary arguments to
@@ -1819,7 +2099,20 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Dog {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ | nx::Class create Dog {
:public method bark {} { puts "[self] Bark, bark, bark." }
Dog create fido
fido warn
+fido warn |
Listing 24 extends the last example by defining an
alias for the method "bark". The example only shows the bare
mechanism. In general, method aliases are very powerful means for
@@ -1879,7 +2172,29 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create Foo {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ | nx::Class create Foo {
:public method foo {} {
@@ -1900,7 +2215,7 @@
f1 foo
f1 helper
+f1 helper |
The example above uses :protected method helper …. We could have
used here as well :method helper …, since the default method
call-protection is already protected.
@@ -1920,7 +2235,21 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-nx::Class create Base {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ | nx::Class create Base {
:private method helper {a b} {expr {$a + $b}}
:public method foo {a b} {: -local helper $a $b}
}
@@ -1933,7 +2262,7 @@
s1 foo 3 4 ;s1 bar 3 4 ;s1 helper 3 4 ;
+s1 helper 3 4 ; |
The base class implements a public method foo using the helper
method named helper. The derived class implements a as well a public
method bar, which is also using a helper method named helper. When
@@ -1977,14 +2306,22 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create C {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ | nx::Class create C {
:public method foo {} {return 1}
:create c1
}
c1 foo
+c1 foo |
There are many programming languages that only allow these types of methods.
However, NX also allows methods to be defined on objects.
@@ -2014,7 +2351,26 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-nx::Class create C {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ | nx::Class create C {
:public method foo {} {return 1}
:create c1 {
:public method foo {} {return 2}
@@ -2032,7 +2388,7 @@
nx::Object create o1 {
:public method baz {} {return 4}
}
-o1 baz
+o1 baz |
3.4.3. Class Methods
@@ -2062,7 +2418,32 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create C {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ | nx::Class create C {
+c1 bar |
In some other object oriented programming languages, class methods
are called "static methods".
@@ -2122,7 +2503,21 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-nx::Class create C {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ | nx::Class create C {
+c1 string length "hello world" |
3.6. Method Resolution
@@ -2159,7 +2554,27 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create C {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ | nx::Class create C {
:public method foo {} { return "C foo: [next]"}
}
@@ -2178,7 +2593,7 @@
d1 info precedence
-
+ |
Consider the example in
foo is invoked on object d1, the per-object method has the highest
precedence and is therefore invoked. The per-object methods shadows
@@ -2205,7 +2620,31 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Class create M1 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ | nx::Class create M1 {
:public method foo {} { return "M1 foo: [next]"}
}
nx::Class create M2 {
@@ -2228,7 +2667,7 @@
d1 info precedence
-
+ |
an extension of the previous example. We define here two additional
classes M1 and M2 which are used as per-object and per-class
mixins. Both classes define the method foo, these methods shadow
@@ -2247,7 +2686,23 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
In the first line of the body of method bar, the method foo is
called as usual with an implicit receiver, which defaults to the
current object (therefore, the call is equivalent to d1 foo). The
@@ -2355,7 +2810,43 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create o1 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ | nx::Object create o1 {
+o1 baz -- -y |
Consider the example in Listing 34. The method
foo has the argument list x y. This means that the first argument
is passed in an invocation like o1 foo 1 2 to x (here, the value
@@ -2436,7 +2927,28 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create o2 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ | nx::Object create o2 {
+o2 foo 1 |
The example in Listing 35 defined method foo
with one required and one optional positional parameter. For this
purpose we use the parameter options required and optional. The
@@ -2494,7 +3006,27 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create o3 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ | nx::Object create o3 {
+o3 bar |
In order to define a default value, the parameter specification must
be of the form of a 2 element list, where the second argument is the
default value. See for an example in
@@ -2564,7 +3096,26 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create o4 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ | nx::Object create o4 {
+o4 foo a |
Value contraints are specified as parameter options in the parameter
specifications. The parameter specification x:integer defines x as
a required positional parmeter which value is constraint to an
@@ -2604,7 +3155,35 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
The native checkers object, class, metaclass and baseclass can
be further specialized with the parameter option type to restrict
the permissible values to instances of certain classes. We can use for
@@ -2665,7 +3244,47 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
In order to define a checker groupsize a method of the name
type=groupsize is defined. This method receives two arguments,
name and value. The first argument is the name of the parameter
@@ -2762,7 +3381,33 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
nx::Object create o6 {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ | nx::Object create o6 {
:public method baz {x:integer,1..n} {
puts "x=$x"
}
-}
+} |
Listing 41 contains three examples for
positional parameters with different multiplicities. Multiplicity is
often combined with value constraints. A parameter specification of
@@ -2877,7 +3522,34 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
The class Person has two properties name and birthday, where the
property name is required, the property birthday is not. The
class Student is a subclass of Person with the additional required
@@ -2960,14 +3632,22 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
Object parameter for Person p1:
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ | Object parameter for Person p1:
-name:required -birthday ...
-mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
Object parameter for Student s1:
-matnr:required {-oncampus:boolean true}
-name:required -birthday ...
- -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional
+ -mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n _:initcmd,optional |
The actual values can be obtained via introspection via Person info
parameter definition. The object parameter types mixinreg and
filterreg are for converting definitions of filters and mixins. The
@@ -3014,9 +3694,12 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-
Object parameter for Class Student:
+
1
+ 2
+ 3
+ | Object parameter for Class Student:
-mixin:mixinreg,alias,1..n -filter:filterreg,alias,1..n ...
- {-superclass:class,alias,1..n ::nx::Object} ...
+ {-superclass:class,alias,1..n ::nx::Object} ... |
The actual values can be obtained via introspection via nx::Class info
parameter definition.
@@ -3117,7 +3800,17 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-::nx::Object create o {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ | ::nx::Object create o {
:method unknown {called_method args} {
puts "Unknown method '$called_method' called"
}
@@ -3126,7 +3819,7 @@
o foo 1 2 3
-
+ |
Without any provision of an unknown method handler, an error will be
raised, when an unknown method is called.
@@ -3151,7 +3844,29 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-::nx::Class public class method __unknown {name} {
+
1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ | ::nx::Class public class method __unknown {name} {
puts "***** __unknown called with <$name>"
@@ -3172,7 +3887,7 @@
}
+} |
The Next Scripting Framework allows to add, query, delete and list unknown handlers.
Listing 49: Unknown Handler registration
@@ -3186,11 +3901,16 @@
.nx-placeholder {color: #AF663F; font-weight: normal; font-style: italic;}
.nx-variable {color: #AF663F; font-weight: normal; font-style: normal;}
-