ハイテクコード

運指を完了するタスクはささいなことではないため、非常に興味深いものです。 私はそれが正しいと思うので、それを解決する誘惑に抵抗することもできませんでした。



ブラウザー間の互換性、スケーラビリティ、印刷性、コンパクトさなどの標準的な要件に加えて、たとえば、運指を単純にコピーして、たとえばテキスト文書に貼り付けることもできるようにしたいと思います。 つまり、テキスト形式では、コードは次のようになります。



 午前
 O---
 OF--
 O-R-
 O-M-
 O---
 X--- 




Oは開いた弦、Xはくぐもった音、残りの文字は指を示します。



コピーを可能にし、ブロック間の接続性を低くするために、レイアウトはやや面倒です:弦は首の内側に配置され、各フレットは内側に配置され、フレットでは押された指または押されていないことを示すブロックです。 すべてのブロックには、クラス属性でhiqus文字列として指定された追加パラメーターがあります。これにより、視覚化をそれらにバインドする機能が提供され、適切なライブラリーを使用してjavascriptを使用して便利に変更できます。



まず、 コードバンクを作成します。



<! DOCTYPE html > <br> <? xml-stylesheet type ="text/xsl" href ="styles.xsl?rev:123" ? > <br> < html xmlns:ch ="urn:markup:chords" > <br> < head > <br> < title > </ title > <br> < link href ="styles.css" type ="text/css" rel ="stylesheet" /> <br> </ head > <br> < body > <br><br> < ch:fingerboard id ="Am" > <br> < ch:title > Am </ ch:title > <br> < br /> <br> < ch:string class =" number=1 " > <br> < ch:head > O </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> </ ch:string > <br> < br /> <br> < ch:string class =" number=2 " > <br> < ch:head > O </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:finger class =" name=fore " > F </ ch:finger > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> </ ch:string > <br> < br /> <br> < ch:string class =" number=3 " > <br> < ch:head > O </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:finger class =" name=ring " > R </ ch:finger > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < br /> <br> </ ch:string > <br> < ch:string class =" number=4 " > <br> < ch:head > O </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:finger class =" name=middle " > M </ ch:finger > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < br /> <br> </ ch:string > <br> < ch:string class =" number=5 " > <br> < ch:head > O </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < br /> <br> </ ch:string > <br> < ch:string class =" number=6 mute=true " > <br> < ch:head > X </ ch:head > <br> < ch:flet class =" number=1 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=2 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < ch:flet class =" number=3 " > <br> < ch:clear > - </ ch:clear > <br> </ ch:flet > <br> < br /> <br> </ ch:string > <br> </ ch:fingerboard > <br><br> </ body > <br> </ html >





コードは1つだけです。残りは近くに追加されます。 それにはbr-kiが必要です。そうでなければ、すべてを1行で構築します。 残念ながら、Operaは、コピー時に、インラインブロック=(



スタイルはブロックに設定され、修飾子によって指定されます:



  1. ch \: 文字列 {
  2. ボーダーボトム:1pt黒一色。
  3. ディスプレイ:ブロック;
  4. マージン:0 0 1.3em 0;
  5. 空白:nowrap;
  6. パディング右:2em;
  7. }
  8. ch \: string .nu​​mber \ = 1 {border-width:1.0pt}
  9. ch \: string .nu​​mber \ = 2 {border-width:1.2pt}
  10. ch \: string .nu​​mber \ = 3 {border-width:1.4pt}
  11. ch \: string .nu​​mber \ = 4 {border-width:1.6pt}
  12. ch \: string .nu​​mber \ = 5 {border-width:1.8pt}
  13. ch \: string .nu​​mber \ = 6 {border-width:2.0pt}
  14. ch \: string .mute \ = true {
  15. ボーダーカラー:ライトグレー;
  16. }


ルートブロックの特別な修飾子を使用すると、文字列と指を強調表示できます。 例:



  1. ch \:fingerboard.highlight \ =指\ = \ =親指ch \:finger.name \ =親指、
  2. ch \:fingerboard.highlight \ = finger \ = \ = fore ch \:finger.name \ = fore、
  3. ch \:fingerboard.highlight \ = finger \ = \ = middle ch \:finger.name \ = middle、
  4. ch \:fingerboard.highlight \ =指\ = \ =リングch \:finger.name \ =リング、
  5. ch \:fingerboard.highlight \ = finger \ = \ = little ch \:finger.name \ = little {
  6. 背景色:赤;
  7. ボーダーカラー:赤;
  8. }


銀行からページコードに接続します



  1. <! DOCTYPE html >
  2. <? xml-stylesheet type = "text / xsl" href = "styles.xsl?rev:123">
  3. < html xmlns:ch = "urn:マークアップ:コード" >
  4. < >
  5. < title >和音</ title >
  6. < link href = "styles.css" type = "text / css" rel = "stylesheet" />
  7. </ >
  8. < 本体 >
  9. < ch: fingerboard src = "chords.xml#Am" srctype = "text / xml" >
  10. <a href = "chords.xml#Am"> Amコード</ a >
  11. </ ch:指板 >
  12. < ch: fingerboard src = "chords.xml#Am" srctype = "text / xml" class = "highlight = string == 1 highlight = string == 2" >
  13. <a href = "chords.xml#Am"> Amコード</ a >
  14. </ ch:指板 >
  15. < ch: fingerboard src = "chords.xml#Dm" srctype = "text / xml" >
  16. <a href = "chords.xml#Dm">コードDm </ a >
  17. </ ch:指板 >
  18. < ch: fingerboard src = "chords.xml#Dm" srctype = "text / xml" class = "highlight = finger == fore highlight = finger == middle" >
  19. <a href = "chords.xml#Dm">コードDm </ a >
  20. </ ch:指板 >
  21. </ body >
  22. </ html >


xhtml-inclusionsのテクノロジーのおかげで、各ページでコードレイアウトをロードするのではなく、コードのバンクをロードした後です。 新しい実装は別のファイルに残されており、指定された識別子を持つドキュメントのフラグメントのロードもサポートしています。



  1. < t:template match = "* [@src and contains(@srctype、 'xml')]" mode = "content" >
  2. < t:変数 = "doc" select = "substring-before(@src、 '#')" />
  3. < t:変数 = "id" select = "substring-after(@src、 '#')" />
  4. < t:選択 >
  5. < t: test = "$ id"の場合 >
  6. < t:apply-templates select = "document($ doc)// * [@id = $ id] [1] / node()" />
  7. </ t:いつ >
  8. < t:それ以外の場合 >
  9. < t:apply-templates select = "ドキュメント(@src)/ * /ノード()" />
  10. </ t:それ以外の場合 >
  11. </ t: >を 選択します
  12. </ t:テンプレート >


そこには、Mozillaのハックがあります。これにより、要素のスタイルがすべてのブラウザーで等しく重ねられます。



  1. <t:テンプレートマッチ= "ボディ"モード= "コンテンツ" >
  2. <t:apply-templates select = "*" />
  3. <script> <![CDATA [
  4. 機能 (){
  5. if (! document .getElementsByTagNameNS) return ;
  6. var nsList = [ "urn:markup:chords" ];
  7. forvar nsI = nsList.length; nsI--;){
  8. var els = document .getElementsByTagNameNS(nsList [nsI]、 '*' );
  9. while (xel = els [0]){
  10. var el = document .createElement(xel.nodeName);
  11. varノード;
  12. while (node = xel.firstChild)el.appendChild(node);
  13. var sa = xel.attributes;
  14. forvar i = 0; i <sa.length; ++ i){
  15. var node = sa.item(i);
  16. el.setAttribute(node.nodeName、node.nodeValue);
  17. };
  18. xel.parentNode.replaceChild(el、xel);
  19. };
  20. };
  21. };
  22. ]]> </ script>
  23. </ t:テンプレート>




もちろん、ページをテキスト/ htmlとして提供することもできます。ユーザーは、運指の代わりに、銀行の対応するコードへのリンクを見ることができます。



All Articles