docs: def textvalidation(self, warnonly=None):
          """Run text validation on this element. Checks whether any text redundancy is consistent and whether offsets are valid.
  
          Parameters:
              warnonly (bool): Warn only (True) or raise exceptions (False). If set to None then this value will be determined based on the document's FoLiA version (Warn only before FoLiA v1.5)
  
          Returns:
              bool
          """
  
          if warnonly is None and self.doc and self.doc.version:
              warnonly = (checkversion(self.doc.version, '1.5.0') < 0) #warn only for documents older than FoLiA v1.5
          valid = True
          for cls in self.doc.textclasses:
              if self.hastext(cls, strict=True) and not isinstance(self, (Linebreak, Whitespace)):
                  if self.doc and self.doc.debug: print("[PyNLPl FoLiA DEBUG] Text validation on " + repr(self),file=stderr)
                  correctionhandling = self.findcorrectionhandling(cls)
                  if correctionhandling is None:
                      #skipping text validation, correction is too complex (nested) to handle for now; just assume valid (benefit of the doubt)
                      if self.doc and self.doc.debug: print("[PyNLPl FoLiA DEBUG] SKIPPING Text validation on " + repr(self) + ", too complex to handle (nested corrections or inconsistent use)",file=stderr)
                      return True #just assume it's valid then
  
                  strictnormtext = self.text(cls,retaintokenisation=False,strict=True, normalize_spaces=True)
                  deepnormtext = self.text(cls,retaintokenisation=False,strict=False, normalize_spaces=True)
                  if strictnormtext != deepnormtext:
                      valid = False
                      deviation = 0
                      for i, (c1,c2) in enumerate(zip(strictnormtext,deepnormtext)):
                          if c1 != c2:
                              deviation = i
                              break
                      msg = "Text for " + self.__class__.__name__ + ", ID " + str(self.id) + ", class " + cls  + ", is inconsistent: EXPECTED (after normalization) *****>\n" + deepnormtext + "\n****> BUT FOUND (after normalization) ****>\n" + strictnormtext + "\n******* DEVIATION POINT: " + strictnormtext[max(0,deviation-10):deviation] + "<*HERE*>" + strictnormtext[deviation:deviation+10]
                      if warnonly:
                          print("TEXT VALIDATION ERROR: " + msg,file=sys.stderr)
                      else:
                          raise InconsistentText(msg)
  
                  #validate offsets
                  tc = self.textcontent(cls)
                  if tc.offset is not None:
                      #we can't validate the reference of this element yet since it may point to higher level elements still being created!! we store it in a buffer that will
                      #be processed by pendingvalidation() after parsing and prior to serialisation
                      if self.doc and self.doc.debug: print("[PyNLPl FoLiA DEBUG] Queing element for later offset validation: " + repr(self),file=stderr)
                      self.doc.offsetvalidationbuffer.append( (self, cls) )
          return valid