by JayTe » 14 Apr 2011, 13:41
A mon tour
J'ai fait un script en python qui prend 1 ou plusieurs fichiers sources lua, les concatène, convertit les caractères spéciaux et met le tout dans un beau tns
Normalement le script est portable (testé sous Vista, Ubuntu et iOS) , je n'utilise que des fonctions de la libraire standard.
Il s'utilise en ligne de commande comme ça:
- Code: Select all
python maketns.py output_tns_file.tns input_lua_file_1.lua ... input_lua_file_n.lua
Source:
- Code: Select all
import os, zipfile, sys
if len(sys.argv) 3:
print('Usage: python maketns.py output_tns_file.tns input_lua_file_1.lua ... input_lua_file_n.lua')
print('Note that different lua source files are simply concatenated.')
sys.exit(0)
outputFileName = sys.argv[1]
inputFileNames = sys.argv[2:len(sys.argv)]
#hex values of a blank tns file
blankTnsHexValues = [
'2a', '54', '49', '4d', '4c', '50', '30', '35',
'30', '30', '14', '00', '00', '00', '0d', '00',
'3c', '17', '8d', '3e', '73', '45', '68', '44',
'40', '01', '00', '00', '93', '02', '00', '00',
'0c', '00', '00', '00', '44', '6f', '63', '75',
'6d', '65', '6e', '74', '2e', '78', '6d', '6c',
'0f', 'ce', 'd8', 'd2', '81', '06', '86', '5b',
'62', '81', 'c2', 'a6', '21', 'a5', 'fd', '08',
'23', '0f', '92', 'ae', '38', '45', '2a', '05',
'66', 'bb', 'c7', 'df', '98', '87', '55', '13',
'61', '47', '75', '24', '66', 'f9', '71', '1f',
'cd', 'e5', 'b3', '41', '5d', '13', '33', '4e',
'72', '0e', '08', 'fb', '76', '87', 'e6', '1d',
'8f', '93', '18', '32', 'e7', '06', '92', '6a',
'58', 'f0', '77', '22', '09', 'ba', 'ca', '25',
'b3', '8e', '7b', '52', '98', 'c5', '54', '9a',
'5f', '8c', '34', '9e', '35', 'f5', '6b', '75',
'45', 'c7', '7a', '10', '8a', '5f', '6e', '0d',
'e6', '4a', '1e', '90', '92', 'ba', '1c', 'd1',
'96', 'b0', 'c1', '19', 'cd', '5c', '0d', '27',
'9b', '19', '2f', '58', '6f', '49', '14', '95',
'0d', 'f1', '3a', 'c8', '99', '82', '2e', 'a3',
'ad', '36', '9e', 'b7', '13', '28', 'aa', '9b',
'89', 'b5', '30', 'fc', '3f', 'd4', 'd2', '45',
'be', 'c4', '7f', '86', '87', '71', '25', '09',
'd1', 'ed', 'b3', 'd3', '92', '69', 'df', 'b5',
'94', '72', 'a6', '37', '58', '58', 'c4', 'd4',
'29', 'd1', 'ba', 'af', '84', '4a', '2e', 'cf',
'2e', '7b', 'fb', 'bd', '91', 'ac', '99', 'ba',
'a8', 'cc', 'c0', '95', '5b', '21', 'e4', '3d',
'58', 'fa', '8f', 'c4', '21', 'c7', '66', 'c5',
'7b', 'a7', '31', '9f', '70', '2d', '1e', 'ce',
'37', '8a', '13', 'e1', 'e8', '1e', '88', '67',
'11', '7c', '3e', '7d', '75', '52', 'bd', '9a',
'40', 'd7', 'af', '3d', 'a1', '10', '3a', 'eb',
'91', 'c8', '8d', '4a', '24', '9b', '38', '85',
'8f', '38', 'b5', '3c', 'b5', 'a3', 'fa', '1b',
'be', '4a', 'ca', '93', 'd7', '41', '69', '02',
'0d', 'ad', '30', '6d', 'ba', '08', '54', 'fc',
'13', 'e8', 'fa', 'eb', 'c0', 'fd', 'e8', 'ad',
'51', '1a', '4a', '89', '95', '3a', '27', 'd4',
'f2', 'cc', '40', '46', 'cd', 'c9', '8a', '14',
'd5', '83', 'df', '60', 'dc', 'ce', '06', '5e',
'9e', '2e', 'b1', 'd3', '54', '97', 'f7', '7b',
'ae', '6f', '51', '4f', '74', 'dc', '57', '6a',
'd4', '7f', '37', '2a', '49', 'ba', '86', '2a']
#xml code which should be placed before and after the lua code
xmlCodeBefore = '?xml version="1.0" encoding="UTF-8" ?prob xmlns="urn:TI.Problem" ver="1.0" pbname=""sym/symcard clay="0" h1="10000" h2="10000" w1="10000" w2="10000"isDummyCard0/isDummyCardflag0/flagwdgt xmlns:sc="urn:TI.ScriptApp" type="TI.ScriptApp" ver="1.0"sc:mFlags0/sc:mFlagssc:value-1/sc:valuesc:script'
xmlCodeAfter = '/sc:script/wdgt/card/prob'
convertedLua = ''
for inputFileName in inputFileNames:
inputFile = open(inputFileName, 'rb')
#encoding special chars of each line in the lua code
for line in inputFile:
conv = line.replace('', 'amp;')
conv = conv.replace('"', 'quot;')
conv = conv.replace(''', '#039;')
conv = conv.replace('', 'lt;')
conv = conv.replace('', 'gt;')
convertedLua += conv
inputFile.close()
xmlCode = xmlCodeBefore + convertedLua + xmlCodeAfter
#compressing the generated xml code to temp.zip
tempZip = zipfile.ZipFile('./temp.zip', 'w', zipfile.ZIP_DEFLATED)
tempZip.writestr('Problem1.xml', xmlCode)
tempZip.close()
outputFile = open(outputFileName, 'wb')
#writing blank tns file
for s in blankTnsHexValues:
outputFile.write(chr(eval('0x' + s)))
#appending created zip file
zipFile = open('./temp.zip', 'rb')
outputFile.write(zipFile.read())
zipFile.close()
outputFile.close()
#deleting temp.zip
os.remove('./temp.zip')
Fichier téléchargeable en PJ et à renommer en .py
Je suis tombé au passage sur quelque chose d'assez interessant (en réencodant un fichier lua déjà encodé):

Il y a apparemment une vérification syntaxique intégrée à l'OS qui indique à quelle ligne il y a une erreur.
JayTe
TabVar - Etude de fonctions sur Nspire!
