Home / release-03October2016
Name Modified Size InfoDownloads / Week
Parent folder
README.txt 2016-10-04 220.6 kB
LICENSE.txt 2016-10-04 34.5 kB
OpenNLC-03October2016a-source.zip 2016-10-04 419.6 kB
OpenNLC-03October2016a-binary-linux-x86_64.zip 2016-10-04 1.4 MB
OpenNLC-03October2016a-binary-windows-32bit.zip 2016-10-04 1.3 MB
OpenNLC-03October2016-VC++2010Project.zip 2016-10-04 9.4 kB
Totals: 6 Items   3.3 MB 0
//License:
See LICENSE.txt for copy of source license (AGPLv3)

//Copyright:
Author: Richard Bruce Baxter Copyright (c) 2005-2016 Baxter AI (baxterai.com)

//Release Notes:
Compilation of OpenNLC requires OpenGIA source (GIA*.cpp/GIA*.h) - see opengia.net
Ensure NLCrules.xml, GIArules.xml, and all input files are formatted for your operating system, e.g. 
	Linux: dos2unix GIArules.xml
	Windows: toDos.exe GIArules.xml (http://www.textpad.com/add-ons/files/utilities/convert.zip)
The present release supports both GIA and NLC advanced referencing (these can be selected by enabling/disabling GIA_DISABLE_CROSS_SENTENCE_REFERENCING in GIAglobalDefs.h)

//Change Record:

Release-17May2014:

OpenNLC 17-May-2014 - first public release
OpenNLC 24-May-2014 - CS compatiblity update; NLCmain.cpp add; #ifdef USE_CS_WORKAROUND executeGIA2(); #endif
OpenNLC 08-June-2014 - update header license intro
OpenNLC 08-June-2014 - NLC_CLASS_DEFINITIONS_ORDER_BY_DEPENDENCIES arrange classes in necessary order for C++ compilation
OpenNLC 08-June-2014 - NLC_CLASS_DEFINITIONS_USE_GENERIC_LIBRARY_ENTITY_CLASS add a top level NLC genericEntity class that all NLC generated classes inherit

Release-18July2014:

OpenNLC 30June2014a - If the sun is not bright, the dog is happy.	if negative
OpenNLC 01-July-2014a - change if statement interpretation; instead of using for loops, use explicit if
OpenNLC 01-July-2014a - While tom is red, eat a pie.	while
OpenNLC 01-July-2014a - While tom is not red, eat a pie.	while negative	
OpenNLC 01-July-2014a - implement condition if statements
OpenNLC 01-July-2014a - implement condition while statements
OpenNLC 03-July-2014a - generalise generateConditionBlocks() and subfunctions to support logicalOperations with default 'for' logical operation, and 'while'/'if' logical operations (ie if list is empty); as this is required for if/while conditions
OpenNLC 03-July-2014a - fold NLC_LOCAL_LISTS_USE_INSTANCE_NAMES code and change all createCodeBlockForPropertyListLocal references to createCodeBlockForPropertyList
OpenNLC 04-July-2014a -> 11July2014a - implement logical condition conjunctions. eg If the sun is bright and the trees are green, the dog is happy.	if concatenation (and/or)
OpenNLC 04-July-2014a - NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_CONJUNCTION_INTO_A_PROPERTY_CONJUNCTION - update transformTheActionOfPossessionEgHavingIntoAproperty() to transfer the "has" condition subject/object of a conjunction condition (ie and/or) to the "has" condition object (eg pie/mouse)
OpenNLC 05-July-2014a - trace all condition conjunctions ("and"/"or") connected to the logical condition ("if/while") object to generate additional logical condition codeblocks			
OpenNLC 05-July-2014a - look for conjunction conditions connected to a) the logical condition ("if/while") object and b) its conditions, and c) its properties/qualities (children) [REDUNDANT: because logical conditions and conjunction conditions will be connected to the children already]
OpenNLC 05-July-2014a - addNewLogicalCondition() must parse all paths (context, children conditions and children properties) regardless of the existence of concatenation conditions and increment logicalConditionConjunctionIndex appropriately
OpenNLC 05-July-2014a - must generate while conjunction logical conditions as follows: while(logicalCondition1 && logicalCondition2){ if(the red dog near the park has an apple){logicalCondition1 = true} if(the tea tree is blue){logicalCondition2 = true}   if(logicalCondition1 && logicalCondition2){the tea tree is blue}} 
OpenNLC 05-July-2014a - change all magic -1 integers to either INT_ARRAY_DEFAULT_VALUE or CPP_STRING_FIND_RESULT_FAIL_VALUE	
OpenNLC 05-July-2014a - update transformTheActionOfPossessionEgHavingIntoAproperty(): generalise NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_CONJUNCTION_INTO_A_PROPERTY_CONJUNCTION to NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_CONDITION_INTO_A_PROPERTY_CONDITION
OpenNLC 05-July-2014a - transformTheActionOfPossessionEgHavingIntoAproperty() pass negatives to has children
OpenNLC 05-July-2014a - redeal with negatives
OpenNLC 06-July-2014a - initialise conditionObjectItem1/conditionObjectItem2
OpenNLC 06-July-2014a - fix setting of currentCodeBlockInTreeAtCurrentLevel1 in addNewLogicalCondition
OpenNLC 06-July-2014a - checkConditionForLogicalCondition() - add setting of logicalConditionConjunctionArray based on logicalConditionConjunctionSubjectEntity 
OpenNLC 06-July-2014a - addNewLogicalCondition(): NLCcodeblock * currentCodeBlockInTreeAtCurrentLevel2 = currentCodeBlockInTreeAtCurrentLevel1;	
OpenNLC 07-July-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(); enforce: if(!(entity->isCondition)): do not parse conditions of conditions as one of the conditions is a logical condition conjunction (ie and/or)
OpenNLC 07-July-2014a - update addNewLogicalCondition(): add d) to parse conditions of logical/conjunction condition object's parent: ie; look for conjunction conditions connected to a) the logical condition ("if/while") object and b) its conditions, c) its properties/qualities (children) [REDUNDANT: because logical conditions and conjunction conditions will be connected to the children already], and d) its parent
OpenNLC 08-July-2014a - prevent addNewLogicalCondition() from executing generateContextBlocksAndInitialiseParentIfNecessary() on conditions: 
OpenNLC 08-July-2014a - make checkConditionForLogicalCondition() execute addNewLogicalCondition() on condition subject of conditions connected to conjunction logical conditions (and/or)
OpenNLC 08-July-2014a - RATIONALE: Therefore, NLC must always parse (ie generate for loop code for) all the children (both properties and conditions) of a definite variable when using it
OpenNLC 08-July-2014a - implement NLC_UNTESTED_UPDATE_TO_generateContextBlocksAndInitialiseParentIfNecessary_INITIALISE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT
OpenNLC 08-July-2014a - implement NLC_UNTESTED_UPDATE_TO_generateContextBlocksAndInitialiseParentIfNecessary_INITIALISE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT for when the variable is definite
OpenNLC 08-July-2014a - update addNewLogicalCondition(): MUST FINISH CODING THIS; will not handle conjunctions concerning children of the same parent (eg chicken in "if chicken eats a pie and has an apple, row a boat")
OpenNLC 08-July-2014a - update createCodeBlockForGivenConditions() and createCodeBlockForGivenProperties() to not parse nodes with conjunctions conditions if the node is not the primary node being parsed by generateConditionBlocks()
OpenNLC 08-July-2014a - fix this; checkConditionForLogicalCondition() is executing addNewLogicalCondition() on the condition subject of conditions connected logical condition conjunction, not on the conditions themselves, meaning addNewLogicalCondition() must be passed the primaryEntityInLogicalConditionConjunctionSubset (the condition, not its subject).
OpenNLC 08-July-2014a - check this new implementation wont interfere with any more basic NLC functions (eg generateObjectInitialisationsBasedOnPropertiesAndConditions)
OpenNLC 08-July-2014a - revert 1g4a change - reintroduce createCodeBlockForPropertyListLocal()/NLC_CODEBLOCK_TYPE_FOR_PROPERTY_LIST_LOCAL
OpenNLC 08-July-2014a - prepare code for conjuction class: generateContextBlocksAndInitialiseParentIfNecessary should be passed NULL as primaryEntityInLogicalConditionConjunctionSubset
OpenNLC 08-July-2014a - contain all generateContextBlocksAndInitialiseParentIfNecessary() conjunction variables in a NLClogicalConditionConjunctionVariables class
OpenNLC 08-July-2014a - generateContextBlocksAndInitialiseParentIfNecessary(): remove additional constraints added to execution of generateConditionBlocks()
OpenNLC 08-July-2014a - generateContextBlocksAndInitialiseParentIfNecessary(): switch position of context property item
OpenNLC 08-July-2014a - generateContextBlocksAndInitialiseParentIfNecessary(): execute generateConditionBlocks() irrespective of generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 08-July-2014a - change NLC_UNTESTED_UPDATE_TO_generateContextBlocksAndInitialiseParentIfNecessary_INITIALISE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT to generateContextBlocksAndInitialiseParentIfNecessary_PARSE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT
OpenNLC 08-July-2014a - addNewLogicalCondition() generateContextBlocksAndInitialiseParentIfNecessary_PARSE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT: set currentCodeBlockInTree = currentCodeBlockInTreeAtCurrentLevel
OpenNLC 08-July-2014a - update createCodeBlockForGivenConditions() to set *foundLogicalConditionConjunction if conjunctionConditionFound 
OpenNLC 08-July-2014a - update hasConjunctionConditionConnection() to search for conjunction conditions connected to incomingConditionNodeList
OpenNLC 09-July-2014a - simplify and correct transformTheActionOfPossessionEgHavingIntoAproperty() NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_CONDITION_INTO_A_PROPERTY_CONDITION implementation
OpenNLC 09-July-2014a - hasConjunctionConditionConnection(): do not parse nodes (ie set conjunctionConditionConnectionFound) with conjunction condition connections if the conjunction condition has already been parsed by checkConditionForLogicalCondition()
OpenNLC 09-July-2014a - update generateCodeBlocksPart0() to write the first logical condition as negative if the object of the logical condition (if/while/for) is negative
OpenNLC 09-July-2014a - update hasConjunctionConditionConnection(); set *foundLogicalConditionConjunction even when conditionEntity == primaryEntityInLogicalConditionConjunctionSubset
OpenNLC 09-July-2014a - update hasConjunctionConditionConnection(); do not overwrite foundLogicalConditionConjunction; always take the first conjunction in subset as the one to parse next
OpenNLC 10-July-2014a - 1. create maximum path, 2. see if any conjunctions fill a subset of that path. This is required if there is more than one conjunction in a sentence, as Stanford parser generates redundant conjunctions
OpenNLC 11-July-2014a - update hasConjunctionConditionConnection(): do not reparse same conjunction conditions
OpenNLC 11-July-2014a - change NLClocalListVariableHasBeenDeclared to NLClocalListVariableHasBeenInitialised
OpenNLC 11-July-2014a - declare local variables (eg pieClassPropertyList) for all indefinite entities (eg "a pie") that have no properties and conditions in the same sentence: declareLocalPropertyListsForAllNonSpecificIndefiniteEntities() and set NLClocalListVariableHasBeenDeclared
OpenNLC 11-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore actions
OpenNLC 11-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore qualitites
OpenNLC 11-July-2014a - comment debug text 
OpenNLC 11-July-2014a - change generateContextBlocksAndInitialiseParentIfNecessary_PARSE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT to NLC_PARSE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT
OpenNLC 11-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore conditions
OpenNLC 11-July-2014a - fix bug in declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(); position of "entity->NLClocalListVariableHasBeenDeclared = true;"
OpenNLC 11-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore already declared lists
OpenNLC 11-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore substance concepts
OpenNLC 11-July-2014a - fix 1g8a update in generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 11-July-2014a - initialise plural vars in a for loop instead of adding new instances consecutively
OpenNLC 11-July-2014a - update generateObjectInitialisationsBasedOnPropertiesAndConditions(): remove "&& !(propertyEntity->parsedForNLCcodeBlocks)" and "&& && !(conditionEntity->parsedForNLCcodeBlocks)" conditions
OpenNLC 11-July-2014a - update createCodeBlockAddNewProperty()/createCodeBlockAddNewCondition(); if NLClocalListVariableHasBeenDeclared, set NLClocalListVariableHasBeenInitialised	
OpenNLC 12-July-2014a - Add for logic; "For all/each" (0)
OpenNLC 12-July-2014a - only consider "for" a logical condition entity if it is succeeded immediately by "all", "every" or "each"
OpenNLC 12-July-2014a - change all *ConditionLogical* to *LogicalCondition*
OpenNLC 12-July-2014a - implement NLC_ONLY_SUPPORT_LOGICAL_CONJUNCTION_FOR_AT_START_OF_SENTENCE: this is a more restricted implementation but is faster. It still requires modifications of GIA (it requires entityIndex information to be stored in GIAxmlConversion.cpp [GIAdatabase.cpp is not supported by NLC])
OpenNLC 12-July-2014a - update addNewLogicalCondition() to set currentLogicalConditionObject being parsed by generateContextBlocksAndInitialiseParentIfNecessary() as "grammaticalDefiniteTemp" if logicalOperation == NLC_CONDITION_LOGICAL_OPERATIONS_FOR	
OpenNLC 12-July-2014a - ensure statements after for loop start at original indentation; generateCodeBlocksPart2logicalConditions() restore currentCodeBlockInTreeAtBaseLevel after executing condition 	
OpenNLC 12-July-2014a - generateCodeBlocksPart2logicalConditions() fix currentCodeBlockInTreeAtBaseLevel implementation for while loops
OpenNLC 13-July-2014a - change declareLocalPropertyListsForAllNonSpecificIndefiniteEntities to declareLocalPropertyListsForIndefiniteEntities
OpenNLC 13-July-2014a - place local variable implementation in its own preprocessor def for clarity (NLC_DEFINE_LOCAL_VARIABLES_FOR_ALL_INDEFINATE_ENTITIES)
OpenNLC 13-July-2014a - never parse parents past current sentence [always take local variable if defined]
OpenNLC 13-July-2014a - Actions parse parent condition subject parents as well as property parents - thought I don't think parsing of condition parents is ever necessary in the new (ie 1g8+) local variable implementation 	
OpenNLC 13-July-2014a - ie do not parse parent past a local variable in the same sentence..	
OpenNLC 13-July-2014a - generalise all translator for loop generation code
OpenNLC 13-July-2014a - fold NLC_PARSE_CHILD_PROPERTIES_AND_CONDITIONS_OF_CONTEXT_PARENT changes
OpenNLC 14-July-2014a - declareLocalPropertyListsForAllNonSpecificIndefiniteEntities(): ignore action concepts
OpenNLC 14-July-2014a - prevent getParent from searching condition parents when parsing logical conditions
OpenNLC 14-July-2014a - fix bug in generateContextBlocksAndInitialiseParentIfNecessary(); execute generateConditionBlocks on parentEntity
OpenNLC 14-July-2014a - update generateInitialisationCodeBlock(); add option parseLogicalConditions
OpenNLC 14-July-2014a - generateContextBlocksAndInitialiseParentIfNecessary return true if currentEntity is in same sentence (or is reference), and remove contextFound parameter
OpenNLC 14-July-2014a - update generateInitialisationCodeBlock(): only generate object initialisations when parent is 
OpenNLC 14-July-2014a - move removeRedundantConditionConjunctions() to NLCtranslator.cpp
OpenNLC 14-July-2014a - move "logicalConditionObject->NLClogicalConditionConjunctionIndex = logicalConditionConjunctionIndex;	//set initial logicalConditionConjunctionIndex value " out of "if(logicalOperation != NLC_CONDITION_LOGICAL_OPERATIONS_FOR)" condition
OpenNLC 14-July-2014a - class definitions must ignore conjunctions and logical conditions [fix implementation], eg unordered_map<andClass*, appleClass*> andClassappleClassConditionList;
OpenNLC 14-July-2014a - update identifyAndTagAllLogicalConditionOperations() concepts must be tagged as NLClogicalConditionOperation to prevent generateClassHeirarchy from creating class definitions for logical conditions
OpenNLC 15-July-2014a - update generateContextBlocksAndInitialiseParentIfNecessary() to only reference the local variable for the parent entity (parent for loop), not for any of its children (child for loops); ie do not ever execute createCodeBlockForPropertyListLocal() in generateConditionBlocks():createCodeBlockForGivenProperty()
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: update generateConditionBlocks()/createCodeBlockForGivenConditions()/createCodeBlockForGivenProperties() with option onlyGenerateConditionBlocksIfConnectionsNotParsedForNLC()
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: update generateCodeBlocksPart4objectInitialisations() to execute generateContextBlocksAndInitialiseParentIfNecessary() before executing generateInitialisationCodeBlock() more generally on a definite parent's children
OpenNLC 15-July-2014a - if(!(parentEntity->NLCparsedForlogicalConditionOperations) || parseLogicalConditions)	//change from !(entity->NLCparsedForlogicalConditionOperations)
OpenNLC 15-July-2014a - rearrange NLCtranslatorCodeBlocks.cpp/NLCtranslatorCodeBlocks.h code and create NLCtranslatorCodeBlocksOperations.cpp/NLCtranslatorCodeBlocksOperations.h
OpenNLC 15-July-2014a - start implement NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE for generateCodeBlocksPart2logicalConditions also
OpenNLC 15-July-2014a - prevent generateCodeBlocksPart4objectInitialisations() from parsing concepts; 	
OpenNLC 15-July-2014a - rename generateConditionBlocks() to generateContextBlocks()
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: update generateObjectInitialisationsBasedOnPropertiesAndConditions() with option onlyGenerateContextBlocksIfContextNotGeneratedForNLC
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: set new entity variable NLCcontextGenerated in generateContextBlocksAndInitialiseParentIfNecessary():generateContextBlocks():createCodeBlockForGivenProperties()/createCodeBlockForGivenConditions()) 
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: create clearContextGeneratedVariable to reset entity variable NLCcontextGenerated
OpenNLC 15-July-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE: generateCodeBlocksPart4objectInitialisations():generateCodeBlocksObjectInitialisationsForEntity() do not execute generateObjectInitialisationsBasedOnPropertiesAndConditions() if generateContextBlocksAndInitialiseParentIfNecessary() returns performedAtLeastParentObjectInitialisation=true (ie has already initialised the parent and probably all the children via generateObjectInitialisationsBasedOnPropertiesAndConditions) 
OpenNLC 15-July-2014a - restore previous (<=1g14a) implementation of generateContextBlocksAndInitialiseParentIfNecessary: create initialiseParentIfNecessaryOrGenerateCodeBlocks() for generateCodeBlocksObjectInitialisationsForEntity() as distinct from initialiseParentIfNecessaryAndGenerateCodeBlocks()	
OpenNLC 15-July-2014a - move createCodeBlockForStatements() and children to NLCtranslatorCodeBlocksOperations() 	
OpenNLC 16-July-2014a - NLC_VERIFY_CONNECTIONS_SENTENCE_INDEX: only parse connections if they are in the same sentence index
OpenNLC 16-July-2014a - NLC_VERIFY_CONNECTIONS_SENTENCE_INDEX: implement checkSentenceIndexParsingCodeBlocks() override connection sentence index tests
OpenNLC 16-July-2014a - add condition to generateParentInitialisationCodeBlock(): only initialise indefinite parent if sentenceIndex matches (ie disregard 'wasReference')
OpenNLC 16-July-2014a - fix bug in generateObjectInitialisationsBasedOnPropertiesAndConditions(): change to "if((checkSentenceIndexParsingCodeBlocks(propertyEntity, sentenceIndex, false) || propertyEntity->NLCparsedForCodeBlocks) && (propertyConnection->sentenceIndexTemp == sentenceIndex))"
OpenNLC 17-July-2014a - NLC_TRANSLATE_NEGATIVE_PROPERTIES_AND_CONDITIONS implement negatives; eg "Tom does not have a pie" / "Tom is not near the house"
OpenNLC 17-July-2014a - NLC_TRANSLATE_NEGATIVE_PROPERTIES_AND_CONDITIONS: set negative property connections based on negative "has" action
OpenNLC 17-July-2014a - NLC_TRANSLATE_NEGATIVE_PROPERTIES_AND_CONDITIONS: negative connection implementation for object initialisations						
OpenNLC 18-July-2014a - update generateObjectInitialisationsBasedOnPropertiesAndConditions() to detect negative qualities
OpenNLC 18-July-2014a - NLC_USE_PREPROCESSOR: implement NLC preprocessor		
OpenNLC 18-July-2014a - mark sentence indentation based on the indentation of the line they are contained on. Aim to support multiple sentences per line (assume user is using text wrap) 
OpenNLC 18-July-2014a - create a list of NLCsentence objects per NLCfunction
OpenNLC 18-July-2014a - maintain an array with list of previously parsed codeblocks before entering current logical condition block
OpenNLC 18-July-2014a - if the line has a logical condition operation as the first word (eg If/While/For) and does not contain a full stop, add dummy text ", do this." to the end of the logical condition, such that NLP can parse the logical condition header, and NLC can parse the multi-sentence logical condition based on its indentation. 
OpenNLC 18-July-2014a - add indentation level index to bool logicalCondition[]
OpenNLC 18-July-2014a - retest NLC compilation without NLC_USE_PREPROCESSOR
OpenNLC 18-July-2014a -	handle !useNLCpreprocessor 
OpenNLC 18-July-2014b -	fix NLC compilation without NLC_USE_PREPROCESSOR
OpenNLC 18-July-2014b -	enable NLC compilation on Windows (declareLocalPropertyListsForIndefiniteEntities/generateCodeBlocksObjectInitialisationsForEntity must return a value)
...
OpenNLC 21-July-2014a - handle else, else if
OpenNLC 21-July-2014a - change "else"/"else if" text to "if" using NLC preprocessor, and tag NLCsentence object as "else" or "else if" for automatic reversion by NLC back to their original form (else/else if) 
OpenNLC 21-July-2014a - fix bug in generateCodeBlocksPart2logicalConditions() execution with logicalConditionOperationSubject->isAction: shift "generateCodeBlocksPart3actions" firstCodeBlockInSentence restoration to generateActionCodeBlocks() 	
OpenNLC 21-July-2014a - reference the previous node in the list and add currentCodeBlockInTree
OpenNLC 21-July-2014a - add logicalConditionCase to generateLogicalConditionConjunctionBooleanName
OpenNLC 21-July-2014a - fix NLC compilation without NLC_USE_PREPROCESSOR 
OpenNLC 21-July-2014a - disable NLC_DEBUG_PREPROCESSOR
OpenNLC 21-July-2014a - fix 'while' statements
OpenNLC 21-July-2014a - remove hasConjunctionConditionConnection() warning (outdated)
OpenNLC 21-July-2014a - test code without NLC_PREPROCESSOR_LOGICAL_CONDITION_USE_ROBUST_NLP_INDEPENDENT_CODE; it fails because "else" is connected to "has" action in "Else if the house has a dog" - if !NLC_PREPROCESSOR_LOGICAL_CONDITION_USE_ROBUST_NLP_INDEPENDENT_CODE would need to update transformTheActionOfPossessionEgHavingIntoAproperty() in the future to set elseIfDetect based on the else property much earlier in the NLC translator
OpenNLC 21-July-2014a - NLC_USE_PREPROCESSOR: support question mark as well as fullstop 

Release-30July2014:

OpenNLC 22-July-2014a - nothing (up rev)
OpenNLC 22-July-2014a - add "ifDetected" check for NLC_PREPROCESSOR_LOGICAL_CONDITION_USE_ROBUST_NLP_INDEPENDENT_CODE
OpenNLC 22-July-2014a - NLC_PREPROCESSOR_MATH: implement detectMathSymbolsInSentence()/splitSentenceIntoNLPparsablePhrases()
OpenNLC 22-July-2014a - NLC_PREPROCESSOR_MATH_REPLACE_NUMERICAL_VARIABLES_NAMES_FOR_NLP: introduce NLCsentence class vector mathTextVariableNames - required to be recorded such that future instances of variable name in non-math text can be temporarily replaced with dummy number 9999 for NLP/GIA to parse
OpenNLC 24-July-2014a - allow math variables to be initialised based on "number of" text, eg "number of red dogs" in X = Y * (number of red dogs)
OpenNLC 24-July-2014a - allow plural variables to be initialised based on "number of" statements also
OpenNLC 24-July-2014a - change replaceCurrentWordWithDummyNameIfNecessary to replaceWordsWithDummyNameIfNecessary		
OpenNLC 24-July-2014a - in main code; NLC_PREPROCESSOR_MATH: preprocess generateCodeBlocks sentence sentenceIndex: check currentNLCsentence for isMath and regenerate math based on mathText, mathTextNLPparsablePhraseIndices and respective GIA output
OpenNLC 24-July-2014a - in main code; NLC_PREPROCESSOR_MATH_REPLACE_NUMERICAL_VARIABLES_NAMES_FOR_NLP: post process generateCodeBlocks sentence sentenceIndex; check currentNLCsentence for dummy number 9999, and replace with variableNamesDetected  
OpenNLC 24-July-2014a - create new NLCitem string name for use with NLC_ITEM_TYPE_VARIABLE, instead of string instanceName (update all functions accordingly)
OpenNLC 24-July-2014a - NLC_PREPROCESSOR_MATH: introduce NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_DUMMY; test NLP parse of "Do this."
OpenNLC 24-July-2014a - NLC preprocessor: detect all sentences with equals signs = as math [OLD: and only NLP parse bracketed portions], and detect english phrases within, eg "number of red dogs" in X = Y * (number of red dogs)
OpenNLC 24-July-2014a - mathematical operations - translate "(number of ...)"
OpenNLC 24-July-2014a - A single variable (concatenated) should be created for number of chickens in pie; numberOfChickensInPie and filled in by NLC using for loops before generating the logical statement using this variable. 
OpenNLC 24-July-2014a - plan to support a) mathText (symbols if(x > y)) [copy and paste mathText to NLC output and add "{"] and;
OpenNLC 24-July-2014a - plan to support c) mathText + math in english; eg if(the number of red dogs near the farm > x) 
OpenNLC 24-July-2014a - finish NLC_PREPROCESSOR_MATH/NLC_PREPROCESSOR_MATH_REPLACE_NUMERICAL_VARIABLES_NAMES_FOR_NLP implementation
OpenNLC 24-July-2014a - compile NLC_PREPROCESSOR_MATH/NLC_PREPROCESSOR_MATH_REPLACE_NUMERICAL_VARIABLES_NAMES_FOR_NLP implementation
OpenNLC 24-July-2014a - enable mathtext detection over lines not sentences (read in all text into string and check if line contains mathtext instead of sentence)
OpenNLC 24-July-2014a - check that CHAR_COMMA does not need to be detected elsewhere in NLCpreprocessor
OpenNLC 24-July-2014a - ensure to fill mathTextVariableNames in splitMathDetectedSentenceIntoNLPparsablePhrases()
OpenNLC 24-July-2014a - extract NLCtranslatorCodeBlocksLogicalConditions.cpp from NLCtranslatorCodeBlocks.cpp 
OpenNLC 24-July-2014a - b. NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE generate mathText from equivalent english phrases;
OpenNLC 24-July-2014a - need to parse "is" as equals, eg if "x is 33534"; for all mathText which is not NLP parsable text, replace "is" with "=" 
OpenNLC 24-July-2014a - implementation 2: generate context for each parsable phrase (eg if the dog has a box and [the dog] has an apple)
OpenNLC 24-July-2014a - for logical condition NLP parsable phrases, look for first instance of keywords has/is, and take the preceeding text as the context
OpenNLC 24-July-2014a - how do deal with logical condition commands? eg "if the dog has a ball and [the dog] has an apple, ride the bike"? must detect comma as a new NLP parsable phrase, and any parsable phrase without a starting conjunction as a logical condition command
OpenNLC 24-July-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE: write code to regenerate math text from natural language
OpenNLC 24-July-2014a - generalise the preprocessTextForNLC() code to support NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE
OpenNLC 24-July-2014a - "x is equal to number of chickens." is supported by mathText, with "number of chickens" parsable phrase
OpenNLC 24-July-2014a - the following cannot be parsed by NLP/GIA; "x is the number of chickens" as dummy numerical variable replacement only works for previously defined variables.; convert to mathText and parsable phrase ("x = the number of chickens")
OpenNLC 24-July-2014a - use intermediary mathText symbols for equivalent natural lanaguage replacements eg &&/|| and convert later to compiler specific symbols if necessary during codeblocks print
OpenNLC 24-July-2014a - plan to support; b) math in english ("if x greater than/less than y") 
OpenNLC 24-July-2014a - plan to support d) and hybrid mathText + math in english; eg if x is greater than y and z+q==r, ride the bike
OpenNLC 24-July-2014a - get NLC_USE_PREPROCESSOR, !NLC_PREPROCESSOR_MATH to operate at same capacity as NLC1g1f (NLC1g1e)
OpenNLC 27-July-2014a - test NLC_USE_PREPROCESSOR, NLC_PREPROCESSOR_MATH, !NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE 
OpenNLC 27-July-2014a - update getParentAndGenerateParentInitialisationCodeBlock() to return value 
OpenNLC 27-July-2014a - NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_UNDECLARED_VARIABLES: if variable is undeclared declare it with "int"/"bool"
OpenNLC 27-July-2014a - NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_UNDECLARED_VARIABLES: detect undeclared variables
OpenNLC 27-July-2014a - start test NLC_USE_PREPROCESSOR, NLC_PREPROCESSOR_MATH, NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE 
OpenNLC 28-July-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE_REPLACE_COMMAS_WITH_BRACKETS: replace commas with brackets instead of removing them completely from logical conditions
OpenNLC 28-July-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE: complete explicit subject regeneration for references
OpenNLC 28-July-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_USER_VARIABLE_TYPE_DECLARATIONS - replace all variable types with an nlp parsable phrase illegal word eg double -> double$
OpenNLC 28-July-2014a - ensure NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_DUMMY is being added to pure mathText (with no nlp parsable phrases)
OpenNLC 28-July-2014a - differentiate between interpretation of "equals"/"is equal to" in logical conditions (==) and not (=), update detectAndReplaceIsEqualToNonLogicalConditionTextWithSymbol() 
OpenNLC 28-July-2014a - NLC_PREPROCESSOR_MATH_FIX_USER_INAPPROPRIATE_USE_OF_EQUALS_SET_IN_LOGICAL_CONDITIONS; in case user says "if x = y" instead of "if x == y"
OpenNLC 28-July-2014a - prevent logical condition operatators from being considered legal words by splitMathDetectedLineIntoNLPparsablePhrases
OpenNLC 28-July-2014a - start testing NLC_USE_PREPROCESSOR, NLC_PREPROCESSOR_MATH, NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE post preprocessor
OpenNLC 28-July-2014a - convert else logical condition command to a separate sentence with a new indentation level
OpenNLC 28-July-2014a - start FUTURE support multiple logical condition commands in one one; NLC_PREPROCESSOR_MATH_SUPPORT_MULTIPLE_LOGICAL_CONDITION_COMMANDS_ON_ONE_LINE eg "if the house is blue, write the letter and read the book"/"else write the letter and read the book."
OpenNLC 28-July-2014a - start support logical condition mathText commands on same line NLC_PREPROCESSOR_MATH_SUPPORT_LOGICAL_CONDITION_MATHTEXT_COMMANDS_ON_SAME_LINE eg "if the house is blue, X = 3+5"
OpenNLC 28-July-2014a - start NLC_PREPROCESSOR_MATH_OPERATOR_EQUIVALENT_NATURAL_LANGUAGE_ADVANCED_PHRASE_DETECTION support implicit conjunctions, eg "if the house is blue, the cat is green, and the bike is tall, ride the bike."
OpenNLC 28-July-2014a - generateCodeBlocksFromMathText() with NLC_PREPROCESSOR_MATH_ALLOW_UNDECLARED_NLC_VARIABLES_TO_BE_REFERENCED_BY_MATH: execute for each nlp parsable phrase in logical condition (realistically all variables parsed by logical condition should already be declared)
OpenNLC 28-July-2014a - splitMathDetectedLineIntoNLPparsablePhrases(): update mathText variable reference name after explicit subject added (eg from isblue1 to thebasketthatisnearthehouseisblue2) 
OpenNLC 28-July-2014a - generateCodeBlocksFromMathTextNLPparsablePhrase(): correct sentence index of parsablePhraseReferenceName generation
OpenNLC 28-July-2014a - place current word checks outside if(mandatoryCharacterFoundInCurrentWord) section..
OpenNLC 28-July-2014a - fix bug in generateCodeBlocksFromMathText for logicalConditionOperators not containing a parsable phrase (ie "else" statements)	
OpenNLC 28-July-2014a - ensure NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_UNDECLARED_VARIABLES ignores mathTextVariableName if logicalConditionDetected
OpenNLC 28-July-2014a - logical condition indentation bug fixes, update sentenceIndex for logical condition command
OpenNLC 28-July-2014a - update sentenceIndex for logical condition command
OpenNLC 28-July-2014a - if getParentAndGenerateContextBlocks()/generateContextBlocks() fails then remove the context blocks
OpenNLC 28-July-2014a - logical condition indentation bug fixes, update sentenceIndex for logical condition command
OpenNLC 28-July-2014a - fixed bug in createCodeBlockForGivenConditions(); now it returns result (true/false) correctly (assigns context correctly); verify that this does not break any other NLC code (retest all NLC automated tests)
OpenNLC 28-July-2014a - end test NLC_USE_PREPROCESSOR, NLC_PREPROCESSOR_MATH, NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE 
OpenNLC 28-July-2014a - [SEMI REVERTED] reposition wordIndex++ and wordIndex=0 reset in splitMathDetectedLineIntoNLPparsablePhrases()
OpenNLC 28-July-2014a - when setting newlyDeclaredVariable, take into account possible user explicit declaration (eg double)
OpenNLC 28-July-2014a - add the newlyDeclaredVariable to the sentence mathTextVariableNames list. 
OpenNLC 28-July-2014a - create NLC_CODEBLOCK_TYPE_WHILE and update createCodeBlockWhileHasBool()/printCodeBlocks() use of NLC_CODEBLOCK_TYPE_WHILE_LOGICAL_CONJUNCTION_OF_BOOLS
OpenNLC 29-July-2014a - remove change 1h1e: need to parse "is" as equals, eg if "x is 33534"; for all mathText which is not NLP parsable text, replace "is" with "=" 
OpenNLC 30-July-2014a - revert 1h3j wordIndex++ repositioning; add parsingWhiteSpace check to prevent "Y " from being intepreted as a parsable phrase
OpenNLC 30-July-2014a - extract NLCpreprocessorSentenceClass.cpp/h + NLCpreprocessorMath.cpp/h + NLCpreprocessorMathLogicalConditions.cpp/h from NLCpreprocessor.cpp/h
OpenNLC 30-July-2014a - update generateCodeBlocksFromMathText() to support generateCodeBlocksFromMathTextNLPparsablePhraseLogicalConditionFor() (NLC_LOGICAL_CONDITION_OPERATIONS_FOR)
OpenNLC 30-July-2014a - update splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionAddExplicitSubjectTextForConjunctions() to support subject referencing using an auxillary of a different type 
OpenNLC 30-July-2014a - fix generateLogicalConditionImplicitConjunctionsAndIdentifyCommand; ensure conjuctions are detected	
OpenNLC 30-July-2014a - superphrase contents must have conjunction removed to enable replaceLogicalConditionNaturalLanguageMathWithSymbols to be on logicalConditionCommandSuperphraseContents in parallel with lineContents, enabling logicalConditionCommandSuperphraseContents to be found within the lineContents of splitMathDetectedLineIntoNLPparsablePhrases() and an nlp parsable phrase phrase index to be assigned to the command
OpenNLC 30-July-2014a - update replaceLogicalConditionNaturalLanguageMathWithSymbols() with additional parallelReplacement check
OpenNLC 30-July-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE: update NLClogicalConditionConjunctionVariables class with negativeDetectedInContextBlocks
OpenNLC 30-July-2014a - update NLC preprocessor to detect "is greater than or equal to"/"is less than or equal to"/"is not greater than"/"is not less than"/"does not equal"/"is not equal to" (as generateCodeBlocksFromMathTextNLPparsablePhrase() will not read GIA negatives when generating "number of" for loops)
OpenNLC 30-July-2014a - NLC_PREPROCESSOR_GENERATE_COMMENTS: automatically generate comments
OpenNLC 30-July-2014a -	Windows compatibility updates - replaceLogicalConditionNaturalLanguageMathWithSymbolsEnd() must return a value
...
OpenNLC 04-August-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_LOGICAL_CONDITION_MATHTEXT_COMMANDS_ON_SAME_LINE: update splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands() to convert any instances of '==' in logical condition command back to '='
OpenNLC 04-August-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_LOGICAL_CONDITION_MATHTEXT_COMMANDS_ON_SAME_LINE: update splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands() to support logical condition commands with no nlp parsable phrase (mathText only) (e.g. If the house is blue, X = 3+5)
OpenNLC 04-August-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_LOGICAL_CONDITION_MATHTEXT_COMMANDS_ON_SAME_LINE: update splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands() to support mathText logical conditions in which no nlp parsable phrase is detected in either condition test or condition command (e.g If x+5 == 12405, X = 3+5)
OpenNLC 04-August-2014b - disable NLCglobalDefs.h debug modes
...
OpenNLC 20-August-2014a - when initialising new properties/conditions in generateObjectInitialisationsBasedOnPropertiesAndConditions() only generate the context if((propertyConnection->NLCparsedForCodeBlocks) || !(logicalConditionConjunctionVariables->onlyGenerateContextBlocksIfConnectionsParsedForNLC) || (propertyConnection->isReference))	
OpenNLC 20-August-2014a - update getParent() for NLC_VERIFY_CONNECTIONS_SENTENCE_INDEX - parse valid parent (with same sentenceIndex)
OpenNLC 20-August-2014a - fix bug in getParent() update

Release-28August2014:

OpenNLC 19-August-2014a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN [OLD:NLC_PARSE_CONTEXT_CHILDREN] - enable referencing by categories eg "Apples are fruit. An apple is on the green tree. The fruit is tasty."
OpenNLC 19-August-2014a - revert back to original planned NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN implementation 
OpenNLC 19-August-2014a - identify issue caused by lack of for loop context 
OpenNLC 20-August-2014a - when initialising new properties/conditions in generateObjectInitialisationsBasedOnPropertiesAndConditions() only generate the context if((propertyConnection->NLCparsedForCodeBlocks) || !(logicalConditionConjunctionVariables->onlyGenerateContextBlocksIfConnectionsParsedForNLC) || (propertyConnection->isReference))	
OpenNLC 20-August-2014a - update getParent() for NLC_VERIFY_CONNECTIONS_SENTENCE_INDEX - parse valid parent (with same sentenceIndex)
OpenNLC 20-August-2014a - disable NLC_DEBUG_PARSE_CONTEXT/NLC_DEBUG_PARSE_CONTEXT2
OpenNLC 20-August-2014a - change functionName from NLCexample3afterPreprocessedforNLConly to NLCexample3 - ie do not add "afterPreprocessedforNLConly" to function name	
OpenNLC 20-August-2014a - return to NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN development 
OpenNLC 21-August-2014a - must prevent generic substance concept definitions being parsed. NB there should never be generic substance concepts created - only specific substance concepts are created 
OpenNLC 21-August-2014a - ensure that definition children of properties or conditions of an existing definition child are not parsed with NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN implementation 
OpenNLC 21-August-2014a - need to account for cases in which there is more than 1 child
OpenNLC 21-August-2014a - create a new generic generateContext() function that fills a list with multiple instances based on original + definition/children parsing
OpenNLC 21-August-2014a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN: remove onlyGenerateContextBlocksIfConnectionsParsedForNLC implementation - generateObjectInitialisationsBasedOnPropertiesAndConditions() must always use initialiseParentIfNecessaryOrGenerateCodeBlocks()[?? shouldnt this be generateContextBlocks() or onlyGenerateContextBlocksIfConnectionsParsedForNLC??] to generate context for the parent when NLC categories are enabled 
OpenNLC 21-August-2014a - for NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN compatibility: generateContextBlocksSimple(): do not restore currentCodeBlockInTree to originalCodeBlockInTree if logicalConditionConjunctionVariables->onlyGenerateContextBlocksIfConnectionsParsedForNLC is set true
OpenNLC 21-August-2014a - !NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN [OLD:NLC_DEBUG_PARSE_CONTEXT] is depreciated
OpenNLC 21-August-2014a - NLC_PREPROCESSOR_GENERATE_COMMENTS: only execute createCodeBlockCommentSingleLine() if(getUseNLCpreprocessor()) 
OpenNLC 21-August-2014a - createCodeBlockForStatementsForDefinitionChildren() use generateContextBlocksIfSameReferenceSet [OLD:onlyGenerateContextBlocksIfSameReferenceSet]
OpenNLC 21-August-2014a - remove "if(contextFound)" condition from execution of createCodeBlockForPropertyListCategory()
OpenNLC 21-August-2014a - fix bug in getParent() update
OpenNLC 22-August-2014a - NLC_GENERATE_OBJECT_INITIALISATIONS_BASED_ON_SUBSTANCE_CONCEPTS_FOR_ALL_DEFINITE_ENTITIES generateObjectInitialisationsBasedOnSubstanceConcepts(): create a new NLC function to initialise the implicit properties of all definite entities based on their substance concept definitions (see GIA dream mode for the creation of these definitions)
OpenNLC 22-August-2014a - update generateCodeBlocksObjectInitialisationsForEntity() to account for NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN changes (1i3c - "for NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN compatibility: generateContextBlocksSimple(): do not restore currentCodeBlockInTree to originalCodeBlockInTree if logicalConditionConjunctionVariables->onlyGenerateContextBlocksIfConnectionsParsedForNLC is set true")
OpenNLC 22-August-2014a - set onlyGenerateContextBlocksIfSameReferenceSet when NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN is undefined also
OpenNLC 23-August-2014a - update NLC_PREPROCESSOR_GENERATE_COMMENTS implementation for !isMath (sentences on same line)
OpenNLC 24-August-2014a - !NLC_USE_ORIGINAL_INSTANCE_LIST_NAMES: generate separate local and non-local property list names; use "InstanceList" and "PropertyList"
OpenNLC 24-August-2014a - normalise function and function object list names - void dogClass::rideFunction(rideClass* ride, bikeClass* bike) -> void dogClass::rideFunction(rideClass* rideInstanceList, bikeClass* bikeInstanceList)
OpenNLC 24-August-2014a - !NLC_USE_ORIGINAL_INSTANCE_LIST_NAMES: use "CategoryList" instead of "InstanceCategoryList"
OpenNLC 24-August-2014a - generateCodeBlocksPart2logicalConditions()/addNewLogicalCondition()/generateCodeBlocksFromMathTextNLPparsablePhrase(): change getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks() to getParentAndGenerateContextBlocks()
OpenNLC 24-August-2014a - remove compilation option NLC_PREPROCESSOR_MATH_ALLOW_UNDECLARED_NLC_VARIABLES_TO_BE_REFERENCED_BY_MATH
OpenNLC 24-August-2014a - generateCodeBlocksFromMathText() - remove declareLocalPropertyListsForIndefiniteEntities()
OpenNLC 24-August-2014a - replace all instances of "(entity->entityNodeDefiningThisInstance->back())->entity" with "getPrimaryConceptNodeDefiningInstance(entity)" [to support GIA_SUPPORT_MORE_THAN_ONE_NODE_DEFINING_AN_INSTANCE]
OpenNLC 24-August-2014a - change NLC_CODEBLOCK_TYPE_DECLARE_NEW_CATEGORY_LIST_VARIABLE/NLC_CODEBLOCK_TYPE_ADD_PROPERTY_TO_CATEGORY_LIST/NLC_CODEBLOCK_TYPE_FOR_PROPERTY_LIST_CATEGORY to NLC_CODEBLOCK_TYPE_DECLARE_NEW_GENERIC_LIST_VARIABLE/NLC_CODEBLOCK_TYPE_ADD_PROPERTY_TO_GENERIC_LIST/NLC_CODEBLOCK_TYPE_FOR_PROPERTY_LIST_GENERIC
OpenNLC 24-August-2014a - create createCodeBlocksDeclareNewGenericListVariable()/createCodeBlockAddPropertyToGenericList()/createCodeBlockForPropertyListGeneric() from createCodeBlocksDeclareNewCategoryListVariable()/createCodeBlockAddPropertyToCategoryList()/createCodeBlockForPropertyListCategory()
OpenNLC 24-August-2014a - create createCodeBlockAddGenericListToGenericList()
OpenNLC 24-August-2014a - change NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN to NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN
OpenNLC 24-August-2014a - change NLC_ITEM_TYPE_CLASS to NLC_ITEM_TYPE_OBJECT where appropriate
OpenNLC 24-August-2014a - NLC_GENERATE_TYPE_LISTS: update createCodeBlocksDeclareNewLocalListVariable() to execute createCodeBlocksDeclareNewTypeListVariable() and createCodeBlockAddInstanceListToTypeList()
OpenNLC 24-August-2014a - NLC_LOGICAL_CONDITION_OPERATIONS_SUPPORT_INDEFINITE_LOGICAL_CONDITION_OBJECTS: generateCodeBlocksPart2logicalConditions()/addNewLogicalCondition()/generateCodeBlocksFromMathTextNLPparsablePhrase(): execute createCodeBlockForPropertyTypeClass() before getParentAndGenerateContextBlocks() if !assumedToAlreadyHaveBeenDeclared(currentLogicalConditionObject): eg "If a house is green, do this", an instanceList (OLD: localList) for "a house" is assumed to have already been declared, one of which may be green, so search all house instanceLists within house typeList...					
OpenNLC 24-August-2014a - [VERIFICATIONONLY] - 1i7a with NLC1i8g NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_BASIC_GENERATE_CONTEXT_BLOCKS_IF_SAME_REFERENCE_SET updates
OpenNLC 24-August-2014a - [REVERTED 1i8e] update generateParentInitialisationCodeBlock() to perform generateContextBlocks() before performing generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 24-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION: create generateObjectInitialisationsBasedOnPropertiesAndConditionsEntry(), execute getParentAndGenerateContextBlocks() before generateObjectInitialisationsBasedOnPropertiesAndConditions() before parent initialisation/generateParentInitialisationCodeBlock()
OpenNLC 24-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD: reexecute getParentAndGenerateContextBlocks() for each child of generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 24-August-2014a - [REVERTED 1i8e] NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_AT_ALL_TIMES: execute getParentAndGenerateContextBlocks() before generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 24-August-2014a - change generateObjectInitialisationsBasedOnPropertiesAndConditionsEntry() to generateContextBlocksAndGenerateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 24-August-2014a - update preprocessor definition names
OpenNLC 24-August-2014a - remove redundant getParent reference (getParentAndGenerateContextBlocks()) from generateContextBlocksAndGenerateObjectInitialisationsBasedOnPropertiesAndConditions() code
OpenNLC 24-August-2014a - disable NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION/NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_AT_ALL_TIMES (revert 1i8a+1i8c changes)
OpenNLC 24-August-2014a - fix issue in NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD implementation
OpenNLC 24-August-2014a - NLC_STRICT_NO_IMPLICIT_DECLARATIONS
OpenNLC 24-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_BASIC_GENERATE_CONTEXT_BLOCKS_IF_SAME_REFERENCE_SET: update transformTheActionOfPossessionEgHavingIntoAproperty() to copy sameReferenceSet value to generated connections
OpenNLC 25-August-2014a - update NLC_GENERATE_TYPE_LISTS implementation; correct print output
OpenNLC 25-August-2014a - create createCodeBlocksDeclareNewGenericListVariable2()/createCodeBlockAddPropertyToGenericList2()/createCodeBlockForPropertyListGeneric2()
OpenNLC 25-August-2014a - create NLC_CODEBLOCK_TYPE_DECLARE_NEW_GENERIC_LIST_VARIABLE2/NLC_CODEBLOCK_TYPE_ADD_PROPERTY_TO_GENERIC_LIST2/NLC_CODEBLOCK_TYPE_FOR_PROPERTY_LIST_GENERIC2
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_BASIC_GENERATE_CONTEXT_BLOCKS_IF_SAME_REFERENCE_SET is added to NLC_STRICT_NO_IMPLICIT_DECLARATIONS
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD generateObjectInitialisationsBasedOnPropertiesAndConditions(): correct a 1i8f change - "#ifndef NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD; createCodeBlockForPropertyListLocal() #endif"
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: generateObjectInitialisationsBasedOnPropertiesAndConditions(): generate context for sameReferenceSet children of definite (property/condition) parents (even if the child entities are indefinite)
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: create getUniqueSameReferenceSetDefiniteParent() to check if the parent is definite 										
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT implementation (update to NLC_STRICT_DEFINITIONS)
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: fix typo bug
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: use generateContextBlocks instead of generateContextBlocksSimple and add createCodeBlockForPropertyList reference 
OpenNLC 25-August-2014a - merge generateContextBlocksAndGenerateObjectInitialisationsBasedOnPropertiesAndConditions with generateObjectInitialisationsBasedOnPropertiesAndConditions and add bool generateParentContext option (previous implementation)
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: if generateParentContext = true, only generate parent context blocks if child is to be inititalised (this saves context blocks been generated for "Tom" in "Tom's car")  
OpenNLC 25-August-2014a - change getUniqueSameReferenceSetDefiniteParent to getSameReferenceSetDefiniteParent
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT implementation update 
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: fix up this issue; if Jim has multiple cars, eg "Jim has Tom's cars" or if Tom has multiple apple's eg "A book is near Tom's apples." then too many instances will be added - use generateCategories() instead of generateCategories()
OpenNLC 25-August-2014a - change getSameReferenceSetDefiniteParent() to getSameReferenceSetDefiniteContextUngeneratedParent()
OpenNLC 25-August-2014a - if(generateCategories){  if(parentEntity == entity){propertyConnection->NLCparsedForCodeBlocks = true;} parentEntity->NLCcontextGenerated = true; performedAtLeastOneObjectInitialisationAtThisLevel = true;
OpenNLC 25-August-2014a - add createCodeBlockForPropertyListLocal()/createCodeBlockForPropertyList() to generateCategories() before executing createCodeBlockAddPropertyToCategoryList()
OpenNLC 25-August-2014a - copy generateCategories changes for properties to conditions
OpenNLC 25-August-2014a - if(generateParentContext), ensure that generateContextBlocks is generated at all times unless if(parentEntity == entity)
OpenNLC 25-August-2014a - change getSameReferenceSetDefiniteContextUngeneratedParent() to check for if(isDefinite) precisely instead of if(assumedToAlreadyHaveBeenDeclared)
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: revert 1i11e change "change getUniqueSameReferenceSetDefiniteParent to getSameReferenceSetDefiniteParent" and reimplement
OpenNLC 25-August-2014a - update generateObjectInitialisationsBasedOnPropertiesAndConditions() with '|| (parentName != "")' in 'if(!(entity->isSubstanceConcept) && !(entity->isActionConcept) || (parentName != ""))' to work around GIA issue in which a substance concept is defined for "the cars" in "The pies near the house have red cars." 
OpenNLC 25-August-2014a - move if(generateParentContext){generateContextBlocks()} back to top of generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 25-August-2014a - added if(propertyConnection->NLCparsedForCodeBlocks){ createCodeBlockForPropertyList()} 
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: remove performedAtLeastOneObjectInitialisationAtThisLevel = true;  
OpenNLC 25-August-2014a - change 1i11l update; if(propertyConnection->NLCparsedForCodeBlocks){ generateContextBlocks()}
OpenNLC 25-August-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: change "if(generateCategories" to "if(generateContextBlocks" for consistency	
OpenNLC 25-August-2014a - [REVERTED] NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT: change "if(assumedToAlreadyHaveBeenDeclared(propertyObject)) { generateContextBlocks " to "if(assumedToAlreadyHaveBeenDeclared(propertyObject)) { generateContextBlocksSimple " for consistency												
OpenNLC 25-August-2014a - revert back to 1i11o (for consistency when !NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT)
OpenNLC 25-August-2014a - disable NLC_DEBUG_PARSE_CONTEXT* modes
OpenNLC 25-August-2014a - get generateObjectInitialisationsBasedOnPropertiesAndConditions() code to work without NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN again - add appropriate preprocessor definition blocks
...
OpenNLC 30-August-2014a - CS compatibility updates; normalise generateGenericListName/createCodeBlockForPropertyListCategory/createCodeBlocksDeclareNewGenericListVariable/createCodeBlockAddPropertyToGenericList/createCodeBlockForPropertyListGeneric declaration in header
OpenNLC 01-September-2014a - no changes
OpenNLC 01-September-2014a - no changes

Release-13September2014:
		
OpenNLC 03-September-2014a - NLC_CATEGORIES_TEST_PLURALITY: createCodeBlockAddPropertyToCategoryList(): check plurality of definite variables when forming categories: if item added to categoryList is not part of a category (but is the word itself) then enforce a plurality check
OpenNLC 05-September-2014a - remove "#include GIAglobalDefs.h" from NLC and rely upon it being included by already included GIA files 
OpenNLC 06-September-2014a - disable NLC_LOCAL_LISTS_USE_INSTANCE_NAMES
OpenNLC 06-September-2014a - NLC_CATEGORIES_TEST_PLURALITY: for singular definite entities, only parse the latest addition (in generated category list)
OpenNLC 07-September-2014a - NLC_USE_ADVANCED_REFERENCING - change NLC_CATEGORIES_TEST_PLURALITY implementation
OpenNLC 07-September-2014a - execute createCodeBlockUpdateLastSentenceReferenced() to createCodeBlockAddNewProperty()/createCodeBlockAddNewPropertyToLocalList()/generateContextBlocksCategories()
OpenNLC 08-September-2014a - only declare classLists once
OpenNLC 09-September-2014a - NLC_CATEGORIES_TEST_PLURALITY_ENFORCE: generateContextBlocksCategories(): check whether category list is empty before taking last item added to list
OpenNLC 09-September-2014a - NLC_USE_ADVANCED_REFERENCING: generateContextBlocksCategories(); fix bug - handle case if(parentEntity->grammaticalNumber != GRAMMATICAL_NUMBER_SINGULAR); "Plural definite referencing tests"
OpenNLC 09-September-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: fix update 1j4a "only declare classLists once", update createCodeBlocksCreateNewLocalListVariable()/createCodeBlocksAddVariableToNewList() to execute createCodeBlocksDeclareNewLocalListVariableIfNecessary() instead of createCodeBlocksDeclareNewLocalListVariable()
OpenNLC 09-September-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: fix update 1j4a "only declare classLists once", update generateLocalFunctionArgumentsBasedOnImplicitDeclarations() to set NLClocalListVariableHasBeenDeclared = true for entity conceptc
OpenNLC 10-September-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: creating a new variable add it to a category list, 
OpenNLC 10-September-2014a - separate generateParentInitialisationCodeBlockWithChecks() from generateParentInitialisationCodeBlock()
OpenNLC 10-September-2014a - change initialiseParentIfNecessaryAndGenerateCodeBlocks/getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks to initialiseParentIfNecessaryOrGenerateCodeBlocks/getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks
OpenNLC 10-September-2014a - change return value of generateParentInitialisationCodeBlockWithChecks() to result of checks instead of performedAtLeastParentObjectInitialisation
OpenNLC 10-September-2014a - minor (rearrange preprocessor defs)
OpenNLC 10-September-2014a - NLC_USE_ADVANCED_REFERENCING: NLC_USE_ADVANCED_REFERENCING_DO_NOT_ADD_DUPLICATES (change 1j3a implementation)
OpenNLC 11-September-2014a - move "Singular definite plurality tests" to separate function: createCodeBlockAddPropertyToCategoryListCheckLastSentenceReferencedNewFunction/createCodeBlockAddPropertyToCategoryListCheckLastSentenceReferencedExecuteFunction
OpenNLC 11-September-2014a - NLC_USE_ADVANCED_REFERENCING: createCodeBlockForStatementsForDefinitionChildren(); fix bug - handle case if(parentEntity->grammaticalNumber != GRAMMATICAL_NUMBER_SINGULAR); "Plural definite referencing tests" (extend 1j5b fix) 
OpenNLC 11-September-2014a - create general generateTempVariableName() function
OpenNLC 11-September-2014a - test compilation of NLC code - add #include <algorithm> + #include <iostream>
OpenNLC 11-September-2014a - NLC_USE_ADVANCED_REFERENCING: generate separate function addToCategoryIfPassSingularDefinitePluralityTests() using templates; NLC_CODEBLOCK_TYPE_ADD_PROPERTY_TO_GENERIC_LIST_CHECK_LAST_SENTENCE_REFERENCED_EXECUTE_FUNCTION/NLC_CODEBLOCK_TYPE_ADD_PROPERTY_TO_GENERIC_LIST_CHECK_LAST_SENTENCE_REFERENCED_NEW_FUNCTION
OpenNLC 11-September-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): change second execution of "generateContextBlocks", update generateContextBlocks to handle generatedParentContext (change 1i11x update)
OpenNLC 11-September-2014a - extract createCodeBlockCreateNewProperty/createCodeBlockCreateNewCondition from createCodeBlockAddNewProperty/createCodeBlockAddNewCondition (extend 1j6a update to generateObjectInitialisationsBasedOnPropertiesAndConditions())
OpenNLC 12-September-2014a - update addToCategoryIfPassSingularDefinitePluralityTests() to support two different class templates <class E1, class E2> (update 1j9a implementation)
OpenNLC 12-September-2014a - generateContextBlocksCategories(); add criteria "if(contextFound)" for "*currentCodeBlockInTree = lastCodeBlockInTree->next;" (fix 1j9a implementation)
OpenNLC 12-September-2014a - move old NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT code to NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT_ORIGINAL_IMPLEMENTATION
OpenNLC 12-September-2014a - extract addPropertyToCategoryList from generateContextBlocksCategories/createCodeBlockForStatementsForDefinitionChildren
OpenNLC 12-September-2014a - [reverted] NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: update createCodeBlocksCreateNewLocalListVariable()/createCodeBlockCreateNewProperty()/createCodeBlockCreateNewCondition() to create for loop about its category list by executing createCodeBlockForPropertyListCategory() (update 1j6a/1j11a implementation)	
OpenNLC 12-September-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: generateObjectInitialisationsBasedOnPropertiesAndConditions(): move createCodeBlockForPropertyListCategory() execution to start of function
OpenNLC 12-September-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: generateObjectInitialisationsBasedOnPropertiesAndConditions(): after executing createCodeBlockForPropertyListCategory(), set entity->NLCcontextGenerated = true; 
OpenNLC 12-September-2014a - generateContextBlocksCategories(); add criteria "if(!(generatedParentContext && !contextFound))" for "*currentCodeBlockInTree = lastCodeBlockInTree->next;" (fix 1j9a implementation, fix bad 1j12b patch)
OpenNLC 12-September-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: generateParentInitialisationCodeBlock(): reset currentCodeBlockInTree after executing generateObjectInitialisationsBasedOnPropertiesAndConditions() with newlyDeclaredEntityInCategoryList set to true
OpenNLC 12-September-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: generateParentInitialisationCodeBlock(): reset currentCodeBlockInTree after executing generateObjectInitialisationsBasedOnPropertiesAndConditions() with newlyDeclaredEntityInCategoryList set to true, delete if !performedAtLeastOneObjectInitialisation (update 1j13e change)
OpenNLC 13-September-2014a - create createCodeBlockAddPropertyToCategoryListCheckLastSentenceReferencedPluralExecuteFunction()/createCodeBlockAddPropertyToCategoryListCheckLastSentenceReferencedPluralNewFunction() - check item not already added to category list
OpenNLC 13-September-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (eg NLC_ACTIVATE_PRE1j_CODE_FOR_DEBUG): generateParentInitialisationCodeBlock(); parentEntity->NLClocalListVariableHasBeenInitialised = true;
OpenNLC 16-September-2014a - get NLC_USE_ADVANCED_REFERENCING (ie !GIA_USE_ADVANCED_REFERENCING) / addToCategoryIfPassSingularDefiniteReferencingTests() to function correctly for logical conditions
OpenNLC 16-September-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generateContextBlocksCategories()/addPropertyToCategoryList(); perform definite tests (not just singular tests) before executing addToCategoryIfPassSingularDefiniteReferencingTests()
OpenNLC 16-September-2014a - [partially reverted] !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generateCodeBlocksFromMathTextNLPparsablePhrase() - remove "entity->grammaticalDefiniteTemp = true;" x2
OpenNLC 16-September-2014a - update generateCodeBlocksFromMathTextNLPparsablePhrase() to generate context of logical condition if statements by first executing generateContextBlocks with onlyGenerateContextBlocksIfConnectionsParsedForNLC = true
OpenNLC 16-September-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generateCodeBlocksFromMathTextNLPparsablePhrase() - add "entity->grammaticalDefiniteTemp = true;" x1
...
OpenNLC 24-September-2014a - NLC_PREPROCESSOR_MATH_OLD_NUMBER_OF_IMPLEMENTATION_USING_QVARS: qvars should not be passed as function arguments - create generateClassHeirarchyValidClassChecks()/generateLocalFunctionArgumentsBasedOnImplicitDeclarationsValidClassChecks()
OpenNLC 24-September-2014a - move "do this" preprocessor definitions to NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED+NLC_USE_PREPROCESSOR - create declareLocalPropertyListsForIndefiniteEntitiesValidClassChecks()
OpenNLC 24-September-2014a - GIA_SUPPORT_NUMBER_OF (!NLC_PREPROCESSOR_MATH_OLD_NUMBER_OF_IMPLEMENTATION_USING_QVARS): change "number of" $qvar usage to some common variable isNumberOf	
OpenNLC 24-September-2014a - [partially reverted] NLC_PREPROCESSOR_GENERATE_COMMENTS: always createCodeBlockCommentSingleLine using sentenceOriginal (not sentenceContents), even when !isMath (in the case of dummy variables)
OpenNLC 24-September-2014a - NLC_PREPROCESSOR_GENERATE_COMMENTS: use sentenceOriginal/sentenceContentsOriginal if isMath/!isMath (change 1j18a implementation)
OpenNLC 24-September-2014a - sentenceContentsOriginal = removePrependingWhiteSpace(sentenceContents) - prevent NLC preprocessor adding a space before every new sentence on a given line, eg;
OpenNLC 02-October-2014a - update replaceLogicalConditionNaturalLanguageMathWithSymbolsEnd() to replaceAllOccurancesOfString ", " with "" 
OpenNLC 02-October-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_USER_VARIABLE_TYPE_DECLARATIONS: move replaceExplicitVariableTypesWithNLPparsablePhraseIllegalWords() execution to splitMathDetectedLineIntoNLPparsablePhrases() 
OpenNLC 02-October-2014a - NLC_PREPROCESSOR_MATH_SUPPORT_USER_VARIABLE_TYPE_DECLARATIONS: restoreExplicitVariableTypes(): replace all NLC temporary $variableTypes$ with their real progLang specific variable types in for NLC print
OpenNLC 02-October-2014a - NLC_PREPROCESSOR_GENERATE_COMMENTS: preprocessTextForNLC(); move replaceNumericalVariablesWithDummyNameIfNecessary to after sentenceContentsOriginal is filled (fix bug in 1j18b)
OpenNLC 02-October-2014a - change "NLClogicalConditionConjunctionVariables" to "NLCgenerateContextBlocksVariables"
OpenNLC 02-October-2014a - NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY: update generateContextBlocksCategories(); execute createCodeBlockIfHasMoreThanNumCategoryItem()
OpenNLC 02-October-2014a - [reverted] NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_CHILDREN: update createCodeBlockForGivenProperties/createCodeBlockForGivenConditions; execute createCodeBlockIfHasMoreThanNumProperty/createCodeBlockIfHasMoreThanNumCondition()
OpenNLC 02-October-2014a - NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY: change preprocessorMathNLPparsableCharactersMandatory to support numbers (eg "If 3 baskets have a pie" -> if(3basketshaveapie))
OpenNLC 02-October-2014a - NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_CHILDREN: addPropertyToCategoryList(): execute createCodeBlockIncrementIntVar to increment categoryListPropertyCount (partially revert 1j21b implementation) 

Release-25October2014:

OpenNLC 12-October-2014a - change "progLangFunctionReferenceDelimiter" to "progLangObjectReferenceDelimiter2"
OpenNLC 12-October-2014a - NLC_USE_ADVANCED_REFERENCING: NLC_USE_ADVANCED_REFERENCING_DECLARE_LOCAL_PROPERTY_LISTS_FOR_ALL_INDEFINITE_ENTITIES_FOR_ALL_SENTENCES: update declareLocalPropertyListsForIndefiniteEntities to declare local property lists for all indefinite entities for all sentences
OpenNLC 12-October-2014a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT: store a list of indefinite [ie new definite] variables for every level shift 
OpenNLC 12-October-2014a - change all 'propertyListLocal' to 'localList', and change all 'addPropertyToLocalList' to 'addEntityToLocalList'; eg createCodeBlockAddNewPropertyToLocalList/createCodeBlockAddPropertyToLocalList/createCodeBlockForPropertyListLocal/createCodeBlockRemovePropertiesFromLocalList/etc -> createCodeBlockAddNewEntityToLocalList/createCodeBlockAddEntityToLocalList/createCodeBlockForLocalList/createCodeBlockRemoveEntitiesFromLocalList/etc
OpenNLC 12-October-2014a - [partially reverted] update addToCategoryIfPassSingularDefiniteReferencingTests/addToCategoryIfPassPluralDefiniteReferencingTests to handle NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT
OpenNLC 12-October-2014a - fix bug in NLCgenericEntityClass constructor
OpenNLC 12-October-2014a - start and end of function; create and clear context lists
OpenNLC 12-October-2014a - remove addToCategoryIfPassPluralDefiniteReferencingTests dependence on lastSentenceReferenced [partially revert 1k2b]
OpenNLC 12-October-2014a - NLC_USE_STRING_INDEXED_UNORDERED_MAPS_FOR_CONDITION_LISTS: update condition list implementation - support use of string instead of condition entity [leave inactive]
OpenNLC 12-October-2014a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT: change "contextList" to "referenceContextList" [not "logicalConditionContextList"]
OpenNLC 12-October-2014a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT: update entity constructors; do not initialise lastSentenceReferenced by adding to stack (remove classConstructorLastSentenceReferencedCode)
OpenNLC 13-October-2014a - change generateCodePropertyListDefinitionTypeText to generateCodeEntityListDefinitionTypeText (and 
OpenNLC 13-October-2014a - create generateCodeEntityListDefinitionText(); executing generateCodeEntityListDefinitionTypeText() and generateEntityLocalListName() 
OpenNLC 13-October-2014a - correct generatePropertyListName function argument name
OpenNLC 13-October-2014a - change progLangFindProperty/progLangFindCondition -> progLangHasEntity/progLangHasCondition
OpenNLC 13-October-2014a - change where necessary NLC_ITEM_TYPE_FUNCTION/NLC_ITEM_TYPE_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_OBJECT to NLC_ITEM_TYPE_FUNCTION_EXECUTION_ARGUMENT_FUNCTION/NLC_ITEM_TYPE_FUNCTION_EXECUTION_ARGUMENT_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_EXECUTION_ARGUMENT_FUNCTION_OBJECT/NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION/NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION_OBJECT/NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION/NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION_OBJECT
OpenNLC 13-October-2014a - NLC_GENERATE_FUNCTION_ARGUMENTS_BASED_ON_ACTION_AND_ACTION_OBJECT_VARS_PASS_AS_LISTS: update generateFunctionArgumentsBasedOnActionAndActionObjectVars to pass actionObject as vector not as entity
OpenNLC 13-October-2014a - NLC_GENERATE_FUNCTION_ARGUMENTS_PASS_LISTS_BY_REFERENCE: update generateFunctionArgumentsBasedOnActionAndActionObjectVars()/generateLocalFunctionArgumentsBasedOnImplicitDeclarationsString() to use generateCodeEntityListDefinitionReferenceText() - pass vector classLists/instanceLists by reference & (not as pointers *) 
OpenNLC 13-October-2014a - shift 1k global def code
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_INTERPRET_SINGLE_WORD_SENTENCES_AS_ACTIONS: interpret single word sentences as actions; eg "initialiseProcess"; this is required to have a separate function for every instance of "initialise" (otherwise the initialise function must check the function object argument)
OpenNLC 14-October-2014a - introduce generateClassHeirarchyTargetValidClassChecks() and verify against entityCoordinatingConjunctionArray (this criteria was ignored [perhaps unintentionally] before 1k6a)
OpenNLC 14-October-2014a - NLC_CATEGORIES_TEST_PLURALITY_WARNING_PLACE_IN_NLC_PREDEFINED_FUNCTION_ADDTOCATEGORYIFPASSSINGULARDEFINITEREFERENCINGTESTS: move NLC_CATEGORIES_TEST_PLURALITY_WARNING generated code to NLC predefined function addToCategoryIfPassSingularDefiniteReferencingTests()
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE: logical condition command single word sentences - update - splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands()
OpenNLC 14-October-2014a - splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands(): change logicalConditionCommandCommaTextToRemove from (STRING_COMMA) to (STRING_COMMA + STRING_SPACE)
OpenNLC 14-October-2014a - splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands(): if(!logicalConditionCommandContainsNLPparsablePhrase), set sentenceIndex of firstPhraseInLogicalConditionCommand
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES: change preprocessorMathNLPparsableCharactersMandatory to support numbers (eg "If 3 baskets have a pie" -> if(3basketshaveapie))  [update 1j21b implementation to not rely on NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY]				
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_ONLY: ensure variable names can't start with a number
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_ONLY: variables names cannot start with numbers - throw a warning to the user that an illegal mathText variable name has been detected 
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_ENTITY_NAMES_ONLY: variables names cannot start with numbers - throw a warning to the user that an illegal entity name has been detected - required for most output languages
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_ONLY/NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_ENTITY_NAMES_ONLY: use isStringNLPparsableWord()/isStringValidVariableName()/isStringNumber()
OpenNLC 14-October-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES: NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_REMOVE_REDUNDANT_CODE - preprocessorMathNLPparsableCharactersMandatory is not currently being used
OpenNLC 14-October-2014a - NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY/NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES: change category names to never start with numbers, eg If 3 baskets have a pie, eat the apple. -> 3baskets -> n3baskets (NLC_PREPROCESSOR_MATH_VARIABLE_NAME_CHARACTERS_ILLEGAL_AS_FIRST_REPLACEMENT_CHARACTER)
OpenNLC 14-October-2014a - NLC_USE_ADVANCED_REFERENCING_DECLARE_LOCAL_PROPERTY_LISTS_FOR_ALL_INDEFINITE_ENTITIES_FOR_ALL_SENTENCES: update declareLocalPropertyListsForIndefiniteEntities(): do not create classLists for disabled entities
OpenNLC 14-October-2014a - declareLocalPropertyListsForIndefiniteEntitiesValidClassChecks: do not accept numerical entity names
OpenNLC 14-October-2014a - [CHECKTHIS] NLC_PREVENT_INHERITANCE_DOUBLE_DECLARATIONS_OF_CLASS_LIST_VARIABLES: generateClassHeirarchy(): first instance of eraseDuplicateClassDefinitionSublistItemIfFoundInParentClassDefinitionSublist; pass correct GIA_ENTITY_VECTOR_CONNECTION_TYPE_PROPERTIES, not GIA_ENTITY_VECTOR_CONNECTION_TYPE_ACTIONS
OpenNLC 14-October-2014a - eraseDuplicateClassDefinitionSublistItemIfFoundInParentClassDefinitionSublist(): findVariableInParentClass() should take targetClassDefinition as classDefinition argument, not classDefinition
OpenNLC 15-October-2014a - NLC_CODEBLOCK_TYPE_NEW_FUNCTION: update function definition header to add action/actionObject arguments first
OpenNLC 15-October-2014a - findFormalFunctionArgumentCorrelateInExistingList(): separate cases for NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION/NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION_OBJECT versus NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_INSTANCE_OR_CLASS_LIST
OpenNLC 15-October-2014a - start NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ADVANCED[/NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ACCEPT_NON_EXACT_MATCH/NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ACCEPT_NON_EXACT_MATCH_SUBJECT/NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ACCEPT_NON_EXACT_MATCH_OBJECT]: reconcileClassDefinitionListFunctionDeclarationArgumentsBasedOnImplicitlyDeclaredVariablesInCurrentFunctionDefinition(): update to support function owners/objects who are children of the owner/object of a formally declared function (update NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_BASED_ON_IMPLICITLY_DECLARED_VARIABLES_IN_CURRENT_FUNCTION_DEFINITION)
OpenNLC 15-October-2014a - end NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ADVANCED
OpenNLC 15-October-2014a - expand NLC_GENERATE_FUNCTION_ARGUMENTS_PASS_LISTS_BY_REFERENCE: upgrade all NLC predefined functions to use C++ references
OpenNLC 15-October-2014a - NLC_GENERATE_FUNCTION_ARGUMENTS_ENABLE_TYPE_CASTING: NLC_CODEBLOCK_TYPE_CAST_VECTOR_NEW_FUNCTION/NLC_CODEBLOCK_TYPE_CAST_VECTOR_EXECUTE_FUNCTION/printCodeBlockCastVectorExecuteFunction: update dynamic casting to support entity vector lists 
OpenNLC 15-October-2014a - ensure generateFunctionExecutionArgumentsWithActionConceptInheritanceString() gets function arguments from class definition list (in case they have been dynamically updated based on implicit declarations within the function definition) 
OpenNLC 16-October-2014a - [untested] NLC_DERIVE_LOCAL_FUNCTION_ARGUMENTS_BASED_ON_IMPLICIT_DECLARATIONS_SUPPORT_LOCAL_LISTS_USE_CLASS_NAMES: update NLC_DERIVE_LOCAL_FUNCTION_ARGUMENTS_BASED_ON_IMPLICIT_DECLARATIONS: generateLocalFunctionArgumentsBasedOnImplicitDeclarations(): maintain; add new function argument NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_INSTANCE_OR_CLASS_LIST only if definite is not preceeded by an indefinite entity [in its context]  
OpenNLC 16-October-2014a - retire NLC_CREATE_IMPLICITLY_DECLARED_ACTION_OBJECT_AND_SUBJECT_VARIABLES 
OpenNLC 16-October-2014a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ADVANCED: update 1k9x changes to support cases where a given function is executed more than once in a given function (with different input paramters)
OpenNLC 16-October-2014a - change "functionClassDeclaration" to "functionDeclaration"
OpenNLC 17-October-2014a - update GIA to support advanced referencing based on indentation (either pass NLC preprocessor indentation to GIA, or GIA lrp regenerates indentation)			
OpenNLC 17-October-2014a - fix bug in generateDynamicCastOfEntity(): return value 
OpenNLC 17-October-2014a - fix bug in generateFunctionExecutionArgumentsWithActionConceptInheritanceString(): functionObjectArgument->functionArgumentPassCastClassName = generateClassName(functionObjectArgumentDeclaration->name);
OpenNLC 17-October-2014a - debug NLC_DERIVE_LOCAL_FUNCTION_ARGUMENTS_BASED_ON_IMPLICIT_DECLARATIONS_SUPPORT_LOCAL_LISTS_USE_CLASS_NAMES - change if(findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext) to if(!findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext)
OpenNLC 17-October-2014a - NLC_DERIVE_LOCAL_FUNCTION_ARGUMENTS_BASED_ON_IMPLICIT_DECLARATIONS_SUPPORT_LOCAL_LISTS_USE_CLASS_NAMES_ADVANCED: use GIA referencing code to check reference sets
OpenNLC 17-October-2014a - generateLocalFunctionArgumentsBasedOnImplicitDeclarationsValidClassChecks() - do not accept substanceConcepts
OpenNLC 18-October-2014a - correct NLCtranslator.cpp code replication bug introduced by DONE 1k7c - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_ENTITY_NAMES_ONLY 
OpenNLC 18-October-2014a - dynamically connect Function Dependency Tree
OpenNLC 18-October-2014a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE: update NLCmain.cpp to execute reconcileClassDefinitionListFunctionDeclarationArgumentsBasedOnImplicitlyDeclaredVariablesInCurrentFunctionDefinition() in reverse order of function execution heirachy
OpenNLC 18-October-2014a - make generateLocalFunctionArgumentsBasedOnImplicitDeclarations() detect function execution (reference) implicitly declared variables in a given function
OpenNLC 18-October-2014a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_IGNORE_DUPLICATE_FUNCTION_DELCARATIONS - if there is more than 1 class definition function declaration for a given function name/owner/object, prevent either their printing or them being added to class definitions
OpenNLC 18-October-2014a - update addImplicitlyDeclaredVariablesInCurrentFunctionDefinitionToClassDefinition/addImplicitlyDeclaredVariablesInCurrentFunctionDeclarationToClassDefinition to not accept duplicate arguments
OpenNLC 18-October-2014a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_NO_OBJECT/NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_NO_SUBJECT - update findFunctionDeclarationClassDefinition() to check cases with no object and no subject
OpenNLC 18-October-2014a - NLC_CLASS_DEFINITIONS_CREATE_FUNCTION_DECLARATIONS_FOR_NEW_FUNCTION_DEFINITIONS - if function declaration does not exist (exact or nonexact) for a new function definition then create it
OpenNLC 18-October-2014a - ensure that action class definitions are only created if functionDependency does not exist (!foundFunctionDependencyInList)
OpenNLC 18-October-2014a - introduce isReference to distinguish between functionDependencies which have been created based on new function definitions (false) [not in generateClassHeirachy], and those created based on function execution references (true) [in generateClassHeirachy] 
OpenNLC 18-October-2014a - NLC_CLASS_DEFINITIONS_CREATE_FUNCTION_DECLARATIONS_FOR_NEW_FUNCTION_DEFINITIONS: shift code to createFunctionDependencyForNewFunctionDefinition(), and execute in NLCmain.cpp before translation begins  
OpenNLC 18-October-2014a - code reductions to NLC_CLASS_DEFINITIONS_CREATE_FUNCTION_DECLARATIONS_FOR_NEW_FUNCTION_DEFINITIONS implementation
OpenNLC 18-October-2014a - get code to with with NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE and !NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_ACTIVE
OpenNLC 18-October-2014a - get code to work with NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_ACTIVE
OpenNLC 18-October-2014a - fix up main class declaration not receiving any arguments [no implicit declarations are being added to it]
OpenNLC 18-October-2014a - fix up NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_ACTIVE - ensure mouse is being passed to parent class definition main
OpenNLC 18-October-2014a - introduce functionDependencyParent
OpenNLC 18-October-2014a - revert 1k13f change (remove functionDependencyParent) 
OpenNLC 18-October-2014a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE: separate generateClassHeirarchyFunctions from generateClassHeirarchy
OpenNLC 18-October-2014a - integrate class declaration name reconciliation code into generateClassHeirarchyFunctions() - ie findFunctionDeclarationClassDefinitionExactOrNonExactMatch()
OpenNLC 18-October-2014a - create addImplicitlyDeclaredVariablesInCurrentFunctionDeclarationToFunctionDefinition()							
OpenNLC 21-October-2014a - NLC_USE_ADVANCED_REFERENCING: NLC_USE_ADVANCED_REFERENCING_SUPPORT_ALIASES: NLC maintain an alias list based on definition connections marked as 'isAlias' by GIA
OpenNLC 21-October-2014a - partially revert 1k14a implementation, and store an alias string vector list for each entity - NLC will retain the class type of each alias in RAM
OpenNLC 21-October-2014a - change generateEntityLocalList[Name] to generateEntityList[Name]
OpenNLC 21-October-2014a - test aliases being actually referenced; ie findAliasAndAddToCategoryList
OpenNLC 21-October-2014a - NLC_USE_ADVANCED_REFERENCING_SUPPORT_ALIASES: update identifyAliasesInCurrentSentence(); replace all alias GIA entities with their respective class eg dog, and add an alias to their vector list
OpenNLC 21-October-2014a - replace aliases in function definition headers;
OpenNLC 21-October-2014a - remove old NLC_CLASS_DEFINITIONS_CREATE_FUNCTION_DECLARATIONS_FOR_NEW_FUNCTION_DEFINITIONS implementation error; "findFunctionDeclarationClassDefinitionExactOrNonExactMatch() error: findFunctionDeclarationClassDefinition() returned true with isReference && findFunctionOwnerExactMatch && findFunctionObjectExactMatch input paramters"
OpenNLC 21-October-2014a - ignore error "arefunctionArgumentsPrinted(): error: !foundLocalClassDefinition; currentItem->className = xClass" for NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION/NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION_OBJECT
OpenNLC 23-October-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_USE_ADVANCED_REFERENCING; don't add multiple implictly declared entities to function definition
OpenNLC 23-October-2014a - update NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_BASED_ON_IMPLICITLY_DECLARED_VARIABLES_IN_CURRENT_FUNCTION_DEFINITION reconcileClassDefinitionListFunctionDeclarationArgumentsBasedOnImplicitlyDeclaredVariablesInCurrentFunctionDefinition() code to make it compatible with NLC_LOCAL_LISTS_USE_INSTANCE_NAMES
OpenNLC 23-October-2014a - !GIA_DISABLE_CROSS_SENTENCE_REFERENCING compilation compatibility update
OpenNLC 23-October-2014a - CS compatibility updates	
OpenNLC 23-October-2014a - if not preprocessing, checkAlphaNumericEntityNames use NLPparsableCharacters not preprocessorMathNLPparsableCharacters	
OpenNLC 23-October-2014a - Windows compatibility update - createCodeBlocksClearContextListVariableExecuteFunction must return a value
OpenNLC 24-October-2014a - generateClassHeirarchyFunctions(): update to support cases in which an action (function reference) has been declared twice, but the action (function) has not been defined, eg "A chicken ate a pie. The chicken that ate a pie rowed the boat."
OpenNLC 24-October-2014a - ensure referenceContextLists are initialised/cleared correctly for logical conditions with more than 1 case 
OpenNLC 24-October-2014a - NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE: upgrade generateCodeBlocksFromMathTextNLPparsablePhraseLogicalConditionFor() to set currentCodeBlockInTreeAtBaseLevel
OpenNLC 24-October-2014a - update NLC predefined functions wrt output C++ compilation errors (typename)
OpenNLC 24-October-2014a - update generateClassHeirarchy()/printClassDefinitions() use of generateCodeConditionListDefinitionText()
OpenNLC 24-October-2014a - update addToCategoryIfPassSingularDefiniteReferencingTests(); if(entityCategoryList.empty())..	
OpenNLC 25-October-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: disable NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL until tested
OpenNLC 25-October-2014b - [generate based on NLC1l5d] - fix bug introduced @NLC1k15a; createCodeBlockForStatementsForDefinitionChildren() reference was temporarily commented out and never restored
		
Release-08November2014:

OpenNLC 29-October-2014a - prepare for NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS; add function subject owner vector argument (NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION_OWNER/NLC_ITEM_TYPE_FUNCTION_EXECUTION_ARGUMENT_FUNCTION_OWNER)
OpenNLC 29-October-2014a - NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS/NLC_FUNCTIONS_SUPPORT_PLURAL_OBJECTS
OpenNLC 29-October-2014a - create getLastCodeBlockInLevel() and replace all relevant code with a reference to this function
OpenNLC 29-October-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (!NLC_USE_ADVANCED_REFERENCING): change function subject/object function exection arguments to categoryLists
OpenNLC 31-October-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (!NLC_USE_ADVANCED_REFERENCING): NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_ACTIONS: !NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED: action logical conditions ("The sun fights. \ If the sun fights, the dog is happy.")
OpenNLC 31-October-2014a - NLC_ACTIONS_SUPPORT_ACTION_HISTORY - action logical conditions ("If the sun fights, the dog is happy.") and action contexts ("The chicken that ate a pie rows the boat.")
OpenNLC 31-October-2014a - update createCodeBlockForStatements() to support createCodeBlockForGivenAction() and createCodeBlockForGivenActionIncoming()
OpenNLC 31-October-2014a - generalise createCodeBlockForGivenProperties/Conditions etc to createCodeBlockForConnectionType()
OpenNLC 31-October-2014a - update generateActionCodeBlocks() to set onlyGenerateContextBlocksIfConnectionsParsedForNLC to true (this is required for generateContextBlocks to ignore actions)
OpenNLC 31-October-2014a - NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS - enter category lists when NLC_USE_ADVANCED_REFERENCING or NLC_RECORD_ACTION_HISTORY (NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_ENTER_GENERATED_CATEGORY_LIST/NLC_FUNCTIONS_SUPPORT_PLURAL_OBJECTS_ENTER_GENERATED_CATEGORY_LIST)
OpenNLC 01-November-2014a - NLC_ACTIONS_SUPPORT_ACTION_HISTORY: update createCodeBlockForConnectionType() to prevent createCodeBlockForGivenAction()/createCodeBlockForGivenActionIncoming() getting into infinite loop - utilise NLCcontextGeneratedTemp
OpenNLC 01-November-2014a - move NLC_ITEM_TYPE_CATEGORY_VAR_APPENDITION/NLC_ITEM_TYPE_ALIAS_VAR_APPENDITION to NLCprintDefs.h
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: update generateActionCodeBlocks() to ignore cases in which action is defined in sameReferenceSet (eg "The chicken that ate a pie rows the boat.")	
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: update generateParentInitialisationCodeBlockWithChecks() to ignore entities which have NLCcontextGenerated (eg "pie" in "The chicken that ate a pie rows the boat.")
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: update createCodeBlockForGivenAction()/createCodeBlockForGivenActionIncoming() to set NLCcontextGenerated for actionObject/actionSubject
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: NLC_MARK_ACTION_SUBJECT_OBJECT_INDEFINITE_ENTITY_ACTIONS_AS_NOT_SAME_REFERENCE_SET: markActionSubjectObjectIndefiniteEntityActionsAsNotSameReferenceSet(): if action subject/object is indefinite then set all its actions/incomingActions to !sameReferenceSet
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: fix preprocessor defs in generateActionCodeBlocks
OpenNLC 01-November-2014a - fix bug in NLC_CODEBLOCK_TYPE_EXECUTE_FUNCTION - use functionOwnerNameWithReferenceDelimiter not functionOwnerName
OpenNLC 01-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: NLC_RECORD_ACTION_HISTORY_GENERALISABLE_DO_NOT_EXECUTE_PAST_TENSE_ACTIONS: do not execute function if action has a timeCondition past node
OpenNLC 02-November-2014a - getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks()/initialiseParentIfNecessaryOrGenerateCodeBlocks(): clean [collapse relevant if statements]
OpenNLC 02-November-2014a - shift generateContextForChildEntity() out of generateObjectInitialisationsBasedOnPropertiesAndConditions()
OpenNLC 02-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): continue clean
OpenNLC 02-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): shift propertyConnection->NLCparsedForCodeBlocks = true;/propertyEntity->NLCparsedForCodeBlocks = true; after executing generateObjectInitialisationsBasedOnSubstanceConcepts()
OpenNLC 02-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): disable redundant firstCodeBlockInSection2 code 
OpenNLC 02-November-2014a - disable potentially redundant (OLD) code concerning parent in generateContextForChildEntity()
OpenNLC 02-November-2014a - change getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks()/initialiseParentIfNecessaryOrGenerateCodeBlocks() to perform generateContextBlocks with currentEntity instead of parentEntity - execute generateContextForChildEntity()
OpenNLC 02-November-2014a - generateParentInitialisationCodeBlock(); parentEntity->NLClocalListVariableHasBeenInitialised = true;" (update 1j14b change; set NLClocalListVariableHasBeenInitialised irrespective of NLC_LOCAL_LISTS_USE_INSTANCE_NAMES)
OpenNLC 02-November-2014a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS: logical conditions for definition links
OpenNLC 02-November-2014a - create checkSpecialCaseEntity(): do not execute generateParentInitialisationCodeBlockWithChecks()  if(!(parentEntity->isConcept) && !(parentEntity->isAction) && !(parentEntity->isSubstanceConcept) && !(parentEntity->isActionConcept) && !(parentEntity->isCondition))
OpenNLC 02-November-2014a - update searchForEquivalentSubnetToIfStatement() to only set linkSpecificConceptsAndActions if !compareSubstanceConcepts
OpenNLC 02-November-2014a - fix bug; createCodeBlockForStatementsForDefinitionChildren() reference was temporarly commented out and never restored
OpenNLC 02-November-2014a - move potentially redundant (OLD) from generateContextForChildEntity() to start of generateObjectInitialisationsBasedOnPropertiesAndConditions() (partially revert 1l4c)
OpenNLC 02-November-2014a - update generateParentInitialisationCodeBlock() to perform clearCodeBlock if !performedAtLeastParentObjectInitialisation regardless of NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL
OpenNLC 02-November-2014a - update generateObjectInitialisationsBasedOnPropertiesAndConditions() to check wasReference is true if !assumedToAlreadyHaveBeenDeclared
OpenNLC 02-November-2014a - update checkSentenceIndexParsingCodeBlocks() to ignore entities if wasReference and sentenceIndex < entity->sentenceIndex 
OpenNLC 02-November-2014a - replace newlyDeclaredEntityInCategoryList check with !NLCcontextGenerated check
OpenNLC 02-November-2014a - update checkSpecialCaseEntity() to optionally ignore actions if testing parent (update 1l5b implementation)
OpenNLC 02-November-2014a - remove redundant code in generateObjectInitialisationsBasedOnPropertiesAndConditions satisfied by checkSpecialCaseEntity() to optionally ignore actions (if executed on parent) 
OpenNLC 02-November-2014a - revert change 1i11k - generateObjectInitialisationsBasedOnPropertiesAndConditions(): remove '|| (parentName != "")'
OpenNLC 02-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): when creating context for parent (!(entity->NLCcontextGenerated)) ignore qualities as they will not have NLClocalListVariableHasBeenInitialised set when they were added as a property, because they will not have NLClocalListVariableHasBeenDeclared set - see declareLocalPropertyListsForIndefiniteEntities()
OpenNLC 02-November-2014a - expand use of checkSpecialCaseEntity() to declareLocalPropertyListsForIndefiniteEntities() 
OpenNLC 02-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): when creating context for parent (!(entity->NLCcontextGenerated)) don't throw !assumedToAlreadyHaveBeenDeclared error when !NLC_DEFINE_LOCAL_VARIABLES_FOR_ALL_INDEFINATE_ENTITIES(); without this change NLC_DEFINE_LOCAL_VARIABLES_FOR_ALL_INDEFINATE_ENTITIES cannot be disabled because NLClocalListVariableHasBeenInitialised must be set when variables are added as a property (unless isSubstanceQuality)
OpenNLC 02-November-2014a - not required (for verification only); expand use of checkSpecialCaseEntity() to generateObjectInitialisationsBasedOnPropertiesAndConditions() - revert change 1l6e: "remove redundant code in generateObjectInitialisationsBasedOnPropertiesAndConditions satisfied by checkSpecialCaseEntity() to optionally ignore actions (if executed on parent)"
OpenNLC 02-November-2014a - do not exit if detect "generateObjectInitialisationsBasedOnPropertiesAndConditions() error: !(entity->NLCcontextGenerated) && !assumedToAlreadyHaveBeenDeclared"
OpenNLC 02-November-2014a - separate NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC from NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS
OpenNLC 03-November-2014a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_REMOVE_REDUNDANT_CODE: erase all mathTextVariableNames that are raw numbers using isStringNumber() [improve 1k7d change, and assert now mandatory]
OpenNLC 03-November-2014a - change checkIfPhraseContainsSubstanceConcept() to checkIfPhraseContainsSubstanceConceptWithDefinitionLink() [improve 1l5a change - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS: logical conditions for definition links]
OpenNLC 03-November-2014a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks(): set generateContextForChildEntity() parent entity parameter to NULL such that it can be obtained by getSameReferenceSetDefiniteUniqueParent() [improve 1l4d update - change getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks()/initialiseParentIfNecessaryOrGenerateCodeBlocks() to perform generateContextBlocks with currentEntity instead of parentEntity - execute generateContextForChildEntity()]
OpenNLC 03-November-2014a - fix generateContextForChildEntity() implementation [improve 1l4b update - shift generateContextForChildEntity() out of generateObjectInitialisationsBasedOnPropertiesAndConditions()]
OpenNLC 03-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): when creating context for parent (generateParentContext), if !assumedToAlreadyHaveBeenDeclared, generateContextBasedOnDeclaredParent() 
OpenNLC 03-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): when creating context for parent (generateParentContext) ignore qualities
OpenNLC 03-November-2014a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks(): NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: execute generateContextBasedOnDeclaredParent() if !generateContextForChildEntity() [improve 1l4d update - change getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks()/initialiseParentIfNecessaryOrGenerateCodeBlocks() to perform generateContextBlocks with currentEntity instead of parentEntity - execute generateContextForChildEntity()]
OpenNLC 03-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generalise generateContextForChildEntity() to execute generateContextBasedOnDeclaredParent() if !generateContextForChildEntity
OpenNLC 03-November-2014a - generateContextForChildEntity(): if assumedToAlreadyHaveBeenDeclared, set generatedContextForChild even if !generateContextBlocks
OpenNLC 03-November-2014a - update generateContextBasedOnDeclaredParent() to execute createCodeBlockForLocalList before of createCodeBlockForPropertyList if entity is considered "topLevel" (ie without parent context having been defined)
OpenNLC 03-November-2014a - modify generateContextBasedOnDeclaredParent to check for generateObjectInitialisationsLastParent [improve 1l7g update - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generalise generateContextForChildEntity() to execute generateContextBasedOnDeclaredParent() if !generateContextForChildEntity]
OpenNLC 03-November-2014a - support for DISABLE_CODE_NOT_YET_SUPPORTED_BY_NLC_LOCAL_LISTS_USE_INSTANCE_NAMES
OpenNLC 03-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generateActionCodeBlocks(): create getActionSubjectEntityConnection/getActionObjectEntityConnection to get the connection pertaining to the currentSentence
OpenNLC 04-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions() preprocessor def rearrangements (separate out distinct NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE code from !NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE code)
OpenNLC 04-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions() passThrough code rearrangements
OpenNLC 04-November-2014a - move commented trace to NLC_DEBUG
OpenNLC 04-November-2014a - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: improve 1l7j update [NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: generateActionCodeBlocks(): create getActionSubjectEntityConnection/getActionObjectEntityConnection to get the connection pertaining to the currentSentence]
OpenNLC 04-November-2014a - update transformTheActionOfPossessionEgHavingIntoAproperty() to support NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (ie !GIA_DISABLE_CROSS_SENTENCE_REFERENCING)
OpenNLC 04-November-2014a - fix typo in createCodeBlockForGivenActionIncoming() - incorrect context produced
OpenNLC 04-November-2014a - rename all instances of k18+ to 1l1+
OpenNLC 04-November-2014a - update generateContextForChildEntity() to not execute generateContextBasedOnDeclaredParent if generatedContextForChild [low priority change; not done because of any errors in output]
OpenNLC 04-November-2014a - update transformTheActionOfPossessionEgHavingIntoAproperty() to set isReference for new connections - NB overwrite isReference is required these values have been incorrectly determined by writeVectorConnection() - an alternative means of correction would be to use "int sentenceIndex = (actionEntity->actionSubjectEntity->front())->sentenceIndexTemp;" as the first connection added between 2 nodes is always deemed to be !isReference, and all additional connections are auto designated as isReference
OpenNLC 04-November-2014a - generateObjectInitialisationsBasedOnPropertiesAndConditions(): propertyEntityClass->context.push_back(parentName); - [fix bug in 1l8b update - generateObjectInitialisationsBasedOnPropertiesAndConditions() passThrough code rearrangements]
OpenNLC 05-November-2014a - NLC_ITEM_TYPE_ALIAS_VAR_APPENDITION: change "AliasList" back to "aliasList" [slight reversion of 1l3a update]
OpenNLC 05-November-2014a - fix infinite loop bug in transformTheActionOfPossessionEgHavingIntoAproperty(): connectionIter++ always unless erasing connection [correct 1l8e/h update]
OpenNLC 05-November-2014a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks() - partial revert to using createCodeBlockForCategoryList/createCodeBlockForLocalList if generateParentInitialisationCodeBlockWithChecks() [improve updates 1l7c/1l7f/1l4d]
OpenNLC 05-November-2014a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks() - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: set createCodeBlocksDeclareNewCategoryListVariable at start, and currentEntity->NLCcategoryListCreatedTemp = true, to provide future access to [potential] child category list
OpenNLC 05-November-2014a - update createCodeBlocksDeclareNewCategoryListVariable to support detection of NLCcategoryListCreatedTemp
OpenNLC 05-November-2014a - NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS: generateFunctionExecutionArgumentsWithActionConceptInheritanceString(): !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: functions should pass category lists instead of class lists, 
OpenNLC 05-November-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: update generateCodePluralReferenceText() generateGenericListName reference to use instanceNames  
OpenNLC 05-November-2014a - NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS: NLC_USE_ADVANCED_REFERENCING (ie !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES): create action category lists for function execution arguments [improve 1l9c update]
OpenNLC 06-November-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_RECORD_ACTION_HISTORY_COMPENSATE_FOR_EFFECTIVE_DEFINITE_ENTITIES_IMPLEMENTATION1 - prevent generateObjectInitialisationsBasedOnPropertiesAndConditions() from throwing an error concerning the fact "a pie" in "The chicken that ate a pie rowed the boat." has not been (and will never be) initialised [as it is an effective definite entity]
OpenNLC 06-November-2014a - NLC_MARK_ACTION_SUBJECT_OBJECT_INDEFINITE_ENTITY_ACTIONS_AS_NOT_SAME_REFERENCE_SET: change markActionSubjectObjectIndefiniteEntityActionsAsNotSameReferenceSet() to markActionSubjectIndefiniteEntityActionsAsNotSameReferenceSet() - only mark actions with an indefinite subject as not same reference set [improve 1l3c update - NLC_RECORD_ACTION_HISTORY_GENERALISABLE: markActionSubjectObjectIndefiniteEntityActionsAsNotSameReferenceSet(): if action subject/object is indefinite then set all its actions/incomingActions to !sameReferenceSet]
OpenNLC 06-November-2014a - revert to original planned 1l10b implementation - only mark actions with an indefinite subject and object same reference set
OpenNLC 06-November-2014a - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS: [NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL]: NLC_ACTION_CATEGORY_LISTS: NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_BLOCKS_FOR_PARENT_INITIALISATION_SPECIAL: getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks(): reintroduce NLCcategoryListCreatedTemp and check this before generatingContext
OpenNLC 07-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: integrate NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS with NLC_ACTION_CATEGORY_LISTS+NLC_ACTION_CATEGORY_LISTS_USE_AS_FUNCTION_EXECUTION_ARGUMENTS
OpenNLC 07-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_PERFORM_PLURAL_DEFINITE_REFERENCING_TESTS: define addToCategoryIfPassPluralDefiniteReferencingTests()
OpenNLC 07-November-2014a -  NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: integrate NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS with NLC_ACTION_CATEGORY_LISTS_USE_FOR_PLURAL_ACTION_SUBJECTSOBJECTS_IN_MULTIACTION_INITIALISATION_SENTENCES
OpenNLC 07-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_ACTION_CATEGORY_LISTS_USE_FOR_PLURAL_ACTION_SUBJECTSOBJECTS_IN_MULTIACTION_INITIALISATION_SENTENCES: update generateCodeBlocksPart3actions() to reset NLCcategoryListCreatedTemp for all entities after sentence has been parsed
OpenNLC 07-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: NLC_PERFORM_PLURAL_DEFINITE_REFERENCING_TESTS: NLC_USE_ADVANCED_REFERENCING_DO_NOT_ADD_DUPLICATES: only add to category list unique items (instead of simple chicken1CategoryList.push_back)
OpenNLC 07-November-2014a - change NLC_USE_ADVANCED_REFERENCING_DO_NOT_ADD_DUPLICATES to NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_DO_NOT_ADD_DUPLICATES
OpenNLC 07-November-2014a - change dog2->AliasList.push_back(tom) to dog2->AliasList.push_back("tom")	
OpenNLC 07-November-2014a - reenable NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT_ORIGINAL_IMPLEMENTATION for !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (it has already been renabled for NLC_LOCAL_LISTS_USE_INSTANCE_NAMES)
OpenNLC 07-November-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT_ORIGINAL_IMPLEMENTATION: NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_DO_NOT_ADD_DUPLICATES: use createCodeBlockAddEntityToCategoryListCheckLastSentenceReferencedPluralExecuteFunction() instead of ballClassList.push_back(ball1)
OpenNLC 07-November-2014a - NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE_ADVANCED_GENERATE_CONTEXT_FOR_EACH_CHILD_GET_PARENT_ORIGINAL_IMPLEMENTATION: !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: extend implementation to passThrough/generateParentContextPassThrough case, create addIntermediaryImplicitlyDeclaredEntityToLocalList()  (improve 1l12a update)
OpenNLC 07-November-2014a - NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS: printCodeBlocks(): NLC_CODEBLOCK_TYPE_EXECUTE_FUNCTION - "(new functionSubjectClass)->" instead of functionSubject->
OpenNLC 07-November-2014a - update generateContextBasedOnDeclaredParent() to execute createCodeBlockForStatements() instead of executing createCodeBlockForPropertyList [improve 1l7x updates]
OpenNLC 07-November-2014a - update generateContextBasedOnDeclaredParent() to execute generateContextBlocks() instead of executing createCodeBlockForStatements [improve 1l7x/1l13a updates]
OpenNLC 07-November-2014a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: update generateCodeBlocksFromMathTextNLPparsablePhrase(): execute getParent() before createCodeBlockForPropertyTypeClass() and change getParentAndGenerateContextBlocks() to generateContextBlocks()
OpenNLC 07-November-2014a - update generateCodeBlocksFromMathTextNLPparsablePhrase() to execute generateContextBlocks() on parentEntity rather than entity
OpenNLC 07-November-2014a - fix 1l12d change [NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS: printCodeBlocks(): NLC_CODEBLOCK_TYPE_EXECUTE_FUNCTION - "(new functionSubjectClass)->" instead of functionSubject->]
OpenNLC 07-November-2014a - change generateObjectInitialisationsBasedOnSubstanceConceptsForAllDefiniteEntities() to check if(entity->sentenceIndex == sentenceIndex) instead of if(checkSentenceIndexParsingCodeBlocks(entity, sentenceIndex, false) [which ignores sentence indices of references]
OpenNLC 07-November-2014a - update generateObjectInitialisationsBasedOnSubstanceConceptsForAllDefiniteEntities to check !(entity->disabled)
OpenNLC 07-November-2014a - add preprocessor def NLC_MARK_ACTION_SUBJECT_OBJECT_INDEFINITE_ENTITY_ACTIONS_AS_NOT_SAME_REFERENCE_SET 
OpenNLC 07-November-2014a - NLC_RECORD_ACTION_HISTORY: do not throw "generateObjectInitialisationsBasedOnPropertiesAndConditions() error: generateParentContextTopLevel && !assumedToAlreadyHaveBeenDeclared" error if(!(entity->NLCcontextGenerated)) - must perform this check because "a pie" in "The chicken that ate a pie rows the boat." will not be initialised by generateParentInitialisationCodeBlockWithChecks() [and will remain undeclared] because its context will be parsed by generateActionCodeBlocks() when it is translating "the chicken... rows the boat" [a product of "that ate a pie" being in the same reference set as row action subject "chicken"] 
OpenNLC 08-November-2014a - Windows compatibility update - markActionSubjectObjectIndefiniteEntityActionsAsNotSameReferenceSet() must return a value
OpenNLC 08-November-2014a - update createCodeBlockNewFunction(): NLC_GENERATE_FUNCTION_ARGUMENTS_BASED_ON_ACTION_AND_ACTION_OBJECT_VARS_PASS_AS_LISTS: do not createCodeBlocksAddVariableToNewList, NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS: do not createCodeBlockDeclareAndInitialiseVariableForActionSubject/createCodeBlocksAddVariableToNewList

Release-02December2014:

OpenNLC 11-November-2014a - start generateContextForChildEntity/ForLoops upgrade to a) get a reverse conditionList parent, and b) parse the context of this parent
OpenNLC 11-November-2014a - upgrade getSameReferenceSetDefiniteUniqueParent(): to check condition parent (when checking child context during initialise properties and conditions)
OpenNLC 11-November-2014a - update getParent(): change position of foundParentProperty = true;
OpenNLC 11-November-2014a - update getParent(): only parseConditionParents if NLC_NORMALISE_INVERSE_PREPOSITIONS
OpenNLC 11-November-2014a - upgrade all uses of getParent()/getParentAndGenerateContextBlocks()/getParentAndGenerateParentInitialisationCodeBlock() to parseConditionParents
OpenNLC 11-November-2014a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED_CONJUNCTIONS_ADVANCED: upgrade getParent() to prevent logical conditions (eg if) and logical condition conjunctions (eg and) from being parsed - this enables generateCodeBlocksPart2logicalConditions():getParentAndGenerateContextBlocks() to parseConditionParents
OpenNLC 11-November-2014a - GIA_LRP_NORMALISE_TWOWAY_PREPOSITIONS: NLC_NORMALISE_TWOWAY_PREPOSITIONS: [changed implementation @NLC1m1e] fix getParent/getSameReferenceSetDefiniteUniqueParent/etc parsing of condition nodes (stop infinite loop with two way condition connections)
OpenNLC 11-November-2014a - GIA_LRP_NORMALISE_TWOWAY_PREPOSITIONS: NLC_NORMALISE_TWOWAY_PREPOSITIONS: [changed implementation @NLC1m1e] only ever parse context once (FAILED)
OpenNLC 11-November-2014a - update preprocessor definitions: NLC_NORMALISE_PREPOSITIONS/NLC_NORMALISE_TWOWAY_PREPOSITIONS/NLC_NORMALISE_INVERSE_PREPOSITIONS
OpenNLC 11-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS: change code to check for inverseConditionTwoWay rather than checking for infinite loops
OpenNLC 11-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS: generate twoway conditions
OpenNLC 11-November-2014a - remove createCodeBlockRemoveEntitiesFromLocalList() if propertyConnection/conditionConnection->negative and assumedToAlreadyHaveBeenDeclared(propertyEntity/conditionObject)
OpenNLC 11-November-2014a - GIA_USE_ADVANCED_REFERENCING: NLC_NORMALISE_TWOWAY_PREPOSITIONS: normalise implementation
OpenNLC 11-November-2014a - GIA_USE_ADVANCED_REFERENCING: NLC_NORMALISE_TWOWAY_PREPOSITIONS_DUAL_CONDITION_LINKS_ENABLED: if(!(conditionEntity->inverseConditionTwoWay) || conditionConnection->isReference)	//prevent infinite loop for 2 way conditions 
OpenNLC 18-November-2014a - handle GRAMMATICAL_TENSE_MODIFIER_PROGRESSIVE / GRAMMATICAL_TENSE_MODIFIER_POTENTIAL / GRAMMATICAL_TENSE_MODIFIER_STATE
OpenNLC 18-November-2014a [CHECKTHIS] - GRAMMATICAL_TENSE_MODIFIER_PROGRESSIVE action: dont add action execution, just add action history [mark as progresive] and update class heirachy
OpenNLC 18-November-2014a - GRAMMATICAL_TENSE_MODIFIER_POTENTIAL action: dont add action execution or action history (just update class heirachy)
OpenNLC 18-November-2014a - GRAMMATICAL_TENSE_MODIFIER_STATE action: dont add action execution, just add action history [mark as state] and update class heirachy
OpenNLC 18-November-2014a - change hasTimeConditionNodePast() to isNonImmediateAction(): make NLC detect any form of action that does not imply immediate execution (state, past tense, potential) rather than just past tense
OpenNLC 28-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS: update generateObjectInitialisationsBasedOnPropertiesAndConditions() to set conditionConnection/conditionEntity/conditionObject->NLCparsedForCodeBlocks before executing createCodeBlockAddCondition() for conditionEntity->conditionTwoWay (update 1m1x code)
OpenNLC 28-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS: generateObjectInitialisationsBasedOnPropertiesAndConditions(): shift 1m1x/2m2b code to createCodeBlockCreateNewCondition/createCodeBlockAddCondition/createCodeBlockRemoveConditions and extract createCodeBlockCreateNewConditionSimple/createCodeBlockAddConditionSimple/createCodeBlockRemoveConditionsSimple
OpenNLC 30-November-2014a [CHECKTHIS] - NLC_USE_STRING_INDEXED_UNORDERED_MAPS_FOR_CONDITION_LISTS: update generateClassHeirarchy() to index by condition not by conditionObject (revert update _)
OpenNLC 30-November-2014a - update generateClassHeirarchy() to use findClassDefinitionCondition (which checks both condition and conditionObject)
OpenNLC 30-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS [OLD: GIA_LRP_NORMALISE_TWOWAY_PREPOSITIONS_DUAL_CONDITION_LINKS_ENABLED]: make printClassDefinitions() NLC_CLASS_DEFINITIONS_ORDER_BY_DEPENDENCIES work 
OpenNLC 30-November-2014a - NLC_NORMALISE_TWOWAY_PREPOSITIONS_DUAL_CONDITION_LINKS_DISABLED: generate two-way class definitions
OpenNLC 30-November-2014a - remove debug code
OpenNLC 01-December-2014a - [reverted] GIA_USE_ADVANCED_REFERENCING: update generateObjectInitialisationsBasedOnPropertiesAndConditions() to check both if(assumedToAlreadyHaveBeenDeclared(propertyEntity/conditionObject) || generatedContextForChild)
OpenNLC 01-December-2014a - GIA_USE_ADVANCED_REFERENCING: update generateContextForChildEntity() to set childEntity->NLClocalListVariableHasBeenInitialised = true if generatedContextForChild (case #2) [revert 1m4a]
OpenNLC 01-December-2014a - createCodeBlockRemoveConditionsSimple()/createCodeBlockAddConditionSimple()/createCodeBlockAddNewConditionSimple()/generateClassHeirarchyCondition() must return a value	
OpenNLC 02-December-2014a - NLC_NATURAL_LANGUAGE_CODE_FILE_NAME_EXTENSION: introduce file extension for NLC natural language code; ".nlc"
OpenNLC 02-December-2014a - GIA_USE_ADVANCED_REFERENCING: update generateContextForChildEntity() to execute addIntermediaryImplicitlyDeclaredEntityToLocalList() {and set childEntity->NLClocalListVariableHasBeenInitialised = true} if generatedContextForChild (case #2) [update 1m4b implementation]

Release-06February2015:

OpenNLC 22-December-2014a - [NEEDTODEBUG] NLC_NONOO: create another version of NLC which compiles GIA network into C++ pseudo code using single GIAentityNode class rather than individual classes
OpenNLC 07-January-2015a - NLC_USE_LIBRARY: all NLC output c++ files should #include "NLClibrary.h"
OpenNLC 07-January-2015a - START NLC library development
OpenNLC 07-January-2015a - NLC_USE_LIBRARY: consider storing properties and conditions in their own vector lists
OpenNLC 07-January-2015a - NLC_USE_LIBRARY: create a new underorderedMap called propertyNodeList/propertyNodeReverseList/conditionNodeList/incomingConditionNodeList/actionNodeList/incomingActionNodeList for each NLC class (which references all individual property/condition/action lists by name)	
OpenNLC 08-January-2015a - NLC_USE_LIBRARY: ensure to always add a from condition to the action (based on the parent of the action object)
OpenNLC 08-January-2015a - NLC_USE_LIBRARY: printFunction/moveFunction
OpenNLC 08-January-2015a - update generateActionCodeBlocks() to automatically create a "from" condition for all action entities which stores the action object parent (such that "move x to y" can be used where the original location is implicitly assumed to be the parent of x, and the new location is y)
OpenNLC 09-January-2015a - update all use of dynamic_cast to reinterpret_cast;
OpenNLC 09-January-2015a - NLC_USE_LIBRARY: START xml file i/o readFunction/writeFunction
OpenNLC 09-January-2015a - NLC_USE_LIBRARY: NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS 
OpenNLC 09-January-2015a - NLC should separate writing of NLCgeneratedClasses.cpp and NLCgeneratedCode.cpp [NOT DONE; and NLClibraryBase.cpp]
OpenNLC 13-January-2015a - dont create a class for concept entities isConcept eg maxClass
OpenNLC 15-January-2015a - ~clean
OpenNLC 15-January-2015a - update NLCcodeBlocks.cpp to not use NLCitem as arguments to code blocks functions, but GIAentityNode instead
OpenNLC 15-January-2015a - update NLCprintCodeBlocks.cpp to use generalised generatePropertyListName(item) and generateLocalListName(item) functions 
OpenNLC 15-January-2015a - fix indentation of generated generateObjectByName() function, and fix dynamic cast text [fix 1n3a]
OpenNLC 15-January-2015a - move writeStringToFile() from CSgenerateObjectOrientedCode.cpp to SHAREDvars.cpp
OpenNLC 15-January-2015a - prepare for NLC_USE_MATH_OBJECTS - each entity has a (double) "value" which can be set by NLC mathText (not yet coded)
OpenNLC 15-January-2015a - NLC_USE_SUPPORT_REFERENCING_OBJECTS_IN_PLURAL_LIST_BY_NUMBER
OpenNLC 16-January-2015a - update createCodeBlocksDeclareNewLocalListVariableIfNecessary() to always set entity->NLClocalListVariableHasBeenDeclared = true [fix ~NLC1k1a/NLC1j5c revision]
OpenNLC 17-January-2015a - update all header copyright to 2015
OpenNLC 17-January-2015a - rename NLCtranslatorCodeBlocksLogicalConditions.cpp/.h to NLCtranslatorCodeBlocksLogicalConditionsAdvanced.cpp/.h, and split NLCtranslatorCodeBlocksLogicalConditions.cpp/.h from NLCtranslatorCodeBlocks.cpp/.h
OpenNLC 17-January-2015a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC
OpenNLC 17-January-2015a - update checkIfPhraseContainsSubstanceConceptWithDefinitionLink() to check sentence index of definition connection
OpenNLC 17-January-2015a - only define class heirachy definitions for definite children
OpenNLC 17-January-2015a - NLC_SUPPORT_REDEFINITIONS: generateCodeBlocksPart5redefinitions - detect redefinitions from parent to more specific child/derivative object; dynamic cast to derivative object
OpenNLC 17-January-2015a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_DO_NOT_PARSE_DUPLICATE_CLASSES - do not repeat class list searches, eg;
OpenNLC 17-January-2015a - NLC_SUPPORT_REDEFINITIONS: update generateCodeBlocksPart5redefinitions implementation(); 6. add alsation to alsation local list (update 1n5d implementation)
OpenNLC 18-January-2015a - update generateCodeBlocksFromMathText/generateCodeBlocksPart5redefinitions use of generateContextBlocks(): only check the explicit variable for definition (update 1n5d implementation)
OpenNLC 20-January-2015a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC/NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC: ensure same reference set is false
OpenNLC 20-January-2015a - upgrade searchForEquivalentSubnetToIfStatement to search for sameReferenceSet
OpenNLC 20-January-2015a - NLC_SUPPORT_REDEFINITIONS: update generateCodeBlocksPart5redefinitions implementation(); add to 4. createCodeConvertParentToChildClass: change name of dog object to alsation (update 1n5d implementation)
OpenNLC 21-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_DEFINITIONS: update NLC to parse context blocks for definition
OpenNLC 25-January-2015a - update NLC_RECORD_ACTION_HISTORY_GENERALISABLE_DO_NOT_EXECUTE_PAST_TENSE_ACTIONS isNonImmediateAction(); do not execute passive tense actions
OpenNLC 25-January-2015a - update splitMathDetectedLineIntoNLPparsablePhrases() to parse "each player" as a parsable phrase (ie 2 word phrases ending in new line); change NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_MIN_NUMBER_WORDS to (NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_MIN_NUMBER_WORDS-1)
OpenNLC 25-January-2015a - update generateCodeBlocksFromMathTextNLPparsablePhraseLogicalConditionFor() to write code even if !getParentAndGenerateContextBlocks() - ie execute for for a single entity (eg "for each player")
OpenNLC 25-January-2015a - update() checkIfPhraseContainsSubstanceWithDefinitionLink to check both if(isDefiniteEntity(entity) || foundDefiniteParentOfEntity)
OpenNLC 25-January-2015a - NLC_USE_SUPPORT_REFERENCING_OBJECTS_IN_PLURAL_LIST_BY_NUMBER_FOR_PROPERTIES: update createCodeBlockForGivenProperty() to check plural lists that do not occur for parent entity
OpenNLC 25-January-2015a - update generateCodeBlocksPart5redefinitions() to use getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks() instead of generateContextBlocks()
OpenNLC 25-January-2015a - NLC_USE_SUPPORT_REFERENCING_OBJECTS_IN_PLURAL_LIST_BY_NUMBER: update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks():generateContextForChildEntity() to use both createCodeBlockForPropertyList and createCodeBlockInPropertyList
OpenNLC 25-January-2015a - distinguish between _num creation for both "3 balls" and "ball 3" (check plural)
OpenNLC 25-January-2015a - update NLC_USE_SUPPORT_REFERENCING_OBJECTS_IN_PLURAL_LIST_BY_NUMBER to use checkNumericalReferenceToEntity(); if((entity->hasQuantity) && (entity->grammaticalNumber != GRAMMATICAL_NUMBER_PLURAL)) 
OpenNLC 25-January-2015a - update NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY to use checkNumerosity(); if((entity->hasQuantity) && (entity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL))
OpenNLC 25-January-2015a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks() to check the parent is not a substance concept	[CHECKTHIS change can be accepted across board]
OpenNLC 26-January-2015a - update printClassDefinitions() to add correct objects to parentClassList
OpenNLC 26-January-2015a - NLC_CLASS_DEFINITIONS_ONLY_DEFINE_INHERITANCE_FOR_INDEFINITE_CHILDREN: update generateClassHeirarchy() to not create definitions for indefinite objects with definite parents
OpenNLC 26-January-2015a - update preprocessorMathNLPparsableCharacters to support character '
OpenNLC 26-January-2015a - update checkAlphaNumericEntityNames() to ignore disabled entities
OpenNLC 26-January-2015a - reenable NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS (appears to have been inadvertently disabled in 1n3a after clean)
OpenNLC 27-January-2015a - normalise pointer syntax
OpenNLC 27-January-2015a - change all class names to prepend their project name, eg change all Sentence/Relation/Feature to GIAsentence/GIArelation/GIAfeature etc
OpenNLC 27-January-2015a - Reference entity nodes by sentence - create new map entityNodesActiveListSentences  
OpenNLC 27-January-2015a - move all libraries to SHAREDglobalDefs.h
OpenNLC 27-January-2015a - prepare NLC for new GIA connection rcmodIndicatesSameReferenceSet code
OpenNLC 27-January-2015a - upgrade generateCodeBlocksFromMathText() to support map<int, vector<GIAentityNode*>*>* entityNodesActiveListSentences (not just entityNodesActiveListComplete)
OpenNLC 28-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_OF_TARGET_AND_MULTIPLE_DEFINITE_ENTITIES
OpenNLC 28-January-2015a - rename onlyGenerateContextBlocksIfConnectionsParsedForNLC to onlyGenerateContextBlocksIfConnectionsParsedForNLCorSameReferenceSet	
OpenNLC 28-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_EFFICIENT
OpenNLC 28-January-2015a - change all "=* " to "= *"
OpenNLC 28-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_EFFICIENT: update generateContextBlocksForParentEntity() to always set result=true; in case parent entity has no independent children (eg "red" in "The chicken's car" vs "The red chicken's car")
OpenNLC 28-January-2015a - !NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED: NLCtranslator: disableAllForLoopPredeterminers()
OpenNLC 28-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_OF_TARGET_AND_MULTIPLE_DEFINITE_ENTITIES: update createCodeBlockForConnectionType(); remove "if((!sameReferenceSetReferencingConnectionCheck(targetConnection, generateContextBlocksVariables) || targetConnection->rcmodIndicatesSameReferenceSet))" - accept connections without auxillary/rcmod to children with unique parents
OpenNLC 28-January-2015a - remove GIA_TRANSLATOR_RECORD_RCMOD_CONNECTION_INFO (not used)
OpenNLC 28-January-2015a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_FOR_LOOP_IGNORE_SAME_REFERENCE_SET_COMPENSATE_FOR_NLP_FAILURE_TO_CREATE_RCMOD
OpenNLC 29-January-2015a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS: fix NLC preprocessor dual (consecutive) fullstop addition bug 
OpenNLC 29-January-2015a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS: update splitMathDetectedLineIntoNLPparsablePhrases() [fix 1n2e code]
OpenNLC 29-January-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_DEFINITIONS: generateObjectInitialisationsBasedOnSubstanceConceptsForAllDefiniteEntities(): generateObjectInitialisationsBasedOnSubstanceConcepts(): remove "definitionConnection->NLCparsedForCodeBlocks = true;"
OpenNLC 29-January-2015a - update generateObjectInitialisationsBasedOnSubstanceConceptsForAllDefiniteEntities() and generateParentInitialisationCodeBlockWithChecks() to use checkSpecialCaseEntity()
OpenNLC 29-January-2015a - perform CS lint
OpenNLC 29-January-2015a - fix bug in createCodeBlockForGivenAction/createCodeBlockForGivenActionIncoming; only set result = true if found subject/object
OpenNLC 30-January-2015a - update generateMathTextNLPparsablePhraseReference(); remove ' character from variable names eg theplayer'scolourisblack1
OpenNLC 30-January-2015a - upgrade identifyAliasesInCurrentSentence() to set onlyGenerateContextBlocksIfConnectionsParsedForNLCorSameReferenceSet to true.
OpenNLC 30-January-2015a - upgrade identifyAliasesInCurrentSentence() to ensure !sameReferenceSet (this was not done due to a bug but appears required regardless)
OpenNLC 30-January-2015a - move identifyAliasesInCurrentSentence code into generateCodeBlocksPart5redefinitions
OpenNLC 30-January-2015a - upgrade generateContextBlocks code to support alias definitions
OpenNLC 30-January-2015a - fix bug in createCodeBlocksFindAliasNewFunction/createCodeBlocksFindAliasExecuteFunction; set NLC_CODEBLOCK_TYPE_FIND_ALIAS_NEW_FUNCTION/NLC_CODEBLOCK_TYPE_FIND_ALIAS_EXECUTE_FUNCTION
OpenNLC 31-January-2015a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS: fix multiline sentences
OpenNLC 31-January-2015a - preprocessor fails if there is a space after fullstop, eg;
OpenNLC 31-January-2015a - update generateCodeBlocksFromMathText(): NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC: to reset currentCodeBlockInTree to currentCodeBlockAtStartOfparsablePhrase 	
OpenNLC 31-January-2015a - update generateCodeBlocksFromMathTextNLPparsablePhrase to set NLCcodeBlockBeforeGenerateContext before createCodeBlockForPropertyTypeClass
OpenNLC 31-January-2015a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_FILENAMES_WITH_FULLSTOPS - fix arbitrary character added to reference names (fix 1n16a/1n2e code)
OpenNLC 31-January-2015a - fix createCodeBlockForConnectionType(): set NLCcontextGeneratedTemp
OpenNLC 01-February-2015a - GIA_ENABLE_SUBSTANCE_CONCEPT_ADVANCED_REFERENCING: update generateObjectInitialisationsBasedOnSubstanceConcepts(): do not add substance concept properties for a substance if the substanceConcept connection->isReference
OpenNLC 01-February-2015a - disable NLC_CLASS_DEFINITIONS_ONLY_DEFINE_INHERITANCE_FOR_INDEFINITE_CHILDREN
OpenNLC 01-February-2015a - NLC_SUPPORT_REDEFINITIONS_FOR_IMMEDIATELY_DECLARED_INDEFINITE_ENTITIES [in practice this will not be implemented because GIA interprets indefinite-indefinite definitions as substance concepts] - redefinitions are generally not implied for indefinite children (eg "an animal" in "an animal is a chicken") because they are ambiguous; this example either means a) animals are chickens (ie is a substanceConcept-substanceConcept definition; not a redefinition - and happens to be an incorrect statement based on aprior knowledge about the animal kingdom because we know chickens are animals not vice versa), or b) a newly declared animal is cast to a chicken (a specific version of animal, assuming "chickens are animals" has been declared)
OpenNLC 01-February-2015a - (change NLC_CLASS_DEFINITIONS_ONLY_DEFINE_INHERITANCE_FOR_INDEFINITE_CHILDREN to) NLC_CLASS_DEFINITIONS_DO_NOT_DEFINE_INHERITANCE_FOR_REDEFINITIONS: generate class hierarchy inheritance between substance and substance concept; if substance class is not a parent of its definition class (fix change 1n10b)
OpenNLC 01-February-2015a - perform CS lint
OpenNLC 01-February-2015a - disable NLC_USE_LIBRARY_FROM_CONDITIONS
OpenNLC 01-February-2015a - test compile without NLC_USE_LIBRARY
OpenNLC 01-February-2015a - add NLC_CODEBLOCK_TYPE_CHECK_PARENT_CLASS_NAME_NEW_FUNCTION: createCodeBlockCheckParentClassNameNewFunction
OpenNLC 01-February-2015a - update createCodeBlockForGivenAction/createCodeBlockForGivenActionIncoming to set true if find action, but only set generateContextForObject if find subject/object (fix patch 1n16c)
OpenNLC 02-February-2015a - generateCodeBlocksFromMathText() fix bug (add parsablePhraseIter++)
OpenNLC 02-February-2015a - place NLC_RECORD_ACTION_HISTORY_COMPENSATE_FOR_EFFECTIVE_DEFINITE_ENTITIES_IMPLEMENTATION1/NLC_RECORD_ACTION_HISTORY_COMPENSATE_FOR_EFFECTIVE_DEFINITE_ENTITIES_IMPLEMENTATION2 inside NLC_RECORD_ACTION_HISTORY_COMPENSATE_FOR_EFFECTIVE_DEFINITE_ENTITIES_IMPLEMENTATION
OpenNLC 02-February-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_OF_TARGET_AND_MULTIPLE_DEFINITE_ENTITIES: disable NLC_RECORD_ACTION_HISTORY_COMPENSATE_FOR_EFFECTIVE_DEFINITE_ENTITIES_IMPLEMENTATION
OpenNLC 02-February-2015a - update markActionSubjectObjectIndefiniteEntityActionsAsNotSameReferenceSet() to set entity as NLClocalListVariableHasBeenInitialised rather than grammaticalDefiniteTemp
OpenNLC 02-February-2015a - update generateCodeBlocksFromMathTextNLPparsablePhrase() to set entity as NLClocalListVariableHasBeenInitialised rather than grammaticalDefiniteTemp
OpenNLC 03-February-2015a - rename all function arguments from entityNodesActiveListComplete to entityNodesActiveListSentence where appropriate
OpenNLC 03-February-2015a - update generateCodeBlocksPart5redefinitions() to use entityNodesActiveListComplete instead of entityNodesActiveListSentence when adding to GIAentityNode aliasLists
OpenNLC 03-February-2015a - make GIA_CREATE_NEW_SUBSTANCE_CONCEPT_FOR_EVERY_REFERENCE_TO_A_SUBSTANCE_CONCEPT a prerequisite for NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC
OpenNLC 03-February-2015a - NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_PARENT_OF_TARGET_AND_MULTIPLE_DEFINITE_ENTITIES: update generateContextBlocks; do not perform candidate checks for definite quality children 
OpenNLC 03-February-2015a - re-enable NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC (partially revert 1n24a)
OpenNLC 03-February-2015a - update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks(): add case; execute generateContextBlocksForParentEntity() if parentEntity != currentEntity
OpenNLC 04-February-2015a - update generateObjectInitialisationsBasedOnPropertiesAndConditions():generateParentContextPassThrough to check both createCodeBlockForPropertyList and createCodeBlockInPropertyList
OpenNLC 04-February-2015a - move definitions to start of generateCodeBlocksPart5redefinitions (before actions) 
OpenNLC 04-February-2015a - revert 1n27a change (move definitions to start of generateCodeBlocksPart5redefinitions)
OpenNLC 04-February-2015a - disable alias entities
OpenNLC 05-February-2015a - fix bug in findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext(): ensure referenceSetID is incremented in right context
OpenNLC 05-February-2015a - GIAquery.cpp; if findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext() test connections for sameReferenceSet, not just equivalent referenceSetID (GIAreferenceTraceParameters:ensureSameReferenceSetQueryConnections); 
OpenNLC 05-February-2015a - minor typo correction
OpenNLC 06-February-2015a - NLC_GENERATE_TYPE_LISTS: update generateCodeBlocksFromMathTextNLPparsablePhrase(): fix bug; parsing instanceList not propertyList after parsing typeList (fix update ~1n22)		
OpenNLC 06-February-2015a - fix bug in getSameReferenceSetSubstanceNonQualityChild; ensure to check sameReferenceSet (fix update ~1n22)		
OpenGIA 06-February-2015a - win compilation updates: createCodeConvertParentToChildClass/createCodeBlockCheckParentClassNameExecuteFunction1[x2]/createCodeBlockCheckParentClassNameExecuteFunction2 must return a value

Release-15February2015:

OpenNLC 07-February-2015a - convert NLCtranslatorCodeBlocks.cpp parts3->5 to generateCodeBlocksPart3subjectObjectConnections(): generalise algorithm
OpenNLC 07-February-2015a - tag alias entities as NLCisAlias and prevent them from being added to class definitions heircachy
OpenNLC 07-February-2015a - [CHECKTHIS] update generateCodeBlocksPart3subjectObjectConnections() to deal with just one foundSubjectObjectConnection at a time [NB this shouldnt be required because a sentence should have only !sameReferenceSet connection]
OpenNLC 07-February-2015a - [CHECKTHIS] update createCodeBlockForConnectionType() to only set targetConnection->NLCparsedForCodeBlocks if result=true [NB this shouldnt be required]
OpenNLC 07-February-2015a - generateCodeBlocksPart3subjectObjectConnections()/generateObjectInitialisationsForConnectionType(): do not check NLCparsedForCodeBlocks during checkSentenceIndexParsingCodeBlocks(), as definite entities in sentence will already have been initialised and parsedForNLCcodeBlocks will have been set true if properties/conditions have been added based on substance concepts, eg via generateObjectInitialisationsBasedOnSubstanceConceptsForAllDefiniteEntities():generateObjectInitialisationsBasedOnSubstanceConcepts():generateObjectInitialisationsBasedOnSubstanceConceptsRecurse()	
OpenNLC 07-February-2015a - upgrade generateCodeBlocksPart3subjectObjectConnection() to set NLCcontextGeneratedTemp=true for action entities, and upgrade generateObjectInitialisationsForConnectionType() to check !NLCcontextGeneratedTemp 
OpenNLC 12-February-2015a - NLC_NORMALISE_TWOWAY_PREPOSITIONS_DUAL_CONDITION_LINKS_ENABLED: generateCodeBlocksPart3subjectObjectConnections()/generateObjectInitialisationsForConnectionType(): check !inverseConditionTwoWay		
OpenNLC 12-February-2015a - update generateCodeBlocksPart3subjectObjectConnection()/generateCodeBlocksAddConnection() to use getActionSubjectCheckSameReferenceSetAndSentence/getActionObjectCheckSameReferenceSetAndSentence/getConditionSubjectCheckSameReferenceSetAndSentence/getConditionObjectCheckSameReferenceSetAndSentence (which only find a connection corresponding to the necessary sentenceIndex)
OpenNLC 13-February-2015a - update generateCodeBlocksPart3subjectObjectConnections(): check all !sameReferenceSet connections to that !NLCparsedForCodeBlocks; required if GIA adds identical entities to entityNodesActiveListSentence for a given sentenceIndex; eg during GIA_USE_ADVANCED_REFERENCING aliasing
OpenNLC 13-February-2015a - generateCodeBlocksPart3subjectObjectConnections() case 2: if detect plural subject and indefinite plural object, then add a new object for each subject 
OpenNLC 13-February-2015a - generateCodeBlocksPart3subjectObjectConnections() case 3: if detect plural subject and quality object, then add a new object for each subject 
OpenNLC 14-February-2015a - generateCodeBlocksPart3subjectObjectConnections() case 1: if detect "each"/"every"/"all" predeterminer and object is singular [REDUNDANT: or quantity entity] then add a new object for each subject
OpenNLC 15-February-2015a - CS compatibility updates
...
OpenNLC 19-March-2015a - NLC_PREPROCESSOR_REDUCE_QUOTES_TO_SINGLE_WORDS reduceQuotesToSingleWords(): move inverta commas compression (_) from GIAlrp to NLCpreprocessor
OpenNLC 19-March-2015a - NLC_PREPROCESSOR_REDUCE_QUOTES_TO_SINGLE_WORDS: update reduceQuotesToSingleWords; remove support for '' (as this is not compatible with apostrophes within quotation marks)
OpenNLC 10-May-2015a - !NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_REMOVE_REDUNDANT_CODE: fix value of NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_REMOVE_REDUNDANT_CODE
OpenNLC 10-May-2015a - CS compatibility updates: normalise NLC_NONOO/!NLC_NONOO function names in NLCprintDefs.cpp/.h
OpenNLC 10-May-2015a - replace all (): with {}:
OpenNLC 10-May-2015a - replace all ()" with {}"

Release-07July2015:

OpenNLC 07-June-2015a - NLC_USE_LIBRARY: moveFunction fix; current workaround is not possible as to condition object context will be parsed rather than to condition object being added to from condition object. So therefore must upgrade Stanford Parser or GIA to attach the to condition object correctly to the object entity
OpenNLC 07-June-2015a - [OLD] NLC_USE_LIBRARY: moveFunction fix - change "if(removeItemFromVectorList(fromObjectMoveObjectPropertyList, moveObject))" to "if(removeItemFromVectorListByName(fromObjectMoveObjectPropertyList, moveObject->name))"
OpenNLC 07-June-2015a - NLC_USE_LIBRARY: moveFunction fix	
OpenNLC 12-June-2015a - change propertyListAll/conditionListAll/etc to propertyLists/conditionLists/etc			
OpenNLC 12-June-2015a - NLC_USE_LIBRARY_BASE_EXTENDED: add additional extension functions (eg create new local variable)
OpenNLC 12-June-2015a -	extract NLCprintCodeBlocksFunctions from NLCprintCodeBlocks
OpenNLC 12-June-2015a - NLC_USE_LIBRARY_BASE_EXTENDED: add addaction extension functions
OpenNLC 12-June-2015a - NLC_USE_LIBRARY_BASE_EXTENDED: Add addProperty/addCondition extension functions
OpenNLC 12-June-2015a - prevent number entities (fraction and integers) from having class hierachy structure generated 
OpenNLC 12-June-2015a - inverse NLC library include structure
OpenNLC 12-June-2015a - rename NLClibraryBaseClasses.cpp/.h to NLClibraryGenericClass.cpp/.h
OpenNLC 12-June-2015a - NLC_USE_LIBRARY_BASE_EXTENDED: extract NLClibraryBaseExtended.cpp/.h from NLClibraryBase.cpp/.h
OpenNLC 12-June-2015a - update moveFunction to support additional cases;
OpenNLC 12-June-2015a - generate a create a generic entity clone function for each entity
OpenNLC 12-June-2015a - start NLC_USE_MATH_OBJECTS - handle numerical values (eg the/its value is 3.57) 
OpenNLC 12-June-2015a - NLC_USE_MATH_OBJECTS: NLC library; implement set function
OpenNLC 12-June-2015a - NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_SUPPORT_FRACTIONAL_VALUES: update isStringNLPparsableWord() to test for fractional numbers if !preprocessorMath, via isStringNumberOrFractional()
OpenNLC 12-June-2015a - NLC_USE_MATH_OBJECTS: update generateCodeBlocksAddConnection(); detect new numerical definitions
OpenNLC 12-June-2015a - add code to set enumType when addproperty/addcondition - parse NLCrules.xml file containing enums; eg color - red, green, blue... etc | temperature - hot, cold etc
OpenNLC 12-June-2015a - implement NLCrules.xml
OpenNLC 12-June-2015a - NLC library - Split XML rules execution (bypass XMLrulesClass.h straight to XMLparserClass.h)
OpenNLC 12-June-2015a - NLC library - normalise pointer syntax
OpenNLC 12-June-2015a - rename property/condition/actionListAll to property/condition/actionLists
OpenNLC 12-June-2015a - implement propertyIncomingList and conditionIncomingList
OpenNLC 12-June-2015a - NLC_USE_ENUM_LISTS: clear existing colours (or more generally; all effective enums) before setting them. eg The light is red. The light is blue. -> the light is not red. The light is blue
OpenNLC 22-June-2015a - update generateCodeBlocksFromMathTextNLPparsablePhrase() to support !hasLogicalConditionOperator cases where nlp parsable phrase is used to identify an entity math value
OpenNLC 22-June-2015a - update transformTheActionOfPossessionEgHavingIntoAproperty(): changed to use existing sameReferenceSet value when reconnecting conditions
OpenNLC 22-June-2015a - update transformTheActionOfPossessionEgHavingIntoAproperty(): support GIA_RECORD_RCMOD_SET_INFORMATION
OpenNLC 22-June-2015a - GIA_RECORD_RCMOD_SET_INFORMATION: NLC_APPLY_GET_SAME_REFERENCE_SET_NON_QUALITY_CHILD_FIX_TO_VERIFY_RCMOD_DOES_NOT_INDICATE_SAME_REFERENCE_SET: update getSameReferenceSetSubstanceNonQualityChild() to check !(propertyConnection->rcmodIndicatesSameReferenceSet)
OpenNLC 22-June-2015a - extract parseParsablePhraseParent() from generateCodeBlocksFromMathTextNLPparsablePhrase()
OpenNLC 22-June-2015a -  NLC_PARSE_CONDITION_PARENTS: condition parent parsing is now required by default (irrespective of NLC_NORMALISE_INVERSE_PREPOSITIONS) for at least generateCodeBlocksFromMathTextNLPparsablePhrase() part 2A and part 2B, such that the primary entity in the nlp parsable phrase can be identified. Rename all NLC_NORMALISE_INVERSE_PREPOSITIONS references to NLC_PARSE_CONDITION_PARENTS - getParent() and getSameReferenceSetUniqueParent() now parseConditionParents even if !NLC_NORMALISE_INVERSE_PREPOSITIONS
OpenNLC 22-June-2015a - change all "() error" to "{} error" 
OpenNLC 22-June-2015a - NLC_USE_MATH_OBJECTS: NLC_MATH_OBJECTS_TEST_NULL_POINTER_MAINTAIN_CONTEXT - this prevents execution of mathText out of context
OpenNLC 22-June-2015a - move execution of parseNLCrulesXMLfile after setCurrentDirectory(workingFolderCharStar)
OpenNLC 22-June-2015a - update NLC generateCodeAddPropertyExecuteFunction()/etc: with generateCodeListPointer()
OpenNLC 25-June-2015a - update NLCmain.cpp; NLC_USE_LIBRARY: printPredefinedNLCfunctions: move all !USE_LIBRARY code into separate function
OpenNLC 25-June-2015a - update NLCmain.cpp; NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS: generateClassDefinitionFunctionDeclarationsAndReconcileArguments(): move all function declaration reconcilation code into separate function
OpenNLC 25-June-2015a - rename NLC_SUPPORT_INPUT_FILE_LISTS to NLC_SUPPORT_INPUT_FUNCTION_LISTS, and extract NLC_SUPPORT_INPUT_FUNCTION_LISTS_PREPROCESSOR and NLC_SUPPORT_INPUT_FUNCTION_LISTS_EXPLICIT_FROM_DEDICATED_FILE 
OpenNLC 25-June-2015a - ensure NLC supports standard library (generic functions defined within); it should parse a file containing a list of NLC headers
OpenNLC 25-June-2015a - add functionDependency to functionDependencyList for every NLClibraryStandard and NLClibraryUser function (not NLClibraryBase functions; whose references are automatically generated by NLC).
OpenNLC 25-June-2015a - create and parse NLClibraryStandardAndUserFunctionList.txt
OpenNLC 25-June-2015a - change NLCfunction->function to NLCfunction->NLCfunctionName (as it represents the especially formatted full function name, not the function name)
OpenNLC 25-June-2015a - remove redundant arguments from translateNetwork and generateClassHeirarchy
OpenNLC 25-June-2015a - update createFunctionDependencyForNewFunctionDefinition/parseFunctionNameFromNLCfunctionName to extract ! delimited tags also to identify auxilliary function arguments
OpenNLC 25-June-2015a - start identify auxilliary function arguments
OpenNLC 25-June-2015a - rename functionIndex to functionDefinitionIndex for clarity
OpenNLC 25-June-2015a - rename NLCclassDefinitionFunctionDependency.isReference to NLCclassDefinitionFunctionDependency.isReferenceElseFunctionDefinition
OpenNLC 25-June-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE: update createFunctionDependencyForNewFunctionDefinition{}:createNewClassDefinitionFunctionDeclaration{} to ensure isReferenceElseFunctionDefinition if foundFunctionDependencyInList 
OpenNLC 25-June-2015a - set FUNCTION_INDEX_LIBRARY_FUNCTION (library function functionDefinition functionDependency->functionDefinitionListIndex) to 999999999 instead of INT_DEFAULT_VALUE
OpenNLC 27-June-2015a - merge NLCclassDefinitionFunctionDependency class within NLCclassDefinition class 
OpenNLC 27-June-2015a - make NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_IGNORE_DUPLICATE_FUNCTION_DELCARATIONS, NLC_CLASS_DEFINITIONS_CREATE_FUNCTION_DECLARATIONS_FOR_NEW_FUNCTION_DEFINITIONS, NLC_CLASS_DEFINITIONS_SUPPORT_FUNCTIONS_WITHOUT_SUBJECT mandatory (fold code permanently)
OpenNLC 27-June-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_DO_NOT_ADD_FUNCTION_DEPENDENCY_FOR_FUNCTION_REFERENCES: update generateClassHeirarchyFunctions() to not create functionReference functionDependencies
OpenNLC 27-June-2015a - simplify reconcileFunctionDefinitionClassDefinitionArgumentsBasedOnImplicitlyDeclaredVariablesInCurrentFunctionDefinition{}
OpenNLC 27-June-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_DO_NOT_ADD_FUNCTION_DEPENDENCY_FOR_FUNCTION_REFERENCES: update findFunctionDefinitionClassDefinitionExactOrNonExactMatch:findFunctionDefinitionClassDefinition to ignore rearrangeClassList
OpenNLC 27-June-2015a - finish identify auxilliary function arguments - fix createFunctionDefinitionClassDefinition(); pass NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_INSTANCE_OR_CLASS_LIST parameters to library function functionDefinitionClassDefinition
OpenNLC 27-June-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_DO_NOT_ADD_FUNCTION_DEPENDENCY_FOR_FUNCTION_REFERENCES: update findFunctionDefinitionClassDefinition(); check if(functionDefinitionClassDefinition->functionDependency != NULL) before testing if(functionDefinitionClassDefinition->functionDependency->isReferenceElseFunctionDefinition)
OpenNLC 27-June-2015a - NLC_USE_LIBRARY: printClassDefinitions() check !isLibraryFunctionDefinition before checking arefunctionArgumentsPrinted()
OpenNLC 27-June-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_DO_NOT_ADD_FUNCTION_DEPENDENCY_FOR_FUNCTION_REFERENCES: update findFunctionDefinitionClassDefinition(); check if(functionDefinitionClassDefinition->functionDependency != NULL)
OpenNLC 27-June-2015a - fix generateFunctionDeclarationArgumentsWithActionConceptInheritanceString() to not print function arguments twice (based on merging of NLC_ITEM_TYPE_FUNCTION_DECLARATION_ARGUMENT_INSTANCE_OR_CLASS_LIST with NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_INSTANCE_OR_CLASS_LIST)
OpenNLC 02-July-2015a - fix bug in generateClassHeirarchyFunctions(); NLCitem* classDeclarationFunctionOwnerItem = new NLCitem(actionSubject, NLC_ITEM_TYPE_FUNCTION_DEFINITION_ARGUMENT_FUNCTION_OWNER);
OpenNLC 02-July-2015a - NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_RECURSIVE_DO_NOT_ADD_FUNCTION_DEPENDENCY_FOR_FUNCTION_REFERENCES: update generateClassHeirarchyFunctions to check pre-existing functions in functionList using findClassDefinitionFunction instead of findClassDefinition
OpenNLC 04-July-2015a - CS compatibility updates
OpenNLC 07-July-2014a -	Windows compatibility updates
...
OpenNLC 09-July-2015a - rename superphrase to subphrase (subphrases are found within superphrase)
OpenNLC 09-July-2015a - [TESTHIS] rename all working/exe/tempFolderCharStar to working/exe/tempFolder
OpenNLC 09-July-2015a - [TESTHIS] change all file manipulation functions to support string type instead of charStar
OpenNLC 10-July-2015a - update writeStringToFile fileName argument to non pointer
OpenNLC 10-July-2015a - rename auxillary to auxiliary
OpenNLC 10-July-2015a - fix NLCmain.cpp to test GIA_RECORD_POSSESSION_AUXILIARY_HAS_INFORMATION instead of GIA_RECORD_POSSESSION_AUXILIARY_HAS_INFORMATION_GENERAL_IMPLEMENTATION
OpenNLC 10-July-2015a - GIA_RECORD_POSSESSION_AUXILIARY_HAS_INFORMATION: update transformTheActionOfPossessionEgHavingIntoAproperty() to set GIAentityConnection.possessionAuxiliaryHave
OpenNLC 10-July-2015a - replace NLC_APPLY_GET_SAME_REFERENCE_SET_NON_QUALITY_CHILD_FIX_TO_VERIFY_RCMOD_DOES_NOT_INDICATE_SAME_REFERENCE_SET implementation with check existence of explicit "have" property connection (possessionAuxiliaryHave)
OpenNLC 19-July-2015a - NLC_USE_LIBRARY_COPY_FUNCTION... copy function
OpenNLC 19-July-2015a - GIA_TRANSLATOR_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_INTO_A_PROPERTY_BASIC_HYBRID: update transformTheActionOfPossessionEgHavingIntoAproperty() to remove artificial have entity generated by poss dependency relation (linkPropertiesPossessiveRelationships)
OpenNLC 27-July-2015a - no changes
OpenNLC 27-July-2015a - update string generateCodeEntityMathValueText(string entityName, int progLang) to execute generateCodePointerValueText
OpenNLC 27-July-2015a - NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_UNDECLARED_VARIABLES: throw math text undeclared variable error in all cases; revert splitMathDetectedLineIntoNLPparsablePhrases to not ignoreVariable if(currentWord == "") [revert minor change introduced 1h4b] 
OpenNLC 27-July-2015a - update warning message; from "undeclared mathText variable detected: declaring..." to "implicitly declared mathText variable detected: declaring..." - inserting mathText variable declaration type (eg double)
OpenNLC 27-July-2015a - rename NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_UNDECLARED_VARIABLES to NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_IMPLICITLY_DECLARED_VARIABLES
OpenNLC 27-July-2015a - add specific NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_IMPLICITLY_DECLARED_VARIABLES:NLC_PREPROCESSOR_MATH_DETECT_USE_OF_UNDECLARED_VARIABLES preprocessor def and arrange relevant NLC_PREPROCESSOR_MATH_DETECT_AND_DECLARE_IMPLICITLY_DECLARED_VARIABLES code accordingly
OpenNLC 27-July-2015a - NLC_PREPROCESSOR_MATH_DETECT_USE_OF_UNDECLARED_VARIABLES: NLC_PREPROCESSOR_MATH_DETECT_MATHTEXT_VARIABLES_AT_END_OF_LINE
OpenNLC 27-July-2015a - NLC_PREPROCESSOR_MATH_DETECT_MATHTEXT_FUNCTIONS_SUPPORTED_BY_TARGET_LANGUAGE
...
OpenNLC 03-August-2015a - NLClibrary updates
OpenNLC 03-August-2015a - change conditionLists to use a pointer as a key
OpenNLC 03-August-2015a - make castVector return a reference instead of a pointer and update all references to castVector accordingly (partially revert 1n2d)
OpenNLC 03-August-2015a - ISO/IEC 14882:2011 (C++11) generated code appearance/spacing updates
OpenNLC 03-August-2015a - NLC_ENUM_LIST_TYPE_DEFAULT_NON_ENUM "nonEnum"
OpenNLC 03-August-2015a - replace all > :: with >::
OpenNLC 03-August-2015a - make generateCodeConditionListDefinitionTypeTextPointer use generateCodeConditionListDefinitionTypeTextCompact instead of generateCodeConditionListDefinitionTypeText
OpenNLC 03-August-2015a - remove appended CHAR_SPACE from generateCodeEntityListDefinitionTypeTextPointer
OpenNLC 03-August-2015a - change all " ::iterator" to "::iterator" - change generateCodeEntityListDefinitionTypeText to generateCodeEntityListDefinitionTypeTextCompact prior to progLangForIterPart2a
OpenNLC 06-August-2015a - update NLC_CODEBLOCK_TYPE_SET_DECIMAL_POINTER_TO_ENTITY_MATH_VALUE to set the pointer to the math value address (extend 1p12b fix)
OpenNLC 06-August-2015a - ensure that generateObjectByName/copyObjectByName execute reinterpret_cast<NLCgenericEntityClass*> not reinterpret_cast<NLCgenericEntityClassClass*>

Release-23August2015:

OpenNLC 11-August-2015a - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES: upgrade NLC to dynamically generate individual class heirachy source files 
OpenNLC 11-August-2015a - write generated class definitions code to NLClibraryDynamicX.cpp/NLClibraryDynamic.hpp
OpenNLC 11-August-2015a - write copyObjectByName/generateObjectByName class definitions code to NLClibraryDynamic.cpp/NLClibraryDynamic.hpp
OpenNLC 11-August-2015a - rename all NLClibrary headers with object oriented C++ extension (.hpp)
OpenNLC 11-August-2015a - change copyObjectByName to use static_cast and copy object source rather than pointer
OpenNLC 11-August-2015a - replace all generateDynamicCastOfEntity/generateDynamicCastOfNewEntity with generateStaticCastOfEntity/generateStaticCastOfNewEntity
OpenNLC 11-August-2015a - write list of all dynamic CPP files for final compilation of NLC generated source code/NLClibrary; NLClibraryDynamicList.txt
OpenNLC 11-August-2015a - remove trailing ';' from dynamically generated class constructors
OpenNLC 11-August-2015a - ensure parentClassList.push_back casts to NLCgenericEntityClass, not NLCgenericEntity
OpenNLC 11-August-2015a - update addNewEntityToLocalList/addEntityToLocalList to use pointer instead of reference arguments
OpenNLC 11-August-2015a - move all isLibraryFunctionDefinition code to NLC_USE_LIBRARY_FUNCTION_LISTS_FOR_ARGUMENT_RECONCILIATION
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_FUNCTION_LISTS_FOR_ARGUMENT_RECONCILIATION: NLC_USE_LIBRARY_ASSUME_STANDARD_AND_USER_LIBRARY_FUNCTIONS_ACTION_ARGUMENT_TYPE_IS_NLC_GENERIC_ENTITY_CLASS: update NLC_CODEBLOCK_TYPE_EXECUTE_FUNCTION generateFunctionExecutionArgumentsWithActionConceptInheritanceString() to detect isLibraryFunctionDefinition - if this is not defined, then wrapper functions must be created for every NLClibrary function (x) whose function action argument is of type NLCgenericEntityClass (instead of xClass)
OpenNLC 11-August-2015a - fix printCodeBlockCastVectorExecuteFunction(); remove prepended ( from all castVector references, and remove redundant STRING_SPACE
OpenNLC 11-August-2015a - update printCodeBlockCastVectorExecuteFunction to use codePropertyTypeText from generateCodePluralReferenceText instead of regenerating it
OpenNLC 11-August-2015a - fix typo in generateCodeCastVectorNewFunction; change return type of castVector from E1 to E2
OpenNLC 11-August-2015a - fix typo in castUnorderedMap declaration; change return type
OpenNLC 11-August-2015a - #include template code NLClibraryBase.cpp/NLClibraryBaseExtended.cpp in NLClibraryBase.hpp/NLClibraryBaseExtended.hpp	
OpenNLC 11-August-2015a - change addCondition to use E2E3conditionList->insert(pair<E2*, E3*>(condition, E3Instance)); instead of E2E3conditionList->insert(pair<E2, E3>(condition, E3Instance));	
OpenNLC 11-August-2015a - (fixed 1q12c) update generateCodeAddConditionAndObjectEntityToList and generateCodeAddConditionNewFunction to use generatePointerText(typex->className) while executing generateCodeConditionPairText
OpenNLC 11-August-2015a - change enumPropertyLists/enumConditionLists/enumActionLists/enumActionIncomingLists to use pairs/tuple(triplets) keys
OpenNLC 11-August-2015a - cause seg fault caused by NLCprintCodeBlocks.cpp NLC_USE_LIBRARY_ASSUME_STANDARD_AND_USER_LIBRARY_FUNCTIONS_ACTION_ARGUMENT_TYPE_IS_NLC_GENERIC_ENTITY_CLASS (1q1aTEMP6); check functionDefinitionClassDefinition != NULL
OpenNLC 11-August-2015a - rename all output class definitions files NLCgenerated[FunctionSubjectName].cpp/.hpp
OpenNLC 11-August-2015a - replace all NLC_USE_LIBRARY_GENERATE_DYNAMIC_FUNCTIONS* with NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES*
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES_CLASS_HEIRACHY_NAME_PREPEND: rename all output class definitions files NLCgeneratedHeirachyxClass.cpp/.hpp
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES printClassDefinitions{}: add function action, function object, and additional function arguments to printedClassDefinitionTextCPPforwardDeclarationList
OpenNLC 11-August-2015a - extract fillActionLists from generateClassHeirarchy and generateClassHeirarchyFunctions 
OpenNLC 11-August-2015a - update NLCtranslator createFunctionDefinitionClassDefinition to add actionList as well as functionList (execute fillActionLists)
OpenNLC 11-August-2015a - fix error introduced @1q1aTEMP6; generateCodePluralReferenceText - set codeFunctionArgumentNameWithCast
OpenNLC 11-August-2015a - fix NLC_USE_ENUM_LISTS compilation errors
OpenNLC 11-August-2015a - ensure forward declaration lists do not have duplicate items added
OpenNLC 11-August-2015a - fix typo in NLCgenericEntityClass.hpp/NLClibraryStandardFileIO.hpp/NLClibraryStandardOperations.cpp:getActionListByName - rename actionListAll to actionLists
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES: update printClassDefinitions to execute generateCodeHeaderCheckOpen/generateCodeHeaderCheckClose where necessary	
OpenNLC 11-August-2015a - rename NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES_CLASS_HEIRACHY_NAME_PREPEND to NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES_NAME_PREPEND, and change from "NLCgeneratedHeirachy" to "NLCgenerated" (revert change 1q1b)
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES_ADD_CLASS_FUNCTIONS_TO_CLASS_DEFINITIONS: upgrade NLC to dynamically generate individual source files (add to class source files)
OpenNLC 11-August-2015a - NLC_USE_LIBRARY_FUNCTION_LISTS_FOR_ARGUMENT_RECONCILIATION: do not add isLibraryFunctionDefinition functions to functionsWithNoSubjectArtificialClass class definition header
OpenNLC 18-August-2015a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED: set function name of code without explicit function to NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_NAME/"NLCimplicitlyDeclaredFunction" instead of the name of the input text file
OpenNLC 18-August-2015a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED: update main to execute removeNLCfileNameExtension rather than removeFileNameExtension
OpenNLC 18-August-2015a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_DO_NOT_PRINT_ACTION_ARGUMENT: update printClassDefinitions/generateFunctionDeclarationArgumentsWithActionConceptInheritanceString to not print function action argument if it is named NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_NAME/"NLCimplicitlyDeclaredFunction"
OpenNLC 18-August-2015a - !NLC_SUPPORT_GIA_NLP_OR_XML_INPUT: only accept input file lists that contain nlc (text) files (ie useInputTextPlainTXTFile) - remove support for input file lists that do not contain nlc (text) files (ie useInputTextNLPrelationXMLFile, useInputTextNLPfeatureXMLFile, useInputTextXMLFile). Note NLC requires useInputTextPlainTXTFile (itxt) for preprocessor compatibility
OpenNLC 18-August-2015a - NLC_SUPPORT_INPUT_FUNCTION_LISTS_EXPLICIT_FROM_DEDICATED_FILE_SUPPORT_PREPROCESSOR: update NLC_SUPPORT_INPUT_FUNCTION_LISTS_EXPLICIT_FROM_DEDICATED_FILE to support NLC preprocessor (such that users can spread nlc code across multiple files); requires each nlc file to contain a single function without a function header
OpenNLC 18-August-2015a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN generateContextBlocksCategories: only searchSubstanceConceptsForChildren if definition parent entity name equals child entity name
OpenNLC 18-August-2015a - fix typo in NLClibraryBaseExtended.cpp/.hpp; rename addNewEntityToLocalList #2 to addEntityToLocalList
OpenNLC 18-August-2015a - change NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_NAME/"NLCgeneratedNLCimplicitlyDeclaredClass" to "NLCgeneratedNLCimplicitlyDeclaredFunctionArtificialClass" 
OpenNLC 18-August-2015a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_DO_NOT_PRINT_ACTION_ARGUMENT: update printClassHeirarchyValidDefinitionClassChecks to check !NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_NAME/"NLCgeneratedNLCimplicitlyDeclaredFunctionArtificialClass"
OpenNLC 18-August-2015a - move class definition !NLC_CLASS_DEFINITIONS_GENERIC_LIBRARY_ENTITY_CLASS_TITLE checks to printClassHeirarchyValidDefinitionClassChecks
OpenNLC 18-August-2015a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_EXECUTE_IN_MAIN: update printCodeBlocks:NLC_CODEBLOCK_TYPE_NEW_FUNCTION - detect NLCgeneratedNLCimplicitlyDeclaredFunctionArtificialFunction and generate main function to execute this function
OpenNLC 19-August-2015a - test and fix NLC working/temp folder implementation
OpenNLC 19-August-2015a - only createCodeBlockAddEntityToLocalList if assumedToAlreadyHaveBeenDeclared(definitionEntity)	- note this indicates that the definition is referring to a redefinition
OpenNLC 19-August-2015a - (reverted 1q12b) revert NLC_CODEBLOCK_TYPE_CONVERT_PARENT_TO_CHILD_CLASS from static_cast back to dynamic_cast (partially revert 1q1a)
OpenNLC 19-August-2015a - change "NLCrules.xml file not detected" to warning rather than error
OpenNLC 19-August-2015a - fix bug in !NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES (*code = code ...)
OpenNLC 20-August-2015a - update generateClassHeirarchyFunctions to execute fillActionLists even when findFunctionDefinitionClassDefinitionExactOrNonExactMatch (add incoming/outgoing actions lists for each specific set of function arguments, even when they will be converted to a higher order/common class type, eg NLC library functions)
OpenNLC 20-August-2015a - restore NLCtranslator createFunctionDefinitionClassDefinition to not add actionList as well as functionList (execute fillActionLists) (partially revert change 1q1b)
OpenNLC 20-August-2015a - normalise fillActionLists input arguments
OpenNLC 20-August-2015a - define NLC_USE_LIBRARY_STANDARD/NLC_USE_LIBRARY_USER - note NLC_USE_LIBRARY_STANDARD is disabled for OpenNLC
OpenNLC 20-August-2015a - rename NLC_USE_GENERIC_FUNCTIONS to NLC_USE_LIBRARY_STANDARD_GENERIC_FUNCTIONS
OpenNLC 20-August-2015a - update NLClibraryBaseExtended - change all dynamic_cast to static_cast (apply 1q1a update to NLClibrary)
OpenNLC 20-August-2015a - NLC_PREPROCESSOR_MATH_SUPPORT_USER_VARIABLE_TYPE_DECLARATIONS: update replaceExplicitVariableTypesWithNLPparsablePhraseIllegalWords/restoreExplicitVariableTypes to use replaceSubstringAtStartOfString instead of replaceAllOccurancesOfString (only check for variable type declarations occuring at start of line), and only check for variable type declarations with an appended space character (eg "int ")
OpenNLC 20-August-2015a - move NLClibrary, NLCgenerated, and source to separate folders, and access via #include "../includeFolderName/includeHeaderName.h"
OpenNLC 20-August-2015a - set NLCgenericEntityClass.value (progLangDefaultDecimalValue) to numeric_limits<double>::quiet_NaN() by default, and check via std::isnan()
OpenNLC 20-August-2015a - add progLangEndLine to "NLC runtime error: math value pointer undefined (referenced value could not be found); mathText execution will crash"
OpenNLC 20-August-2015a - create print(double val) function in NLClibrary for printing mathText values
OpenNLC 20-August-2015a - upgrade preprocessorMathOperators/NLC_PREPROCESSOR_MATH_OPERATORS_NUMBER_OF_TYPES to support brackets ()
OpenNLC 20-August-2015a - fix bug in NLC_PREPROCESSOR_MATH_DETECT_MATHTEXT_FUNCTIONS_SUPPORTED_BY_TARGET_LANGUAGE_NUMBER_OF_TYPES
OpenNLC 20-August-2015a - [reverted 1q10d] update declareLocalPropertyListsForIndefiniteEntities(): declare local List for substance qualities	
OpenNLC 20-August-2015a - only createCodeBlockAddEntityToLocalList if assumedToAlreadyHaveBeenDeclared(definitionEntity) || definitionEntityConceptEntity->NLClocalListVariableHasBeenDeclared) [upgrade change 1q5b]
OpenNLC 20-August-2015a - update generateObjectInitialisationsBasedOnSubstanceConcepts substance concept property/condition initialisations to add the entity to the definition parent's local list (if substance concept name != instance name)
OpenNLC 20-August-2015a - update generateObjectInitialisationsBasedOnSubstanceConcepts to only process plain concept code if !GIA_CREATE_NON_SPECIFIC_SUBSTANCE_CONCEPTS_FOR_ALL_CONCEPTS
OpenNLC 20-August-2015a - NLC_RECORD_ACTION_HISTORY: extend NLC_PREVENT_INHERITANCE_DOUBLE_DECLARATIONS_OF_CLASS_LIST_VARIABLES:generateClassHeirarchy:eraseDuplicateClassDefinitionSublistItemIfFoundInParentClassDefinitionSublist to search for actions
OpenNLC 20-August-2015a - move NLC_PREVENT_INHERITANCE_DOUBLE_DECLARATIONS_OF_CLASS_LIST_VARIABLES after generateClassDefinitionFunctionDeclarationsAndReconcileArguments:generateClassHeirarchyFunctions (such that actionLists have been filled)
OpenNLC 21-August-2015a - no changes
OpenNLC 21-August-2015a - replace duplicate code at end of printCodeBlocks with generateCodeClearReferenceContextListExecuteFunction 
OpenNLC 21-August-2015a - [NLC_PREVENT_REDECLARATIONS_OF_CATEGORY_LISTS:] NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE: place every sentence within context brackets {}/createCodeBlocksCreateContextBlock - prevent redeclarations of xCategoryList/xSubjectCategoryList/xObjectCategoryList
OpenNLC 21-August-2015a - shrink dummy code "required because printCodeBlocks requires at least 1 param" in NLCcodeBlocksClas.cpp NLC_CODEBLOCK_TYPE_CONTEXT_BLOCK and NLC_CODEBLOCK_TYPE_*_NEW_FUNCTION 
OpenNLC 21-August-2015a - NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE: ensure that local lists are defined for each function execution reference
OpenNLC 21-August-2015a - rename initialiseFunctionArguments to generateObjectInitialisationsFunction
OpenNLC 21-August-2015a - make generateObjectInitialisationsForConnectionType execute generateObjectInitialisationsAction instead of generateObjectInitialisationsAction
OpenNLC 21-August-2015a - introduce generateObjectInitialisationsAction for NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE: set NLClocalListVariableHasBeenDeclared to false after initialising object (to ensure a new function localList is added each time the action/function is referenced/executed)
OpenNLC 21-August-2015a - NLC_DO_NOT_CREATE_LOCAL_LISTS_FOR_QUALITIES: update createCodeBlockAddNewEntityToLocalList/declareLocalPropertyListsForIndefiniteEntities: do not create local lists for substance qualities (upgrade NLC1q7c implementation); execute NLC_CODEBLOCK_TYPE_DECLARE_NEW_VARIABLE/generateCodeNewEntity instead of NLC_CODEBLOCK_TYPE_ADD_NEW_ENTITY_TO_LOCAL_LIST/generateCodeAddNewEntityToLocalList for qualities	
OpenNLC 21-August-2015a - normalise NLC_CODEBLOCK_TYPE_DECLARE_NEW_VARIABLE to execute generateCodeNewEntity
OpenNLC 21-August-2015a - (reverted 1q11b) temporarily disable NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE, as the current implementation doesn't work with NLC_LOCAL_LISTS_USE_INSTANCE_NAME consecutive for loops
OpenNLC 21-August-2015a - (reverted 1q11b) [NLC_PREVENT_REDECLARATIONS_OF_CATEGORY_LISTS:] NLC_GENERIC_LISTS_CATEGORIES_AND_SUBJECT_OBJECT_NAME_BY_INSTANCE_ID_AND_SENTENCE_INDEX - name xCategoryList/xSubjectCategoryList/xObjectCategoryList based on both instance ID and sentence index. Note with NLC_USE_ADVANCED_REFERENCING enabled this is only requried for aliasing
OpenNLC 21-August-2015a - NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE: NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE_LOGICAL_CONDITIONS_FOR_LOOPS - upgrade generateCodeBlocksFromMathTextNLPparsablePhraseLogicalConditionFor to create a new context block when executing a for loop. Required with !NLC_USE_ADVANCED_REFERENCING to support consecutive for loops (iterating across same primary entity). Not required with NLC_USE_ADVANCED_REFERENCING (due to category lists being uniquely named between sentences), and currently unsupported by NLC_USE_ADVANCED_REFERENCING (due to referenceContextList maintenance)
OpenNLC 21-August-2015a - NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE: !NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE_LOGICAL_CONDITIONS_FULL_SENTENCES - still requires to be integrated properly with logical condition sentences
OpenNLC 21-August-2015a - place all NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE/NLC_GENERIC_LISTS_CATEGORIES_AND_SUBJECT_OBJECT_NAME_BY_INSTANCE_ID_AND_SENTENCE_INDEX preprocessor defs within NLC_PREVENT_REDECLARATIONS_OF_CATEGORY_LISTS
OpenNLC 21-August-2015a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT: update generateCodeBlocksFromMathText to add entity parsed by the for loop logical condition to the new referenceContextList
OpenNLC 21-August-2015a - disable NLC_CATEGORIES_TEST_PLURALITY_WARNING (as it is incompatible with for loops)
OpenNLC 21-August-2015a - move NLC_CATEGORIES_TEST_PLURALITY_COMMENT out of NLC_CATEGORIES_TEST_PLURALITY_WARNING
OpenNLC 22-August-2015a - (disabled 1q12b) NLC_CONDITION_LISTS_VECTOR - change conditionLists from unordered_map to vector<pair<conditionClass*, conditionObjectClass*>> - not currently supported by NLC standard library
OpenNLC 22-August-2015a - rename NLC_USE_STRING_INDEXED_UNORDERED_MAPS_FOR_CONDITION_LISTS to NLC_CONDITION_LISTS_STORE_CONDITION_AS_STRING
OpenNLC 22-August-2015a - add preprocessor def conditions to NLClibraryBase/NLClibraryGenericEntityClass
OpenNLC 22-August-2015a - disable NLC_CONDITION_LISTS_VECTOR
OpenNLC 22-August-2015a - NLC_CODEBLOCK_TYPE_CONVERT_PARENT_TO_CHILD_CLASS: revert dynamic_cast back to static_cast (even when casting parent to child class) (revert change 1q5c)
OpenNLC 22-August-2015a - update NLClibrary user/standard printFunction to indent printed property lists
OpenNLC 22-August-2015a - update generateCodeAddConditionAndObjectEntityToList and generateCodeAddConditionNewFunction to use generatePointerTypeText(typex->className) while executing generateCodeConditionPairText (fix 1q1a)
OpenNLC 22-August-2015a - NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE_LOGICAL_CONDITIONS_PARSABLE_PHRASES: remove all references to "*currentCodeBlockInTree = firstCodeBlockInPhrase->next;" in generateCodeBlocksFromMathTextNLPparsablePhrase
OpenNLC 23-August-2015a - !GIA_DISABLE_CROSS_SENTENCE_REFERENCING: NLC_DO_NOT_PREDECLARE_LOCAL_LISTS_FOR_QUALITIES: need to create (locally declare, not predeclare) local list (instanceList) for qualities, as category lists are not used (partially revert 1q10d)
OpenNLC 23-August-2015a - separate NLC_DO_NOT_PREDECLARE_LOCAL_LISTS_FOR_QUALITIES from NLC_DO_NOT_CREATE_LOCAL_LISTS_FOR_QUALITIES
OpenNLC 23-August-2015a - !GIA_DISABLE_CROSS_SENTENCE_REFERENCING: NLC_DO_NOT_PREDECLARE_LOCAL_LISTS_FOR_QUALITIES: !NLC_DO_NOT_CREATE_LOCAL_LISTS_FOR_QUALITIES: restore createCodeBlockAddNewEntityToLocalList to execute NLC_CODEBLOCK_TYPE_ADD_NEW_ENTITY_TO_LOCAL_LIST with GIA advanced referencing. 
OpenNLC 23-August-2015a - !GIA_DISABLE_CROSS_SENTENCE_REFERENCING: NLC_DO_NOT_PREDECLARE_LOCAL_LISTS_FOR_QUALITIES: !NLC_DO_NOT_CREATE_LOCAL_LISTS_FOR_QUALITIES: update createCodeBlocksDeclareNewLocalListVariableIfNecessary() to execute createCodeBlocksDeclareNewLocalListVariable with !createTypeList if isAction or isSubstanceQuality detected
OpenNLC 23-August-2015a - !GIA_DISABLE_CROSS_SENTENCE_REFERENCING: NLC_DO_NOT_PREDECLARE_LOCAL_LISTS_FOR_QUALITIES: !NLC_DO_NOT_CREATE_LOCAL_LISTS_FOR_QUALITIES: update createCodeBlocksDeclareNewLocalListVariableIfNecessary() [setNLCLocalListVariableHasBeenDeclared = false if isSubstanceQuality detected] 
OpenNLC 23-August-2015a - move from generateObjectInitialisationsAction():NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE code to createCodeBlocksDeclareNewLocalListVariableIfNecessary() [setNLCLocalListVariableHasBeenDeclared = false if isAction detected] (normalise 1q10c implementation in accordance with 1q13a)
OpenNLC 23-August-2015a - update createCodeBlocksDeclareNewLocalListVariableIfNecessary() [setNLCLocalListVariableHasBeenDeclared = false if isAction detected]
...
OpenNLC 02-September-2015a - update generateCodeAddToCategoryIfPassSingularDefiniteReferencingTestsExecuteFunction/generateCodeAddToCategoryIfPassPluralDefiniteReferencingTestsExecuteFunction/generateCodeFindAliasAndAddToCategoryListExecuteFunction/generateCodeFindAliasExecuteFunction - remove space after template definitions when executing NLC library base functions
OpenNLC 02-September-2015a - NLC_USE_LIBRARY_STANDARD/NLC_USE_LIBRARY_USER: make getFilesFromFileList initialisations dependent
OpenNLC 02-September-2015a - update NLClibraryStandardCopy - fix NLC_USE_LIBRARY_COPY_FUNCTION_COPY_INTERNAL_CONDITION_LISTS make copyObjectAndProperties execute copyObjectAndProperties instead of copyObjectAndChildren for recursion
OpenNLC 02-September-2015a - update NLClibraryStandardCopy - execute copyObjectByNameWithoutChildren instead of copyObjectByName, 
OpenNLC 02-September-2015a - test writeXMLfilePropertyListEntry (XML write function)
OpenNLC 02-September-2015a - NLC_NORMALISE_TWOWAY_PREPOSITIONS_MARK_INVERSE_CONDITIONS: update read/write functions - do not write inverse conditions (verify that this implementation is OK)
OpenNLC 02-September-2015a - update generateInverseConditionEntity(): set isInverseConditionEntity
OpenNLC 02-September-2015a - update declareLocalPropertyListsForIndefiniteEntitiesValidClassChecks() to check isStringAliasFileName() -  do not create local lists for entities containing fullstops
OpenNLC 02-September-2015a - NLC_VERIFY_LEGAL_TARGET_SOURCE_CHARACTERS: update declareLocalPropertyListsForIndefiniteEntitiesValidClassChecks() to check isStringIllegalTargetSourceCharacter() - do not create local lists for entities containing illegal target source characters (e.g. ".", "$', "-", "'") 		...
OpenNLC 02-September-2015a - test writeNLCflatFilePropertyLists (TXT write function)
OpenNLC 02-September-2015a - update generateClassHeirarchyValidClassChecks() to check isStringAliasFileName() -  do not create local lists for entities containing fullstops
OpenNLC 02-September-2015a - NLC_VERIFY_LEGAL_TARGET_SOURCE_CHARACTERS: update generateClassHeirarchyValidClassChecks() to check isStringIllegalTargetSourceCharacter() - do not create local lists for entities containing illegal target source characters (e.g. ".", "$', "-", "'") 		...
OpenNLC 02-September-2015a - make generateClassHeirarchyTargetValidClassChecks execute generateClassHeirarchyValidClassChecks
OpenNLC 02-September-2015a - !NLC_USE_LIBRARY_FILEIO_XML_WRITE_LIST_TAGS - verify this works with readFunction
OpenNLC 02-September-2015a - NLC_LIBRARY_STANDARD_PRINT_CONDITIONS_TEMP - used for debugging purposes - this should not be used for deployment to prevent infinite loops 
OpenNLC 02-September-2015a - change include file paths of NLClibrary (remove relative associations and rely on makefile specifying -I folder) - modify NLC_USE_LIBRARY_LIBRARY_FOLDER/NLC_USE_LIBRARY_GENERATED_FOLDER/NLC_USE_LIBRARY_SOURCE_FOLDER to ""
OpenNLC 06-September-2015a - update readFunction to support to conditions
OpenNLC 06-September-2015a - update readFunction to support without execution readObjectClassList specified (XML read only; not flat file - as will find the necessary propertyList name from the xml file)
OpenNLC 06-September-2015a - ensure all OpenBAI files have AGPLv3 header assigned (NLClibrary.cpp/.hpp, NLClibraryBase*.cpp/*.hpp, NLClibraryGenericEntityClass.cpp/.hpp, NLClibraryUser*.cpp/.hpp)
OpenNLC 06-September-2015a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT_UPDATE_GENERATE_OBJECT_BY_NAME: update generateCodeGenerateObjectByNameNewFunction [NLCgenerated.cpp:generateObjectByName()] to set newGenericObject->lastSentenceReferenced.push(0);
OpenNLC 06-September-2015a - place NLCgenericEntityClass lastSentenceReferenced within NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT instead of NLC_USE_ADVANCED_REFERENCING
OpenNLC 07-September-2015a - test readNLCflatfilePropertyLists (TXT read function)
OpenNLC 07-September-2015a - NLC_USE_ADVANCED_REFERENCING_MONITOR_CONTEXT_UPDATE_GENERATE_OBJECT_BY_NAME: update generateCodeGenerateObjectByNameNewFunction [NLCgenerated.cpp:generateObjectByName()] to only set newGenericObject->lastSentenceReferenced.push(0) if (newGenericObject != NULL) (update 1q14k)
OpenNLC 07-September-2015a - update readFunction with warning in case if(toConditionReadObjectClassList == NULL)
OpenNLC 07-September-2015a - update readFileObjectVectorListAll/readFunction with warning in case if(vectorList == NULL)

Release-X:

OpenNLC 14-October-2015a - rename XMLParserAttribute to XMLparserAttribute
OpenNLC 15-October-2015a - NLC_REFERENCING_WILD_CARDS - ignore something/anything entities while parsing context
OpenNLC 14-November-2015a - move NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES to top of NLCglobalDefs.h
OpenNLC 11-December-2015a - splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands: generateSeparateSentencesFromMathTextAndParsablePhrasesInCommand fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - splitMathDetectedLineIntoNLPparsablePhrases: splitMathDetectedLineIntoNLPparsablePhrases fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - generateCodeBlocksPart2logicalConditions: fix (increase) number arguments: generateParentInitialisationCodeBlockWithChecks
OpenNLC 11-December-2015a - generateCodeBlocksPart2logicalConditions: fix (reduce) number arguments: getParentAndGenerateContextBlocks x2
OpenNLC 11-December-2015a - checkIfPhraseContainsSubstanceConceptWithDefinitionLink: fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - generateCodeBlocksFromMathTextNLPparsablePhrase: fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - DBreadVectorConnectionEntities: fix comments function reference brackets; change from () to {}?
OpenNLC 11-December-2015a - determineNextIdInstance: fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - [OLD] generateCodeBlocksAddConnection: fix addOrConnectConditionToEntity; add rcmodIndicatesSameReferenceSet parameter
OpenNLC 11-December-2015a - generateContextForChildEntity: fix comments function reference brackets; change from () to {}
OpenNLC 11-December-2015a - !NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_DO_NOT_ADD_DUPLICATES: addPropertyToCategoryList: fix function references; createCodeBlockAddEntityToCategoryList
OpenNLC 11-December-2015a - remove outdated test code;
OpenNLC 11-December-2015a - NLC_CREATE_A_SEPARATE_CLASS_FOR_SUBSTANCE_CONCEPT_DEFINITIONS: generateSubstanceConceptClassName/generateSubstanceConceptClassNameRecurse: fix function references; generateSubstanceConceptClassNameRecurse
OpenNLC 11-December-2015a - rename findFunctionDefinitionFunctionDependencyInList (second instance) to findFunctionDefinitionFunctionDependencyInListByIndex
OpenNLC 11-December-2015a - rename findFunctionDefinitionClassDefinitionInList to findFunctionDependencyClassDefinitionInListByIndex
OpenNLC 11-December-2015a - [CHECKTHIS] NLCmain.cpp replace findFunctionDefinitionClassDefinitionInList/findFunctionDefinitionClassDefinitionInList references with findFunctionDependencyClassDefinitionInListByIndex
OpenNLC 11-December-2015a - update for CS compatibility
OpenNLC 11-December-2015a - ?	
OpenNLC 12-August-2016a - add ***_DEBUG to all commented debug statements (ie "//cout...")
OpenNLC 12-August-2016a - remove GIA_RECORD_RCMOD_SET_INFORMATION (rcmodIndicatesSameReferenceSet save) because it is not used by any compilation path (since NLC1p10a/GIA2k3c)
OpenNLC 15-August-2016a - linkPronounReferencesRelex:linkPronounReferencesRelex fix comments function reference brackets; change from () to {}
OpenNLC 15-August-2016a - redistributeStanfordRelationsCreateQueryVarsWhatIsTheNameNumberOf:redistributeStanfordRelationsCreateQueryVarsWhatIsTheNameNumberOf [fix comments function reference brackets; change from () to {}?]
OpenNLC 15-August-2016a - convertSentenceSyntacticRelationsIntoGIAnetworkNodes:convertSentenceSyntacticRelationsIntoGIAnetworkNodes [fix comments function reference brackets; change from () to {}?]
OpenNLC 15-August-2016a - USE_CE: parseNLPparserFileAndCreateSemanticNetworkBasedUponDependencyParsedSentences: rename createSemanticNetworkBasedUponDependencyParsedSentences reference to createSemanticNetworkBasedUponDependencyParsedSentencesCE
OpenNLC 15-August-2016a - update for CS compatibility
OpenNLC 15-August-2016a - update NLC library - create an 'add' function; eg add the apple to the tree / add the reference to the item's forwardReferenceClassList 	
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_STRING eg the dog's value = "apple";
OpenNLC 16-August-2016a - change NLC_USE_MATH_OBJECTS_VALUE_NAME "value" to NLC_USE_MATH_OBJECTS_NUMERICAL_VALUE_NAME "numericalValue"
OpenNLC 16-August-2016a - disable NLC_PREPROCESSOR_REDUCE_QUOTES_TO_SINGLE_WORDS (illegal: 'Print "this text".' legal: 'the value = "this text". print the value.')
OpenNLC 16-August-2016a - remove NLC_PREPROCESSOR_MATH_NLP_PARSABLE_PHRASE_SUPPORT_ALPHANUMERIC_VARIABLE_NAMES_REMOVE_REDUNDANT_CODE
OpenNLC 16-August-2016a - fix bug in splitMathDetectedLineIntoNLPparsablePhrases; change (i+1 < lineContents->length()) to (i+1 < lineContents->length())
OpenNLC 16-August-2016a - NLCpreprocessorSentenceClass: add vector<int> mathTextVariableTypes;
OpenNLC 16-August-2016a - [CHECKTHIS] NLC_PREPROCESSOR_MATH_FIX_BUG_ADD_MATH_TEXT_VARIABLES_TO_FIRST_PHRASE_IN_FULL_SENTENCE
OpenNLC 16-August-2016a - rename replaceNumericalVariablesWithDummyNameIfNecessary to replaceNumericalVariablesWithDummyNumberIfNecessary, rename findAndSetDummyNumericalValueForReplacement to findDummyNumberAndReplaceWithOriginalNumericalVariableName, dummyNumericalValue with dummyNumber etc
OpenNLC 16-August-2016a - [yet to debug] NLC_API - automatically expose your software project's API to NLC
OpenNLC 16-August-2016a - [CHECKTHIS] disable NLC_PREPROCESSOR_MATH_FIX_BUG_ADD_MATH_TEXT_VARIABLES_TO_FIRST_PHRASE_IN_FULL_SENTENCE (no longer required for NLC_USE_MATH_OBJECTS_STRING, but should this be enabled anyway?)
OpenNLC 16-August-2016a - [partially reverted 1r5i] change NLC_USE_MATH_OBJECTS_STRING implementation to use genericEntityPointer and overloadable assignMathTextValue function (entity, string / entity, int / entity, entity) instead of string/decimalPointer
OpenNLC 16-August-2016a - update detectAndReplaceIsEqualToNonLogicalConditionTextWithSymbol to set result = true if replaceAllOccurancesOfString
OpenNLC 16-August-2016a - create function addMathObjectValue and convert all a + b expressions to addMathObjectValue
OpenNLC 16-August-2016a - rename "assignMathTextValue" to "assignMathObjectValue"
OpenNLC 16-August-2016a - update generateAssignMathTextValueExecuteFunctionMathText:!foundParsablePhraseReferenceNameAssignment - only create one instance of = getMathObjectValue(.. per sentence
OpenNLC 16-August-2016a - fix bug in getTargetValueText - check if(numberOfAdditionsFound > 0)
OpenNLC 16-August-2016a - update addMathObjectValue implementation: ignore all equals signs within inverted commas
OpenNLC 16-August-2016a - update splitMathDetectedLineIntoNLPparsablePhrases to set firstNLCsentenceInFullSentence->sentenceIndex if(firstNLCsentenceInFullSentence->mathTextNLPparsablePhraseTotal == 0)
OpenNLC 16-August-2016a - upgrade NLC to support logical condition mathobject comparison expressions, eg if(theHouse > 3), if(theHouse == 3), if(theHouse == "tom"), if(theBoat1 + theBoat2 > 3), etc
OpenNLC 16-August-2016a - auxiliary detection ("is) could be used to detect boolean parsable phrases
OpenNLC 16-August-2016a - detect decimal / , -, + operations (partially reverted 1r5b: change NLC_USE_MATH_OBJECTS_STRING implementation to use genericEntityPointer and overloadable assignMathTextValue function (entity, string / entity, int / entity, entity) instead of string/decimalPointer)
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_ADVANCED_USE_UNIQUE_OPERATORS - use a different symbol for string test equals ~~ and addition &
OpenNLC 16-August-2016a - NLC_PREPROCESSOR_SUPPORT_IDENTICAL_PARSABLE_PHRASES_IN_SENTENCE - upgrade NLC preprocessor to account for identical NLP parsable phrases within sentence, eg "the dog is happy" in "if((the dog is happy || the sun is bright) || (the dog is happy && the sun is red))"
OpenNLC 16-August-2016a - [disabled; not used] NLC_PREPROCESSOR_RECORD_PARSABLE_PHRASE_POSITION_APPROXIMATE - record rough position of parsable phrase within full sentence (first character); will not be accurate due to replaceLogicalConditionNaturalLanguageMathWithSymbolsEnd/restoreExplicitVariableTypes
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_STRING: disable support for implicit mathtext variable types; user must explicitly assign them
OpenNLC 16-August-2016a - change "testMathObjectValue(if(ThecitysnameS3P0, X))" to "if(testMathObjectValue(ThecitysnameS3P0, X))"
OpenNLC 16-August-2016a - upgrade getMathTextSubphraseContainingNLPparsablePhrase to support advanced bracketing
OpenNLC 16-August-2016a - NLC_PREPROCESSOR_SUPPORT_WHITE_SPACE_BETWEEN_LOGICAL_CONDITION_AND_OPENING_BRACKET - update replaceLogicalConditionNaturalLanguageMathWithSymbols/replaceLogicalConditionNaturalLanguageMathWithSymbolsEnd; remove limitation; NB intermediary white text not currently supported, eg "if (...)"	
OpenNLC 16-August-2016a - remove generateCodeBlocksFromMathTextNLPparsablePhrase{} limitation if(currentFullSentence->hasLogicalConditionOperator) && !contextFound - did not support comparison of mathObjects eg If(The name > X)
OpenNLC 16-August-2016a - update mathObjectsVariableTypeNumericalOperators to support these symbols; ">", "<", ">=", "<="
OpenNLC 16-August-2016a - fix bug in getMathTextSubphraseContainingNLPparsablePhrase; subphraseEndPosition = subphraseStartPosition + (subphraseEndPositionTemp - subphraseStartPositionTemp);
OpenNLC 16-August-2016a - fix error; NLC not generating " ride the bike" and "open the cart"
OpenNLC 16-August-2016a - NLC_PREPROCESSOR_SUPPORT_IDENTICAL_PARSABLE_PHRASES_IN_SENTENCE: upgrade splitMathDetectedLineIntoNLPparsablePhrasesLogicalConditionCommands/generateSeparateSentencesFromMathTextAndParsablePhrasesInCommand; update parsablePhraseReference names in logical condition command mathtext with correct phrase index 
OpenNLC 16-August-2016a - debug logical conditions with multiple commands
OpenNLC 16-August-2016a - debug generateSeparateSentencesFromMathTextAndParsablePhrasesInCommand; use progLangCoordinatingConjunctionsWithoutPause/NLC_PREPROCESSOR_MATH_OPERATOR_EQUIVALENT_NATURAL_LANGUAGE_COORDINATING_CONJUNCTION_WITHOUT_PAUSE_ARRAY_NUMBER_OF_TYPES
OpenNLC 16-August-2016a - debug generateSeparateSentencesFromMathTextAndParsablePhrasesInCommand; use startPosToSearchForConjunction = indexOfNextConjunction + progLangCoordinatingConjunctionsWithoutPause[conjunctionTypeOfNextConjunction].length();
OpenNLC 16-August-2016a - debug generateSeparateSentencesFromMathTextAndParsablePhrasesInCommand; check if((parsablePhraseReferenceWithAppendedFullstop == subCommandContents)
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_BOOLEAN - upgrade NLC to support mathobjects type boolean; eg the dog is true / the dog is false / the dog = true / if the dog is true / if the dog == true / if the dog is not true / if the dog / if !(the dog) / if the dog && the house
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_ADVANCED_USE_UNIQUE_OPERATORS_ASSUME_LOGICAL_CONDITION_STATEMENTS_ARE_BOOLEAN_IF_UNKNOWN
OpenNLC 16-August-2016a - change NLC_USE_MATH_OBJECTS_STRING* to NLC_USE_MATH_OBJECTS_ADVANCED*
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_STRING_INFER_TYPE_BASED_ON_PREVIOUSLY_DECLARED_MATHTEXT_VARIABLES - automatically infer mathObject type from its assignment to a mathText variable of known type
OpenNLC 16-August-2016a - update splitMathDetectedLineIntoNLPparsablePhrases{}, only check for variable types if(currentWord.length() != 0)
OpenNLC 16-August-2016a - update splitMathDetectedLineIntoNLPparsablePhrases{}: NLC_PREPROCESSOR_MATH_FIX_BUG_DO_NOT_ADD_TYPES_TO_MATH_TEXT_VARIABLES
OpenNLC 16-August-2016a - NLC_USE_MATH_OBJECTS_ADVANCED_INFER_TYPE_BASED_ON_PREVIOUSLY_DECLARED_MATHTEXT_VARIABLES_ADVANCED - find mathText variables within any mathText expression (eg logical condition commands, sourceText of declarations), not just within targetText of declarlations
OpenNLC 16-August-2016a - fix bug in generateLogicalConditionImplicitConjunctionsAndIdentifyCommand to support multiple commas before trailing conjunction
OpenNLC 16-August-2016a - reimplement (fix bug in) splitMathDetectedLineIntoNLPparsablePhrases{}: NLC_PREPROCESSOR_MATH_FIX_BUG_DO_NOT_ADD_TYPES_TO_MATH_TEXT_VARIABLES
OpenNLC 16-August-2016a - NLC_PREPROCESSOR_MATH_FIX_BUG_DO_NOT_ADD_LOGICAL_CONDITION_OPERATORS_TO_MATH_TEXT_VARIABLES: NLCpreprocessorMath.cpp undeclared variable check: remove if, else mathtext variables (and fix preprocessor typo introduced 1r5m; !ignoreVariable)
OpenNLC 16-August-2016a - update mathObjectsVariableTypeNumericalOperators - infer numerical math object / mathText type based on the presence of "the number of"
OpenNLC 27-August-2016a - update castVector();
OpenNLC 27-August-2016a - update castUnorderedMap();
OpenNLC 27-August-2016a - NLC_API - test (debug part1) API generation code
OpenNLC 31-August-2016a - NLC_API - test (debug part1) API generation code
OpenNLC 31-August-2016a - NLC_API - add items to NLCgeneratedList.txt; update printClassDefinitions(): change writeStringToFile to appendStringToFile when !generatingAPIclassList

Release-X:

OpenNLC 03-September-2016a - [disabled 1s2a] NLC_CLASS_DEFINITIONS_PRINT_CONCEPT_ENTITIES: update generateClassHeirarchyValidClassChecks{}: remove if(entityNode->isConcept) [revert change 1n2f] 
OpenNLC 03-September-2016a - update isParentClassAChildOfChildClass to only execute getPrimaryConceptNodeDefiningInstance(parentEntity) if (!(parentEntity->isConcept))	
OpenNLC 03-September-2016a - update generateClassHeirarchy(): check if(!(entity->disabled)) before if(generateClassHeirarchyValidClassChecks(entity))
OpenNLC 04-September-2016a - NLC_GENERATE_OBJECT_INITIALISATIONS_BASED_ON_SUBSTANCE_CONCEPTS_DEFINITIONS: update generateObjectInitialisationsBasedOnSubstanceConcepts to parse concept entity definitions
OpenNLC 04-September-2016a - update generateObjectInitialisationsBasedOnSubstanceConcepts; always execute generateObjectInitialisationsBasedOnSubstanceConceptsRecurse for primary node defining instance
OpenNLC 04-September-2016a - !GIA_CREATE_NON_SPECIFIC_SUBSTANCE_CONCEPTS_FOR_ALL_CONCEPTS: NLC_CLASS_DEFINITIONS_PRINT_CONCEPT_ENTITIES (disable 1s1a update)
OpenNLC 05-September-2016a - wrap generateObjectInitialisationsBasedOnSubstanceConcepts code within NLC_GENERATE_OBJECT_INITIALISATIONS_BASED_ON_SUBSTANCE_CONCEPTS
OpenNLC 05-September-2016a - NLC_GENERATE_OBJECT_INITIALISATIONS_BASED_ON_SUBSTANCE_CONCEPTS_REMOVE_REDUNDANT_CODE [reverted NLC1q8a/b changes]
OpenNLC 06-September-2016a - sync NLC for GIA_TRANSLATOR_UNIQUE_CONCATENATION_TYPES
OpenNLC 06-September-2016a - wrap initialisation of synonymnDetectionStatus as SYNONYMN_DETECTION_STATUS_QUERIES_AND_ADVANCED_REFERENCING within GIA_USE_SYNONYMN_DETECTION_DEFAULT_QUERIES_AND_ADVANCED_REFERENCING
OpenNLC 08-September-2016a - GIA_TRANSLATOR_INTERPRET_PRENOMINAL_MODIFIER_SUBCLASSES_ENABLE_INCONSISTENT_REFERENCING: NLC_SUPPORT_SENTENCES_WITH_MULTIPLE_NON_SAME_REFERENCE_SET_CONNECTIONS: update createCodeBlockForConnectionType for sentences with multiple !sameReferenceSet connections, change; if((targetConnection->NLCparsedForCodeBlocks)... to if(((targetConnection->NLCparsedForCodeBlocks) && (sentenceIndex > targetConnection->sentenceIndex))...
OpenNLC 08-September-2016a - [CHECKTHIS] NLC_SUPPORT_REDEFINITIONS_VERIFY_PARENT_CLASS_INTERNALLY: replace all instances with internal GIA substance concept heirachy checking [NB this method absolutely requires GIA_TRANSLATOR_DREAM_MODE_LINK_SPECIFIC_CONCEPTS_AND_ACTIONS, as it assumes that {non-specific} substance concepts are not replicated across sentences but are GIA advance referenced] 
OpenNLC 08-September-2016a - update generateCodeBlocksPart3subjectObjectConnection to execute clearCodeBlock if !generateCodeBlocksAddConnection
OpenNLC 08-September-2016a - [CHECKTHIS; it is probably redundant] update generateObjectInitialisationsForConnectionType to only set result = true if pass generateCodeBlocksAddConnection
OpenNLC 08-September-2016a - fix bug in generateCodeBlocksAddConnection (add result = true if isStringNumberOrFractional)
OpenNLC 09-September-2016a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_SUBCLASSES: generateContextBlocksCategories:findNearestSubClassParentEntityCorrespondingToSubclassEntityInSameContext/createCodeBlockForStatementsForNearestSubClassParentReference: upgrade NLC to search for children of explicitly referenced subclass (eg "the line" of "the goal line")
OpenNLC 09-September-2016a - remove redundant NLCsentence* firstNLCsentenceInList from createCodeBlockNewFunction:generateLocalFunctionArgumentsBasedOnImplicitDeclarations:findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext (rely on NLCmain.cpp to setFirstNLCsentenceInList) 
OpenNLC 09-September-2016a - NLC_DERIVE_LOCAL_FUNCTION_ARGUMENTS_BASED_ON_IMPLICIT_DECLARATIONS_USE_MORE_PRECISE_BUT_REDUNDANT_FUNCTIONS: extract assumedToAlreadyHaveBeenDeclaredInitialisation from assumedToAlreadyHaveBeenDeclared for createCodeBlockNewFunction:generateLocalFunctionArgumentsBasedOnImplicitDeclarations:findIndefiniteEntityCorrespondingToDefiniteEntityInSameContext 
OpenNLC 09-September-2016a - extract isDefiniteEntityInitialisation from generateLocalFunctionArgumentsBasedOnImplicitDeclarations
OpenNLC 09-September-2016a - upgrade generateCodeAddToCategoryIfPassSingularDefiniteReferencingTestsExecuteFunction/generateCodeAddToCategoryIfPassPluralDefiniteReferencingTestsExecuteFunction to support castToCategoryType
OpenNLC 09-September-2016a - fix these bugs;
OpenNLC 09-September-2016a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_SUBCLASSES: verify that the subclass parent has a property parent that corresponds to the name of the subclass child
OpenNLC 09-September-2016a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_SUBCLASSES: parse the property/conditions of the subclass entity rather than the parent
OpenNLC 09-September-2016a - fix bug in isDefiniteEntityInitialisation; check if(!entity->NLCisSingularArgument)
OpenNLC 09-September-2016a - fix bug in isIndefiniteEntityCorrespondingToDefiniteEntityInSameContext; check !(indefiniteEntity->isSubstanceConcept)
OpenNLC 09-September-2016a - fix bug in isIndefiniteEntityCorrespondingToDefiniteEntityInSameContext; check (indefiniteEntity->entityName == definiteEntity->entityName)
OpenNLC 11-September-2016a - sync with GIA2m7a: rename GIA_TRANSLATOR_INTERPRET_PRENOMINAL_MODIFIER_DEFINITIONS* to GIA_TRANSLATOR_INTERPRET_PRENOMINAL_MODIFIER_SUBCLASSES*
OpenNLC 11-September-2016a - wrap generateCodeBlocksAddConnection:GIA_ENTITY_VECTOR_CONNECTION_TYPE_DEFINITIONS redefinitions code within NLC_SUPPORT_REDEFINITIONS preprocessor block
OpenNLC 11-September-2016a - 1a) upgrade createCodeBlockForStatementsForDefinitionChildren to check whether the final [ie substance target entity] reverse definition being parsed is legal via checkParentExists [ie the substance is a parent of the substance concept] a) in which case it follows the substance definition logic#2 ("the fruit is a yellow banana") only if the substance->name == the substanceConcept class name, else b) it follows the substance definition logic#1 ("The yellow banana is a fruit") 
OpenNLC 11-September-2016a - upgrade createCodeBlockForStatementsForDefinitionChildren to execute addToCategoryIfPassSingularDefiniteReferencingTests/addToCategoryIfPassPluralDefiniteReferencingTests with dynamic cast in the case of substance definition logic#2
OpenNLC 11-September-2016a - [modify NLC1s9b change] update createCodeBlockForStatementsForDefinitionChildren - to check both (parentSubstanceConcept->entityName != childSubstance->entityName) && checkParentExists, to rule out cases where standard dream mode substance concept connections have been made (rather than explicit definition connections)

Release-X:

OpenNLC 12-September-2016a - sync with GIA2n1a: make GIA_CREATE_NON_SPECIFIC_SUBSTANCE_CONCEPTS_FOR_ALL_CONCEPTS default implementation and renaming substance concept to concept, and concept to index.
OpenNLC 12-September-2016a - sync with GIA2n1b
OpenNLC 12-September-2016a - sync with GIA2n1c
OpenNLC 12-September-2016a - sync with GIA2n1d
OpenNLC 12-September-2016a - deactivate NLC_DEBUG code in createCodeBlockForGivenDefinition
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_DEFINITIONS (disable NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC)
OpenNLC 15-September-2016a - move parentClassList from NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC to NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_CHECK_PARENT_CLASS_FUNCTION (as this is required for NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_DEFINITIONS also)
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY: update generateCodeBlocksFromMathTextNLPparsablePhrase to parse both the subject and the object of the boolean statement independently			
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY: fix bug; if(chicken1 == chicken1) - temporarily change the idInstance of the subject->targetEntity being tested
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE: support logical condition boolean statements with indefinite subjects/objects
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY: support logical condition boolean statements with actions without a subject/object
OpenNLC 15-September-2016a - upgrade generateCodeBlocksPart3subjectObjectConnections:generateCodeBlocksPart3subjectObjectConnection:generateCodeBlocksAddConnection to distinguish between GIA_ENTITY_VECTOR_CONNECTION_TYPE_ACTIONS/GIA_ENTITY_VECTOR_CONNECTION_TYPE_INCOMING_ACTIONS
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE: update getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks:generateContextForChildEntity to execute createCodeBlockAddEntityToCategoryListCheckLastSentenceReferencedPluralExecuteFunction with logical condition boolean statements with indefinite subjects/objects
OpenNLC 15-September-2016a - rename addPropertyToCategoryList to addEntityToCategoryList
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE - implement alternate implementation: do not parse logical condition boolean statement indefinite objects (only subjects)
OpenNLC 15-September-2016a - update generateCodeBlocksPart3subjectObjectConnection - do not execute checkParentExists (check GIA class hierachy) but createCodeBlockCheckParentClassNameExecuteFunction2
OpenNLC 15-September-2016a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS:!NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC: change checkIfPhraseContainsConceptWithDefinitionLink to checkIfPhraseContainsConcept (remove NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC)
OpenNLC 15-September-2016a - NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS:!NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC (with GIA_TRANSLATOR_INTERPRET_PRENOMINAL_MODIFIER_SUBCLASSES_ENABLE_INCONSISTENT_REFERENCING): ignore additional subclass concepts/definitions created by GIA when parsing NLC logical condition statements (eg alsation_dog for "If the dog is an alsation")
OpenNLC 15-September-2016a - rename NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_DYNAMIC to NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS_BASIC_REDEFINITIONS
OpenNLC 15-September-2016a - update generateCodeBlocksPart3subjectObjectConnection to not execute generateObjectInitialisationsFunction if logicalConditionBooleanStatement
OpenNLC 15-September-2016a - NLC_CLASS_DEFINITIONS_DO_NOT_DEFINE_INHERITANCE_FOR_LOGICAL_CONDITION_CONCEPTS: generateClassHeirarchy:entityIsConceptAndInLogicalCondition: if the entity resides in a logical condition and is a concept, then don't add it or its connections to the class heirachy
OpenNLC 15-September-2016a - rename isParentClassAChildOfChildClass to isSubstanceEntityDefinitionAChildOfTheSubstanceEntity, and ignore cases where substanceEntity is a concept or network index
OpenNLC 15-September-2016a - [CHECKTHIS: update all preprocessor code accordingly] - initialise mathTextNLPparsablePhraseIndex to NLC_PREPROCESSOR_MATH_FIRST_PARSABLE_PHRASE_INDEX rather than a magic number (0)
OpenNLC 15-September-2016a - [CHECKTHIS] - create sentencePertainsToLogicalCondition	
OpenNLC 15-September-2016a - update generateCodeBlocksAddConnection(); remove these tests; generateCodeBlocksAddConnection{} error: foundSubject && (connectionType != GIA_ENTITY_VECTOR_CONNECTION_TYPE_ACTIONS) / generateCodeBlocksAddConnection{} error: foundObject && !foundSubject && (connectionType != GIA_ENTITY_VECTOR_CONNECTION_TYPE_INCOMING_ACTIONS)
OpenNLC 15-September-2016a - update generateCodeBlocksAddConnection(); fix bug; "if((connectionType == GIA_ENTITY_VECTOR_CONNECTION_TYPE_ACTIONS) || (connectionType == GIA_ENTITY_VECTOR_CONNECTION_TYPE_INCOMING_ACTIONS))
OpenNLC 15-September-2016a - optimise entityIsConceptAndInLogicalCondition
OpenNLC 15-September-2016a - fix sentencePertainsToLogicalCondition; test "currentNLCsentenceInList->mathTextNLPparsablePhraseIndex > NLC_PREPROCESSOR_MATH_FIRST_PARSABLE_PHRASE_INDEX)" 
OpenNLC 15-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY: change NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_COMPARISON_IDINSTANCE_STRING to "Candidate" (based on NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_COMPARISON_IDINSTANCE_STRING)
OpenNLC 15-September-2016a - extract and disable NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_BASIC/NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_PARENT_BASIC from NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY
OpenNLC 15-September-2016a - disable and rename NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_CHILDREN to NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_CHILDREN_BASIC
OpenNLC 15-September-2016a - update generateCodeBlocksVerifyConnection with NLC_CATEGORIES_TEST_PLURALITY_NUMEROSITY_CHILDREN
OpenNLC 15-September-2016a - CS compatibility updates
OpenNLC 15-September-2016a - fix bug in NLC1t2i patch; update generateCodeBlocksVerifyConnection{} to only execute checkNumerosity(subjectEntity) if foundSubject
OpenNLC 21-September-2016a - Windows compatibility updates
OpenNLC 21-September-2016a - retest with !GIA_DISABLE_CROSS_SENTENCE_REFERENCING

Release-03October2016:

OpenNLC 24-September-2016a - fix bugs in NLClibraryGenericEntityClass.hpp/.cpp (preprocessor defs + typos)
OpenNLC 24-September-2016a - NLC_USE_MATH_OBJECTS_ADVANCED_ASSIGN_MATHTEXT_VALUE_FUNCTION:generateAssignMathTextValueExecuteFunctionMathText (only pratically required/relevant when !NLC_USE_MATH_OBJECTS_ADVANCED_INFER_TYPE_BASED_ON_PREVIOUSLY_DECLARED_MATHTEXT_VARIABLES): change all execution of NLC_USE_MATH_OBJECTS_ADVANCED_GET_MATHOBJECT_VALUE_FUNCTION_NAME (getMathObjectValue) to NLC_USE_MATH_OBJECTS_ADVANCED_ASSIGN_MATHOBJECT_VALUE_FUNCTION_NAME (assignMathObjectValue) due to ambiguous definitions (compilation error)
OpenNLC 24-September-2016a - NLC_USE_MATH_OBJECTS_ADVANCED_INFER_TYPE_BASED_ON_PREVIOUSLY_DECLARED_MATHTEXT_VARIABLES update documentation - NB this code is not absolutely required (as assignMathObjectValue types can be inferred when compiling generated code), however it will simplify/normalise the generated output code 
OpenNLC 24-September-2016a - update getMathTextSubphraseContainingNLPparsablePhrase and replaceAllAdditionSymbolsWithAdditionFunction with removeSurroundingBracketsOfSubphrase
OpenNLC 24-September-2016a - move NLC_USE_MATH_OBJECTS_ADVANCED detectMathObjectVariable/assignMathObjectValue/assignMathTextValue/addMathObjectValue/testMathObjectValue functions from NLClibraryBaseExtended to NLClibraryGenericEntityClass
OpenNLC 26-September-2016a - add mathObjectType to NLCgenericEntityClass, and update NLC/library implementation to set and test mathObjectType accordingly
OpenNLC 26-September-2016a - change numericalValue/stringValue/booleanValue to mathObjectNumericalValue/mathObjectStringValue/mathObjectBooleanValue
OpenNLC 26-September-2016a - !NLC_USE_LIBRARY: fix bug in NLCprintClassDefinitions - initialise mathObjectNumericalValue/mathObjectStringValue/mathObjectBooleanValue
OpenNLC 26-September-2016a - fix bug in assignMathObjectValue/testMathObjectValue; assign/test booleanType
OpenNLC 26-September-2016a - rename (change Math to MathObject) createCodeBlockTestMathObjectNumericalValue/createCodeBlockSetMathObjectNumericalValue/createCodeBlockSetDecimalPointerToEntityMathObjectNumericalValue/createCodeBlockSetStringPointerToEntityMathObjectStringValue/createCodeBlockSetMathObjectStringValue/createCodeBlockSetMathObjectBooleanValue/createCodeBlockSetBooleanPointerToEntityMathObjectBooleanValue
OpenNLC 26-September-2016a - rename getParentAndInitialiseParentIfNecessaryOrGenerateContextBlocks to getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks, and separate getParentAndInitialiseParentIfNecessary from getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks
OpenNLC 26-September-2016a - [reverted 1u2d] remove getParentAndInitialiseParentIfNecessary 
OpenNLC 26-September-2016a - NLC_TRANSLATOR_DO_NOT_REPARSE_CONTEXT_BLOCKS_IF_ALREADY_PARSED_DURING_ENTITY_INITIALISATION: update generateCodeBlocksFromMathTextNLPparsablePhrase to execute getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks
OpenNLC 26-September-2016a - [disabled] NLC_TRANSLATOR_DO_NOT_REPARSE_CONTEXT_BLOCKS_IF_ALREADY_PARSED_DURING_ENTITY_INITIALISATION_BASIC: update generateCodeBlocksFromMathTextNLPparsablePhrase to not execute parseParsablePhraseParent if generateParentInitialisationCodeBlockWithChecks
OpenNLC 26-September-2016a - [partially revert NLC1u2b] restore getParentAndInitialiseParentIfNecessary
OpenNLC 26-September-2016a - update NLCglobalDefs.h; enable "is not true/false" code
OpenNLC 26-September-2016a - replace all logicalConditionBooleanStatement/logicalConditionBooleanStatementNegativeDetected function parameters with generateContextBlocksVariablesLogicalConditionBooleanStatement object pointer
OpenNLC 26-September-2016a - update NLC_TRANSLATOR_DO_NOT_REPARSE_CONTEXT_BLOCKS_IF_ALREADY_PARSED_DURING_ENTITY_INITIALISATION to ignore !assumedToAlreadyHaveBeenDeclared(parentEntity) code encapsulated by getParentAndInitialiseParentIfNecessaryAndGenerateContextBlocks
OpenNLC 27-September-2016a - NLC_CLASS_DEFINITIONS_ORDER_BY_DEPENDENCIES: upgrade NLC to support recursive class include statements (only take into account definitions, not properties or conditions)
OpenNLC 27-September-2016a - NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN: update generateContextBlocksCategories:createCodeBlockForStatementsForDefinitionChildren: only parseDefinitionChild if local list has been declared
OpenNLC 27-September-2016a - NLC_CATEGORIES_TEST_PLURALITY: update generateContextBlocksCategories to detect NLClogicalConditionIndefiniteEntity; 
OpenNLC 27-September-2016a - NLC_TRANSLATOR_INTERPRET_PROPERNOUNS_WITH_DEFINITION_LINK_AS_NEWLY_DECLARED: if a definition of a pronoun is detected in a function, then interpret the pronoun as newly declared (NLCfirstInstanceOfProperNounInContext)
OpenNLC 28-September-2016a - NLC_CLASS_DEFINITIONS_PRINT_UNDEFINED_BUT_REFERENCED_FUNCTIONS: update NLCprintClassDefinitions: automatically generate functions that have not been defined
OpenNLC 28-September-2016a - fix bug in preprocessTextForNLC; add final function to function list
OpenNLC 28-September-2016a - move parseFunctionNameFromNLCfunctionName/generateNLCfunctionHeader/findFunctionArgument from NLCcodeBlockClass to NLCitemClass
OpenNLC 28-September-2016a - NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_EXECUTE_IN_MAIN_DETECT_USER_DECLARED_MAIN: update generateMainFunctionText to detect a user defined mainFunction ("function main"), not just NLC_USE_PREDEFINED_FUNCTION_NAME_FOR_NATURAL_LANGUAGE_CODE_WITHOUT_FUNCTION_SPECIFIED_NAME
OpenNLC 28-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY: generateCodeBlocksPart3subjectObjectConnection - upgrade code to take into account the fact the object itself may not be definite but have a (definite) same referenceset parent.
OpenNLC 28-September-2016a - remove NLClogicalConditionIndefiniteEntity record and test indefinite directly in context
OpenNLC 28-September-2016a - change NLCgenerateContextBlocksVariables:logicalConditionBooleanStatement/generateContextBlocksVariablesLogicalConditionBooleanStatement to logicalConditionStatement/generateContextBlocksVariablesLogicalConditionStatement
OpenNLC 28-September-2016a - update detectAndReplaceIsEqualToNonLogicalConditionTextWithSymbol/replaceLogicalConditionNaturalLanguageMathWithSymbols to ignore text within strings ""
OpenNLC 29-September-2016a - [fix bug in 1u4a] update findPropernounDefinitionLink to verify that entity != GIA_ENTITY_TYPE_TYPE_NETWORK_INDEX
OpenNLC 29-September-2016a - [fix bug in 1u7a] - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE: if(generateContextBlocksVariables->logicalConditionStatement): replace assumedToAlreadyHaveBeenDeclared with isDefiniteEntityStrict (cannot use assumedToAlreadyHaveBeenDeclared as NLClocalListVariableHasBeenInitialised will always be true after parse; even if !isDefiniteEntityStrict)
OpenNLC 29-September-2016a - NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE: NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE_SUBJECT_OBJECT: create definite entity test; create warning if isDefiniteEntityStrict(parentEntity) && definite entity not found
OpenNLC 29-September-2016a - NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE: NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE_CATEGORIES: create definite entity test; create warning if isDefiniteEntityStrict(parentEntity) && definite entity not found
OpenNLC 29-September-2016a - disable NLC_USE_ADVANCED_REFERENCING_COMMENT: remove comments "Plural definite referencing tests"/"Singluar definite referencing tests"
OpenNLC 29-September-2016a - renable NLC_CATEGORIES_TEST_PLURALITY_WARNING (for addToCategoryIfPassSingularDefiniteReferencingTests) and disable NLC_CATEGORIES_TEST_PLURALITY_COMMENT_REDUNDANT (remove inline "Singular definite plurality tests" comment)
OpenNLC 29-September-2016a - add NLC_MATH_OBJECTS_TEST_NULL_POINTER_MAINTAIN_CONTEXT_WARNING_TEXT and NLC_CLASS_DEFINITIONS_PRINT_UNDEFINED_BUT_REFERENCED_FUNCTIONS_WARNING_TEXT based on NLC_RUNTIME_ERROR_PREPEND		
OpenNLC 29-September-2016a - NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE: NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE_FUNCTION: create function verifyDefiniteReferenceExistence
OpenNLC 29-September-2016a - create a hard coded version of verifyDefiniteReferenceExistence in NLCprintCodeBlocksFunctions.cpp;
OpenNLC 29-September-2016a - change the way in which the verifyDefiniteReferenceExistence function is executed  
OpenNLC 29-September-2016a - [fix bug in 1u8a] - change detectAndReplaceIsEqualToNonLogicalConditionTextWithSymbol/replaceLogicalConditionNaturalLanguageMathWithSymbols; "string lineContentsSub = lineContents->substr(lineContentsSubIndex, lineContentsSubIndexEnd-lineContentsSubIndex);"
OpenNLC 29-September-2016a - [fix bug in 1u8a] - parse the opening string delimiter to enable detection of mathText string declarations: 'is "'
OpenNLC 30-September-2016a - [fix bug in 1t2x/1u9b] - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE: update generateCodeBlocksPart3subjectObjectConnection to independently parse the indefinite object always (because it might have properties)
OpenNLC 30-September-2016a - no change (see GIA2n5a patch)
OpenNLC 30-September-2016a - [fix bug in 1t2x/1u9b/1u11a] - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE: update generateCodeBlocksPart3subjectObjectConnection to independently parse the indefinite object always (if it might have properties; ie if it is not a quality)
OpenNLC 30-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE_SUBJECT_PASS_AS_FUNCTION_ARGUMENT: pass logical condition indefinite subject as function argument [if necessary]; eg if a dog has a ball
OpenNLC 30-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE_OBJECT_STRICT_NUMEROSITY: reenable
OpenNLC 30-September-2016a - move createCodeBlockNewFunction from NLCcodeBlocks to NLCtranslatorCodeBlocks
OpenNLC 30-September-2016a - update NLCrules.xml license header	
OpenNLC 30-September-2016a - update generateContextForChildEntity: if(generateContextBlocksVariablesLogicalConditionStatement->logicalConditionStatement), then set checkIsDefinite = false for getSameReferenceSetUniqueParent
OpenNLC 30-September-2016a NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE_OBJECT_PARSE_CONCURRENTLY_INCLUDING_PARENT: consider this only
OpenNLC 30-September-2016a - set onlyGenerateContextBlocksIfConnectionsParsedForNLCorSameReferenceSet default to true
OpenNLC 30-September-2016a - add generateCodeBlocksPart3subjectObjectConnection{}: if(connectionType != GIA_ENTITY_VECTOR_CONNECTION_TYPE_INCOMING_ACTIONS)	//added 1u12a
OpenNLC 30-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_EACH
OpenNLC 30-September-2016a change "if(subjectEntityPredeterminerDetected && (objectEntity->grammaticalNumber != GRAMMATICAL_NUMBER_PLURAL))" to "if(subjectEntityPredeterminerDetected)"
OpenNLC 30-September-2016a - change "if((subjectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && (objectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && newInitialisationObject)" to "if((subjectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && (objectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && newInitialisationObject)"
OpenNLC 30-September-2016a - remove NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_EACH and merge each support within NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE
OpenNLC 30-September-2016a - upgrade generateCodeBlocksPart3subjectObjectConnection to support addNewObjectForEachSubject for actions (eg not just "if(connectionType == GIA_ENTITY_VECTOR_CONNECTION_TYPE_PROPERTIES || connectionType == GIA_ENTITY_VECTOR_CONNECTION_TYPE_CONDITIONS)")
OpenNLC 30-September-2016a - [CHECKTHIS - appears to be optional; a consequence of ambiguous english] NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_DO_NOT_INTERPRET_NUMERIC_OBJECT_AS_EFFECTIVE_EACH: change "if((subjectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && (objectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && !isDefiniteEntityStrict(objectEntity))" to "if((subjectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && (objectEntity->grammaticalNumber == GRAMMATICAL_NUMBER_PLURAL) && !isDefiniteEntityStrict(objectEntity) && !(checkNumerosity(objectEntity))")"
OpenNLC 30-September-2016a - NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE_SUBJECT_PASS_AS_FUNCTION_ARGUMENT: update generateLocalFunctionArgumentsBasedOnImplicitDeclarationsValidClassChecks to check that entity->entityName != NLC_PREPROCESSOR_LOGICAL_CONDITION_DUMMY_TEXT_ACTION_OBJECT
OpenNLC 30-September-2016a - add "#define NLC_PREPROCESSOR_LOGICAL_CONDITION_DUMMY_TEXT_ACTION_OBJECT "this"" to NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE (not just NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED)
OpenNLC 02-October-2016a -  update isIndefiniteEntityCorrespondingToDefiniteEntityInSameContext to support || (definiteEntity->grammaticalNumber == GRAMMATICAL_NUMBER_UNDEFINED))
OpenNLC 02-October-2016a - CS compatibility updates
OpenNLC 03-October-2016a - NLC_SUPPORT_EXPLETIVES: update generateCodeBlocksPart3subjectObjectConnections to support isolated declarations/initialisations; eg "there is an apple." 
OpenNLC 03-October-2016a - GIA_SUPPORT_EXPLETIVES: NLC_SUPPORT_EXPLETIVES
OpenNLC 03-October-2016a - upgrade getMathObjectVariableType to support detection of expletives
OpenNLC 03-October-2016a - define NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_INTO_A_PROPERTY based on GIA_TRANSLATOR_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_INTO_A_PROPERTY_BASIC
OpenNLC 03-October-2016a - sync NLC with GIA2n8a [isActionConcept only applies to actions]
OpenNLC 03-October-2016a - NLC_TRANSFORM_THE_ACTION_OF_POSSESSION_EG_HAVING_INTO_A_PROPERTY [fix bug in 1u14a; not executing transformTheActionOfPossessionEgHavingIntoAproperty]
OpenNLC 03-October-2016a - GIA_SUPPORT_EXPLETIVES: NLC_RECORD_ACTION_HISTORY_EXTENDED: update generateCodeBlocksPart3subjectObjectConnections to record both action subject and action object connection history 
OpenNLC 03-October-2016a - NLC_LOCAL_LISTS_USE_INSTANCE_NAMES: update getEntityConnection
OpenNLC 03-October-2016a - Windows compatibility updates

//Major features of each OpenNLC version;

Release-03October2016 - NLC_TRANSLATOR_DO_NOT_REPARSE_CONTEXT_BLOCKS_IF_ALREADY_PARSED_DURING_ENTITY_INITIALISATION, NLC_TRANSLATOR_INTERPRET_PROPERNOUNS_WITH_DEFINITION_LINK_AS_NEWLY_DECLARED, NLC_TRANSLATOR_TEST_DEFINITE_ENTITY_EXISTENCE, NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY_SUPPORT_INDEFINITE_ADD_OBJECT_TO_LOCAL_LIST, NLC_SUPPORT_EXPLETIVES
Release-X - sync with GIA2n (entityType, concept/networkIndex), NLC_TRANSLATOR_LOGICAL_CONDITIONS_BOOLEAN_STATEMENTS_INTERPRET_SUBJECT_AND_OBJECT_INDEPENDENTLY
Release-X - GIA_TRANSLATOR_INTERPRET_PRENOMINAL_MODIFIER_SUBCLASSES:NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN_SUBCLASSES, NLC_GENERATE_OBJECT_INITIALISATIONS_BASED_ON_CONCEPTS_DEFINITIONS
Release-X - NLC_REFERENCING_WILD_CARDS, NLC_USE_MATH_OBJECTS_ADVANCED, NLC_API
Release-23August2015 - NLC_USE_LIBRARY_GENERATE_INDIVIDUAL_FILES, first compile/test of generated code, NLC_PREVENT_REDECLARATIONS_OF_CATEGORY_LISTS (NLC_GENERATE_UNIQUE_CONTEXT_BLOCK_FOR_EACH_SENTENCE)
Release-07July2015 - NLC_USE_LIBRARY_BASE_EXTENDED, NLC_USE_ENUM_LISTS, NLC_USE_MATH_OBJECTS, support Stanford Parser/CoreNLP 2015-04-20 (Apr)
Release-15February2015 - generalise generateCodeBlocksPart3subjectObjectConnections() algorithm
Release-06February2015 - NLC_USE_LIBRARY, NLC_TRANSLATOR_GENERATE_CONTEXT_BLOCKS_PARSE_DEFINITIONS/NLC_SUPPORT_REDEFINITIONS, NLC_USE_ADVANCED_REFERENCING performance upgrades
Release-02December2014 - support NLC_NORMALISE_INVERSE_PREPOSITIONS 
Release-08November2014 - substance concept logical conditions using GIA semantic network NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_CONCEPTS,  action logical conditions using GIA semantic network NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_BASED_ON_ACTIONS {legacy/superseded by NLC_RECORD_ACTION_HISTORY}, action logical connections and !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES action referencing using action history NLC_RECORD_ACTION_HISTORY, plural function arguments NLC_FUNCTIONS_SUPPORT_PLURAL_SUBJECTS_AND_OBJECTS
Release-25October2014 - !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES improvements, interfunction referencing updates NLC_RECONCILE_CLASS_DEFINITION_LIST_FUNCTION_DECLARATION_ARGUMENTS_ADVANCED
Release-13September2014 - support !NLC_LOCAL_LISTS_USE_INSTANCE_NAMES (! = disabled)
Release-28August2014 - categories NLC_CATEGORIES_PARSE_CONTEXT_CHILDREN
Release-30July2014 - preprocessor reimplementation NLC_USE_PREPROCESSOR, mathText NLC_PREPROCESSOR_MATH, mathText logical conditions reimplementation (if statements) NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE
Release-18July2014 - logical conditions advanced (if statements) NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED {legacy/superseded by NLC_PREPROCESSOR_MATH_GENERATE_MATHTEXT_FROM_EQUIVALENT_NATURAL_LANGUAGE}, preprocessor NLC_USE_PREPROCESSOR
Release-17May2014 - logical conditions basic (if statements) NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS {legacy/superseded by NLC_SUPPORT_LOGICAL_CONDITION_OPERATIONS_ADVANCED}, quantities NLC_SUPPORT_QUANTITIES, support Stanford Parser/CoreNLP 2014-01-04 (Jan)
Release-X - implement context searching NLC_PARSE_OBJECT_CONTEXT_BEFORE_INITIALISE
Release-X - implement NLC_SUPPORT_INPUT_FILE_LISTS
Release-X - declare function arguments based on properties/conditions, normalise NLC_INTERPRET_ACTION_PROPERTIES_AND_CONDITIONS_AS_FUNCTION_ARGUMENTS implementation (use NLCitem instead of GIAentityNodes as an intermediary data structure)
Release-X - consider new implementation (denied) - return to original implementation
Release-X - first implementation of NLC
Source: README.txt, updated 2016-10-04