Difference between revisions of "expert"

From GeneWeb
Jump to: navigation, search
m (Commands (m=XXX))
(added %version; and %compilation_time;)
Line 125: Line 125:
 
"colspan"
 
"colspan"
 
"comment"
 
"comment"
 +
"compilation_time"
 
"computable_age"
 
"computable_age"
 
"computable_death_age"
 
"computable_death_age"
Line 314: Line 315:
 
"prev_item"  
 
"prev_item"  
 
"public_name"
 
"public_name"
"pvar"  
+
"pvar"
 
"qualifier"
 
"qualifier"
 
"region"
 
"region"
 
"related_type"
 
"related_type"
"related"  
+
"related"
 
"relation_her"  
 
"relation_her"  
 
"relation_him"  
 
"relation_him"  
Line 344: Line 345:
 
"source_type"
 
"source_type"
 
"source"
 
"source"
"spouse"  
+
"spouse"
 
"src"
 
"src"
 
"surname_alias"
 
"surname_alias"
Line 356: Line 357:
 
"town"
 
"town"
 
"township"
 
"township"
"v"  
+
"v"
"var"  
+
"var"
 +
"version"
 
"wedding_birthday"
 
"wedding_birthday"
 
"witness_relation"  
 
"witness_relation"  

Revision as of 19:14, 30 October 2016

150px-Geographylogo svg.png Language: English

Template programming (%if; ... %end;)

The template mechanism provides a very powerful mechanism to construct HTML (or other) pages according to the content of a GeneWeb base. This section is not intending to give an exhaustive description of the corresponding language. Through some examples extracted from gw/etc/perso.txt, it provides a glimpse of the possibility. The last two examples are extracted from a template that generates LaTeX rather than HTML.

For further analysis, explore the various other template files, and on last resort, explore the Ocaml source files!!

Programming constructs:

 %define; ... %end;
 %if; [%elseif;] [%else;] %end;
 %let;xxx;zzz%in;
 %foreach; ... %end;
 %apply; ... [%with;... [%and;] ...%end;]
 %nl; %nn; %sp; 


 <title>%nn;
   %if;has_public_name;
     %if;has_qualifiers;%public_name; %qualifier;
     %else;%public_name; %surname;%end;
   %else;
     %if;has_qualifiers;%first_name; %qualifier;
     %else;%first_name; %surname;%end;
   %end;
 </title>
%define;married_to(sexx, date_place)
 %if;(sexx = 0 or sexx = 2)
   %if;are_married;[*married%t to:::date_place]0%nn;
   %elseif;are_not_married;[*relationship%t to:::date_place]0%nn;
   %elseif;are_engaged;[*engaged%t to:::date_place]0%nn;
   %elseif;is_no_sexes_check;[*relationship%t to:::date_place]0%nn;
   %elseif;is_no_mention;date_place [*with]%nn;
   %end;
 %else;
   %if;are_married;[*married%t to:::date_place]1%nn;
   %elseif;are_not_married;[*relationship%t to:::date_place]1%nn;
   %elseif;are_engaged;[*engaged%t to:::date_place]1%nn;
   %elseif;is_no_sexes_check;[*relationship%t to:::date_place]1%nn;
   %elseif;is_no_mention;date_place [*with]%nn;
   %end;
 %end;
%end;
%if;(bvar.can_send_image != "no" and image = "" and first_name != "?" and surname != "?")
     <li><a href="%prefix;m=SND_IMAGE;i=%index;" class="add_portrait">
            %if;(auto_image_file_name != "")[*modify picture]%else;[*add picture]%end;
          </a>
     </li>
%end;
 
%define;hgindex(alxx, snxx, fnxx, occxx)
  %if;(alxx = "0")
    %if;(occxx = "0")
      \index{snxx, fnxx}
    %else;
      \index{snxx, fnxx (occxx)}
    %end;
  %else;
    %if;(occxx = "0")
      \index{alxx, voir snxx, fnxx}
    %else;
      \index{alxx, voir snxx, fnxx (occxx)}
    %end;
  %end;
%end
%foreach;alias;
    {\it {\bf %alias;}}%apply;hgindex(alias, surname, first_name, occ)\\%nl;
%end;

This list does not claim to be exhaustive (but pretty close!!).

"access_by_key"
"access" 
"age"
"alias" 
"anc_sosa" 
"ancestor_level" 
"ancestor_level2" 
"ancestor_surname" 
"ancestor_tree_line" 
"ancestor" 
"are_divorced"
"are_engaged"
"are_married"
"are_not_married"
"are_separated"
"auto_image_file_name"
"baptism_date" 
"baptism_note"
"baptism_place"
"baptism_witness" 
"base" 
"birth_date" 
"birth_note"
"birth_place"
"birth_witness" 
"birth_witness" 
"birthday"
"browsing_with_sosa_ref"
"burial_date" 
"burial_note"
"burial_place"
"burial_witness" 
"bvar"
"canton"
"cell" 
"child_cnt" 
"child_name"
"child" 
"colspan"
"comment"
"compilation_time"
"computable_age"
"computable_death_age"
"computable_marriage_age"
"consanguinity"
"count"
"country"
"county"
"cousin_level" 
"cremated_date" 
"cremation_place"
"cremation_witness" 
"date_begin" 
"date_end" 
"date"
"dates"
"day"
"death_age"
"death_date" 
"death_note"
"death_place"
"death_witness" 
"desc_level"
"descendant_level" 
"died" 
"district"
"divorce_date"
"empty_sorted_list"
"enclosing" 
"evar"
"event_witness_kind" 
"event_witness_relation_kind" 
"event_witness_relation" 
"event_witness" 
"event" 
"fam_access"
"family_cnt" 
"family" 
"father_age_at_birth" 
"father_sosa"
"father" 
"first_name_alias"
"first_name_key_strip"
"first_name_key_val"
"first_name_key"
"first_name"
"fwitness"
"has_aliases"
"has_baptism_date" 
"has_baptism_note"
"has_baptism_place" 
"has_baptism_witnesses"
"has_birth_date" 
"has_birth_note"
"has_birth_place" 
"has_birth_witnesses"
"has_burial_date"
"has_burial_note"
"has_burial_place" 
"has_burial_witnesses"
"has_children"
"has_comment"
"has_consanguinity"
"has_cremation_date"
"has_cremation_place" 
"has_cremation_witnesses"
"has_date"
"has_death_date"
"has_death_note"
"has_death_place" 
"has_death_witnesses"
"has_event"
"has_families" 
"has_first_names_aliases"
"has_fsources"
"has_fwitness"
"has_history"
"has_image" 
"has_linked_page"
"has_linked_pages"
"has_marriage_note"
"has_nephews_or_nieces" 
"has_nobility_titles" 
"has_note" 
"has_notes"
"has_occupation" 
"has_parents" 
"has_place"
"has_possible_duplications" 
"has_psources"
"has_public_name"
"has_qualifiers"
"has_relation_her"
"has_relation_him"
"has_relations"
"has_siblings"
"has_sosa"
"has_sources"
"has_spouse"
"has_src" 
"has_surnames_aliases"
"has_witnesses"
"hexa" 
"history_file"
"ident_key" 
"image_html_url" 
"image_medium_size"
"image_size" 
"image_small_size" 
"image_url" 
"image"
"incr_count"
"ind_access"
"index" 
"interval"
"is_buried"
"is_center"
"is_cremated"
"is_dead"
"is_descendant"
"is_empty"
"is_female" 
"is_first"
"is_invisible"
"is_last"
"is_left"
"is_male"
"is_no_mention"
"is_no_sexes_check"
"is_private" 
"is_public" 
"is_restricted" 
"is_right"
"is_self"
"is_sibling_after" 
"is_sibling_before" 
"is_top"
"item" 
"lazy_force"
"lazy_printed"
"level"
"linked_page"
"mark_descendants"
"marriage_age"
"marriage_date" 
"marriage_note"
"marriage_place"
"max_anc_level"
"max_cous_level"
"max_desc_level"
"misc_names"
"month"
"mother_age_at_birth" 
"mother_sosa"
"mother" 
"name"
"nb_children"
"nb_events" 
"nb_families" 
"nb_ind"
"nb_times" 
"next_item" 
"nobility_title"
"note"
"notes"
"number_of_ancestors" 
"number_of_descendants" 
"number_of_subitems"
"occ"
"occupation"
"octal"
"on_baptism_date"
"on_birth_date"
"on_burial_date"
"on_cremation_date"
"on_date"
"on_death_date"
"on_marriage_date"
"origin_file"
"other"
"parent" 
"place_key" 
"place"
"prec"
"prev_fam_father"
"prev_fam_index"
"prev_fam_mother"
"prev_family" 
"prev_item" 
"public_name"
"pvar"
"qualifier"
"region"
"related_type"
"related"
"relation_her" 
"relation_him" 
"relation_type"
"relation" 
"reset_count"
"reset_desc_level"
"same" 
"self" 
"set_infinite_desc_level"
"sex"
"slash_baptism_date"
"slash_birth_date"
"slash_burial_date"
"slash_cremation_date"
"slash_death_date"
"slash_divorce_date"
"slash_marriage_date"
"sorted_list_item" 
"sosa_access"
"sosa_in_list"
"sosa_link"
"sosa_ref" 
"sosa" 
"source_type"
"source"
"spouse"
"src"
"surname_alias"
"surname_begin"
"surname_end"
"surname_key_strip"
"surname_key_val"
"surname_key"
"surname"
"title" 
"town"
"township"
"v"
"var"
"version"
"wedding_birthday"
"witness_relation" 
"witness" 
"year"

Macros (%x)

See Macros for a description of their use.

Below is the result of calling all 26 lower case possible macros: This table is automatically generated by inserting a bit of HTML/GeneWeb code into the notes of one person in your base. The corresponding code is here

Table of GeneWeb macros.

Commands (m=XXX)

List of the commands appearing in URL with the form:

%sm=COMMAND;p=param1;n=param2;

This list does not claim to be exhaustive, and does not "explain" what each command does!

"A"
"ADD_FAM" 
"ADD_FAM_OK" 
"ADD_IND" 
"ADD_IND_OK"  
"ADD_PAR" 
"ANM" 
"AN"
"AD"
"AM"
"AS_OK" 
"B" 
"C"
"CAL" 
"CHG_CHN" 
"CHG_CHN_OK" 
"CHG_FAM_ORD" 
"CHG_FAM_ORD_OK" 
"CONN_WIZ" *
"D"
"DAG" *
"DEL_FAM"  
"DEL_FAM_OK"  
"DEL_IMAGE"  
"DEL_IMAGE_OK" 
"DEL_IND"  
"DEL_IND_OK" 
"DOC" (* obsolete *)
"FORUM"
"FORUM_ADD"
"FORUM_ADD_OK"
"FORUM_DEL"
"FORUM_P_P"
"FORUM_SEARCH"
"FORUM_VAL"
"FORUM_VIEW"
"H"
"HIST" 
"HIST_CLEAN"  
"HIST_CLEAN_OK" 
"HIST_DIFF" 
"HIST_SEARCH" 
"IM" *
"IMH" *
"INV_FAM"  
"INV_FAM_OK"  
"KILL_ANC" 
"LB" 
"LD" 
"LINKED"
"LL" 
"LM" 
"LEX" 
"MISC_NOTES" 
"MISC_NOTES_SEARCH" 
"MOD_DATA"  
"MOD_DATA_OK"  
"MOD_FAM"  
"MOD_FAM_OK"  
"MOD_IND"  
"MOD_IND_OK" 
"MOD_NOTES"  
"MOD_NOTES_OK"  
"MOD_WDOC"  (* obsolete *)
"MOD_WDOC_OK"  (* obsolete *)
"MOD_WIZNOTES" *
"MOD_WIZNOTES_OK" *
"MRG" 
"MRG_DUP"  
"MRG_DUP_IND_Y_N" 
"MRG_DUP_FAM_Y_N" 
"MRG_FAM"  
"MRG_FAM_OK"  
"MRG_MOD_FAM_OK" 
"MRG_IND"  
"MRG_IND_OK"  
"MRG_MOD_IND_OK" 
"N"
"NG"
"NOTES" 
"OA" 
"OE" 
"P"
"POP_PYR" 
"PS" P
"R"
"REQUEST" 
"RL" 
"RLM" *
"S" 
"SND_IMAGE"  
"SND_IMAGE_OK" 
"SRC" *
"STAT" B
"CHANGE_WIZ_VIS" *
"TT" 
"U" 
"VIEW_WIZNOTES" 
"WDOC" (* obsolete *)
"WIZNOTES" *
"WIZNOTES_SEARCH" *

Commands marked with a * are documented below:

Variables (evar and bvar)

GeneWeb proposed a general purpose mechanism allowing the user/programmer to extend at will the notion of variable described here.

If a new variable is defined in the .gwf configuration file, then it will be possible to test for the value of this variable in the context of a template file. For instance, if we have added

new_var=some-text

in .gwf, then the following code in the template will be able to perform some specific action:

%if; (bvar.new_var = "sometext" ) 
    ... perform some specific action ...
%end;

Similarly, if we have added a new variable in the URL of the query to GeneWeb (localhost:2317/base?p=first-name;n=last-name;lang=fr;tree=3, then it is possible to test for this variable with code such as:

%if; (evar.tree = 3 ) 
    ... display 3 generation tree ...
%end;

The value itself of such variables can be inserted in the body of a template by typing %evar.tree;, for instance:

<title>Tree with %evar.tree; generations</title>

The special variable var is treated in the following fashion within notes, sources and comments: If you define in the .gwf file a variable {{{1}}}, then invoquing the macro %vtext; in a note or a template will produce the text some_text as in the following example:

var_who=Bond, James Bond

"My name is %vwho;." in a note will be transformed into "My name is Bond, James Bond.".

This feature is used by some to facilitate signature of sources. The .gwf file contains a list of var_nickname definitions whose value is a full name and possibly a pointer to a page containing more detailed information:

var_henri=<a href="http://site/base?p=Firstname;n=lastname">First_name Lastname</a>

(no %x or %macro; in the value of the parameter!!).

Building trees through direct url construction

See trees or trees/fr


GeneWeb Manual

Rembrandt Old Man Reading a Book.jpg

Use and manage genealogical databases

Technical annex