This file is indexed.

/usr/lib/python3/dist-packages/ufo2ft/maxContextCalc.py is in python3-ufo2ft 1.1.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
from __future__ import print_function, division, absolute_import, unicode_literals

__all__ = ['maxCtxFont']


def maxCtxFont(font):
    """Calculate the usMaxContext value for an entire font."""

    maxCtx = 0
    for tag in ('GSUB', 'GPOS'):
        if tag not in font:
            continue
        table = font[tag].table
        if table.LookupList is None:
            continue
        for lookup in table.LookupList.Lookup:
            for st in lookup.SubTable:
                maxCtx = maxCtxSubtable(maxCtx, tag, lookup.LookupType, st)
    return maxCtx


def maxCtxSubtable(maxCtx, tag, lookupType, st):
    """Calculate usMaxContext based on a single lookup table (and an existing
    max value).
    """

    # single positioning, single / multiple substitution
    if (tag == 'GPOS' and lookupType == 1) or (
        tag == 'GSUB' and lookupType in (1, 2, 3)):
        maxCtx = max(maxCtx, 1)

    # pair positioning
    elif tag == 'GPOS' and lookupType == 2:
        maxCtx = max(maxCtx, 2)

    # ligatures
    elif tag == 'GSUB' and lookupType == 4:
        for ligatures in st.ligatures.values():
            for ligature in ligatures:
                maxCtx = max(maxCtx, ligature.CompCount)

    # context
    elif (tag == 'GPOS' and lookupType == 7) or (
          tag == 'GSUB' and lookupType == 5):
        maxCtx = maxCtxContextualSubtable(
            maxCtx, st, 'Pos' if tag == 'GPOS' else 'Sub')

    # chained context
    elif (tag == 'GPOS' and lookupType == 8) or (
          tag == 'GSUB' and lookupType == 6):
        maxCtx = maxCtxContextualSubtable(
            maxCtx, st, 'Pos' if tag == 'GPOS' else 'Sub', 'Chain')

    # extensions
    elif (tag == 'GPOS' and lookupType == 9) or (
          tag == 'GSUB' and lookupType == 7):
        maxCtx = maxCtxSubtable(
            maxCtx, tag, st.ExtensionLookupType, st.ExtSubTable)

    # reverse-chained context
    elif tag == 'GSUB' and lookupType == 8:
        maxCtx = maxCtxContextualRule(maxCtx, st, 'Reverse')

    return maxCtx


def maxCtxContextualSubtable(maxCtx, st, ruleType, chain=''):
    """Calculate usMaxContext based on a contextual feature subtable."""

    if st.Format == 1:
        for ruleset in getattr(st, '%s%sRuleSet' % (chain, ruleType)):
            if ruleset is None:
                continue
            for rule in getattr(ruleset, '%s%sRule' % (chain, ruleType)):
                if rule is None:
                    continue
                maxCtx = maxCtxContextualRule(maxCtx, rule, chain)

    elif st.Format == 2:
        for ruleset in getattr(st, '%s%sClassSet' % (chain, ruleType)):
            if ruleset is None:
                continue
            for rule in getattr(ruleset, '%s%sClassRule' % (chain, ruleType)):
                if rule is None:
                    continue
                maxCtx = maxCtxContextualRule(maxCtx, rule, chain)

    elif st.Format == 3:
        maxCtx = maxCtxContextualRule(maxCtx, st, chain)

    return maxCtx


def maxCtxContextualRule(maxCtx, st, chain):
    """Calculate usMaxContext based on a contextual feature rule."""

    if not chain:
        return max(maxCtx, st.GlyphCount)
    elif chain == 'Reverse':
        return max(maxCtx, st.GlyphCount + st.LookAheadGlyphCount)
    return max(maxCtx, st.InputGlyphCount + st.LookAheadGlyphCount)