首页 > 其他分享 >mORMot and Open Source friends SynProject Tutorial (SynProject教程)

mORMot and Open Source friends SynProject Tutorial (SynProject教程)

时间:2024-06-10 16:21:35浏览次数:10  
标签:SynProject Lib pas mORMot added SQLite3 Open 2010 PM

mORMot and Open Source friends SynProject Tutorial--(SynProject 教程)

第一步

本页介绍SynProject的一些典型用法。

我们将为mORMot框架本身创建一个源代码存储库和相关的文档。

您要求文档,我们将通过SynProject自动生成它!

我们需要什么

因此,我们在硬盘上的D:\Dev\Lib文件夹中拥有所有mORMot框架源代码文件(主单元在D:\Dev\Lib\SQlite3,Synopse公共单元在D:\Dev\Lib)。

您可以直接从SynProject.zip下载二进制可执行文件。

将SynProject.exe文件解压缩到硬盘上的一个目录中。安装完成。

创建一个新项目--版本管理

启动SynProject。此时它会显示一个警告消息:

启动画面

您从未使用过SynProject,因此您没有当前项目可以工作。SynProject检测到了这一点,并要求创建一个新项目。

关于“项目”的说明

  • 请注意,使用SynProject,您可以同时处理多个项目。一个“项目”是一个软件实体,主要遵循市场和预算方法。您的公司有这样的“项目”。如果您不知道,请询问您的项目经理。
  • 一个“项目”存储在.dvs文件中。实际上,这个文件是一个有效的.zip归档文件,在其根目录下包含一个包含所有与项目相关参数(项目描述和目录,以及所有提交列表)的“commit”文本文件,然后是项目的所有源文件,这些源文件位于与源代码树的实际布局相对应的子文件夹中(实际上,SynProject以专有但非常高效的二进制格式存储源代码文件的“增量”或“差异”,以源代码文件名和提交号作为文件扩展名——十六进制编码)。
  • 在项目中,您可能拥有文档本身。正如在SynProject屏幕截图中所述,文档是一个扩展名为.pro的单个文本文件。

点击“是”,将显示一个向导屏幕。

向导第1页

根据下一张屏幕截图填写字段——这些字段是项目的主要参数(将保存在.dvs项目文件内的“commit”文件中):

请注意,这些参数可以从SynProject的主用户界面更改。

以下是这些参数/字段的一些说明:

  1. “根目录”是一个主要参数。所有文件都应该可以从该位置的子目录中检索。
  2. 由于在文档相关文件字段中输入了“Documents”,因此文档文件(例如纯文本文件.pro)将在此目录内找到。
  3. 对于同一产品,您可能有多种版本:一个项目被投票、开发和发布,然后另一个项目将对初始项目进行更新。产品相同,但项目随每次发布而演变。在您的硬盘上,每个版本或项目都将包含在子目录中,如ProductName\Release Name。
  4. 目录布局是根据指定的参数创建的(参见下面的第2步):例如,SQLite3.pro文件将在D:\Dev\Documents\SQLite3\Synopse SQLite3 Framework\Synopse SQLite3 Framework.pro中创建。
  5. 我们输入了设计输入(DI)的第一列表,这些列表将在项目的生命周期中演变。我们只放了两个设计输入的标题和一些用于引用它们的数值。您的项目经理或营销人员可能已经编写了这样的项目高级描述,并得到了您的CEO的批准:在这里使用官方文档中的编号。
  6. 由于我们已选中“SWRS有自己的子项”复选框,因此我们将能够将初始DI细分为更详细的软件规范。这有时会发生,因为营销人员可能对软件编程知之甚少……因此,在这里您将能够填补营销梦想与现实之间的差距……
  7. 所有设计输入都可以在项目生命周期中演变:SynProject将能够跟踪这些更改,整个项目的文档将始终保持同步和最新,即使营销决策发生变化……

然后点击“下一步”,并在必要时确认(点击“是”)。

现在,您的项目的详细布局参数显示在向导的第二页上:

向导第2页

默认情况下,参数(尤其是文件夹名称)用前一页字段填充。现在您可以自定义这些字段的内容。

  • 在文档文件夹内创建了一个名为“GG”的目录,用于存储临时GraphViz生成的图表:因此,这个目录名将被忽略;
  • 您必须指定哪些文件扩展名要添加到您的项目中——请注意,与其他CVS不同,SynProject会一次性添加所有这些文件:在我们的项目中,我们不需要基于文件的提交功能,但如果有必要可以添加——如果您需要它,请为这个GPL项目做出贡献!# .scr文件包含所有与跟踪器相关的问题;目前SynProject中没有包含跟踪器,因为我们使用PVCS来实现这个目的;因此,SynProject可以直接与PVCS交互,并从PVCS数据库中直接检索任何跟踪器条目——我们可能会在不久的将来添加与fossil的接口。
  • .man文件包含项目手册:它只是一个单一的文件,将创建一个唯一的文件——您最好使用主要的.pro文档,并向其中添加一个特定部分。
  • .pro文件是著名的主文档文本文件。
  • 由于在前面的向导步骤中选中了“SWRS有自己的子项”复选框,因此我们可以在这里自定义SWRS项。我们将暂时保留它,根据DI项的定义。
  • 然后可以设置提交模块:只需点击字段旁边的“...”按钮,即可弹出修改屏幕。第一个提交模块包含默认的源代码(我们将其更改为指向Lib\SQLite3);然后第二个提交模块指向与产品相关的文档(即.scr和.man文件);然后是项目/发布相关的文档(即.pro文件)。如有必要,您可以在目录树中添加其他提交模块。请注意,我们不会包含整个D:\Lib文件夹,因为它们不都是SQLite3框架本身的一部分。它们将由另一个项目跟进。

当您点击“保存更改”按钮,并通过“是”按钮确认后,所有必要的文件夹和文件都将被创建。

对以下通知窗口回答“是”:

image

对以下通知窗口要求创建的目录回答“是”:

image

以及对这一个回答“是”:

然后,系统将要求您连接到PVCS跟踪器。由于我们现在不使用它,请点击“取消”:

image

通过“是”确认与发布相关的目录创建:

img

现在,SynProject已经创建了所有必要的文件和目录。

我们的第一个提交

SynProject的主屏幕将出现,上面显示刚刚创建的“Synopse SQLite3框架”项目,如窗口的主要标题栏所述:

image

目前它是空的。

我们将通过按下“提交”按钮进行第一次提交。它会显示以下窗口:

image

输入提交描述和下面的注释;
您可以将此提交与跟踪器条目(在.scr文件中)相关联——请注意“添加到PVCS作为模块”复选框,它允许您将相应的提交添加到所选的PVCS跟踪器条目中。
可以指定此提交的范围:在这里我们选择所有文件夹(主项目源代码、产品文件夹、发布文件夹)。
当按下“提交所选”按钮时(点击“提交全部”应该产生相同的结果),所有相应的源代码文件都将添加到存储库中。将出现一个日志屏幕,详细列出所有修改。日志屏幕的内容大致如下:

First commit
------------
 0 file(s) deleted
 
 61 file(s) modified/added
    Lib\SQLite3\c.bat added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\Project01.dof added, on 6/29/2010 6:51:22 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\Project01.dpr added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\Project01.res added, on 6/29/2010 6:51:06 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\SampleData.pas added, on 6/29/2010 6:51:20 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\Unit1.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\Samples\01 - In Memory ORM\Unit1.pas added, on 6/29/2010 6:51:30 PM
    Lib\SQLite3\Samples\02 - Embedded SQLite3 ORM\Project02.dof added, on 6/29/2010 6:53:52 PM
    Lib\SQLite3\Samples\02 - Embedded SQLite3 ORM\Project02.dpr added, on 6/29/2010 6:53:52 PM
    Lib\SQLite3\Samples\02 - Embedded SQLite3 ORM\Project02.res added, on 6/29/2010 6:52:44 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Client.dof added, on 6/29/2010 6:54:32 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Client.dpr added, on 6/29/2010 6:54:22 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Client.res added, on 6/29/2010 6:54:02 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Server.dof added, on 6/29/2010 6:56:08 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Server.dpr added, on 6/29/2010 6:56:00 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Project03Server.res added, on 6/29/2010 6:55:58 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Unit2.dfm added, on 1/24/2010 5:33:26 PM
    Lib\SQLite3\Samples\03 - NamedPipe Client-Server\Unit2.pas added, on 6/29/2010 6:56:06 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Client.dof added, on 6/29/2010 6:56:28 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Client.dpr added, on 6/29/2010 6:56:24 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Client.res added, on 6/29/2010 6:56:22 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Server.dof added, on 6/29/2010 6:57:12 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Server.dpr added, on 6/29/2010 6:56:52 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Project04Server.res added, on 6/29/2010 6:56:50 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Unit2.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\Samples\04 - HTTP Client-Server\Unit2.pas added, on 6/29/2010 6:58:32 PM
    Lib\SQLite3\Samples\05 - Report created from code\TestSQLite3Pages.dpr added, on 6/30/2010 6:16:24 PM
    Lib\SQLite3\Samples\05 - Report created from code\Unit1.dfm added, on 6/30/2010 7:07:06 PM
    Lib\SQLite3\Samples\05 - Report created from code\Unit1.pas added, on 6/30/2010 7:04:40 PM
    Lib\SQLite3\ServiceTestForm.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\ServiceTestForm.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\ServiceTestSQL3.dof added, on 7/10/2010 6:48:08 PM
    Lib\SQLite3\ServiceTestSQL3.dpr added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\ServiceTestSQL3.res added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\sqlite3.c added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3.pas added, on 7/5/2010 6:53:14 PM
    Lib\SQLite3\SQLite3BtnOk.bmp added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3Commons.pas added, on 7/12/2010 10:54:16 AM
    Lib\SQLite3\SQLite3FastCgiServer.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3HttpClient.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3HttpServer.pas added, on 7/5/2010 5:43:20 PM
    Lib\SQLite3\SQLite3i18n.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3Pages.pas added, on 7/10/2010 6:51:22 PM
    Lib\SQLite3\SQLite3Service.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3ToolBar.pas added, on 7/6/2010 9:00:06 PM
    Lib\SQLite3\SQLite3UI.pas added, on 7/6/2010 9:00:06 PM
    Lib\SQLite3\SQLite3UILogin.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UILogin.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UILogin.png added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UILogin.rc added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UILogin.RES added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UIOptions.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UIOptions.pas added, on 7/6/2010 9:00:06 PM
    Lib\SQLite3\SQLite3UIQuery.dfm added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\SQLite3UIQuery.pas added, on 6/27/2010 5:24:14 PM
    Lib\SQLite3\TestSQL3.cfg added, on 7/4/2010 3:30:32 PM
    Lib\SQLite3\TestSQL3.dof added, on 7/5/2010 5:56:00 PM
    Lib\SQLite3\TestSQL3.dpr added, on 7/5/2010 5:56:00 PM
    Lib\SQLite3\TestSQL3.dproj added, on 7/5/2010 4:54:26 PM
    Documents\SQLite3\Common\SQLite3 Framework.scr added, on 7/12/2010 1:18:14 PM
    Documents\SQLite3\Synopse SQLite3 Framework\Synopse SQLite3 Framework.pro added, on 7/12/2010 1:19:46 PM
 
 "First commit" Commit performed in 0.4 s.
 
 -=- Process complete: press Escape or Enter to close the form -=-

请注意,所有Delphi源代码文件都已被添加,以及来自相关文档文件夹的.scr和.pro文件。

使用Esc键关闭日志屏幕。

现在主屏幕包含了提交信息。只需点击提交行,所有对应的文件就会出现在下一列中。双击任何文件可以直接在SynProject中查看其内容。

本地版本

制作文档

默认情况下,Synopse SQLite3 Framework.pro文件已被创建,并根据基本模板填写了内容。

整个文档过程遵循完整的覆盖范围,符合ISO/IEC最佳实践:

img

如果上述布局不能满足您的需求,您可以向上述步骤中添加自己的文档或要求。或者,您也可以仅使用其中的一部分,例如SAD或测试。但是,当整个文档集都在工具内维护时,SynProject的主要优势将变得显而易见。

从SynProject的主屏幕中,点击“Docs”按钮(带有Word图标的那个),或按F2键以显示主要发行版文档编辑器:

image

提示:您还可以启动工具,并指定.pro文件名作为命令行参数,以绕过整个.dvs/版本控制功能。也就是说,如果您将.pro文件扩展名与SynProject.exe相关联,只需双击.pro文件即可打开任何文档。

现在我们将对文件内容进行一些更改。模板目前相当基础……但更新文档很容易。

文档文件的结构类似于标准的.ini文件,即包含一些[节]:

一些节是SynProject必需的,如[People]、[Project]、[DILayout]或[Pictures]。
一些节是相应文档的主要参数,如[DI]用于设计输入,[RK]用于FMEA/系统级风险评估,[SRS]用于SRS/SWRS,即软件需求规范,[Risk]用于与DI相关的风险评估,[SAD]用于软件架构文档(及其相关的[SAD-Source]和[SAD-modules]节),[SDD]用于软件设计文档,[VV]用于软件验证和验证计划,[Test]用于测试协议,[SCRS]用于软件更改请求汇总表,以及[Release]用于发行说明。这些节将具有子节,根据初始[DILayout]内容或[SRS]的子节进行编号。例如,向导为您创建了[DI-1.1]、[DI-1.2]、[DI-2.1]和[DI-2.2]节,以及相应的[SRS-*]节。
每个[节]首先以与节相关的参数开始,作为头部以Name=Value对的形式存储。当出现空行或以:开头的标题时,头部结束。

为了浏览文档内容和所有这些节,您可以:

  • 点击编辑器最左侧列中的任何项:它将仅显示[节]的内容,右侧为头部(作为Name=Value对),左侧为主体内容,如下面的屏幕截图所示:

img

  • 点击编辑器最左侧列中的第一个项(名为"* Whole file"的那个)以一次显示整个文件内容:这是处理文档的最有用方式。
  • 在* Whole file模式下,您可以左键点击屏幕上出现的第二个列表中的任何项以转到该节。
  • 在* Whole file模式下,您可以右键点击屏幕上出现的第二个列表中的任何项以弹出菜单,并浏览所有节和子节以到达您选择的节。
  • 按F10键以显示所有文档标题的列表(请注意,在此屏幕上,在键盘上键入将搜索内容)。

现在我们将点击向导按钮(位于“floppy/save”按钮和“Word”按钮之间)以创建必要的设计输入内容。

main_screen

请注意,向导能够修改文档的大部分内容。特别是,大多数节的头部可以从用户界面上的字段轻松编辑,这对您来说可能很方便。

以下是文档向导的主屏幕:

只需点击您想要访问的页面。我们将点击“3 - 设计输入详情”,然后更新设计输入值。点击左侧列表中的一个DI项,然后更改右侧字段的内容,再点击另一个DI项,并确认保存更改。

“风险评估”需要填写一些值。请注意,我们将在关联的请求和风险理由中填写“初始发布”,因为这是项目的首次发布。

以下屏幕内容:

following_screen

将被向导转换为以下文档值:

[DI-1.1]
Risk=1,1,3,Arnaud Bouchez,Initial release
Request=Initial release
Ident=The framework must be Client/Server oriented

;该框架必须是客户端/服务器导向的

解析源代码

现在,我们将设置SAD(软件架构文档)参数,这将允许解析源代码并从中检索有用信息。

从向导中,我们将点击“13 - 软件架构模块”页面。然后点击第一个模块项(即“SAD-Main”),通过点击“是”确认其创建。接着,我们为这个模块输入一个显示名称和一个版本号。我们在[SAD]部分输入了“DefaultPath=D:\Dev”作为参数。因此,我们只需在“源路径”字段中输入“Lib\SQLite3”。我们将输入“TestSQL3.dpr”作为主源代码文件:此文件名将被解析,所有使用的单元将被添加到主存储库中。

我们需要通过点击“SAD-Main”项来保存此项的更改,以便启用“包含路径”和其他字段。我们只在包含路径中输入“Lib;Lib\SQLite3”,以便所有常见的Synopse库单元(如SynCommons或SynPDF)将与库一起被解析。

该模块的页面将如下所示:

模块的页面

然后,我们强制SynProject解析所有源代码。从编辑器的主工具栏中,我们点击“Word”按钮,然后选择“SAD”文档,再点击名为“再次解析所有源代码”的特殊命令。

Parse_all_source_code_again

请注意,源代码将被解析(速度非常快),并且SynProject将创建两个文件:

  • 在D:\Dev\Documents\SQLite3\Synopse SQLite3 Framework目录下的Synopse SQLite3 Framework.sad文件,包含所有解析结果,即注释和函数/类的声明。它只是一个与.zip兼容的归档文件,每个单元一个文件,包含PasDoc类的数据流和压缩数据。
  • 在C:\Users\UserName\Documents\Synopse SQLite3 Framework\目录下的SAD.log文件,即生成的所有Word(.doc)文档所在的目录。这个SAD.log文件包含源代码解析的日志文件。例如,它将包含我们SQLite3框架的日志。
7/12/2010 2:27:44 PM
 Info[0]:    Cache file = D:\Dev\Documents\SQLite3\Synopse SQLite3 Framework\Synopse SQLite3 Framework.sad
 Info[0]:    #&91;SAD].Source = Main FillUnits(SAD-Main) -> TestSQL3.dpr
 Info[0]:    DefaultPath = D:\DEV Info[0]:    IncludePath = Lib;Lib\SQLite3
 Info[0]:    OutdatedCacheAutoRecreate is ON
 Info[2]:    Now parsing file Lib\SQLite3\TestSQL3.dpr...
 Info[2]:    Now parsing file Lib\SynCrtSock.pas...
 Info[2]:    Now parsing file Lib\SynCommons.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3Commons.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3FastCgiServer.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3HttpClient.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3HttpServer.pas...
 Info[2]:    Now parsing file Lib\SynZip.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3i18n.pas...
 Info[2]:    Now parsing file Lib\SQLite3\SQLite3Service.pas...
 Info[2]:    Now parsing file Lib\SynSelfTests.pas...
 Info[2]:    Now parsing file Lib\SynCrypto.pas...
 Info[2]:    Now parsing file Lib\SynWinSock.pas...
 Info[2]:    Now parsing file Lib\SynPdf.pas...
 Info[2]:    Write new data to cache

 Info[2]:    Files not found during process:
Classes.pas,ComCtrls.pas,Contnrs.pas,Controls.pas,ExtCtrls.pas,FastMM4.pas,Forms.pas,Graphics.pas,LibC.pas,Menus.pas,Messages.pas,StdCtrls.pas,SysUtils.pas,Types.pas,UxTheme.pas,Windows.pas,WinSVC.pas

然后,我们将从源代码创建所有图表,通过从SAD文档中选择以下私有菜单来实现:

image

在Vista或Windows 7下,或者在Windows XP系统下如果您不是以管理员身份登录计算机,您首次尝试生成图表时可能会收到一个错误消息。这是因为内部GraphViz引擎需要向系统注册一次。要解决这个问题,您可以执行屏幕上指定的命令行命令,或者以管理员身份运行SynProject.exe一次(右键点击SynProject.exe,然后选择“以管理员身份运行”),然后以管理员身份创建一些图表。之后,您可以退出SynProject,并以当前用户权限再次运行它,这时生成图表应该不会有问题了。

然后,我们直接点击SAD/SAD菜单项,软件架构文档(作为.rtf文件)将被创建。接着,这个.rtf文件会使用Word软件本身转换为原生的Word文档,然后打开的就是生成的Word文档。您还可以选择“SAD pdf”选项来直接渲染一个.pdf文件(这要求您的计算机上安装有Office 2007或更高版本),而无需打开原始的Word文档——如果文档包含大量数据,直接打开可能会很慢。

请注意,SynProject创建.rtf文件的速度非常快,但大部分时间都花在了Word软件上,用于从.rtf格式转换为原生的.doc格式,特别是如果文档中包含大量图表和超链接的话。不过,您可以使用SynProject创建超过1000页的Word文档,而不会遇到任何问题。虽然Word在处理大量数据时可能会运行缓慢,但SynProject本身不会因为数据量太大而出现问题。

您可以从sampledoc.zip直接下载一个由SynProject生成的示例Word文档。

文档格式

正如您可能已经观察到的,.pro文件内容中使用的格式非常容易遵循。

它被分为括号内的部分(如[DI]),每个部分包含一个头部(以Name=Value对的形式)和一个部分主体(通常用于生成文档的主体内容)。

您可以在任何您想要的地方添加注释,只需在任何行的开头加上一个分号(;)。

您可以在文本中使用RTF编码:{\i 表示斜体},{\b 表示粗体},{\ul 表示下划线},{\f1 表示Courier/等宽字体}。编辑器的工具栏上有一些对应的按钮:只需选择一些文本,然后点击这些按钮(或按Ctrl+I、Ctrl+B、Ctrl+U、Ctrl+0键),即可使用相应的RTF属性格式化所选文本。您可以看到,SynProject的集成编辑器了解这些快捷键,并在屏幕上以适当的属性显示文本。

文档标题仅是一行以冒号(:)开头的文本。

文档段落只是一行文本。在SynProject中,每行文本都有一个段落。您可以使用原始RTF命令\line(或Ctrl+K快捷键)强制“下一行”换行。您可以使用工具栏上相应的按钮在编辑器中自动换行段落。但SynProject将自行完成大部分文档布局。专注于内容,SynProject将负责布局。

空行将被忽略。它们可能仅在将节的头部与其主体内容分开时有用。

列表可以在文档中编写,仅需在每行开头使用连字符(-)字符即可。您可能已经注意到,段落前后都有一个空格。如果您在行的第一个位置放置多条带有连字符的行,则所有这些行都将被格式化为列表,而不会在行内容前后留下这些空格。

可以轻松地将源代码插入文档中。只需将代码复制并粘贴到SynProject编辑器中,然后在源代码行的第一个位置放置一些专用字符:! 表示Pascal/Delphi,& 表示C或C++,# 表示C#,µ 表示Modula-2,$ 表示常规文本。工具栏上有对应的按钮:只需选择几行,然后点击按钮并选择正确的代码格式——第一个字符将添加到所选每行的第一个位置。

如果您在行的第二个位置放置一个!字符(在! & # µ $字符之后),源代码将被高亮显示:在文档中将以黄色显示。

可以使用以%字符开头的行插入图片。首先使用工具栏上对应的按钮,然后插入一行%filename.jpg。文档文件开头的[Pictures]部分包含所有使用的图片的列表。必须将图片复制到当前文档目录,即.pro文件所在的文件夹。

插入表格需要三个步骤。首先,通过第一行定义列宽,如“|%30%40%30”——它将根据当前页面宽度定义三列,宽度分别为30%、40%和30%。然后,像“|Col 1|Col 2|Col 3”这样放置您的文本:文档中的每一行都是一个行,列内容之间用|字符分隔。当所有行都插入后,用一行“|%”结束表格。

您可以在表格单元格中嵌入图片,例如,使用@=%picture.png@——在这种情况下,这不是一个“按钮”——请参阅下一项。

您可以添加“按钮”,即链接到另一个项,使用@SectionName@(如@DI-4.1@)或@DocName@(如@SRS@)或@PeopleName@(如@Arnaud Bouchez@)或@%Picture.png@。报告将包含链接的名称和页面。

Internet链接将被处理为超链接,使用@http://synopse.info的语法

在[SDD-*]部分中,为每个文件名指定@Module\filename.pas@,为修改过的文件名指定@!Module\filename.pas@,或为指定的过程名指定@!procedurename!Module\filename.pas@。相应的单元(和过程)将在[SAD]文档中被高亮显示,并在其第二部分列出。只需点击按钮即可显示对象浏览器窗口,并通过几次点击选择单元名称和函数/类。

使用=[SectionName]在当前位置包含该部分的内容。

一些特殊行被解释为命令:它们的第一个字符必须是反斜杠,即\字符。

所有可输入的特殊行命令列表:

\page 强制新的一页
\landscape 将页面方向更改为横向
\portrait 将页面方向更改为纵向
\footer blabla 更改页脚文本
\Layout 添加一个包含所有DILayout标题的列表
\LayoutPage 同上,但还包括文档中的相关页面
\risk 添加风险评估量表表格
\Source(用于[SAD]部分)添加Source=..模块的列表
\SourcePage 同上,但还包括文档中的相关页面
\include filename.ext 将任何文本文件附加到文档内容——文本格式的类型假设来自文件名扩展名本身(例如,some.pas文件将以Delphi/pascal源代码文件的形式显示)
\graph UniqueImageName [Title] 然后是后续行,可以是.dot纯文本,也可以是"\From Text\To Text[\两者之间的标签]"——按F12键打开对话框
\TableSoftwareChanges\TableTraceabilityMatrix 用于SCRS
\TableNewFeatures\TableBugFixes\TableTests[=October 16, 2008] 用于发行说明
\TableDI=6.3.1.2,6.3.1.3 用于包含所有提供的设计输入的表格
\TableDocuments[=DI,SRS,SDD,SAD] 用于包含提供的文档细节的表格
\Implements TableImplementsName #.# [Description][\DocumentName](如 \Implements ISO 4.3 Software safety classification)在文本中指向当前文档或指定的DocumentName
\TableImplements=TableImplementsName(如 \TableImplements=ISO)创建列表,按升序的#.#数字排序,如果有描述则包含描述和相应的文档

问题与评论

您可以使用我们的论坛和SynProject专用部分来发布您的评论或反馈。

我希望我对SynProject的介绍能引起您的兴趣。

而且别忘了,它是作为开源发布的:欢迎您贡献,并根据您的需求进行调整——当然,前提是遵循GPL许可条款!

标签:SynProject,Lib,pas,mORMot,added,SQLite3,Open,2010,PM
From: https://www.cnblogs.com/hieroly/p/18240358

相关文章

  • 书生·浦语大模型实战营 第七节课 OpenCompass 大模型评测实战(内容扩展)
    读前感:对这个章节实际上并没有特别多的兴趣,可能在为了评估自己训练的RAG或FT时可以用到。读后感:本章节内容扩展比较多,在教程之外,手把手重新做了一整套的数据集并进行了测试。有兴趣的可以关注一下。学过之后才深刻感受到大模型的测试评估是大模型应用的基础,只未来必不可少......
  • ollama qwen2 运行&openai 兼容api 测试
    qwen2模型已经发布了,各种新闻都说很不错,所以通过ollama测试下安装ollamaclicurl-fsSLhttps://ollama.com/install.sh|sh启动服务ollamaserve拉取qwen2:1.5b模型使用了api模式clicurl-XPOSThttp://localh......
  • openEuler 24.03 LTS - 华为欧拉开源版(华为 RHEL 兼容发行版)
    openEuler24.03LTS-华为欧拉开源版(华为RHEL兼容发行版)华为红帽企业Linux兼容发行版请访问原文链接:https://sysin.org/blog/openeuler/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgopenEuler通过开放的社区形式与全球开发者共同构建一个开放、多元和架构......
  • 1.安装opencv-python失败的解决办法 2.pip 安装失败 3.WARNING:Ignoring invalid distr
    问题:安装opencv-python失败:用:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleopencv-python安装会被卡在Buildingwheelforopencv-python(pyproject.toml)...之后便安装失败。使用顺序:先使用方法二,再使用方法一(有可能不会解决问题),用方法三查看问题出......
  • OpenAI 推出适用于 .NET 的 OpenAI 库
    微软宣布面向.NET开发人员官方OpenAI库。OpenAI库支持完整的OpenAIAPI和OpenAI的最新旗舰模型GPT-4o,该模型可以实时推理音频、视觉和文本。OpenAI.NETAPI库目前提供第一个测试版,可通过NuGet 访问。OpenAI.NETAPI库是微软与OpenAI合作的成果,它提供了从.N......
  • [AI资讯·0609] SamAltman建立了庞大投资帝国,通义千问Qwen2发布即爆火,OpenAI泄密者公
    AI资讯奥特曼28亿「投资帝国」曝光!不要OpenAI股份,当CEO最不赚钱开源超闭源!通义千问Qwen2发布即爆火,网友:GPT-4o危OpenAI泄密者公布165页文件:2027年实现AGI、计算集群将耗资千亿美元清华系细胞大模型登Nature子刊!能对人类2万基因同时建模奥特曼百万年薪挖角谷歌TPU人才,欲砸7万......
  • OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:实战|OpenCV实现扫描文本矫正应用与实现详解(附源码)1导 读    本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。    2背景介绍  在使用打印机或扫描仪......
  • SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出
    目录1OpenFeign连接池1.1常见连接类型1.2连接池使用方法1.2.1引入依赖1.2.2开启连接池功能1.2.3配置完成,重启实例即可,底层将更改设置。2OpenFeign最佳使用方法2.1每个微服务都是单独的project,内部有三个独立模块2.2每个微服务都是一个module,一个project,内设......
  • 基于OpenCV的SIFT算法实现图像拼接(全景图像)
    一、SIFT算法尺度不变特征转换(Scale-invariantfeaturetransform或SIFT)是一种机器视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变数,此算法由DavidLowe在1999年所发表,2004年完善总结。SIFT算法的实质是在不同的尺度......
  • OpenAI年薪仅6.5万美元,奥特曼却掌控28亿美元创业帝国 | 最新快讯
    6月7日消息,尽管萨姆·奥特曼(SamAltman)作为OpenAI的联合创始人兼首席执行官而广为人知,但他在风险投资和创业投资领域的角色同样重要。鲜为人知的是,奥特曼掌管着价值超过28亿美元的投资帝国,这与他在OpenAI领取的6.5万美元薪资形成了鲜明对比。他的家族办公室正在管理这一帝国,涵......