Add -s flag, project info and CINERA_PROJECT tag
-s flag sets the style / theme Also some general code clean-up and repo organisation
This commit is contained in:
parent
24f02aec93
commit
f454e01e28
|
@ -66,6 +66,7 @@ anything invalid, `cinera` will tell you what's wrong
|
||||||
|
|
||||||
Valid tags:
|
Valid tags:
|
||||||
|
|
||||||
|
- `<!-- __CINERA_PROJECT__ -->` _the project's full name_
|
||||||
- `<!-- __CINERA_TITLE__ -->` _the day / episode name, intended to be used
|
- `<!-- __CINERA_TITLE__ -->` _the day / episode name, intended to be used
|
||||||
inside your own `<title>` element, but may be used wherever and as many times
|
inside your own `<title>` element, but may be used wherever and as many times
|
||||||
as you want on your page_
|
as you want on your page_
|
||||||
|
@ -114,6 +115,9 @@ Valid tags:
|
||||||
Force integration with an incomplete template
|
Force integration with an incomplete template
|
||||||
-p <project ID>
|
-p <project ID>
|
||||||
Set the project ID, corresponding to the "project" field in the HMML files
|
Set the project ID, corresponding to the "project" field in the HMML files
|
||||||
|
-s <style>
|
||||||
|
Set the style / theme, corresponding to a cinera__*.css file
|
||||||
|
This is equal to the "project" field in the HMML files by default
|
||||||
-l <n>
|
-l <n>
|
||||||
Override default log level (0), where n is from 0 (terse) to 7 (verbose)
|
Override default log level (0), where n is from 0 (terse) to 7 (verbose)
|
||||||
-m <default medium>
|
-m <default medium>
|
||||||
|
|
252
cinera/cinera.c
252
cinera/cinera.c
|
@ -14,7 +14,7 @@ typedef struct
|
||||||
version CINERA_APP_VERSION = {
|
version CINERA_APP_VERSION = {
|
||||||
.Major = 0,
|
.Major = 0,
|
||||||
.Minor = 5,
|
.Minor = 5,
|
||||||
.Patch = 4
|
.Patch = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CINERA_DB_VERSION 1
|
#define CINERA_DB_VERSION 1
|
||||||
|
@ -109,6 +109,7 @@ typedef struct
|
||||||
char *JSDir; // Relative to RootDir and RootURL
|
char *JSDir; // Relative to RootDir and RootURL
|
||||||
char *TemplateIndexLocation; // Relative to RootDir and RootURL
|
char *TemplateIndexLocation; // Relative to RootDir and RootURL
|
||||||
char *TemplatePlayerLocation; // Relative to RootDir and RootURL
|
char *TemplatePlayerLocation; // Relative to RootDir and RootURL
|
||||||
|
char *Theme;
|
||||||
char CacheDir[256];
|
char CacheDir[256];
|
||||||
char *DefaultMedium;
|
char *DefaultMedium;
|
||||||
char *OutLocation;
|
char *OutLocation;
|
||||||
|
@ -156,6 +157,7 @@ enum
|
||||||
TAG_SCRIPT,
|
TAG_SCRIPT,
|
||||||
|
|
||||||
// Anywhere
|
// Anywhere
|
||||||
|
TAG_PROJECT,
|
||||||
TAG_TITLE
|
TAG_TITLE
|
||||||
} template_tags;
|
} template_tags;
|
||||||
|
|
||||||
|
@ -171,6 +173,7 @@ tag Tags[] = {
|
||||||
{ TAG_MENUS, "__CINERA_MENUS__" },
|
{ TAG_MENUS, "__CINERA_MENUS__" },
|
||||||
{ TAG_PLAYER, "__CINERA_PLAYER__" },
|
{ TAG_PLAYER, "__CINERA_PLAYER__" },
|
||||||
{ TAG_SCRIPT, "__CINERA_SCRIPT__" },
|
{ TAG_SCRIPT, "__CINERA_SCRIPT__" },
|
||||||
|
{ TAG_PROJECT, "__CINERA_PROJECT__" },
|
||||||
{ TAG_TITLE, "__CINERA_TITLE__" },
|
{ TAG_TITLE, "__CINERA_TITLE__" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -198,13 +201,14 @@ typedef struct
|
||||||
{
|
{
|
||||||
buffer IncludesIndex;
|
buffer IncludesIndex;
|
||||||
buffer Search;
|
buffer Search;
|
||||||
buffer Index;
|
buffer Index; // NOTE(matt): This buffer is malloc'd separately, rather than claimed from the memory_arena
|
||||||
buffer ScriptIndex;
|
buffer ScriptIndex;
|
||||||
buffer IncludesPlayer;
|
buffer IncludesPlayer;
|
||||||
buffer Menus;
|
buffer Menus;
|
||||||
buffer Player;
|
buffer Player;
|
||||||
buffer ScriptPlayer;
|
buffer ScriptPlayer;
|
||||||
char Title[256];
|
char Title[256];
|
||||||
|
char ProjectName[32];
|
||||||
} buffers;
|
} buffers;
|
||||||
|
|
||||||
// TODO(matt): Consider putting the ref_info and quote_info into linked lists on the heap, just to avoid all the hardcoded sizes
|
// TODO(matt): Consider putting the ref_info and quote_info into linked lists on the heap, just to avoid all the hardcoded sizes
|
||||||
|
@ -260,6 +264,7 @@ credential_info Credentials[] =
|
||||||
{ "/a_waterman", "Andrew Waterman", "https://www.linkedin.com/in/andrew-waterman-76805788", "", ""},
|
{ "/a_waterman", "Andrew Waterman", "https://www.linkedin.com/in/andrew-waterman-76805788", "", ""},
|
||||||
{ "/y_lee", "Yunsup Lee", "https://www.linkedin.com/in/yunsup-lee-385b692b/", "", ""},
|
{ "/y_lee", "Yunsup Lee", "https://www.linkedin.com/in/yunsup-lee-385b692b/", "", ""},
|
||||||
{ "AndrewJDR", "Andrew Johnson", "", "", ""},
|
{ "AndrewJDR", "Andrew Johnson", "", "", ""},
|
||||||
|
{ "AsafGartner", "Asaf Gartner", "", "", ""},
|
||||||
{ "BretHudson", "Bret Hudson", "http://www.brethudson.com/", "cinera_sprite_patreon.png", "https://www.patreon.com/indieFunction"},
|
{ "BretHudson", "Bret Hudson", "http://www.brethudson.com/", "cinera_sprite_patreon.png", "https://www.patreon.com/indieFunction"},
|
||||||
{ "ChronalDragon", "Andrew Chronister", "http://chronal.net/", "", ""},
|
{ "ChronalDragon", "Andrew Chronister", "http://chronal.net/", "", ""},
|
||||||
{ "Kelimion", "Jeroen van Rijn", "https://handmade.network/home", "", ""},
|
{ "Kelimion", "Jeroen van Rijn", "https://handmade.network/home", "", ""},
|
||||||
|
@ -282,7 +287,7 @@ credential_info Credentials[] =
|
||||||
{ "insofaras", "Alex Baines", "https://abaines.me.uk/", "", ""},
|
{ "insofaras", "Alex Baines", "https://abaines.me.uk/", "", ""},
|
||||||
{ "jacebennett", "Jace Bennett", "", "", ""},
|
{ "jacebennett", "Jace Bennett", "", "", ""},
|
||||||
{ "jon", "Jonathan Blow", "http://the-witness.net/news/", "", ""},
|
{ "jon", "Jonathan Blow", "http://the-witness.net/news/", "", ""},
|
||||||
{ "jpike", "jpike", "", "", ""},
|
{ "jpike", "Jacob Pike", "", "", ""},
|
||||||
{ "martincohen", "Martin Cohen", "http://blog.coh.io/", "", ""},
|
{ "martincohen", "Martin Cohen", "http://blog.coh.io/", "", ""},
|
||||||
{ "miotatsu", "Mio Iwakura", "http://riscy.tv/", "cinera_sprite_patreon.png", "https://patreon.com/miotatsu"},
|
{ "miotatsu", "Mio Iwakura", "http://riscy.tv/", "cinera_sprite_patreon.png", "https://patreon.com/miotatsu"},
|
||||||
{ "nothings", "Sean Barrett", "https://nothings.org/", "", ""},
|
{ "nothings", "Sean Barrett", "https://nothings.org/", "", ""},
|
||||||
|
@ -293,7 +298,7 @@ credential_info Credentials[] =
|
||||||
{ "schme", "Kasper Sauramo", "", "", ""},
|
{ "schme", "Kasper Sauramo", "", "", ""},
|
||||||
{ "sssmcgrath", "Shawn McGrath", "http://www.dyadgame.com/", "", ""},
|
{ "sssmcgrath", "Shawn McGrath", "http://www.dyadgame.com/", "", ""},
|
||||||
{ "thehappiecat", "Anne", "https://www.youtube.com/c/TheHappieCat", "cinera_sprite_patreon.png", "https://www.patreon.com/thehappiecat"},
|
{ "thehappiecat", "Anne", "https://www.youtube.com/c/TheHappieCat", "cinera_sprite_patreon.png", "https://www.patreon.com/thehappiecat"},
|
||||||
{ "theinternetftw", "theinternetftw", "", "", ""},
|
{ "theinternetftw", "Ben Craddock", "", "", ""},
|
||||||
{ "wheatdog", "Tim Liou", "http://stringbulbs.com/", "", ""},
|
{ "wheatdog", "Tim Liou", "http://stringbulbs.com/", "", ""},
|
||||||
{ "williamchyr", "William Chyr", "http://williamchyr.com/", "", ""},
|
{ "williamchyr", "William Chyr", "http://williamchyr.com/", "", ""},
|
||||||
{ "wonchun", "Won Chun", "https://twitter.com/won3d", "", ""},
|
{ "wonchun", "Won Chun", "https://twitter.com/won3d", "", ""},
|
||||||
|
@ -342,10 +347,19 @@ typedef struct
|
||||||
|
|
||||||
project_info ProjectInfo[] =
|
project_info ProjectInfo[] =
|
||||||
{
|
{
|
||||||
{ "hero", "Handmade Hero", "Day", NS_LINEAR },
|
{ "book", "Book Club", "Day", NS_LINEAR },
|
||||||
{ "hmdshow", "HandmadeDev Show", "", NS_SEASONAL },
|
|
||||||
{ "obbg", "Open Block Building Game", "Episode", NS_LINEAR },
|
|
||||||
{ "riscy", "RISCY BUSINESS", "Day", NS_LINEAR },
|
{ "riscy", "RISCY BUSINESS", "Day", NS_LINEAR },
|
||||||
|
|
||||||
|
{ "chat", "Handmade Chat", "Day", NS_LINEAR },
|
||||||
|
{ "code", "Handmade Hero", "Day", NS_LINEAR },
|
||||||
|
{ "intro-to-c", "Intro to C on Windows", "Day", NS_LINEAR },
|
||||||
|
{ "misc", "Handmade Miscellany", "", NS_LINEAR },
|
||||||
|
{ "ray", "Handmade Ray", "Day", NS_LINEAR },
|
||||||
|
|
||||||
|
{ "hmdshow", "HandmadeDev Show", "", NS_SEASONAL },
|
||||||
|
|
||||||
|
{ "obbg", "Open Block Building Game", "Episode", NS_LINEAR },
|
||||||
|
|
||||||
{ "sysadmin", "SysAdmin", "Session", NS_LINEAR },
|
{ "sysadmin", "SysAdmin", "Session", NS_LINEAR },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -717,7 +731,14 @@ ClaimTemplate(template **Template, char *Location)
|
||||||
(*Template)->Buffer.Location = MemoryArena.Ptr + sizeof(template);
|
(*Template)->Buffer.Location = MemoryArena.Ptr + sizeof(template);
|
||||||
(*Template)->Buffer.Ptr = (*Template)->Buffer.Location;
|
(*Template)->Buffer.Ptr = (*Template)->Buffer.Location;
|
||||||
(*Template)->Buffer.ID = Location;
|
(*Template)->Buffer.ID = Location;
|
||||||
|
if(Location[0] != '/')
|
||||||
|
{
|
||||||
CopyString((*Template)->Metadata.Filename, "%s/%s", Config.RootDir, Location);
|
CopyString((*Template)->Metadata.Filename, "%s/%s", Config.RootDir, Location);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CopyString((*Template)->Metadata.Filename, "%s", Location);
|
||||||
|
}
|
||||||
|
|
||||||
FILE *File;
|
FILE *File;
|
||||||
if(!(File = fopen((*Template)->Metadata.Filename, "r")))
|
if(!(File = fopen((*Template)->Metadata.Filename, "r")))
|
||||||
|
@ -934,18 +955,9 @@ SearchCredentials(buffer *CreditsMenu, bool *HasCreditsMenu, char *Person, char
|
||||||
}
|
}
|
||||||
if(StringsDiffer(Config.ImagesDir, ""))
|
if(StringsDiffer(Config.ImagesDir, ""))
|
||||||
{
|
{
|
||||||
Ptr += CopyString(Ptr, "%s/", Config.ImagesDir);
|
CopyString(Ptr, "%s/", Config.ImagesDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Config.Edition == EDITION_PROJECT)
|
|
||||||
{
|
|
||||||
if(!StringsDiffer(Config.RootURL, ""))
|
|
||||||
{
|
|
||||||
char Temp[1027];
|
|
||||||
CopyString(Temp, "../%s", URLPrefix);
|
|
||||||
CopyString(URLPrefix, Temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CopyStringToBuffer(CreditsMenu,
|
CopyStringToBuffer(CreditsMenu,
|
||||||
" <a class=\"support\" href=\"%s\" target=\"_blank\"><div class=\"support_icon\" style=\"background-image: url(%s%s);\"></div></a>\n",
|
" <a class=\"support\" href=\"%s\" target=\"_blank\"><div class=\"support_icon\" style=\"background-image: url(%s%s);\"></div></a>\n",
|
||||||
Credentials[CredentialIndex].SupportURL,
|
Credentials[CredentialIndex].SupportURL,
|
||||||
|
@ -1618,6 +1630,9 @@ PrintUsage(char *BinaryLocation, config *DefaultConfig)
|
||||||
" Force integration with an incomplete template\n"
|
" Force integration with an incomplete template\n"
|
||||||
" -p <project ID>\n"
|
" -p <project ID>\n"
|
||||||
" Set the project ID, corresponding to the \"project\" field in the HMML files\n"
|
" Set the project ID, corresponding to the \"project\" field in the HMML files\n"
|
||||||
|
" -s <style>\n"
|
||||||
|
" Set the style / theme, corresponding to a cinera__*.css file\n"
|
||||||
|
" This is equal to the \"project\" field in the HMML files by default\n"
|
||||||
" -l <n>\n"
|
" -l <n>\n"
|
||||||
" Override default log level (%d), where n is from 0 (terse) to 7 (verbose)\n"
|
" Override default log level (%d), where n is from 0 (terse) to 7 (verbose)\n"
|
||||||
" -m <default medium>\n"
|
" -m <default medium>\n"
|
||||||
|
@ -1636,12 +1651,18 @@ PrintUsage(char *BinaryLocation, config *DefaultConfig)
|
||||||
" Enable integration\n"
|
" Enable integration\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Template:\n"
|
"Template:\n"
|
||||||
" A complete template shall contain exactly one each of the following tags:\n"
|
" A complete index template shall contain exactly one each of the following tags:\n"
|
||||||
" <!-- __CINERA_INCLUDES__ -->\n"
|
" <!-- __CINERA_INCLUDES__ --> - to put inside your own <head></head>\n"
|
||||||
|
" <!-- __CINERA_INDEX__ -->\n"
|
||||||
|
"\n"
|
||||||
|
" A complete player template shall contain exactly one each of the following tags:\n"
|
||||||
|
" <!-- __CINERA_INCLUDES__ --> - to put inside your own <head></head>\n"
|
||||||
" <!-- __CINERA_MENUS__ -->\n"
|
" <!-- __CINERA_MENUS__ -->\n"
|
||||||
" <!-- __CINERA_PLAYER__ -->\n"
|
" <!-- __CINERA_PLAYER__ -->\n"
|
||||||
" <!-- __CINERA_SCRIPT__ --> (must come after <!-- __CINERA_PLAYER__ -->)\n"
|
" <!-- __CINERA_SCRIPT__ --> (must come after <!-- __CINERA_PLAYER__ -->)\n"
|
||||||
" Other available tags include:\n"
|
"\n"
|
||||||
|
" Other available tags:\n"
|
||||||
|
" <!-- __CINERA_PROJECT__ -->\n"
|
||||||
" <!-- __CINERA_TITLE__ -->\n"
|
" <!-- __CINERA_TITLE__ -->\n"
|
||||||
"\n"
|
"\n"
|
||||||
"HMML Specification:\n"
|
"HMML Specification:\n"
|
||||||
|
@ -1777,6 +1798,13 @@ Here:
|
||||||
Previous = (*Template)->Buffer.Ptr;
|
Previous = (*Template)->Buffer.Ptr;
|
||||||
FoundScript = TRUE;
|
FoundScript = TRUE;
|
||||||
goto Here;
|
goto Here;
|
||||||
|
case TAG_PROJECT:
|
||||||
|
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].Offset = CommentStart - Previous;
|
||||||
|
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].TagCode = TAG_PROJECT;
|
||||||
|
(*Template)->Metadata.TagCount++;
|
||||||
|
DepartComment(&(*Template)->Buffer);
|
||||||
|
Previous = (*Template)->Buffer.Ptr;
|
||||||
|
goto Here;
|
||||||
case TAG_TITLE:
|
case TAG_TITLE:
|
||||||
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].Offset = CommentStart - Previous;
|
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].Offset = CommentStart - Previous;
|
||||||
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].TagCode = TAG_TITLE;
|
(*Template)->Metadata.Tag[(*Template)->Metadata.TagCount].TagCode = TAG_TITLE;
|
||||||
|
@ -1861,6 +1889,16 @@ HMMLToBuffers(buffers *CollationBuffers, char *Filename)
|
||||||
if(HMML.well_formed)
|
if(HMML.well_formed)
|
||||||
{
|
{
|
||||||
CopyString(CollationBuffers->Title, HMML.metadata.title);
|
CopyString(CollationBuffers->Title, HMML.metadata.title);
|
||||||
|
int ProjectIndex;
|
||||||
|
for(ProjectIndex = 0; ProjectIndex < ArrayCount(ProjectInfo); ++ProjectIndex)
|
||||||
|
{
|
||||||
|
if(!StringsDiffer(ProjectInfo[ProjectIndex].ProjectID, Config.ProjectID))
|
||||||
|
{
|
||||||
|
CopyString(CollationBuffers->ProjectName, ProjectInfo[ProjectIndex].FullName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
printf(
|
printf(
|
||||||
"================================================================================\n"
|
"================================================================================\n"
|
||||||
|
@ -1898,8 +1936,8 @@ HMMLToBuffers(buffers *CollationBuffers, char *Filename)
|
||||||
|
|
||||||
buffer FilterState;
|
buffer FilterState;
|
||||||
|
|
||||||
if(ClaimBuffer(&QuoteMenu, "QuoteMenu", Kilobytes(16)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
if(ClaimBuffer(&QuoteMenu, "QuoteMenu", Kilobytes(32)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
||||||
if(ClaimBuffer(&ReferenceMenu, "ReferenceMenu", Kilobytes(16)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
if(ClaimBuffer(&ReferenceMenu, "ReferenceMenu", Kilobytes(32)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
||||||
if(ClaimBuffer(&FilterMenu, "FilterMenu", Kilobytes(16)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
if(ClaimBuffer(&FilterMenu, "FilterMenu", Kilobytes(16)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
||||||
if(ClaimBuffer(&FilterTopics, "FilterTopics", Kilobytes(8)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
if(ClaimBuffer(&FilterTopics, "FilterTopics", Kilobytes(8)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
||||||
if(ClaimBuffer(&FilterMedia, "FilterMedia", Kilobytes(8)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
if(ClaimBuffer(&FilterMedia, "FilterMedia", Kilobytes(8)) == RC_ARENA_FULL) { hmml_free(&HMML); return RC_ARENA_FULL; };
|
||||||
|
@ -1921,7 +1959,7 @@ HMMLToBuffers(buffers *CollationBuffers, char *Filename)
|
||||||
|
|
||||||
CopyStringToBuffer(&CollationBuffers->Menus,
|
CopyStringToBuffer(&CollationBuffers->Menus,
|
||||||
" <div class=\"title %s\">\n"
|
" <div class=\"title %s\">\n"
|
||||||
" <span class=\"episode_name\">", HMML.metadata.project);
|
" <span class=\"episode_name\">", StringsDiffer(Config.Theme, "") ? Config.Theme : HMML.metadata.project);
|
||||||
CopyStringToBufferHTMLSafe(&CollationBuffers->Menus, HMML.metadata.title);
|
CopyStringToBufferHTMLSafe(&CollationBuffers->Menus, HMML.metadata.title);
|
||||||
CopyStringToBuffer(&CollationBuffers->Menus, "</span>\n"
|
CopyStringToBuffer(&CollationBuffers->Menus, "</span>\n"
|
||||||
" <span id=\"focus-warn\">⚠ Click here to regain focus ⚠</span>\n");
|
" <span id=\"focus-warn\">⚠ Click here to regain focus ⚠</span>\n");
|
||||||
|
@ -1929,7 +1967,7 @@ HMMLToBuffers(buffers *CollationBuffers, char *Filename)
|
||||||
CopyStringToBuffer(&CollationBuffers->Player,
|
CopyStringToBuffer(&CollationBuffers->Player,
|
||||||
" <div class=\"player_container\">\n"
|
" <div class=\"player_container\">\n"
|
||||||
" <div class=\"video_container\" data-videoId=\"%s\"></div>\n"
|
" <div class=\"video_container\" data-videoId=\"%s\"></div>\n"
|
||||||
" <div class=\"markers_container %s\">\n", HMML.metadata.id, HMML.metadata.project);
|
" <div class=\"markers_container %s\">\n", HMML.metadata.id, StringsDiffer(Config.Theme, "") ? Config.Theme : HMML.metadata.project);
|
||||||
|
|
||||||
int CreditsErrorCode = BuildCredits(&CreditsMenu, &HasCreditsMenu, &HMML.metadata);
|
int CreditsErrorCode = BuildCredits(&CreditsMenu, &HasCreditsMenu, &HMML.metadata);
|
||||||
if(CreditsErrorCode)
|
if(CreditsErrorCode)
|
||||||
|
@ -2573,7 +2611,6 @@ AppendedIdentifier:
|
||||||
|
|
||||||
char URLPrefix[1024] = { 0 };
|
char URLPrefix[1024] = { 0 };
|
||||||
char *Ptr = URLPrefix;
|
char *Ptr = URLPrefix;
|
||||||
|
|
||||||
if(StringsDiffer(Config.RootURL, ""))
|
if(StringsDiffer(Config.RootURL, ""))
|
||||||
{
|
{
|
||||||
Ptr += CopyString(Ptr, "%s/", Config.RootURL);
|
Ptr += CopyString(Ptr, "%s/", Config.RootURL);
|
||||||
|
@ -2584,21 +2621,12 @@ AppendedIdentifier:
|
||||||
{
|
{
|
||||||
Ptr += CopyString(Ptr, "../");
|
Ptr += CopyString(Ptr, "../");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if(StringsDiffer(Config.ImagesDir, ""))
|
if(StringsDiffer(Config.ImagesDir, ""))
|
||||||
{
|
{
|
||||||
Ptr += CopyString(Ptr, "%s/", Config.ImagesDir);
|
CopyString(Ptr, "%s/", Config.ImagesDir);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Config.Edition == EDITION_PROJECT)
|
|
||||||
{
|
|
||||||
if(!StringsDiffer(Config.RootURL, ""))
|
|
||||||
{
|
|
||||||
char Temp[1027];
|
|
||||||
CopyString(Temp, "../%s", URLPrefix);
|
|
||||||
CopyString(URLPrefix, Temp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CopyStringToBuffer(&FilterMenu,
|
CopyStringToBuffer(&FilterMenu,
|
||||||
" <div class=\"menu filter\">\n"
|
" <div class=\"menu filter\">\n"
|
||||||
" <span><img src=\"%scinera_icon_filter.png\"></span>\n"
|
" <span><img src=\"%scinera_icon_filter.png\"></span>\n"
|
||||||
|
@ -2976,7 +3004,7 @@ AppendedIdentifier:
|
||||||
" <meta charset=\"UTF-8\">\n"
|
" <meta charset=\"UTF-8\">\n"
|
||||||
" <meta name=\"generator\" content=\"Cinera %d.%d.%d\">\n",
|
" <meta name=\"generator\" content=\"Cinera %d.%d.%d\">\n",
|
||||||
URLPrefix,
|
URLPrefix,
|
||||||
URLPrefix, HMML.metadata.project,
|
URLPrefix, StringsDiffer(Config.Theme, "") ? Config.Theme : HMML.metadata.project,
|
||||||
URLPrefix,
|
URLPrefix,
|
||||||
|
|
||||||
CINERA_APP_VERSION.Major,
|
CINERA_APP_VERSION.Major,
|
||||||
|
@ -3001,7 +3029,7 @@ AppendedIdentifier:
|
||||||
" <meta charset=\"UTF-8\">\n"
|
" <meta charset=\"UTF-8\">\n"
|
||||||
" <meta name=\"generator\" content=\"Cinera %d.%d.%d\">\n",
|
" <meta name=\"generator\" content=\"Cinera %d.%d.%d\">\n",
|
||||||
URLPrefix,
|
URLPrefix,
|
||||||
URLPrefix, HMML.metadata.project,
|
URLPrefix, StringsDiffer(Config.Theme, "") ? Config.Theme : HMML.metadata.project,
|
||||||
URLPrefix,
|
URLPrefix,
|
||||||
|
|
||||||
CINERA_APP_VERSION.Major,
|
CINERA_APP_VERSION.Major,
|
||||||
|
@ -3033,19 +3061,21 @@ AppendedIdentifier:
|
||||||
CopyStringToBuffer(&CollationBuffers->IncludesPlayer, "\">\n\n");
|
CopyStringToBuffer(&CollationBuffers->IncludesPlayer, "\">\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ptr = URLPrefix;
|
||||||
|
if(StringsDiffer(Config.RootURL, ""))
|
||||||
|
{
|
||||||
|
Ptr += StringLength(Config.RootURL) + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if(Config.Edition == EDITION_PROJECT)
|
if(Config.Edition == EDITION_PROJECT)
|
||||||
{
|
{
|
||||||
if(!StringsDiffer(Config.RootURL, ""))
|
Ptr += StringLength("../");
|
||||||
{
|
}
|
||||||
Ptr = URLPrefix;
|
}
|
||||||
Ptr += StringLength("../../");
|
|
||||||
Ptr += CopyString(Ptr, "%s", Config.JSDir);
|
|
||||||
if(StringsDiffer(Config.JSDir, ""))
|
if(StringsDiffer(Config.JSDir, ""))
|
||||||
{
|
{
|
||||||
Ptr[0] = '/';
|
CopyString(Ptr, "%s/", Config.JSDir);
|
||||||
Ptr[1] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
|
CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
|
||||||
|
@ -3143,6 +3173,9 @@ BuffersToHTML(buffers *CollationBuffers, template *Template, char *OutputPath, i
|
||||||
case TAG_TITLE:
|
case TAG_TITLE:
|
||||||
CopyStringToBuffer(&Output, CollationBuffers->Title);
|
CopyStringToBuffer(&Output, CollationBuffers->Title);
|
||||||
break;
|
break;
|
||||||
|
case TAG_PROJECT:
|
||||||
|
CopyStringToBuffer(&Output, CollationBuffers->ProjectName);
|
||||||
|
break;
|
||||||
case TAG_INDEX:
|
case TAG_INDEX:
|
||||||
CopyBuffer(&Output, &CollationBuffers->Index);
|
CopyBuffer(&Output, &CollationBuffers->Index);
|
||||||
break;
|
break;
|
||||||
|
@ -3427,7 +3460,7 @@ InsertIntoIndex(buffers *CollationBuffers, char *BaseFilename)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index.File.Buffer.ID = "Index";
|
Index.File.Buffer.ID = "IndexFile";
|
||||||
CopyString(Index.File.Path, "%s/%s.index", Config.BaseDir, Config.ProjectID);
|
CopyString(Index.File.Path, "%s/%s.index", Config.BaseDir, Config.ProjectID);
|
||||||
int IndexFileReadCode = ReadFileIntoBuffer(&Index.File, 0);
|
int IndexFileReadCode = ReadFileIntoBuffer(&Index.File, 0);
|
||||||
switch(IndexFileReadCode)
|
switch(IndexFileReadCode)
|
||||||
|
@ -3677,7 +3710,6 @@ DeleteFromIndex(char *BaseFilename)
|
||||||
int
|
int
|
||||||
IndexToBuffer(buffers *CollationBuffers)
|
IndexToBuffer(buffers *CollationBuffers)
|
||||||
{
|
{
|
||||||
RewindBuffer(&CollationBuffers->Index);
|
|
||||||
// TODO(matt): Consider parsing the index into a linked list, or do something to save us having to iterate through the index
|
// TODO(matt): Consider parsing the index into a linked list, or do something to save us having to iterate through the index
|
||||||
// file multiple times
|
// file multiple times
|
||||||
|
|
||||||
|
@ -3686,7 +3718,7 @@ IndexToBuffer(buffers *CollationBuffers)
|
||||||
CopyString(Index.Metadata.Path, "%s/%s.metadata", Config.BaseDir, Config.ProjectID);
|
CopyString(Index.Metadata.Path, "%s/%s.metadata", Config.BaseDir, Config.ProjectID);
|
||||||
int IndexMetadataFileReadCode = ReadFileIntoBuffer(&Index.Metadata, 0);
|
int IndexMetadataFileReadCode = ReadFileIntoBuffer(&Index.Metadata, 0);
|
||||||
|
|
||||||
Index.File.Buffer.ID = "Index";
|
Index.File.Buffer.ID = "IndexFile";
|
||||||
CopyString(Index.File.Path, "%s/%s.index", Config.BaseDir, Config.ProjectID);
|
CopyString(Index.File.Path, "%s/%s.index", Config.BaseDir, Config.ProjectID);
|
||||||
int IndexFileReadCode = ReadFileIntoBuffer(&Index.File, 0);
|
int IndexFileReadCode = ReadFileIntoBuffer(&Index.File, 0);
|
||||||
|
|
||||||
|
@ -3697,21 +3729,6 @@ IndexToBuffer(buffers *CollationBuffers)
|
||||||
Index.File.Buffer.Ptr += StringLength("---\n");
|
Index.File.Buffer.Ptr += StringLength("---\n");
|
||||||
char *IndexEntryStart = Index.File.Buffer.Ptr;
|
char *IndexEntryStart = Index.File.Buffer.Ptr;
|
||||||
|
|
||||||
CopyStringToBuffer(&CollationBuffers->Index,
|
|
||||||
"<div class=\"queryContainer\">\n"
|
|
||||||
" <label for=\"query\">Query:</label>\n"
|
|
||||||
" <div class=\"inputContainer\">\n"
|
|
||||||
" <input type=\"text\" id=\"query\" autofocus=\"\">\n"
|
|
||||||
" <div class=\"spinner\">\n"
|
|
||||||
" Downloading data...\n"
|
|
||||||
" </div>\n"
|
|
||||||
" </div>\n"
|
|
||||||
" </div>\n"
|
|
||||||
" <div id=\"resultsSummary\">Found: 0 episodes, 0 markers, 0h 0m 0s total.</div>\n"
|
|
||||||
" <div id=\"results\"></div>\n"
|
|
||||||
"\n"
|
|
||||||
" <dl id=\"cineraIndex\" class=\"riscy\">\n");
|
|
||||||
|
|
||||||
bool ProjectFound = FALSE;
|
bool ProjectFound = FALSE;
|
||||||
int ProjectIndex;
|
int ProjectIndex;
|
||||||
for(ProjectIndex = 0; ProjectIndex < ArrayCount(ProjectInfo); ++ProjectIndex)
|
for(ProjectIndex = 0; ProjectIndex < ArrayCount(ProjectInfo); ++ProjectIndex)
|
||||||
|
@ -3729,6 +3746,61 @@ IndexToBuffer(buffers *CollationBuffers)
|
||||||
return RC_ERROR_PROJECT;
|
return RC_ERROR_PROJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char queryContainer[512];
|
||||||
|
CopyString(queryContainer,
|
||||||
|
"<div class=\"queryContainer %s\">\n"
|
||||||
|
" <label for=\"query\">Query:</label>\n"
|
||||||
|
" <div class=\"inputContainer\">\n"
|
||||||
|
" <input type=\"text\" id=\"query\" autofocus=\"\">\n"
|
||||||
|
" <div class=\"spinner\">\n"
|
||||||
|
" Downloading data...\n"
|
||||||
|
" </div>\n"
|
||||||
|
" </div>\n"
|
||||||
|
" </div>\n"
|
||||||
|
" <div id=\"resultsSummary\">Found: 0 episodes, 0 markers, 0h 0m 0s total.</div>\n"
|
||||||
|
" <div id=\"results\"></div>\n"
|
||||||
|
"\n"
|
||||||
|
" <dl id=\"cineraIndex\" class=\"%s\">\n",
|
||||||
|
StringsDiffer(Config.Theme, "") ? Config.Theme : Config.ProjectID,
|
||||||
|
StringsDiffer(Config.Theme, "") ? Config.Theme : Config.ProjectID);
|
||||||
|
|
||||||
|
char URLPrefix[1024] = { 0 };
|
||||||
|
char *Ptr = URLPrefix;
|
||||||
|
if(StringsDiffer(Config.RootURL, ""))
|
||||||
|
{
|
||||||
|
Ptr += CopyString(Ptr, "%s/", Config.RootURL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Ptr += CopyString(Ptr, "../");
|
||||||
|
}
|
||||||
|
if(StringsDiffer(Config.JSDir, ""))
|
||||||
|
{
|
||||||
|
Ptr += CopyString(Ptr, "%s/", Config.JSDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
char Script[512 + StringLength(URLPrefix) + (StringLength(Config.ProjectID) * 2)];
|
||||||
|
CopyString(Script, " </dl>\n"
|
||||||
|
" <script type=\"text/javascript\">\n"
|
||||||
|
" var indexLocation = \"%s.index\";\n"
|
||||||
|
" var projectID = \"%s\";\n"
|
||||||
|
" </script>\n"
|
||||||
|
" <script type=\"text/javascript\" src=\"%scinera_search.js\"></script>\n",
|
||||||
|
Config.ProjectID,
|
||||||
|
StringsDiffer(Config.Theme, "") ? Config.Theme : Config.ProjectID,
|
||||||
|
URLPrefix);
|
||||||
|
|
||||||
|
int EntryLength = 32 + StringLength(ProjectInfo[ProjectIndex].Unit) + 16 + 256;
|
||||||
|
|
||||||
|
CollationBuffers->Index.Size = StringLength(queryContainer) + (Index.Header.EntryCount * EntryLength) + StringLength(Script);
|
||||||
|
if(!(CollationBuffers->Index.Location = malloc(CollationBuffers->Index.Size)))
|
||||||
|
{
|
||||||
|
return(RC_ERROR_MEMORY);
|
||||||
|
}
|
||||||
|
CollationBuffers->Index.Ptr = CollationBuffers->Index.Location;
|
||||||
|
|
||||||
|
CopyStringToBuffer(&CollationBuffers->Index, queryContainer);
|
||||||
|
|
||||||
for(int EntryIndex = 0; EntryIndex < Index.Header.EntryCount; ++EntryIndex)
|
for(int EntryIndex = 0; EntryIndex < Index.Header.EntryCount; ++EntryIndex)
|
||||||
{
|
{
|
||||||
index_metadata This = *(index_metadata *)Index.Metadata.Buffer.Ptr;
|
index_metadata This = *(index_metadata *)Index.Metadata.Buffer.Ptr;
|
||||||
|
@ -3750,6 +3822,8 @@ IndexToBuffer(buffers *CollationBuffers)
|
||||||
CopyStringNoFormatT(Title, Index.File.Buffer.Ptr, '\n');
|
CopyStringNoFormatT(Title, Index.File.Buffer.Ptr, '\n');
|
||||||
Title[StringLength(Title) - 1] = '\0';
|
Title[StringLength(Title) - 1] = '\0';
|
||||||
|
|
||||||
|
if(StringsDiffer(ProjectInfo[ProjectIndex].Unit, ""))
|
||||||
|
{
|
||||||
CopyStringToBuffer(&CollationBuffers->Index,
|
CopyStringToBuffer(&CollationBuffers->Index,
|
||||||
" <dt>\n"
|
" <dt>\n"
|
||||||
" <a href=\"%s\">%s %s: %s</a>\n"
|
" <a href=\"%s\">%s %s: %s</a>\n"
|
||||||
|
@ -3758,36 +3832,23 @@ IndexToBuffer(buffers *CollationBuffers)
|
||||||
ProjectInfo[ProjectIndex].Unit, // TODO(matt): Do we need to special-case the various numbering schemes?
|
ProjectInfo[ProjectIndex].Unit, // TODO(matt): Do we need to special-case the various numbering schemes?
|
||||||
Number,
|
Number,
|
||||||
Title);
|
Title);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CopyStringToBuffer(&CollationBuffers->Index,
|
||||||
|
" <dt>\n"
|
||||||
|
" <a href=\"%s\">%s</a>\n"
|
||||||
|
" </dt>\n",
|
||||||
|
This.BaseFilename,
|
||||||
|
Title);
|
||||||
|
}
|
||||||
|
|
||||||
Index.Metadata.Buffer.Ptr += sizeof(Index.Entry);
|
Index.Metadata.Buffer.Ptr += sizeof(Index.Entry);
|
||||||
IndexEntryStart += This.Size;
|
IndexEntryStart += This.Size;
|
||||||
Index.File.Buffer.Ptr = IndexEntryStart;
|
Index.File.Buffer.Ptr = IndexEntryStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
char URLPrefix[1024] = { 0 };
|
CopyStringToBuffer(&CollationBuffers->Index, Script);
|
||||||
char *Ptr = URLPrefix;
|
|
||||||
if(StringsDiffer(Config.RootURL, ""))
|
|
||||||
{
|
|
||||||
Ptr += CopyString(Ptr, "%s/", Config.RootURL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Ptr += CopyString(Ptr, "../");
|
|
||||||
}
|
|
||||||
if(StringsDiffer(Config.JSDir, ""))
|
|
||||||
{
|
|
||||||
Ptr += CopyString(Ptr, "%s/", Config.JSDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
CopyStringToBuffer(&CollationBuffers->Index, " </dl>\n"
|
|
||||||
" <script type=\"text/javascript\">\n"
|
|
||||||
" var indexLocation = \"%s.index\";\n"
|
|
||||||
" var projectID = \"%s\";\n"
|
|
||||||
" </script>\n"
|
|
||||||
" <script type=\"text/javascript\" src=\"%scinera_search.js\"></script>\n",
|
|
||||||
Config.ProjectID,
|
|
||||||
Config.ProjectID,
|
|
||||||
URLPrefix);
|
|
||||||
|
|
||||||
FreeBuffer(&Index.Metadata.Buffer);
|
FreeBuffer(&Index.Metadata.Buffer);
|
||||||
return RC_SUCCESS;
|
return RC_SUCCESS;
|
||||||
|
@ -3829,6 +3890,7 @@ GenerateIndexPage(buffers *CollationBuffers, template *IndexTemplate)
|
||||||
CopyString(IndexPagePath, "%s/index.html", Config.BaseDir);
|
CopyString(IndexPagePath, "%s/index.html", Config.BaseDir);
|
||||||
IndexToBuffer(CollationBuffers);
|
IndexToBuffer(CollationBuffers);
|
||||||
BuffersToHTML(CollationBuffers, IndexTemplate, IndexPagePath, PAGE_INDEX);
|
BuffersToHTML(CollationBuffers, IndexTemplate, IndexPagePath, PAGE_INDEX);
|
||||||
|
FreeBuffer(&CollationBuffers->Index);
|
||||||
return RC_SUCCESS;
|
return RC_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4098,6 +4160,7 @@ main(int ArgC, char **Args)
|
||||||
.ProjectID = "",
|
.ProjectID = "",
|
||||||
.RootDir = ".",
|
.RootDir = ".",
|
||||||
.RootURL = "",
|
.RootURL = "",
|
||||||
|
.Theme = "",
|
||||||
.TemplatePlayerLocation = "template_player.html",
|
.TemplatePlayerLocation = "template_player.html",
|
||||||
.TemplateIndexLocation = "template_index.html",
|
.TemplateIndexLocation = "template_index.html",
|
||||||
.UpdateInterval = 4
|
.UpdateInterval = 4
|
||||||
|
@ -4121,7 +4184,7 @@ main(int ArgC, char **Args)
|
||||||
}
|
}
|
||||||
|
|
||||||
char CommandLineArg;
|
char CommandLineArg;
|
||||||
while((CommandLineArg = getopt(ArgC, Args, "b:c:d:fhi:j:l:m:o:p:r:u:t:U:vx:")) != -1)
|
while((CommandLineArg = getopt(ArgC, Args, "b:c:d:fhi:j:l:m:o:p:r:u:s:t:U:vx:")) != -1)
|
||||||
{
|
{
|
||||||
switch(CommandLineArg)
|
switch(CommandLineArg)
|
||||||
{
|
{
|
||||||
|
@ -4160,6 +4223,9 @@ main(int ArgC, char **Args)
|
||||||
case 'r':
|
case 'r':
|
||||||
Config.RootDir = StripTrailingSlash(optarg);
|
Config.RootDir = StripTrailingSlash(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 's':
|
||||||
|
Config.Theme = optarg;
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
Config.TemplatePlayerLocation = optarg;
|
Config.TemplatePlayerLocation = optarg;
|
||||||
Config.Mode = MODE_INTEGRATE;
|
Config.Mode = MODE_INTEGRATE;
|
||||||
|
@ -4249,7 +4315,6 @@ main(int ArgC, char **Args)
|
||||||
|
|
||||||
if(ClaimBuffer(&CollationBuffers.IncludesIndex, "IncludesIndex", Kilobytes(1)) == RC_ARENA_FULL) { goto RIP; };
|
if(ClaimBuffer(&CollationBuffers.IncludesIndex, "IncludesIndex", Kilobytes(1)) == RC_ARENA_FULL) { goto RIP; };
|
||||||
if(ClaimBuffer(&CollationBuffers.Search, "Search", Kilobytes(32)) == RC_ARENA_FULL) { goto RIP; };
|
if(ClaimBuffer(&CollationBuffers.Search, "Search", Kilobytes(32)) == RC_ARENA_FULL) { goto RIP; };
|
||||||
if(ClaimBuffer(&CollationBuffers.Index, "Index", Kilobytes(8)) == RC_ARENA_FULL) { goto RIP; };
|
|
||||||
if(ClaimBuffer(&CollationBuffers.ScriptIndex, "ScriptIndex", 256) == RC_ARENA_FULL) { goto RIP; };
|
if(ClaimBuffer(&CollationBuffers.ScriptIndex, "ScriptIndex", 256) == RC_ARENA_FULL) { goto RIP; };
|
||||||
*CollationBuffers.Title = '\0';
|
*CollationBuffers.Title = '\0';
|
||||||
|
|
||||||
|
@ -4341,13 +4406,15 @@ main(int ArgC, char **Args)
|
||||||
" Input Directory:\t\t%s\n"
|
" Input Directory:\t\t%s\n"
|
||||||
" Output Base Directory:\t%s\n"
|
" Output Base Directory:\t%s\n"
|
||||||
" Default Medium:\t\t%s\n"
|
" Default Medium:\t\t%s\n"
|
||||||
|
" Style / Theme:\t\t%s\n"
|
||||||
"\n"
|
"\n"
|
||||||
"┌╼ Synchronising with annotation files in Project Input Directory ╾┐\n",
|
"┌╼ Synchronising with annotation files in Project Input Directory ╾┐\n",
|
||||||
|
|
||||||
Config.ProjectID,
|
Config.ProjectID,
|
||||||
Config.ProjectDir,
|
Config.ProjectDir,
|
||||||
Config.BaseDir,
|
Config.BaseDir,
|
||||||
Config.DefaultMedium);
|
Config.DefaultMedium,
|
||||||
|
StringsDiffer(Config.Theme, "") ? Config.Theme: Config.ProjectID);
|
||||||
|
|
||||||
SyncIndexWithInput(&CollationBuffers, IndexTemplate, PlayerTemplate);
|
SyncIndexWithInput(&CollationBuffers, IndexTemplate, PlayerTemplate);
|
||||||
|
|
||||||
|
@ -4414,7 +4481,6 @@ NextFile:
|
||||||
}
|
}
|
||||||
|
|
||||||
DeclaimBuffer(&CollationBuffers.ScriptIndex);
|
DeclaimBuffer(&CollationBuffers.ScriptIndex);
|
||||||
DeclaimBuffer(&CollationBuffers.Index);
|
|
||||||
DeclaimBuffer(&CollationBuffers.Search);
|
DeclaimBuffer(&CollationBuffers.Search);
|
||||||
DeclaimBuffer(&CollationBuffers.IncludesIndex);
|
DeclaimBuffer(&CollationBuffers.IncludesIndex);
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<!-- Index template -->
|
<!-- Index template -->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>RISCY BUSINESS Episode Guide</title>
|
<title><!-- __CINERA_PROJECT__ --> Episode Guide</title>
|
||||||
<!-- __CINERA_INCLUDES__ -->
|
<!-- __CINERA_INCLUDES__ -->
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 style="background-color: #3399FF; text-align:center; width: 100%; margin: 0 auto">RISCY BUSINESS Episode Guide</h1>
|
<h1 style="background-color: #3399FF; text-align:center; width: 100%; margin: 0 auto"><!-- __CINERA_PROJECT__ --> Episode Guide</h1>
|
||||||
<div>This should just be the table of contents, heroes and heroines</div>
|
<div>This should just be the table of contents, heroes and heroines</div>
|
||||||
<!-- __CINERA_INDEX__ -->
|
<!-- __CINERA_INDEX__ -->
|
||||||
</body>
|
</body>
|
|
@ -1,7 +1,7 @@
|
||||||
<!-- Player template -->
|
<!-- Player template -->
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title><!-- __CINERA_TITLE__ --> - RISCY BUSINESS</title>
|
<title><!-- __CINERA_TITLE__ --> - <!-- __CINERA_PROJECT__ --></title>
|
||||||
<!-- __CINERA_INCLUDES__ -->
|
<!-- __CINERA_INCLUDES__ -->
|
||||||
</head>
|
</head>
|
||||||
<!-- 1. This is a random comment. How does this affect it, if at all? -->
|
<!-- 1. This is a random comment. How does this affect it, if at all? -->
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 881 B After Width: | Height: | Size: 881 B |
Loading…
Reference in New Issue