code: def toXML(self, writer, ttFont):
      names = sorted(self.glyphPrograms.keys())
      writer.newline()
      for name in names:
          text = self.glyphPrograms[name]
          if not text:
              continue
          writer.begintag("glyphProgram", name=name)
          writer.newline()
          writer.write_noindent(text.replace("\r", "\n"))
          writer.newline()
          writer.endtag("glyphProgram")
          writer.newline()
          writer.newline()
      extra_names = sorted(self.extraPrograms.keys())
      for name in extra_names:
          text = self.extraPrograms[name]
          if not text:
              continue
          writer.begintag("extraProgram", name=name)
          writer.newline()
          writer.write_noindent(text.replace("\r", "\n"))
          writer.newline()
          writer.endtag("extraProgram")
          writer.newline()
          writer.newline()
  
file_path: catboost/contrib/python/fonttools/fontTools/ttLib/tables/T_S_I__1.py
imports: from .None import DefaultTable
  from fontTools.misc.loggingTools import LogMixin
  from fontTools.misc.textTools import strjoin, tobytes, tostr
label_desc: Use image node_id 3 for calling the table_T_S_I__1 obj's underlying member method code with example usage: obj.toXML(writer, ttFont) without return types