Add doc/StyleGuide.md
Created by Preston, commited by me
This commit is contained in:
parent
4673c60c44
commit
af87f99450
205
doc/StyleGuide.md
Normal file
205
doc/StyleGuide.md
Normal file
@ -0,0 +1,205 @@
|
||||
# MarkdownToHtmlTranspiler – Style Guide
|
||||
|
||||
**Purpose:**
|
||||
This guide defines the coding, formatting, and contribution standards for all contributors to the **MarkdownToHtmlTranspiler** project. It ensures that all code remains consistent, maintainable, while supporting clarity.
|
||||
|
||||
---
|
||||
|
||||
## Project Overview
|
||||
|
||||
This project is a **C++ Markdown to HTML transpiler**, converting Markdown files into HTML using a structured parsing system.
|
||||
The repo includes:
|
||||
- **Build tooling:** `Makefile`, `flake.nix`, and related Nix configurations
|
||||
- **Libraries & sources:** Under `src/` and `lib/`
|
||||
- **Docs & UML:** Project diagrams and notes describing architecture
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 1. Repository Layout
|
||||
|
||||
| Path | Purpose |
|
||||
|------|----------|
|
||||
| `src/` | Main function
|
||||
| `lib/` | Helper modules or shared logic reused across the project |
|
||||
| `test/` | HTML output files |
|
||||
| `Makefile` | Primary build automation script |
|
||||
| `flake.nix` / `flake.lock` | Nix build and dependency management files |
|
||||
|
||||
### File Naming
|
||||
- Source files: `camelCase.cpp`
|
||||
|
||||
---
|
||||
|
||||
## 💻 2. C++ Code Style
|
||||
|
||||
### General Formatting
|
||||
- **Indentation:** 2 spaces (no tabs)
|
||||
- **Line length:** 150 characters max
|
||||
- **Braces:**
|
||||
```cpp
|
||||
if (condition) {
|
||||
doSomething();
|
||||
} else {
|
||||
doSomethingElse();
|
||||
}
|
||||
|
||||
- **Spacing:**
|
||||
- Put a single space after commas and around binary operators.
|
||||
- No spaces after `(` or before `)`.
|
||||
- Example:
|
||||
```cpp
|
||||
result = func(x, y + 1);
|
||||
```
|
||||
### Naming Conventions
|
||||
|
||||
- **Classes & Structs:** `PascalCase`
|
||||
Example: `Parser`, `DomTree`
|
||||
- **Functions & Methods:** `PascalCase`
|
||||
Example: `Inspect()`, `ParserDocument()`
|
||||
- **Variables & Parameters:** `snake_case`
|
||||
Example: `input_file`, `output_path`
|
||||
- **Constants:** `ALL_CAPS_WITH_UNDERSCORES`
|
||||
Example: `MAX_BUFFER_SIZE`
|
||||
- **Namespaces:** `lowercase`
|
||||
---
|
||||
### Error Handling
|
||||
|
||||
Use **exceptions** for runtime errors (`std::runtime_error`, `std::invalid_argument`, etc.).
|
||||
|
||||
Always catch by reference.
|
||||
|
||||
**Example:**
|
||||
|
||||
```cpp
|
||||
try {
|
||||
Parser p(argv[1]);
|
||||
p.Inspect();
|
||||
} catch (const std::runtime_error &e) {
|
||||
std::cerr << "Error: " << e.what() << std::endl;
|
||||
}
|
||||
```
|
||||
## 3. Commenting & Documentation Style
|
||||
### General Rules
|
||||
|
||||
- Use `//` for short inline comments.
|
||||
- Use `/** ... */` for function, class, or member documentation.
|
||||
- Start each docblock with `@brief` for a concise description.
|
||||
- Include `@param`, `@return`, and `@throws` (if applicable).
|
||||
- Always describe the intent, not just what the code does.
|
||||
- Add `@author` for major contributors.
|
||||
- ### 🔹 Example: Class Documentation
|
||||
|
||||
Below is a properly documented example class showing how to format comments consistently throughout your codebase:
|
||||
```cpp
|
||||
/**
|
||||
* @file commandLineParser.h
|
||||
* @brief Parses command line
|
||||
* @author Preston Shultz
|
||||
* Sources:
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef COMMAND_LINE_PARSER_H
|
||||
#define COMMAND_LINE_PARSER_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
|
||||
* @brief CommandLine Helper class
|
||||
*
|
||||
* Parse input arguments, sets input and output files
|
||||
* Lets user use commands with program
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
class CLI {
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Takes in argc and argv and converts it to vector
|
||||
*
|
||||
* CLI constructor
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
CLI(int argc, char **argv);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Runs Commands
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
void RunCommands();
|
||||
|
||||
|
||||
/**
|
||||
* @brief Prints a list of commands that can be used
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
void PrintHelp() const;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returns input file
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
std::string GetInputFile() const { return input_file; }
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returns if watchdog is enabled
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
bool WatchDogEnabled() {return watchdog_enabled;}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returns output file
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
std::string GetOutputFile() const { return output_file; }
|
||||
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Ensures the provided filename has a .markup extension
|
||||
*
|
||||
* @return true if file ends with .markup
|
||||
* @return false otherwise
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
static bool IsMarkupFile(const std::string &filename);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Ensures the provided filename has a .html extension
|
||||
*
|
||||
* @return true if file ends with .html
|
||||
* @return false otherwise
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
static bool IsHtmlFile(const std::string &filename);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Parses the commands
|
||||
*
|
||||
* @author Preston Shultz (shultzp1@my.erau.edu)
|
||||
*/
|
||||
void ParseArgs(int argc, char** argv);
|
||||
|
||||
|
||||
std::string program_name;
|
||||
std::string input_file;
|
||||
std::string output_file = "";
|
||||
bool watchdog_enabled = false;
|
||||
};
|
||||
|
||||
#endif
|
||||
Loading…
x
Reference in New Issue
Block a user