为 fortran-lang.org 贡献内容#

Fortran-lang.org 是开源的,欢迎贡献!

简介#

网站是如何编写的?

网站内容主要以 Markdown(Myst 风格)、HTML 和 YAML(用于数据)的组合编写。此源代码被编译成纯 HTML,也就是您在最终网站上看到的。

该网站是静态的,这意味着一旦构建完成,网站上的内容对所有用户都是相同的;这与许多动态网站形成对比,动态网站可以根据用户和用户提供的输入提供不同的内容。

网站的结构组件使用 Sphinx 静态网站生成器来实现静态功能,并使用 JavaScript 来实现动态功能。

我需要了解 HTML 才能贡献吗?

网站的大部分内容都是使用 Markdown 编写的,这是一种用于格式化文本的简单标记语言 - 如果您以前从未使用过它,请不要担心,它非常容易上手!

网站是如何构建的?

Fortran-lang 网站使用基于 Python 的 Sphinx 静态网站生成器 来编译 RST、Markdown 和 HTML 文件。建议贡献者在开发计算机上安装 Python,以便能够在本地预览更改,但这并非强制性要求,因为可以在拉取请求过程中生成站点预览(有关更多信息,请参见下文)。请参阅 README.md,了解如何设置 Sphinx 并构建网站。

GitHub 存储库的默认分支仅包含网站的“源代码”,而不包含最终编译结果;每次推送更新时,自动服务都会编译此源代码,并将编译结果存储在 gh-pages 分支上,该分支在 https://fortran-lang.cn 上提供服务。

因此,作为贡献者,您只需将更改上传到网站源代码,而无需上传编译结果,因为这是从默认分支上的源代码自动构建的。

工作流程#

对网站的贡献是通过向 github 存储库提交拉取请求来完成的:https://github.com/fortran-lang/webpage/

执行此操作的工作流程采用以下形式

  1. 创建/更新网页的个人 fork。

  2. 在您的 fork 中创建一个新分支。

    • 分支名称应简洁地描述您的贡献,例如 fix-spelling-homepageupdate-compiler-info

  3. 在本地分支上执行您的更改。

  4. 将您修改的分支推送到您的 fork。

    • 例如 git push --set-upstream origin fix-spelling-homepage

  5. 从您修改的 fork 分支向 fortran-lang/webpage 创建一个拉取请求。

注意:在打开拉取请求之前,您必须使用 Sphinx 在本地构建您的更改(请参阅 README.md),以验证您的更改是否正确构建并按预期呈现。

注意:在打开拉取请求后,您可以继续将更改推送到您的 fork 分支 - 拉取请求将相应更新。

您的拉取请求将由社区的其他成员审查,他们可能会要求您进行更改。GitHub 在其网站上提供了一个简单的界面,只需点击一个按钮即可应用(或拒绝)任何审阅者建议的更改。这避免了必须手动将建议复制到您的本地副本并再次推回。如果您使用“提交建议”按钮,则如果打算从您的计算机推送更多编辑,则需要使用 git pull 更新计算机上的本地副本。

一旦您的拉取请求获得批准(通常由至少两名其他社区成员批准),维护人员就会将其合并到网页默认分支中,此时它将发布到 fortran-lang.org 网站。

如果需要,存储库维护人员可以构建您建议更改的公共预览,该预览可在 fortran-lang.org/pr/<pr_id>/ 处查看,其中 <pr_id> 是您的拉取请求的数字标识符。

这允许审阅者直接查看您的 PR 生成的结果。

注意:如果您随后将提交推送到您的拉取请求分支,则必须通过在拉取请求中添加“#build_preview”评论来重新构建拉取请求预览。

拉取请求合并并成功呈现后,工作流程将删除预览构建。

注意:如果您的拉取请求预览链接无法正常工作或在重新构建后未更新,请尝试在 URL 末尾添加一个随机参数,例如 https://fortran-lang.cn/pr/98?v=2 - 参数的名称和值无关紧要,但每次更新都使用不同的值。这将强制 GitHub 内容交付网络为您提供更新的版本,而不是过时的缓存版本。

样式指南#

Markdown#

  • 将代码摘录放在 代码块 中,由反引号 (```) 表示。对于内联代码摘录、编程语言关键字、变量名称和文件名,使用内联代码样式 (`code`)。

  • 每行源代码最多包含一个句子,并将长句子分解成多行 - 这对于避免在 github 上出现大型 git diff 和代码审查块非常重要。

图标包#

图标是通过分解单调的文本段落并提请注意标题或关键信息,从而轻松改进页面美观的简便方法。

fortran-lang.org 上可以使用三个图标包。

示例:Font awesome

<i class="fas fa-info-circle"></i>

示例:Sphinx design Myst 指令

{octicon}`book;1em;sd-text-info`

访问相应的网站以浏览可用的图标。

页面内容#

对于较长的页面,显示超链接的页面内容有时会很有帮助。页面 TOC 树已自动化,并将生成当前页面的 TOC。而生成 Fortran-lang.org 上整个目录的 TOC 的方法是

对于 MD 中的页面

在目录的索引页末尾添加 toc tree 指令,其中包含该目录中所有文件的名称。

````{toctree}  
:hidden:
ARRAY_index 
```` 

教程#

迷你教程内容指南。

常规#

使用 book 布局。

遵循 Markdown 指南

代码风格#

使用两个空格进行缩进,缩进单元体的正文,但将 contains 语句保持与其 moduletype 相同级别。尝试将行长限制在 90 个字符。这些注意事项应使代码更易于阅读,并更易于在视口宽度较小的设备上查看。

module m
  implicit none
  private
  public :: a_t

  type :: a_t
    integer :: val
  contains
    procedure :: func
  end type a_t

contains

  subroutine func(self)
    class(a_t), intent(in) :: self
    if (self%val > 0) then
      print *, self%val
    end if
  end function func

end module m

每个代码块都应具有 0 的基本缩进级别,即使将其放入更大的上下文中也会缩进。

integer :: i1  ! yes
  integer :: i2  ! no

避免垂直对齐 :: 和内联注释,因为这会增加维护负担,并且在大多数情况下会增加行长。

如果代码块包含无效的 Fortran 行,请将其保留为无语言代码块,以避免语法高亮显示的红色框。

module <module name>
...
end module <module name>

在表达式中随意省略空格,只要有助于可读性即可,但通常在运算符周围包含空格。

y1 = a * b
y2 = a*b + c*d  ! instead of a * b + c * d
y3 = a**2 + 1
y4 = (a*b + c*d) / 2
s3 = s1 // s2

通常在逗号后添加空格,但在使用短索引值或变量名进行索引时除外。

a(:,1)
a2(1:10, 2:5)
b(i,j)
b2(long_i_name, long_j_name)
b3(i + 2, j)
call some_subroutine(a, b, an_option=.false.)
c = [1, 2, 3, 10]
d = [(i, i = 1, 10)]
do i = 1, 10
! ...

除了简单的索引之外,其他可以省略空格的情况

  • 导入中的别名

    use, intrinsic :: iso_c_binding, only: sp=>c_float, dp=>c_double
    
  • 字符串连接

    print *, 'hello '//'world'
    
  • 访问派生类型的组件(属性)

    p%x
    p%calc_something(a, b)
    
  • 在传递关键字参数时,= 左右

    call sr(a, b, c=3)
    point = t_point(x=1., y=2.)
    character(len=:), allocatable :: s
    

内联注释的首字母大写,但仅由一个单词或短语组成的尾随内联注释除外。

! Compute new values
y = m*x + b  ! meters

这些代码风格建议与DFTB+ 风格指南中的建议类似。

文本#

使用句子式大小写(而不是标题式大小写)作为页面和章节标题。

在首次引入关键术语/短语时,以及为了强调等情况,使用强调*emphasis*/_emphasis_,渲染为斜体)。

避免在段落中使用粗体**strong**,渲染为粗体),因为粗体样式用于标题、突出显示示例(示例:)、警告/旁注标题等。

在适当的情况下,使用警告/旁注(注意提示重要)。

  • 要向 md 文档添加注意,请使用

::::{note}
extra information, something that might appear in a footnote
::::: 
  • 要向 md 文档添加提示,请使用

::::{tip}
information about best practices, practical tips
::::: 
  • 要向 md 文档添加重要文本,请使用

::::{importrant}
warnings, things to avoid, etc.
::::: 

建议使用牛津逗号。它通常使事情更清晰。

Fortran 速度快、有趣且闻名。