cinera: Add IRC unfurl tags and GitHub sponsors
New config field:
    instance_title
			
			
This commit is contained in:
		
							parent
							
								
									8dffa513cc
								
							
						
					
					
						commit
						26e304f62c
					
				| 
						 | 
					@ -23,7 +23,7 @@ typedef struct
 | 
				
			||||||
version CINERA_APP_VERSION = {
 | 
					version CINERA_APP_VERSION = {
 | 
				
			||||||
    .Major = 0,
 | 
					    .Major = 0,
 | 
				
			||||||
    .Minor = 10,
 | 
					    .Minor = 10,
 | 
				
			||||||
    .Patch = 10
 | 
					    .Patch = 11
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdarg.h> // NOTE(matt): varargs
 | 
					#include <stdarg.h> // NOTE(matt): varargs
 | 
				
			||||||
| 
						 | 
					@ -1416,6 +1416,7 @@ publicly, then we can set ignore_privacy to \"true\" and save the resources othe
 | 
				
			||||||
"The ID of a person (see also person) who indexes a project. They will then appear in the credits menu of each entry in the project. Note that setting an indexer in the configuration \
 | 
					"The ID of a person (see also person) who indexes a project. They will then appear in the credits menu of each entry in the project. Note that setting an indexer in the configuration \
 | 
				
			||||||
file credits this person for the entire project, but indexers may \"uncredit\" people in the [video] node of a HMML file."
 | 
					file credits this person for the entire project, but indexers may \"uncredit\" people in the [video] node of a HMML file."
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    { "instance_title", "The name of the instance, used as the cinera:title on the global search page." },
 | 
				
			||||||
    { "js_path", "Path relative to assets_root_dir and assets_root_url where JavaScript files are located." },
 | 
					    { "js_path", "Path relative to assets_root_dir and assets_root_url where JavaScript files are located." },
 | 
				
			||||||
    { "lineage", 0, 0, "A slash-separated string of all project IDs from the top of the family tree to the present project." },
 | 
					    { "lineage", 0, 0, "A slash-separated string of all project IDs from the top of the family tree to the present project." },
 | 
				
			||||||
    { "lineage_without_origin", 0, 0, "Same as the $lineage, without the first component (the $origin)." },
 | 
					    { "lineage_without_origin", 0, 0, "Same as the $lineage, without the first component (the $origin)." },
 | 
				
			||||||
| 
						 | 
					@ -1534,6 +1535,7 @@ typedef enum
 | 
				
			||||||
    IDENT_IMAGES_PATH,
 | 
					    IDENT_IMAGES_PATH,
 | 
				
			||||||
    IDENT_INCLUDE,
 | 
					    IDENT_INCLUDE,
 | 
				
			||||||
    IDENT_INDEXER,
 | 
					    IDENT_INDEXER,
 | 
				
			||||||
 | 
					    IDENT_INSTANCE_TITLE,
 | 
				
			||||||
    IDENT_JS_PATH,
 | 
					    IDENT_JS_PATH,
 | 
				
			||||||
    IDENT_LINEAGE,
 | 
					    IDENT_LINEAGE,
 | 
				
			||||||
    IDENT_LINEAGE_WITHOUT_ORIGIN,
 | 
					    IDENT_LINEAGE_WITHOUT_ORIGIN,
 | 
				
			||||||
| 
						 | 
					@ -3705,6 +3707,16 @@ CopyStringToBufferHTMLSafe_(int LineNumber, buffer *Dest, string String)
 | 
				
			||||||
    *Dest->Ptr = '\0';
 | 
					    *Dest->Ptr = '\0';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CopyStringToBufferHTMLSafeSurrounded(Dest, Pre, String, Post) CopyStringToBufferHTMLSafeSurrounded_(__LINE__, Dest, Pre, String, Post)
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					CopyStringToBufferHTMLSafeSurrounded_(int LineNumber, buffer *Dest, string Pre, string String, string Post)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // NOTE(matt): Only the String gets HTML-encoded. The Pre and Post parts get copied as-is
 | 
				
			||||||
 | 
					    CopyStringToBufferNoFormat_(LineNumber, Dest, Pre);
 | 
				
			||||||
 | 
					    CopyStringToBufferHTMLSafe_(LineNumber, Dest, String);
 | 
				
			||||||
 | 
					    CopyStringToBufferNoFormat_(LineNumber, Dest, Post);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CopyStringToBufferHTMLSafeBreakingOnSlash(Dest, String) CopyStringToBufferHTMLSafeBreakingOnSlash_(__LINE__, Dest, String)
 | 
					#define CopyStringToBufferHTMLSafeBreakingOnSlash(Dest, String) CopyStringToBufferHTMLSafeBreakingOnSlash_(__LINE__, Dest, String)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
CopyStringToBufferHTMLSafeBreakingOnSlash_(int LineNumber, buffer *Dest, string String)
 | 
					CopyStringToBufferHTMLSafeBreakingOnSlash_(int LineNumber, buffer *Dest, string String)
 | 
				
			||||||
| 
						 | 
					@ -11029,6 +11041,16 @@ HMMLToBuffers(buffers *CollationBuffers, template *BespokeTemplate, string BaseF
 | 
				
			||||||
                                CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
 | 
					                                CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
 | 
				
			||||||
                                        "\"></script>");
 | 
					                                        "\"></script>");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
 | 
				
			||||||
 | 
					                                        "\n"
 | 
				
			||||||
 | 
					                                        "\n        <meta property=\"cinera:type\" content=\"entry\">");
 | 
				
			||||||
 | 
					                                CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
 | 
				
			||||||
 | 
					                                        Wrap0("\n        <meta property=\"cinera:title\" content=\""), Title, Wrap0("\">"));
 | 
				
			||||||
 | 
					                                CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
 | 
				
			||||||
 | 
					                                        Wrap0("\n        <meta property=\"cinera:project\" content=\""), CurrentProject->Title, Wrap0("\">"));
 | 
				
			||||||
 | 
					                                CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
 | 
				
			||||||
 | 
					                                        Wrap0("\n        <meta property=\"cinera:project_lineage\" content=\""), CurrentProject->WrittenLineage, Wrap0("\">"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                asset *JSPlayerPost = GetAsset(Wrap0(BuiltinAssets[ASSET_JS_PLAYER_POST].Filename), ASSET_JS);
 | 
					                                asset *JSPlayerPost = GetAsset(Wrap0(BuiltinAssets[ASSET_JS_PLAYER_POST].Filename), ASSET_JS);
 | 
				
			||||||
                                ConstructResolvedAssetURL(&URL, JSPlayerPost, PAGE_PLAYER);
 | 
					                                ConstructResolvedAssetURL(&URL, JSPlayerPost, PAGE_PLAYER);
 | 
				
			||||||
                                CopyStringToBuffer(&PlayerBuffers.Script,
 | 
					                                CopyStringToBuffer(&PlayerBuffers.Script,
 | 
				
			||||||
| 
						 | 
					@ -13967,6 +13989,25 @@ SearchToBuffer(buffers *CollationBuffers, db_header_project *StoredP, project *P
 | 
				
			||||||
        CopyStringToBuffer(&CollationBuffers->IncludesSearch,
 | 
					        CopyStringToBuffer(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
                "\" defer></script>");
 | 
					                "\" defer></script>");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(P)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            CopyStringToBuffer(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
 | 
					                    "\n"
 | 
				
			||||||
 | 
					                    "\n        <meta property=\"cinera:type\" content=\"project\">");
 | 
				
			||||||
 | 
					            CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
 | 
					                    Wrap0("\n        <meta property=\"cinera:title\" content=\""), P->Title, Wrap0("\">"));
 | 
				
			||||||
 | 
					            CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
 | 
					                    Wrap0("\n        <meta property=\"cinera:project_lineage\" content=\""), P->WrittenLineage, Wrap0("\">"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            CopyStringToBuffer(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
 | 
					                    "\n"
 | 
				
			||||||
 | 
					                    "\n        <meta property=\"cinera:type\" content=\"instance\">");
 | 
				
			||||||
 | 
					            CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
 | 
				
			||||||
 | 
					                    Wrap0("\n        <meta property=\"cinera:title\" content=\""), Config->InstanceTitle, Wrap0("\">"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        OpenNodeNewLine(B, &IndentationLevel, NODE_DIV, 0);
 | 
					        OpenNodeNewLine(B, &IndentationLevel, NODE_DIV, 0);
 | 
				
			||||||
        AppendStringToBuffer(B, Wrap0(" class=\"cineraQueryContainer\">"));
 | 
					        AppendStringToBuffer(B, Wrap0(" class=\"cineraQueryContainer\">"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -560,6 +560,8 @@ typedef struct
 | 
				
			||||||
    string DatabaseLocation;
 | 
					    string DatabaseLocation;
 | 
				
			||||||
    string CacheDir;
 | 
					    string CacheDir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    string InstanceTitle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    string GlobalTemplatesDir;
 | 
					    string GlobalTemplatesDir;
 | 
				
			||||||
    string GlobalSearchTemplatePath;
 | 
					    string GlobalSearchTemplatePath;
 | 
				
			||||||
    string GlobalSearchDir;
 | 
					    string GlobalSearchDir;
 | 
				
			||||||
| 
						 | 
					@ -903,6 +905,7 @@ InitTypeSpecs(void)
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_HMML_DIR, TRUE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_HMML_DIR, TRUE);
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_IMAGES_PATH, TRUE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_IMAGES_PATH, TRUE);
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_INDEXER, FALSE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_INDEXER, FALSE);
 | 
				
			||||||
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_INSTANCE_TITLE, TRUE);
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_JS_PATH, TRUE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_JS_PATH, TRUE);
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_LOG_LEVEL, TRUE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_LOG_LEVEL, TRUE);
 | 
				
			||||||
    PushTypeSpecField(Root, FT_STRING, IDENT_OWNER, TRUE);
 | 
					    PushTypeSpecField(Root, FT_STRING, IDENT_OWNER, TRUE);
 | 
				
			||||||
| 
						 | 
					@ -2046,6 +2049,12 @@ SetDefaults(scope_tree *Root, memory_book *TypeSpecs)
 | 
				
			||||||
    PushDefaultIntPair(SupportPatreon, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
 | 
					    PushDefaultIntPair(SupportPatreon, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
 | 
				
			||||||
    PushDefaultPair(SupportPatreon, IDENT_URL, Wrap0("https://patreon.com/$person"));
 | 
					    PushDefaultPair(SupportPatreon, IDENT_URL, Wrap0("https://patreon.com/$person"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    scope_tree *SupportGitHub = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("github"));
 | 
				
			||||||
 | 
					    PushDefaultPair(SupportGitHub, IDENT_ICON, Wrap0("cinera_sprite_github.png"));
 | 
				
			||||||
 | 
					    PushDefaultIntPair(SupportGitHub, IDENT_ICON_TYPE, IT_GRAPHICAL);
 | 
				
			||||||
 | 
					    PushDefaultIntPair(SupportGitHub, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
 | 
				
			||||||
 | 
					    PushDefaultPair(SupportGitHub, IDENT_URL, Wrap0("https://github.com/sponsors/$person"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    scope_tree *SupportSendOwl = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("sendowl"));
 | 
					    scope_tree *SupportSendOwl = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("sendowl"));
 | 
				
			||||||
    PushDefaultPair(SupportSendOwl, IDENT_ICON, Wrap0("cinera_sprite_sendowl.png"));
 | 
					    PushDefaultPair(SupportSendOwl, IDENT_ICON, Wrap0("cinera_sprite_sendowl.png"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4581,6 +4590,7 @@ PrintConfig(config *C, bool ShouldClearTerminal)
 | 
				
			||||||
        int AvailableColumns = TermCols - StringLength(Typography.Margin);
 | 
					        int AvailableColumns = TermCols - StringLength(Typography.Margin);
 | 
				
			||||||
        TypesetPair(&Typography, 0, IDENT_DB_LOCATION, C->DatabaseLocation, AvailableColumns);
 | 
					        TypesetPair(&Typography, 0, IDENT_DB_LOCATION, C->DatabaseLocation, AvailableColumns);
 | 
				
			||||||
        TypesetPair(&Typography, 0, IDENT_CACHE_DIR, C->CacheDir, AvailableColumns);
 | 
					        TypesetPair(&Typography, 0, IDENT_CACHE_DIR, C->CacheDir, AvailableColumns);
 | 
				
			||||||
 | 
					        TypesetPair(&Typography, 0, IDENT_INSTANCE_TITLE, C->InstanceTitle, AvailableColumns);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        fprintf(stderr, "\n");
 | 
					        fprintf(stderr, "\n");
 | 
				
			||||||
        TypesetPair(&Typography, 0, IDENT_GLOBAL_TEMPLATES_DIR, C->GlobalTemplatesDir, AvailableColumns);
 | 
					        TypesetPair(&Typography, 0, IDENT_GLOBAL_TEMPLATES_DIR, C->GlobalTemplatesDir, AvailableColumns);
 | 
				
			||||||
| 
						 | 
					@ -4800,6 +4810,8 @@ ResolveVariables(scope_tree *S)
 | 
				
			||||||
            // NOTE(matt): String
 | 
					            // NOTE(matt): String
 | 
				
			||||||
            case IDENT_DB_LOCATION:
 | 
					            case IDENT_DB_LOCATION:
 | 
				
			||||||
                { Result->DatabaseLocation = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS); } break;
 | 
					                { Result->DatabaseLocation = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS); } break;
 | 
				
			||||||
 | 
					            case IDENT_INSTANCE_TITLE:
 | 
				
			||||||
 | 
					                { Result->InstanceTitle = ResolveString(Result, &Errors, S, Pair, TRUE); } break;
 | 
				
			||||||
            case IDENT_GLOBAL_SEARCH_DIR:
 | 
					            case IDENT_GLOBAL_SEARCH_DIR:
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Result->GlobalSearchDir = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS);
 | 
					                    Result->GlobalSearchDir = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.1 KiB  | 
		Loading…
	
		Reference in New Issue