= Stundenplan

A small JavaScript project to generate beautiful PDF schedules. Takes information from `src/variables.js`.

== Usage

Requires the `npm` tool.

```bash
npm i # installes packages
npm run main # runs the software
```

=== Optional: Parse UnivIS XML

You have the option to parse a full `public/data.xml` UnivIS export to get 80% of the way to a working configuration. You still have to manually clean up and refactor the information to yaml. But you dont have to write all those characters out.

If you use vim, it then should be only a matter of seconds until you have your `.pdf`.

```bash
npm run parse
```

== Configuration Structure

Generally, you may edit anything in the `public` directory. The default are how I like it.

To configure the actual displayed information you shoudl edit the `.yaml` file. It should look something like the following, where things like `<THIS>` should be replaced by your text.

Comments (things that are ignored by the software) is everything after a `#` sign. More information on the file format and syntax can be found https://yaml.org/[here].

```yaml
# General Information
student: <YOUR NAME>
semester: <THE SEMESTER>
filename: <THE RESULT FILENAME> # i.e. Stundenplan_SS24.pdf

# Each of these lines will be listed at the bottom of the PDF
hinweise:
  - <YOUR INFO> # i.e. "Mensabetrieb: 11:15 - 14:15 Uhr + 00:15 min"

# Time definitions
eintraege:
  - <MODULE NAME>:
      <LECTURE TYPE>:
        - [<GERMAN ABBREVIATION FOR THE WEEKDAY>, <START TIME>, <END TIME>, <ROOM>]
```

Please note that times should be given in the format `HHhMM` so to say 9:19 AM, you would actually write 09h19. Also the Module and Lecture `BLOCKED` is reserved for a cross hatched block.

So writing 
```yaml
...
  - BLOCKED:
      BLOCKED:
...
```

would put a blocked area in the pdf, instead of putting an actual block with the text "BLOCKED / BLOCKED".

== Known issues

- Doesnt work if not all days are set (null checks in general)
- Have to use the exact yaml structure
- Margin on the left not easily configurable
- Mensa times are not actually displayed
- All config.yaml items are required
- Code is german spaghetti