Gnumeric Styleguide v0.1 by Kevin Breit (mrproper ximian com) Purpose: Gnumeric 1.0 came included with over 400 pages worth of documentation. While generally complete in content, the documentation was unsatisfactory in regards to organization. The organization made navigating the SGML files a challenge. Gnumeric 1.2 is going to be a port to Gnome 2.0. In this port, the documentation is going to require a port to XML. While not a large effort, the port is generally a good time to reorganize, if not rewrite, the Gnumeric documentation. For the documentation to be easy to navigate, the documentation needs to follow understood standards. This document outlines the said standards to follow while writing the documentation. Content: This paper outlines the following items: * Indenting * File naming * Section naming * Tags * Chapters * Screenshots * emacs goodies Indenting: Indenting is a very contraversial topic among most programmers. I have found my favorite styles and found most people use the same way. Indenting will use 2 spaces. If you're using emacs with psgml mode as your text editor, you can set the indenting to 2 using the SGML -> File Options -> Indent Step menu option. A carriage return occurs after most tags and is mostly indented. The following are exceptions to a return after a tag: <application> <xref> <graphic> For example, to define a section, you would use the following format: <sect1 id="intro"> <title>Introduction ... File Naming: Files should all end with .sgml. They should also be an annotated version of the chapter title. All files should also be prefixed with the type of file they are. For example, a file describing how to do basic navigating of the Gnumeric interface would be a "usage" file. This would be named usage-navigation.sgml. If a file grows to be too large for one file, it can be changed to be two or more files. These should associate by name to the parent file. If the previous example had a section about using the keyboard, the file would be called: usage-navigation-kbd.sgml. Filenames are hyphen delimited. Section Naming: Sections should be both an abbrivated version of their title as well as their parent section. These are hypen-delimited. An author should be able to open up a section in an SGML section title and be able to identify the parent sections. For example: Introduction ... What is Gnumeric? ... Tags: Tags should be used promiscuously in the documentation, even when formatting is not changed due to the tag. All application names should be wrapped in the tag, menus should be wrapped in , and so on. Chapters: Chapters should be defined in the file which encompasses with them. The entity for the chapter will of course be defined in the gnumeric.sgml file. The tag will be issued in the chapter files. This will help to make associating files to content easier for new writers. Number of chapters should be kept to a reasonable minimum. Only one chapter should occur per file as well. Screenshots: Screenshots will follow the GDP's guidelines for screenshots. For up to date information on screenshot requirements, please see the GDP guidelines on CVS: /cvs/gnome-docu/gdp/style/screenshots.sgml emacs Goodies: This section is in no way a guideline on style. This is a kind of...reward for reading through this, and hopefully following this. It includes some nifty emacs tricks which I have learned. The first and foremost is nearly a requirement for you emacs users: psgml mode. psgml mode is used for dealing with XML, SGML, and HTML. It is very useful, and comes default with most distributions. The following tips are dependent on psgml mode. Once psgml mode is installed, you can activate it by adding the following to your .emacs file: (setq sgml-indent-data t) (autoload 'sgml-mode "psgml" "My Most Major Mode" t) (setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (auto-fill-mode) (setq fill-column 70))) The following script finds the nearest ChangeLog file, prepends an entry to the top, and is ready for you to type your changes. This is activated by typing M-n. (defun changelog-entry () "Add entry to ChangeLog" (interactive) (progn (if (equal (file-name-nondirectory (buffer-file-name)) "ChangeLog") (progn (basic-save-buffer) (kill-buffer "ChangeLog")) (progn (add-change-log-entry))) ; (insert (current-time-string) "\n"))) )) (setq user-mail-address "youremail domain com") (setq user-full-name "Your Name") (global-set-key "\M-n" 'changelog-entry) This will add the
structure for you to your SGML file where the cursor is. It will prompt for the title of the figure as well as the filename (no extension). All the data will be generated for you. This is used by hitting F7. (defun gdp-insert-figure (title filename) (interactive "MTitle: \nMFilename (no extension): ") (let ((point (point))) (insert "
" title "
") (indent-region point (point) nil) (search-backward "" point t))) (define-key global-map [f7] 'gdp-insert-figure) This will add the very common tags on separate lines. This is used by hitting F1: (defun kevin-insert-listitem () (interactive) (let ((point (point))) (insert " ") (indent-region point (point) nil))) (define-key global-map [f1] 'kevin-insert-listitem)