Support Statement: gmSL EditSource
Tran.xml
Section titled “Tran.xml”...
<Refactor event="CSH"><gmSL NameSpace="CSH" Class="ServiceMethods" Source="..\usr\ServiceMethod_EditSource.gmsl" /></Refactor>
<!-- COM REFERENCES -->
<Compile PageSlice="%VirtualRoot%\index.asp" ></Compile>int ServiceMethod_EditSource(int fileRoot){
return 0; // off for now
tInfoFile fileInfo; Handle fileStream; int rai; int length; string record; int nRecord; int curRecord; int iPos; int iEnd;
fileInfo = Store.GetVector(fileRoot); if(fileInfo.rawtext == 0) return 0; string fileName = Store.GetName(fileRoot) System.LogMessage("filename = " + fileName);
fileStream = Text.Open(Store.GetHandle(),fileInfo.rawtext); nRecord = Text.Maximum(fileStream); curRecord = 0; while(curRecord < nRecord) { // look for #include statements to be inlined to the code
curRecord = curRecord + 1; Text.Position(fileStream,curRecord); record = Text.Access(fileStream, length, rai, 0); iPos = Character.FindFirst(record, 0, "<!-- #include file="); if(iPos == 0) continue;
if(Select.Progress) System.LogMessage("INLINE " + record + ">" + Store.GetIdent(fileRoot) + " @" + curRecord);
// find the include file
string includePath = "C:\gmSpec\ASP\ScriptTagInclude\TestSite2\include.inc"; int incRoot = System.LoadFile(includePath,1); if (incRoot == 0) return 0;
// remove the include statement
Text.Position(fileStream,curRecord); Text.Delete(fileStream); Text.Position(fileStream,curRecord - 1);
// copy records from the include into the file text buffer
Handle incStream = Text.Open(Store.GetHandle(),incRoot); int incRecords = Text.Maximum(incStream); int incRecord = 0; for(incRecord = 1; incRecord <= incRecords; incRecord = incRecord + 1) { Text.Position(incStream,incRecord); string incText = Text.Access(incStream, length, rai, 0); Text.Insert(fileStream, incText); } Text.Close(incStream); } Text.Close(fileStream); return 1;}Another sample
I want to to apply an edit to every file in an ASP site. The edit should simplify script tags that contain "clientEventHandlersVBS".
<script id=clientEventHandlersVBS LANGUAGE="javascript"><SCRIPT ID=clientEventHandlersVBS LANGUAGE="javascript" defer><script id=clientEventHandlersVBS LANGUAGE="VBscript"><SCRIPT ID=clientEventHandlersVBS LANGUAGE="VBscript" defer>
Also if it was a vbscript tag, insert a comment above.int ServiceMethod_EditSource(int fileRoot){
tInfoFile fileInfo; Handle fileStream; int rai; int length; string record; int nRecord; int curRecord; int iPos; int iEnd; string lang;
fileInfo = Store.GetVector(fileRoot); if(fileInfo.rawtext == 0) return 0; string fileName = Store.GetName(fileRoot)
//return 0; // off for now
fileStream = Text.Open(Store.GetHandle(),fileInfo.rawtext); nRecord = Text.Maximum(fileStream); curRecord = 0; while(curRecord < nRecord) { // look for <script statements with clientEventHandlersVBS (these are all client-side)
curRecord = curRecord + 1; Text.Position(fileStream,curRecord); record = Text.Access(fileStream, length, rai, 0); iPos = Character.FindFirst(record, 0, "<script "); if(iPos == 0) continue; iPos = Character.FindFirst(record, 0, "clientEventHandlersVBS"); if(iPos == 0) continue; iPos = Character.FindFirst(record, 0, "javascript"); if(iPos == 0) lang = "vbscript"; else lang = "javascript";
// Replace script tag with a simplified one that // has neither id nor defer attribute. // Also insert a comment before the vbscript tags // to assist with review.
Text.Position(fileStream,curRecord); Text.Delete(fileStream); Text.Position(fileStream,curRecord-1); Text.Insert(fileStream, "<script language='"+lang+"'>"); if (lang == "vbscript") { System.LogMessage("updated " + filename + "@" + curRecord); Text.Position(fileStream,curRecord-1); Text.Insert(fileStream, "<!-- UPGRADE_INFO: VBStoJVS -->"); } } Text.Close(fileStream); return 1;}