function createColorElements(color_info, back_info) {
  var outText = ''
  var colorVal
  var fillType = 'solid'
  var internalElements = ''

  if (back_info) {
    outText += '<p:bg><p:bgPr>'

    outText += createColorElements(back_info, false)

    outText += '<a:effectLst/>'
    // BMK_TODO: (add support for effects)

    outText += '</p:bgPr></p:bg>'
  } // Endif.

  if (color_info) {
    if (typeof color_info === 'string') {
      colorVal = color_info
    } else {
      if (color_info.type) {
        fillType = color_info.type
      } // Endif.

      if (color_info.color) {
        colorVal = color_info.color
      } // Endif.

      if (color_info.alpha) {
        internalElements +=
          '<a:alpha val="' + (100 - color_info.alpha) + '000"/>'
      } // Endif.
    } // Endif.

    switch (fillType) {
      case 'solid':
        if (color_info.scheme) {
          outText +=
            '<a:solidFill><a:schemeClr val="' + colorVal + '"/></a:solidFill>'
          break
        } // Endif.

        outText +=
          '<a:solidFill><a:srgbClr val="' +
          colorVal +
          '">' +
          internalElements +
          '</a:srgbClr></a:solidFill>'
        break

      case 'gradient':
        outText += '<a:gradFill flip="none" rotWithShape="1"><a:gsLst>'

        for (var item in colorVal) {
          if (typeof colorVal[item] === 'string') {
            // Positions are inverted because they start with 100000:
            outText +=
              '<a:gs pos="' +
              (100000 - Math.round((100000 / (colorVal.length - 1)) * item)) +
              '"><a:srgbClr val="' +
              colorVal[item] +
              '">' +
              internalElements +
              '</a:srgbClr></a:gs>'
          } else {
            outText +=
              '<a:gs pos="' +
              colorVal[item].position * 1000 +
              '"><a:srgbClr val="' +
              colorVal[item].color +
              '">' +
              internalElements +
              '</a:srgbClr></a:gs>'
          } // Endif.
        } // End of for loop.

        if (typeof color_info.angle !== 'undefined') {
          outText +=
            '</a:gsLst><a:lin ang="' +
            color_info.angle * 100000 +
            '" scaled="1"/><a:tileRect/></a:gradFill>'
        } else {
          outText +=
            '</a:gsLst><a:path path="circle"><a:fillToRect l="100000" t="100000"/></a:path><a:tileRect r="-100000" b="-100000"/></a:gradFill>'
        } // Endif.
        break
    } // End of switch.
  } // Endif.

  return outText
}
Generate the XML code to describe colors.

@param {object} color_info Foreground color information.
@param {object} back_info Background color information.