Exemple #1
0
class BibTeXValidator:
    """
    This checks for
     - duplicate entry names
     - duplicate fields
     - missing required fields *
     - unused fields *

    *) relies on the BibTeX model definition
    """

    _log = getLogger("BibTeXValidator")

    def __init__(self):
        self._model = BibTeXModel()

    def validate(self, document, file, issue_handler):
        """
        @param document: a bibtex.parser.Document object
        @param issue_handler: an object implementing IIssueHandler
        """
        entry_keys = []
        for entry in document.entries:
            # check for duplicate keys
            if entry.key in entry_keys:
                issue_handler.issue(Issue("Duplicate key <b>%s</b>" % entry.key,
                                          entry.start, entry.end, file,
                                          Issue.SEVERITY_ERROR))
            else:
                entry_keys.append(entry.key)

            field_names = []
            for field in entry.fields:
                # check for duplicate fields
                if field.name in field_names:
                    issue_handler.issue(Issue("Duplicate field <b>%s</b>" % field.name,
                                        entry.start, entry.end, file, Issue.SEVERITY_ERROR))
                else:
                    field_names.append(field.name)

            try:
                # check for missing required fields
                required_field_names = set(map(lambda f: f.name, self._model.find_type(entry.type).required_fields))
                missing_field_names = required_field_names.difference(set(field_names))

                if len(missing_field_names) > 0:
                    issue_handler.issue(Issue("Possibly missing field(s): <b>%s</b>" % ",".join(missing_field_names),
                                              entry.start, entry.end, file, Issue.SEVERITY_WARNING))

                # check for unused fields
                optional_field_names = set(map(lambda f: f.name, self._model.find_type(entry.type).optional_fields))
                unused_field_names = set(field_names).difference(optional_field_names.union(required_field_names))

                if len(unused_field_names) > 0:
                    issue_handler.issue(Issue("Possibly unused field(s): <b>%s</b>" % ",".join(unused_field_names),
                                              entry.start, entry.end, file, Issue.SEVERITY_WARNING))
            except KeyError:
                #self._log.debug("Type not found: %s" % entry.type)
                pass
Exemple #2
0
class BibTeXValidator:
	"""
	This checks for
	 - duplicate entry names
	 - duplicate fields
	 - missing required fields *
	 - unused fields *

	*) relies on the BibTeX model definition
	"""

	_log = getLogger("BibTeXValidator")

	def __init__(self):
		self._model = BibTeXModel()

	def validate(self, document, file, issue_handler):
		"""
		@param document: a bibtex.parser.Document object
		@param issue_handler: an object implementing IIssueHandler
		"""
		entry_keys = []
		for entry in document.entries:
			# check for duplicate keys
			if entry.key in entry_keys:
				issue_handler.issue(Issue("Duplicate key <b>%s</b>" % entry.key, entry.start, entry.end, file, Issue.SEVERITY_ERROR))
			else:
				entry_keys.append(entry.key)

			field_names = []
			for field in entry.fields:
				# check for duplicate fields
				if field.name in field_names:
					issue_handler.issue(Issue("Duplicate field <b>%s</b>" % field.name, entry.start, entry.end, file, Issue.SEVERITY_ERROR))
				else:
					field_names.append(field.name)

			try:
				# check for missing required fields
				required_field_names = set(map(lambda f: f.name, self._model.find_type(entry.type).required_fields))
				missing_field_names = required_field_names.difference(set(field_names))
				if len(missing_field_names) > 0:
					issue_handler.issue(Issue("Possibly missing field(s): <b>%s</b>" % ",".join(missing_field_names), entry.start, entry.end, file, Issue.SEVERITY_WARNING))

				# check for unused fields
				optional_field_names = set(map(lambda f: f.name, self._model.find_type(entry.type).optional_fields))
				unused_field_names = set(field_names).difference(optional_field_names.union(required_field_names))
				if len(unused_field_names) > 0:
					issue_handler.issue(Issue("Possibly unused field(s): <b>%s</b>" % ",".join(unused_field_names), entry.start, entry.end, file, Issue.SEVERITY_WARNING))
			except KeyError:
				#self._log.debug("Type not found: %s" % entry.type)
				pass
Exemple #3
0
    def _getDialog(self):
        if not self._dialog:
            self._dialog = self.find_widget("dialogInsertBibtexEntry")

            # get BibTeX model
            self._model = BibTeXModel()

            # setup types combobox

            self._activeType = None
            self._mapping = {}  # this maps Gtk.Entry objects to field names
            self._fieldCache = {
            }  # this is used to restore field values after the type has changed

            self._storeTypes = Gtk.ListStore(str)
            for t in self._model.types:
                self._storeTypes.append([t.name])

            comboTypes = self.find_widget("comboTypes")
            comboTypes.set_model(self._storeTypes)
            cell = Gtk.CellRendererText()
            comboTypes.pack_start(cell, True)
            comboTypes.add_attribute(cell, "text", 0)

            self._boxRequired = self.find_widget("boxRequired")
            self._boxOptional = self.find_widget("boxOptional")

            self._entryIdent = self.find_widget("entryIdent")

            self._buttonOk = self.find_widget("buttonOk")

            self.connect_signals({
                "on_comboTypes_changed": self._comboTypesChanged,
                "on_entryIdent_changed": self._identChanged
            })

            comboTypes.set_active(0)

        return self._dialog
Exemple #4
0
 def __init__(self):
     self._model = BibTeXModel()
 def __init__(self):
     self._model = BibTeXModel()
Exemple #6
0
 def __init__(self):
     self._model = BibTeXModel()
     self._parser = BibTeXParser()
     self._issue_handler = MockIssueHandler()