Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.

Differences Between: [Versions 310 and 311] [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]

   1  <?php
   2  
   3  namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
   4  
   5  use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
   6  use PhpOffice\PhpSpreadsheet\Spreadsheet;
   7  
   8  class Theme extends WriterPart
   9  {
  10      /**
  11       * Map of Major fonts to write.
  12       *
  13       * @var array of string
  14       */
  15      private static $majorFonts = [
  16          'Jpan' => 'MS Pゴシック',
  17          'Hang' => '맑은 고딕',
  18          'Hans' => '宋体',
  19          'Hant' => '新細明體',
  20          'Arab' => 'Times New Roman',
  21          'Hebr' => 'Times New Roman',
  22          'Thai' => 'Tahoma',
  23          'Ethi' => 'Nyala',
  24          'Beng' => 'Vrinda',
  25          'Gujr' => 'Shruti',
  26          'Khmr' => 'MoolBoran',
  27          'Knda' => 'Tunga',
  28          'Guru' => 'Raavi',
  29          'Cans' => 'Euphemia',
  30          'Cher' => 'Plantagenet Cherokee',
  31          'Yiii' => 'Microsoft Yi Baiti',
  32          'Tibt' => 'Microsoft Himalaya',
  33          'Thaa' => 'MV Boli',
  34          'Deva' => 'Mangal',
  35          'Telu' => 'Gautami',
  36          'Taml' => 'Latha',
  37          'Syrc' => 'Estrangelo Edessa',
  38          'Orya' => 'Kalinga',
  39          'Mlym' => 'Kartika',
  40          'Laoo' => 'DokChampa',
  41          'Sinh' => 'Iskoola Pota',
  42          'Mong' => 'Mongolian Baiti',
  43          'Viet' => 'Times New Roman',
  44          'Uigh' => 'Microsoft Uighur',
  45          'Geor' => 'Sylfaen',
  46      ];
  47  
  48      /**
  49       * Map of Minor fonts to write.
  50       *
  51       * @var array of string
  52       */
  53      private static $minorFonts = [
  54          'Jpan' => 'MS Pゴシック',
  55          'Hang' => '맑은 고딕',
  56          'Hans' => '宋体',
  57          'Hant' => '新細明體',
  58          'Arab' => 'Arial',
  59          'Hebr' => 'Arial',
  60          'Thai' => 'Tahoma',
  61          'Ethi' => 'Nyala',
  62          'Beng' => 'Vrinda',
  63          'Gujr' => 'Shruti',
  64          'Khmr' => 'DaunPenh',
  65          'Knda' => 'Tunga',
  66          'Guru' => 'Raavi',
  67          'Cans' => 'Euphemia',
  68          'Cher' => 'Plantagenet Cherokee',
  69          'Yiii' => 'Microsoft Yi Baiti',
  70          'Tibt' => 'Microsoft Himalaya',
  71          'Thaa' => 'MV Boli',
  72          'Deva' => 'Mangal',
  73          'Telu' => 'Gautami',
  74          'Taml' => 'Latha',
  75          'Syrc' => 'Estrangelo Edessa',
  76          'Orya' => 'Kalinga',
  77          'Mlym' => 'Kartika',
  78          'Laoo' => 'DokChampa',
  79          'Sinh' => 'Iskoola Pota',
  80          'Mong' => 'Mongolian Baiti',
  81          'Viet' => 'Arial',
  82          'Uigh' => 'Microsoft Uighur',
  83          'Geor' => 'Sylfaen',
  84      ];
  85  
  86      /**
  87       * Map of core colours.
  88       *
  89       * @var array of string
  90       */
  91      private static $colourScheme = [
  92          'dk2' => '1F497D',
  93          'lt2' => 'EEECE1',
  94          'accent1' => '4F81BD',
  95          'accent2' => 'C0504D',
  96          'accent3' => '9BBB59',
  97          'accent4' => '8064A2',
  98          'accent5' => '4BACC6',
  99          'accent6' => 'F79646',
 100          'hlink' => '0000FF',
 101          'folHlink' => '800080',
 102      ];
 103  
 104      /**
 105       * Write theme to XML format.
 106       *
 107       * @return string XML Output
 108       */
 109      public function writeTheme(Spreadsheet $spreadsheet)
 110      {
 111          // Create XML writer
 112          $objWriter = null;
 113          if ($this->getParentWriter()->getUseDiskCaching()) {
 114              $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
 115          } else {
 116              $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
 117          }
 118  
 119          // XML header
 120          $objWriter->startDocument('1.0', 'UTF-8', 'yes');
 121  
 122          // a:theme
 123          $objWriter->startElement('a:theme');
 124          $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
 125          $objWriter->writeAttribute('name', 'Office Theme');
 126  
 127          // a:themeElements
 128          $objWriter->startElement('a:themeElements');
 129  
 130          // a:clrScheme
 131          $objWriter->startElement('a:clrScheme');
 132          $objWriter->writeAttribute('name', 'Office');
 133  
 134          // a:dk1
 135          $objWriter->startElement('a:dk1');
 136  
 137          // a:sysClr
 138          $objWriter->startElement('a:sysClr');
 139          $objWriter->writeAttribute('val', 'windowText');
 140          $objWriter->writeAttribute('lastClr', '000000');
 141          $objWriter->endElement();
 142  
 143          $objWriter->endElement();
 144  
 145          // a:lt1
 146          $objWriter->startElement('a:lt1');
 147  
 148          // a:sysClr
 149          $objWriter->startElement('a:sysClr');
 150          $objWriter->writeAttribute('val', 'window');
 151          $objWriter->writeAttribute('lastClr', 'FFFFFF');
 152          $objWriter->endElement();
 153  
 154          $objWriter->endElement();
 155  
 156          // a:dk2
 157          $this->writeColourScheme($objWriter);
 158  
 159          $objWriter->endElement();
 160  
 161          // a:fontScheme
 162          $objWriter->startElement('a:fontScheme');
 163          $objWriter->writeAttribute('name', 'Office');
 164  
 165          // a:majorFont
 166          $objWriter->startElement('a:majorFont');
 167          $this->writeFonts($objWriter, 'Cambria', self::$majorFonts);
 168          $objWriter->endElement();
 169  
 170          // a:minorFont
 171          $objWriter->startElement('a:minorFont');
 172          $this->writeFonts($objWriter, 'Calibri', self::$minorFonts);
 173          $objWriter->endElement();
 174  
 175          $objWriter->endElement();
 176  
 177          // a:fmtScheme
 178          $objWriter->startElement('a:fmtScheme');
 179          $objWriter->writeAttribute('name', 'Office');
 180  
 181          // a:fillStyleLst
 182          $objWriter->startElement('a:fillStyleLst');
 183  
 184          // a:solidFill
 185          $objWriter->startElement('a:solidFill');
 186  
 187          // a:schemeClr
 188          $objWriter->startElement('a:schemeClr');
 189          $objWriter->writeAttribute('val', 'phClr');
 190          $objWriter->endElement();
 191  
 192          $objWriter->endElement();
 193  
 194          // a:gradFill
 195          $objWriter->startElement('a:gradFill');
 196          $objWriter->writeAttribute('rotWithShape', '1');
 197  
 198          // a:gsLst
 199          $objWriter->startElement('a:gsLst');
 200  
 201          // a:gs
 202          $objWriter->startElement('a:gs');
 203          $objWriter->writeAttribute('pos', '0');
 204  
 205          // a:schemeClr
 206          $objWriter->startElement('a:schemeClr');
 207          $objWriter->writeAttribute('val', 'phClr');
 208  
 209          // a:tint
 210          $objWriter->startElement('a:tint');
 211          $objWriter->writeAttribute('val', '50000');
 212          $objWriter->endElement();
 213  
 214          // a:satMod
 215          $objWriter->startElement('a:satMod');
 216          $objWriter->writeAttribute('val', '300000');
 217          $objWriter->endElement();
 218  
 219          $objWriter->endElement();
 220  
 221          $objWriter->endElement();
 222  
 223          // a:gs
 224          $objWriter->startElement('a:gs');
 225          $objWriter->writeAttribute('pos', '35000');
 226  
 227          // a:schemeClr
 228          $objWriter->startElement('a:schemeClr');
 229          $objWriter->writeAttribute('val', 'phClr');
 230  
 231          // a:tint
 232          $objWriter->startElement('a:tint');
 233          $objWriter->writeAttribute('val', '37000');
 234          $objWriter->endElement();
 235  
 236          // a:satMod
 237          $objWriter->startElement('a:satMod');
 238          $objWriter->writeAttribute('val', '300000');
 239          $objWriter->endElement();
 240  
 241          $objWriter->endElement();
 242  
 243          $objWriter->endElement();
 244  
 245          // a:gs
 246          $objWriter->startElement('a:gs');
 247          $objWriter->writeAttribute('pos', '100000');
 248  
 249          // a:schemeClr
 250          $objWriter->startElement('a:schemeClr');
 251          $objWriter->writeAttribute('val', 'phClr');
 252  
 253          // a:tint
 254          $objWriter->startElement('a:tint');
 255          $objWriter->writeAttribute('val', '15000');
 256          $objWriter->endElement();
 257  
 258          // a:satMod
 259          $objWriter->startElement('a:satMod');
 260          $objWriter->writeAttribute('val', '350000');
 261          $objWriter->endElement();
 262  
 263          $objWriter->endElement();
 264  
 265          $objWriter->endElement();
 266  
 267          $objWriter->endElement();
 268  
 269          // a:lin
 270          $objWriter->startElement('a:lin');
 271          $objWriter->writeAttribute('ang', '16200000');
 272          $objWriter->writeAttribute('scaled', '1');
 273          $objWriter->endElement();
 274  
 275          $objWriter->endElement();
 276  
 277          // a:gradFill
 278          $objWriter->startElement('a:gradFill');
 279          $objWriter->writeAttribute('rotWithShape', '1');
 280  
 281          // a:gsLst
 282          $objWriter->startElement('a:gsLst');
 283  
 284          // a:gs
 285          $objWriter->startElement('a:gs');
 286          $objWriter->writeAttribute('pos', '0');
 287  
 288          // a:schemeClr
 289          $objWriter->startElement('a:schemeClr');
 290          $objWriter->writeAttribute('val', 'phClr');
 291  
 292          // a:shade
 293          $objWriter->startElement('a:shade');
 294          $objWriter->writeAttribute('val', '51000');
 295          $objWriter->endElement();
 296  
 297          // a:satMod
 298          $objWriter->startElement('a:satMod');
 299          $objWriter->writeAttribute('val', '130000');
 300          $objWriter->endElement();
 301  
 302          $objWriter->endElement();
 303  
 304          $objWriter->endElement();
 305  
 306          // a:gs
 307          $objWriter->startElement('a:gs');
 308          $objWriter->writeAttribute('pos', '80000');
 309  
 310          // a:schemeClr
 311          $objWriter->startElement('a:schemeClr');
 312          $objWriter->writeAttribute('val', 'phClr');
 313  
 314          // a:shade
 315          $objWriter->startElement('a:shade');
 316          $objWriter->writeAttribute('val', '93000');
 317          $objWriter->endElement();
 318  
 319          // a:satMod
 320          $objWriter->startElement('a:satMod');
 321          $objWriter->writeAttribute('val', '130000');
 322          $objWriter->endElement();
 323  
 324          $objWriter->endElement();
 325  
 326          $objWriter->endElement();
 327  
 328          // a:gs
 329          $objWriter->startElement('a:gs');
 330          $objWriter->writeAttribute('pos', '100000');
 331  
 332          // a:schemeClr
 333          $objWriter->startElement('a:schemeClr');
 334          $objWriter->writeAttribute('val', 'phClr');
 335  
 336          // a:shade
 337          $objWriter->startElement('a:shade');
 338          $objWriter->writeAttribute('val', '94000');
 339          $objWriter->endElement();
 340  
 341          // a:satMod
 342          $objWriter->startElement('a:satMod');
 343          $objWriter->writeAttribute('val', '135000');
 344          $objWriter->endElement();
 345  
 346          $objWriter->endElement();
 347  
 348          $objWriter->endElement();
 349  
 350          $objWriter->endElement();
 351  
 352          // a:lin
 353          $objWriter->startElement('a:lin');
 354          $objWriter->writeAttribute('ang', '16200000');
 355          $objWriter->writeAttribute('scaled', '0');
 356          $objWriter->endElement();
 357  
 358          $objWriter->endElement();
 359  
 360          $objWriter->endElement();
 361  
 362          // a:lnStyleLst
 363          $objWriter->startElement('a:lnStyleLst');
 364  
 365          // a:ln
 366          $objWriter->startElement('a:ln');
 367          $objWriter->writeAttribute('w', '9525');
 368          $objWriter->writeAttribute('cap', 'flat');
 369          $objWriter->writeAttribute('cmpd', 'sng');
 370          $objWriter->writeAttribute('algn', 'ctr');
 371  
 372          // a:solidFill
 373          $objWriter->startElement('a:solidFill');
 374  
 375          // a:schemeClr
 376          $objWriter->startElement('a:schemeClr');
 377          $objWriter->writeAttribute('val', 'phClr');
 378  
 379          // a:shade
 380          $objWriter->startElement('a:shade');
 381          $objWriter->writeAttribute('val', '95000');
 382          $objWriter->endElement();
 383  
 384          // a:satMod
 385          $objWriter->startElement('a:satMod');
 386          $objWriter->writeAttribute('val', '105000');
 387          $objWriter->endElement();
 388  
 389          $objWriter->endElement();
 390  
 391          $objWriter->endElement();
 392  
 393          // a:prstDash
 394          $objWriter->startElement('a:prstDash');
 395          $objWriter->writeAttribute('val', 'solid');
 396          $objWriter->endElement();
 397  
 398          $objWriter->endElement();
 399  
 400          // a:ln
 401          $objWriter->startElement('a:ln');
 402          $objWriter->writeAttribute('w', '25400');
 403          $objWriter->writeAttribute('cap', 'flat');
 404          $objWriter->writeAttribute('cmpd', 'sng');
 405          $objWriter->writeAttribute('algn', 'ctr');
 406  
 407          // a:solidFill
 408          $objWriter->startElement('a:solidFill');
 409  
 410          // a:schemeClr
 411          $objWriter->startElement('a:schemeClr');
 412          $objWriter->writeAttribute('val', 'phClr');
 413          $objWriter->endElement();
 414  
 415          $objWriter->endElement();
 416  
 417          // a:prstDash
 418          $objWriter->startElement('a:prstDash');
 419          $objWriter->writeAttribute('val', 'solid');
 420          $objWriter->endElement();
 421  
 422          $objWriter->endElement();
 423  
 424          // a:ln
 425          $objWriter->startElement('a:ln');
 426          $objWriter->writeAttribute('w', '38100');
 427          $objWriter->writeAttribute('cap', 'flat');
 428          $objWriter->writeAttribute('cmpd', 'sng');
 429          $objWriter->writeAttribute('algn', 'ctr');
 430  
 431          // a:solidFill
 432          $objWriter->startElement('a:solidFill');
 433  
 434          // a:schemeClr
 435          $objWriter->startElement('a:schemeClr');
 436          $objWriter->writeAttribute('val', 'phClr');
 437          $objWriter->endElement();
 438  
 439          $objWriter->endElement();
 440  
 441          // a:prstDash
 442          $objWriter->startElement('a:prstDash');
 443          $objWriter->writeAttribute('val', 'solid');
 444          $objWriter->endElement();
 445  
 446          $objWriter->endElement();
 447  
 448          $objWriter->endElement();
 449  
 450          // a:effectStyleLst
 451          $objWriter->startElement('a:effectStyleLst');
 452  
 453          // a:effectStyle
 454          $objWriter->startElement('a:effectStyle');
 455  
 456          // a:effectLst
 457          $objWriter->startElement('a:effectLst');
 458  
 459          // a:outerShdw
 460          $objWriter->startElement('a:outerShdw');
 461          $objWriter->writeAttribute('blurRad', '40000');
 462          $objWriter->writeAttribute('dist', '20000');
 463          $objWriter->writeAttribute('dir', '5400000');
 464          $objWriter->writeAttribute('rotWithShape', '0');
 465  
 466          // a:srgbClr
 467          $objWriter->startElement('a:srgbClr');
 468          $objWriter->writeAttribute('val', '000000');
 469  
 470          // a:alpha
 471          $objWriter->startElement('a:alpha');
 472          $objWriter->writeAttribute('val', '38000');
 473          $objWriter->endElement();
 474  
 475          $objWriter->endElement();
 476  
 477          $objWriter->endElement();
 478  
 479          $objWriter->endElement();
 480  
 481          $objWriter->endElement();
 482  
 483          // a:effectStyle
 484          $objWriter->startElement('a:effectStyle');
 485  
 486          // a:effectLst
 487          $objWriter->startElement('a:effectLst');
 488  
 489          // a:outerShdw
 490          $objWriter->startElement('a:outerShdw');
 491          $objWriter->writeAttribute('blurRad', '40000');
 492          $objWriter->writeAttribute('dist', '23000');
 493          $objWriter->writeAttribute('dir', '5400000');
 494          $objWriter->writeAttribute('rotWithShape', '0');
 495  
 496          // a:srgbClr
 497          $objWriter->startElement('a:srgbClr');
 498          $objWriter->writeAttribute('val', '000000');
 499  
 500          // a:alpha
 501          $objWriter->startElement('a:alpha');
 502          $objWriter->writeAttribute('val', '35000');
 503          $objWriter->endElement();
 504  
 505          $objWriter->endElement();
 506  
 507          $objWriter->endElement();
 508  
 509          $objWriter->endElement();
 510  
 511          $objWriter->endElement();
 512  
 513          // a:effectStyle
 514          $objWriter->startElement('a:effectStyle');
 515  
 516          // a:effectLst
 517          $objWriter->startElement('a:effectLst');
 518  
 519          // a:outerShdw
 520          $objWriter->startElement('a:outerShdw');
 521          $objWriter->writeAttribute('blurRad', '40000');
 522          $objWriter->writeAttribute('dist', '23000');
 523          $objWriter->writeAttribute('dir', '5400000');
 524          $objWriter->writeAttribute('rotWithShape', '0');
 525  
 526          // a:srgbClr
 527          $objWriter->startElement('a:srgbClr');
 528          $objWriter->writeAttribute('val', '000000');
 529  
 530          // a:alpha
 531          $objWriter->startElement('a:alpha');
 532          $objWriter->writeAttribute('val', '35000');
 533          $objWriter->endElement();
 534  
 535          $objWriter->endElement();
 536  
 537          $objWriter->endElement();
 538  
 539          $objWriter->endElement();
 540  
 541          // a:scene3d
 542          $objWriter->startElement('a:scene3d');
 543  
 544          // a:camera
 545          $objWriter->startElement('a:camera');
 546          $objWriter->writeAttribute('prst', 'orthographicFront');
 547  
 548          // a:rot
 549          $objWriter->startElement('a:rot');
 550          $objWriter->writeAttribute('lat', '0');
 551          $objWriter->writeAttribute('lon', '0');
 552          $objWriter->writeAttribute('rev', '0');
 553          $objWriter->endElement();
 554  
 555          $objWriter->endElement();
 556  
 557          // a:lightRig
 558          $objWriter->startElement('a:lightRig');
 559          $objWriter->writeAttribute('rig', 'threePt');
 560          $objWriter->writeAttribute('dir', 't');
 561  
 562          // a:rot
 563          $objWriter->startElement('a:rot');
 564          $objWriter->writeAttribute('lat', '0');
 565          $objWriter->writeAttribute('lon', '0');
 566          $objWriter->writeAttribute('rev', '1200000');
 567          $objWriter->endElement();
 568  
 569          $objWriter->endElement();
 570  
 571          $objWriter->endElement();
 572  
 573          // a:sp3d
 574          $objWriter->startElement('a:sp3d');
 575  
 576          // a:bevelT
 577          $objWriter->startElement('a:bevelT');
 578          $objWriter->writeAttribute('w', '63500');
 579          $objWriter->writeAttribute('h', '25400');
 580          $objWriter->endElement();
 581  
 582          $objWriter->endElement();
 583  
 584          $objWriter->endElement();
 585  
 586          $objWriter->endElement();
 587  
 588          // a:bgFillStyleLst
 589          $objWriter->startElement('a:bgFillStyleLst');
 590  
 591          // a:solidFill
 592          $objWriter->startElement('a:solidFill');
 593  
 594          // a:schemeClr
 595          $objWriter->startElement('a:schemeClr');
 596          $objWriter->writeAttribute('val', 'phClr');
 597          $objWriter->endElement();
 598  
 599          $objWriter->endElement();
 600  
 601          // a:gradFill
 602          $objWriter->startElement('a:gradFill');
 603          $objWriter->writeAttribute('rotWithShape', '1');
 604  
 605          // a:gsLst
 606          $objWriter->startElement('a:gsLst');
 607  
 608          // a:gs
 609          $objWriter->startElement('a:gs');
 610          $objWriter->writeAttribute('pos', '0');
 611  
 612          // a:schemeClr
 613          $objWriter->startElement('a:schemeClr');
 614          $objWriter->writeAttribute('val', 'phClr');
 615  
 616          // a:tint
 617          $objWriter->startElement('a:tint');
 618          $objWriter->writeAttribute('val', '40000');
 619          $objWriter->endElement();
 620  
 621          // a:satMod
 622          $objWriter->startElement('a:satMod');
 623          $objWriter->writeAttribute('val', '350000');
 624          $objWriter->endElement();
 625  
 626          $objWriter->endElement();
 627  
 628          $objWriter->endElement();
 629  
 630          // a:gs
 631          $objWriter->startElement('a:gs');
 632          $objWriter->writeAttribute('pos', '40000');
 633  
 634          // a:schemeClr
 635          $objWriter->startElement('a:schemeClr');
 636          $objWriter->writeAttribute('val', 'phClr');
 637  
 638          // a:tint
 639          $objWriter->startElement('a:tint');
 640          $objWriter->writeAttribute('val', '45000');
 641          $objWriter->endElement();
 642  
 643          // a:shade
 644          $objWriter->startElement('a:shade');
 645          $objWriter->writeAttribute('val', '99000');
 646          $objWriter->endElement();
 647  
 648          // a:satMod
 649          $objWriter->startElement('a:satMod');
 650          $objWriter->writeAttribute('val', '350000');
 651          $objWriter->endElement();
 652  
 653          $objWriter->endElement();
 654  
 655          $objWriter->endElement();
 656  
 657          // a:gs
 658          $objWriter->startElement('a:gs');
 659          $objWriter->writeAttribute('pos', '100000');
 660  
 661          // a:schemeClr
 662          $objWriter->startElement('a:schemeClr');
 663          $objWriter->writeAttribute('val', 'phClr');
 664  
 665          // a:shade
 666          $objWriter->startElement('a:shade');
 667          $objWriter->writeAttribute('val', '20000');
 668          $objWriter->endElement();
 669  
 670          // a:satMod
 671          $objWriter->startElement('a:satMod');
 672          $objWriter->writeAttribute('val', '255000');
 673          $objWriter->endElement();
 674  
 675          $objWriter->endElement();
 676  
 677          $objWriter->endElement();
 678  
 679          $objWriter->endElement();
 680  
 681          // a:path
 682          $objWriter->startElement('a:path');
 683          $objWriter->writeAttribute('path', 'circle');
 684  
 685          // a:fillToRect
 686          $objWriter->startElement('a:fillToRect');
 687          $objWriter->writeAttribute('l', '50000');
 688          $objWriter->writeAttribute('t', '-80000');
 689          $objWriter->writeAttribute('r', '50000');
 690          $objWriter->writeAttribute('b', '180000');
 691          $objWriter->endElement();
 692  
 693          $objWriter->endElement();
 694  
 695          $objWriter->endElement();
 696  
 697          // a:gradFill
 698          $objWriter->startElement('a:gradFill');
 699          $objWriter->writeAttribute('rotWithShape', '1');
 700  
 701          // a:gsLst
 702          $objWriter->startElement('a:gsLst');
 703  
 704          // a:gs
 705          $objWriter->startElement('a:gs');
 706          $objWriter->writeAttribute('pos', '0');
 707  
 708          // a:schemeClr
 709          $objWriter->startElement('a:schemeClr');
 710          $objWriter->writeAttribute('val', 'phClr');
 711  
 712          // a:tint
 713          $objWriter->startElement('a:tint');
 714          $objWriter->writeAttribute('val', '80000');
 715          $objWriter->endElement();
 716  
 717          // a:satMod
 718          $objWriter->startElement('a:satMod');
 719          $objWriter->writeAttribute('val', '300000');
 720          $objWriter->endElement();
 721  
 722          $objWriter->endElement();
 723  
 724          $objWriter->endElement();
 725  
 726          // a:gs
 727          $objWriter->startElement('a:gs');
 728          $objWriter->writeAttribute('pos', '100000');
 729  
 730          // a:schemeClr
 731          $objWriter->startElement('a:schemeClr');
 732          $objWriter->writeAttribute('val', 'phClr');
 733  
 734          // a:shade
 735          $objWriter->startElement('a:shade');
 736          $objWriter->writeAttribute('val', '30000');
 737          $objWriter->endElement();
 738  
 739          // a:satMod
 740          $objWriter->startElement('a:satMod');
 741          $objWriter->writeAttribute('val', '200000');
 742          $objWriter->endElement();
 743  
 744          $objWriter->endElement();
 745  
 746          $objWriter->endElement();
 747  
 748          $objWriter->endElement();
 749  
 750          // a:path
 751          $objWriter->startElement('a:path');
 752          $objWriter->writeAttribute('path', 'circle');
 753  
 754          // a:fillToRect
 755          $objWriter->startElement('a:fillToRect');
 756          $objWriter->writeAttribute('l', '50000');
 757          $objWriter->writeAttribute('t', '50000');
 758          $objWriter->writeAttribute('r', '50000');
 759          $objWriter->writeAttribute('b', '50000');
 760          $objWriter->endElement();
 761  
 762          $objWriter->endElement();
 763  
 764          $objWriter->endElement();
 765  
 766          $objWriter->endElement();
 767  
 768          $objWriter->endElement();
 769  
 770          $objWriter->endElement();
 771  
 772          // a:objectDefaults
 773          $objWriter->writeElement('a:objectDefaults', null);
 774  
 775          // a:extraClrSchemeLst
 776          $objWriter->writeElement('a:extraClrSchemeLst', null);
 777  
 778          $objWriter->endElement();
 779  
 780          // Return
 781          return $objWriter->getData();
 782      }
 783  
 784      /**
 785       * Write fonts to XML format.
 786       *
 787       * @param XMLWriter $objWriter
 788       * @param string $latinFont
 789       * @param array of string                $fontSet
 790       *
 791       * @return string XML Output
 792       */
 793      private function writeFonts($objWriter, $latinFont, $fontSet)
 794      {
 795          // a:latin
 796          $objWriter->startElement('a:latin');
 797          $objWriter->writeAttribute('typeface', $latinFont);
 798          $objWriter->endElement();
 799  
 800          // a:ea
 801          $objWriter->startElement('a:ea');
 802          $objWriter->writeAttribute('typeface', '');
 803          $objWriter->endElement();
 804  
 805          // a:cs
 806          $objWriter->startElement('a:cs');
 807          $objWriter->writeAttribute('typeface', '');
 808          $objWriter->endElement();
 809  
 810          foreach ($fontSet as $fontScript => $typeface) {
 811              $objWriter->startElement('a:font');
 812              $objWriter->writeAttribute('script', $fontScript);
 813              $objWriter->writeAttribute('typeface', $typeface);
 814              $objWriter->endElement();
 815          }
 816      }
 817  
 818      /**
 819       * Write colour scheme to XML format.
 820       *
 821       * @param XMLWriter $objWriter
 822       *
 823       * @return string XML Output
 824       */
 825      private function writeColourScheme($objWriter)
 826      {
 827          foreach (self::$colourScheme as $colourName => $colourValue) {
 828              $objWriter->startElement('a:' . $colourName);
 829  
 830              $objWriter->startElement('a:srgbClr');
 831              $objWriter->writeAttribute('val', $colourValue);
 832              $objWriter->endElement();
 833  
 834              $objWriter->endElement();
 835          }
 836      }
 837  }