コード例 #1
0
		def parseEntry(entryElem) :
			child = {
				"count" : lib.textValue(lib.selectChild(entryElem, "count")),
				"typename" : lib.textValue(lib.selectChild(entryElem, "typename"))
			}
			if len(lib.selectChildren(entryElem, "label")) > 0 :
				child["label"] = lib.textValue(lib.selectChild(entryElem, "label"))
			return child
コード例 #2
0
def processDocbook(doc) :
	lib.normalize(doc)
	
	for_text_nodes(handleTextReplacements, doc)
	
	#convert @@foo to <link linkend="node.foo">foo</link>
	def handleAtAt(match) :
		text = match.group(1)
		elem = doc.createElement('link')
		elem.setAttribute('linkend', 'node.%s' % text)
		elem.appendChild(doc.createTextNode(text))
		return elem
	for_text_nodes(
		lambda x: replaceBy(x, r'@@([a-z\-]+)', handleAtAt),
		doc)

	#convert ##foo to <link linkend="def.foo">foo</link>
	def handleHashHash(match) :
		elem = doc.createElement('link')
		elem.setAttribute('linkend', 'def.%s' % match.group(2))
		elem.appendChild(doc.createTextNode(match.group(1)))
		return elem
	for_text_nodes(
		lambda x: replaceBy(x, r'##(([a-z\-]+)(:?s))', handleHashHash),
		doc)

	for glossterm in doc.getElementsByTagName("glossterm") :
		glossterm.setAttribute("xml:id", "def.%s" % lib.textValue(glossterm).replace(" ", "-"))
	
	specTitle = lib.textValue(doc.getElementsByTagName("title")[0])
	if specTitle == "Niviok 1.0 Specification" :
		terminalTypenames = sorted( x["typename"] for x in nodeTypes if x["category"] == "terminal" )
		listElem = lib.getElementsByAttribute(doc, "xml:id", "terminal-node-types-list")[0]
		for typename in terminalTypenames :
			memberElem = doc.createElement("member")
			listElem.appendChild(memberElem)
			memberElem.appendChild(doc.createTextNode(typename))
			memberElem.setAttribute("linkend", "node.%s" % typename)

	for elem in doc.getElementsByTagName("screen") :
		processPreElem(elem)
	for elem in doc.getElementsByTagName("programlistinge") :
		processPreElem(elem)

	for elem in doc.getElementsByTagName("member") :
		role = elem.parentNode.getAttribute('role')
		if role == 'layout' :
			setupLayoutMember(elem)
		elif role == 'family-members' :
			setupFamilyMember(elem)
コード例 #3
0
	def parseFamily(elem) :
		assert elem.tagName == "family"
		return {
			"category" : "family",
			"typename" : lib.textValue(lib.selectChild(elem, "typename")),
			"members" : map(lib.textValue, lib.selectChildren(lib.selectChild(elem, "members"), "typename"))
		}
コード例 #4
0
			def getTypes(memberElem) :
				#defines a node, and is not defined within the section of another node
				def isTopNode(elem) :
					return definesNode(elem) and not lib.hasAncestorElement(elem.parentNode, definesNode)
				assert memberElem.tagName == "member"
				if memberElem.hasAttribute("linkend") and \
				memberElem.getAttribute("linkend").find("node.") != 0 :
					id = memberElem.getAttribute("linkend")
					sect = memberElem.ownerDocument.getElementById(id)
					if sect == None :
						raise Exception("no element with id '%s'" % id)
					return map(getTitle, filter(isTopNode, lib.descendantElements(sect)))
				return [lib.textValue(memberElem)]
コード例 #5
0
	def parseTree(elem) :
		def parseEntry(entryElem) :
			child = {
				"count" : lib.textValue(lib.selectChild(entryElem, "count")),
				"typename" : lib.textValue(lib.selectChild(entryElem, "typename"))
			}
			if len(lib.selectChildren(entryElem, "label")) > 0 :
				child["label"] = lib.textValue(lib.selectChild(entryElem, "label"))
			return child
		assert elem.tagName == "tree"
		return {
			"category" : "tree",
			"typename" : lib.textValue(lib.selectChild(elem, "typename")),
			"layout" : map(parseEntry, lib.selectChildren(elem, "entry"))
		}
コード例 #6
0
		def parseChild(member) :
			text = lib.textValue(member)
			tokens = text.split(" ")
			child = {}
			
			#count (e.g. *)
			if tokens[0] in ["*", "+", "?"] :
				child["count"] = tokens.pop(0)
			else :
				child["count"] = "1"
			
			#typename (e.g. "alpha-beta-gamma")
			child["typename"] = tokens.pop(0)
			
			#label (e.g. "alpha beta gamma")
			if len(tokens) > 0 :
				child["label"] = " ".join(tokens)
	
			return child
コード例 #7
0
def setupLayoutMember(member) :
	assert( len(member.childNodes) == 1 )
	assert( member.childNodes[0].nodeType == member.TEXT_NODE )
	doc = member.ownerDocument
	tokens = lib.textValue(member).split(' ')
	member.removeChild(member.firstChild)
	if len(tokens[0]) > 1 :
		typeName = tokens[0]
		textAfter = tokens[1:]
	else :
		assert( tokens[0] in ['?', '*', '+'] )
		member.appendChild( doc.createTextNode(tokens[0] + ' ') )
		typeName = tokens[1]
		textAfter = tokens[2:]
	typeName = typeName.lower()
	link = doc.createElement('link')
	link.setAttribute('linkend', 'node.' + typeName)
	link.appendChild(doc.createTextNode(typeName))
	member.appendChild(link)
	member.appendChild( doc.createTextNode(' ' + ' '.join(textAfter)) )
コード例 #8
0
	def getTitle(elem) :
		assert definesNode(elem)
		return lib.textValue(elem.getElementsByTagName("title")[0])
コード例 #9
0
	def parseTerminal(elem) :
		assert elem.tagName == "terminal"
		return {
			"category" : "terminal",
			"typename" : lib.textValue(lib.selectChild(elem, "typename"))
		}