<s> __author__ = '<STR_LIT>' <EOL> import json <EOL> import re <EOL> import urllib . parse <EOL> import html <EOL> import string <EOL> sqfTypes = [ '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ] <EOL> sqfTypeSub = { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } <EOL> typeExpr = r'<STR_LIT:(>' + '<STR_LIT:|>' . join ( sqfTypes ) + '<STR_LIT:)>' <EOL> arrayExpr = r'<STR_LIT>' <EOL> strExpr = r'<STR_LIT>' <EOL> paramExpr = arrayExpr + '<STR_LIT:|>' + strExpr + '<STR_LIT>' <EOL> opExpr = r'<STR_LIT>' <EOL> data = { } ; <EOL> with open ( '<STR_LIT>' , '<STR_LIT:r>' ) as f : <EOL> data = json . load ( f ) <EOL> outputParser = { '<STR_LIT:null>' : { } , '<STR_LIT>' : { } , '<STR_LIT>' : { } } ; <EOL> outputAutocomplete = [ ] ; <EOL> outputSyntaxStr = [ ] ; <EOL> for cmd in data : <EOL> cmdTemplateParser = { } ; <EOL> cmdTemplateAutocomplete = { } ; <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> cmdTemplateAutocomplete [ '<STR_LIT:type>' ] = '<STR_LIT>' <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = '<STR_LIT>' + urllib . parse . quote ( str ( cmd [ '<STR_LIT:title>' ] ) ) <EOL> cmdTemplateAutocomplete [ '<STR_LIT:description>' ] = re . sub ( r'<STR_LIT>' , '<STR_LIT>' , cmd [ '<STR_LIT:description>' ] ) . strip ( ) <EOL> cmdTemplateAutocomplete [ '<STR_LIT:description>' ] = str ( html . unescape ( cmdTemplateAutocomplete [ '<STR_LIT:description>' ] ) ) <EOL> syntax = re . sub ( r'<STR_LIT>' , '<STR_LIT>' , cmd [ '<STR_LIT>' ] ) . strip ( ) <EOL> syntax = re . sub ( r'<STR_LIT>' , '<STR_LIT>' , syntax ) <EOL> syntax = str ( html . unescape ( syntax ) ) <EOL> returnValueStr = re . sub ( r'<STR_LIT>' , '<STR_LIT>' , cmd [ '<STR_LIT>' ] ) . strip ( ) <EOL> returnValueStr = str ( html . unescape ( returnValueStr ) ) <EOL> returnValue = [ ] <EOL> typeListRegex = re . search ( typeExpr , returnValueStr ) <EOL> while typeListRegex : <EOL> t = typeListRegex . group ( <NUM_LIT:0> ) <EOL> t = sqfTypeSub . get ( t , t ) <EOL> returnValue . append ( t ) <EOL> returnValueStr = re . sub ( re . escape ( typeListRegex . group ( <NUM_LIT:0> ) ) , '<STR_LIT>' , returnValueStr ) <EOL> typeListRegex = re . search ( typeExpr , returnValueStr ) <EOL> if ( ( not '<STR_LIT>' in returnValue ) and len ( returnValue ) == <NUM_LIT:1> ) or len ( returnValue ) > <NUM_LIT:1> : <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = '<STR_LIT:(>' + '<STR_LIT:U+002CU+0020>' . join ( returnValue ) + '<STR_LIT>' <EOL> cmdTemplateParser [ '<STR_LIT:type>' ] = returnValue ; <EOL> params = re . sub ( r'<STR_LIT>' , '<STR_LIT:\n>' , cmd [ '<STR_LIT>' ] ) . strip ( ) <EOL> params = re . sub ( r'<STR_LIT>' , '<STR_LIT>' , params ) . strip ( ) <EOL> params = str ( html . unescape ( params ) ) <EOL> params = params + '<STR_LIT:\n>' <EOL> paramListExpr = r'<STR_LIT>' + paramExpr + '<STR_LIT>' + typeExpr + '<STR_LIT>' ; <EOL> paramRegex = re . search ( paramListExpr , params ) <EOL> parameters = { } <EOL> parametersR = [ ] <EOL> while paramRegex : <EOL> parameter = { } <EOL> parametersR . append ( re . escape ( paramRegex . group ( '<STR_LIT:name>' ) ) ) <EOL> typeList = [ ] <EOL> typeListStr = paramRegex . group ( '<STR_LIT:type>' ) <EOL> typeListRegex = re . search ( typeExpr , typeListStr ) <EOL> while typeListRegex : <EOL> t = typeListRegex . group ( <NUM_LIT:0> ) <EOL> t = sqfTypeSub . get ( t , t ) <EOL> typeList . append ( t ) <EOL> typeListStr = re . sub ( re . escape ( typeListRegex . group ( <NUM_LIT:0> ) ) , '<STR_LIT>' , typeListStr ) <EOL> typeListRegex = re . search ( typeExpr , typeListStr ) <EOL> parameter [ '<STR_LIT:type>' ] = typeList ; <EOL> parameters [ paramRegex . group ( '<STR_LIT:name>' ) ] = parameter <EOL> params = re . sub ( re . escape ( paramRegex . group ( <NUM_LIT:0> ) ) , '<STR_LIT>' , params ) <EOL> paramRegex = re . search ( paramListExpr , params ) <EOL> sParaExpr = r'<STR_LIT>' + '<STR_LIT:|>' . join ( parametersR ) + '<STR_LIT:)>' <EOL> syntaxFieldsRegex = re . search ( r'<STR_LIT:(>' + typeExpr + '<STR_LIT>' + sParaExpr + '<STR_LIT:|>' + arrayExpr + '<STR_LIT:|>' + strExpr + '<STR_LIT>' + opExpr + '<STR_LIT>' + sParaExpr + '<STR_LIT:|>' + arrayExpr + '<STR_LIT:|>' + strExpr + '<STR_LIT>' , syntax ) <EOL> snippet = '<STR_LIT>' <EOL> if syntaxFieldsRegex and len ( parametersR ) > <NUM_LIT:0> : <EOL> cmdTemplateParser [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> cmdTemplateParser [ '<STR_LIT>' ] = syntaxFieldsRegex . group ( '<STR_LIT>' ) <EOL> snippet = syntaxFieldsRegex . group ( '<STR_LIT:right>' ) <EOL> k = <NUM_LIT:1> ; <EOL> for para in parametersR : <EOL> snippet = re . sub ( '<STR_LIT>' + para + '<STR_LIT>' , r'<STR_LIT>' + str ( k ) + '<STR_LIT>' , '<STR_LIT:U+0020>' + snippet + '<STR_LIT:U+0020>' , <NUM_LIT:0> , re . IGNORECASE ) <EOL> k = k + <NUM_LIT:1> ; <EOL> snippet = snippet . strip ( ) <EOL> snippet = snippet . strip ( ) + "<STR_LIT>" ; <EOL> if syntaxFieldsRegex . group ( '<STR_LIT:left>' ) in parameters : <EOL> cmdTemplateParser [ '<STR_LIT:left>' ] = parameters [ syntaxFieldsRegex . group ( '<STR_LIT:left>' ) ] [ '<STR_LIT:type>' ] <EOL> if re . match ( strExpr , syntaxFieldsRegex . group ( '<STR_LIT:left>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:left>' ] = [ '<STR_LIT>' ] <EOL> if re . match ( arrayExpr , syntaxFieldsRegex . group ( '<STR_LIT:left>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:left>' ] = [ '<STR_LIT>' ] <EOL> if syntaxFieldsRegex . group ( '<STR_LIT:right>' ) in parameters : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = parameters [ syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ] [ '<STR_LIT:type>' ] <EOL> if re . match ( strExpr , syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = [ '<STR_LIT>' ] <EOL> if re . match ( arrayExpr , syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = [ '<STR_LIT>' ] <EOL> if not ( '<STR_LIT>' in cmdTemplateParser ) and len ( parametersR ) > <NUM_LIT:0> : <EOL> syntaxFieldsRegex = re . search ( r'<STR_LIT:(>' + typeExpr + '<STR_LIT>' + opExpr + '<STR_LIT>' + sParaExpr + '<STR_LIT:|>' + arrayExpr + '<STR_LIT:|>' + strExpr + '<STR_LIT>' , syntax ) <EOL> if syntaxFieldsRegex : <EOL> cmdTemplateParser [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> cmdTemplateParser [ '<STR_LIT>' ] = syntaxFieldsRegex . group ( '<STR_LIT>' ) <EOL> snippet = syntaxFieldsRegex . group ( '<STR_LIT:right>' ) <EOL> k = <NUM_LIT:1> ; <EOL> for para in parametersR : <EOL> snippet = re . sub ( '<STR_LIT>' + para + '<STR_LIT>' , r'<STR_LIT>' + str ( k ) + '<STR_LIT>' , '<STR_LIT:U+0020>' + snippet + '<STR_LIT:U+0020>' , <NUM_LIT:0> , re . IGNORECASE ) <EOL> k = k + <NUM_LIT:1> ; <EOL> snippet = snippet . strip ( ) <EOL> snippet = snippet . strip ( ) + "<STR_LIT>" ; <EOL> if syntaxFieldsRegex . group ( '<STR_LIT:right>' ) in parameters : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = parameters [ syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ] [ '<STR_LIT:type>' ] <EOL> if re . match ( strExpr , syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = [ '<STR_LIT>' ] <EOL> if re . match ( arrayExpr , syntaxFieldsRegex . group ( '<STR_LIT:right>' ) ) : <EOL> cmdTemplateParser [ '<STR_LIT:right>' ] = [ '<STR_LIT>' ] <EOL> if not ( '<STR_LIT>' in cmdTemplateParser ) : <EOL> syntaxFieldsRegex = re . search ( r'<STR_LIT:(>' + typeExpr + '<STR_LIT>' + opExpr + '<STR_LIT:)>' , syntax ) <EOL> if syntaxFieldsRegex : <EOL> cmdTemplateParser [ '<STR_LIT>' ] = '<STR_LIT:null>' <EOL> cmdTemplateParser [ '<STR_LIT>' ] = syntaxFieldsRegex . group ( '<STR_LIT>' ) <EOL> if not ( cmdTemplateParser [ '<STR_LIT>' ] in outputParser [ cmdTemplateParser [ '<STR_LIT>' ] ] ) : <EOL> outputParser [ cmdTemplateParser [ '<STR_LIT>' ] ] [ cmdTemplateParser [ '<STR_LIT>' ] . lower ( ) ] = [ ] <EOL> if cmdTemplateParser [ '<STR_LIT>' ] != '<STR_LIT:null>' : <EOL> if cmdTemplateParser [ '<STR_LIT>' ] == '<STR_LIT>' : <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = cmdTemplateAutocomplete [ '<STR_LIT>' ] + syntaxFieldsRegex . group ( '<STR_LIT:left>' ) + '<STR_LIT:U+0020>' <EOL> cmdTemplateAutocomplete [ '<STR_LIT>' ] = cmdTemplateParser [ '<STR_LIT>' ] + '<STR_LIT:U+0020>' + snippet <EOL> else : <EOL> cmdTemplateAutocomplete [ '<STR_LIT:text>' ] = cmdTemplateParser [ '<STR_LIT>' ] <EOL> if re . match ( r"<STR_LIT>" , cmdTemplateParser [ '<STR_LIT>' ] ) : <EOL> outputSyntaxStr . append ( cmdTemplateParser [ '<STR_LIT>' ] ) <EOL> outputParser [ cmdTemplateParser [ '<STR_LIT>' ] ] [ cmdTemplateParser [ '<STR_LIT>' ] . lower ( ) ] . append ( cmdTemplateParser ) <EOL> outputAutocomplete . append ( cmdTemplateAutocomplete ) <EOL> autocompleteDict = { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : <NUM_LIT:4> , <EOL> '<STR_LIT>' : outputAutocomplete <EOL> } <EOL> } <EOL> } <EOL> } <EOL> } ; <EOL> with open ( '<STR_LIT>' , '<STR_LIT:w>' ) as f : <EOL> json . dump ( autocompleteDict , f , indent = <NUM_LIT:2> ) <EOL> with open ( '<STR_LIT>' , '<STR_LIT:w>' ) as f : <EOL> f . write ( '<STR_LIT:|>' . join ( outputSyntaxStr ) ) </s>
