コード例 #1
0
ファイル: soardoc.py プロジェクト: aahlad/soar
def WriteXmlFile(collector):
    cfg = Config.Instance()
    SoarDocOutput.CreateOutputDirectory()
    w = SoarDocXml.Writer()
    doc = w(collector)
    f = open(os.path.join(cfg.OutputDirectory, cfg.XmlFileName), 'w')
    f.write(doc.toprettyxml(' ' * 3))
コード例 #2
0
 def writeProdIndex(self):
    cfg = Config.Instance()
    if not cfg.LogShowProductions: return
    
    html = self.createDoc()
    self.writeHeader(html)
    html.append(HTMLgen.Header(2, 'Production Summary for %s' % self.__logName))
    prodNames = self.__prodTab.keys()[:]
    prodNames.sort()
    t = HTMLgen.TableLite(width='100%')
    html.append(t)
    tr = HTMLgen.TR(HTMLgen.TH('Production'),
                    HTMLgen.TH('Description'),
                    align='left')
    if cfg.LogShowProdFirings: tr.append(HTMLgen.TH('Firings'))
    if cfg.LogShowProdRetractions: tr.append(HTMLgen.TH('Retractions'))
    t.append(tr)
    trBgColors = ['white', '#f2f2ff']
    c = 1
    for prodName in prodNames:
       sdpr = self.__col.GetObject(self.__col.ProdTab, prodName)
       tr = self.buildProdEntry(prodName, self.__prodTab[prodName], sdpr)
       if tr:
          tr.bgcolor = trBgColors[c]
          t.append(tr)
          c = not c # alternate colors
          
    SoarDocOutput.WriteFooter(html)
    html.write(os.path.join(Config.Instance().OutputDirectory, self.ProdIdxFile))
コード例 #3
0
def GenerateLogDoc(collector, logFileName, state):
   name, ext = os.path.splitext(logFileName)    # Pull off the extension
   SoarDocOutput.CreateOutputDirectory()

   w = LogWriter(collector,
                 logFileName, state) # Write a pretty version of the log file
   logUrl = name + '_log.html'
   w.Write(os.path.join(Config.Instance().OutputDirectory, logUrl))
   iw = IndexWriter(collector,
                    name,
                    state, logUrl, 'log')  # Write indices for the log file
   iw.Write()

   # Build a frame document to hold indices and pretty log   
   f1 = HTMLgen.Frame(name=INDEX_FRAME_NAME, src=iw.OpIdxFile)
   f2 = HTMLgen.Frame(name=LOG_FRAME_NAME, src =logUrl)
   fs = HTMLgen.Frameset(f1, f2, rows='50%,50%')
   fdoc = HTMLgen.FramesetDocument(title='SoarLog: %s' % name)
   fdoc.script = HTMLgen.Script(code=GetSoarDocNavFrameScript())
   fdoc.append(fs)
   fsUrl = name + '.html'
   
   # This is a bit of hack to work around a bug in HTMLgen.
   # The FramesetDocument class doesn't properly write out its
   # script property because it's derived from BasicDocument.
   f = open(os.path.join(Config.Instance().OutputDirectory, fsUrl), 'w')
   f.write(HTMLgen.DOCTYPE)
   f.write('<head><title>%s</title>%s</head>' % (fdoc.title, str(fdoc.script)))
   f.write(str(fs))
   f.write('</html>')

      
コード例 #4
0
ファイル: SoarLogXml.py プロジェクト: aahlad/soar
def GenerateXmlLog(logFileName, state):
    name, ext = os.path.splitext(logFileName)  # Pull off the extension
    SoarDocOutput.CreateOutputDirectory()

    doc = Writer()(name, state)
    f = open(os.path.join(Config.Instance().OutputDirectory, name + '.xml'),
             'w')
    f.write(doc.toprettyxml(' ' * 3))
コード例 #5
0
 def Write(self, fileName):
    self.setupAgentOutputFilters()
    self.__html = HTMLgen.SimpleDocument()
    self.__html.script = HTMLgen.Script(code=GetSoarDocNavScript())
    self.__html.append(HTMLgen.Heading(2,'Soar Log File: %s' % self.__logFileName))
    self.__table = HTMLgen.TableLite(border=0, cellspacing=0, width='100%')
    self.__html.append(self.__table)
    self.writeState(self.__logState, 0)
    SoarDocOutput.WriteFooter(self.__html)
    self.__html.write(fileName)
コード例 #6
0
 def __init__(self, collector, logFileName, logState):
    self.__col = collector
    self.__logFileName = logFileName
    self.__logState = logState
    self.__maxDepth = SoarLog.DepthCalculator()(logState)
    self.__sdhg = SoarDocOutput.HrefGen(collector)
    self.__ag = AnchorGen()
    self.__colors = ['#f2f2ff',
                     '#e2e2ff',
                     '#d2d2ff',
                     '#c2c2ff',
                     '#b2b2ff',
                     '#a2a2ff',
                     '#b2b2ff',
                     '#c2c2ff',
                     '#d2d2ff',
                     '#e2e2ff']
    self.__lastCycle = -1
    self.__wroteCycle = 0
コード例 #7
0
   def __init__(self, collector, logName, logState, logUrl, logTgt):
      self.__col = collector
      self.__logName = logName
      self.__logState = logState
      self.__logUrl = logUrl
      self.__logTgt = logTgt
      self.__sdhg = SoarDocOutput.HrefGen(collector)
      self.__ag = AnchorGen()
      self.__stateTab = {}
      self.__opTab = {}
      self.__prodTab = {}
      self.collectObject(None, logState)

      self.OpIdxFile = logName + 'OpIdx.html'
      self.ProdIdxFile = logName + 'PrIdx.html'

      self.__logNavScript = """
         function logNav(f, s) {
            window.open(window.document.forms[f][s].value, "%s")
         }
      """ % (self.__logTgt,)
コード例 #8
0
 def writeOpIndex(self):
    html = self.createDoc()
    self.writeHeader(html)
    html.append(HTMLgen.Header(2, 'Operator Summary for %s' % self.__logName))
    opNames = self.__opTab.keys()[:]
    opNames.sort()
    t = HTMLgen.TableLite(width='100%')
    html.append(t)
    t.append(HTMLgen.TR(
                HTMLgen.TH('Operator'),
                HTMLgen.TH('Description'),
                HTMLgen.TH('Cycles'), align='left'))
    trBgColors = ['white', '#f2f2ff']
    c = 1
    for opName in opNames:
       tr = HTMLgen.TR(bgcolor=trBgColors[c],
                       valign='top')
       self.writeOpEntry(tr, opName, self.__opTab[opName])
       t.append(tr)
       c = not c
    SoarDocOutput.WriteFooter(html)
    html.write(os.path.join(Config.Instance().OutputDirectory,self.OpIdxFile))
コード例 #9
0
ファイル: soardoc.py プロジェクト: aahlad/soar
def WriteAutoDocFile(collector, dm):
    cfg = Config.Instance()
    SoarDocOutput.CreateOutputDirectory()
    w = DocBlockWriter.Writer()

    # we append here since we may have read documentation from
    # an existing autodoc file and we don't want to blow it away.
    f = open(os.path.join(cfg.OutputDirectory, cfg.AutoDocFileName), 'a')

    # todo, write this as a 'diff/patch' file?

    # if there's no mainpage write a stub...
    if not collector.MainPage:
        f.write('##!\n')
        f.write('# @mainpage %s\n' % cfg.ProjectName)
        f.write('#\n')
        f.write('# <h1>Documentation for %s</h1>\n' % cfg.ProjectName)
        f.write('\n')

    for p in collector.Prods:
        if p.IsTemp():
            p.Type = p.GuessType()

    if dm:
        # for all undocumented productions, see if we can augment their
        # @problem-space and @operator properties with info from the
        # datamap
        # TODO - how can we handle this for documented productions?
        for ps in dm.GetProblemSpaces():
            psname = ps.GetName()
            for pname in ps.GetProductions():
                p = collector.GetObject(collector.ProdTab, pname)
                if p and p.IsTemp() and not psname in p.ProblemSpaces:
                    p.ProblemSpaces.append(psname)
        for op in dm.GetOperators():
            opname = op.GetName()
            for pname in op.GetProductions():
                p = collector.GetObject(collector.ProdTab, pname)
                if p and p.IsTemp() and not opname in p.Operators:
                    p.Operators.append(opname)

    # Now write everybody else that isn't documented.
    for b in collector.All:
        if b.IsTemp():
            f.write('# %s:%d\n' % (b.GetSourceFile(), b.GetSourceLineNo()))
            w(f, b)
            f.write('\n')
    # If there's a datamap, let's try to generate some problem-space and
    # operators...
    if dm:
        opParentMap = {}
        # look for undocumented problem spaces
        for ps in dm.GetProblemSpaces():
            if not collector.GetObject(collector.ProblemSpaceTab,
                                       ps.GetName()):
                f.write('##!\n')
                f.write('# @problem-space %s\n' % ps.GetName())
                f.write('# @brief Generated by SoarDoc from dmgen\n')
                # if there's an operator with the same name, we'll assume this
                # problem-space is a child of that operator
                if dm.GetOperator(ps.GetName()):
                    f.write('#\n')
                    f.write('# @operator %s\n' % ps.GetName())
                f.write('\n')
            for opName in ps.ProposedOperators:
                if not opParentMap.has_key(opName):
                    opParentMap[opName] = []
                opParentMap[opName].append(ps.GetName())

        # look for undocumented operators
        for op in dm.GetOperators():
            if not collector.GetObject(collector.OperatorTab, op.GetName()):
                f.write('##!\n')
                f.write('# @operator %s\n' % op.GetName())
                f.write('# @brief Generated by SoarDoc from dmgen\n')
                if opParentMap.has_key(op.GetName()):
                    opParents = opParentMap[op.GetName()]
                    f.write('#\n# @problem-space %s\n' % ' '.join(opParents))
                f.write('\n')
コード例 #10
0
ファイル: soardoc.py プロジェクト: aahlad/soar
        cfg.EvaluateOverride(override)

    try:
        dm = LoadXmlDatamap()  # load datamap if specified in config file
    except Exception, e:
        print 'Error: While loading XML datamap: ', e
        sys.exit(1)

    if not LogFile:
        # Recursively walk the input directory tree, creating docblock objects
        blocks = DirTreeWalker()(cfg.InputDirectory)
        # Collect blocks, removing duplicates, etc.
        c = BlockCollector.Collector(blocks, dm)
        if cfg.OutputFormat == 'html':
            # Write the documentation
            w = SoarDocOutput.Writer(c)
        elif cfg.OutputFormat == 'xml':
            WriteXmlFile(c)
        elif cfg.OutputFormat == 'autodoc':
            WriteAutoDocFile(c, dm)
        else:
            print 'Error: Unknown OutputFormat value "%s"' % cfg.OutputFormat
            sys.exit(1)
    else:
        p = SoarLog.Parser()
        try:
            state = p.Parse(LogFile)
        except IOError, e:
            print 'Error: While loading log file "%s": %s' % (LogFile, e)
        baseName = os.path.basename(LogFile)  # File name without path
        if cfg.LogOutputFormat == 'html':
コード例 #11
0
 def createDoc(self):
    html = HTMLgen.SimpleDocument(meta=SoarDocOutput.CreateGeneratorTags(),
                                  script=[HTMLgen.Script(code=self.__logNavScript),
                                          HTMLgen.Script(code=GetSoarDocNavScript())])
    return html