﻿/*
	© 2013-2014 FrankHB.

	This file is part of the YSLib project, and may only be used,
	modified, and distributed under the terms of the YSLib project
	license, LICENSE.TXT.  By continuing to use, modify, or distribute
	this file you indicate that you have read the license and
	understand and accept it fully.
*/

/*!	\file ChangeLog.PreAlpha4.txt
\ingroup Documentation
\brief 版本更新历史记录 - PreAlpha4 。
\version r8162
\author FrankHB <frankhb1989@gmail.com>
\since build 400
\par 创建时间:
	2013-04-20 11:19:07 +0800
\par 修改时间:
	2014-05-28 22:41 +0800
\par 文本编码:
	UTF-8
\par 模块名称:
	Documentation::ChangeLog::PreAlpha4
*/

// See %Documentation::Meta for meta descriptions.

$import $HISTORY;

// Scope: [b400, $now];

b499
(
	/ %YFramework $=
	(
		/ %YCLib.Debug $=
		(
			/ $revert_ex(b298) $dev "implementation" @ "YCL_Trace"  $=
			(
				^ '[&]' ~ '[=]';
				* $comp "capture failure for non-copyable bound variables"
					$since b298
			),
			/ @ "platform %Android" $=
			(
				+ "function %LogAssert" @ "namespace %platform_ex";
				+ "macro overrider %YAssert" ^ "%platform_ex::LogAssert"
					// Assertion on Android didn't work well, no text would be \
						shown using %yassert.
			)
		),
		/ %YSLib $=
		(
			/ DLD "implementation" @ "inline functions %(DrawLineSeg, FillRect)"
				@ %Service.YDraw ^ "macros %(PDefH, ImplExpr)",
			/ DLD "implementation" @ "member functions %MenuHost::(Show, \
				Hide)#2" @ %UI.Menu ^ "macros %(PDefH, ImplExpr)",
			- DLD "redundant 'ystdex::'" @ "all 'ystdex::byte', \
				'ystdex::make_shared'" @ %Adaptor.Image
		),
		/ %'YCLib_(Android)'.Android $=
		(
			(
			+ "function %GetContext" @ "class %ScreenBuffer";
			+ 'using ScreenBuffer::GetContext;' @ "class %ScreenRegionBuffer"
			),
			(
			+ "declaration struct %::ALooper";
			+ "function %FetchNativeLooper"
			),
			(
			+ "declaration struct %::AConfiguration";
			+ "function %TraceConfiguration"
			),
			+ 'using ScreenBuffer::GetStride;' @ "class %ScreenRegionBuffer"
			* "wrong implementation" @ "%ScreenRegionBuffer::UpdateTo"
				$since b498
				// Actually nothing updated.
		),
		/ %Helper $=
		(
			* "missing explicit atomic initialization"
				@ "%Enviornment::ExitOnAllWindowThreadCompleted"
				@ %Host $since b399,
			/ "message in thrown exception" @ "function %Execute"
				@ %GUIApplication,
			/ "singleton pointer unregistered when application exit"
				@ %Helper.(GUIApplication, DSApplication)
				// This allows the application instance recreated for a \
					reentrant process.
			/ DLD "simplified implementation" ^ 'make_unique' ~ ('unique_ptr', \
				'new') @ "function templates %(MakeRenderWindow, \
				MakeRenderWindowEx)" @ "class %HostRenderer" @ %HostRenderer
		),
		+ "nonnull argument assertions"
			@ "member function %ScreenBuffer::UpdateFrom"
			@ %('YCLib_(MinGW32)'.Win32GUI, 'YCLib_(Android)'.Android)
	),
	- DLD "all empty lines only being seperator for assertions",
	+ $dev "macro %YB_Use_YAssert defined only when not predefined"
		@ %YBase.YDefinition,
	/ $dev $build @ "makefile" @ "platform %Android" $=
	(
		* "wrong command line to remove output .so file" $since b497,
		/ @ "target %clean" $=
		(
			(
			/ "removing .d and .o files precisely by targets";
			* $comp "missing .d and .o files in subdirectories" $since b497
			),
			/ "removing .apk files precisely by targets"
				// Not all .apk files would be removed.
		)
	)
),

b498
(
	/ %YBase $=
	(
		/ "macro %YB_Use_YTrace always defined regardless of %NDEBUG"
			@ %YDefinition,
		* "probable extra unnecessary evaluations when %operator, overloaded \
			for result" @ "function template %unseq_apply" @ %YStandardEx
			$since b303
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Debug $=
			(
				+ $dev $doc "Doxygen group %tracing";
				(
				+ "class %Logger";
				+ "functions %(FetchCommonLogger, LogWithSource)";
				+ "macros %(YCL_Log; YCL_Trace)"
				),
				+ "macro %YCL_Use_TraceSrc"
			);
			/ %YCommon $=
			(
				/ "macro %YTraceDe" >> %Debug
					^ ("macro %YCL_Log as implementation",
					"macro %YCL_Use_TraceSrc as condition");
				(
				$comp "one '\n' attached for trace",
					// Current use of trace are all adjusted to remove \
						redundant '\n'.
				(
				- "macro %YF_TraceLevel";
				- "function %FetchTraceThreshold"
				)
				)
			),
			/ %Debug $=
			(
				/ @ "platform %Android" $=
				(
					/ @ "namespace %platform_ex" $=
					(
						+ "function %MapAndroidLogLevel",
						+ "class %AndroidLogSender"
					);
					+ "Android logging calls" @ "class %Logger"
				),
				(
				$dep_from "debug print";
				- "macro %YCL_DEBUG_PUTS",
				),
				- "macro %YCL_DEBUG_PRINTF"
			)
		),
		/ %YSLib $=
		(
			+ "inclusion %YFM_YCLib_Keys" @ %YAdaptor.Adaptor,
				// To prevent %YTraceDe undefined.
			/ @ %UI.Loader $=
			(
				+ "(function; function template) %AccessWidgetNode";
				/ DLD "simplified implementation"
					@ "function template %AccessWidget" ^ "%AccessWidgetNode"
			),
			- "using alias %SizeType" @ "class %MessageQueue" @ %Core.Message
		),
		/ %'YCLib_(Android)'.Android $=
		(
			- $revert(b497) "declarations %ANativeActivity, \
				%ANativeActivity_onCreate)"
				// Including "native_activity.h" would make the declarations \
					present so redeclarating them is redundant. And here is \
					really not fit for the entry function definition, but \
					temporarily reserved for delevopment.
			/ @ "class %WindowReference" $=
			(
				(
				$dep_from "window using cleanup";
				- "functions %('GetClient*', GetLocation, 'Set*', Close, \
					Invalidate, Move, Resize, ResizeClient, Show)";
				$dep_to "new %WindowReference members"
				),
				(
				+ "functions %(GetWidth, GetHeight)";
				/ "implemented %(GetSize)" ^ "%(GetWidth, GetHeight)"
				)
			),
			/ @ "class %HostWindow" $=
			(
				/ "set reference count for constructor and destructor",
				(
				- "using declarations %WindowReference::('GetClient*', \
					GetLocation, 'Set*', Close, Invalidate, Move, Resize, \
					ResizeClient, Show)",
				$dep_to "window using cleanup"
				),
				(
				$dep_from "new %WindowReference members";
				+ "using %WindowReference::(GetWidth, GetHeight)"
				)
			),
			/ @ "class %ScreenBuffer" $=
			(
				/ "implemented" ^ "pImpl class %YSLib::Drawing::CompactBitmap",
				+ "constructor accepting extra stride",
				/ "implemented function %(UpdateFrom, swap)",
				/ "function %GetSize",
				+ "functions %(GetBufferPtr, GetStride)",
				(
				$dep_from "region buffer using cleanup";
				- "function %Premultiply"
				)
			),
			/ @ "class %ScreenRegionBuffer" $=
			(
				(
				- 'using ScreenBuffer::Premultiply;';
				$dep_to "region buffer using cleanup"
				),
				+ "constructor accepting extra stride",
				/ "implemented functions %(UpdateFrom, UpdateTo)",
				- "function %UpdatePremultipliedTo"
			),
			/ "entry function %::ANativeActivity_onCreate" @ %Android $=
			(
				+ "log level setting" @ '!defined NDEBUG',
				^ "%YDebugDe" ~ "%::__android_log_print"
			)
		),
		/ %Helper $=
		(
			+ "user-defined entry point 'extern "C" void y_android_main();'"
				@ "platform %Android" @ %YGlobal,
				// Temporarily only declaration is present.
			(
			/ $dev "all debug print" ^ "%YTraceDe" ~ "%YCL_DEBUG_PUTS",
			$dep_to "debug print"
			),
			/ @ "platform %Android" $=
			(
				/ "modified implementation to get rid of use of window methods \
					%(Close, *Client*, Show)" @ "platform %Android"
					@ %(DSMain, Host, HostedUI, HostRenderer),
				/ "made data member %Window::(UseOpacity, Opacity) only \
					avaliable for platform %MinGW32" @ %HostWindow
			)
		),
		/ DLD "implementation"
			@ "member function %WindowMemorySurface::Update#2"
			^ "macro %(PDefH, ImplExpr)" @ %'YCLib_(MinGW32)'.MinGW32
	),
	/ %YReader $=
	(
		(
		$dep_from %YFramework.YSLib.UI.Loader;
		/ DLD "simplified node access" @ "constructor %ShlExplorer",
		@ %ShlExplorer ^ "%AccessWidget"
		),
		/ DLD "similifed unsequenced function calls" ^ "%unseq_apply"
			@ %(ShlExplorer, ShlReader)
	),
	/ $dev $doc "cleanup" @ %Documentation.Definitions $=
	(
		- "namespaces list",
			// Doxygen is preferred.
		- "constexpr namespace objects",
		- "friend list"
			// Text search is preferred.
	)
),

b497
(
	/ $dev "3rd party" @ "platform %Android" $=
	(
		+ $doc "FreeType build instructions";
		+ "built FreeType"
	),
	* "key bit access might out of range" @ "constructor %ShlHexBrowser"
		@ %YReader $since b298,
		// Only platform %Android really overrun currently.
	/ %Tools $=
	(
		+ "create-android-debug-keystore.sh",
		/ $dev @ "make-clang-android.sh" $=
		(
			+ '--verbose' @ "command line options" @ "shell call",
			+ "comment of prerequisition"
				// Not completed.
		)
	),
	+ "project %YSTest_Android",
	* "VC++ projects" @ "platform %Android" ^ "Clang++ predefined macros"
		// However actually G++ is used.
		$= (^ "G++" ~ "Clang++"),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ DLD "simplified lock" ^ "%std::lock_guard" ~ "%std::unique_lock"
				@ "%GetDebugMemoryList" @ 'YF_Multithread == 1'
				@ %Adaptor.YNew $since b496,
			+ 'public' @ "base class %LoggedEvent" @ "class %FatalError"
				@ %Core.YException
		),
		/ %YCLib $=
		(
			^ "%FileOperationFailure" ~ "neutral exception %std::runtime_error"
				@ "constructors" @ "class %MemoryMappedFile" @ %MemoryMapped,
			^ "%FileOperationFailure" ~ "%std::runtime_error"
				@ "functions %GetFileSizeOf" @ %FileSystem
		),
	),
	/ @ "main function" @ %Main $=
	(
		* $revert "missing exception handler for %FatalError" $since b342,
		+ "exception handler for %LoggedEvent",
		+ "output text" @ "exception handler for %std::exception",
		/ $dev "unified function type as 'int main()'" @ "all platforms"
	),
	/ %'YCLib_(Android)'.Android $=
	(
		+ "empty helper implementation",
			// To prevent undefined symbols make failure on loading(if not \
				forced '--Wl,--no-undefined' in linking command line, it would \
				just fail on dynamically loading and crash).
		+ "default entry function definition %ANativeActivity_onCreate"
			// This is the entry name for native activity if no \
				%android.app.func_name is set in %AndroidManifest.xml. \
				Otherwise, the entry should be defined with the exact name as \
				the value with C linkage. Current implementation is lack of \
				proper exit, so hanging after print some logs is just intended.
	)
),

b496
(
	/ %YBase.YStandardEx $=
	(
		/ %Iterator $=
		(
			/ @ "class template %transformed_iterator" $=
			(
				* "nonconforming to iterator requirement as not \
					%DefaultConstructible" $since b255
					$= (+ "explicitly defaulted constructor"),
				/ "all overloaded member operators %(+=, -=, +, -)"
					-> "non-member function templates",
				+ "function template %operator[]
			),
			+ "function template %operator- with 2 %transformed_iterator \
				instances",
			+ "function templates %operator(<, <=, >, >=) for \
				%transformed_iterator instances"
		),
		/ @ "supported rvalue references" @ "function templates \
			%(polymorphic_cast, polyphic_downcast)" @ %Cast $=
		(
			+ $dev "static assertions to be strict to differentiate lvalue \
				references and rvalue references";
			+ "overloadings support for rvalue references",
			- DLD "underscore" @ "identifiers"
		)
	),
	/ %YFramework.YSLib $=
	(
		* "thread unsafety" @ "globally shared debug list object"
			@ %YAdaptor.New $since b173,
		/ %UI $=
		(
			/ @ %YUIContainer $=
			(
				+ "2 function template %AddWidget",
				+ "function %QueryZ" @ "class %MUIContainer"
			),
			/ %Loader $=
			(
				$dep_from "%AddWidget";
				/ "supported parameter pack" @ "function template \
					%InsertWidget; alias template %GWidgetInserter; \
					class template %GWidgetInserterRegister";
				/ @ "class %WidgetLoader" $=
				(
					+ 'GWidgetInserterRegister<IWidget&, const ZOrderType&> \
						InsertZOrdered;';
					/ "supported Z-order with '$z' node as 1st extended \
						parameter for widget insertion"
						@ "function %TransformUILayout",
					^ DLD "explicitly member brace initializers"
						@ "all data members"
				)
			),
			(
			$dep_from "%MUIContainer::QueryZ";
			+ 'using MUIContainer::QueryZ' @ "class %Panel" @ %Panel
			)
		)
	),
	/ %YReader $=
	(
		$dep_from %YFramework.YSLib.UI.Loader;
		+ "insert registration with Z-order of class %Panel"
			@ "function %FetchWidgetLoader" @ %Shells;
		/ "simplified NPL UI script" ^ '$z' @ %ShlExplorer
	)
),

b495
(
	/ %YBase.YStandardEx $=
	(
		+ "macro %YAssertNonnull" @ %YBase.CAssert,
		+ "function template %forward_as_array" @ %Container
	),
	(
	$dep_from %YBase.YStandardEx.CAssert;
	/ DLD "simplified non-null pointer assertions implementations"
		^ "%YAssertNonnull"
	),
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ $dev @ "class %AScrollBar" @ %Scroll $=
			(
				(
				$dep_from %YBase.YStandardEx.CAssert;
				/ "function %GetTrack" -> "%GetTrackRef"
					^ "%(DefGetter, YAssertNonnull)"
				)
				/ "implementation" @ "function %LocateThumb"
					^ "%(PDefH, ImplRet)"
			),
			/ @ %YUIContainer $=
			(

				/ @ "class %MLinearUIContainer" $=
				(
					* "wrong iteration order" @ "functions %(begin, end)"
						$since b494,
						// This would cause wrong hit test result for \
							overlapped controls.
					(
					+ "function %GetCount";
					+ "assertions" @ "member functions %operator[]"
						^ "%GetCount"
					),
					+ "function %Find",
					* "missing 'const'" @ "function %Contains" $since b494
				)
			),
			/ %Loader $=
			(
				(
				+ "exception class %WidgetNotFound";
				/ "wrapped %AccessWidget to throw %WidgetNotFound"
					~ "%std::out_of_range on widget node not found"
				),
				- "redundant using 'Base::Call', 'Base::Register'"
					@ "class template GWidgetRegister",
				(
				(
				+ "function template %InsertWidget",
				+ "alias template %GWidgetInserter";
				+ "class template %GWidgetInserterRegister";
				/ @ "class %WidgetLoader" $=
				(
					+ 'GWidgetInserterRegister<IWidget&> Insert;',
					/ "supported result of %GWidgetInserter<IWidget&>"
						@ "function %DetectWidgetNode"
				),
				$dep_from %Core.YFunc
				);
				+ "support for widget insertion with container type other than \
					%Panel";
				$dep_to "non-Panel container loading support"
				)
			),
			(
			* "invalid use of %std::initializer_list as a prvalue with \
				non-standard constructor" @ "macros %(DefSubscriptor, \
				DefSubscriptorBase)" @ %WidgetIteration $since b357
				$= (^ "ystdex::forward_as_array" ~ "std::initializer_list"),
				// G++ accepted this but Clang++ doesn't.
			),
			/ %TabControl $=
			(
				/ @ "class %TabBar" $=
				(
					/ @ "member function %PerformLayout" $=
					(
						+ "assertion for pointer",
						* "wrong width used" $since b494
					),
					/ DLD "simplified %DrawRect call"
						@ "static member function %DefaultPaintTabBorder",
					* "wrong location for children not at origin of the \
						container" @ "function %Refresh" $since b494,
					+ "call to %PerformLayout"
						@ "member functions %operator(+=, -=)",
					(
					$dep_from "class %MLinearUIContainer";
					+ "using declarations %MLinearUIContainer::(GetCount,\
						 Find)";
					$dep_to "%MLinearUIContainer using"
					),
					(
					- "using aliases from %MSharedSelection";
					- "redundant protected base class %MSharedSelection"
					)
				),
				/ @ "class %TabControl" $=
				(
					* "wrong initial bar height bar" $since b494
						$= (/ "data member order"),
					/ @ "member function %operator[]" $=
					(
						+ "assertion for pointer",
						* "invalid use of %std::initializer_list as a prvalue \
							with non-standard constructor" $since b494
							$= (^ "ystdex::forward_as_array"
								~ "std::initializer_list")
							// G++ accepted this but Clang++ doesn't. And this \
								would actually cause wrong widget pointer \
								value retrived and a crash when using \
								YFramework DLL.
					),
					+ "member function %UpdateTabPages",
					(
					+ 'const' @ "function %GetTabBarRef",
					(
					$dep_from "%MLinearUIContainer using",
					+ "function %SwitchTab";
					* "wrong control called for switching tab which leads to \
						assertion failure" @ "function %Attach" $since b494
					);
					+ "function %GetTabCount"
					),
					* "wrong implementation" @ "function %GetPageBounds",
					+ "function %Find",
					/ $design "assertion string" @ "function %SwitchPage"
				),
				/ @ "function %operator+=" $=
				(
					/ "made visibility false after successfully insertion of \
						widget",
					* "missing set parent pointer of child widget" $since b494
				),
				/ "set visibility" @ "function %UpdateTabPages"
				/ "invalidated" @ "function %Attach"
			),
			/ DLD "simplified %DrawRect call"
				@ "member function %BorderBrush::operator()" @ %Border,
			/ DLD "all initialization of children widgets for iteration from \
				%GetChildren calls" ^ "direct initialization"
				~ "copy initialization",
				// This would improve a little performance theoretically, at \
					least for %debug configurations. Also to be better \
					conforming to %Documentation::CommonRules.
		),
		/ %YFunc $=
		(
			/ @ "class template %GHandlerRegisterBase" $=
			(
				+ "function %Container",
				/ "supported return void types" @ "function template %Call"
			)
		)
	),
	/ $dev $doc $design "normalized terminology used"
		@ %Documentation::ChangeLog $=
	(
		- "all 'member' when unnecessary",
		/ "all 'member data'" => 'data member',
			// Only %Documentation::ChangeLog::PreAlpha4 is effecied.
		- "redundant '$dep_to' when the entity was new and able to be deducted \
			from '$dep_from'"
			// Only %Documentation::ChangeLog::PreAlpha3 is effecied.
	),
	/ %YReader $=
	(
		/ "function %FetchWidgetLoader" @ %Shells;
		(
			(
			$dep_from "non-Panel container loading support";
			+ "insert registration of classes %(Panel, TabBar, TabControl)"
			),
			+ "defualt initialization support"
		),
		+ "tab control test" @ %ShlExplorer
	)
),

b494
(
	+ $dev $build '-L/lib' @ "build scripts" @ %Tools.SHBuild,
		// It seems to be better not keep '-L/include' alone.
	* "function type might be used as data member"
		@ "class template %transformed_iterator"
		@ %YBase.YStandardEx.Iterator $since b288 $=
		// Though G++ up to 4.8.2 is always silent, G++ 4.9.0 and Clang++ \
			3.4 have detected it.
		(/ 'using transformer_type = _fTransformer'
			-> 'using transformer_type = decay_t<_fTransformer>'),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "friend function %Activate had default arguments" @ %Console
					$since b203 $=
					// See http://clang-developers.42468.n3.nabble.com/Clang-compile-error-td4033809.html .
					// See also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59480 .
				(
					- "default argument" @ "friend function",
					+ "non-friend overloading"
				),
				/ %YWidget $=
				(
					(
					+ "function %PaintVisibleChild";
					/ DLD "simplified implementation"
						@ "function %Widget::Refresh" ^ "%PaintVisibleChild"
					),
					/ "functions %(SetLocationOf, SetSizeOf; $comp \
						SetBoundsOf) would be no actions when the parameter \
						value is equal to the old value";
						// Including the event calls.
				),
				/ %"YUIContainer" $=
				(
					(
					$dep_from "%PaintVisibleChild";
					/ DLD "simplified implementation"
						@ "function %MUIContainer::PaintVisibleChildren"
						^ "%PaintVisibleChild"
					),
					/ "assertion text"
						@ "function %MUIContainer::operator-=",
					+ "class %MLinearUIContainer,
					+ "function %RemoveFrom"
				),
				(
				$dep_from "function %RemoveFrom" @ %YPanel;
				/ DLD "simplified implementation"
					@ "function %Panel::operator-="
				),
				+ %TabControl
					$= (+ "classes %(TabBar; TabControl")),
				/ %Loader $=
				(
					+ "alias template %GWidgetCreator",
					$dep_from %Core.YFunc;
					(
					/ $dev "implementation" @ "class template \
						%(GWidgetCreator, GHandlerRegisterBase)";
					- $comp "trace"
					);
					- "alias template %GWidgetCreatorMap"
				)
			),
			/ %Core $=
			(
				/ %Core.YEvent $=
				(
					+ "class template %GHandlerAdatpor";
					/ %YWidgetEvent $=
					(
						+ "alias template %GWidgetHandlerAdaptor";
						+ "function templates %(MakeWidgetHandlerAdaptor, \
							AddWidgetHandlerAdaptor)"
					)
				),
				+ "class template %GHandlerRegisterBase" @ %YFunc
			)
		),
		- DLD "redundant unreachable code"
			@ "function %Environment::GetForegroundWindow" @ %Host,
		(
		$dep_from %YSLib.UI.TabControl;
		+ '#include YFM_YSLib_UI_TabControl' @ %YSBuild
		)
	),
	/ "rvalue references for callable type like '_fCallable&&'"
		-> "directly '_fCallable'" @ "all function templates unless \
		underlying forwarding call objects used";
		// Only transformer parameter @ %ystdex::(transformed_iterator, \
			make_transform) and one of constructor templates of \
			%YSLib::GHEvent are modified. See $2014-04 \
			@ %Documentation::Workflow::Annual2014.
	/ $dev $doc "interface comments" $=
	(
		^ '\invariant' ~ '\note' @ "non-null guarantee",
		^ '\sa' ~ '\see' @ "all YSLib internal references"
	),
	(
	$dep_from %YSLib.UI.TabControl;
	+ "controls %(TabBar, TabControl) dynamic loader registered"
		@ %YReader.Shells
	)
),

b493
(
	/ DLD "all '< ::'" -> '<::',
		// Since now ISO C++11 is mandated, no need to add space to \
			distinguish these preprocessing tokens.
	^ DLP $re_ex(b453) "MinGW[gcc version 4.8.2 (Rev7, Built by MSYS2 \
		project)] mingw32/mingw-w64-i686-gcc-4.8.2-7"
		~ "MinGW[gcc version 4.8.2 (Built by MinGW-W64 project)] \
		i686-4.8.2-release-posix-dwarf-rt_v3-rev0";
		@ "platform %MinGW32",
		// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
			Exceptions implementation: Dwarf2.
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %Typeface" @ %Adaptor.Font $=
			(
				* $lib $design "spell error" @ "assertion string" @ "destructor"
					$since b425,
				+ $design "inheritance %nonmovable"
			),
			/ "class %MRadioBox" => "%MSharedSelection" @ %UI.Selector
		),
		/ %YCLib $=
		(
			+ "portable cursor device key names" @ %Key $=
			(
				+ 'yconstexpr NativeSet Primary(Touch);' @ "platform %DS",
				+ "enumerators %(Secondary, Tertiary)" @ "enum %ExtendedSet"
					@ "platform %DS",
				+ "enumerators %(Primary, Secondary, Tertiary)"
					@ "enum %NativeSet" @ "platform %Win32",
				+ "enumerators %(Primary, Secondary, Tertiary)"
					@ "enum %ExtendedSet" @ "platform %Android",
				+ "key category identification"
					@ "%(Primary, Secondary, Tertiary)"
					@ "platforms %(DS, Android)"
			),
			/ @ "platform %Android" @ %Input $=
			(
				(
				+ "declaration" @ "struct %::AInputEvent";
				+ "functions %SaveInput"
				),
				+ "functions %FetchCursor"
			)
		),
		/ "implementation" @ "function %InputManager::DispatchInput"
			@ %Helper.InputManager $=
		(
			$dep_from %YCLib.Keys;
			^ "%KeyCodes(Primary, Secondary, Tertiary) as cursor event \
				condition" @ "all platforms",
			^ "cursor validation" @ "all hosted platforms"
		)
	),
	/ @ "freetype" @ "3rdparty libraries" $=
	(
		/ @ "platform %DS" $=
		(
			+ '-fdata-sections -ffunction-sections' @ "%CFLAGS"
				@ "freetype %config.mk",
			+ "build script %build-ds.sh for UNIX shell"
		);
		/ "rebuilt"
	),
	/ $dev $build $re_ex(b431) "merged directories for %YSTest platform builds" $=
	(
		/ "project %YSText_DS" >> "directory 'YSTest/DS'",
		/ "project %YSText_ARM7" >> "directory 'YSTest/DS_ARM7'",
		/ "project %YSText_ARM9" >> "directory 'YSTest/DS_ARM9'",
		/ "project %YSText_MinGW32" >> "directory 'YSTest/MinGW32'"
	)
),

b492
(
	/ DLP "toolchain and library using" @ "platform %DS" $=
	(
		^ $re_ex(b321) "updated devkitARM release 42" ~ "devkitARM release 41",
		^ $re_ex(b308) "updated libnds 1.5.8" ~ "libnds 1.5.7",
		^ $re_ex(b308) "updated default arm7 0.5.25" ~ "default arm7 0.5.24",
		^ $re_ex(b308) "updated libfat 1.0.12" ~ "libfat 1.0.11"
	),
	/ $dev $build "only use 'thread_local' with also defined(_MT)"
		@ "macro %ythread" @ %YDefinition,
	- $dev $build "all workaround for G++ whose version less than 4.8.2",
	- DLD "all redundant unused parameter for expanded caller"
		@ "parameter list of lambda expressions",
	/ %'YFrameowork' $=
	(
		/ %YSLib $=
		(
			/ DLD "reordered %IImage at last" @ "base classes list"
				@ "class %BasicImage" @ %YGDI,
			- DLD "redundant 'break' after %std::exit call"
				@ "%Shell::DefShlProc" @ %Core.YShell
		),
		/ %YCLib $=
		(
			(
			/ %Platform $=
			(
				+ "macro %YF_Platform_Android_ARM";
				+ "Android platform detection",
					// Currently all Android platforms are treated as ARM.
				+ "macro %(YCL_Android, YCL_API_FILESYSTEM_POSIX)"
					@ "defined %YF_Platform_Android_ARM"
			),
			$dep_from "platform %Android";
			/ @ "no-error compilation supported" @ "headers"
				@ "platform %Android" $=
			(
				/ "allowed %YCL_Android as valid target platform category",
				+ 'yconstexpr KeyIndex KeyBitsetWidth(256);' @ %Keys,
				+ "combined with %YCL_Win32" @ %Video
				/ "conditional directives" @ %Video,
				+ "native APIs implementation for %YCL_Android"
					@ %(Timer, MemoryMapping, FileSystem),
			),
			+ "common key and key category support" @ "platform %Android"
				@ %Keys
			),
			/ @ %Helper $=
			(
				$dep_from %YCLib_(Android).Android;
				+ "platform %Android support" @ %ScreenBuffer;
				* "missing use of YFM_*" %(HostWindow, YGlobal, ScreenBuffer,
					GUIApplication) $since b461,
				+ "namespace %YSLib::Android" @ "platform %Android" @ %YGlobal,
				/ "base class" @ "class %Window" -> "%platform::HostWindow"
					~ "%MinGW32::HostWindow",
				+ "platform %Android support"
			),
			/ "class %WindowReference" @ %YCL_(MinGW32).Win32GUI $=
			(
				* "wrongly defaulted move constructor" $since b430,
				+ "defaulted copy constructor"
			),
			(
				+ %Host;
				/ "class %platform_Exception" @ %YCLib_(MinGW32).MinGW32
					>> %YCLib_(Host).Host
			),
			/ DLD "decoupled lock implementation" @ "functions 'Fetch*'"
				@ %Input
		),
		(
		$dep_from %YCLib.Platform;
		+ %'YCLib_(Android)'
			$= (+ %Android)
		),
		* DLD "missing explicit return type" @ "lambda expression"
			@ "implementation" @ "%NPL::TransformNPLA1" @ %NPL $since b344
	),
	/ $dev @ "macros list" @ %Tools.PredefinedMacroDetector $=
	(
		+ "macros %(__GCC_IEC_559, __GCC_IEC_COMPLEX)",
			// See http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html#Common-Predefined-Macros .
		+ "Clang++ support"
			// See http://clang.llvm.org/docs/LanguageExtensions.html .
	),
	/ $dev @ "Visual C++ projects" $=
	(
		/ "predefined macros" $=
		(
			/ "updated definitions",
			* "predefined optimization macros" @ "non-debug configurations"
				$since b431
		),
		+ $dev "relative header searching paths" @ "platform %DS"
	),
	+ "platform %Android" $=
	(
		+ "toolchain package script 'make-clang-android.sh'" @ %Tools,
		+ "project %YBase_Android",
		/ "supported for bionic libc" @ %YBase.LibDefect.String,
			// Without support of %std::(wcstoll, wcstoull, wcstof, wcstold, \
				stof, stod, stold).
		+ "project %YFramework_Android"
	),
	+ $repo 'Tools/*.tar.*' @ "ignored items" @ '.hgignore',
	* "wrong build target types for configurations %release"
		@ "Code::Blocks projects" $since b217,
	/ $dev $build "makefiles" $=
	(
		* "invalid %VPATH setting" @ "empty %DATA" @ "platform %DS" $since b473,
		/ $build "limited makefiles parallel number as 8"
			// Mainly to prevent some memory overhead.
	)
),

b491
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Keys $=
			(
				(
				+ "enumerator %Space" @ "enums" ("%ExtendedSet"
					@ "platform %DS", "%NativeSet" @ "platform %Win32"),
				$dep_to "space virtual key"
				),
				* "missing virtual key code 'VK_ADD'" @ "category enumeration"
					@ "platform %Win32" @ %Keys $since b489
					// Thus key coder not less than VK_ADD(0x6B) were all \
						mispositioned.
			),
			/ %Input $=
			(
				(
				/ "function %WriteCursor" -> ("function %FetchCursor"
					@ "platform %DS");
				- "struct %CursorInfo"
				),
				/ $dev "inline functions %(WaitForKeypad, WaitForFrontKey, \
					WaitForFrontKeypad, WaitForArrowKey, WaitForABXY)"
					@ "platform %DS" -> "non-inline function";
				- $dev "header %NativeAPI dependency" @ "header"
			)
		),
		/ %YSLib $=
		(
			/ @ "class %TextBox" @ %UI.TextBox $=
			(
				(
				$dep_from "space virtual key";
				+ "space input support"
				),
				* "missing processing for key %Right" @ $since b490
				- "invalidation" @ "function %ReplaceSelection",
				* "missing invalidation after cursor move" $since b490,
			),
			+ "constructor for pair type with 'std::get'"
				@ "class template %GBinaryGroup" @ %Core.YGDIBase
		),
		/ DLD "initialization" @ "%Environment::RawMouseButton"
			@ "platform %Win32" @ %Helper.Host ^ "member-initializer"
	)
),

b490
(
	/ %YFramework $=
	(
		/ %YCLib.Keys $=
		(
			+ 'using KeyIndex = std::size_t;' @ %Keys;
			/ ("type" @ "using aliase %KeyBitsetWidth", \
				"all function return and parameter types", "underlying type"
				@ "%KeyCategory::Category") -> "%KeyIndex" ~ 'std::size_t',
			/ @ "platform %DS" $=
			(
				+ 'yconstexpr NativeSet Home(X), End(Y);',
				+ "enum %ExtendedSet with enumerator of keys %(Backspace = 14, \
					Tab, Shift, Ctrl, Alt, Pause, CapsLock, Insert, Delete)",
				+ "key category identification for keys" @ "enum %ExtendedSet"
			),
			+ "enumerator of keys %(Backspace, Tab, Shift, Ctrl, Alt, Pause, \
				CapsLock, End, Home, Insert, Delete)" @ "enum %NativeSet"
				@ "platform %Win32",
			+ 'ynothrow' @ "all functions",
			+ "functions %KeyCodes::(FetchLockState, ToggleLockState)",
			/ "supported caps locked state"
				@ "2 paramater version of function %MapKeyChar"
		);
		/ %YSLib $=
		(
			(
			+ 'using platform::KeyIndex' @ %Adaptors.YAdatpor;
			+ "class %KeyInpuDevice" @ %Core.YDevice
			),
			/ %UI $=
			(
				/ @ "class KeyEventArgs" @ %WidgetYEvent $=
				(
					$dep_from %Core.YDevice;
					+ 'Devices::KeyInputDevice::Tester \
						Tester{Devices::KeyInputDevice::DefaultTest};';
					+ "function %operator[]"
				),
				/ @ "class %TextBox" $=
				(
					+ "function %ReplaceSelection",
					+ "support for navigation(with arrow keys) and \
						deletion(with backspace or delete keys)"
				);
			)
		)
	)
),

b489
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %GUIState" @ %YGUI $=
				(
					+ "parameter for reset of checked held state"
						@ "function %ResetHeldState",
					* $comp "wrongly reset all held state" @ "handlers for
						%(KeyUp, TouchUp)" $since b487
				);
				/ @ "class %TextBox" @ %TextBox $=
				(
					* $comp "held key overridden only by less value key"
						$since b487,
					* "continuous multiple key held not handled" $since b487,
					* "selection failed when touch out of the boundary"
						$since b485;

				),
				+ 'const' @ "reference parameters"
					@ "function %LocateForWidgets" @ %YUIContainer
			),
			(
			$dep_from %YCLib.Keys;
			+ 'using namespace platform::KeyCategory;' @ %Adaptors.YAdaptor
			)
		),
		/ %YCLib.Keys $=
		(
			/ $re(b428) $dev "all subsequent tokens"
				@ "preprocessing directive '#error'" -> "string literal",
			+ "namespace %KeyCategory" $=
			(
				+ "enum %Category";
				+ "functions %((ClassifyKey; IsComposedKey), \
					FindFirstKeyInCategroy)"
			),
			/ @ "function %MapKeyChar with %KeyInput parameter" $=
			(
				/ "supported main virtual key code parameter",
				+ "support of non-alphabetical keys and 'Caps Lock' state"
					^ "Win32 API '::ToASCII'"
			)
		)
	)
),

b488
(
	/ %YFramework $=
	(
		/ %'YCLib_(MinGW32)' @ "platform %MinGW32" $=
		(
			/ @ "class %MinGW32::HostWindow" @ %.Win32GUI $=
			(
				/ "virtual functions %(OnDestroy, OnPaint, OnLostFocus)"
					-> 'std::map<::UINT, \
					YSLib::GEvent<void(::WPARAM, ::LPARAM)>> MessageMap;';
				+ "implemented message handler" ^ 'MessageMap',
			),
			/ "bound event dispatching with data members for windows messages \
				%(WM_SIZE, WM_MOVE)" @ %Host,
				// Output message painted differently, for all non-specific \
					messages with message IDs instead of message names.
		),
		/ %Helper @ "platform %MinGW32" $=
		(
			(
			$dep_from %'YCLib_(MinGW32)';
			/ @ "class %Host::Window" @ %HostWindow $=
			(
				/ DLD "virtual destructor" ^ 'override',
				- "overriders for event %OnLostFocus",
				+ "implemented message handler" ^ 'MessageMap'
			),
			/ @ "class %RenderWindow" @ %HostRenderer $=
			(
				- "overrider for event %OnPaint",
				/ DLD "non-inlined constructor",
				+ "implemented message handler" ^ 'MessageMap'
			),
			/ DLD "events implementation" @ "DS window"
			),
			(
			$dep_from %YSLib.UI.YRenderer;
			* $comp "assertion failed for empty hosted window client area"
				$since b479
			)
		),
		/ %YSLib $=
		(
			(
			$dep_from "%ystdex::exists";
			/ DLD "simplified implementation" ^ "%ystdex::exists"
			),
			/ %UI $=
			(
				+ "exited for Empty clipped area"
					@ "functions %(Renderer::Paint, BufferedRenderer::Validate)"
					@ %YRenderer,
				/ @ "function %CheckHeldState" @ "class %GUIState"
					@ %YGUI $=
				(
					/ "support const argument as input",
						// Now the key should be updated in the caller if \
							necessary.
					* "missing returning 'false' for unchanged key state"
							$since b487
							// Though undocumented, it is intended to be \
								distinguished.
				),
				* "wrong insertion position for inversed selection"
					@ "%TextInput handler" @ "class %TextBox" $since b487
			)
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "function template %exists" @ %Container,
		/ %String $=
		(
			+ "function template %vsfmt";
			/ DLD "simplified implementation" @ "function template %sfmt"
				^ "%vsfmt"
		)
	),
	+ DLB '-Wno-psabi' @ "CFLAGS" @ "makefiles" @ "platform %DS"
		// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42748 .
),

b487
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				(
				* "missing explicit invalidation handlers" @ "handling event \
					%(GotFocus, LostFocus)" @ "class %(Thumb, TextList, \
					ProgressBar, DialogBox, DialogPanel)" @ $since b486;
				* $comp "submenus not shown" $since b486
				),
				(
				* "wrong invalidation targets" $since b482
					$= (/ $comp $revert_ex(b482) "invalidation for captured \
						reference of widgets" ~ "event senders");
				* $comp "missing border repainting immediately" $since b482
				),
				+ "functions %GUIState::(GetCheckedKey, 2 CheckedHeldState)"
					@ %YGUI,
				/ @ "class %TextBox" $=
				(
					+ "selection replacement support;",
					* "single character input" $since b486,
					+ "support of alphabetical character input with \
						'Shift' handled"
				)
			),
			/ %Adaptor.YAdaptor $=
			(
				$dep_from %YCLib.Keys;
				+ 'using platform::FindNextKey;',
				+ 'using platform::MapKeyChar;'
			)
		),
		/ %YCLib $=
		(
			/ %Input $=
			(
				/ $dev ('const' -> 'yconstexpr') @ "native set key code aliases"
					@ "platform %DS",
				- $dev "all redundant '#undef' 'VK_*'" @ "platform %Win32"
			),
			+ "function %(2 MapKeyChar, FindNextKey)" @ %Keys
		)
	),
	/ "menu key" -> "Ctrl" @ "platform %Win32" @ %YReader.ShlExplorer
),

b486
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %TextState" @ %Service.CharBase $=
			(
				+ "function %GetCharBounds",
				/ DLD "simplified implementation" @ "functions %operator="
					^ "%(PDefHOp, ImplExpr)"
			),
			/ %UI $=
			(
				/ %TextBox $=
				(
					/ @ "class %TextBox" $=
					(
						(
						$dep_from "%TextState::GetCharBounds";
						/ "simplified implementation" @ "function \
							%DrawClippedText" ^ "%TextState::GetCharBounds"
						),
						(
						$dep_from "class %MHilightText";
						+ "protected inheritance %MHilightText";
						/ 'Color HilightBackColor;'
							-> 'using MHlightText::HilightBackColor;',
						/ 'Color HilightTextColor;'
							-> 'using MHlightText::HilightTextColor;'
						),
						/ DLD "last parameter of constructor" -> 'const \
							pair<Color, Color>&' ~ 'pair<Color, Color>',
						(
						$dep_from "class %MHilightText";
						+ "mutable highlight support" $=
						(
							+ "protected inheritance %MHilightText";
							+ 'using MHlightText::HilightBackColor;',
							+ 'using MHlightText::HilightTextColor;',
							+ "parameter 'const pair<Color, Color>& = \
								FetchGUIState().Colors.GetPair( \
								Styles::Highlight, Styles::HighlightText)'"
								@ "constructor"
						)
						),
						+ "default handlers for events %(KeyDown, KeyHeld, \
							TextInput)" @ "constructor"
					),
					* "missing stopping caret animation before the restart"
						@ "class %Caret" $since b355
						// This would cause the animation invalidation message \
							kept in queue even if it is not animated.
				),
				+ "class %MHilightText" @ %Label,
				+ "calling %LostFocus with %RoutedEventArgs"
					@ "release for parent controls" @ "function %DoRequestFocus"
					@ %YFocus,
				* $comp "invalid cascade state" @ "focus lost through call out \
					of routed event from %GUIState" $since b483,
				/ %YControl $=
				(
					+ "function %OnUIEvent_Invalidate",
					/ @ "constructor %Control" $=
					(
						- "handlers" @ "events %(GotFocus, LostFocus)",
						(
						$dep_from "function %OnUIEvent_Invalidate"
						/ DLD "simplified implementation"
						)
					)
				),
				+ "manually invalidation handlers"
					@ "event %(GotFocus, LostFocus)" @ "controls"
					// Only %TextBox is modified. See $2014-03 \
						@ %Documentation::Workflow::Annual2014.
			),
			/ @ %YAdaptor.Adaptor $=
			(
				(
				$dep_from %YCLib.Keys;
				+ 'using platform::FindFirstKey'
				),
				+ 'using platform::KeyBitsetWidth'
			)
		),
		+ "function %FindFirstKey" @ %YCLib.Keys
	),
	/ $design "implementation" @ "function %ytrace" @ %YBase.StandardEx.CAssert
		^ '#' ~ '0x';
		// Only different for zero value, and 'X' instead of 'x' after prefix \
			'0'.
	(
	$dep_from @ %YFramework.YSLib.UI.YGUI;
	* $comp "assertion for %TextBox cascade focus failed"
		@ "hot key for menu pressed" @ "%ShlExplorer"
	)
),

b485
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ "constructor 'Thumb(const Rect&, NoBackgroundTag);" @ "class \
				%Thumb" @ %Button -> 'Thumb(const Rect&, ystdex::raw_tag);',
			/ "constructors" @ "class %Control" @ %YControl $=
			(
				$dep_from %Button;
				/ "merged 2 constructors";
				+ "explicit constructor 'Control(const Rect&, HBrush, \
					Drawing::Color = Drawing::ColorSpace::Black)"
			),
			/ @ "class %YWidget" @ %YWidget $=
			(
				/ "static function %GetBlankBrush" => "%MakeBlankBrush",
				(
				$dep_from %YControl;
				- "struct %Widget::NoBackgroundTag" @ %YWidget
				)
			),
			/ %'TextBox'$=
			(
				+ "function %TextSelection::Collapse,
				+ "single line text selection block support" @ "class %TextBox" $=
				(
					(
					$dep_from "%MLabel::DrawClippedText";
					+ "overriding function %DrawClippedText"
					),
					+ "event handlers for %(TouchHeld, LostFocus)"
				)
			)
		),
		/ %Service $=
		(
			/ DLD "simplified implementation"
				@ "function %EmptyTextRenderer::operator()"
				@ %TextRenderer ^ "%(PDefHOp, ImplExpr)",
			/ %TextRenderer $=
			(
				+ "function template %PutText";
				/ "simplified implementation" @ "functions %DrawClippedText"
					^ "%PutText",
				+ "class %CustomTextRenderer" @ %TextRenderer
			)
		)
	)
),

b484
(
	/ @ %YBase.YDefinition $=
	(
		+ "'__apple_build_version__' detection",
		(
		+ "macros %(__has_feature, __has_extension)" @ "undefined";
		+ "feature tests" @ "macros %(YB_HAS_ALIGNAS, YB_HAS_BUILTIN_NULLPTR, \
			YB_HAS_NOEXCEPT)"
			^ "macros %(__has_feature, __has_extension)",
		+ "feature tests" @ "macros %(YB_HAS_CONSTEXPR, YB_HAS_THREAD_LOCAL)"
			^ "macros %__has_feature"
		)
	),
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ %TextBox $=
			(
				+ "class %TextSelection",
				/ @ "class %Cursor" $=
				(
					+ 'InvalidationUpdater::Invalidator CursorInvalidator;';
					/ "needed to specify animation parameters for constructor"
				),
				/ @ "class %TextBox" $=
				(
					(
					/ "member %CaretBrush, handler of event %Paint"
						>> "class %Caret",
					$dep_from "class %TextSelection";
					/ "members %(XOffset, YOffset)"
						-> 'TextSelection Selection;'
					),
					+ 'Caret CursorCaret;',
					+ "static function %InvalidateDefaultCaret",
						// To make invalidation area smaller so it uses less \
							CPU time.
					* "cursor bottom point wrongly added by margin bottom"
						$since b482,
					(
					+ "function %GetCaretPosition";
					+ "caret positioning support when triggered event \
						%TouchDown"
					)
				)
			),
			/ @ "class %Widget" @ %YWidget $=
			(
				+ "static function %GetBlankBackground",
				(
				+ "member initializer '= Drawing::ColorSpace::Black'"
					@ "data member %ForeColor",
				/ "parameters" @ "constructor"
					-> 'const Rect&, HBrush, Color = Drawing::ColorSpace::Black'
					-> 'const Rect& = {}, Color = Drawing::ColorSpace::White, \
					Drawing::Color = Drawing::ColorSpace::Black';
				/ DLD "simplified ctor-initializer" @ "constructor template",
				+ "explicit constructor 'Widget(const Rect& = {})'"
				)
			),
			+ "parameters 'HBrush = GetBlankBrush(), Color = \
				Drawing::ColorSpace::Black'" @ "constructors" @ "classes" \
				("%Label" @ %Label, "%(TextArea, TextRegion)) @ %TextArea"
		),
		/ %Service.TextLayout $=
		(
			/ "function templates %FetchStringWidth" $=
			(
				+ "assertions for iterator not undereferenceable",
				* "postfix %operator++ contradicted with loosed iterator \
					requirement" $since b483,
				+ "overload for most n times iteration",
				+ "overload for most front n characters for string parameter"
			);
			+ "5 function templates %FetchStringOffsets"
		)
	)
),

b483
(
	/ %YBase.StandardEx $=
	(
		/ %String $=
		(
			/ "using alias %string_type" @ "traits %string_traits" ^ "%decay_t"
				~ "%remove_reference_t",
			+ "metafunction %enable_string_class_t"
		),
		+ "metafunction %enable_for_iterator_t" @ %Iterator,
		* "missing workaround for Visual C++" @ "move constructor"
			@ "class %cloneable" @ %Utilities $since b475,
		* $revert(b467) "wrong 'yconstfn' for function template %hash_combine"
			@ %Functional $since b467
	),
	/ %YFramework.YSLib $=
	(
		/ %Adaptor.Image $=
		(
			$dep_from %YBase.YStandardEx.String;
			/ DLD "selection of string parameters for member overloads"
				@ "class %HBitmap" ^ 'ystdex::enable_string_class_t',
			/ "selection of string parameters for member overloads"
				@ "class %HMultiBitmap" $=
			(
				// If the parameter is a character type
				^ DLD 'ystdex::enable_string_class_t',
				* $comp "non overloaded non-class argument selected for \
					infinite recursion" ~ "translation-time diagnostics"
					$since build 471
			)
			/ "selection of string parameters for overloads"
				@ "%ImageCodec::LoadForPlaying" $=
			(
				^ DLD 'ystdex::enable_string_class_t',
				* $comp "non overloaded non-class argument selected for \
					infinite recursion" ~ "translation-time diagnostics"
					$since build 458
			)
		),
		/ %Service $=
		(
			$dep_from %YBase.YStandardEx.Iterator;
			/ "all function templates accepting input iterator"
				@ %(TextRenderer, TextLayout) -> "function templates acception \
				iterator" ^ 'ystdex::enable_for_iterator_t',
			/ "all" ("function templates accepting %String"
				@ %(TextRenderer, TextLayout)
				"inline functions %FetchStringWidth" @ %TextLayout)
				-> "function templates acception string class template argument"
				^ 'ystdex::enable_for_string_class_t', ('[0]' ~ .c_str()'')
		),
		/ %UI $=
		(
			/ DLD "functions %(RequestFocus, ReleaseFocus)" @ %YFocus
				^ "macros %(PDefH, ImplExpr)",
			(
			/ @ "static assertion" @ "function template %CallEvent to allow \
				event argument conversion" @ %YControl;
				// Now the argument is of polymorphic type, so different type \
					of argument should be availableb.
			/ @ "class %GUIState" @ %YGUI $=
			(
				/ $dev "made explicit use of '{}' for private states and \
					simplified the implementation of the default constructor",
				+ "cascade focus with events %(LostFocus, GotFocus) for direct \
					routing event hanling support",
				/ "filter out widget that is invisible or not enabled for key \
					route events" @ "function %ResponseKey"
			);
			/ "ignored event %LostFocus when the dynamic type of the event \
				argument is convervtible to %RoutedEventArgs"
				@ "class %DropDownList" %ComboList,
			+ "class %Caret" @ %TextBox
				// This makes more efficient for caret blink with cascade \
					focus event hanlding support.
			)
		)
	)
),

b482
(
	/ %YFramework $=
	(
		/ DLD "simplified" ^ "macros" @ "common window procedure"
			@ "platform %MinGW32" @ %Helper.Host,
		* "enumerator %Debug" @ "enum %Descriptions::RecordLevel"
			@ %YCLib.YCommon $since b432
			$= (/ '0x70' -> '0xE0'),
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ %YWidgetEvent $=
				(
					/ @ "class %CursorEventArgs" $=
					(
						/ "public inheritance %MScreenPositionEventArgs"
							-> "member 'InputType Position;'",
						+ "operator %InputType"
					);
					- "using alias %MScreenPositionEventArgs"
				);
				+ "static function %DefaultInvalidateControl"
					@ "class %InvalidationUpdater" @ %Animation,
				/ %YWidgetEvent $=
				(
					+ "event %TextInput",
					(
					+ "class %TextInputEventArgs";
					+ 'DeclDelegate(HTextInputEvent, TextInputEventArgs&&)'
					);
					+ 'DefEventTypeMapping(TextInput, HTextInputEvent)'
				),
				+ %TextBox
					$= (+ "class %TextBox"),
				/ "defaulted using sender" ~ "captured 'this'" @ "common event \
					handlers symmetrically handled on senders and destinations \
					where the sender and destination is the same widget" @ %UI
					$= (/ '*this' -> 'e.GetSender()' @ "handlers capturing \
						'this' and added to '*this'" @ "classes %(Thumb, \
						DropDownList, Control, AScrollBar)"),
					// See $2014-03 @ %Documentation::Workflow::Annual2014.
				+ "function %IsFocusedCascade" @ %YFocus
			),
			+ "function %Timer::(RefreshDelta, RefreshRemainder)"
				@ %Service.YTimer
		),
		(
		$dep_from %YSLib.UI.TextBox;
		+ "include 'YFM_YSLib_UI_TextBox'" @ %YSBuild
		)
	),
	/ %'YReader' $=
	(
		+ "%TextBox support" @ "function %FetchWidgetLoader" @ %Shells;
		+ "test for %TextBox" @ %ShlExplorer
	)
),

b481
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ "style %Aoi" @ %ExStyle $=
				(
					+ "style for %RadioBox",
					/ DLD "simplified implementation for %CheckBox"
				),
				* "missing gray color for disabled control foreground"
					@ "default style" @ "%RadioBox" @ %Selector $since b479;
			),
			/ %Core $=
			(
				* "global queue thread safety" $since b299 $=
				(
					/ "public %Application::Queue"
						-> "protected 'MessageQueue qMain'",
					+ "function template %AccessQueue"
				),
				* "thread safety" @ "functions %PostMessage" @ %Yapplication
					$since b299
			)
		),
		/ %Helper $=
		(
			* "wrong 'ynothrow'" @ "function %InitDSScreen" @ %DSScreen
				$since b380,
			/ "destructor" @ "class WindowThread" @ "platform %MinGW32"
				@ %Helper $=
			(
				* "caught wrong exceptions" $since b399
					$= (/ "caught %std::system_error"
					 ~ "%joinable check, catching %std::invalid_argument"),
				* "missing nothrow guarantee" $since b384
				+ "logging" @ "caught exceptions"
			),
			(
			$dep_from "class %YSLib::Application";
			* "thread safety" @ "function %RemoveGlobalTasks" @ %ShellHelper
				$since b303
			)
		),
		/ @ "class %Win32Exception" @ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			/ "made constructor throwable",
			/ "made static function %FormatMessage throwable"
		)
	),
	+ "function template %guarded_call" @ %YBase.YStandardEx.Functional
),

b480
(
	/ %YFramework.YSLib.UI $=
	(
		/ %YStyle $=
		(
			+ "2 functions %DrawTick";
			/ "simplified implementation" @ "checkbox visual styles"
				@ %(Selector, ExStyle),
			/ @ "function %DrawCross" $=
			(
				+ "parameter to specify boundary",
				/ "graphics location and size" ^ "%Rect parameter"
					~ 'const Point&, const Size&'
			)
		),
		/ %Selector $=
		(
			(
			/ @ "class %MRadioBox" $=
			(
				/ "constructor for state" ^ "%shared_ptr<MSelector>"
					~ "%shared_ptr<StatePair>",
				/ "using declaration %StatePair"
					-> 'using StateType = IWidget*';
				(
				+ 'using MSelector = GMSelector<StateType>;';
				+ 'using SelectedArgs = MSelector::SelectedArgs;',
				+ 'using HSelectedEvent = MSelector::HSelectedEvent;',
				- "using declarations %MRadioBox::(Checked, Unchecked, Partial)"
				/ 'DeclEvent(HTickedEvent, Ticked)'
					-> 'DeclEvent(HSelectedEvent, Selected)',
				),
				- "protected base class %MSelectorBox",
				- "function %SetWidgetPtr",
				/ "function %IsTicked" -> "%IsSelected",
				/ "function %SetTicked" -> "%SetSelected",
				/ "function %Tick" -> "%Select"
			),
			/ @ "class %RadioBox" $=
			(
				/ "all 'TickedArgs'" -> 'SelectedArgs',
				/ "all 'HTickedEvent'" -> 'HSelectedEvent',
				/ "all 'Ticked'" -> 'Selected',
				/ "all 'MSelectorBox::'" -> 'MRadioBox::'
			);
			/ "merged class %MSelectorBox" -> "class %MCheckBox",
			),
			/ $revert(b479) "all 'MSelectorBox::'" @ "class %CheckBox"
				-> 'MCheckBox::',
			/ "invalidation for other selected widget"
				@ "function %SetSelected" @ "class %RadioButton",
			+ "function %ShareTo" @ "classes %(MRadioBox, RadioBox)",
			* "wrong color" @ "background" @ "default visual style"
				@ "%RadioBox",
			/ DLD "simplified implementation" @ "function \
				%(CheckBox::SetTicked, RadioBox::SetSelected)" !^ "%UpdateState"
				// Reduced unnecessary duplicate update of state.
		)
	),
	/ %'YReader' $=
	(
		+ "%RadioButton support" @ "function %FetchWidgetLoader" @ %Shells;
		/ "reader mode setting" ^ "%RadioButton" ~ "%CheckButton" @ %ShlExplorer
	),
	/ DLB "detection for G++ version" @ "workaround" $=
	(
		/ "normalized using" $=
		(
			^ "less-than expressions" ~ "greater-or-equal-than expressions",
				// For feature detection in <ydef.h>, '>=' is still used.
			- "all unnecessary 'YB_IMPL_GNUCPP && '" @ %YBase.YStandardEx
		),
		^ "macro %YB_IMPL_GNUCPP"
			~ "predefined macros %(__GNUC__, __GNU_MINOR__, __GNUC_PATCHLEVEL__)"
			@ %YFramework;
	),
	* "wrong handler entry used" @ "non-inline function %StyleMap::PaintAsStyle"
		@ %YStyle $since b468
		// This would cause failure in %debug configuration or wrong \
			type/style painting.
),

b479
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ %Selector $=
			(
				/ DLD 'MCheckBox' -> 'MSelectorBox' @ "using declarations \
					excluding 'MCheckBox::Ticked'" @ "class %CheckBox",
				+ "classes %(MRadioBox; RadioBox; RadioButton)",
				- "function %PaintBox" @ "class %CheckBox",
				/ "default style for %CheckBox" @ %Selector
					// More flat.
			),
			- $design "all assertions" @ "widget drawing",
				// Assertions in drawing routines should be enough.
			+ "style %Aoi for %CheckBox with hue support" @ %ExStyle
		),
		+ "assertion for valid graphics" @ "non-inline function %FillRect"
			@ %Service.YDraw,
	)
	+ "function %Diminish" @ %YGDIBase,
),

b478
(
	$dev $build "default build location" $=
	(
		+ "build library '/build/'";
		/ "Code::Blocks projects",
		/ "Visual C++ projects",
		/ "DS makefiles" $=
		(
			* "unsupported relative paths" @ "macro %bin2o" $since $before b132,
			+ "macros %(PROJNAME; BUILDPATH; RELEASEPATH)",
			- "macro %(TARGETP, GBUILD)",
			/ "macro %BUILD" => "%CONF",
			/ "unified default value" @ "platform macro %PLATFORM as 'DS'"
		)
	),
	/ $repo "ignored items" @ '.hgignore' $=
	(
		+ 'build/',
		- 'YSTest_MinGW32/config.txt',
		- 'YSTest_MinGW32/yconf.txt'
	),
	/ $dev $doc "completed outline of %YSLib::UI documentation"
		@ %Documentation.YSLib,
	/ %YFramework.YSLib.UI $=
	(
		/ %Selector $=
		(
			+ "class template %GMSelector",
			+ "class %MSelectorBox";
			+ "class %MCheckBox";
			/ @ "class %CheckBox" $=
			(
				+ "inheritance protected %MCheckBox",
				/ "tick event and handler types" -> "using declarations",
				+ "using %MCheckBox::(StateType, Unchecked, Checked, Partial, \
					GetState, Ticked)",
				/ "parameter type" @ "function %(SetTicked, Tick)"
					-> 'StateType' ~ 'bool',
				- "function %GetTicked"
			)
		),
		/ "merged functions %(GetViewChanged, GetSelected, GetConfirmed)"
			-> "events %(ViewChanged, Selected, Confirmed) respectively"
			@ "class %TextList" @ %TextList
	)
),

b477
(
	/ %YBase.YStandardEx $=
	(
		+ "alias template %tuple_element_t" @ %Tuple,
			// See https://github.com/cplusplus/draft/issues/247 .
		+ "class %boxed_value; metafunction %classify_value_t" @ %'Utilities';
		+ "%Mixin"
			$= (+ "class %mixin; metafunction %wrap_mixin_t" @ %'Utilities'),
		/ "returned '_tString&&'" ~ '_tString'
			@ "function templates %(ltrim, rtrim, trim)" @ %String
			// Direct binding of reference used instead of 1 possible \
				redundant move. The interface is also clearer to recall users \
				'_tString' is a reference even if 1st argument is of lvalue \
				reference type.
	),
	(
	$dep_from "%ystdex::tuple_element_t";
	/ DLD "simplified all use 'typename std::tuple_element'"
		^ "%tuple_element_t" ~ "%std::tuple_element"
	),
	+ "macro %ImplThrow" @ %YFramework.YBaseMacro,
	(
	$dep_from %YBase.YStandardEx.Mixin;
	/ "simplified implementation" @ %Tools.SHBuild.Main
		^ "%ystdex::mixin, nested exceptions"
	),
	(
	+ $dev $lib $doc "descriptions of code formatting algorithm in natural \
		language";
	/ DLD "specified by rules of code formatting algorithm specific to '(' at \
		EOL"
	)
),

b476
(
	/ %YFramework $=
	(
		/ %YCLib.FileSystem $=
		(
			/ "return type with meaning change" @ "function %uchdir" -> 'bool'
				~ 'int',
				// Now returned value is 'true' on success.
			+ "functions %(uunlink, uremove)",
			* "exception violation of 'ynothrow'" @ "allocation failed"
				@ "platform %MinGW32" @ "functions %(umkdir, urmdir)"
				$since b475
		),
		/ %YSLib $=
		(
			/ %Service.YFileSystem $=
			(
				* $doc "wrong comments" @ "functions %(IsAbsolute, IsRelative)"
					$since b410,
				+ "3 functions %(EnsureDirectory)",
				/ DLD "implementation" @ "inline function %GetExtensionOf"
					^ "%(PDefH, ImplRet)",
				+ "function %GetExtensionOf for %string parameter",
				/ DLD "implementation" @ "overloaded operators for %Path"
					^ "%(PDefHOp, ImplRet)",
				/ DLD "implementation" @ "%swap for %Path" ^ "%DefSwap"
			),
			(
			$dep_from %YBase.YStandardEx.Memory;
			/ DLD "simplified implementation"
				^ "%make_unique for %unique_ptr with array type argument"
				@ "%(GetFormatFromFilename, HBitmap::operator CompactPixmap)"
				@ %Adaptor.Image,
			),
			/ %Core.YGDI $=
			(
				/ @ "class %CompactPixmap" $=
				(
					/ DLD "implementation" @ "function %swap"
						^ "%(PDefH, ImplExpr)";
					/ @ "%operator=" $=
					(
						/ "merged copy and move assignment operators as \
							unifying assignment";
						+ $comp "no throw guarantee" @ "move assignment"
					)
				)
			)
		),
		(
		$dep_from %YBase.YStandardEx.Memory;
		* "missing cutting of trailing characters after NUL" @ "functions \
			%(strdup, ucsdup)" @ %CHRLib.CharacterProcessing $since b475
		),
		/ "functions %MBCSToUTF8" -> "functions %MBCSToMBCS"
			@ %'YCLib_(MinGW32)'.MinGW32
	),
	/ "completed %make_unique" @ %YBase.YStandardEx.Memory $=
	(
		/ "restricted old declaration only for %unique_ptr with non-array type \
			argument"
		+ "template making %unique_ptr with array type argument declaration",
		+ "explicitly deleted template invalid with array type argument \
			declaration"
	),
	/ DLD "implementation" @ %Tools.SHBuild.Main $=
	(
		$dep_from %YFramework.YSLib.Service.FileSystem;
		/ "wide string operations" -> "UTF-8 based string operatiions",
		^ "%EnsureDirectory"
	)
),

b475
(
	/ %YFramework $=
	(
		/ %YFramework.YSLib $=
		(
			/ %Service.FileSystem $=
			(
				/ "recognized %NodeCategory::Unknown"
					@ "function %ClassifyNode",
				/ "function %GetNowDirectory"
					-> "function %FetchCurrentWorkingDirectory",
				/ @ "class %Path" $=
				(
					/ DLD "implemented" @ "function %swap"
						^ "%(PDefH, ImplExpr)",
					+ "friend function %to_string"
				)
			)
			(
			$dep_from "%ystdex::cloneable";
			/ @ ("interface template %GIHEvent" @ %Core.YEvent,
				"interface %IImage" @ %GDIBase, "class %AController"
				@ %UI.YWidgetEvent)
			(
				+ "base interface %ystdex::cloneable",
				+ 'override' @ "abstract function %clone"
			)
			),
			/ %Adaptor $=
			(
				(
				$dep_from "%ystdex::unsupported";
				+ "base class %ystdex::unsupported"
					@ "class %UnsupportedImageFormat"
				),
				(
				$dep_from "%platform::(umkdir, urmdir)";
				+ ('using platform::umkdir', 'using platform::urmdir')
					@ %YAdaptor
				)
			)
		),
		/ $lib "inline functions %(UTF8ToMBCS, WCSToMBCS, MBCSToWCS)"
			 @ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			/ DLD "implementation" ^ "%(PDefH, ImplRet)",
			/ "returned expression without ADL" ^ 'Windows::'
		),
		/ %YCLib.FileSystem $=
		(
			* "wrong return value" @ "function %truncate" $since b341,
				// Returned value is just on the contrary.
			- "macro %YCL_MAX_PATH_LENGTH" @ %YCLib.FileSystem,
			- $depr_clean "function %getcwd_n",
			- "function %mkdirs",
			+ "function %(umkdir, urmdir)"
		),
		/ %CHRLib $=
		(
			/ 'byte Sequence[4];' @ "anonymous union"
				@ "struct %ConversionState"
				-> 'byte Sequence[sizeof(ucsint_t)];' @ %CharacterMapping,
			/ %CharacterProcessing $=
			(
				/ @ "all functions %(chrdup, ucsdup)" $=
				(
					(
						/ "return type" -> "instantiations of \
							%std::basic_string" -> "pointer types"
							~ "allocated pointer with user-managed memroy \
							utilizing %std::free",
						* $comp "missing check for allocation failed"
							@ "function %strdup" $since b305
					),
					/ $dev $doc "explicitly specified maximum sequence length \
						of MBC as 'sizeof(ucsint_t)'"
				)
				+ "function templates %(strdup, ucsdup)"
			)
		),
		(
		$dep_from "function %CHRLib::ucsdup";
		/ "common encoding conversion implementation" @ %YCLib.FileSystem $=
		(
			/ DLD "simplified implementation";
			* $comp "missing check for %ucsdup call success" $since b313,
				// This could cause null pointer be passed to constructor of \
					%std::string on UCS-to-MBCS conversion, which causes \
					undefined behavior.
			* $comp "missing thread safety" @ "platform %MinGW32" $since b313
		),
		(
			$dep_from "%ystdex::unimplemented";
			/ "threw %ystdex::unimplemented" ~ "%LoggedEvent"
				@ "function %HostedRenderer::clone" @ %HostRenderer
				@ %Helper.HostRenderer,
		)
	),
	/ $doc $term $re(b338) "all '断言检查'" -> "'断言'" @ "pre conditions",
	/ %YBase.YStandardEx $=
	(
		+ "exception classes %(unsupported; unimplemented), class %cloneable"
			@ %Utilities,
		/ %Path $=
		(
			$dep_from "%cloneable"
			/ @ "class template %path_norm" $=
			(
				+ "public base class %cloneable",
				+ 'const override' @ "pure virtual function %clone"
			);
			+ 'const' @ "function %clone"
				@ "class template %file_path_norm"
		),
		/ "class holder" @ %Any $=
		(
			+ "public base class %cloneable",
			+ 'override' @ "pure virtual function %clone"
		)
	),
	(
	$dep_from %YFramework.Adaptor.YAdaptor;
	/ "simplified implementation" @ %Tools.SHBuild.Main;
	),
	* DLD "wrong GCC version number" @ "workarounds" $since b353
		$= ('YB_IMPL_GNUCPP < 47200' -> 'YB_IMPL_GNUCPP < 40702')
		// Though still acceptable by higher version than 4.7.1, this was \
			indeed wrong.
),

b474
(
	$dev
	(
	+ "macro %yimpl" @ %YBase.YDefinition;
	/ "all use of %ystdex::exclude_self_ctor_t treated as exposition use";
	/ "all interface code with unspecified or for exposition" ^ "%yimpl"
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "namespace YSLib::IO" @ %Service.FileSystem
				$= (/ "enum classes %(PathCategory, NodeCategory)"
					>> "namespace %platform" @ %YCLib.FileSystem),
			/ %Adaptor.YAdaptor $=
			(
				(
				$dep_from "%PathCategory";
				+ "using %platform::(PathCategory, NodeCategory)"
				),
				(
				- "using alias %platform::(FILENAMESTR, PATHSTR)";
				$dep_to "using aliases"
				)
			)
		),
		/ %YCLib.FileSystem $=
		(
			(
			(
				$dep_from %(YSLib.Service.FileSystem, YBase.Definition);
				/ DLD "%NodeCategory"
					^ 'ystdex::underlying_type_t<PathCategory>'
					~ "explicit unsigned integer type as underlying type"
			),
			/ "enumerators %(Directory; HardLink; SymbolicLink; Pipe; Socket; \
				Normal)" @ "enum class %Node" -> "enumerators %(Missing; \
				Invalid; Regular; Directory; Device = 0x1000; Block; \
				Character; Communicator = 2000; FIFO; Socket; Link = 0x3000; \
				SymbolicLink; HardLink; Junction; Special = 0x4000; Reparse)";
			$dep_to "%PathCategory",
			/ DLD "implementation" @ "classes %(DirectorySession, HDirectory)"
				@ "platform %MinGW32" ^ "Win32 API" ~ "%(_WDIR, _wdirent)";
			/ $revert_ex(b411) @ "class %HDirectory" $=
			(
				(
				/ 'bool IsDirectory() const ynothrow' -> "%GetNodeCategory",
				* $comp "directory iteration state not get properly when using \
					relative path" @ "platform %MinGW32" $since b411,
				),
				/ DLD "directory may throw %std::bad_alloc or other exceptions \
					when internal free storage allocation failed"
					@ "platform %MinGW32"
			),
			/ "paths for %(DirectorySession, HDirectory)" $=
			(
				/ "explicitly supported one or more trailing slash in paths",
					// See $2014-02 @ %Documentation::Workflow::Annual2014.
				/ $dev "explicitly specified slash as delimiter supported as \
					well" @ "platform %MinGW32"
					// See $2014-02 @ %Documentation::Workflow::Annual2014.
			),
			/ DLB $comp "implemented more compatible with Visual C++ 2013",
			),
			(
			/ @ "function %mkdirs" $=
			(
				+ "non-null assertion for parameter",
				/ "function %mkdirs supported path which length is explicitly \
					limited at translation time"
					$= (DLD ^ "%std::string" ~ "platform::FILENAMESTR"),
			),
			$dep_from "using aliases";
			- "using alias %(FILENAMESTR, PATHSTR); \
				macro %YCL_MAX_FILENAME_LENGTH"
			)
		),
		* $dev $build "warning MSB8027 caused by generated object from source \
			files with same name in different directories" @ "all Visual C++ \
			projects with platform configuration 'Win32'" $since b473
			$= (/ "object file name" @ "output files" @ "C/C++ options"
				-> '$(IntDir)/%(RelativeDir)/' ~ '$(IntDir)'),
		/ "return type" @ "function templates %(ltrim, rtrim, trim)"
			@ %YBase.YStandardEx.String -> '_tString' ~ '_tString&';
			// Make it convenient to use. Returned reference would be \
				error-prone in use of lambdas.
	),
	/ DLD "parameter type" @ "function %HexViewArea::LocateViewPosition"
		@ %YReader.HexBrowser -> 'size_t' ~ 'u32',
	+ "project %SHBuild" @ %Tools;
),

b473
(
	/ @ "class %ShlExplorer" @ %YReader.ShlExplorer $=
	(
		+ "initialization for extra style" @ "constructor";
		+ "switch styles action after confirming drop down list"
			@ "class %ShlExplorer"
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI.YWidget $=
			(
				/ DLD "simplified inline functions" ^ "macros %(PDefH, \
					ImplRet, ImplExpr)",
				+ "functions %(2 InvalidateChildren; 2 InvalidateAll)",
				/ "parameter type" @ "function %FetchFocusingPtr"
					-> 'const IWidget&' ~ 'IWidget&'
			),
			(
			$dep_from %YBase.YStandardEx.Path;
			/ @ %Core.YFileSystem $=
			(
				$dep_from %YBase.YStandardEx.Path;
				- 'using PathNorm = ystdex::file_path_norm<String>;'
					@ "namespace %YSLib::IO";
				/ "class template specialization %ystdex::file_path_norm< \
					YSLib::String>" -> "class YSLib::IO::FilePathNorm";
			),
			$dep_from "DS makefiles";
			/ %Core.YFileSystem -> %Service.FileSystem,
			/ %Service $=
			(
				/ %YFile => %File,
				/ %YFile_(Text) => %TextFile
			)
			);
			/ @ "class %Path" @ %FileSystem $=
			(
				+ "using ypath::(pop_back, push_back)",
				/ DLD "implementation" @ "function %Normalize" ^ "%ImplExpr"
					~ "%ImplRet"
			)
		),
		/ @ %CHRLib.CharacterProcessing $=
		(
			+ "static assertion for type parameter"
				@ "function template %ToASCII",
			/ DLD "simplified 4 inline functions %MBCToUC"
				^ "macros %(PDefH, ImplRet)"
		),
		/ $dev "explicitly specified endianness of UCS-2 and UTF-16 encoding \
			as same as the endianness of type %CHRLib::ucs2_t being implemented"
	),
	/ @ "class template %path" @ %YBase.YStandardEx.Path $=
	(
		+ "template parameter with default argument \
			'class _tNorm = ystdex::path_norm<typename _tSeqCon::value_type>'",
		+ 'using default_norm = ystdex::conditional_t< \
			std::is_default_constructible<norm>::value, norm, \
			file_path_norm<value_type>>';
		/ "default constructed object" ^ "%default_norm" ~ "%norm"
	);
	/ $dev $build @ "DS makefiles" $=
	(
		/ @ "projects %(YBase, YFramework)" $=
		(
			/ "generated object files with source extension",
				// This avoids conflicts of different source files with same \
					base name.
			/ "generated files for each directory",
				// This avoids conflicts of files in different directory with \
					same name.
			/ "dependency generation as devkitARM makefile %base_rules"
				^ '-MMD -MP -MF' ~ '-MM -o',
			/ "restricted %BINFILES only for '*.bin'" ~ "for '*.*'",
				// This avoids duplicated postfix '.o' being added to the \
					targets.
			/ "run to remove all files under build directory" @ "target %clean",
			* "missing '.PHONY' 'rebuild' 'all'" $since $before b132
		),
		- "redundant 'rebuild' target" @ "project %ARM7"
	)
),

b472
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			+ %NPL $=
			(
				+ 'using ystdex::byte',
				+ "struct %NPL"
			);
			+ %NPLA1
				$= (+ "structs (NPLA; NPLA1)");
			/ %Configuration $=
			(
				/ ('using YSLib::string;', 'using YSLib::ValueNode;',
					"function, function template" %LoadNPLA1) >> %NPLA1,
				/ "function %TransformConfiguration"
					-> "function %TransformNPLA1" @ %NPLA1
			)
		),
		/ %YSLib.UI $=
		(
			/ %YStyle $=
			(
				+ "function %RollColor" @ "namespace %Drawing",
				+ DLB "workaround for G++ 4.7.1"
					@ "function template %StyleMap::Add";
			),
			/ "default style for %Button",
				// More flat.
			+ %ExStyle $=
			(
				+ "function %InitExStyles",
				+ "style %Aoi"
			),
			/ DLD "simplified implementation"
				@ "function %WidgetLoader::TransformUILayout" @ %Loader
		)
	)
),

b471
(
	/ %YFramework $=
	(
		/ %YSLib.Adaptor.Image $=
		(
			/ "static function %ImageCodec::Convert"
				-> "function %HBitmap::operator CompactPixmap() const",
			/ @ "class %HBitmap" $=
			(
				(
				+ "constructor with pitch delta value \
					'explicit HBitmap(BitmapPtr, const Size&, size_t = 0)'";
				+ "constructor 'explicit HBitmap(const CompactPixmap&)'"
				),
				/ "forbade non-class type overloaded as string type to prevent \
					recursive call when passed unsupported argument such as \
					'const wchar_t*'" @ "2 constructor templates, member \
					function template %SaveTo",
				+ "function %GetPixels",
				+ "functions %(operator[]; GetScanLine)",
				(
				$dep_from "class %UnknownImageFormat";
				+ "constructor 'HBitmap(const HBitmap&, BitPerPixel)'"
				)
			),
			(
			+ "class %UnsupportedImageFormat";
			/ "base class %LoggedEvent" @ "class %UnknownImageFormat"
				-> "%UnsupportedImageFormat"
				// Inherited constructors are not supported until G++ 4.8.
			)
		)
		* "VC++ project and filter did not reflect the update of freetype \
			directory structure" $since b459
	)
),

b470
(
	/ DLD "reduced 'return std::move' usage",
		// See $2014-01 @ %Documentation::Workflow::Annual2014.
	/ %YFramework.YSLib $=
	(
		/ %Core.YCoreUtilities $=
		(
			 + 2 "function templates %IsInClosedInterval",
			 / "2 function templates %IsInOpenInterval implemented without \
				requirement of having %operator>"
		),
		/ @ "function %HSLToColor" @ %UI.YStyle $=
		(
			+ "range assertions of hue, saturation and light components of \
				input value",
			/ DLD "simplified implementation" ^ "function %MakeGray"
		),
		/ %Adaptor.Image $=
		(
			+ "enumerator 'Image = 13,'" @ "enum %ImageFormat",
			/ @ "class %ImageMemory" $=
			(
				+ 'using Buffer = vector<octet>;';
				+ "function %GetBuffer",
				/ "constructor of raw buffer"
					-> "2 constructors and 2 constructor templates with \
					initializing type %Buffer (and format)",
					// For ownership safety, raw or empty buffers are no \
						longer supported.
				+ "explicitied deleted move constructor",
				(
					$dep_from "forward %HBitmap declaration"
					+ 'explicit ImageMemory(const HBitmap&, ImageFormat \
						= ImageFormat::BMP, ImageDecoderFlags \
						= ImageDecoderFlags::Default);'
				)
			),
			/ "parameter type of %ImageCodec::Load" -> 'ImageMemory::Buffer'
				~ 'const vector<octet>&',
			(
			+ DLD 'class HBitmap;' @ "namespace %Drawing";
			$dep_to "forward %HBitmap declaration"
			),
			+ "(2 function, 1 function template) %SaveTo" @ "class %HBitmap"
		)
	)
),

b469
(
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ %YStyle $=
			(
				+ "(1 inline function, 5 function templates) \
					%Styles::AddHandlers",
				/ "return type"@ "function %Styles::StyleMap::GetCurrent"
					@ %'YStyle' -> 'const_iterator' ~ 'const HandlerTable&'
			),
			(
			$dep_from "%Styles::AddHandlers";
			/ DLD "simplified controls default style initialization \
				implementation"
			),
			/ "box" @ "focused background of buttons" @ "default style"
				@ %Button -> "highlight edge"
		),
		+ "function %UI::FetchVisualStyleNames" @ %Helper.ShellHelper
	)
	(
	$dep_from %YFramework.Helper.ShellHelper;
	+ "drop down list to select visual styles" @ %YReader.ShlExplorer
	)
),

b468
(
	/ %YFramework.YSLib $=
	(
		/ DLD "simplified 2 noexcept declarations" @ %Core.YEvent,
		/ %UI $=
		(
			(
			/ @ "namespace %UI::Styles" @ %YStyle $=
			(
				+ 'using StyleItem = size_t;';
				(
				+ 'using Key = pair<std::type_index, StyleItem>;',
				+ 'Handler = std::function<void(PaintEventArgs&&)>;';
				(
				$dep_from %YBase.YStandardEx.Functional;
				+ 'using HandlerTable = unordered_map<Key, Handler, \
					ystdex::combined_hash<Key>>;'
				);
				+ 'using VisualStyle = pair<string, HandlerTable>;',
				+ "class %StyleMap"
				),
				+ "class %Painter",
				+ "function %Styles::FetchDefault"
			);
			+ "'Styles::StyleMap Styles;'" @ "class %GUIState" @ %YGUI;
			/ %'Button' $=
			(
				/ @ "class %Thumb" $=
				(
					+ 'Drawing::Hue hue = 180;';
					+ "function %GetHue,
					+ "enum %StyleItem";
					/ "paint event handlers" ^ "styles"
				),
				- "function %DrawThumbBackground"
			);
			/ @ "class %CheckBox" @ %Selector $=
			(
				+ "enum %StyleItem";
				/ "paint event handlers" ^ "styles"
			)
			),
			/ $dev $doc "simplified module names style",
			* $dev $doc "'\note' comment" @ "class %Control::ControlEventMap"
				@ %'YControl'
		)
	)
	+ "class template %combined_hash" @ %YBase.YStandardEx.Functional
),

b467
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			- "unecessary inline" @ "class scopes",
			/ %UI $=
			(
				/ "function %RequestToTop" => "%RequestToFront"
					@ %YUIContainer,
				/ "function %OnTouchDown_RequestToTopFocused"
					=> "OnTouchDown_RequestToFrontFocused" @ %YControl,
				/ "function %Panel::MoveToTop" => "%MoveToFront" @ %YPanel
			),
			/ "constructor with pointer to member function"
				@ "class template %GHEvent" @ %Core.YEvent $=
			(
				/ "implementation" ^ "lambda expression"
					~ "class template %ExpandMemberFirstBinder";
					// This made calling a handler initialized by a null \
						pointer to member function would raise undefined \
						behavior.
				* $comp "wrong instance of function template \
					%ExpandMemberFirstBinder used with more than 1 handler \
					parameter" $since b333
			)
		),
		/ %Helper.ShellHelper $=
		(
			+ "function %SwitchVisibleToFront",
			+ const @ "function %ContainerSetter::operator()" @ %ShellHelper
		)
	),
	(
	$dep_from "%SwitchVisibleToFront" @ %YFramework.Helper.ShellHelper;
	/ "made window visibility change" ^ "%SwitchVisibleToFront"
		~ "%SwitchVisible" @ %YReader.ShlExplorer
	);
	/ "Code::Block projects" @ "platform %MinGW32" $=
	(
		// It bloats object and library files of debug configuration a little. \
			Though currently seems to be no effect for release configuration, it \
			might probably be support in future.
		// See $2014-01 @ %Documentation::Workflow::Annual2014.
		+ '-fdata-sections -ffunction-sections' @ "complier options",
		+ '-Wl,--gc-sections' @ "linker options"
	),
	+ "function templates %(hash_combine, 2 hash_combine)"
		@ %YBase.YStandardEx.Functional
		-> "%yconstfn function templates"
	/ @ "makefiles" @ "platform %DS" $=
	(
		// This makes object files of both configuration smaller.
		+ '-fdata-sections -ffunction-sections' @ "macro %CFLAGS"
		+ ('-Wl,--gc-sections', ('-s' @ !"%debug configureation"))
			@ "macro %LDFLAGS"
	)
),

b466
(
	/ %YFramework.YSLib.UI $=
	(
		/ @ "drawing" @ "class %CheckBox" $=
		(
			+ "missing different look when disabled",
			/ "background colors",
			/ "drawing with gray colors when cursor out of the boundary"
		),
		/ @ "class %GUIState" $=
		(
			/ "merged key and touch independent focus pointers",
			/ "functions %(GetKeyDownPtr, GetTouchDownPtr)"
				-> "function %GetIndependentFocusPtr"
		)
	),
	* "missing invalidation after switching checkbox enablity"
		@ YReader.ShlExplorer $since b465
),

b465
(
	(
	+ "function %_gmtime32" @ 'defined(__MINGW32__) \
		&& !defined(__MINGW64_VERSION_MAJOR)' @ "platform %MinGW32"
		@ %YFramework.YCLib.NativeAPI;
			// MinGW.org toolchain links to MSVCRT 6.0 as default.
	+ $comp "MinGW.org runtime support" @ "platform %MinGW32"
	),
	+ "check button for disabling other settings" @ %YReader.ShlExplorer
),

b464
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			* "missing size activation and italic matrix set" @ "function \
				%Typeface::LookupBitmap" @ %Adaptor.Font $since b460,
				// This would cause the size corrupt and missing of italic \
					style effect.
			/ %UI $=
			(
				+ "functions %(MakeGray, MakeGrayOrColor)" @ YStyle;
				/ DLD "simplified background rendering implementation"
					@ "class %Thumb" @ %Button
			)
		),
		/ %YCLib $=
		(
			/ $dev 'makedir(char const* dir, mode_t)'
				-> 'makedir(char const* dir, ::mode_t)' @ %NativeAPI,
			/ $dep "implementation kept compatible to MinGW.org runtime"
				@ "platform %MinGW32" %YFileSystem$=
			(
				+ $dev "private declarations for C function %(_fileno, \
					_wfopen) copied from MinGW header"
					@ 'defined(__MINGW32__) && \
						!defined(__MINGW64_VERSION_MAJOR)',
					// These functions are not declared when macro \
						%__STRICT_ANSI__ is defined. For MinGW-W64 predefined \
						macros, see $2014-01 \
						@ %Documentation::Workflow::Annual2014 for details.
				^ $dev ('::_stat' ~ '::stat', '::_wstat' ~ '::wstat')
					@ "implementation" @ "function %HDirectory::IsDirectory"
			)
		)
	)
	/ $dev %YBase.LibDefect.String $=
	(
		(
			/ @ "improved condition macro check" $=
			(
				+ "C++11 check with '__cplusplus >= 201103L'",
				- "libstdc++ version check"
					// It was fixed for MinGW-W64 by removal of macro \
						definition %_GLIBCXX_HAVE_BROKEN_VSWPRINTF", so no \
						necessity for version number to be explicitly filtered.
			);
			+ $comp "support for non MinGW-W64 runtime like MinGW.org"
		),
		^ '{}' ~ '0' "as pointer object initializers to eliminate \
			warning [-Wzero-as-null-pointer-constant]."
	),
	/ $dev $build @ "project configurations" $=
	(
		/ @ "Code::Block project files" $=
		(
			/ "set compiler as null" @ "raw projects %(YBase, YFramework)",
			+ "-Wcast-align" @ "project %YBase" @ "platform MinGW32",
				// Cast increasing alignment is in some 'reinterpret_cast' in \
					CHRLib.
			+ "-Wnon-virtual-dtor -Wunreachable-code" @ "all projects"
				@ "platform MinGW32"
				// Some like "-Winit-self" remain untouched because they are \
					already enabled by some other options like "-Wall" or \
					"-Wextra".
		),
		/ @ "makefiles" @ "platform %DS" $=
		(
			+ ("-Wunreachable-code" @ "%CFLAGS",  "-Wnon-virtual-dtor"
				@ "%CXXFLAGS"),
			+ "-Wcast-align" @ "%CFLAGS" @ "project %(YBase, YSTest_ARM7)"
		)
	),
	^ "light green color as background" @ "setting panel"
		@ %YReader.ShlExplorer;
		// To avoid ilusion of checkbox border thickness, see $2014-01 @ \
			%Documentation::Workflow::Annual2013 for details.
),

b463
(
	+ $dev $repo "tags (from 'V0.2' to 'V0.4' for build revisions 'b200', \
		'b300' and 'b400' respectively), of 3 'PreAlpha' revisions",
	+ $doc "directory structure and build instructions" @ "readme document",
	/ %YFramework.YSLib.UI $=
	(
		+ "function templates %(Restart; 2 Setup; SetupByTimer)" @ %Animation,
		- "function template %transform_pixel_ex" @ %YStyle,
		(
		+ "enum class %CursorState" @ %YControl;
		/ @ "class %Thumb" $=
		(
			/ "protected member 'bool bPressed;'" -> 'CursorState csCurrent;'";
			+ "function %GetCursorState"
		);
		/ "drawing for thumb when cursor out of the boundary" @ %Button $=
		(
			/ "drawing background with gray colors",
			/ "drawing focus box with gray color"
				@ "function %DrawThumbBackground";
		)
		)
	)
),

b462
(
	/ %YFramework $=
	(
		$dev
		(
		/ %YModules $=
		(
			* "wrong macro for text interface of %Service" $since b461,
			* "wrong file name" @ "%YFM_YSLib_Core_YFunc" $since b461
		);
		+ %(CHRLib, YCLib.YSLib.Adaptor, YSLib.Core, YSLib.Service, YSLib.UI,
			NPL, Helper).YModules;
		^ "macros %'YFM_*'"
		),
		/ "parameter type 'IWidget*'" -> 'IWidget&' @ "static member function \
			%DefaultInvalidate; using alias %Invalidator"
			@ "class %InvalidationUpdater" @ %YSLib.UI.Animation
	),
	^ $dev "macros %'YFM_*'" @ %YReader,
	/ DLP "updated library %freetype" @ "library using"
		$= (^ $re_ex(b459) "updated freetype 2.5.1 with several files remained \
			from freetype 2.4.11" ~ "freetype 2.5.0.1")
		// See [Documentation::Designation @@5.4.1.3].
),

b461
(
	/ %YBase $=
	(
		+ "macro %ynothrowv" @ %YDefinition;
		+ 'const' @ "%subscriptive_iterator::operator(*, ->)"
			@ %YStandardEx.Iterator,
		/ "nothrow exception specifications according to WG21/N3242"
			^ "macros %(ynothrow, ynothorwv)"
			// Macro %ynothrow used for explicit specification, \
				and %ynothrowv used for narrow constraints.
	),
	- 'ynothrow' @ "all destructors",
	+ 'ynothrow' @ "all %is_undereferenceable",
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				/ %Image $=
				(
					/ @ "class %HMultiBitmap" $=
					(
						+ "class %iterator";
						+ "friend function %is_undereferenceable for %iterator"
					),
					+ "static member function template \
						%ImageCodec::LoadSequence"
				),
				+ ('using std::unordered_multimap;', \
					'using std::unordered_multiset') @ "namespace %YSLib"
					@ %YContainer,
				(
				$dep_from %Core.Cache;
				/ "glyph cache" @ "class %Typeface" @ %Font ^ "%GMRUCache \
					with 2047 default max entries" ~ "%unordered_map"
				)
			),
			/ %Core $=
			(
				/ DLD "template parameter %_tCont %ValueNode::operator[] \
					normalized" @ %ValueNode => "%_tCon",
				(
					+ %Cache
						$= ( + "template class %GMRUCache");
					/ "function template %LookupCache" @ %YCoreUtilities
						>> %Cache
				),
				- "explicit declared destructor" @ "class %LoggedEvent"
					@ %YException
			)
		),
		(
		+ $dev %YModules
			$= (+ "macros %'YFM_*'");
		^ $dev "macros %'YFM_*'" @ %YSBuild
		)
	)
),

b460
(
	/ %YFramework $=
	(
		* $dev "constructor %RegisterKey" @ "%UNICODE undefined"
			@ %'YCLib_(MinGW32)'.MinGW32 $since build b435
			$= (^ "%RegOpenKeyExW" ~ "%RegOpenKeyEx"),
		/ %YSLib $=
		(
			/ @ "class %TextManager" @ %Service.TextManager $=
			(
				/ "class %Iterator" => "%iterator";
				+ 'using const_iterator = iterator',
				/ "functions %(GetBegin, GetEnd)" -> "%(begin, end)"
					// Note that %(cbegin, cend) is not very necessary \
						because of C++1y's %std::(cbegin, cend).
				/ %"class iterator" $=
				(
					* "non-reference return type incompatible to ISO C++ \
						bidirectional iterator requirements" $since b273,
					* "wrong %pointer_type of base" $sivce b273
				),
				(
					+ "function template %CacheLookup" @ %YCoreUtilities;
					/ DLD "simplified cache lookup with slightly different \
						exception string" ^ %"CacheLookup" @ %YFont
				)
			),
			/ %Core.ValueNode $=
			(
				- "2 functions %(begin, end) for %ValueNode",
					// Member functions and %std::(begin, end)are enough.
				/ @ %"class %ValueNode" $=
				(
					+ 'using iterator = Container::iterator;',
					+ 'using const_iterator = Container::const_iterator;',
					/ "functions %(GetBegin, GetEnd)" -> "%(begin, end)"
				)
			),
			/ %UI $=
			(
				/ %WidgetIterator $=
				(
					/ "widget iterator member function names %(GetBegin, \
						GetEnd)" => "%(begin, end)"
						@ "macro %DefWidgetChildrenGetter",
					/ "widget iterator type name %Iterator" => "%iterator"
						@ "macros %(DefWidgetBegin, DefWidgetEnd, \
						DefWidgetMemberIteration, DefWidgetMemberIterationBase)"
				),
				/ @ "class %(UIContainer, Panel)" $=
				(
					/ "member type %Iterator" => "%iterator",
					/ "functions %(GetBegin, GetEnd)" -> "%(begin, end)"
				),
				/ "member type %Iterator" => "%iterator"
					@ ("classes %(ListBox, DropDownList)" @ %ComboList,
					"classes %(ATrack, AScrollBar, ScrollableContainer)"
					@ %Scroll, "class %DialogBox" @ %UIContainerEx),
				/ 'using Iterator = const_iterator;' -> "using declarations of \
					base class members %(iterator, const_iterator)"
			),
		)
		/ "template parameter" @ "function template %MakeUCS2LEString#2"
			@ %CHRLib.CharacterProcessing ^ "ADL and %std::begin"
			~ "function %begin"
	),
	/ %YBase.YStandardEx $=
	(
		- "2 function templates %(begin, end) for %path" @ %Path,
			// Member functions and %std::(begin, end) are enough.
		/ "function templates %is_undereferenceable" @ %Memory >> %Iterator
	)
	/ $dev "member type %Iterator" => "%iterator" @ "class %ReaderBox"
		@ %ShlReader
),

b459
(
	/ %YFramework $=
	(
		/ $dev $build "disabled warning (C4520, C4800)" @ "VC++ project",
			// See $2013-11 @ %Documentation::Workflow::Annual2013.
		/ $dev %YCLib $=
		(
			- "all 8 macros 'VK_*'" @ "platform %Win32" @ %Keys,
				// To prevent macro pollution and redefinition of macros \
					in "winuser.h".
			/ %NativeAPI $=
			(
				/ "namespace %platform_replace" @ "platform %Win32"
					>> "all platforms",
				(
					+ "header inclusion '<direct.h>'";
					* "deprecated function '::mkdir' used" @ "platform %Win32"
						$since b298
						$= (^ '::_mkdir' ~ '::mkdir')
						// The POSIX function 'mkdir' in global namespace \
							scope is deprecated by Microsoft for ISO C++ \
							conformance.
				)
			)
		),
		/ DLD "implementation" @ "function %File::Rewind"
			 @ %YSLib.Service.YFile ^ "macro %ImplExpr" ~ "macro %ImplRet"
			// 'ImplRet' is intended to use return statement while 'ImplExpr' \
				is intended to return a void typed expression. The latter is \
				clearer in this case.
	),
	/ DLP "updated library %freetype" @ "library using" $=
	(
		/ "made use of common makefile to be actual used by platform %MinGW32";
		^ $re_ex(b420) "updated freetype 2.5.1 with several files remained \
			from freetype 2.4.11" ~ "freetype 2.5.0.1"
			// See [Documentation::Designation @@5.4.1.3] .
	)
),

b458
(
	/ $dev %YFramework $=
	(
		/ %YSLib $=
		(
			+ "(2 static member function; function template) \
				ImageCodec::LoadForPlaying" @ %Adaptor.Image,
			/ $dev "explicitly defaulted constructors as workaround \
				guarded by conditional inclusion 'YB_IMPL_GNUCPP && \
				YB_IMPL_GNUCPP < 47200'" @ "%IValueHolder" @ %Core.YObject
		)
		/ %YCLib $=
		(
			/ %Platform $=
			(
				/ "macro %YCL_PLATFORM_DS" => "%YF_Platform_DS",
				/ "macro %YCL_PLATFORM_MINGW32" => "%YF_Platform_MinGW32",
				/ "macro %YCL_PLATFORM" => "%YF_Platform",
				/ "macro %YCL_HOSTED" => "%YF_Hosted",
				(
				+ "macro %YF_Platform_Win32",
				+ "macro %YCL_Min32" @ "defined(YF_Platform == \
					YF_Platform_MinGW32 || YF_Platform == YF_Platform_Win32)";
				/ "macro %YCL_MULTITHREAD" -> "%YF_Multithread"
					// Now defined as non-zero for Win32 platforms only when \
						%_MT is defined. Note this is a breaking change \
						because for MinGW32 because now user should use \
						'-mthreads' in the compiler command line, otherwise \
						%YF_Multithread would not indicate a multithreaded \
						environment.
				)
			),
			(
			$dep_from "%YCL_Win32",
			/ $dev "all %YCL_MinGW32 without MinGW interface dependencies"
				-> "%YCL_Win32"
			),
			+ $build "workaround of color enumerator constant definition \
				without constexpr for Visual C++ 2013" @ %Video
		),
		* "missing '../MinGW/include' for inclusion" @ "Code::Blocks project"
			@ "platform %MinGW32" $since b431
	),
	/ %YBase $=
	(
		/ $dev $build "specified option '/Za'" @ "VC++ project configuration",
			// Disabled extensions.
		/ %YStandardEx $=
		(
			* "wrong use of %yconstexpr for function templates" @ %CString
				$since b329 $= (^ "%yconstfn" ~ "%yconstexpr"),
				// This would cause warning C4180 on VC++ 2013 with warning \
				level /W1.
			/ $dev %Iterator $=
			(
				/ @ "class template %pointer_iterator" $=
				(
					- "explicitly defaulted move constructor";
					* $comp "missing workaround of move constructor for Visual \
						C++ 2013" $since b454
				),
				/ @ "class template %pseudo_iterator" $=
				(
					- "all 'yconstfn inline'" -> yconstfn,
						// This would cause warning C4141 on VC++ 2013 with \
							warning level /W1.
					* "missing workaround of move constructor and move \
						%operator= for Visual C++ 2013" $since b454
				),
				* "missing workaround of move %operator= for Visual C++ 2013"
					@ "class templates %(pair_iterator, \
					indirect_input_iterator)" $since b454
				(
				$dep_from "%YB_IMPL_CLANGPP";
				+ "workaround for Visual C++ 2013 and Clang++ 3.4 of ''"
				)
			),
			/ @ "class %ifile_iteraotr" @ %CStandardIO $=
			(
				/ "constructor for stream reference"
					-> "explicit constructor for %std::FILE",
				/ "return type" @ "function %get_type" -> 'std::FILE*'
					~ 'istream_type*';
				- "%istream_type",
				* $comp "incompatible for implementations with %std::FILE* \
					as cv-void" $since b245
					// See $2013-11 @ %Documentation::Workflow::Annual2013.
			)
		),
		/ $dev %YDefinition $=
		(
			+ "macro %YB_IMPL_CLANGPP for LLVM/Clang++ implemntation",
			+ '#	define ynothrow __attribute__ ((nothrow))'
				@ "!YB_HAS_NOEXCEPT && YB_IMPL_GNUCPP >= 30300";
				// For Visual C++ when 'YB_IMPL_MSCPP >= 1200', there exists \
					'__declspec(nothrow)' with almost same semantics with \
					'throw()' but different syntax.
		)
	)
),

b457
(
	/ %YFramework.YSLib $=
	(
		/ %Adaptor.Image $=
		(
			+ "3 static functions %DetectFormat" @ "class %ImageCodec";
			/ "detected file format firstly by type before by file extensions"
				@ "classes %(HBitmap, HMultiBitmap)"
			),
			/ "FreeImage message output routine not produced warnings"
				^ "%yunused",
			(
			+ "enum class %ImageDecoderFlag",
				// Currently only values of GIF/ICO/JPEG are supported.
			+ "decoder flags support" @ "constructors"
				@ "classes %(HBitmap, HMultiBitmap)"
			),
			/ 'using ImageFormat = int;' -> "enum class %ImageFormat"
		),
		/ %Service.Timer $=
		(
			+ "assertion of non-zero interval"
				@ "function %Timer::Refresh",
			+ "function %Timers::CheckTimeout for %Timer"
		),
		/ %UI $=
		(
			(
				$dep_from "%Timers::CheckTimeout";
				/ "input state refreshing supported for zero interval"
					@ "class %InputTimer" @ %YGUI
			),
			/ @ "class %InvalidationUpdater" @ %Animation $=
			(
				/ "merged last state as ready state" $=
				(
					+ mutable @ "data member %Ready",
						// Now the ready state would be modified if the \
							animation is not lasted.
					- "function %IsLast"
				),
				(
				+ 'using Invalidator = std::function<bool(IWidget*)>;',
				+ "static function %DefaultUpdater";
				+ 'Invalidator Invalidate{DefaultInvalidate};';
				/ "enabled custom invalidator" @ "function %operator()"
				)
			)
		)
	),
	/ %YBase $=
	(
		+ $design "assertion for non-EOF value" @ "%ifile_iterator::operator++"
			@ %YStandardEx.CStandardIO,
		/ "warning level" @ "VC++ project" -> '/W4' ~ '/W3'
	),
	^ DLD "%noncopyable" ~ "all use of %DelCopyCtor" @ "class definitions",
	^ "%DefDeCtor" ~ "class %ReadingList" @ %YReader.ReadingList
),

b456
(
	/ @ "library %FreeImage" $=
	(
		/ "simplified plugin functions" $=
		(
			/ "exposed struct %PluginNode",
			+ "function %FreeImageEx_GetPluginNodeFromFIF",
			- "functions %(FreeImage_GetFormatFromFIF, \
				FreeImage_GetFIFMimeType, FreeImage_GetFIFExtensionList, \
				FreeImage_GetFIFDescription, FreeImage_GetFIFRegExpr, \
				FreeImage_FIFSupportsReading, FreeImage_FIFSupportsWriting, \
				FreeImage_FIFSupportsExportBPP, \
				FreeImage_FIFSupportsExportType, \
				FreeImage_FIFSupportsICCProfiles, FreeImage_FIFSupportsNoPixels"
				// These functions are unnecessary once struct %PluginNode is \
					exposed.
		),
		/ $dev $build @ "makefiles" $=
		(
			+ "-std=c++11" @ "%CXXFLAGS" @ "MinGW32 makefile",
			+ "-Wno-attribute" @ "%(CFLAGS, CXXFLAGS)" @ "MinGW32 makefile",
			+ "-pipe" @ "%(CFLAGS, CXXFLAGS)" @ "(DS, MinGW32) makefiles",
			- "-fpermissive" @ "%(CFLAGS, CXXFLAGS)" @ "DS makefile"
		);
		/ @ "recompiled"
	),
	/ %YFramework $=
	(
		/ %YSLib.Adaptor.Image $=
		(
			(
			+ "class name declaration %MultiBitmapData";
			+ "class %HMultiBitmap";
			+ "function %swap for %HMultiBitmap"
			),
			/ @ "constructor %ImageCodec" $=
			(
				+ "FreeImage debug output process setting with 'YDTraceDe'",
				+ "saving and restoring 'errno' during initializing FreeImage"
			)
		),
		/ @ "namespace %platform" @ %YCLib.YCommon $=
		(
			$dep_from "namespace spelling error";
			+ "function %FetchTraceThreshold";
			/ "macro %YF_TraceLevel" ^ 'platform::FetchTraceThreshold()'
				~ 'platform::Discriptions::Informative'
		),

	),
	* $design "some spelling errors" $=
	(
		/ $doc @ "meta documentations" $since b393,
		(
		* "namespace %Discriptions" => "%Descriptions" @ %YCommon $since b432;
		$dep_to "namespace spelling error"
		),
		/ $doc %Documentation.ProjectRules $since b436
	),
	/ DLB "project build options" $=
	(
		- $revert(b299) "all macro definitions of %_GLIBCXX_DEBUG"
			@ "Code::Blocks projects" @ "platform %MinGW32",
		- $revert(b297) '-D_GLIBCXX_DEBUG' @ "all macro %CFLAGS" @ "makefiles"
			@ "platform %DS"
		// See $2013-11 @ %Documentation::Workflow::Annual2013.
	),
	* "wrong button text" @ "animation test" @ %YReader.ShlExplorer
		$since b455
),

b455
(
	- $dev $build "redundant solution platforms %('Any CPU', 'Mixed Platforms')"
		@ "VC++ project platform configuration",
	/ %YFramework $=
	(
		/ %Helper $=
		(
			* "Win32 exception unhandled when host window has been destroyed"
				@ "function %HostRenderer::Update" @ "platform %Win32"
				$since b426;
		),
		/ %YSLib $=
		(
			+ "function template %Messaging::Renew" @ %Core.Task,
			/ %UI $=
			(
				/ @ "namespace %UI" @ %Animation $=
				(
					(
					$dep_from %Core.Task;
					+ "function templates \
						%(AnimateTask; AnimateConnection; Animate)"
					),
					(
					/ "class %StateUpdater" @ "class %AnimationTask"
						-> "class %InvalidationUpdater" @ "namespace %UI";
					- "class %AnimationTask",
					+ "function %InvalidationUpdater::IsLast",
					+ "function %ResetState for %InvalidationUpdater"
					),
					+ "class template %GAnimationSession"
					(
					$dep_from %YWidget;
					/ "reduced invalidation when invisible to improve \
						animation performance"
					)
				),
				/ %YWidget $=
				(
					/ DLD "non-inline function %Invalidate of 1 parameter"
						-> "inline function",
					+ 2 "functions %InvalidateVisible"
				)

			)
		),
		/ $design "attached function name to several Win32 exception \
			descriptions to distinguish different exception sources"
			@ %'YCLib_(MinGW32)'
			// Specially, only 4 %SetWindowPos are effected. It is primarily \
				for debugging convenience, so function names in unnamed \
				namespace are also used without any change.
	),
	/ %YReader.ShlExplorer
	(
		(
		/ DLD "animation implementation" ^ %"GAnimationSession";
		* "crashing on reentering reader shell" $since b451
		),
		(
		$dep_from %YFramework.YSLib.UI.Animation;
		+ "button to control animation" @ %YReader.ShlExplorer
		)
	)
),

b454
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %YMessage $=
				(
					/ @ "class %MessageQueue" $=
					(
						* $dev "wrong 'const Message&&' parameter"
							@ "function %Push" $since b317,
							// It should be 'Message&&' to enable move \
								semantics.
						/ DLD "all member functions except constructors"
							-> "non-inlined member functions or with macros \
							%(PDefH, ImplRet)"
					),
					/ @ "class %Message" $=
					(
						* "redundant declaration of %operator<" $since b317,
						(
						+ mutable @ "declaration of data member %content";
						- "const qualifier" @ "return type"
							@ "function %GetContent"
						)
					),
					* "missing 'YF_API'" @ "friend function %operator== for \
						%Message" $since b362
				),
				/ %YMessageDefinition $=
				(
					/ @ "enum %MessageSpace" $=
					(
						/ "value" @ "enumerator %Paint" -> '0x002F' ~ '0x00AF',
						+ "enumerator declaration 'Bound = 0x0014,'"
					),
					/ "shell message macros" $=
					(
						/ "case of cases" -> "partial camel case"
							~ "all capital" $=
						(
							/ "SM_NULL" = > "SM_Null",
							/ "SM_SET" = > "SM_Set",
							/ "SM_PAINT" = > "SM_Paint",
							/ "SM_TASK" = > "SM_Task",
							/ "SM_INPUT" = > "SM_Input"
						),
						/ "substitution with prefix 'YSLib::Messaging::'"
							~ 'Messaging::',
						(
						(
						$dep_from "%MessageSpace";
						+ "macro %SM_Bound"
						),
						$dep_from "%YPP_Comma",
						+ 'DefMessageTarget(SM_Bound, pair<shared_ptr<Shell>, \
							Message>)'
						),
						(
						$dep_from "%Message",
						- "const qualifier" @ "return type"
							@ "function template %FetchTarget"
						)
					)
				),
				/ @ "static function %Shell::DefShlProc" @ %YShell $=
				(
					(
					$dep_from %YMessageDefinition;
					+ "handling for %SM_Bound"
					),
					/ "return type" -> "%void" ~ "%int"
				),
				/ %YObject $=
				(
					+ "class template %HeldEqual";
					+ "function template %AreEqualHeld";
					/ "function %operator="
						@ "class templates %(ValueHolder, PointerHolder)"
							^ "%AreEqualHeld"
						~ "%ystdex::examiners::equal_examiner::are_equal"
						// To keep weak_ptr equal comparable for holders.
				),

			),
			/ @ "%class Animation" @ %UI.Animation $=
			(
				/ @ "class %StateUpdater" $=
				(
					* "missing YF_API" $since b451,
					(
					+ "member 'IWidget* WidgetPtr'";
					/ "member initializer"
						-> "default constructor with 2 default arguments";
					/ "updating" ^ "widget pointer"
						~ "widget reference passed by parameter",
					/ 'bool operator()(UI::IWidget&, const Rect&)'
						-> 'bool operator()() const'
					),
					+ "explicitly defaulted copy constructor",
					+ "explicitly defaulted copy %operator="
				),
				/ "constructor" ^ "%StateUpdate object as default";
				+ "constructor with widget reference and priority as \
					parameters",
				- "static functions %(AlwaysUpdate, UpdateOnce)",
				- "all ('IWidget&', 'const Rect&')"
					@ "type signatures except which in constructors"
			),
			/ %Adaptor $=
			(
				/ @ "namespace %YSLib" @ %YReference $=
				(
					+ 'using std::owner_less',
					+ "function templates %operator(==; !=) for %weak_ptr",
					- "unnecessary comparison template functions(==, !=) for \
						'shared_ptr&&'",
					+ DLD "explicit inline for all comparison function \
						templates"
				),
				/ $dev "made to be compatible with non-GNU implementation"
					@ %YNew $=
				(
					/ "including '<ext/malloc_allocator.h>' only"
						@ YB_IMPL_GNUCPP,
					+ "alias template %MemoryListAllocator"
				)
			)
		),
		* "%platform::terminate wrongly called %std::terminate"
			@ !"platform %DS" @ %YCLib.YCommon $since b296,
		// This would cause infinite recusive call to %std::terminate, as \
			currently did when initialized by %Helper::Initialization which \
			set the C++ standard library terminate handler as \
			%platform::terminate.
	),
	(
	$dep_from %YFramework.YSLib.UI.Animation;
	* $comp "incomplete update of test animation" $since b451;
	),
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			+ $doc "group %preprocessor_helpers"
				$= (+ "macros %(YPP_Empty, YPP_Comma)"),
			/ "macro %yjoin" => "YPP_Join",
			/ "macro %yJOIN" => "YPP_Concat";
			/ "macros %(YPP_Join, YPP_Concat)" => "group %preprocessor_helpers",
			+ "macro definition %_CRT_SECURE_NO_WARNINGS"
				@ 'YB_IMPL_MSCPP >= 1400',
			* "wrong definition of macros %(YB_LIKELY, YB_UNLIKELY)"
				@ !'YB_IMPL_GNUCPP >= 29600' $since b313
		),
		/ @ %YStandardEx $=
		(
			/ %Any $=
			(
				/ @ "class %any_ops::holder" $=
				(
					+ YB_API,
					/ $dev "explicitly defaulted constructors as workaround \
						guarded by conditional inclusion 'YB_IMPL_GNUCPP && \
						YB_IMPL_GNUCPP < 47200'"
						// Visual C++ 2013 complains about explicitly \
							defaulted move constructor.
				),
				* $dev "missing excluding of 'pod_storage&'" @ "member \
					(constructor template, function template %operator=)"
					@ "class template %pod_storage" $since b352
			),
			+ "defaulted operator=" @ "class templates %(any_input_iterator, \
				any_forward_iterator, any_bidirectional_iterator)"
				@ %AnyIterator;
			+ "Microsoft Visual C++ 2013 compatibility" $=
			(
				+ "conditional not included corresponding code as workaround \
					of compiler crash about 'YB_HAS_MEMBER(value)', \
					%ystdex::has_mem_value"
					@ YB_IMPL_MSCPP @ %TypeOperations,
				+ "workaround of unsupported explicitly defaulted move \
					constructor and move %operator=" @ "class templates" \
					("%(container_adaptor, sequence_container_adaptor)"
					@ %Container, "%input_any_iterator" @ %AnyIterator)
			)
		)
	),
	/ $dev $build "VC++ projects" $=
	(
		/ "set DS projects as platform %ARM",
		/ "set Win32 projects with uniformed settings on project targets, \
			optimization options(to default), VC++ directories, \
			warning level('/W3'), character set(to default) and linker \
			options(to default)"
	),
	+ $dev $repo "pattern globs ('*.lastcodeanalysissucceeded', \
		'*.nativecodeanalysis.all.xml', '*.nativecodeanalysis.xml')"
		@ "file %.hgignore"
),

b453
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ "parameter" @ "function %(DrawRectRoundCorner, RectDrawArrow)"
				^ 'const PaintContext&' ~ 'const Graphics&, const Point&',
			/ "protected member function 'void PaintBox(const Graphics&, \
				const Rect&)'" @ "class %CheckBox" @ %Selector
				-> 'void PaintBox(const PaintContext&, const Size&)',
			(
			$dep_from %Service.YDraw;
			/ @ "function %DrawTrackBackground" @ %Scroll $=
			(
				- "unnecessary clip area update";
				* "out of range clip area assignment for widgets"
					@ "!defined %YSL_UI_ATRACK_PARTIAL_INVALIDATION" $since b295
			),
			- "unnecessary clip area update"
				@ "function %Refresh" @ "classes %(Button, Label, \
				ProgressBar, CheckBox, CheckButton, TextList)",
				// Since all drawing is now friendly to partial invalidation.
			/ "clip area passed with directly for drawing text"
				@ "Button::Refresh";
			+ $comp "restricted area painting guarantee for basic renderer of \
				widgets";
				// The invalidated area is guaranteed not to be enlarged by \
					painting.
			* $comp "previous frame form buffered renderer of desktop did not \
				be handled properly for clipping area enlarged when updating"
				$since b294;
				// Namely, the actual painted area is not the same as \
					accumulated invalidated bounding region, which essentially \
					cause over painting.
			)
		),
		/ %Core.YGDIBase $=
		(
			+ "functions %(UpdateClipArea; UpdateClipArea)",
			/ @ "class %Rect" @ %YGDIBase $=
			(
				/ "nothrow default constructor"
					-> "explicitly defaulted default constructor",
				/ "excluded unstrictly empty rectangle argument as not \
					contained" @ "functions %(Contains, ContainsStrict)",
				* "assertion failed for function %Contains when the rectangle \
					is unstrictly empty" $since b452;
			),
		),
		/ %Service $=
		(
			/ %YDraw $=
			(
				$dep_from %"class %Rect";
				- "graphics functions 'Draw*' without boundary parameter",
				* "too strict assertion with unstrictly empty boundary argument"
					@ "functions %(DrawPoint, DrawHLineSeg, DrawVLineSeg, \
					DrawLineSeg)" $since b452,
				/ "assertion failed for zero with or height boundary"
					@ "functions %(PlotVLineSeg, PlotHLineSeg)" $since b446;
					"function %PlotLineSeg" $since b452; "function \
					%(DrawHLineSeg, DrawVLineSeg, DrawLineSeg)" $since b446),
				(
				* "end point restricted to be invisible when just at right or \
					bottom edge of the boundary"
					@ "functions %(PlotHLineSeg, PlotVLineSeg)" $since b452;
				* $comp "end point restricted to be invisible when just at \
					right or bottom edge of the boundary" @ "functions \
					%(DrawHLineSeg, DrawVLineSeg)" $since $before b132;
				* $comp "right bottom point invisible for coincident boundary"
					@ "%DrawRect" $since $before b132
				)
			)
			/ @ "%(SequenceTransformer, VerticalLineTransfomer)::operator()"
				 @ %YBlit $=
			(
				(
				/ "dereferenceable check"
					-> "assertion checking for being not undereferceable",
					// It is user's responsibility.
				* $comp "unsupported for iterator type without 'opeator&&' \
					with size_t for pixel sequence tranformers" @ %Service
					$since $before b132
				),
				+ 'const'
			)
		)
	),
	/ $dev $build @ "platform %MinGW32" $=
	(
		^ $dev $deploy $re_ex(b411) "MinGW[gcc version 4.8.2 (Built by \
			MinGW-W64 project)] i686-4.8.2-release-posix-dwarf-rt_v3-rev0"
			~ "MinGW[gcc version 4.8.1 (Built by MinGW-builds project)] \
			x32-4.8.1-release-posix-sjlj-rev0 [release-sjlj]";
			@ "platform %MinGW32",
			// Unchanged: Target=i686-w64-mingw32, Thread model: posix. \
				Changed exceptions implementation: Dwarf2.
		/ @ "recompiled library %FreeImage" $=
		(
			^ "libpng-1.6.6 with standard configuration header file \
				%Source/LibPNG/pnglibconf.h" ~ "libpng-1.6.3",
			* $dev "slash of 'Source/LibJPEG/simd' file list which would cause \
				object file of assembly source not be cleaned by 'make clean' \
				call" $since b431
		)
	)
),

b452
(
	/ %YFramework.YSLib $=
	(
		/ %Service $=
		(
			/ %YDraw $=
			(
				/ "all return type" @ "functions ('Draw*', 'Plot*', 'Put*', \
					'Fill*')" -> "%void" ~ "%bool",
					// Several return values are difficult to determine.
				- "all validity check of %Graphics object for functions \
						%DrawPoint",
					// Now all drawing and plotting functions have no check. \
						User code should check the validity. This also has \
						same effect on functions 'Draw*' or some other \
						internal drawing functions of %YStyle and other UI \
						modules.
				+ "function %PlotLineSeg",
				+ $doc "group %Grpahics2D" @ %YDraw,
				/ "functions 'Plot*' supported for custom boundary other than \
					boundary of buffer",
				+ "graphics functions 'Draw*' with alternative boundary \
					parameter"
					// "%FillRect" @ %YDraw with boundary parameter has an \
						intersection operation. Use "%FillRect" @ %YBlit if \
						it is not needed.
				+ "functions %FillRect for boundary which is same as input \
					area",
			),
			* "no effect drawing with oblique lines which has endpoint not in \
				area" $since $before b132,
				// Runtime check make some worse performance.
			/ "all function templats %FillRect" @ %YBlit => "%FillRectRaw"
				// To avoid ambiguity with %FillRect @ %YDraw.
		),
		/ "return type" @ "function %DrawRectRoundCorner" @ %UI.YStyle
			-> "%void" ~ "%bool",
		/ %Core.YGDIBase $=
		(
			/ @ "functions %(Contains, ContainsStrict)"
				@ "class %Rect" $=
			(
				* "wrong result when augument rectangle at right or bottom line"
					$since b224,
				/ "excluded empty rectangle argument as not contained"
			),
			* "missing YF_API" @ "%operator(&, |) for %Rect" $since b362
		)
	)
),

b451
(
	/ %YFramework $=
	(
		/ @ "class %AnimationTask" @ %UI.Animation $=
		(
			+ "priority paramter with default argument" @ "constructor",
				// Default priority changed.
			(
			+ "static function %AlwaysUpdate" @ "class %AnimationTask";
			/ "initialization default %Update" @ "constructor"
				^ "%UpdateOnce" ~ "%AlwaysUpdate";
			+ "static function %DefaultUpdate" => "%UpdateOnce"
			),
			/ "parameter to initialize %std::function instance"
				@ "constructor template" ^ "non-reference type"
		),
		/ "parameter to initialize %std::function instance"
			@ "constructor template" ^ "non-reference type"
			@ "class template %GAutoTask" @ %Core.Task,
		/ %Service.YBlit $=
		(
			/ DLD "implementation" @ "%operator()" @ "struct %RectTransformer"
				^ "%Blit",
			* "wrong check for maximal boundary components calculated"
				@ "function %BlitBounds" $since b446,
				// It caused wrong boundary calculated for %FillRect and other \
					functions for negative source or destination minimum \
					boundary components.
		)
	),
	/ %YReader.ShlExplorer $=
	(
		/ "detatched test UI with setting panel as new independent test panel",
		+ "simple animation test";
	)
),

b450
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				+ "function %IsPrefixedIndex" @ %ValueNode,
				/ %YObject $=
				(
					- "function template %MakeValueObjectByPtr",
					(
					+ "constroctor template for instance of %std::unique_ptr \
						with default deleter" @ "class %ValueObject";
					$dep_to "node %unique_ptr constructor"
					),
					+ "function template %operator[] for paths of instances \
						of %ystdex::path" @ "class %ValueNode"
				),
				/ @ "class template %GAutoTask" @ %Task $=
				(
					(
					+ 'using Callable = _fCallable;';
					+ "conversion operators to %(Callable&, const Callable&)"
					),
					(
					+ "priority paramter with default argument"
						@ "constructor template",
						// Default priority unchanged.
					- "member initializer" @ "%TaskPriority"
					)
				)
			),
			+ %ContentType @ %Service;
			/ %Animation $=
			(
				(
				+ "constexpr object %AnimationPriority",
				$dep_from %Core.Task;
				+ "priority paramter with default argument"
					@ "constructor template" @ "class %AnimationTask"
					// Default priority changed.
				),
				/ "function %Start" => "%Renew"
			);
		),
		(
		$dep_from "node %unique_ptr constructor";
		* "exception safety not kept when constructing %ValueObject failed"
			@ ("function template %PackNodes" @ %YSLib.Core.ValueNode
			$since b340), ("function %TransformConfiguration"
			@ %NPL.Configuration $since b341),
			("function %WidgetLoader::TransformUILayout"
			@ %YSLib.UI.Loader $since b433)
		),
		/ %Helper.Initialzation,
		(
			+ "function %LoadNPLA1File",
			$dep_from %YSLib.Serivce.ContentType;
			+ "function %FetchMIMEBiMapping"
		)
	),
	/ %YBase.YStandardEx $=
	(
		(
		+ "struct %is_equal" @ %Functional;
		+ "function templates %(2 starts_with, 2 ends_with)" @ %String
		),
		* "missing destructor" @ "class template %path_norm"
			@ %Path $since b408
	),
	/ %YReader $=
	(
		(
		$dep_from %Helper.Initialization;
		/ "selection of readers" ^ "MIME type/file extension mapping"
			@ %ShlExplorer
		),
		/ "reading line number for bookmark" ^ "%stoul" ~ "%(stoi, std::stoi)"
	),
	/ DLD "normalized template parameters as convention"
		$= ("%_tForward" => "%_tFwd")
),

b449
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			+ "full validation on adjusting boundary of host windows"
				@ "function %HostRenderer::Update" @ %HostRenderer,
				// See $2013-10 @ %Documentation::Workflow::Annual2013.
			/ DLD "data member %GUIApplication::UIResponseLimit initialization"
				@ %GUIApplication ^ "member initializer",
				// This emphasizes the magic default value as public interface.
			/ %ShellHelper $=
			(
				$dep_from "%Messaging::NormalPriority";
				^ 'Messaging::NormalPriority' ~ '0x80';
				$dep_from %YSLib.Core.Task;
				/ "function template %PostTask" @ %ShellHelper
					>> %YSLib.Core.Task
			)
		),
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "wrong point of invalidated area" @ "member functon \
					%BufferedRenderer::SetSize" @ %YRenderer $since b237,
				* "wrong offset set when minimal size component reached in \
					host mode" @ "function %BorderResizer::Wrap",
					@ %Border $since b445
					// Old offset not kept from this point, so the dragged \
						point would move.
				+ %Animation $=
				(
					$dep_from %Core.Task;
					+ "class %AnimationTask"
				)
			),
			+ "function template %DrawPolygon" @ %Service.YDraw,
			/ %Core $=
			(
				/ %YMessage $=
				(
					/ $dev @ "class %Message" %=
					(
						/ DLD "all constructors made inlined",
						+ ynothrow @ "constructor with 'ValueObject&&' \
							parameter"
					),
					/ @ "class %MessageQueue" $=
					(
						+ 'using BaseType = multimap<Priority, Message, \
							std::greater<Priority>>';
						/ "function %GetBegin"
							-> "using %BaseType::(cbegin, begin)",
						/ "function %GetEnd"
							-> "using %BaseType::(cend, end)",
						/ "function %IsEmpty"-> 'using BaseType::empty;',
						/ "function %Clear" -> 'using BaseType::clear;',
						/ "function %Erase" -> 'using BaseType::erase;',
						/ "function %GetSize" -> 'using BaseType::size;',
						+ 'using BaseType::crbegin;',
						+ 'using BaseType::crend;',
						+ 'using BaseType::rbegin;',
						+ 'using BaseType::rend;'
						+ 'using BaseType::max_size;',
						+ 'using BaseType::insert;'
					),
					- "object %DefTimeout",
					+ 'yconstexpr Priority NormalPriority(0x80);'
				),
				+ %Task
					$= (+ "class %GAutoTask")
			)
		),
		(
		$dep_from %YSLib.(Core.Task, UI.Animation);
		+ $dev "header inclusion for %(UI::(Border, Hover, Animation),
			Core::Task)" @ %Build;
		),
		/ $dev "simplified including header paths in same 2nd level project"
			@ "public headers",
		/ %NPL $=
		(
			/ $design "implementation" @ "function template %Analyze"
				@ %SContext ^ "%std::move";
			/ %Configuration $=
			(
				+ "(function; function template) %LoadNPLA1"
				/ "function %TransformConfiguration supported for multiple \
					unnamed node value";
				+ "output support for prefixed indexed name like '$n' as \
					unnamed node value";
			)
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "class template specialization %sequene_split for %std::tuple"
			@ %Tuple,
		/ $dev "included '<tuple>'" @ %YContainer -> '<ystdex/tuple.hpp>'
			// To avoid missing of specialized meta operations for %std::tuple.
	),
	/ $doc "documentation" $=
	(
		- $dev "temporary TODO lists" @ %Documenation.Ex,
		/ "reconstructed %LICENSE.TXT" $=
		(
			^ "new copyright notice style with copyright symbol '©'",
			^ "2-Clause BSD style cluases for permissions(without otherwise \
				specified)" ~ "GPLv3",
			+ "DISCLAIMER chaper"
		),
		/ "%Readme.zh-CN.txt updated with brief introduce text about the YSLib \
			project",
	)
),

b448
(
	/ %YBase.YStandardEx $=
	(
		/ %Functional $=
		(
			/ "class template %call_projection forwarded parameters in tuple \
				without '&&'",
			(
			+ "specialization of class template %call_projection for instances \
				of %std::function";
			+ "support for any caller handle type which has specialized of \
				%call_projection" @ "class template %expanded_caller"
				// Now not only built-in function types are supported.
			),
			(
			/ @ "class template %expanded_caller"
				$=
			(
				* "missing overloaded selection excluding for cv-qualified \
					copy/move candidate parameter" $since b447,
				+ $dev "static assertion for non-object caller type"
			),
			* "initialized reference type instead of object type for callable \
				object lvalue" @ "function template %make_expanded" $since b447
				// This would cause the callable object initialized by lvalue \
					in %expanded_caller out of lifetime when called hence the \
					bahavior would be undefined and easily crash the program.
			)
		),
		+ "meta function template %(remove_rcv_t; exclude_self_ctor_t)"
			@ %TypeOperation
	),
	(
	$dep_from %YBase.YStandardEx.TypeOperation;
	/ DLD "all constructor template overloading excluding types to prevent \
		copy/move constructor matched" ^ "%ystdex::exclude_self_ctor_t"
		~ "%ystdex::enable_if_t";
		// For %YSLib::Path, etc. See below for others.
	* $dev "some volatile reference overloading matched not prevented"
		$since b352
		// For %(ystdex::any $since b352, YSLib::ValueObject $since b376). \
			%NPL::Configuration untouched.
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				+ %Hover
					$= (+ "class %HoverUpdater" @ %YControl),
				/ @ %YBrush $=
				(
					+ "template function %UpdatePixels";
						// Function template default arguments firstly \
							intended to be used. See $ref b448 $note \
							"CWG issue 226".
					+ "static function %ImageBrush::UpdateComposite"
				)
			),
			/ %Core.YCoreUtilities $=
			(
				/ "interval parameter type of function \
					%RestrictInClosedInterval" -> "template parameter" ~ "%int",
				- "unnecessary overloaded function %FetchZero"
			)
			/ %Service $=
			(
				+ "member template %operator()"
					@ "class template %BlitAlphaPoint" @ %YPixel,
				* $dev $build "odr-use involving %ystdex::normalized_max"
					@ "several specializations"
					@ "alpha composite implementation" $since b440
					$= (^ "%ystdex::normalized_max::get"
						~ "undefined entity %ystdex::normalized_max::value")
			)
		),
		+ "function template %PostTask" @ %Helper.ShellHelper,
		/ %YCLib $=
		(
			/ $dev "platform %MinGW32" @ %NativeAPI $=
			(
				+ "guaranteed macro %WIN32_LEAN_AND_MEAN defined (as 1 if not \
					defined) before including <Windows.h>",
				+ "guaranteed macro %WINVER defined (as 0x0501 if not defined) \
					including <Windows.h>"
					// At least Windows XP/Windows 2003 is required. Previous \
						MinGW32 used 0x0502 as default %WINVER.
			),
			* "wrong (G, R, A) component types" @ "getters"
				@ "class templates %(BGRA, RGBA)" @ %Video $since b441
		)
	)
),

b447
(
	/ %YFramework $=
	(
		/ $dev @ "macro %_yInterfaceHead" @ %YBaseMacro $=
		(
			+ "protected defaulted default constructor",
			^ $design "%DefDeDtor for destructor declaration"
		),
		/ DLD "all typedef declarations" @ %'YCLib_(MinGW32)'
			-> "alias declaration",
			// Missed: $since b434.
		/ %YSLib.Core.YEvent $=
		(
			$dep_from "%ystdex::make_expanded";
			+ "constructor support for expandable callable object as \
				initailizer" @ "%GHEvent";
			+ $comp "support for expandable callable types" @ "%GEvent"
		);
	),
	/ %YBase.YStandardEx $=
	(
		* "no sequence guarantee when %operator, overloaded for pervious call \
			result" @ "function template %seq_apply" $since b303,
		/ DLD "reduced directly nested yforward in
			%ystdex::(decay_forward, decay_copy) calls",
		/ "all %decay_forward calls" -> "yforward invocations"
		- DLD "'std::' prefix for" ("names declared by using declaration"
			@ %TypeOperation) @ "namespace %ystdex except for using \
			declarations and macros",
		- DLD public @ "inherited %std::integral_constant \
			instances(inclucding %std::(true_type, false_type))",
		/ %Functional $=
		(
			(
			+ "partial specialization for instances of %std::function for \
				%ystdex::(make_parameter_tuple, return_of)";
			+ $comp "instances of %std::function support for \
				%ystdex::(parameter_of, paramlist_size)"
			),
			+ "specialization of templates %is_covariant for function types",
			(
			$dep_from "variant traits for tuple";
			+ "specialization of templates %is_contravariant for function types"
			),
			(
			+ "function templates %(call_projection; expanded_caller)";
			+ "function template %make_expanded";
			),
			+ "meta operation templates %(make_parameter_tuple_t, return_of_t, \
				parameter_of_t)",
		),
		/ %Variadic $=
		(
			+ "constexpr static function %size"
				@ "class template %variadic_sequence",
				// Like %std::integer_sequence::size in C++1y.
			+ $dev $doc "Doxygen group %vseq_operations",
			+ "meta operation templates %(sequence_split, sequence_split_t, \
				sequence_cat, sequence_cat_t, make_successor_t, \
				make_natural_sequence_t, sequence_element, sequence_element_t, \
				sequence_project, sequence_project_t, sequence_reverse, \
				sequence_reverse_t)",
		),
		/ %TypeOperation $=
		(
			+ "binary type traits templates %(is_covariant, is_contravariant)";
			$dep_to "variant traits"
		),
		+ %Tuple $=
		(
			(
			$dep_from "variant traits";
			+ "specialization of templates %(is_covariant, is_contravariant) \
				for %std::tuple"
			$dep_to "variant traits for tuple";
			),
			(
			$dep_from %Variadic;
			+ "specialization of templates %(sequence_cat, sequence_element, \
				sequence_project, sequence_reverse) for %std::tuple"
			)
		)
	)
),

b446
(
	/ %YFramework $=
	(
		/ %Service $=
		(
			/ %YDraw $=
			(
				/ "function %PlotPixel for %Size" -> "accepting %Rect",
					// Conversion constructor of %Rect is used.
				+ "functions %(PlotHLineSeg, PlotVLineSeg)",
				* "function %DrawCircle" $since b394;
					// See $2013-09 @ %Documentation::Workflow::Annual2013.
				+ "function %FillCircle"
			),
			* "blitting boundary and overload for non-zero source offset"
				@ %YBlit $since b370 $=
			(
				* "wrong result" @ "function %BlitBounds" $=
				(
					* "wrongly ignored source offset for minimal boundary \
						components",
						// This caused result left/top boundary wrong for \
							positive source offset.
					* "missing check for maximal boundary components"
						// The maximal boundary components should be less than \
							source size components, otherwise access could be \
							out of range for negative source offset.
				);
				* "out of minimal source boundary for negative source offset"
					@ "function template %Blit"
			)
		),
		* "wrong offset and clip area for blitting" @ "implementation"
			@ "function %ImageBrush::DefaultUpdate" @ %UI.YBrush $since b443
	)
),

b445
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %GUIState" @ %YGUI $=
				(
					/ $lib $design "deferred coordinate computation for \
						wrapped leaving event" @ "function %Wrap",
						// A little performance improved when the event should \
							not be triggered.
					/ "%ControlLocation" => "%CursorLocation"
				),
				/ @ "class %BorderResizer" @ %Border $=
				(
					+ "member declaration 'bool HostMode = false;'",
					+ "support for host mode to adjust original boundary after \
						moving"
				)
			),
			/ %Service $=
			(
				/ %YBlit $=
				(
					* "increment types" @ "%class BlitScannerLoop" @
						$since b438,
						// Unsigned type wrongly used instead of signed type. \
							This would cause access violation on calling \
							('Blit<true, false>', 'Blit<false, true>').
					(
					/ "function template %BlitScale with 4 full specializations"
						-> "function template %BlitScaleComponent with 2 full \
						specializations";
					$dep_to "%BlitScale"
					)
				),
				(
				$dep_from "%BlitScale";
				* $comp "wrong specializations of function template %BlitScale \
					for ('<true, false>', '<false, true>')" $since b187
				);
				* $comp "access violation on calling blit for left-right or \
					up-down swapping only mode" $since b187;
			)
		),
		/ %Helper $=
		(
			/ "touch dragging handler checked for handle flag"
				@ "function %DragWindow" @ %HostedUI,
				// Same as b444.
			/ @ "class %HostRenderer" @ %HostedUI $=
			(
				* "missing resizing buffer and host window" $since b384,
				/ "supported automatically moving host window when bound \
					widget location is not origin";
				(
					$dep_from %(UI.Border, Helper.InputManager);
					/ "supported moving host window for border resizer"
				)
			)
		)
		/ @ "namespace %platform_ex::Windows" %'YCLib_(MinGW32)'.Win32GUI $=
		(
			(
			+ "class %ScreenBuffer with swap functions and user-defined move \
				assignment operator";
			+ 'using ScreenBuffer::Resize;' @ "class %ScreenRegionBuffer"
			),
			+ "function %WindowReference::((GetClientLocation, \
				GetClientSize; GetClientBounds), SetClientBounds)";
			+ ('using WindowReference::GetClientLocation;',
				'using WindowReference::GetClientSize;',
				'using WindowReference::GetClientBounds;',
				'using WindowReference::SetClientBounds;') @ "class %Window"
		)
	)
),

b444
(
	/ %YFramework.YSLib $=
	(
		/ "dragging and touch held handler implementation"
			@ %(YSLib.UI, Helper.HostedUI) ^ "%GUIState::\
			ControlLocation" ~ "%GUIState::LastControlLocation";
		/ %UI $=
		(
			- $revert(b169) "last control location"
				// To prevent potential misuse of last location during \
					different widgets independently focused by common GUI state.
				$= (- "data member %LastControlLocation" @ "class %GUIState"
					@ %YSLib.UI),
			/ %YWidgetEvent $=
			(
				$dep_from %Core.YMessage;
				+ "UI message exception class %UIEventSignal"
			),
			/ "touch dragging handler checked for handle flag" @ %YControl,
				// Now dragging behavior can be override before handled \
					through setting 'Handled' member of cursor event argument.
		),
		/ %Core $=
		(
			+ "message exception classes %(MessageException; MessageSignal)"
				@ "namespace %Messaging" @ %YMessage;
			/ "handled for %Messaging::MessageSignal"
				@ "function %Application::OnGotMessage" @ %Application
		),
		* "maximum value overflow when destination size component less than \
			coordinate component of destination point" @ "function %BlitBounds"
			@ %Service.YBlit $since b438;
			// This could cause invalid iterator access when source area \
				totally out of destination buffer boundary.
		+ "enum class BorderArea; class %BorderResizer" @ %Border
	),
	+ $dev $doc "Doxygen group 'exception_types' for exception types"
		@ %YBase.YDefinition,
	/ %YReader $=
	(
		(
		$dep_from %YFramework.YSLib.UI;
		+ "border of 4px" @ "setting panel" @ %'file explorer',
			// Now invisible or translucent.
		),
		(
		$dep_from  %YFramework.YSLib.Service.YBlit;
		* $comp "crashed after quickly dragging around the information window"
			$since b438 @ %'text reader'
		)
	)
),

b443
(
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			(
			+ "function %InvalidateParent" @ %YWidget;
			/ $lib "improved performance of default move and touch handling"
				^ "%InvalidateParent" ~ "%Invalidate" @ %YControl
			),
			+ "constructors for references to %CompactPixmap" @ "class %Image",
			/ %YBrush $=
			(
				/ "alias template %GBrushUpdater as std::function accetped 2 \
					offset parameters",
				/ "class %ImageBrush" $=
				(
					/ "types of updater",
					/ "member %Offset"
						-> "split to member %(DstOffset, SrcOffset)",
					+ "support for painting according to destination offset"
					// The old member %Offset is source offset.
				),
				(
				$dep_from %Border;
				/ "class %(BorderStyle, BorderBrush)" @ %YBrush >> %Border
				)
			),
			+ %Border,
			/ DLD "simplified scroll bars initialization" @ %Scroll,
			(
				+ "event enumerator %ClickAcross" @ %YWidgetEvent;
				+ "%ClickAcross support" @ "class %GUIState" @ %YGUI
			)
		),
		+ "middle button support" @ "class %InputManager" @ "platform %MinGW32",
		/ DLD "ensured all initializers for aggregate initialization"
			^ "preferred ISO C++11 braced initializers" ~ "equal initializers"
	),
	/ %YReader
	(
	$dep_from %YFramework.YSLib.UI.YControl;
	/ $comp "about window colors changed only for area clipped by the desktop"
		@ %ShlAbout
	),
	/ DLD "simplified indents of all multi-line yunseq blocks"
),

b442
(
	/ %YFramework $=
	(
		/ %YCLib.Video $=
		(
			+ "integer type conversion functions"
				@ "class templates %(BGRA, RGBA)" @ %Video;
		),
		/ %YSLib.Service $=
		(
			/ "implementation" @ "pixel blending" @ "platform %DS",
				// Passing by reference for pixels makes it as efficient as \
					integer type pixel format as b440, and smaller binary \
					size(as same as b441).
			* "non-normalized integer type used as pixel type for blending"
				@ "platform %MinGW32" $since b440;
				// This made the result less precise and would underflow in \
					certain cases.
			+ %YPixel $=
			(
				+ "namespace %Shaders" $=
				(
					$dep_from %YBlit;
					/ DLD "non-specialized blending template supported alpha \
						bits as template argument",
					+ DLD "static assert of alpha bits range"
						@ "specialized template for %RGBA<5, 5, 5, 1>"
					- "width specified from template paramter",
					+ "template functions %(BlendComponent, BlendCore,
						2 Blend)",
					/ @ "class template %GPixelCompositor" $=
					(
						$dep_from %YBase.YStandardEx.Rational
						+ $dev "static assertions to check some non-normalized \
							types",
							// The member templates for alpha composite need \
								normalized values. Direct use of some integral \
								types is forbidden by static assertions.
						+ "explicit specialization \
							'struct GPixelCompositor<1, 0>'";
						/ $design "reusing with private inheritance"
							~ "public inheritance of specializations except \
							for 'struct GPixelCompositor<1, 0>'"
					),
					+ "function templates %(CompositeComponent; 3 Composite)",
					+ DLD "static assertions for alpha blending types"
				)
			),
			/ @ "namespace %Drawing" @ %YBlit $=
			(
				*= $dev "wrong use of 'yconstexpr' for member functions and \
					function templates" @ "class template %GPixelCompositor"
					$since b440
					$= ("all 'yconstexpr' -> 'yconstfn'");
				/ "class template %GPixelCompositor, structs %(
					BlitTransparentPoint, BlitAlphaPoint)"
					>> ("namespace %Shaders" @ %YPixel),
				/ "class template %GPixelBlender" -> ("blending templates"
					@ "namespace %Shaders" @ %YPixel),
			)
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "unary type trait template %is_normalizable" @ %Rational,
		/ "function template %ystdex::raw" @ %Memory => "%get_raw"
	)
),

b441
(
	/ %YFrmaework $=
	(
		/ %YSLib $=
		(
			/ %Service.YBlit $=
			(
				- "alias %MonoIteratorPair",
				* $dev "difference for operands of conditional expressions",
					@ "some specializations of pixel compositor" $since b440,
				(
				$dep_from %YAdaptor;
				/ $dev "implemented specialization of pixel blending with \
					%PixelType" ~ "integer type" @ "platform %DS"
				)
			),
			/ %UI.YBrush $=
			(
				+ "alias template %GBrushUpdater";
				/ @ "class %ImageBrush"
				(
				+ "static function %DefaultUpdate",
				+ "member 'GBrushUpdater<const Drawing::Image&> \
					Update = DefaultUpdate;'",
				+ "updater support" @ "function %operator()",
				/ "member %Image" => "%ImagePtr"
				)
			),
			/ %Adaptor $=
			(
				/ %Image $=
				(
					* "buffer overflow" @ "loading UCS-2 file name"
						@ "class %HBitmap" @ %Image $since b431
						// Overflow would happen when conversion from UCS-2 \
							string to ANSI for extension check.
					+ "support for R5G5B5 format"
						@ "static function %ImageCodec::Convert"
				),
				(
				$dep_from %YCLib.Video;
				+ "using %platform::(BGRA, RGBA)" @ %YAdaptor
				)
			)
		),
		/ @ "namespace %platform" @ %YCLib.Video $=
		(
			+ "class template %(XYZATrait; BGRA, RGBA)";
			/ "pixel type alias" ^ "%BGRA" @ "platform %MinGW32",
			/ @ "platform %DS" $=
			(
				/ "pixel type alias" ^ "%RGBA",
				+ "constructor accepting %ColorSet directly" @ "class %Color"
			);
			/ $dev "unified underlying type of color space members as member \
				of %PixelType",
			+ DLD "alignment constraints" @ "pixel types"
				// To ensure the pixel type has the same alignment as original \
					type on DS, which is significant efficient, though still \
					significant less efficient on painting under release \
					configuration than last revision.
		)
	),
	+ $dev $doc "Doxygen command '\relates' for some non-member function \
		declarations outside class scope"
),

b440
(
	/ %YBase.YStandardEx $=
	(
		/ %Rational $=
		(
			+ "static function %get for defined speciliazations"
				@ "class template %normalized_max",
				// Since the 'value' was not defined, only non-odr using was \
					allowed.
			* "ambiguous binary relation operations between %fixed_point values"
				$since b260,
				// With constexpr restrictions(see $KNOWN_ISSUE), these \
					operations are not available during translation.
				$= (+ "binary %operator(==, !=, <, >) for %fixed_point"
					@ "namespace %ystdex")
			/ "conversion function" @ "class template %fixed_point"
				-> "constexpr function",
			(
			$dep_from "%modular_arithmetic"
			+ "specialiaztion of %modular_arithmetic for %"fixed_point"
			)
		)
		/ %CStandardInteger $=
		(
			+ "meta operation template %modular_arithmetic";
			+ "binary trait template %have_same_modulo"
		),
		/ %TypeOperation $=
		(
			+ $dev "alias declarations %(remove_const_t, remove_volatile_t, \
				remove_cv_t, add_const_t, add_volatile_t, add_cv_t, \
				remove_reference_t, add_lvalue_reference_t, \
				add_rvalue_reference_t, make_signed_t, make_unsigned_t, \
				remove_extent_t, remove_all_extents_t, remove_pointer_t, \
				add_pointer_t, aligned_storage_t)" @ "namespace %ystdex"
				// For C++1y compatibility. There seems no %std::align_union \
					implemented by libstdc++, so %align_union_t is deferred.
			/ "macro %YB_TYPE_OP_TEST_2 supported for use out of namespace \
				%ystdex",
			(
			+ "macro %YB_HAS_MEMBER";
			+ "unary type trait template %has_mem_value"
			)
		)
	),
	/ %YFramework.YSLib.Service $=
	(
		/ %YBlit $=
		(
			(
			+ "class template %GPixelCompositor",
			/ "merged class template %GPixelBlenderBase"
				-> "class template %GPixelBlender";
			- $comp "blit rounds",
				// In fact the removal of the round value make it more precise \
					to value calculated using floating point numbers.
			),
			+ "class template %BlitLineLoop",
			/ "2 function templates %BlitTransparentPixel"
				-> "class template %BlitTransparentPoint",
			/ "2 function templates %BlitAlphaPoint" -> "class template",
			/ $design "functor template parameter put after iterators"
				@ "function template %operator()"
				@ "class tempalte %BlitScannerLoop",
			- "class templates %(BlitBlendLine, BlitTransparentLine)
		);
		+ "function template %BlitGlyphPixels" @ %CharRenderer
	),
	(
	$dep_from %YBase.YStandardEx.TypeOperation;
	^ DLD "alias for type traits as possible except for \
		%YFramework::YBaseMacro" ~ "raw type traits";
	)
),

b439
(
	/ %YFramework.YSLib $=
	(
		* $dev $build "wrong case of including header %YBlit"
			@ "file %textlist.cpp" @ %UI $since b319,
			// It can cause build fail on case-sensitive file system.
		* $comp "class template %MoreConvertible" @ %Core.YCoreUtilities
			$since b206
	),
	/ %YBase $=
	(
		+ "alias declaration %ystdex::raw_tag" @ %YDefinition,
		/ %YStandardEx $=
		(
			/ %Rational $=
			(
				(
				$dep_from %YDefinition;
				^ DLD "%ystdex::raw_tag" ~ "private alias declaration \
					%internal_construct_tag";
				* $comp "specialization of %std::numeric_limits for \
					%ystdex::fixed_point" $since b260;
					// Missing typename for internal implementation.
				);
				/ @ "class template %fixed_point" $=
				(
					/ DLD "overloaded default parameter types"
						@ "SFINAE constructor templates",
					+ "constructor with 2 parameters as fraction",
					+ "raw value constructor"
					/ "restricted conversion template for arithmetic types",
					+ "constructor templates for %fixed_point with other base \
						types",
					/ DLD "overloaded multiplying algorithm implementations \
						for signed and unsigned types to avoid possible \
						warning",
					/ "operators inheritance" ^ "class template %operators"
						@ "class template %fixed_point",
						// The modulo is not implemented yet.
					+ "function %get"
				),
				(
				+ "template partial specialization %std::common_type for 2 \
					%ystdex::fixed_point";
				* "ambiguous binary arithmetic operations between %fixed_point \
					values" $since b260
					$= (+ "binary %operator(+, -, *, /) for %fixed_point"
						@ "namespace %ystdex")
				),
				+ "class template %normalized_max",
				- "function template %ystdex::exp2u"
			)
		),
		/ $dev @ "namespace %ystdex" @ %TypeOperation $=
		(
			+ 'using std::underlying_type;';
			+ "alias declarations %(decay_t, enable_if_t, conditional_t, \
				common_type_t, underlying_type_t, result_of_t)"
				// For C++1y compatibility. There seems no %std::align_union \
					implemented by libstdc++, so %align_union_t is deferred.
		),
		(
		+ %CStandardInteger;
		/ "meta operation template %make_fixed_width_int" @ %TypeOperation
			-> "%make_width_int with %('int_least*_t', 'int_fast*_t') \
			support and without non-exact width defauted types support"
			@ %CStandardInteger,
		/ "meta operation templates %(integer_width, make_signed_c)"
			>> %CStandardInteger
		),
		/ @ %Operators $=
		(
			* "2nd commutative operator wrongly implemented" @ %Operators
				$since b260;
				// Modifying const reference which is ill-formed if \
					instantiated.
			- "all templates with spelling 'euclidian'",
				// Boost.Operators is compatible with both spellings.
			(
			/ "all member" @ "namespace %operators" >> "namespace %ystdex",
			+ "class template operators2";
			+ "class template operators"
				// Compatible with Boost.Operators.
			)
		)
	),
	(
		$dep_from %YBase.YStandardEx.TypeOperation;
		^ DLD "alias for type traits as possible except for \
			%YFramework::YBaseMacro" ~ "raw type traits";
	)
),

b438
(
	/ %YFramework.YSLib.Service $=
	(
		/ "function template %BlitChar" @ %CharRenderer -> "%BlitGlyphLines \
			adapted to custom function object as line scanner",
		/ @ %YBlit $=
		(
			/ "2 function templates %BlitLine"
				-> "class template specializations %BlitLine with support for \
				parameterized iterator types",
			/ "extended all operations of pixel pointers to iteration types",
			- DLD "macro %YSL_FAST_BLIT and blit test code",
			/ "objects %'BLT_*', functions %('blit*', component_blend) except \
				for %biltAlphaPoint"
				-> "class templates %(GPixelBlenderBase; GPixelBlender)"
				// Now blending functions for different pixels can be used in \
					the same platform configuration.
			/ "function templates %biltAlphaPoint" => "%BiltAlphaPoint",
			/ "explicitly kept untouched value if boundary is not applicable"
				@ "function %BlitBounds",
			* "ignored boundary calculation" @ "%RectTransformer::operator()"
				$since b189,
				// Since %BlitBounds actually ensured all the arguments to be \
					initialized, it had no effect. Now the constraints \
					violation effects because %BlitBounds explicitly kept \
					untouched delta values.
			/ $revert_ex(b437) $design "all parameter types of blit \
				function" ^ "%SPos" ~ "%ptrdiff_t",
			^ $revert_ex(b437) "unsigned delta types and values" ~ "%ptrdiff_t"
				// Since the blit algorithms guarantees the non-negative delta \
					values and indices.
			(
			/ "return type @ %BlitScale" -> "%size_t" ~ "%ptrdiff_t",
			/ "all delta parameter types" ^ "%SDst" ~ "%ptrdiff_t",
			- "all non-negative checks" @ "block and scan line loop \
				implementations"
				// Zero checks are still handled. To be some bit efficient.
			)
			- "blit thresholds" @ "alpha composition algorithms"
		)
	)
),

b437
(
	* "significant FPS lag on DS" @ "file explorer" @ %YReader $since b436,
		// About 5x lag. Hack should have been considered for performance on \
			per-frame call.
	/ %Tools $=
	(
		+ %CreationTimeManager,
		+ DLD "readme file" @ "VC++ projects" @ %PredefinedMacroDetector
	),
	/ %YFramework $=
	(
		+ "function %Win32Exception::GetMessage" @ %'YCLib_(MinGW32)'.MinGW32,
		/ %YSLib $=
		(
			+ "member 'Point Offset;' as image drawing offset"
				@ "class %ImageBrush" @ %UI.YBrush,
			/ %Service.YBlit $=
			(
				/ $design "all interface and implementation of blit function"
					^ "%ptrdiff_t" ~ "%int",
				(
				+ "2 function templates %BlitTransparentPixel";
				+ "class template %BlitTransparentLine";
				- "class template %BlitTransparentLoop
				),
				(
				+ "class template %BlitBlendLine";
				- "class template %BlitBlendLoop"
				),
				- DLD "all explicit instantiation of %Blit" @ "file %yblit.cpp",
				/ "function template %Blit adapted to custom function object \
					as loop provider",
				/ "function %BlitScan accepted function object"
					~ "function object reference",
					// %std::ref should be used if copying is not intended.
				(
				+ "class template %BlitScannerLoop";
				+ "function template %BlitLines"
				);
				- "class templates %(BlitTransparentLoop, BlitBlendLoop)",
				/ $design "templates with function parameter of iterator types \
					at first after function object"
					// Thus other function parameters can be convenient for \
						passing through parameter pack.
			)
		)
	),
	+ $doc DLB "number of members of %std::placeholders requirement";
		// Currently _6 is needed by %YBlit.
),

b436
(
	/ %YFramework $=
	(
		+ "macro %(DeclDynWidget; DeclDynWidgetN; DeclDynWidgetN)"
			@ %YSLib.UI.Loader,
		+ $dev '#define YCL_Device_Cursor_FixedKey 1' @ "platform %DS"
			@ %YCLib.Platform
			// See $2013-08 @ %Documentation::Workflow::Annual2013.
	),
	/ DLD %YReader $=
	(
		/ "compacted NPL translation unit of about UI as LISP-style",
		/ "partial implementation" @ "setting UI"
			^ "NPL dynamic widget loading",
			// Layout manually adjusted.
		/ DLD "partial implementation" @ "explorer shell"
			^ "NPL dynamic widget loading"
	),
	/ "function %std::swap for %ystdex::any" @ %YBase.YStandardEx.Any
		>> "namespace %ystdex",
		// ADL is preferred.
	/ $repo "engineering fault tagged" ^ "hg bookmark" ~ "hg tag",
	/ "library files name with postfix '.d'" @ "debug configuration"
		@ "platform %MinGW32" $=
		// This makes DLL files of both debug and release configurations can \
			be placed in the same directory, which makes debug and path \
			confituration convenient.
	(
		/ $dev @ "configuration %debug" $=
		(
			/ "target %libYBase.a" => "%libYBased.a"
			/ "target %libYFramework.a" => "%libYFrameworkd.a"
		),
		/ @ "configuration %debug_DLL" $=
		(
			/ "target %YBase.dll" => "%YBased.dll"
			/ "target %YFramework.dll" => "%YFrameworkd.dll"
		)
	)
),

b435
(
	/ %YFramework $=
	(
		- "macro %(YSL_BEGIN, YSL_END, YSL_BEGIN_NAMESPACE, YSL_END_NAMESPACE)"
			@ %YBaseMacro,
		/ "macro %YCL_MINGW32" @ %YCLib.Platform => "%YCL_MinGW32",
		/ %'YCLib_(MinGW32)' $=
		(
			/ %MinGW32 $=
			(
				* "result of '::GetLastError()' might be overriden in \
					initializing argument of exception object before finishing \
					checking the error code" @ "macro %YF_Raise_Win32Exception"
					 $since b426,
					// The initialization of %std::string object might call \
						Win32 API and thus have effect on Win32 error code. \
						This means '::GetLastError()' should be called before \
						creating the exception object, or wrong error code \
						might be initialized.
				/ @ "class %Win32Exception" @ %MinGW32 $=
				(
					+ 'typedef ::DWORD ErrorCode;';
					+ "function 'explicit operator ErrorCode()'",
					(
					+ "static function %FormatMessage";
					/ "initialized exception message with Win32 error message"
					)
				),
				+ "class %RegisterKey; function %CheckWine" @ %MinGW32
			),
			/ %Win32GUI $=
			(
				+ "class %(ScreenBuffer; ScreenRegionBuffer)",
				+ "alpha premultiplying support" @ "screen buffer",
				+ "2 functions %UpdatePremultiplied"
					@ "class %WindowMemorySurface"
			)
		),
		/ %Helper $=
		(
			(
			$dep_from %'YCLib_(MinGW32)'.Win32GUI;
			/ "supported host transprent by per pointer bitmap alpha value"
				@ "class %Host::Window" @ "platform @MinGW32"
				@ %HostWindow $=
				// Top level hit test is also based on non-zero alpha value.
			(
				+ "data member %(UseOpacity, Opacity)",
				+ "function %UpdateFrom"
			)
			),
			- $revert(b431) "automatically set opacity as '0xFF' when \
				'WS_EX_LAYERED' set" @ "function %ShowTopLevel"
				@ "platform %MinGW32" @ %Helper.HostedUI
		)
	),
	+ "macro %yunused" @ %YBase.YDefinition
),

b434
(
	/ "all anonymous struct typedef declarations"
		-> "named struct declarations",
		// See $2013-08 @ %Documentation::Workflow::Annual2013.
	/ DLD "all typedef declarations except in directory %3rdparty"
		-> "alias declarations",
		// Ditto.
		// $b447: @ %YCLib_(MinGW32) missed.
	/ %YFramework.YSLib.UI $=
	(
		/ @ %Loader $=
		(
			/ "class template %GWidgetFactory"
				-> "function templates %(CreateUniqueWidget, RegisterLoader)",
			+ "class template %GWidgetRegister";
			(
				/ "alias %GWidgetCreatorMap accept function parameters \
					directly",
				- "function templates %(FetchWidgetMapping, CreateWidget)",
				/ "functions %(DetectWidgetNode, TransformUILayout, \
  					ConvertUILayout)" -> "class %WidgetLoader";
				/ $comp "widget loader implemented with no static duaration \
					object and being friendly to multithreading without data \
					race"
			),
			+ "class %DynamicWidget"
		),
		(
		/ @ "class %GUIState" @ %YGUI $=
		(
			// Check of offset for touch held event now is removed for client \
				hanlders.
			- "invalid offset check" @ "basic cursor handler for %TouchHeld",
			+ "function %CheckOffset"
		);
		+ "function %OnTouchHeld_DraggingRaw for user-specified dragging target"
			@ %YControl
		)
	),
	* DLB $revert(b432) "wrong location of VC++ project file for projects \
		%YFramework_(MinGW32)" $since b432,
	/ %YReader $=
	(
		$dep_from %YFramework.YSLib.UI;
		+ "dynamic widget loader initialization";
		/ DLD "implementation" @ "about UI" ^ "NPL dynamic widget loading"
			// This adds an additional panel and enlarges binary \
				significantly. Here it is not necessary, just being used as an \
				demo.
	)
),

b433
(
	/ $dev $doc Documentation $=
	(
		+ $doc "basic namespace rules" @ %NPL,
		(
		+ "workflow document %Workflow.2013.txt";
		+ "labeled paragraph %$STATE for current state" @ %Meta
		)
	),
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			- $revert(b240) "releasing focus on destruction" @ "class %Widget",
				// For convenience of unspecified order of widget destruction.
			+ %Loader @ %UI $=
			(
				+ "functions %(ParseRect, DetectWidgetNode, CheckChildName, \
					TransformUILayout, ConvertUILayout, AccessWidget)",
				+ "template alias %GWidgetCreatorMap",
				+ "function templates %(FetchWidgetMapping, CreateWidget, \
					2 AccessWidget)",
				+ "class template %GWidgetFactory"
			)
		),
		/ %Core.ValueNode $=
		(
			/ "function %GetNode" @ "class %ValueNode" => "%at",
			+ "function %AccessNode for container pointer";
			/ $design "inlined function %AccessNode for container reference"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Path $=
		(
			/ @ "class template %path" $=
			(
				(
				+ "constructor with base rvalue reference as parameter";
				/ DLD "delegating other non-copy/move constructors with base \
					temporaries"
				),
				+ "constructor template with base parameters"
			)
			* "type error implementation" @ "function %is_delimiter"
				@ "class template specialization %file_path_norm" $since b409
		),
		- "function templates %ystdex::at" @ %Container
	),
	/ DLD "normalized template parameters as convention"
		$= ("%(_tCont, _tSeqCont)" => "%(_tCon, _tSeqCon)")
),

b432
(
	* DLB "missing relocation of VC++ project file for projects %(YBase_(DS), \
		YFramework_(DS), YFramework_(MinGW32))",
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			/ @ '!defined(NDEBUG)' @ %YDefinition $=
			(
				+ "macro definition %YB_Use_YTrace",
				/ "macro %YB_USE_YASSERT" -> "macro %YB_Use_YAssert"
			),
			(
			/ $dep_from %YStandardEx.CAssert;
			/ "macro %(yconstraint, yassume)" @ %YDefinition
				>> %YStandardEx.CAssert
			)
		),
		/ %YStandardEx $=
		(
			/ $dev "unified format attribute with 'printf'" ~ 'ms_printf'
				@ "%sfmt<char>" @ %YStandardEx.String
				// It seems that macro '__USE_MINGW_ANSI_STDIO' is always \
					defined for C++.
			+ %CAssert $=
			(
				/ @ YB_USE_YTrace $=
				(
					+ "function %ytrace",
					+ "macro %YTrace"
				)
			)
		)
	),
	/ %YFramework $=
	(
		/ %YCLib.YCommon $=
		(
			(
				+ "namespace %Discriptions"
					$= (+ "enumeration %RecordLevel");
				$dep_to "%platform::Discriptions"
			),
			(
			/ $dev "assertion function" $=
			(
				/ "parameter order and assert string",
				^ DLD 'std::terminate' ~ "'std::abort' as termination",
				^ "standard output to 'stderr'"
					~ "platform dependent output function"
			);
			/ "(functions %yassert, macro %YAssert)"
				@ %YCommon >> %YBase.CAssert,
			);
			$dep_from %YBase.YStandardEx.CAssert;
			/ @ YB_USE_YTrace
				$= (+ "macros %(YF_TraceLevel, YTrace)")
		);
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				- "macro definition %YB_USE_YASSERT" @ '!defined(NDEBUG)'
					@ %Configuration,
				(
				$dep_from "%platform::Discriptions";
				+ 'using namespace platform::Discriptions;'
					@ "namespace %YSLib" @ %YAdaptor;
				$dep_to "exception level"
				)
			),
			/ %Core $=
			(
				/ $dev %YException $=
				(
					$dep_to "exception level";
					^ "typename %RecordLevel as member %LevelType"
						@ "exception class %LoggedEvent"
				),
				/ %ValueNode $=
				(
					/ "merged 2 function templates %AccessChild",
					+ "2 functions %AccessNodePtr",
					+ "function template %AccessPtr for type \
						'const ValueNode*'",
					+ "2 function templates %AccessChildPtr"
				),
				* $dev "missing excluding of 'GEvent&'" @ %GEvent
					@ "member template %operator= with 1 function parameter"
					@ "class template %GEvent" $since b293
					// This would cause recursive calls by self.
			),
			(
			/ $dep_from %Core.YException,
			/ DLD "throwing exceptions" ^ "different exception level"
				@ (%Adaptor.Font, Service.YGDI);
			)
		)
		/ @ "platform MinGW32" @ %Helper $=
		(
			/ DLD "all ('std::make_shared', 'ystdex::make_shared', \
				'ystdex::make_unique')" -> "ADL use without qualification",
				// Non-MinGW32 code still can't use this substitution, because \
					G++ 4.7.1 in devkitARM release 41 doesn't support. See \
					$known_issue_b298.
			(
			$dep_from %'YCLib_(MinGW32)'.Win32GUI;
			/ "window class registration" ^ ("trace",
				("exception class %Win32Exception" ~ "%LoggedEvent"))
			),
			* "unhandled %Win32Exception" @ "host window thread"
				@ "window closed" $since b426
				// Exit code is %::NTSTATUS error \
					'STATUS_STACK_OVERFLOW'(0xC00000FD).
				// For %::NTSTATUS error 'STATUS_CONTROL_C_EXIT'(0xC000013A), \
					it is expected when console window closed or Ctrl+C pressed.
		),
		* $comp "missing excluding of 'ValueNode&'"
			@ "constructor template with 1 function parameter"
			@ "class %Configuration" @ %NPL.Configuration $since b376,
		+ "class %WindowClass" @ %'YCLib_(MinGW32)'.Win32GUI
	),
	+ $doc "%Documentation::NPL",
	* $dev "header and source locations" @ "makefiles" @ "platform DS"
		@ "project %(YBase_DS, YFramework_DS)" $since b431
),

b431
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %HBitmap" @ %Adaptor.Image $=
			(
				+ "constructor with file name and specified image format",
				+ "constructor for different types of file names",
				/ "char-based file names with UTF-8 support" @ "constructors"
			),
			/ %UI.Console $=
			(
				/ "disabled platform dependent functionality"
					@ "class %Console";
				- $dev "header dependency" @ ("%DSMain" @ %Helper)
			)
		),
		/ "functions %platform_ex::(UTF8ToMBCS, WCSToMBCS)" @ "platform \
			%MinGW32" @ %YCLib.YCommon >> ("namespace %platform_ex::Windows"
			@ %'YCLib_(MinGW32)'.MinGW);
		/ @ "namespace %platform::Windows" @ %'YCLib_(MinGW32)'.MinGW $=
		(
			+ "3 functions %MBCSToWCS",
			+ "inline functions for native encoding conversion with length of \
				C style strings calculated at runtime;
			^ "'CP_ACP' as default arguments" @ "encoding transformation \
				functions" @ %'YCLib_(MinGW32)'.MinGW;
		),
		/ %Helper $=
		(
			/ @ "function %ShowTopLevel" @ %HostedUI $=
			(
				/ "blocked wating window pointer until being non-null";
				/ "set default opacity with '0xFF'";
				$comp $revert(b430) "windows maybe initialized being fully \
					transparent"
			),
			+ %Host
		),
		(
		+ %'Helper_(DS)';
		/ %(DSMain; Shell_DS) @ %Helper >> %'Helper_(DS)'
		)
	),
	+ "top level directory %Tools"
		$= (+ $dev "project %PredefinedMacroDetector"),
			// Generator to detect predefined macros. Generated file is a C++ \
				source file. Use preprocessing command line like "gcc -E" then \
				compile in hosted environment to get macros for cross compilers.
	+ DLD "common pre-defined macros" @ "platform %DS" @ "VC++ projects",
	+ $dev $repo "pattern globs ('__gen_*.*', '*.pdb', '*.idb', '*.ilk', \
		'*.exe', '*.obj', '*.tlog', '*.lastbuildstate', '*.unsuccessfulbuild')"
		@ "file %.hgignore",
	/ "3rdparty libraries" $=
	(
		/ @ "library %FreeImage" $=
		(
			/ DLD @ "all modified source files" $=
			(
				/ "all EOL markers are normalized as CR+LF",
				/ "removed all spaces at end of lines",
				/ "saved as UTF8 + BOM"
			),
			- "functions only supported in Win32: %(FreeImage_LoadU, \
				FreeImage_SaveU, FreeImage_GetFileTypeU, \
				FreeImage_GetFIFFromFilenameU, FreeImage_JPEGTransformU, \
				FreeImage_JPEGCropU"),
			/ "excluded files ('Source/FreeImageToolkit/JPEGTransform.cpp',
				'Source/MetaData/XTIFF.cpp')" @ "source list";
			/ @ "recompiled library %FreeImage" $=
			(
				^ "libjpeg-turbo 1.3.0" ~ "libjpeg-8d" $=
				(
					/ "overwritten source files",
					+ "custom configuration headers %(jconfig.h, config.h)"
						@ 'Source/LibJPEG/',
					+ "generated SIMD configuration file %jsimdcfg.inc"
						@ 'Source/LibJPEG/simd'
					+ "SIMD assembly files" @ "source list",
					+ "modified MinGW makefile"
				),
				^ "libpng-1.6.3 with standard configuration header file \
					%Source/LibPNG/pnglibconf.h" ~ "libpng-1.5.13",
				^ "zlib-1.2.8" ~ "zlib-1.2.7"
			)
		),
		* $doc "missing license for FreeImage" $since b417,
		+ $dev $doc "warning for using patched FreeType"
	),
	/ $dev $build "merged directories for %(YBase, YFramework) platform \
		extensions"
		// Directories with pattern '$(PROJECT)_$(PLATFORM)' are now put in \
			'$(PROJECT)' with name '$PLATFORM' as subdirectories.
),

b430
(
	/= DLD "ensured all if clause and member initializer for class objects \
		initialization" ^ "preferred ISO C++11 braced initializer syntax with \
		direct-initialization" ~ "equal initializer syntax with copy \
		initialization",
		// No instance of violation found.
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ "supported extra window style" @ ("function %CreateNativeWindow"
				%'YCLib_(MinGW32)'.Win32GUI; "function %ShowTopLevel"
				@ %HostedUI) @ "platform %MinGW32",
				// Defaulted as 'WS_EX_LAYERED'. Note the windows is totally \
					transparent after 'WS_EX_LAYERED' is set. Set opacity to \
					make the window visible.
			+ "units %(ScreenBuffer; HostRenderer)",
			/ %HostedUI $=
			(
				/ "non-inline functions %(GetHostRendererPtrOf, GetWindowPtrOf)"
					-> "inline functions",
				/ "function %MakeHostRenderer" -> "function template"
			),
			/ $dev @ "class %Window" %HostWindow $=
			(
				(
				$dep_from %'YCLib_(MinGW32)'.Win32GUI;
				/ "simplified class %Host::Window" ^ "class %HostWindow"
				),
				(
				-"2nd parameter" @ "constructor";
				+ "constructor with 1 parameter"
				)
			),
			/ "object %WindowClassName" @ "namespace %Host" @ %HostWindow
				>> %'YCLib_(MinGW32)'.Win32GUI;
			/ $dev "simplified header dependencies";
			/ $dev @ "namespace %Host" @ %GUIApplication $=
			(
				/ "all class name declarations" >> %YGlobal,
				/ 'using namespace platform_ex;' >> %HostWindow
			),
		)
		/ %'YCLib_(MinGW32)'.Win32GUI $=
		(
			+ "functions %(GetOpacity, SetOpacity)" @ "class %WindowReference",
			+ "class %HostWindow" @ "namespace %platform_ex::Windows"
		)
		/ %YSLib.YAdaptor.Image $=
		(
			+ "enum class %SamplingFilter",
			/ @ "class %HBitmap" $=
			(
				/ "allowed nullptr as default argument"
					@ "constructor with data pointer",
					// As "handle".
				+ "function %swap",
				+ "unifying assignment",
				+ "converter 'explicit operator bool() const ynothrow'",
				+ 'operator!() const ynothrow',
				(
				$dep_from "%SamplingFilter";
				+ "constructor 'HBitmap(const HBitmap&, const Size&, \
					SamplingFilter)'";
				+ "function %HBitmap::Rescale"
				)
			),
			(
			$dep_from "%HBitmap::swap";
			+ "non-function %swap for class %HBitmap"
			)
		)
	),
	/ "resumed when one bookmark loading failed" @ %YReader.'text reader'
),

b429
(
	/ %YFramework $=
	(
		+ "class %platform_ex::DSVideoState" @ 'YCL_DS || YCL_HOSTED'
			@ %YCLib.Video,
		+ "function %WindowReference::Invalidate"
			@ %'YCLib_(MinGW32)'.Win32GUI,
		/ %Helper $=
		(
			/ %HostWindow $=
			(
				$dep_from "%WindowReference::Invalidate";
				+ 'using WindowReference::Invalidate;' @ "class %Host::Window"
			),
			/ %DSMain $=
			(
				+ $dev "restricted 'YCL_DS || YCL_HOSTED'" @ "header",
				/ @ "class %DSApplication" $=
				(
					(
					$dep_from %YCLib.Video;
					+ "private inheritance %platform_ex::DSVideoState";
					+ 'using DSVideoState::IsLCDMainOnTop;'
					),
					$dep_from %HostWindow;
					+ "function %SwapScreens"
				)
			),
			/ @ "class %ShlDS" @ %Shell_DS $=
			(
				(
				+ "cursor desktop pointer";
				+ "functions %(GetCursorDesktopHandle, GetCursorDesktop)"
				),
				(
				$dep_from "class %DSApplication";
				+ "function %SwapScreens";
				+ "function %WrapForSwapScreens"
				),
				+ "function %SwapDesktops",
				/ "function %GetDesktopDown" => "%GetSubDesktop",
				/ "function %GetDesktopDownHandle" => "%GetSubDesktopHandle",
				/ "function %GetDesktopUp" => "%GetMainDesktop",
				/ "function %GetDesktopUpHandle" => "%GetMainDesktopHandle"
			)
		),
		/ %YSLib.UI $=
		(
			+ "class template %GEventGuard" @ %YEvent;
			/ %YControl $=
			(
				/ "function template %NewEvent" >> %YWidgetEvent;
				/ "function %GetEvent" >> %YWidgetEvent;
				/ "function templates %FetchEvent except for %IWidget"
					>> %YWidgetEvent
			)
		)
	);
	/ %YReader.'file explorer' $=
	(
		+ "swap screens when key pressed down has mask specified by mask",
		+ "buttons for swapping screens on desktops"
	)
),

b428
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %Widget" @ %YWidget $=
				(
					(
					/ "explicitly defualted move constuctor"
						-> "explicitly deleted";
					/ $revert(b426) "simplified functions \
						%(GetRenderer, View) as inline function without \
						exception",
						// For performance.
					/ "simplified function %GetController as inline \
						function without exception"
						// Ditto.
					),
					(
					$dep_from %YGUI;
					/ "automatically cleanup references on destruction"
					)
				)
				+ "function %GUIState::CleanupReference" @ %YGUI
			),
			/ @ "class %Graphic" @ %Core.YGDIBase $=
			(
				+ "non-explicit default constructor",
				- "1st default argument"
					@ "explicit constructor with 2 parameters"
			)
		),
		/ @ "namespace %platform_ex::Windows" @ %'YCLib(MinGW32)'.Win32GUI $=
		(
			(
			+ "function %CreateNativeWindow",
			+ "function %WindowReference::SetText"
			),
			(
			+ "class %(ScreenBuffer; ScreenRegionBuffer)",
			+ "class %WindowMemorySurface",
			+ "class %(WindowDeviceContextBase; WindowDeviceContext, \
				WindowRegionDeviceContext)",
			+ "class template %GSurface";
			- $comp "screen update time" @ "debug output";
			),
			/ DLD "declared reopened non-inline namespace %Windows"
				@ "namespace %platform_ex"
				// Though G++ has no diagnostic at all for reopened namespace \
					both from inline to non-inline and vice versa, but Clang++ \
					do complain both. See $ref b428.
		),
		/ %Helper $=
		(
			/ %HostWindow $=
			(
				$dep_from "%WindowReference::SetText";
				+ 'using WindowReference::SetText;' @ "class %Host::Window"
			),
			/ @ "namespace %Host" @ %HosteUI $=
			(
				(
				/ DLD "window thread implementation"
					^ 'std::atomic<Window*>' ~ 'unique_ptr<Window>';
					// Convenient for safe concurrent state checking. The \
						ownership semantics still kept.
				+ "function %WaitForHostWindow"
				),
				(
				+ "function %ShowTopLevel" @ "platform %MinGW32";
				+ "function %ShowTopLevelDraggable"
				)
			)
		),
		/ "made explicit no exception specification"
			@ "user-defined destructors" @ "all final classes" @ %YFramework
			$= (+ 'ynothrow' @ ("classes %(ImageMemory, HBitmap, ImageCodec)"
				@ %Image, "classes %(Typeface, FontCache)" @ %Font)
				@ %YSLib.Adaptor));
			// Class at %YBase like %any should conform ISO C++ standard \
				library tradition, which add no explicit exception \
				specification.
	),
	* "missing 2nd template parameter" @ "relation functions for class \
		template %ystdex::bitseg_iterator" @ %YBase.Iterator $since b414,
	/ $dev "all subsequent tokens" @ "preprocessing directive '#error'"
		-> "string literal"
),

b427
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ @ "class %Window" @ %HostWindow $=
			(
				* "missing checking failure" @ "function \
					%Window::GetInputBounds" @ "platform %MinGW32" $since b388
				+ $dev 'using namespace platform_ex' @ "namespace %Host"
					@ "platform %MinGW32" @ %HostWindow,
				(
				$dep_from %'YCLib_(MinGW32)'.Win32GUI;
				/ DLD "simplified implementation" @ "class %Host::Window"
					^ "private inheritance %Windows::WindowReference"
				),
				(
				+ 'std::atomic<bool> BoundsLimited{false};'
					@ "class %Host::Window"
					// DS window defaulted as true.
				$dep_to "window cursor boundary"
				)
			),
			/ @ "function %InputManager::Update" @ "platform %MinGW32"
				@ %InputManager $=
			(
				$dep_from %'YCLib_(MinGW32)'.Win32GUI;
				* "missing checking input boundary validity"
					@ "function %InputManager::Update" $since b388,
					// Win32 API call can faile, though it's rare.
				(
				$dep_from "window cursor boundary";
				+ "free cursor boundary support"
				// Now dragging hosted window would not be interrupted by \
					moving the cursor out of the boundary unless \
					%Window::BoundsLimited is set.
				)
			),
			/ @ "namespace %YSLib::Host" @ %YGlobal $=
			(
				/ "class %Exception" >> ("namespace %platform_ex"
					@ %'YCLib_(MinGW32)'.MinGW32)
				+ 'using platform_ex::Exception'
			),
			/ $dev 'using namespace platform_ex' @ "platform namespaces"
				@ %DSMain >> ("corresponding namespace" %YGlobal),
			/ $dev @ "platform %MinGW" @ %GUIApplication $=
			(
				$dep_from %'YCLib_(MinGW32)'.Win32GUI);
				/ "class %Win32Exception, macro %YF_Raise_Win32Exception"
					>> %'YCLib_(MinGW32)'.MinGW32,
				/ 'typedef ::HWND NativeWindowHandle' @ "namespace %Host"
					>> ("namespace %platform_ex"
					@ %'YCLib_(MinGW32)'.Win32GUI)
			)
		)
		+ "constructor 'Screen(const Size&, Drawing::BitmapPtr = {}) ynothrow'"
			@ %YSLib.Core.YDevice,
		/ %'YCLib_(MinGW32)' $=
		(
			+ $dev "unit %Win32GUI with files %(Win32GUI.h, Win32GUI.cpp)";
			/ %MinGW32GUI $=
			(
				+ "inline namespace %Windows" @ "namespace %platform_ex";
				+ "class %WindowReference" @ "namespace %platform_ex::Windows"
			)
		)
	)
	+ $dev "empty VC++ projects %YFramework_MinGW32",
		// Only for convenience, no ability for building.
	/ $doc @ "directory %doc" $=
	(
		+ "%Documentation::YBase(file %YBase.txt)"
		+ "%Documentation::YFramework(file %YFramework.txt)"
	)
),

b426
(
	/ DLB "VC++ projects" $=
	(
		- "all filters of extensions",
		/ "reconstructed files as directories"
	),
	/ %YFramework $=
	(
		- "pure color filling method %Update" @ "class %DSScreen",
		/ %UI $=
		(
			/ $dev @ %YComponent $=
			(
				/ "header %ycomp.h" => "%YComponent.h",
				+ "implementation unit %YComponent.cpp"
			),
			/ "inline 'ynothrow' functions %(GetRenderer, GetView)"
				@ "class %Widget" @ %YWidget -> "non-inline member functions \
				without exception specifications";
				// It should be note that the internal pointer could be null \
					so the state is invalid after being moved, thus exceptions \
					should be thrown.
		),
		/ %Helper $=
		(
			/ "all 3 %Drawing::to_string" @ %ShellHelper>> %UI.YComponent;
			/ DLD "host implementation reconstructed";
			(
			+ "class %Host::Exception" @ "defined %YCL_HOSTED" @ %YGlobal;
			+ "class %MinGW32::Win32Exception; macro %YF_Raise_Win32Exception"
				@ "platform %MinGW32" @ %GUIApplication;
			/ @ %HostWindow $=
			(
				/ @ "class %Host::Window" $=
				(
					/ "returning type of function %Show" -> "'bool'"
						~ "'void' to report asynchronous result",
					+ "function %(Move, GetLocation)" @ "class %Host::Window"
				);
				/ "all Win32 API call failures not producing as result \
					wrapped by %MinGW::Win32Exception" @ "platform %MinGW32"
			);
			+ "function %Host::DragWindow" @ %HostedUI
				// Currently only supported when cursor over the host window.
			),
			* "command line initialization state missing" @ "platform %DS"
				@ %GUIApplication @ $since b425
				// Font cache was not initialized as soon before GUI mode
					screen initialization, so the output messages were missing.
		)
		/ DLD "unified preprocessing error message for alerting unsupported \
			platform",
	)
),

b425
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ "typedef %HWheelEvent" @ %YWidgetEvent
					=> "%HCursorWheelEvent",
				+ "forwarding %CursorWheel to vertical scroll bar"
					@ "class %ScrollableContainer" @ %Scroll;
			),
			/ %Adaptor.Font $=
			(
				- "exception specifications" @ "functions \
					%(FontCache::GetDefaultTypefacePtr, FetchDefaultTypeface)",
				/ @ "destructor" @ "class %Typeface" $=
				(
					+ "assertions for internal face pointer and face object \
						state";
					* "faces metrics tables leaked on font cache exit"
						$since b420
				)
			)
		),
		/ %Helper $=
		(
			- $dev "host double %CS_DBLCLKS support" @ "host windows"
				@ "platform %MinGW32",
			(
			/ "inline function %FetchDefaultFontCache"
				@ "header %GUIApplication.h" -> "non-inline function"
				@ %Initialization,
			/ %Initialization $=
			(
				+ "function %FetchRoot",
				+ "registered object destructors as stacked callbacks"
					@ "function %Unitialize"
					// For debug allocation compatibility;
			);
			- "members %(ValueNode, GetFontCache; pFontCache)"
				@ "class %GUIApplication" @ %GUIApplication
			)
			* "uninitialized access" @ "window procedure" @ "platform %MinGW32"
				$since b423
		)
	),
	/ %YBase $=
	(
		+ "macro %(YB_HAS_THREAD_LOCAL; ythread)" @ %YDefinition,
		/ @ "class template %nifty_counter" @ %YStandardEx.Utilities $=
		(
			(
			- "typedef %count_type";
			- "template parameter 'typename _tCount = size_t'",
			),
			(
			$dep_from %YDefinition;
			/ "implementation" ^ "%ythread"
			),
			+ ynoexcept @ "all non-template member functions"
		)
	)
),

b424
(
	/ %YFramework $=
	(
		/ @ "platform %MinGW32" @ %Helper $=
		(
			* "cursor across host window boundary" $= $since b388,
			* "wrong location of initializing raw input" $since b423
				// The initialization should be at initialization of host \
					window, but not the shell input manager.
			(
			* "missing triggling %KeyUp" $since b422
			$dep_to "triggling %KeyUp"
			)
		),
		* "corrupted wrong screen output" @ "platform %DS" $since b405
			$= (/ $revert(b405) "flush cache" @ "function %ScreenSynchronize"
				@ %YCLib.Video),
		/ %YSLib.UI $=
		(
			/ %YControl $=
			(
				// Now event %(Enter, Leave) can be automatically synthesized.
				/ "function %OnKey_Bound_TouchUpAndLeave"
					-> "%OnKey_Bound_TouchUp",
				/ "function %OnKey_Bound_EnterAndTouchDown"
					-> "%OnKey_Bound_TouchDown"
			),
			/ @ "class %GUIState" @ %YGUI $=
			(
				(
				/ $revert(b421) "function %GUIState::ResponseKey \
					allowed routed events,
				/ "events %(TouchUp, TouchDown) handled by wrapped handlers";
					// So manually sent touch events can be handled with GUI \
						state changes, and no need to bind %OnKey_Bound_Click.
				* $comp "bound missing automatically triggling control \
					%(Leave, Click) events" $since b421;
				$dep_from "triggling %Leave";
				),
				/ "events %(KeyUp, KeyDown) handled by wrapped handlers",
					// So manually sent key events can be handled with GUI \
						state changes.
				/ "all returning value of function %'Response*' discarded"
			),
			(
			$dep_from "triggling %KeyUp",
			$dep_from "triggling %Leave";
			* $comp "missing responding forwarding tunnel key accerators"
				$since b421
			)
		)
	)
),

b423
(
	/ DLD "all '= false'" -> "'= {}' for well-formed use of pointer types as \
		left operands",
	* $design "platform-dependent bool type xor operation" @ "function \
		%openmode_conv#2" @ %YBase.YStandardEx.CStandardIO $since b326,
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ %YWidgetEvent $=
			(
				+ "event enumerator %CursorWheel" @ "%VisualEvent",
				(
				+ "typedef %WheelDelta";
				+ "class %CursorWheelEventArgs";
				+ "typedef %HWheelEvent"
				),
				+ "virtual destructor" @ "class %UIEventArgs"
			);
			/ @ "class %GUIState" @ %YGUI $=
			(
				+ "member funtcion %ResponseCursorIndirect";
				/ "member funtcion %ResponseTouchBase" -> "%ResponseCursorBase";
				/ "member funtcion %ResponseTouch" -> "%ResponseCursor"
			);
			+ "%CursorWheel support for class %AScrollBar" @ %Scroll
		),
		/ %Helper @ "platform %MinGW32" $=
		(
			+ "raw input support for mouse wheel";
			+ "wheel input forwarding" @ "class %InputManager"
		)
	)
),

b422
(
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ %YWidgetEvent $=
			(
				/ "event enumerator %CursorMove" => "%CursorOver",
				/ "typedef %TouchEvent" => "%CursorEvent",
				/ "class %TouchEventArgs" => "%CursorEventArgs",
				/ "class %HTouchEvent" => "%HCursorEvent"
			),
			/ %YGUI $=
			(
				$dep_from %Helper.InputManager;
				+ "responsing event %CursorOver",
				+ "independent cursor focus pointer";
				+ "support for %(Enter, Leave) generated by %CursorOver",
				/ "function %IsControlEntered" => "%IsEntered",
				+ "function %(GetCursorOverPtr, Wrap)",
			),
			/ "%(Enter, Leave) now only generated for derived classes of \
				%Control as default"
		),
		+ "forwarding %CursorOver through %TouchUp with empty key set"
			@ "platform %MinGW32" @ %Helper.InputManager
	)
),

b421
(
	+ "function templates %(hash_combine; 3 hash_combine_seq, 2 hash_range)"
		@ %YBase.YStandardEx.Functional,
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor.Font $=
			(
				$dep_from %YBase.YStandardEx.Functional;
				+ "style hashing" @ "glyph bitmap cacheing",
				/ "function %Font::SetStyle to allow non-regular style \
					setting when typeface exists";
				+ "support for bold and italic bitmap glyphs"
					// But no support of typefaces for specific styles \
						currently.
			),
			/ %UI $=
			(
				/ "all event handlers of %TouchMove" -> "TouchHeld",
				/ %YControl $=
				(
					- "function %OnTouchMove",
					/ "function %OnTouchMove_Dragging"
						=> "%OnTouchHeld_Dragging"
				);
				/ "enumeration %VisualEvent" @ %YWidgetEvent $=
				(
					- "enumerator %TouchMove",
					+ "enumerator %CursorMove"
						// No effect currently.
				);
				/ @ "class %GUIState" @ %YGUI $=
				(
					/ "side effects of responsing %(TouchUp, KeyUp)" $=
					(
						/ "independent focus pointer now unconditionally reset",
						/ "(held state, dragging offset) now maintained"
					),
					/ "function %GUIState::ResponseKey now only allowed \
						event called without other side effects (i.e. access \
						independent focus event and trying KeyPress when \
						possible) for indirect routing stratagy
				)
			)
		),
		/ $dev %YBaseMacro $=
		(
			+ DLD "including header %ydef.h",
			+ "macro %DefBitmaskEnumOperations"
		),
		* "wrongly dragged widgets after released dragging and moved cursor \
			out of boundary of host window touch event responding area"
			@ "platform %MinGW32" $since b388
	)
),

b420
(
	/ %YFramework.Adaptor.Font $=
	(
		/ "small bitmap cacheing using moving" ~ "copying",
		/ @ "class %Typeface" $=
		(
			/ DLD "assured non-null face",
			* "missing destructor" $since b419,
			+ "size cacheing"
		),
		/ @ "class %NativeFontSize" $=
		(
			+ $dev "private inheritance %noncopyable",
			/ $dev "constructor accept reference" ~ "pointer",
			+ "function %Activate",
			- "redundant check"
		),
		* "destructor" @ "class %FontCache wrongly release library before \
			cleaning container" $since b419
			// It's OK for cached objects because no destructor would perform \
				multiple release when cache manager is cleared before the \
				library instance. But it's wrong without FreeType cache \
				manager and will cause multiple release of resources. Since \
				the destructor is missing, this problem is not explicit @ \
				b419, but resource leaks.
	),
	/ DLP "updated library %freetype" @ "library using" $=
	(
		- "module configuration ('HINTING_MODULES += autofit',
			'AUX_MODULES += cache', 'BASE_EXTENSIONS += ftfstype.c',
			'BASE_EXTENSIONS += ftstroke.c', 'BASE_EXTENSIONS += ftsynth.c');
		^ $re_ex(b366) "updated FreeType 2.5.0.1 with several files remained"
			~ "FreeType 2.4.11"
			// See [Documentation::Designation @@5.4.1.3] .
	)
),

b419
(
	/ %YFramework $=
	(
		/ %Adaptor.Font $=
		(
			+ "class %(FontException, NativeFontSize, SmallBitmapData)";
			/ @ "class %Typeface" $=
			(
				* "missing glyph index cache insertion failure check"
					$since b418,
				+ "2 functions %GetTypefaceRef",
				(
				+ "glyph bitmap cache";
				+ "function %ClearBitmapCache"
				)
			);
			- @ "class %FontCache" $=
			(
				- "size cache";
				- "FreeType cache manager";
				- "function %(ResetGlyphCache, Reset)"
			),
			/ @ "class %Font" $=
			(
				/ "simplified data member",
				+ $dev $workaround "special member functions"
					// For G++ 4.7.1 there are several errors about implicitly \
						declared special member functions in derived class.
			),
		)
		/ $dev "access control" @ "inheriting class %LoggedEvent"
			@ "class %BadEvent" @ %UI.YWidgetEvent -> public ~ private,
		* $design "platform-dependent bool type xor operation" @ "assertion"
			@ "function %(CompactPixmap, CompactPixmapEx)::SetSize, \
			CompactPixmapEx::SetSize" $since b176
			@ %'(BitmapBuffer, BitmapBufferEx)::SetSize'
	),
	/ DLD "all '= nullptr'" -> "'= {}' for well-formed use of pointer types as \
		left operands"
),

b418
(
	/ DLD "header %ft2build.h" @ "directory %YFramework/include"
		>> "directory %3rdparty/include",
	/ %YFramework.YSLib $=
	(
		/ %Service.YGDI $=
		(
			/ "class %BitmapBuffer" => "%CompactPixmap",
			/ "class BitmapBufferEx => "%CompactPixmapEx"
		),
		/ %Adaptor $=
		(
			/ "class NativePixmap" @ %Image => "%HBitmap",
			/ %Font $=
			(
				/ @ "class %FontCache" $=
				(
					^ "%unordered_map with %unique_ptr for %FontFamily \
						stored",
					/ "function %ClearCache" => "%Reset",
					- "FreeType CMap cacheing"
						// Binary size enlarged. No performance impact.
				),
				+ "CMap cacheing" ^ "%unordered_map"
			)
		)
	)
),

b417
(
	+ "typedef octet" @ %YBase.YDefinition,
	(
	+ "3rdparty library FreeImage";
	$dep_to "FreeImage"
	),
	/ %YFramework $=
	(
		/ $dev %YCLib.Video $=
		(
			/ "typedef Color::(MonoType, AlphaType)"
				-> "namespace scope typedef names" @ "namespace %platform",
			/ "macro %YCL_PIXEL_FORMAT_AXYZ1555" -> "%YCL_PIXEL_FORMAT_XYZ555"
				@ "platform %DS",
			+ "macro %YCL_PIXEL_FORMAT_XYZ888" @ "platform %MinGW32"
		),
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				(
				$dep_from %YBase.YDefinition;
				+ "using %ystdex::(byte, octet)" @ %YAdaptor;
				),
				$dep_from "FreeImage";
				+ "unit %Image"
			),
			/ %Service $=
			(
				+ "constructor 'BitmapBuffer(unique_ptr<PixelType[]>, \
					const Size&) ynothrow'",
				* "wrong source offset"
					@ "function %ImageBrush::operator()" $since b294
			)
		),
		(
		$dep_from "FreeImage"
		/ $dev $build "FreeImage supported" @ "ARM9 Makefile"
			@ "platform %DS"
		)
	)
	* "library %YFramework" @ "configuration %release_DLL" @ "platform %MinGW32"
		"wrongly linked to 'YBase.dll' of configuration %debug" $since b362,
),

b416
(
	/ $dev %YFramework.YSLib $=
	(
		+ final @ "all classes" @ %Adaptor.Font,
		(
			/ "class %Timer" @ %Service.Timer $=
			(
				* "redundant function declaration %RefreshAll" $since b405,
				+ "function %Test",
				+ "virtual destructor"
			);
			/ @ "class %InputTimer" %UI.GUI $=
			(
				(
				- "functions %(Delay, Reset)",
				/ "function %Reset" => "%ResetInput";
				/ "publicly inherited class %Timers::Timer"
				),
				+ "function %RefreshClick"
			)
		)
	),
	/ $dev "all typedef of unnamed enums" @ "C++ code"
		-> "non-typedef named enums",
	/ %YReader $=
	(
		/ %'text reader' $=
		(
			+ "double click to start auto scroll when not started already",
				// Intended to not limit the positions between clicks.
			(
			/ "saved reader box state on entering session and restored on \
				exit" @ base session;
			* $comp "reader box could overlap with text after returning \
				reading UI from other UI entered through context menu"
				$since b390
				// Currently "other UI" is setting or bookmark UI.
			)
		),
		- "background switch preview" @ %'shell test example',
		/ %'file explorer' $=
		(
			* "missing menu button binding" $since b360,
				// No effect when key pressed as button text indicated.
			/ "setting panel layout",
			/ "hexadecimal check box moved into setting panel",
			/ "file box layout",
			/ "about form position"
		)
	)
),

b415
(
	/ %YBase.YStandardEx.Iterator $=
	(
		/ @ \clt pointer_iterator $=
		(
			+ "non-null assertions" @ "several functions",
			- const @ "functions postfix %operator(++, --),
			/ $dev "private member 'mutable pointer current'" -> 'pointer raw'
		),
		/ @ "class template %bitseg_iterator" $=
		(
			* "yconstfn and assertions for strict ISO C++11 compatibility"
				@ $since b414,
				// G++ didn't complain, but Clang++ does.
			- const @ "functions postfix %operator(++, --)
		),
		/ "implemented functions %operator(+, -) supporting underlying \
			functions which don't returning types constrctible for \
			%pair_iterator" @ "class template %pair_iterator",
		/ @ "class template %transformed_iterator" $=
		(
			* "wrong overloaded member leading to copy constructor cannot
				be called for non-const reference type" $since b288,
			+ "explicitly defaulted copy constructor",
			+ "explicitly defaulted move constructor",
				// G++ 4.7.1 can't accept this overloading, so ignored as \
					workaround.
			+ "functions %operator(+=, -=; +, -)"
				// Using %std::advance.
		)
	),
	/ %YFramework.YSLib $=
	(
		/ @ "class %CharBitmap" @ %Adaptor.Font $=
		(
			+ "typedef %PictchType; function %GetPitch",
			+ "typedef %FormatType; function %GetFormat"
		);
		/ %Service $=
		(
			(
			$dep_from %YBase.YStandardEx.Iterator;
			/ "text rendering supporting negative pitch and non 255 gray level \
				bitmaps";
			* $comp "wrong dispatch of char format" $since b414,
			* $comp "bitmap rendering corrupting for font with non 255 \
				gray level embedded bitmaps" $since b185
			)
			/ $dev "all '%u8' for alpha value" -> ('Color::AlphaType'
				| "template parameter %_tAlpha") @ %YBlit
		)
	),
	/ %YReader $=
	(
		- "3 bitmaps" @ "shells background images";
		* $workaround "memory allocation failed exiting reader"
			@ "debug configuration" @ "platform %DS" $since b399
			// Still possible out-of-memory if the font file is too big.
	)
),

b414
(
	/ %YBase.YStandardEx $=
	(
		/ "implemented %stable_range_unique ADL with %std::swap" @ %Algorithm,
		+ "2 function templates %sort_unique" @ %Container,
		/ %String $=
		(
			(
			$dep_from %Container,
			+ "function template %alph"
			),
			+ "function template %concat"
		),
		+ "class template %bitseg_iterator @ %Iterator
			// Currently only mutable underlying byte pointer is supported.
	),
	/ %YFramework.YSLib $=
	(
		/ %Core $=
		(
			(
			$dep_from %YBase.YStandardEx.String;
			/ "implementation" @ "function %String::operator="
				@ %String
				// More efficient.
			),
			/ "class %FileList" -> "function %ListFiles" @ %YFileSystem
		),
		(
		$dep_from %Core.YFileSystem;
		/ "simplified inheritance and members" @ "class %FileBox" @ %UI
			// More space efficient.
		),
		/ %Adaptors.Font $=
		(
			/ "function %Font::Getstyle" => "GetStyle";
			+ "function %CharBitmap::GetGrayLevel"
		),
		/ %Service $=
		(
			/ "function template specializations %BlitScale implemented as \
				inline functions",
				// For more compact binary files.
			(
			$dep_from %YBase.YStandardEx.Iterator;
			/ $dev "blitAlphaBlend supported for %bitseg_iterator as source";
			$dep_to "%blitAlphaBlend"
			),
			(
			$dep_from "%blitAlphaBlend";
			/ "character renderer interface supported for bitmap source other \
				than 255 gray level"
			)
		)
	)
),

b413
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ 'ynothrow' @ ("constructor %FileOperationFailure" @ %YFileSystem,
				"member funtions %CursorInfo::(GetX, GetY)" @ %Input,
				"function %MappedFile::GetPtr" @ %MemoryMapping,
				"2 functions %IsDirectory" @ "platform %MinGW32" @ %NativeAPI,
				"all namespace scope functions %'Fecth*'" @ %Video)
			+ 'const' @ "function %DirectorySession::GetNativeHandle"
				@ %FileSystem,
			$dev
			(
			$dep_form %YBaseMacro;
			^ %YBaseMacro @ %YCLib
			)
		),
		/ "saved initialization result to allow multiple initlization"
			@ "class %COM" %'YCLib_(MinGW32)'.COM,
		/ $dev %YBaseMacro $=
		(
			/ "header %YBaseMacro[%ybasemac.h]" @ %YSLib.Core
				-> %YBaseMacro["YBaseMacro.h" @ "directory %YFramework"];
			/ "macro %ImplRet now allowed brace-init-list returned",
			/ "merged macro %DefEmptyDtor" -> %DefDeDtor
				// As of G++ 4.7.1 bug, using workaround as %DefEmptyDtor, \
					otherwise explicit defaulted function.
		),
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ $dev %YEvent $=
				(
					/ @ "class templates %(GHEvent; GEvent; GDependencyEvent)"
						$=
					(
						/ "supported non-void returning type",
						- "typedef name %EventArgsType"
					),
					+ "typedef name %TupleType" @ "class template %GEvent",
					+ "class template %EventArgsTypeHead"
				),
				+ "function 'String& String::operator*=(size_t)'" @ %YString
			),
			/ %UI $=
			(
				$dep_from %Core.YEvent;
				- "function template %DoEvent#2"
			)
		)
	)
),

b412
(
	/ %YBase $=
	(
		/ "disabled macro %YB_USE_EXCEPTION_SPECIFICATION unconditionally \
			by default" @ %YDefinition,
		/ %YStandardEx $=
		(
			- "typedef names %(const_path_t, path_t)" @ %CStandardIO,
			(
			+ %Variadic;
			/ "variadic meta types" @ %TypeOperation >> %Variadic
			),
			+ "struct %variadic_param; function template %varg" @ %Functional,
			/ %Iterator $=
			(
				/ @ "class template %transformed_iterator" $=
				(
					/ "transformer interface",
						// Now producing value instead of iterator. Note it is \
							still distinct with boost.iterator, whose \
							%transform_iterator excepts a value but not \
							iterator as input.
					+ "2 function %get_transformer"
				),
				+ "class template %indirect_input_iterator";
			)
		)
	),
	/ %YFramework $=
	(
		/ %YCLib.FileSystem $=
		(
			/ @ "class %HDirectory" $=
			(
				+ "function %GetName";
				/ "%operator* now returning self reference to adapt to \
					%indirect_input_iterator"
			),
			$dep_from %Iterator;
			/ "class %FileIterator" -> "typedef name of instantiated template \
				%indirect_input_iterator",
			/ $dev $lib "simplified header inclusion as \
				%Documentation::ProjectRules"
		),
		+ %'YCLib_(MinGW32)' $=
		(
			+ "common header file";
			+ "COM abstraction header file"
		),
		/ %YSLib $=
		(
			// All bugs below in this revision are checked by Clang++ 3.4 \
				(trunk183609) diagnostics, which all accepted by G++ 4.8.1 \
				silencely.
			/ %Core $=
			(
				* $dev "strictly use of constexpr conforming to ISO C++11 for \
					static data object %Invalid"
					@ "class template %GBinaryObject" @ %GDIBase $since b311
					// Resolved $known_issue_b351_1. Though C++1y may loose \
						the restrictions as allowing this invalid C++11 \
						construct. Note another restriction is already relaxed \
						in the draft WG21/N3691. See $ref b412 $note "N3652".
				* $dev "wrong yconstfn" @ "constructor %Message" @ %YMessage
					$since b368,
					// Though G++ accepts invalid code, it is conforming \
						because "no diagnostics required" is explicitly stated \
						by ISO C++11.
				/ $dev %YFileSystem $=
				(
					+ "specified %u32 as underlying type"
						@ "enum classes %(PathCategory, NodeCategory)";
					* missing explicit cast when initializating members with \
						enum class enumerators" @ "enum class %NodeCategory"
						$since b410
				),
				* "wrong overloaded member leading to copy constructor cannot
					be called for non-const reference type" $since b207
					// This also resolves the Clang++ bug, for private member \
						with SFINAE is not enough. See $ref b412 $note \
						"Clang++ bug 8448".
			)
			* $dev "invalid incompelete type %Renderer used"
				@ "construct template %Widget" @ %UI.YWidget $since b293
		)
	)
	+ DLD "'const' for 'yconstfn' functions and function templates to \
		eliminate Clang++ [-Wno-constexpr-not-const]"
),

b411
(
	/ $dev $build @ "platform %MinGW32" $=
	(
		^ DLP $re_ex(b392) "MinGW[gcc version 4.8.1 (Built by MinGW-builds \
			project)] x32-4.8.1-release-posix-sjlj-rev0" ~ "MinGW[gcc version \
			4.8.0 (Built by MinGW-builds project)] \
			x32-4.8.0-release-posix-sjlj-rev0 [release-sjlj]"
			@ "platform %MinGW32",
				// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
					Exceptions implementation: SjLj.
		/ "compiler flag" "'-Og'" -> '-O' @ "debug configurations"
			// $revert(b392) Code::Blocks can't debugging with '-Og' well.
	),
	/ %YFramework $=
	(
		/ %YCLib.FileSystem $=
		(
			- "(functions, function templates) %(udirexists, direxists)",
			/ "class %HFileNode" -> "classes %(FileOperationFailure, \
				DirectorySession, HDirectory, FileIterator)"
		)
		/ %YSLib $=
		(
			/ %UI $=
			(
				* $dev $doc "exception name" @ %UI.YControl $since b241,
				/ "empty struct %BadEvent"
					-> "class %BadEvent : public LoggedEvent" @ %YWidgetEvent
			),
			/ $dev %Adaptor.YAdaptor $=
			(
				$dep_from %YCLib.FileSystem;
				+ "using %platform::(FileOperationFailure, DirectorySession, \
					HDirectory, FileIterator)" @ "namespace %IO"
			);
			/ @ "namespace %IO" @ %Core.YFileSystem $=
			(
				/ @ \cl Path $=
				(
					/ "function %GetNativeString" -> "%GetMBCS";
					+ "conversion function operator %string"
				);
				- "typedef name %NativeString",
				+ "typedef name %PathNorm",
				/ @ "class %FileList" $=
				(
					/ "supported empty path as '.'",
					/ "discarded returning type" @ "function %ListItems"
						// Now no counting and reserving list items, and the \
							original would be kept on exception thrown.
				),
				- "all namespace scope yconstexpr constants %(FS_Now, \
					FS_Parent, FS_Separator, FS_Root)",
			)
		)
	)
),

b410
(
	* "wrong implementation" @ "functions %(filter_self, merge_parents)
		@ "class template %path" @ %YBase.YStandardEx.Path $since b409;
	/ %YFramework $=
	(
		* "wrong implementation" @ "macro %YCL_FS_StringIsParent"
			@ %YCLib.FileSystem $since b409,
		/ %YSLib.Core.YFileSystem $=
		(
			/ @ "class %Path" $=
			(
				+ "using %ypath::(get_norm, filter_self, merge_parents)",
				- "functions %(GetExtension, IsDirectory, IsAbsolute, \
					IsRelative)",
				+ "functions %(GetString, Normalize)"
				* "wrong implementation for empty or absolute paths"
					@ "function %operator/=" $since b409;
				+ "member %operator/= for %String as directly subdirectory \
					access"
			),
			+ "functions %(GetExtensionOf, 4 VerifyDirectory, 3 IsAbsolute, \
				4 IsRelative),
				// Another overloaded %IsAbsolute is from namespace %platform;
			- "functions 2 %ValidatePath";
				// %VerifyDirectory should be used instead.
			+ "member %operator/= for %String as directly subdirectory access"
				@ "class %FileList",
			+ "path and file system node classifying APIs" $=
			(
				+ "enum classes %(PathCategory, NodeCategory)";
				+ "functions %(ClassifyPath, ClassifyNode)
			)
		)
	),
	/ %YReader $=
	(
		/ %'file explorer' $=
		(
			* "non lower-case extensions wrongly ignored" $since b389,
			(
				$dep_from %YFramework;
				* $comp "non-normalized paths shown" $since b409;
				$dep_to "explorer path"
			)
		),
		/ %'text reader' $=
		(
			$dep_from "explorer path";
			* $comp "non-normalized path wrote into configuration" $since b409
				// This may cause corrupted configuration and crash on loading.
		)
	)
),

b409
(
	/ %YFramework $=
	(
		/ $dev "all %Swap" => "%swap",
		/ $dev "all %Clone" => "%clone",
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ $dev %YBaseMacro $=
				(
					/ "macro %DefClone(_q, _t, n)" -> "%DefClone(_q, _t)",
						// Thus all member function name 'Clone' unified as \
							'clone'.
					+ "macro %DefSwap",
					/ "macro %yJOIN" >> YBase.YDefinition
				),
				/ @ %YEvent $=
				(
					+ "non-function template %swap for specification of \
						%GEvent",
					* $dev "missing excluding of 'GEvent&'"
						@ "constructor template with 1 function parameter"
						@ "class template %GEvent" $since b293
				),
				+ "non-function %swap for classes %(Message @ %YMessage, \
					ValueObject" @ %YObject),
				/ %YFileSystem $=
				(
					$dep_from %YCLib.FileSystem
					+ $dev "template specification \
						%ystdex::file_path_norm<YSLib::String>",
					+ $dev "typedef name %ypath";
					/ @ "class %Path" $=
					(
						- "all static member object %(Slash, Now, Parent)",
						/ $dev "implementation" ^ "inheritance %ypath"
							~ "string member",
						- "functions %('Has*', 'GetRoot*',
							GetRelativePath, GetParentPath, GetFilename,
							GetStem, MakeAbsolute, RemoveFilename,
							ReplaceExtension, NormalizeTrailingSlash),
						+ "iterator typedef names" -> "using
							%ybase::(iterator, const_iterator)",
						+ "typedef %StringType' -> "%value_type",
						/ "2 conversion functions for string referendce"
							-> "conversion function for %String"
						+ "using %ypath::(back, front, begin, end, cbegin, cend,
							iterator, const_iterator, value_type, insert, erase,
							is_absolute, is_relative, empty, clear, size)",
						+ "declarations for friend operator %(==, <) using \
							bases but not native strings"
					)
					- "functions %(GetDirectoryNameOf, 2 ChangeDirectory)"
				)
			),
			+ "non-function template %swap for class %(BitmapBuffer, \
				BitmapBufferEx)" @ %Service.YGDI
		),
		/ $dev %YCLib.FileSystem $=
		(
			$dep_from %YBase.YDefinition;
			+ "function bool platform_ex::FS_IsRoot(const ucs2_t*)"
				@ "platform %DS",
			+ "macro %(YCL_FS_StringIsCurrent, YCL_FS_StringIsParent,
					YCL_FS_CharIsDelimiter, YCL_FS_StringIsRoot)"
		)
	),
	/ $dev %YBase $=
	(
		/ %YStadardEx $=
		(
			/ "tempalte specification %path<std::string>"
				@ %YStandardEx.Path -> "partial specification \
				%path<std::basic_string<_tChar, _tAlloc>>",
			/ %String $=
			(
				/ "typedef name %string_traits::value_type to adapt to \
					non-class C-style string types",
				+ "2 function templates %string_length"
			)
		),
		+ "macro %yjoin" @ %YDefinition
	)
),

b408
(
	/ %YBase $=
	(
		* "implementation" @ '#define ynothrow' @ "!defined 'YB_HAS_NOEXCEPT'
			@ %YDefinition $since b319,
		/ DLD "all 'std::enable_if' excluding 'using std::enable_if'"
			-> 'enable_if' @ "namespace %ystdex" @ %YStandardEx,
		/ $lib %TypeOperation $=
		(
			* "macro %YB_TYPE_OP_TEST_2" $since b399;
			* $comp "broken %(details::have_equality_operator,
				ystdex::has_equality_operator)" $since b399
		),
		+ $dev $doc "member grouping Doxygen comments for some random access \
			iterator templates" %Iterator,
		(
		+ "class templates %(container_adaptor; sequence_container_adaptor)"
			 @ %Container;
		+ %Path $=
		(
			+ "class template %path";
			+ "free function templates for %path"
		)
		),
		/ %String $=
		(
			/ "all 2 function tmplates %split" => "%split_l";
				// Marked as "left" because left delimiter is reserved.
			+ "2 function templates %split"
				// New return type is void instead of iterator type.
		),
		/ DLD "normalized template parameters as convention: %(_fPred, _tCont, \
			_tSeqCont)"
	)
),

b407
(
	/ %YFramework.YSLib $=
	(
		/ $dev @ %Service.YGDI $=
		(
			/ "interface %IImage" >> Core.YGDIBase,
			/ "all 'u8'" -> 'PixelType::AlphaType' @ %YGDI
		),
		+ $dev "virtual function %GraphicDevice::GetBackBuffer" @ %Core.YDevice,
		/ %UI $=
		(
			/ "constructor" @ "%Window" ^ "renderer"
				~ "background image as 2nd optional parameter",
			/ @ "class %Desktop" $=
			(
				* "no effect for background image argument" @ "destructor"
					$since b294,
				/ @ "constructor" $=
				(
					+ "buffered renderer parameter",
					/ "made renderer through buffer from screen as back buffer \
						when renderer not specified"
				)
			),
			/ @ "constructor" @ "class %BufferedRenderer" @ %YRenderer $=
			(
				/ "defaulted creating a new buffer when provided buffer \
					argument is null",
				/ "simplified default argument as '{}'"
			)
		),
		/ "platform %MinGW32" @ %Helper.HostWindow $=
		(
			+ $dev "virtual function %Window::Refresh" @ %HostWindow,
			/ $design
				"increased performance of render windows updating a little",
		)
	),
	/ "made video initialization more" @ "function %ResetVideo" ~ "InitVideo"
		@ "platform %DS" @ %YCLib.Video,
	* "misleading iterator category" @ "template parameters" @ "function \
		template %ystdex::(erase_all, erase_all_if) for associative containers"
		$since b289
		// Containers require forward iterators, not input iterators.
),

b406
(
	/ %YFramework.YSLib $=
	(
		/ %Service.YGDI $=
		(
			/ @ "interface %IImage" $=
			(
				+ "abstract method %Clone",
				+ ynothrow @ "method %GetContext"
			);
			+ "class %BasicImage implementing %IImage";
			/ "inheritance of %BitmapBuffer" ^ "BasicImage"
		);
		/ "class %BufferedRenderer" %UI.YRenderer $=
		(
			/ "buffer" ^ "%unique_ptr<Drawing::IImage>"
				~ "public %BitmapBuffer",
			+ "buffer setting"
		)
	),
	/ DLP "library using" $=
	(
		/ freetype build \conf updated $=
		(
			/ "'modules.cfg' adjusted to fit actual library and rebuilt",
			- '-g' "compiler option" @ "platform %DS"
		);
		^ "recompiled library freetype,
			// See $known_issue_b406.
	),
),

b405
(
	/ %YFramework $=
	(
		/ %Helpers $=
		(
			/ $dev "class %FPSCounter" @ %ShellHelper ^ "types \
				%std::chrono::nanoseconds, %std::size_t"
				~ "unsigned integer types",
			/ @ "%platform MinGW32" $=
			(
				/ "updated only validated area instead of whole widget \
					renderer buffer to improve performance",
				* %"repeated calls to %::GetDC without releasing" $since b386
			)
		),
		/ %YSLib $=
		(
			/ @ "class %Timer" @ %Services $=
			(
				- "association operations; deactivation, object counting";
					// Activation states is not stored within the timer. \
						Activation only means the timer has the right base \
						tick. This saves significant resource. Users should \
						track the state manually if really needed.
				/ $dev "made interval as public accessible data member"
			),
			/ $dev "protected member %Graphics::size" => "%sGraphics"
				@ %Core.YGDIBase,
			/ %YGDI $=
			(
				(
				+ "interface %IImage";
				+ "inheritance %IImage" @ "class %BitmapBuffer"
				),
				/ "class %BitmapBuffer" $=
				(
					- 'using Graphics::GetSizeOfBuffer',
					/ "made function %GetContext virtual"
				),
				/ @ "classes %(BitmapBuffer, BitmapBufferEx)" $=
				(
					/ $dev "allocation and deallocation" ^ "%unique_ptr"
						~ "%(ynew, ydelete_array)",
					/ "functions %SetSize" ^ "parameter %'const Size&'"
						~ "2 %SDst",
					/ "allocation fails" @ "functions %SetSize"
						^ "distinguishable and clearer exception strings"
				),
				+ 'using %BitmapBuffer::SetSize' @ "class %BitmapBufferEx"
			)
		)
		/ @ "%platform DS" @ %YCLib $=
		(
			+ "function inline %DMAFillWordsAsync" @ %NativeAPI,
			/ %Video $=
			(
				- "cache flush before DMA copying"
					@ "function %ScreenSynchronize",
				- "fill zeros" @ "function %ResetVideo"
				// These make performance a little improved.
			)
		);
	),
	- $dev $repo "pattern glob '*/build*'" @ "file %.hgignore",
	+ $dev "files for build FreeType2"
	/ $doc "reconstructed most YSLib documentation"
		@ "%Documentation::Designation" >> "%Documentation::YSLib"
),

b404
(
	/ %YReader.shell $=
	(
		/ "widget layout",
		- "touch screen desktop background image",
		!^ DLD "magic number of image pointer array size"
	),
	(
	+ "access history model class template %GAccessList"
		@ %YFramework.YSLib.Service;
	/ $dev "simplified implementation" @ "reading list"
		@ %YReader.'text reader'
	)
),

b403
(
	/ %YFramework $=
	(
		/ %YSLib.Core $=
		(
			/ @ "class %String" $=
			(
				/ "simplified constructor template",
				- $dev $lib "static member object for encoding convesion";
				* $comp "thread-safety and reentrance on constructing"
					$since $before b132
			),
			/ %YFileSystem $=
			(
				/ @ "class %Path" $=
				(
					/ "allowed specifying encoding" @ "constructor template",
					/ "simplified non-template constuctors",
					/ "public inheritance %String" -> "explicit conversion \
						functions to %(String&, const String&),
					+ "function %Swap",
					+ "fully implementation"
						@ "functions %(GetExtension, GetStem)"
				),
				- "namespace scope objects %(FS_Now_X, FS_Parent_X)",
				- "functions %(SplitPath, 2 HaveSameStems, 2 GetExtensionOf, \
					2 IsExtensionOf, 2 HaveSameExtensions, GetStemOf, \
					2 IsStemOf, 2 GetFileNameOf)
					// Use member functions of %Path instead.
			),
			/ "functions for adding and removing nodes" @ "class %ValueNode" $=
			(
				+ "functions %(Add, Remove) returing %bool",
				/ "functions %operator(+=, -=) returning %ValueNode&"
			)
		),
		/ %YCLib.'NativeAPI $=
		(
			- "object placeholder 'static int t'"
			/ $comp DLB "reduced warning [-funused-variable]"
		),
		/ DLB "implementation to reduce warning [-funused-variable]"
			@ "configuration %'release_*'" @ "function %TestFramework"
			@ %Helper,
		* "missing 'YF_API'" @ "friend function %operator>>"
			@ %NPL.Configuration $since b362
	)
),

b402
(
	/ %YFramework $=
	(
		/ %CHRLib $=
		(
			- "namespace macros",
			+ "3 function templates %MakeUCS2LEString" @ %CharacterProcessing
		),
		/ %YCLib $=
		(
			/ $dev "normalized header including with prefix 'YCLib/'",
			/ @ "platform %MinGW32" @ %NativeAPI $=
			(
				/ "simplified including" ,
					// Reduced some name pollution.
				- "directory APIs"
			),
			/ %FileSystem $=
			(
				/ "class %FileNode" @ "platform %MinGW32" ^ "MinGW \
					wide-oriented directory APIs" ~ "custom UTF-8 APIs",
				* "spell error" $since b171
					$= (/ %YCL_PATH_SEPERATOR => %YCL_PATH_SEPARATOR),
				+ "static asserts to check delimiter and separator constraints",
				+ "file system path encoding constant %CS_Path";
				$dep_to "FileSystem"
			)
		),
		/ %YSLib $=
		(
			* DLB "missing header %(YSLib/YAdaptor/YTextBase.h, \
				CHRLib/Convert.hpp)" @ "VC++ project" $since b400,
			/ %Adaptor.YAdaptor $=
			(
				(
				$dep_from "FileSystem";
				+ "using %CS_Path" @ "namespace %YSLib::IO",
				$dep_to "CS_Path"
				);
				/ "all file system related name" @ "namespace %YSLib"
					>> "namespace %YSLib::IO"
			),
			/ %Core.YFileSystem $=
			(
				* "spell error" $since $before b132
					$= (/ %FS_Seperator => %FS_Separator),
				(
				$dep_from "CS_Path";
				/ "file system path encoding constant %CS_Path" ~ "%CP_Path";
				- "%CP_Path"
				)
			)
		)
	),
	/ $doc "made expected non-sentance Doxygen especially for directive '\sa'",
	* "missing including header %Functional"
		@ %YBase.YStandardEx.AnyIterator $since b355
),

b401
(
	/ @ %YFramework.Helper $=
	(
		/ "platform %MinGW32" $=
		(
			/ 'yconstexpr wchar_t WindowClassName[]{L"YFramework Window"}'
				@ "non-public header" >> %HostWindow,
			+ "2 function templates %WrapWidget" @ "namespace %Host" @ %HostUI
		),
		(
		+ "public member %IdleSleep" @ "class %GUIShell" @ %GUIShell;
		/ "GUI sleep" @ "function %GUIApplication::DealMessage"
			>> "class %GUIShell"
			// It is only used on hosted environment by default for \
				performance.
		)
	),
	/ $dev $build @ "Code::Blocks projects" $=
	(
		/ "simplified library dependencies",
		+ "pararrel compiling support" @ "makefile commands" @ "platform %DS"
	),
	/ $build "headers of library %freetype" @ "project %YFramework"
		>> "directory %3rdparty/include" ~ "directory %YFramework/include"
		// For convenience, the main YFramework VC++ project is still \
			containing these items, as for "/doc". And it is required to put \
			the directory "3rdpraty" into the header searching path by user, \
			since FreeType2 headers are explicitly included by header \
			"YSLib/Adaptor/Font.h".
),

b400
(
	/ %YRader $=
	(
		/ %'text reader' $=
		(
			+ "bookmarks saving and loading",
			(
			$ dep_from "fixed text open mode";
			* $comp "dead loop or wrong position calculated after reader \
				reaching EOF" @ "some files" @ "%platform MinGW32" $since b299
			)
		),
		/ $dev "cleanup" @ %(main, shells)
			// To eliminate [-Wmissing-declarations].
	),
	/ %YBase.YStandardEx $=
	(
		/ @ %AnyIterator $=
		(
			+ "template parameter for difference type"
				@ "class tempalte %any_input_iterator),
			(
			+ "class templates %(any_forward_iterator, \
				any_bidirectional_iterator)";
			+ "typedefs %(forward_monomorphic_iterator, \
				bidirectional_monomorphic_iterator)
			)
		),
		/ $dev "inheritance and member typedefs cleanup"
			@ "class templates" @ Iterator,
		(
		- "all entities %(is_dereferncable, check_dereferncable)";
		* $comp "spelling error" $since b249
		),
		* spell error $since b250 $=
		(
			/ "%is_undereferencable" => "%is_undereferenceable",
			/ "%check_undereferencable" => "%check_undereferenceable"
		)
	),
	/ %YFramework,
	(
		/ %CHRLib $=
		(
			/ %'encoding conversion' $=
			(
				* "implementation" @ "function %MBCToUC#2" $since b299,
				/ "reduced duplicate call of mapping function fetching"
					@ "conversion for string",
				+ $dev "assertions as null pointer check"
			)
			+ "header %Convert.hpp"
		),
		/ %YSLib $=
		(
			/ "class %TextFileBuffer" @ %Service $=
			(
				(
				* "wrongly using text open mode with random position \
					calculation" $since b273,
					// It seems that DS ignores difference between text and \
						binary mode like POSIX systems, so only affected on \
						platform %MinGW32.
				$ dep_to "fixed text open mode"
				),
				/ "reduced duplicate call of mapping function fetching"
					@ "random accessing"
			),
			/ %Adaptor $=
			(
				/ %YAdaptor $=
				(
					/ DLD "simplified including headers",
					- "namespace %YSLib::Pattern"
				),
				+ "header %YTextBase.h"
			)
		)
	)
);

////

