How to use the scour.scour.Unit function in scour

To help you get started, we’ve selected a few scour examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github scour-project / scour / scour / scour.py View on Github external
def properlySizeDoc(docElement, options):
   # get doc width and height
   w = SVGLength(docElement.getAttribute('width'))
   h = SVGLength(docElement.getAttribute('height'))

   # if width/height are not unitless or px then it is not ok to rewrite them into a viewBox.
   # well, it may be OK for Web browsers and vector editors, but not for librsvg.
   if options.renderer_workaround:
      if ((w.units != Unit.NONE and w.units != Unit.PX) or
         (h.units != Unit.NONE and h.units != Unit.PX)):
          return

   # else we have a statically sized image and we should try to remedy that

   # parse viewBox attribute
   vbSep = re.split("\\s*\\,?\\s*", docElement.getAttribute('viewBox'), 3)
   # if we have a valid viewBox we need to check it
   vbWidth,vbHeight = 0,0
   if len(vbSep) == 4:
      try:
         # if x or y are specified and non-zero then it is not ok to overwrite it
         vbX = float(vbSep[0])
         vbY = float(vbSep[1])
         if vbX != 0 or vbY != 0:
            return
github scour-project / scour / scour / scour.py View on Github external
if node.getAttribute('y1') != '':
      y1 = SVGLength(node.getAttribute('y1'))
      if y1.value == 0:
         node.removeAttribute('y1')
         num += 1

   # x2 - line: 0
   #      linearGradient: 100% (x2="1" usually equals "1px" which only equals "100%" if gradientUnits="objectBoundingBox")
   if node.getAttribute('x2') != '':
      x2 = SVGLength(node.getAttribute('x2'))
      if node.nodeName == 'line':
         if x2.value == 0:
           node.removeAttribute('x2')
           num += 1
      elif node.nodeName == 'linearGradient':
         if ( (x2.value == 100 and x2.units == Unit.PCT) or
              (x2.value == 1   and x2.units == Unit.NONE and not node.getAttribute('gradientUnits') == 'userSpaceOnUse') ):
            node.removeAttribute('x2')
            num += 1

   # y2 - line: 0
   #      linearGradient: 0%
   if node.getAttribute('y2') != '':
      y2 = SVGLength(node.getAttribute('y2'))
      if y2.value == 0:
         node.removeAttribute('y2')
         num += 1

   # fx: equal to rx
   if node.getAttribute('fx') != '':
      if node.getAttribute('fx') == node.getAttribute('cx'):
         node.removeAttribute('fx')
github scour-project / scour / scour / scour.py View on Github external
def str(unitint):
      try:
         return Unit.u2s[unitint]
      except KeyError:
         return 'INVALID'
github scour-project / scour / scour / scour.py View on Github external
def get(unitstr):
      if unitstr is None: return Unit.NONE
      try:
         return Unit.s2u[unitstr]
      except KeyError:
         return Unit.INVALID
github scour-project / scour / scour / scour.py View on Github external
def removeDuplicateGradientStops(doc):
   global numElemsRemoved
   num = 0

   for gradType in ['linearGradient', 'radialGradient']:
      for grad in doc.getElementsByTagName(gradType):
         stops = {}
         stopsToRemove = []
         for stop in grad.getElementsByTagName('stop'):
            # convert percentages into a floating point number
            offsetU = SVGLength(stop.getAttribute('offset'))
            if offsetU.units == Unit.PCT:
               offset = offsetU.value / 100.0
            elif offsetU.units == Unit.NONE:
               offset = offsetU.value
            else:
               offset = 0
            # set the stop offset value to the integer or floating point equivalent
            if int(offset) == offset: stop.setAttribute('offset', str(int(offset)))
            else: stop.setAttribute('offset', str(offset))

            color = stop.getAttribute('stop-color')
            opacity = stop.getAttribute('stop-opacity')
            style = stop.getAttribute('style')
            if offset in stops :
               oldStop = stops[offset]
               if oldStop[0] == color and oldStop[1] == opacity and oldStop[2] == style:
                  stopsToRemove.append(stop)
            stops[offset] = [color, opacity, style]
github scour-project / scour / scour / scour.py View on Github external
10 ** float(expMatch.group(1)))
            unitBegin = expMatch.end(1)
         else:
            # unit or invalid
            numMatch = number.match(str)
            if numMatch != None:
               self.value = float(numMatch.group(0))
               unitBegin = numMatch.end(0)

         if int(self.value) == self.value:
            self.value = int(self.value)

         if unitBegin != 0 :
            unitMatch = unit.search(str, unitBegin)
            if unitMatch != None :
               self.units = Unit.get(unitMatch.group(0))

         # invalid
         else:
            # TODO: this needs to set the default for the given attribute (how?)
            self.value = 0
            self.units = Unit.INVALID