Home / release-25October2014
Name Modified Size InfoDownloads / Week
Parent folder
README.txt 2014-11-01 86.3 kB
OpenNLC-25October2014a-binary-linux-x86_64.zip 2014-10-26 878.4 kB
OpenNLC-25October2014a-binary-windows-32bit.zip 2014-10-26 818.4 kB
OpenNLC-25October2014-VC++2010Project.zip 2014-10-26 8.3 kB
OpenNLC-25October2014a-source.zip 2014-10-25 314.4 kB
LICENSE.txt 2014-10-25 34.5 kB
Totals: 6 Items   2.1 MB 0
//License:
See LICENSE.txt for copy of source license (AGPLv3)

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

//Release Notes:
Compilation of OpenNLC requires OpenGIA source (GIA*.cpp/GIA*.h) - see opengia.net
Ensure 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-25-October-2014:

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 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)
Source: README.txt, updated 2014-11-01