Beispiel #1
0
func getText(reader *xmltextreader.XmlTextReaderPtr) string {
	res := reader.Read()
	eventType := reader.NodeType()

	for xmltextreader.XML_END_ELEMENT != eventType && xmltextreader.XML_TEXT_NODE != eventType && res != -1 {
		res = reader.Read()
		eventType = reader.NodeType()
	}

	if xmltextreader.XML_TEXT_NODE == eventType {
		return reader.Value()
	}
	return ""
}
Beispiel #2
0
func getParaToTagEnd(reader *xmltextreader.XmlTextReaderPtr, tag string, fb2Pointer string, weightMult float32, c chan *Word) {
	res := reader.Read()
	eventType := reader.NodeType()

	var (
		strong   byte = 1 << 0
		emphasis byte = 1 << 1
		link     byte = 1 << 2
	)

	var name string
	var styles byte = 0

	for !(eventType == xmltextreader.XML_END_ELEMENT && tag == reader.Name()) && res != -1 {
		if xmltextreader.XML_TEXT_NODE == eventType {
			var weight float32 = 1.0
			if styles&strong != 0 {
				weight += 0.2
			} else if styles&emphasis != 0 {
				weight += 0.1
			} else if styles&link != 0 {
				weight += 0.1
			}
			if len(fb2Pointer) > 0 {
				sendWords(reader.Value(), fb2Pointer, weight*weightMult, c)
			}
		} else if xmltextreader.XML_START_ELEMENT == eventType {
			name = reader.Name()
			if emphasis_tag == name {
				styles |= emphasis
			} else if strong_tag == name {
				styles |= strong
			} else if link_tag == name {
				styles |= link
			}
		} else if xmltextreader.XML_END_ELEMENT == eventType {
			name = reader.Name()
			if emphasis_tag == name {
				styles &^= emphasis
			} else if strong_tag == name {
				styles &^= strong
			} else if link_tag == name {
				styles &^= link
			}
		}
		res = reader.Read()
		eventType = reader.NodeType()
	}
}