Hyperanchor generating flow

In this page, describing about hyperanchor generating flow.

Precondition

Hyperanchor generating flow in this page is on the presumption that a user executed below steps with selecting any string in a web page.

Internet Explorer

Select "Bookmark here (HYPER-ANCHOR)", "Bookmark selection (HYPER-ANCHOR)", "Copy to clipboard here (HYPER-ANCHOR)" or "Copy to clipboard selection (HYPER-ANCHOR)" from right click context menu.
or
Click "" or "" on the HYPER-ANCHOR toolbar ().

Firefox

Select "Bookmark here (HYPER-ANCHOR)" or "Copy to clipboard here (HYPER-ANCHOR)" from right click context menu.
or
Click "" on the HYPER-ANCHOR toolbar ().

Hyperanchor generating flow

A hyperanchor is generated along with below steps.

# flow
1 Retrieve head node information of current selection. e.g. offset, node type, node content.
* In case that no character is selected, HYPER-ANCHOR does not retrieve offset and retrieve the attribute name and attribute value as node content.
2 If the node has "id" or "name" attribute, HYPER-ANCHOR check whether the attribute value is unique in the web page.
3 In case of that the attribute value is unique, set the head of anchor path // + tag name + [@ + id or name + = " + value + "].
e.g.) //DIV[@id=""]
4 In case of that the attribute value is not unique, scan previous siblings node that has "id" or "name" attribute and search for unique attribute value.
5 In case of that unique attribute value is found, add "/following-sibling::" to the hyperanchor path and proceed to #9.
e.g.) //DIV[@id=""]/following-sibling::
6 In case of that unique attribute value is not found, repeat #4 to #5 until previous siblings node does not exist and count up the number of the same name tag as the destination node.
7 Add "/ tag name [ count of same name tag + ]" to the head of hyperanchor path.
8 Repeat #2 to #7 for parent node until "id" or "name" attribute with unique value is found or "HTML" tag is found.
9 Add offset and node type retrieve in #1 to the hyperanchor path ( offset )( node type + )( content )
e.g. /TABLE[3]/TBODY[1]/TR[1]/TD[1](0)(3)(%e3%83%aa%e3%83%b3%e3%82%af)
10 Process the tail node of current selection in the same manner (#1 to #9).
11 In case of adopt specific style, create css style strings.
e.g.) padding-left:16px;background:transparent%20scroll%20no-repeat%20top%20left%20url(http:/
12 Add hyperanchor version (e.g. #hyperanchor1.2:) to the URL of the web page, and combine head node hyperanchor path, tail node hyperanchor path and hyperanchor style with "&" after the hyperanchor version.

e.g.)
http://www.hyper-anchor.org/tutorial/sample.html#hyperanchor1.2://DIV[@id="contents"]/following-sibling::TABLE[1]/TBODY[1]/TR[1]/TD[2](2)(3)(%E3%83%97%E3%83%AB%E6%96%87)&//DIV[@id="contents"]/following-sibling::TABLE[1]/TBODY[1]/TR[1]/TD[2](6)(3)(%E3%83%AB%E6%96%87%E5%AD%97)&background-color:rgb(255,255,153);border:thin%20dotted%20rgb(204,204,204);