Exemple #1
0
 def savedConditions(self):
     """Return a dictionary with saved Conditonals from all type formats.
     """
     savedConditions = {}
     # all-type conditions
     for name, text in self.savedConditionText.items():
         cond = conditional.Conditional(text)
         savedConditions[name] = cond
     # specific type conditions
     for typeFormat in self.values():
         for name, text in typeFormat.savedConditionText.items():
             cond = conditional.Conditional(text, typeFormat.name)
             savedConditions[name] = cond
     return savedConditions
Exemple #2
0
    def readFormat(self, formatData=None):
        """Read JSON format data into this format.

        Arguments:
            formatData -- JSON dict for this format (None for default settings)
        """
        self.fieldDict = collections.OrderedDict()
        if formatData:
            for fieldData in formatData.get('fields', []):
                fieldName = fieldData['fieldname']
                self.addField(fieldName, fieldData)
        else:
            formatData = {}
        self.titleLine = [formatData.get('titleline', '')]
        self.outputLines = [[line] for line in
                            formatData.get('outputlines', [])]
        self.spaceBetween = formatData.get('spacebetween', True)
        self.formatHtml = formatData.get('formathtml', False)
        self.useBullets = formatData.get('bullets', False)
        self.useTables = formatData.get('tables', False)
        self.childType = formatData.get('childtype', '')
        self.genericType = formatData.get('generic', '')
        if 'condition' in formatData:
            self.conditional = conditional.Conditional(formatData['condition'])
        if 'childTypeLimit' in formatData:
            self.childTypeLimit = set(formatData['childTypeLimit'])
        self.iconName = formatData.get('icon', '')
        self.outputSeparator = formatData.get('outputsep',
                                              _defaultOutputSeparator)
        for key in formatData.keys():
            if key.startswith('cond-'):
                self.savedConditionText[key[5:]] = formatData[key]
Exemple #3
0
    def __init__(self, name, parentFormats, attrs=None, addDefaultField=False):
        """Initialize a tree node.

        Arguments:
            name -- the type name string
            parentFormats -- a ref to TreeFormats class for outside field refs
            attrs -- the attributes that define this type's format
            addDefaultField -- if true, adds a default initial field
        """
        self.name = name
        self.parentFormats = parentFormats
        self.idField = None
        if not attrs:
            attrs = {}
        self.spaceBetween = attrs.get('spacebetween', 'y').startswith('y')
        self.formatHtml = attrs.get('formathtml', '').startswith('y')
        self.useBullets = attrs.get('bullets', '').startswith('y')
        self.useTables = attrs.get('tables', '').startswith('y')
        self.childType = attrs.get('childtype', '')
        self.genericType = attrs.get('generic', '')
        self.conditional = conditional.Conditional(attrs.get('condition', ''))
        self.iconName = attrs.get('icon', '')
        self.outputSeparator = attrs.get('outputsep', _defaultOutputSeparator)
        self.savedConditionText = {}
        for key in attrs.keys():
            if key.startswith('cond-'):
                self.savedConditionText[key[5:]] = attrs[key]
        self.fieldDict = collections.OrderedDict()
        self.derivedTypes = []
        self.siblingPrefix = ''
        self.siblingSuffix = ''
        self.sortFields = []  # temporary storage while sorting
        if addDefaultField:
            self.addFieldIfNew(defaultFieldName)
            attrs['line0'] = '{{*{0}*}}'.format(defaultFieldName)
            attrs['line1'] = '{{*{0}*}}'.format(defaultFieldName)
        self.lineList = [['']]
        self.origLineList = []  # lines without bullet or table modifications
        lineNums = sorted(
            [int(key[4:]) for key in attrs.keys() if _lineAttrRe.match(key)])
        if lineNums:
            self.lineList = [[attrs['line{0}'.format(keyNum)]]
                             for keyNum in lineNums]
        if addDefaultField:
            self.updateLineParsing()
        if self.useBullets:
            self.addBullets()
        if self.useTables:
            self.addTables()
Exemple #4
0
 def updateDerivedRefs(self):
     """Update derived type lists (in generics) & the conditional type set.
     """
     self.conditionalTypes = set()
     for typeFormat in self.values():
         typeFormat.derivedTypes = []
         if typeFormat.conditional:
             self.conditionalTypes.add(typeFormat)
             if typeFormat.genericType:
                 self.conditionalTypes.add(self[typeFormat.genericType])
     for typeFormat in self.values():
         if typeFormat.genericType:
             genericType = self[typeFormat.genericType]
             genericType.derivedTypes.append(typeFormat)
             if genericType in self.conditionalTypes:
                 self.conditionalTypes.add(typeFormat)
     for typeFormat in self.values():
         if not typeFormat.genericType and not typeFormat.derivedTypes:
             typeFormat.conditional = conditional.Conditional()
             self.conditionalTypes.discard(typeFormat)
Exemple #5
0
    def removeField(self, field):
        """Remove all occurances of field from output lines.

        Arguments:
            field -- the field to be removed
        """
        for lineData in self.lineList:
            while field in lineData:
                lineData.remove(field)
        self.lineList = [line for line in self.lineList if line]
        while len(self.lineList) < 2:
            self.lineList.append([''])
        self.conditional.removeField(field.name)
        savedConditions = {}
        for name, text in self.savedConditionText.items():
            condition = conditional.Conditional(text, self.name)
            condition.removeField(field.name)
            if condition:
                savedConditions[name] = condition.conditionStr()
        self.savedConditionText = savedConditions
Exemple #6
0
 def __init__(self, name, formatAttrs={}, defaultField=''):
     self.name = name
     self.fieldList = []
     self.lineList = []
     self.numEmptyFields = 0
     self.numFullFields = 0
     self.uniqueIDFields = []
     self.childType = formatAttrs.get(u'childtype', '')
     self.genericType = formatAttrs.get(u'generic', '')
     self.conditional = conditional.Conditional(
         formatAttrs.get(u'condition', ''))
     self.sibPrefix = formatAttrs.get(u'sibprefix', '')
     self.sibSuffix = formatAttrs.get(u'sibsuffix', '')
     self.iconName = formatAttrs.get(u'icon', '')
     self.refField = None
     for key in formatAttrs.keys():
         if NodeFormat.lineAttrRe.match(key):
             self.insertLine(formatAttrs.get(key, ''), int(key[4:]))
     if defaultField:
         htmlAttrs = globalref.options.boolData('HtmlNewFields') and \
                     {'html': 'y'} or {}
         self.addNewField(defaultField, htmlAttrs)
         self.addLine(u'{*%s*}' % defaultField)
         self.addLine(u'{*%s*}' % defaultField)