docs: def positions(self, word):
          """
          Returns a list of positions where the word can be hyphenated.
          E.g. for the dutch word 'lettergrepen' this method returns
          the list [3, 6, 9].
  
          Each position is a 'data int' (dint) with a data attribute.
          If the data attribute is not None, it contains a tuple with
          information about nonstandard hyphenation at that point:
          (change, index, cut)
  
          change: is a string like 'ff=f', that describes how hyphenation
              should take place.
          index: where to substitute the change, counting from the current
              point
          cut: how many characters to remove while substituting the nonstandard
              hyphenation
          """
          word = word.lower()
          points = self.cache.get(word)
          if points is None:
              prepWord = '.%s.' % word
              res = [0] * (len(prepWord) + 1)
              for i in range(len(prepWord) - 1):
                  for j in range(i + 1, min(i + self.maxlen, len(prepWord)) + 1):
                      p = self.patterns.get(prepWord[i:j])
                      if p:
                          offset, value = p
                          s = slice(i + offset, i + offset + len(value))
                          res[s] = map(max, value, res[s])
  
              points = [dint(i - 1, ref=r) for i, r in enumerate(res) if r % 2]
              self.cache[word] = points
          return points