Brian wrote: ↑February 4th, 2022, 9:54 am
Thanks for this. Once I saw some of the different bracket options you provided, I realized my mistake or rather my assumption.

I totally revised the parsing function for nested syntax. Well, not totally revised, but at least some of the logic in determining "where" the variable definition is located within a string.

Anyway...you can get it here:

https://forum.rainmeter.net/viewtopic.php?p=203898#p203912
-Brian

Ok, here are some simpler examples of skins from my "repertoire" that give the error(s) I mentioned above for the Rainmeter-4.5.11.3599-prerelease version:

**BaseConverter.ini**:

Code: Select all

```
[Variables]
Number=2744
Quotient=(#Number#)
Result=""
Base=20
[Rainmeter]
Update=1000
DynamicWindowSize=1
AccurateText=1
---Measures---
[MeasureConvert]
Measure=Calc
Formula=(#Quotient#%#Base#)
UpdateDivider=-1
RegExpSubstitute=1
Substitute="^10$":"A","^11$":"B","^12$":"C","^13$":"D","^14$":"E","^15$":"F","^16$":"G","^17$":"H","^18$":"I","^19$":"J","^20$":"K","^21$":"L","^22$":"M","^23$":"N","^24$":"O","^25$":"P","^26$":"Q","^27$":"R","^28$":"S","^29$":"T","^30$":"U","^31$":"V","^32$":"W","^33$":"X","^34$":"Y","^35$":"Z"
IfCondition=((#Quotient#)<>0)
IfTrueAction=[!SetVariable Result "[MeasureConvert]#Result#"][!SetVariable Quotient (Trunc(#Quotient#/#Base#))][!UpdateMeasure "MeasureConvert"]
IfConditionMode=1
DynamicVariables=1
---Meter---
[MeterConvert]
Meter=STRING
X=5
Y=5
FontFace=Consolas
FontColor=255,255,255,255
SolidColor=47,47,47,255
Padding=5,5,5,5
FontSize=16
AntiAlias=1
Text="Number = #Number##CRLF#Base = #Base##CRLF#Result = #Result#"
DynamicVariables=1
```

**ColorWheelA.ini**:

Code: Select all

```
[Variables]
; Color Array (set it to a "<ColorNumber>:<Red>,<Green>,<Blue>,<Alpha>;" enumeration)
Colors="0:255,0,0,255;1:255,0,255,255;2:0,0,255,255;3:0,255,255,255;4:0,255,0,255;5:255,255,0,255;6:255,0,0,255;"
; Maximum Value (decrease to speed up the transition, increase to slow it down)
Range=384
; Value's Step (decrease to slow down the transition, increase to speed it up; negative values to transition backwards)
VStep=1
[Rainmeter]
Update=25
DynamicWindowSize=1
AccurateText=1
---Measures---
[SetRGBA]
Measure=String
String=#Colors#
UpdateDivider=-1
RegExpSubstitute=1
Substitute="(?U)(.+):(.+),(.+),(.+),(.+);":"[!SetVariable R\1 \2][!SetVariable G\1 \3][!SetVariable B\1 \4][!SetVariable A\1 \5]","(\d+)(\s+\S+\])$":"\1\2[!SetVariable IdMax \1]","(?U)^(\[.+\s+(\S+)\]\[.+\s+(\S+)\]\[.+\s+(\S+)\]\[.+\s+(\S+)\])":"[!SetVariable R \2][!SetVariable G \3][!SetVariable B \4][!SetVariable A \5]\1"
OnUpdateAction=[SetRGBA]
[Value]
Group=ColorGroup
Disabled=1
Measure=Calc
Formula=((#Range#+Value+#VStep#)%#Range#)
OnUpdateAction=[!SetVariable Interval (([#Range]+1)/[#IdMax])][!SetVariable SIndex (Trunc([Value]/(([#Range]+1)/[#IdMax])))][!SetVariable EIndex (Trunc([Value]/(([#Range]+1)/[#IdMax]))+1)]
DynamicVariables=1
[Color]
Group=ColorGroup
Disabled=1
Measure=Calc
OnUpdateAction=[!SetVariable R ([#R[#SIndex]]+(([Value]-[#SIndex]*[#Interval])/[#Interval])*([#R[#EIndex]]-[#R[#SIndex]]))][!SetVariable G ([#G[#SIndex]]+(([Value]-[#SIndex]*[#Interval])/[#Interval])*([#G[#EIndex]]-[#G[#SIndex]]))][!SetVariable B ([#B[#SIndex]]+(([Value]-[#SIndex]*[#Interval])/[#Interval])*([#B[#EIndex]]-[#B[#SIndex]]))][!SetVariable A "255"][!UpdateMeter "Shape"][!Redraw]
RegExpSubstitute=1
Substitute="^.*$":"#R#,#G#,#B#,#A#","\.\d+":"","(\d+)":" \1","[ \d]*([ \d]{3})":"\1"," ":" "
DynamicVariables=1
---Meters---
[Shape]
Meter=Shape
Shape=Rectangle 0,0,200,100,12 | StrokeWidth 0 | Stroke Color 255,255,255,255 | Fill Color #R#,#G#,#B#,#A#
MouseScrollDownAction=[!SetVariable VStep -1][!EnableMeasureGroup ColorGroup][!UnpauseMeasureGroup ColorGroup][!UpdateMeasureGroup ColorGroup][!PauseMeasureGroup ColorGroup][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
MouseScrollUpAction=[!SetVariable VStep 1][!EnableMeasureGroup ColorGroup][!UnpauseMeasureGroup ColorGroup][!UpdateMeasureGroup ColorGroup][!PauseMeasureGroup ColorGroup][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
LeftMouseUpAction=[!UnpauseMeasureGroup ColorGroup][!ToggleMeasureGroup ColorGroup][!SetVariable R #R0#][!SetVariable G #G0#][!SetVariable B #B0#][!SetVariable A #A0#][!UpdateMeasureGroup ColorGroup][!UpdateMeter #CURRENTSECTION#][!Redraw]
MiddleMouseUpAction=[!TogglePauseMeasureGroup ColorGroup]
DynamicVariables=1
[Text]
Meter=STRING
X=([Shape:W]/2)r
Y=([Shape:H]/2)r
W=([Shape:W])
H=([Shape:H])
FontFace=Tahoma
FontColor=255,255,255,255
FontSize=10
FontWeight=700
AntiAlias=1
StringAlign=CenterCenter
StringEffect=Shadow
FontEffectColor=0,0,0,255
Text="TRANSITION: Color Wheel#CRLF#DIRECTION: #VStep##CRLF#COLOR: [Color]#CRLF#TRANSITION UPDATES: #Range#"
DynamicVariables=1
```

**CombineTM.ini**:

Code: Select all

```
[Variables]
GlobalW=(600*[#Scale])
GlobalH=(600*[#Scale])
LocalW=(100*[#Scale])
LocalH=(50*[#Scale])
Scale=0.49
LocalStyle=0
[Rainmeter]
Update=25
DynamicWindowSize=1
AccurateText=1
---Measures---
[LocalStyle]
Measure=String
String=#LocalStyle#
UpdateDivider=-1
RegExpSubstitute=1
Substitute="^0$":"TM_Two","^1$":"TM_Out"
DynamicVariables=1
[Angle1]
Measure=Calc
Formula=((Angle1+1)%360)
DynamicVariables=1
[Angle2]
Measure=Calc
Formula=((Angle2+1)%360)
DynamicVariables=1
---Styles---
; TransformationMatrix [TM in short] multiplication (syntax changes: "zoom" = "scale", "a" = 2nd matrix "x", "b" = 2nd matrix "y")
;
; | zoomx skewx movex | | zooma skewa movea | | zoomx*zooma+skewx*skewb+movex*0 zoomx*skewa+skewx*zoomb+movex*0 zoomx*movea+skewx*moveb+movex*1 |
; | skewy zoomy movey | x | skewb zoomb moveb | = | skewy*zooma+zoomy*skewb+movey*0 skewy*skewa+zoomy*zoomb+movey*0 skewy*movea+zoomy*moveb+movey*1 |
; | 0 0 1 | | 0 0 1 | | 0*zooma+ 0*skewb+ 1*0 0*skewa+ 0*zoomb+ 1*0 0*movea+ 0*moveb+ 1*1 |
;
; In Rainmeter (column by column and separated by ";" order of the above, excluding the 3rd row containing the "0 0 1" values)
;
; 1st matrix: TransformationMatrix=zoomx;skewy;skewx;zoomy;movex;movey
; 2nd matrix: TransformationMatrix=zooma;skewb;skewa;zoomb;movea;moveb
; out matrix: TransformationMatrix=(zoomx*zooma+skewx*skewb);(skewy*zooma+zoomy*skewb);(zoomx*skewa+skewx*zoomb);(skewy*skewa+zoomy*zoomb);(zoomx*movea+skewx*moveb+movex);(skewy*movea+zoomy*moveb+movey)
;
; Hint: copy the out matrix, place its values on different lines, replace operands with the corresponding 1st and 2nd matrix values, regroup lines into one
;
; The code below demonstrates applying a local TM at the meter level (2nd matrix) over a global TM at the skin level (1st matrix) through TM1 x TM2 operation
; - [Background]: dummy meter used to workaround the transformed window / skin size issues mentioned at https://forum.rainmeter.net/viewtopic.php?f=14&t=37848
; - [Global]: meter used to simulate the skin itself and to showcase the 1st matrix transformation, i.e. rotation of a rectangle around the global center
; - [Local]: meter used to showcase both the 2nd and the out matrix transformations, i.e. rotation of a rectangle around its center ± around the global center
; - out matrix uses skin specific coordinates, aka 0 for [#CURRENTSECTION#:X or Y], #CURRENTCONFIGWIDTH# & #CURRENTCONFIGHEIGHT# for [#CURRENTSECTION#:W or H]
[TM_One]
TransformationMatrix=(Cos(Rad([Angle1:])));(-Sin(Rad([Angle1:])));(Sin(Rad([Angle1:])));(Cos(Rad([Angle1:])));(([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)-([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Cos(Rad([Angle1:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Sin(Rad([Angle1:])));(([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)+([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Sin(Rad([Angle1:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Cos(Rad([Angle1:])))
[TM_Two]
TransformationMatrix=(Cos(Rad([Angle2:])));(-Sin(Rad([Angle2:])));(Sin(Rad([Angle2:])));(Cos(Rad([Angle2:])));(([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)-([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Cos(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Sin(Rad([Angle2:])));(([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)+([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Sin(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Cos(Rad([Angle2:])))
[TM_Out]
TransformationMatrix=(Cos(Rad([Angle1:]))*Cos(Rad([Angle2:]))-Sin(Rad([Angle1:]))*Sin(Rad([Angle2:])));(-Sin(Rad([Angle1:]))*Cos(Rad([Angle2:]))-Cos(Rad([Angle1:]))*Sin(Rad([Angle2:])));(Cos(Rad([Angle1:]))*Sin(Rad([Angle2:]))+Sin(Rad([Angle1:]))*Cos(Rad([Angle2:])));(-Sin(Rad([Angle1:]))*Sin(Rad([Angle2:]))+Cos(Rad([Angle1:]))*Cos(Rad([Angle2:])));(Cos(Rad([Angle1:]))*(([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)-([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Cos(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Sin(Rad([Angle2:])))+Sin(Rad([Angle1:]))*(([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)+([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Sin(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Cos(Rad([Angle2:])))+((0+#CURRENTCONFIGWIDTH#/2)-(0+#CURRENTCONFIGWIDTH#/2)*Cos(Rad([Angle1:]))-(0+#CURRENTCONFIGHEIGHT#/2)*Sin(Rad([Angle1:]))));(-Sin(Rad([Angle1:]))*(([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)-([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Cos(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Sin(Rad([Angle2:])))+Cos(Rad([Angle1:]))*(([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)+([#CURRENTSECTION#:X]+[#CURRENTSECTION#:W]/2)*Sin(Rad([Angle2:]))-([#CURRENTSECTION#:Y]+[#CURRENTSECTION#:H]/2)*Cos(Rad([Angle2:])))+((0+#CURRENTCONFIGHEIGHT#/2)+(0+#CURRENTCONFIGWIDTH#/2)*Sin(Rad([Angle1:]))-(0+#CURRENTCONFIGHEIGHT#/2)*Cos(Rad([Angle1:]))))
---Meters---
[Background]
Meter=Image
W=#GlobalW#
H=#GlobalH#
SolidColor=0,0,0,128
UpdateDivider=-1
LeftMouseUpAction=[!SetVariable LocalStyle (1-#LocalStyle#)][!UpdateMeasure LocalStyle][!UpdateMeter *][!Redraw]
MouseScrollUpAction=[!SetVariable Scale (Clamp(#Scale#+0.01,0.01,2))][!UpdateMeter *][!Redraw]
MouseScrollDownAction=[!SetVariable Scale (Clamp(#Scale#-0.01,0.01,2))][!UpdateMeter *][!Redraw]
DynamicVariables=1
[Global]
Hidden=#LocalStyle#
Meter=Shape
MeterStyle=TM_One
W=#GlobalW#
H=#GlobalH#
Shape=Rectangle (#GlobalW#-#LocalW#-(Sqrt(#LocalW#**2+#LocalH#**2)-#LocalW#)/2),(#GlobalH#/2-#LocalH#/2),#LocalW#,#LocalH# | StrokeWidth 0 | Stroke Color 255,255,0,255 | Fill Color 255,255,0,255
DynamicVariables=1
[Local]
Meter=Shape
MeterStyle=[LocalStyle]
X=(#GlobalW#-#LocalW#-(Sqrt(#LocalW#**2+#LocalH#**2)-#LocalW#)/2)
Y=(#GlobalH#/2-#LocalH#/2)
Shape=Rectangle 0,0,#LocalW#,#LocalH# | StrokeWidth 0 | Stroke Color 255,255,0,255 | Fill Color 255,255,0,255
DynamicVariables=1
```

Errors Rainmeter 4.5.11.3599 PR II.jpg

These are simple and short skins, with no dependencies whatsoever, so they should be easier to debug...

You do not have the required permissions to view the files attached to this post.