cinera.c: Add new reference combination
This commit is contained in:
		
							parent
							
								
									1efd808783
								
							
						
					
					
						commit
						4b9e1a2fa0
					
				
							
								
								
									
										180
									
								
								cinera/cinera.c
								
								
								
								
							
							
						
						
									
										180
									
								
								cinera/cinera.c
								
								
								
								
							|  | @ -14,7 +14,7 @@ typedef struct | |||
| version CINERA_APP_VERSION = { | ||||
|     .Major = 0, | ||||
|     .Minor = 5, | ||||
|     .Patch = 42 | ||||
|     .Patch = 43 | ||||
| }; | ||||
| 
 | ||||
| // TODO(matt): Copy in the DB 3 stuff from cinera_working.c
 | ||||
|  | @ -1559,20 +1559,22 @@ BuildCredits(buffer *CreditsMenu, bool *HasCreditsMenu, HMML_VideoMetaData *Meta | |||
|     return RC_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     REF_SITE = 1 << 0, | ||||
|     REF_PAGE = 1 << 1, | ||||
|     REF_URL = 1 << 2, | ||||
|     REF_TITLE = 1 << 3, | ||||
|     REF_ARTICLE = 1 << 4, | ||||
|     REF_AUTHOR = 1 << 5, | ||||
|     REF_EDITOR = 1 << 6, | ||||
|     REF_PUBLISHER = 1 << 7, | ||||
|     REF_ISBN = 1 << 8, | ||||
| } reference_fields; | ||||
| 
 | ||||
| int | ||||
| BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMML_Reference *Ref, HMML_Annotation *Anno) | ||||
| { | ||||
| 
 | ||||
| #define REF_SITE (1 << 0) | ||||
| #define REF_PAGE (1 << 1) | ||||
| #define REF_URL (1 << 2) | ||||
| #define REF_TITLE (1 << 3) | ||||
| #define REF_ARTICLE (1 << 4) | ||||
| #define REF_AUTHOR (1 << 5) | ||||
| #define REF_EDITOR (1 << 6) | ||||
| #define REF_PUBLISHER (1 << 7) | ||||
| #define REF_ISBN (1 << 8) | ||||
| 
 | ||||
|     int Mask = 0; | ||||
| 
 | ||||
|     if(Ref->site)      { Mask |= REF_SITE; } | ||||
|  | @ -1585,82 +1587,90 @@ BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMM | |||
|     if(Ref->publisher) { Mask |= REF_PUBLISHER; } | ||||
|     if(Ref->isbn)      { Mask |= REF_ISBN; } | ||||
| 
 | ||||
|     if((REF_URL | REF_TITLE | REF_AUTHOR | REF_PUBLISHER | REF_ISBN) == Mask) | ||||
|     // TODO(matt): Consider handling the various combinations more flexibly
 | ||||
|     switch(Mask) | ||||
|     { | ||||
|         CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); | ||||
|         CopyString(ReferencesArray[UniqueRefs].Source, "%s (%s)", Ref->author, Ref->publisher); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_AUTHOR | REF_SITE | REF_PAGE | REF_URL) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|         CopyString(ReferencesArray[UniqueRefs].RefTitle, "%s: \"%s\"", Ref->author, Ref->page); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_PAGE | REF_URL | REF_TITLE) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->title); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_SITE | REF_PAGE | REF_URL) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_SITE | REF_URL | REF_TITLE) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_TITLE | REF_AUTHOR | REF_ISBN) == Mask) | ||||
|     { | ||||
|         CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); | ||||
|         CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|         CopyString(ReferencesArray[UniqueRefs].URL, "http://www.openisbn.com/isbn/%s", Ref->isbn); | ||||
|     } | ||||
|     else if((REF_URL | REF_ARTICLE | REF_AUTHOR) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->article); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_URL | REF_TITLE | REF_AUTHOR) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_URL | REF_TITLE) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else if((REF_SITE | REF_URL) == Mask) | ||||
|     { | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->site); | ||||
|         CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return 1; | ||||
|         case (REF_URL | REF_TITLE | REF_AUTHOR | REF_PUBLISHER | REF_ISBN): | ||||
|             { | ||||
|                 CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].Source, "%s (%s)", Ref->author, Ref->publisher); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_AUTHOR | REF_SITE | REF_PAGE | REF_URL): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].RefTitle, "%s: \"%s\"", Ref->author, Ref->page); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_PAGE | REF_URL | REF_TITLE): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_SITE | REF_PAGE | REF_URL): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_SITE | REF_URL | REF_TITLE): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_TITLE | REF_AUTHOR | REF_ISBN): | ||||
|             { | ||||
|                 CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].URL, "http://www.openisbn.com/isbn/%s", Ref->isbn); | ||||
|             } break; | ||||
|         case (REF_URL | REF_ARTICLE | REF_AUTHOR): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->article); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_URL | REF_TITLE | REF_AUTHOR): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_URL | REF_TITLE | REF_PUBLISHER): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyString(ReferencesArray[UniqueRefs].Source, Ref->publisher); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_URL | REF_TITLE): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         case (REF_SITE | REF_URL): | ||||
|             { | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->site); | ||||
|                 CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); | ||||
|             } break; | ||||
|         default: return RC_INVALID_REFERENCE; break; | ||||
|     } | ||||
| 
 | ||||
|     CopyString(ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Timecode, Anno->time); | ||||
|     ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Identifier = RefIdentifier; | ||||
|     return 0; | ||||
|     return RC_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| void | ||||
|  | @ -3399,7 +3409,7 @@ HMMLToBuffers(buffers *CollationBuffers, template **BespokeTemplate, char *Filen | |||
|                                 "                <div class=\"mouse_catcher\"></div>\n" | ||||
|                                 "                <div class=\"refs references_container\">\n"); | ||||
| 
 | ||||
|                         if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == 1) | ||||
|                         if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == RC_INVALID_REFERENCE) | ||||
|                         { | ||||
|                             LogError(LOG_ERROR, "Reference combination processing failed: %s:%d", Filename, Anno->line); | ||||
|                             fprintf(stderr, "%s:%d: Cannot process new combination of reference info\n" | ||||
|  | @ -3455,7 +3465,7 @@ HMMLToBuffers(buffers *CollationBuffers, template **BespokeTemplate, char *Filen | |||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                         if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == 1) | ||||
|                         if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == RC_INVALID_REFERENCE) | ||||
|                         { | ||||
|                             LogError(LOG_ERROR, "Reference combination processing failed: %s:%d", Filename, Anno->line); | ||||
|                             fprintf(stderr, "%s:%d: Cannot process new combination of reference info\n" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue