HomerJax beta 0.5
This is a global shared object for reading and writing data from the
Internet, now available at Script Central. To help you initially
understand its capabilities, I am pasting the current documentation below.
Use the Help button in Script Manager to read the documentation in your
web browser, or to run a demo.
Jamal
HomerJax
Beta 0.5
August 1, 2009
Copyright 2009 by Jamal Mazrui
GNU Lesser General Public License (LGPL)
Contents
Introduction
COM Exchange Format
Dialog Methods
File Methods
Folder Methods
HTML Methods
JScript Data Methods
Path Methods
Regular Expression Methods
Registry Methods
Shell Methods
String Methods
Variant Data Methods
Web Request Methods
XML Methods
Development Notes
----------
Introduction
HomerJax is a library of convenience functions for accessing Internet
resources. It is written in JScript, the Microsoft version of JavaScript,
and is dependent on several COM servers distributed with Windows. The
word "Homer" is a brand name I sometimes use for developer tools I create.
The word "Jax" derives from Ajax, which originally meant "Asynchronous
JavaScript and XML." Ajax technologies focus on building dynamic user
interfaces in web browsers. HomerJax functions use some of these core
technologies, but focus on reading, interpreting, and writing data from
the Internet.
Since the Internet is a great source of accessible information for people
with visual disabilities who cannot readily read the printed word, my hope
is that this library makes it easier for developers, including blind ones
like myself, to build applications that take advantage of new social
networking sites such as Twitter, FaceBook, and many others. I intend for
HomerJax to be accessible via various programming environments, including
the Windows Script Host, screen reader scripting languages, and other
programming languages via a COM server interface.
The functionality and documentation of HomerJax will improve over time in
response to comments, questions, and suggestions. Code contributions are
also welcome.
----------
COM Exchange Format
The Component Object Model (COM) is a set of Windows standards by which
different programming languages and applications can communicate. COM
uses a flexible data type called a variant, which can be an individual
value, array of values, or complex object with methods, properties, and
events. In general, any COM client can use string, numeric, and COM
objects as the data types of parameters or return values. Some, however,
cannot use arrays. COM exchange format is intended to support
collections, as well as primitive data types, for use by any COM client.
Rather than an array, a list COM object is used from the .NET Framework
(any version). A COM object dictionary is also used from the Windows
Script Host.
By convention, HomerJax variable names use lower case prefixes to indicate
the data type: s for string, i for integer, n for floating point number,
l for list, d for dictionary, and o for other COM object. HomerJax
includes various methods for converting between JavaScript Object Notation
(JSON), variant data types, and COM exchange format. This provides much
flexibility for accessing data on the Internet.
----------
Dialog Methods
These are simple, modal dialogs. Parameters supply values that are needed
in reading order of the dialog window, from top to bottom and left to
right. Thus, the window title is the first parameter. DialogShow
displays information; DialogConfirm prompts for confirmation; and
DialogInput prompts for input.
DialogConfirm(sTitle, sMessage, sDefault)
Get choice from a standard Yes, No, or Cancel message box
DialogInput(sTitle, sField, sValue)
Get input from a single edit box
DialogShow(oTitle, oMessage)
Show string version of two parameters in the title and prompt of a message
box
----------
File Methods
These copy, move, delete, or test for existence of files.
FileCopy(sSource, sTarget)
Copy source to destination file, replacing if it exists
FileDelete(sFile)
Delete a file if it exists, && test whether it is subsequently absent
FileExists(sFile)
Test whether File exists
FileGetDate(sFile)
Get date of a file
FileGetSize(sFile)
Get size of a file
FileGetType(sFile)
Get file type
FileMove(sSource, sTarget)
Move source to destination file, replacing if it exists
FileToString(sFile)
Get content of text file
----------
Folder Methods
These copy, move, delete, or test for existence of folders.
FolderCopy(sSource, sTarget)
Copy source to destination Folder, replacing if it exists
FolderCreate(sFolder)
Create folder
FolderDelete(sFolder)
Delete a Folder if it exists, && test whether it is subsequently absent
FolderExists(sFolder)
Test whether folder exists
FolderGetDate(sFolder)
Get date of a Folder
FolderGetSize(sFolder)
Get size of folder, summing the sizes of files && subfolders it contains
FolderMove(sSource, sTarget)
Move source to destination Folder, replacing if it exists
----------
HTML Methods
These get page text, table text, or URLs of HTML.
HtmlEncodeString(sText)
Encode a string for HTML or XML
HtmlGetLinks(sUrl)
Get a list of two-item lists containing the URL and text of a link
HtmlGetUrls(sUrl)
Get a list of URLs linked to a web page
HtmlGetText(sUrl)
Get the text of an HTML page
HtmlGetTableText(sUrl, iTable)
Get the text of an HTML table specified by number, or null for all of them
----------
JScript Data Methods
These convert between JScript and variant data types.
JsDictionaryToEncodedString(d)
Convert dictionary to string with http encoding
JsDictionaryToVt(d)
Convert JScript dictionary to variant
JsInspectObject(sName, oValue)
Report on type of object and its subobjects
JsIsBlank(sText)
Test if string is empty or white space
JsIsMute(o)
test for empty string
JsIsNull(o)
Test for null
JsIsObject(o)
Test for object
JSNumber(o)
Convert to JScript number
JsObjectToVt(oValue)
Convert JScript object to variant
JsPrint(o)
Print to screen using console mode of Windows Script Host
JsPrintObject(sName, oValue)
Print type of object and its subobjects
JsString(o)
Convert to a JScript string
JsToVt(sJs)
Convert string in JavaScript Object Notation to COM exchange format
----------
Path Methods
These parse file or folder paths into their components; get paths of
Windows special folders; or create temporary files.
PathCombine(sFolder, sName)
Combine folder && name to form a valid path
PathCreateTempFolder()
Create temporary folder && return its full path
PathExists(sPath)
Test whether path exists
PathGetBase(sPath)
Get base/root name of a file or folder
PathGetCurrentDirectory()
Get current directory of active process
PathGetExtension(sPath)
Get extention of file || folder
PathGetFolder(sPath)
Get the parent folder of a file or folder
PathGetInternetCacheFolder()
Get Windows folder for temporary Internet files
PathGetLong(sPath)
Get long name of file or folder
PathGetName(sPath)
Get the file or folder name at the end of a path
PathGetShort(sPath)
Get short path (8.3 style) of a file or folder
PathGetSpec(sDir, sWildcards, sFlags)
Get a list of paths, specifying folder, wild card pattern, && sort order
PathGetTempFile()
Get full path of a temporary file
PathGetTempFolder()
Get Windows folder for temporary files
PathGetTempName()
Get Name for temporary file || folder
PathSetCurrentDirectory(sDir)
Set current directory of active process, and return previously current
directory
----------
Regular Expression Methods
These search or extract strings based on regular expressions.
RegExpContains(sText, sMatch, bIgnoreCase)
Get Array containing the starting index and text of the first match of a
regular expression
RegExpContainsLast(sText, sMatch, bIgnoreCase)
Get list containing the starting index and text of the last match of a
regular expression
RegExpCount(sText, sMatch, bIgnoreCase)
Count matches of a regular expression
RegExpExtract(sText, sMatch, bIgnoreCase)
Get list containing matches of a regular expression
RegExpReplace(sText, sMatch, sReplace, bIgnoreCase)
Replace text matching a regular expression
----------
Registry Methods
These read or write strings with the Windows registry (not yet debugged).
RegistryGetString(iRootKey, sSubKey, sValueName)
Get a string from registry
RegistryRead(sKey)
Get a string from the registry
RegistrySetString(iRootKey, sSubKey, sValueName, sValueData)
Set a registry string
RegistryWrite(sKey, sValue)
Write a string to the registry
----------
Shell Methods
These execute programs or open files.
ShellCreateShortcut(sFile, sTargetPath, sWorkingDirectory, iWindowStyle,
sHotkey)
Create a .lnk or .url file
ShellExec(sCommand)
Run a console mode command && return its standard output
ShellExecute(sFile, sParams, sFolder, sVerb, iWindowStyle)
Execute a command with a verb like RunAs
ShellExpandEnvironmentVariables(sText)
Replace environment variables with their values
ShellGetEnvironmentVariable(sVariable)
Get the value of an environment variable
ShellGetShortcutTargetPath(sFile)
Get the target path of a shortcut file
ShellGetSpecialFolder(vFolder)
Get a special Windows folder
ShellInvokeVerb(sPath, sVerb)
Invoke a verb on a file or folder
ShellOpen(sPath)
Open a file or folder with the default program associated with its type
ShellOpenWith(sExe, sParam)
Open a program with a file
ShellRun(sFile, iStyle, bWait)
Launch a program or file, indicating its window style && whether to wait
before returning
ShellRunCommandPrompt(sDir)
Open a command prompt in the directory specified
ShellRunExplorerWindow(sDir)
Open Windows Explorer in the directory specified
ShellWait(sPath)
Run a program and wait for it to return
----------
String Methods
These parse strings or save them to files.
StringAppendToFile(sText, sFile, sDivider)
Append string to File, omitting divider if the first one
StringChopLeft(sText, iCount)
Remove iCount characters from left of sText
StringChopRight(sText, iCount)
Remove iCount characters from Right of sText
StringContains(sText, sMatch, bIgnoreCase)
Test if a string is contained in another
StringConvertToMacLineBreak(sText)
Convert to Macintosh line break, \r
StringConvertToUnixLineBreak(sText)
Convert to Unix line break, \n
StringConvertToWinLineBreak(sText)
Convert to standard Windows line break, \r\n
StringCount(sText, sMatch)
Count occurrences of a string within another string
StringEndsWith(sText, sSuffix, bIgnoreCase)
Test whether first string ends with second one
StringEqual(s1, s2)
Test if two strings are exactly equal
StringEquiv(s1, s2)
Test whether two strings are the same except for capitalization
StringGetASCII(sText)
Get space delimited ASCII codes for characters in string
StringLeft(sText, iCount)
Return leftmost characters of a string
StringLength(s)
Return length of a string
StringPlural(sItem, iCount)
Return singular || plural form of a string, depending on whether count
equals one
StringQuote(sText)
Quote a string
StringReplaceAll(sText, sMatch, sReplace)
Replace all occurences of a string within another
StringRight(sText, iCount)
Return rightmost characters of a string
StringStartsWith(sText, sPrefix, bIgnoreCase)
Test whether first string starts with second one
StringToFile(sText, sFile)
Saves string to text file, replacing if it exists
StringTrim(sText)
Trim white space from both ends of a string
StringUnquote(sText)
Unquote a string
StringWrap(sText, iMaxLine)
var aLines, aWords
var i, j
var sReturn, sLines, sLine, sWords, sWord
aLines = sText.split(vbCrLf)
sReturn = xMute
var iCount = aLines.length
for (var i = 0; i < iCount; i++)
sLine = aLines[i]
if (sLine.length > iMaxLine)
aWords = sLine.split(' ')
sLine = xMute
for (var j = 0; j < aWords.length; j++)
sWord = aWords(j)
if (sLine.length + sWord.length > iMaxLine)
sReturn += StringTrim(sLine) + vbCrLf
sLine = sWord + ' '
}
else
sLine = sLine + sWord + ' '
}
}
}
else
sReturn += RTrim(sLine) + vbCrLf
}
}
return sReturn
} // StringWrap method
----------
Variant Data Methods
These convert between variant and JScript data types.
VtArrayToJs(a)
Convert variant array to JScript
VtArrayToList(a)
Convert variant array to list
VtCreateDictionary()
Return a variant dictionary
VtCreateFileSystemObject()
Return a file system object
VtCreateHtmlFile()
Create a variant HTMLFile object
VtCreateInternetExplorerApplication()
Return an Internet Explorer object
VtCreateList()
Create a variant list object
VtCreateRegExp()
Return a scripting RegExp object
VtCreateShellApplication()
Return a Shell.Application object
VtCreateStream()
Return an ADODB.Stream object
VtCreateVBScriptControl()
Return MSScriptControl.ScriptControl object
VtCreateWebRequest()
Create web request object
VtCreateWScriptShell()
Return WScript.Shell object
VtCreateXmlDocument()
Return an XML document
VtDateToJs(dt)
Convert a variant date to JScript
VtDictionaryToJs(d)
Convert a variant dictionary to JScript
VtDictionaryKeysToJs(d)
Convert variant array of dictionary keys to JScript array
VtDictionaryKeysToList(d)
Convert variant array of dictionary keys to list
VtEvalVBScript(sCode, dParams)
Evaluate VBScript code and return the result
VtEvalVBScriptParam(sCode, vParam)
Evaluate VBScript code and return result, passing single argument
VtGetWMIObject()
Get WMI object
VtInitDictionary(vValue)
Create a variant dictionary and initialize it with a single key/value pair
VtListToJs(l)
Convert variant list to JScript array
VtStreamToFile(aBytes, sFile)
Save a variant byte array to a binary file
VtTypeName(vVariant)
Get variant subtype
----------
Web Request Methods
These send GET or POST requests to web servers, retrieving strings or
saving to files.
WebRequest(sType, sUrl, dData, dHeaders, sUser, sPassword)
Send a web request and return the response
WebRequestGet(sUrl, dData, dHeaders, sUser, sPassword)
Send a get request
WebRequestGetToFile(sUrl, dData, dHeaders, sUser, sPassword, sFile)
Send a get request and save response to file
WebRequestGetToString(sUrl, dData, dHeaders, sUser, sPassword)
Send a get request and return response as string
WebRequestHead(sUrl, dData, dHeaders, sUser, sPassword)
Send a head request
WebRequestHeader(sUrl, sHeader)
Get response header
WebRequestPost(sUrl, dData, dHeaders, sUser, sPassword)
Send a post request
WebRequestPostToFile(sUrl, dData, dHeaders, sUser, sPassword, sFile)
Send a post request and save response to file
WebRequestPostToString(sUrl, dData, dHeaders, sUser, sPassword)
Send a post request and return response as string
WebRequestToFile(sType, sUrl, dData, dHeaders, sUser, sPassword, sFile)
Save web resource to file
WebRequestToString(sType, sUrl, dData, dHeaders, sUser, sPassword)
Return web resource as string
WebUrlContentType(sUrl)
Get content type of a web resource
WebUrlFileName(sUrl)
Get suggested file name of a web resource
WebUrlIsHtml()
Test whether content type is text/html
WebUrlToFile(sUrl, sFile)
Save web resource to file
WebUrlToString(sUrl)
Return web resource as string
----------
XML Methods
These read or write XML data, from memory or files.
XmlAppendElement(oParent, sName, sValue)
Append element to a node
XmlCreateElement(oNode, sName, sValue)
Create an XML element
XmlCreateFile(sFile)
Create a root XML file
XmlEnsureGetNode(oDoc, sPath)
Return a node, creating preceding elements if necessary
XmlEnsureOpenFile(sFile)
Open an XML file, creating it if necessary
XmlGetAttribute(sFile, sPath, sAttribute, sDefault)
Get an attribute of a node
XmlGetNode(sFile, sPath)
Get a node
XmlGetNodeNames(sFile, sPath)
Get node names
XmlGetNodes(sFile, sPath)
Get a node collection
XmlGetValue(sFile, sPath, sDefault)
Get a value of a node
XmlOpenFile(sFile)
Open an XML file
XmlRemoveAttribute(sFile, sPath)
Remove an attribute
XmlRemoveNode(sFile, sPath)
Remove a node
XmlRemoveNodes(sFile, sPath)
Remove a node collection
XmlSetAttribute(sFile, sPath, sAttribute, sText)
Set an attribute
XmlSetValue(sFile, sPath, sValue)
Set a value
----------
Development Notes
Thanks go to Bryan Garaventa for information on the MSXml2.XMLHTTP object,
and to Martin Slack for information on the System.Collections.ArrayList
object.