1
0

2 Коммитууд 0321e0ff0a ... b3b5d0dd2d

Эзэн SHA1 Мессеж Огноо
  Scarlett Schäfer b3b5d0dd2d Update PC to use syntaxadditions 2 жил өмнө
  Scarlett Schäfer 655843823f Lookup Syntax 2 жил өмнө

+ 2 - 2
source/event/bed.qsps

@@ -1,7 +1,7 @@
 # event_bed
-
+!!Process: syntaxadditions
 if $ARGS[0] = 'start':
-    if $gender_appearance = 'm':
+    if #pc.$genderAppearance = 'm':
         if $chastity ! '':
             gs 'util_image','render_image','events/bed/male_chastity(0).jpg'
         else

+ 3 - 3
source/event/mirror.qsps

@@ -1,7 +1,7 @@
 # event_mirror
-
+!!Process: syntaxadditions
 if $ARGS[0] = 'start':
-    if $gender_appearance = 'f':
+    if #pc.$genderAppearance = 'f':
         gs 'util_image','render_image','events/bath/mirror_female.png'
     else
         gs 'util_image','render_image','events/bath/mirror_male.png'
@@ -51,7 +51,7 @@ elseif $ARGS[0] = 'hair_comb':
 
     temp_time = max(1,body_hair_head+5) * 60
 
-    if $gender_appearance = 'm':
+    if #pc.$genderAppearance = 'm':
         gs 'util_image','render_image','events/bath/comb_male(0).jpg'
     else
         gs 'util_image','render_image','events/bath/comb_female('+rand(0,3)+').jpg'

+ 1 - 1
source/event/school/schoolday.qsps

@@ -30,7 +30,7 @@ if $ARGS[0] = 'start':
     elseif _performance = 4:
         $_performance_text = 'You put no effort into your school work.'
     end
-    $_performance_picture = 'events/school/schoolday/classes/participate_'+FUNC('pc','get','genderMedia')+'_<<_performance>>.jpg'
+    $_performance_picture = 'events/school/schoolday/classes/participate_'+#pc.$genderMedia+'_<<_performance>>.jpg'
 
     gs 'util_action','render_action',$_hang_out_with_text,'gt ''event_school_schoolday'',''startSwitchHangout'' ',0,$_hang_out_with_picture
     gs 'util_action','render_action',$_performance_text,'gt ''event_school_schoolday'',''startSwitchPerformance'' ',0,$_performance_picture

+ 2 - 2
source/event/shower.qsps

@@ -1,5 +1,5 @@
 # event_shower
-
+!!Process: syntaxadditions
 if $ARGS[0] = 'start':
     gs 'util_image','render_image','events/bath/shower.jpg'
     'You enter the shower and turn on the water.'
@@ -12,7 +12,7 @@ if $ARGS[0] = 'start':
         gt 'util_event','end'
     end
 elseif $ARGS[0] = 'shower':
-    if $gender_appearance = 'm':
+    if #pc.$genderAppearance = 'm':
         gs 'util_image','render_image','events/bath/shower_male(0).jpg'
     else
         gs 'util_image','render_image','events/bath/shower_female('+rand(0,3)+').jpg'

+ 3 - 3
source/pc/gender.qsps

@@ -1,5 +1,5 @@
 # pc_gender
-
+!!Process: syntaxadditions
 if $ARGS[0] = 'get_gender_visible':
     _verbose = 0
     _sex_visible = 0
@@ -47,7 +47,7 @@ elseif $ARGS[0] = 'set_body_female':
     body_genital_balls = 0
     body_genital_penis = 0
     body_genital_vagina = 1
-    $gender_appearance = 'f'
+    #pc.$genderAppearance = 'f'#
     $gender_identification = 'f'
     gender_usesMakeup = 1
     gs 'util_wardrobe','style_update'
@@ -62,7 +62,7 @@ elseif $ARGS[0] = 'set_body_male':
     body_genital_balls = 2
     body_genital_penis = 1
     body_genital_vagina = 0
-    $gender_appearance = 'm'
+    #pc.$genderAppearance = 'm'#
     $gender_identification = 'm'
     gender_usesMakeup = 0
     gs 'util_wardrobe','style_update'

+ 5 - 7
source/pc/pc.qsps

@@ -1,9 +1,7 @@
 # pc
-
-if $ARGS[0] = 'get':
-    if $ARGS[1] = 'genderMedia':
-        $RESULT = $gender_appearance
-    end
-end
-
+!!Process: syntaxadditions
+!CLASS(pc){ 
+    $genderAppearance:;
+    $genderMedia:GET(#THIS.$genderAppearance);    
+}   
 -

+ 18 - 0
source/test.qsps

@@ -0,0 +1,18 @@
+# test
+!!Process: syntaxadditions
+
+!CLASS(pc){
+    age: GET(
+        LOOKUP(#THIS.height?    
+            [0/40]: 1,
+            [41/100]:2     
+        )
+    );
+    height: get;
+    $name: set;  
+    weight: set;           
+}                      
+#pc.$name = 'Hans'# & #pc.$name = 'Hans'#
+*PL #pc.$name
+ 
+-

+ 5 - 5
source/util/wardrobe.qsps

@@ -1,5 +1,5 @@
 # util_wardrobe
-
+!!Process: syntaxadditions
 
 if $ARGS[0] = 'loadItemAtSlot':
     $item_gender = 'none'
@@ -65,7 +65,7 @@ elseif $ARGS[0] = 'render_wardrobe':
     $wardrobe_code = ''
 
     if $wardrobe_current_bra_file = '':
-        if $gender_appearance = 'm':
+        if #pc.$genderAppearance = 'm':
             $temp_bra_name = 'No Undershirt'
         else
             $temp_bra_name = 'No Bra'
@@ -88,7 +88,7 @@ elseif $ARGS[0] = 'render_wardrobe':
     end
 
     if $wardrobe_current_panties_file = '':
-        if $gender_appearance = 'm':
+        if #pc.$genderAppearance = 'm':
             $temp_panties_name = 'No Underpants'
         else
             $temp_panties_name = 'No Panties'
@@ -244,7 +244,7 @@ elseif $ARGS[0] = 'style_update':
         if $temp_style_panties = 'Naked':
             $wardrobe_current_style = 'Naked'
         elseif $temp_style_bra = 'Naked':
-            if $gender_appearance = 'm':
+            if #pc.$genderAppearance = 'm':
                 $wardrobe_current_style = 'Underwear'
             else
                 $wardrobe_current_style = 'Topless'
@@ -252,7 +252,7 @@ elseif $ARGS[0] = 'style_update':
         else
             $wardrobe_current_style = 'Underwear'
         end
-    elseif ($temp_gender_clothes ! 'fm' and $temp_gender_clothes ! $gender_appearance) or ($temp_gender_shoes ! 'fm' and $temp_gender_shoes ! $gender_appearance):
+    elseif ($temp_gender_clothes ! 'fm' and $temp_gender_clothes !#pc.$genderAppearance) or ($temp_gender_shoes ! 'fm' and $temp_gender_shoes !#pc.$genderAppearance):
         $wardrobe_current_style = 'Crossdresser'
     else
         $wardrobe_current_style = $temp_style_clothes

+ 124 - 24
txtcompile.py

@@ -2,6 +2,7 @@
 # "usage: txtcompile.py <input_dir> <output_dir> <output_filename>"
 
 import os
+from posixpath import expanduser
 import sys
 import re
 import io 
@@ -38,10 +39,11 @@ def class2qsp(text):
 	
 
 
-	while match is not None:
+	if match is not None:
 		class_name = match.groups()[0]
-		fields_set = []
-		fields_get = []
+
+		text = text.replace("#THIS","#"+class_name)
+		text = text.replace("#$THIS","#$"+class_name)
 
 		field_missing_error = 'ERROR("Missing field '+class_name+'.<<$ARGS[1]>>")'
 
@@ -51,36 +53,113 @@ def class2qsp(text):
 
 		field_match = re.search(regex_inner, field_text, re.IGNORECASE)	
 
-		while field_match is not None:
-			print(field_match.groups())
+		field_count_get = 0
+		field_count_set = 0
+
+		text_get = '\nif $ARGS[0] = "get":\n'
+		text_set = '\nif $ARGS[0] = "set":\n'
 
-			fields_get += [field_match.groups()]
-			fields_set += [field_match.groups()]
+		while field_match is not None:
+			#('age', ' GET(\n        LOOKUP(#this.height?\n            0-40: 1,\n            41-100:2\n        )\n    )')
+			field_name = field_match.groups()[0]
+			field_name_prefix = ''
+			if field_name[0] == '$':
+				field_name_prefix = '$'
+				field_name = field_name[1:]
+
+			field_arguments = field_match.groups()[1]
+
+			#GET Arguments
+			get_text = ''
+			get_done = False
+			currentPos = field_arguments.find('GET(')
+			if currentPos >= 0:
+				currentPos += len('GET(') - 1
+				
+				getArguments = getNestedText(field_arguments[currentPos:],'(',')')
+
+				#print (getArguments)
+
+				currentPosLookup = getArguments.find('LOOKUP(')
+				if currentPosLookup >= 0:
+					lookupText = ''
+					currentPosLookup += len('LOOKUP(') - 1
+					lookupArguments = getNestedText(getArguments[currentPosLookup:],'(',')')
+
+					#print(lookupArguments)
+
+					lookupArguments = lookupArguments.split('?')
+					lookupVar = lookupArguments[0] # #this.height
+					lookupValuePairs = lookupArguments[1].split(',') # ['\n            0-40: 1', '\n            41-100:2\n        ']
+
+					#print(lookupValuePairs)
+					lookupValuePairCounter = 0
+					for lookupValuePair in lookupValuePairs:
+						if lookupValuePairCounter > 0: lookupText += '\t\telse'
+						lookupCondition = ""
+						lookupValuePairDetails = lookupValuePair.split(':')
+						lookupValuePairRange = lookupValuePairDetails[0].strip()
+						if lookupValuePairRange[0] == "[":
+							seperatorPos = lookupValuePairRange.find('/')
+							if seperatorPos >= 0:
+								lowerValue = lookupValuePairRange[1:seperatorPos]
+								higherValue = lookupValuePairRange[seperatorPos+1:len(lookupValuePairRange)-1]
+								#print(lowerValue+"-"+higherValue)
+								lookupCondition = lookupVar + '>='+lowerValue+' and '+lookupVar+'<='+higherValue
+
+						#print(lookupCondition)
+						
+						lookupValuePairValue = lookupValuePairDetails[1].strip()
+
+						lookupText += 'if '+lookupCondition+':\n'+field_name_prefix+'\t\t\tRESULT='+lookupValuePairValue+'\n'
+
+						
+
+						lookupValuePairCounter += 1
+					lookupText += '\t\tend\n'
+					get_text = lookupText
+					get_done == True
+					
+				if get_done == False and len(getArguments) > 0:
+					get_text = '\t\t'+field_name_prefix+'RESULT = '+getArguments+'\n'
+					get_done = True
+
+
+			if get_text == '' and field_arguments.find('SET(') < 0:
+				get_text = '\t\t'+field_name_prefix+'RESULT = '+field_name_prefix+class_name+'_'+field_name+'\n'
+
+			if get_text != '':
+				if field_count_get > 0:
+					text_get += '\telse'
+				text_get+='if $ARGS[1]="'+field_name_prefix+field_name+'":\n'+get_text
+				field_count_get += 1
+
+			#SET Arguments
+			set_text = ''
+			if field_arguments.find('GET(') < 0:
+				set_text = '\t\t'+field_name_prefix+class_name+'_'+field_name+'='+field_name_prefix+'ARGS[2]\n'
+
+			if set_text != '':
+				if field_count_set > 0:
+					text_set += '\telse'
+				text_set+='if $ARGS[1]="'+field_name_prefix+field_name+'":\n'+set_text
+				field_count_set += 1
+				
 
 			field_text = field_text[field_match.end():]
 			field_match = re.search(regex_inner, field_text, re.IGNORECASE)	
 		
-		text_get = '\nif $ARGS[0] = "get":\n'
-		text_set = '\nif $ARGS[0] = "set":\n'
+		
 
-		for i in range(len(fields_get)):
-			if i >0:
-				text_get += '\telse'
-				text_set += '\telse'		
-			text_get += 'if $ARGS[1] = "'+fields_get[i][0]+'":\n'
-			text_set += 'if $ARGS[1] = "'+fields_get[i][0]+'":\n'
-			if fields_get[i][0][0] == '$':
-				text_get += '\t\t$RESULT = $'+class_name+'_'+fields_get[i][0][1:]+'\n'
-				text_set += '\t\t$'+class_name+'_'+fields_get[i][0][1:]+'=$ARGS[2]\n'
-			else:
-				text_get += '\t\tRESULT = '+class_name+'_'+fields_get[i][0]+'\n'
-				text_set += '\t\t'+class_name+'_'+fields_get[i][0]+'=ARGS[2]\n'
 		
-		if len(fields_get) > 0:
+		if field_count_get > 0:
 			text_get += '\telse:\n\t\t!'+field_missing_error+'\n\tend\n'
-			text_set += '\telse:\n\t\t!'+field_missing_error+'\n\tend\n'
 		else:
 			text_get += '\n\t!'+field_missing_error+'\n'
+
+		if field_count_set > 0:
+			text_set += '\telse:\n\t\t!'+field_missing_error+'\n\tend\n'
+		else:
 			text_set += '\n\t!'+field_missing_error+'\n'
 
 		text_get += 'end\n'
@@ -93,11 +172,32 @@ def class2qsp(text):
 		
 
 		text = text[:max(match.start(),0)] +text_get+text_set+ text[(nextClose+1):]
-		match = re.search(regex, text, re.IGNORECASE)	
+		#match = re.search(regex, text, re.IGNORECASE)	
 
 	return text
 
 
+def getNestedText(text,left,right):
+	#Paste text including braces, e.g. "(asdasdasdasd)""
+	currentPos = 1
+	startPos = currentPos
+	currentOpen = 1
+	while(currentOpen > 0):
+		nextOpen = text.find(left,currentPos)
+		nextClose = text.find(right,currentPos)
+		
+		if nextClose == -1:
+			print('Error')
+			sys.exit('Syntax error')
+			
+		if nextOpen != -1 and nextOpen < nextClose:
+			currentPos = nextOpen+1
+			currentOpen += 1
+		else:
+			currentPos = nextClose+1
+			currentOpen -= 1
+
+	return text[startPos:currentPos-1]
 
 def getProcessingArguments(text):
 	regex = r"\s*!!\s*PROCESS\s*:(.*)"