約 3,602,979 件
https://w.atwiki.jp/arunau32167/pages/312.html
METAL銃II HP:http //www.geocities.jp/retsuzanmura/ HP:http //www.vector.co.jp/soft/win95/game/se163018.html +スクリーンショット ゲーム内容の説明 関連作品 パロって!!ファイター スペシャルヒーローズダイナマイト バーニングエンジェル 魁!!男塾 指武利遊戯 Majewelune World 第1話 Majewelune World 第2話 Majewelune World 第3話 Majewelune World 第4話 Majewelune World 第5話 Majewelune World 第6話 Majewelick Impact Majewelune World SPECIAL マジュウェル マジュウェル The second story マジュウェル The second story Like a sky METAL銃 METAL銃III -Shout of the arms- METAL BLADE RETSUZAN ALL STAR KGT 95 VERSION ボツってファイター 弾断打駄々DAN・Z 弾断打駄々DAN・Zvs激痛 弾断打駄々DANIII 弾断打駄々DANIII2nd~THE second grade inferno~ 激-GEKI- 激痛-GEKI 2- 登録タグ 2D格闘ツクール95(フリーウェア) 最終更新日時 2011-08-16 22 05 07 (Tue)
https://w.atwiki.jp/metalstorm_online/pages/2.html
メニュー トップページ エントリーの方法 禁則事項 大会結果 ここを編集
https://w.atwiki.jp/metalstorm_online/pages/6.html
更新履歴 @wikiのwikiモードでは #recent(数字) と入力することで、wikiのページ更新履歴を表示することができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/17_117_ja.html たとえば、#recent(20)と入力すると以下のように表示されます。 取得中です。
https://w.atwiki.jp/metalstorm_online/pages/9.html
@wikiにはいくつかの便利なプラグインがあります。 アーカイブ コメント ニュース 人気商品一覧 動画(Youtube) 編集履歴 関連ブログ これ以外のプラグインについては@wikiガイドをご覧ください = http //atwiki.jp/guide/
https://w.atwiki.jp/smsm/pages/82.html
WALLPAPER COLLECTION http //machiuke.v-colors.com/
https://w.atwiki.jp/api_programming/pages/117.html
概要 プログラム本体?とViewから構成される。 本体はAppBaseを継承ここからViewを呼び出す(登録する?) ViewはViewを継承 全てのアプリケーションは Applicationオブジェクトを含み、エントリポイントとなる。 Eclipseプラグインは、これを自動的に生成する。 Application オブジェクトは getInitialView() をオーバーライドする必要があり、ヴューを最初にプッシュする。そして、 view と delegate を持つ配列、もしくは view 一要素のみを持つ配列を返す必要がある。 return [ new MyView(), new MyDelegate() ]; AppBase 基本のクラスとなる。 全てアプリははこのクラスを継承する widgets,watch-appsでは、次の順序で呼ばれるonStart()ここでアプリケーションレベルの初期化が行わる ビューが作られる前に実施される getInitialView()アプリケーションのWatchUi.Viewを戻り値に設定(必須)。いわゆる見た目。 widget,watchi-appsではアプリケーションのWatchUi.InputDelegateを戻り値に設定できる(入力を扱いたければ。)Widget, Data Fieldsでは設定できない。(入力を受け取れない。) WatchUi.View(とWatchUi.InputDelegateの)配列を戻り値にする。 onStop()アプリケーションが終わろうとするときに呼ばれる。 終了前にデータや状態を格納しておく必要がある場合は、ここに記述する Every AppBase object has access to an objectstore to persist data. getProperty(key), setProperty(key,object)getPropertyは、object storeから与えられたkeyのデータを得る関数 keyはシンボルはダメ 戻り値はオブジェクト(なければnull) using Toybox.Application as App; class GarminTestApp extends App.AppBase { function initialize() { AppBase.initialize(); } //! onStart() is called on application start up function onStart() { } //! onStop() is called when your application is exiting function onStop() { } //! Return the initial view of your application here function getInitialView() { return [ new GarminTestView() ]; } } Products Garmin makes a wide variety of products for many use cases, and Monkey C makes it easy to write for all our Connect IQ compatible devices. Monkey C asks the developer which Connect IQ devices they choose to support because it is impossible to know whether a future product may be incompatible with your app. As new Connect IQ compatible products appear on the market, the simulator will be updated to support them so developers can decide whether to support them. The SDK currently supports two imaginary products designed for general prototyping—a round-watch and a square-watch—along with all currently supported production devices (e.g. Forerunner 920XT, fēnix 3, etc.). The round watch is button only, and the square watch is a touch screen product with fewer buttons. Products supported by an app are listed in the products block of the manifest file iq products iq product id="round-watch"/ /iq products Permissions Certain modules expose personal information about the user or expose communication to the internet. To use these modules, permission must be requested from the user at installation time. To request permission, the module name must be added to the permissions list of the manifest file. The following modules require permission ActivityRecording Communications Positioning Sensor UserProfile More modules may be added to this list as modules are added to the API. To request permission, use the following syntax in the manifest file iq permissions iq uses-permission id="Sensor"/ /iq permissions
https://w.atwiki.jp/guitarhero/pages/52.html
Official Guitar Hero Metallica Website http //www.guitarherometallica.com/ Guitar Hero Metallica - Wikipedia, the free encyclopedia http //en.wikipedia.org/wiki/Guitar_Hero _Metallica Guitar Hero Metallica Reveal Trailer || 360 Games Zone || | Guitar Hero Metallica プレビュー http //www.360gameszone.com/?p=4789 We don t need ESRB leaks. Metallica themselves have gone one better and released the full, complete tracklist for the upcoming Guitar Hero Metallica on the band s website. And it s a good one. You ll find most of the band s older classics represented ("One", "Master of Puppets", "For Whom The Bell Tolls", etc), and should also find the selection of tracks from "other" bands - like Kyuss, Queen, Slayer The Sword - to your liking as well. The complete tracklist below. Metallica Songs All Nightmare Long Battery Creeping Death Disposable Heroes Dyers Eve Enter Sandman Fade To Black Fight Fire With Fire For Whom The Bell Tolls Frantic Fuel Hit The Lights King Nothing Master of Puppets Mercyful Fate (Medley) No Leaf Clover Nothing Else Matters One Orion Sad But True Seek And Destroy The Memory Remains The Shortest Straw The Thing That Should Not Be The Unforgiven Welcome Home (Sanitarium) Wherever I May Roam Whiplash Other Artists Alice In Chains - No Excuses Bob Seger - Turn The Page Corrosion of Conformity - Albatross Diamond Head - Am I Evil? Foo Fighters - Stacked Actors Judas Priest - Hell Bent For Leather Kyuss - Demon Cleaner Lynyrd Skynyrd - Tuesdays Gone Machine Head - Beautiful Mourning Mastodon - Blood And Thunder Mercyful Fate - Evil Michael Schenker Group - Armed and Ready Motorhead - Ace of Spades Queen - Stone Cold Crazy Samhain - Mother of Mercy Slayer - War Ensemble Social Distortion - Mommy s Little Monster Suicidal Tendencies - War Inside My Head System of a Down - Toxicity The Sword - Black River Thin Lizzy - The Boys Are Back in Town PS3 and 360 owners should note that if you ve already got the "Death Magnetic" DLC, those ten tracks will be included in the game s main "campaign" mode. If you ve got World Tour on Wii or PS2 version, the tracks "Broken Beat Scarred," "Cyanide" and "My Apocalypse" will come included on the disc, since DLC is impossible/tricky on those systems. Guitar Hero . . . The Songs [Metallica] Metallica.com http //www.metallica.com/index.asp?item=601837
https://w.atwiki.jp/jasagiri/pages/27.html
rubyでのメタプログラミングのヘルパ集 rubywaves で使っているAutoCodeがrequireしている。 http //whytheluckystiff.net/articles/seeingMetaclassesClearly.html Dwemthy の Array :http //poignantguide.net/dwemthy/ (http //poignantguide.net/ruby/index.html) (http //www.aoky.net/articles/why_poignant_guide_to_ruby/index.html) Sunday, April 17, 2005 Seeing Metaclasses Clearly If you’re new to metaprogramming in Ruby and you’d like to start using it, perhaps these four methods could give you a bit more vision. class Object # The hidden singleton lurks behind everyone def metaclass; class self; self; end; end def meta_eval blk; metaclass.instance_eval blk; end # Adds methods to a metaclass def meta_def name, blk meta_eval { define_method name, blk } end # Defines an instance method within a class def class_def name, blk class_eval { define_method name, blk } end end I’ve been keeping these methods in a file called metaid.rb and it’s a start toward building a little library that can simplify use of metaclasses. Let’s talk about metaclasses and I advise you to keep metaid.rb at your side. Take time to run some code from this article and you’ll understand much better. About Classes Well, what is a Class? Let’s create a simple object and see. class MailTruck attr_accessor driver, route def initialize( driver, route ) @driver, @route = driver, route end end m = MailTruck.new( Harold , [ 12 Corrigan Way , 23 Antler Ave ] ) = # MailTruck 0x81cfb94 @route=[ 12 Corrigan Way , 23 Antler Ave ], @driver= Harold m.class = MailTruck An Object is storage for variables. Instance variables. A MailTruck object, once initialized, will have a @driver and a @route variable. It can hold any other variables as well. m.instance_variable_set( @speed , 45 ) = 45 m.driver = Harold Okay, so the @driver instance variable has an accessor. When Ruby sees attr_accessor driver in the MailTruck class definition, you get reader and writer methods. The methods driver and driver=. These methods are stored in the class. So the instance variable is in the object and the accessor methods are in the class. They’re in two completely different spots. It’s an important lesson objects do not store methods, only classes can. Classes Are Objects Okay, but classes are objects, right? I mean if everything is an object in Ruby, then classes and objects should both be objects. Which makes them the same? Sure, classes are objects. You can run all the same methods on classes that you can run on object. Look, they each have their own ID in the symbol table. m.object_id = 68058570 MailTruck.object_id = 68069450 But I’ve already told you classes store methods. They’re different. Now I know you’re probably a bit confused wondering, “If a class is an object, but objects are built on classes, isn’t there a big confusing infinite cycle here that you’re not explaining?” No, there’s not. I hate to break it to you, but a class isn’t really an object. From Ruby’s source code struct RObject { struct RBasic basic; struct st_table *iv_tbl; }; struct RClass { struct RBasic basic; struct st_table *iv_tbl; struct st_table *m_tbl; VALUE super; }; Look! A class has an m_tbl (a symbol table for storing methods) and a superclass (pointer to a superclass). But let me reassure you. To a Ruby programmer, a class is an object. Because it meets the two big criteria you can store instance variables in a class and it is descended from the Object class. That’s it. o = Object.new = # Object 0x815c45c o.class = Object Class.superclass.superclass = Object Object.class = Class Object.superclass = nil The Object class sits at the very head of the table and comes down to participate only when it has methods that can’t be found anywhere else. What On Earth Are Metaclasses? The term metaclass is supposed mean “a class which defines classes.” This definition doesn’t really work with Ruby, though, since “a class which defines a class” is simply a Class. Look at how you can add a method in the Class class and then use it in class definitions. class Class def attr_abort( *args ) abort Please no more attributes today. end end class MyNewClass attr_abort id, diagram, telegram end Which prints Please no more attributes today. The attr_abort method can be used in definitions. You’re constantly defining and redefining classes in Ruby. It’s not meta, it’s just part of the code. Classes hold methods. How can you complicate that? Since the earlier definition doesn’t really work, I like to think of the Ruby metaclass as “a class which an object uses to redefine itself.” Do Objects Need Metaclasses? Objects can’t hold methods. Most objects don’t need to hold methods. But sometimes you may want an object to have some methods. Sometimes that’s your answer to a problem. You can’t do that. But Matz has given us metaclasses which are good enough. In the YAML library, you can customize the properties shown when an object is output. require yaml class m def to_yaml_properties [ @driver , @route ] end end YAML dump m --- !ruby/object MailTruck driver Harold route - 12 Corrigan Way - 23 Antler Ave This is handy if you want to dump one specific object with a certain style of YAML without effecting every object from that class. In the above example, only the object in the m variable will be output with its properties in order. All other MailTruck objects will be output in whatever way the YAML library chooses. Sometimes we may want to display a certain string one way without needing to modify the String class (which affects every string in your code). So the object in the m variable has its own special to_yaml_properties method. It’s stored in a metaclass. The metaclass stores methods for the object and sits right in the inheritance chain. We could also add the to_yaml_properties method with this convenient syntax def m.to_yaml_properties [ @driver , @route ] end If you have the metaid.rb methods from the top of this article loaded, try this m.metaclass = # Class # MailTruck 0x81cfb94 m.metaclass.class = Class m.metaclass.superclass = # Class MailTruck m.metaclass.instance_methods = [..., to_yaml_properties , ...] m.singleton_methods = [ to_yaml_properties ] When you use the class m syntax, you’re opening up a metaclass. Ruby calls these virtual classes. Notice the result of m.metaclass. A class attached to an object # Class # MailTruck 0x81cfb94 . When an object finds methods in an attached metaclass, these methods are referred to as the object’s singleton methods rather than the object’s metaclass’ instance methods (if you get my drift.) And since there can only be a single metaclass attached to an object, it’s called a _single_ton. It’s much easier to see metaclasses when you’re using the metaclass method. Normally, you would need to use ( class self; self; end ) wherever you wanted to root out a metaclass. But this makes it much simpler. Do Metaclasses Need Metaclasses? m.metaclass.metaclass = # Class # Class # MailTruck 0x81cfb94 m.metaclass.metaclass.metaclass = # Class # Class # Class # MailTruck 0x81cfb94 Check out those frivolous metaclasses we’re creating. So what can we do with a metaclass of a metaclass? Well, the same thing we do with a normal metaclass. A normal metaclass holds methods for an object. So a metaclass of a metaclass holds methods for that metaclass—which is just an object, of course! The problem with a metaclass of a metaclass is that there’s not much practical use for them. You can only use the methods if you’re deep inside the chain and we don’t really want to spend much time down there. m.meta_eval do self.meta_eval do self.meta_eval do def ribbit; *ribbit* ; end end end end m.metaclass.metaclass.metaclass.singleton_methods = [ class_def , metaclass , constants , meta_def , attr_test , nesting , ribbit ] Metaclasses are only really useful one level deep. You want to have give methods to an object. Or, as you will see, you might want a specific class to have a metaclass. Beyond that, you’re just storing methods in these obscure metaclasses that no one can really get at. Which you might need to do sometime. Who knows. The important thing to know at this point is metaclasses don’t go up, they go out. Yes, when you create a metaclass for an object, it happens to intercept method calls before the object’s inheritance chain. But that doesn’t mean inheritance is affected by further metaclasses. When you create a metaclass of a metaclass, it has no affect on the object referred to by the original metaclass. Metaclasses Have One More Funky Trick For Classes and It’s The Crucial Trick In The Metaprogrammer’s Handbook One more point and I believe this one is the juiciest. If you read the rest of this essay and quit before this section, you’ve come away without the most important lesson. You may know some nice things about objects and metaclasses, but it all pales. I’m going to reiterate two previous statements about classes and build on them. Class are objects. This means they can hold instance variables. Metaclasses hold instance methods. When attached to an object, these methods become singleton methods. These methods intercept calls before they trickle up the chain of inheritance. Have you ever used instance variables in a class before? I don’t mean in a class method. I mean in the class itself. class MailTruck @trucks = [] def MailTruck.add( truck ) @trucks truck end end Why not just use a class variable? class MailTruck @@trucks = [] def MailTruck.add( truck ) @@trucks truck end end They work exactly the same, right? I mean it doesn’t matter, does it? Here are two reasons you’ve probably been using class variables rather than class instance variables Class variables are clearly class variables. They have two at-symbols. Less confusion. Class variables can be referenced in instance methods, if needed. See, this works properly class MailTruck @@trucks = [] def MailTruck.add( truck ) @@trucks truck end def say_hi puts Hi, I m one of #{@@trucks.length} trucks! end end But this does not class MailTruck @trucks = [] def MailTruck.add( truck ) @trucks truck end def say_hi puts Hi, I m one of #{@trucks.length} trucks! end end So what are instance variables good for? What a waste of space! I’m never using them again! (Yes, please stick to class variables in situations like the above.) Let me also point out that metaclasses are again showing up above, since every class method is stored in a metaclass. That’s simply just how it works. Which is why you can also use self class MailTruck def self.add( truck ) @@trucks truck end end Or the singleton syntax class MailTruck class self def add( truck ) @@trucks truck end end end Class instance variables and metaclass instance methods are really pretty pointless in a plain old class. But when inheritance enters the mix, the party comes alive. Writhing bodies and drunken madness, believe me. class MailTruck def self.company( name ) meta_def company do; name; end end end The above method is remarkably simple, but excavates a beachhead worth of possibilities. A new company class method is added to MailTruck that can be used in a class definition. class HappyTruck MailTruck company Happy s -- We Bring the Mail, and That s It! end Okay, so the company class method gets executed with the Happy’s company name and slogan. What does meta_def do with it?? Well, the meat of meta arrives here. The meta_def adds a new method called company to the HappyTruck metaclass. The beauty of this is that the method is not added to the MailTruck metaclass, but to the derived class HappyTruck. This may seem simple, but it’s very powerful. You can write simple class methods which will add class methods to a derived class. This is the secret to Rails and Ruby/X11 and so many other examples of metaprogramming in Ruby. Dwemthy’s Array Ruby本のためにDwemthyのArrayを作っているときに大部分を発見しました。 私は作成したコードをここまでシンプルにすることが出来ました。( RPG で読みやすく) : class Creature def self.traits( *arr ) return @traits if arr.empty? attr_accessor *arr arr.each do |trait| meta_def trait do |val| @traits ||= {} @traits[trait] = val end end class_def initialize do self.class.traits.each do |k,v| instance_variable_set( @#{k} , v ) end end end end meta_def と class_def はメタプログラミングをちょっとわかりやすくするのを助けます。 meta_def のインスタンス変数の使い方に注意してください。 この状況でクラス変数がどうして動作しないのか理解したいなら、 インスタンス変数をクラス変数に変えてみてください。 次に、Dwemthy の Array ページで説明されている怪物を作成し始めてください。そうすれば全体を確認できるでしょう。
https://w.atwiki.jp/fujiyan/pages/55.html
Struts2を使うには 参考 papandaDiary My Thoughts on software development SecurityManagerを無効にするListnerを作成する ServletContextListenerをimplementsしたListnerクラスを作成contextInitialized()メソッド内で、OgnlRuntime.setSecurityManager(null)を呼び出す 参考サイトでは、HttpSessionListenerとHttpSessionAttributeListenerもimplementsしているが、必要か…? package jp.fujiyan.gae.struts2; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import ognl.OgnlRuntime; public class OnglSecurityListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { OgnlRuntime.setSecurityManager(null); } @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } } web.xmlに、作成したListenerの呼び出しを追加 listener listener-class jp.fujiyan.gae.struts2.OnglSecurityListener /listener-class /listener freemaker.core.TextBlockをオーバーライド 以下のエラーが出る場合に対処 java.lang.NoClassDefFoundError javax.swing.tree.TreeNode is a restricted class. Please see the Google App Engine developer s guide for more details. ソースフォルダ内にfreemaker.core.TextBlock.javaを、下記内容で作成する /* * Copyright (c) 2003 The Visigoth Software Society. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowledgement * "This product includes software developed by the * Visigoth Software Society (http //www.visigoths.org/)." * Alternately, this acknowledgement may appear in the software itself, * if and wherever such third-party acknowledgements normally appear. * * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the * project contributors may be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact visigo...@visigoths.org. * * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth" * nor may "FreeMarker" or "Visigoth" appear in their names * without prior written permission of the Visigoth Software Society. * * THIS SOFTWARE IS PROVIDED ``AS IS AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE VISIGOTH SOFTWARE SOCIETY OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Visigoth Software Society. For more * information on the Visigoth Software Society, please see * http //www.visigoths.org/ */ package freemarker.core; import java.io.IOException; /** * A TemplateElement representing a block of plain text. * * @version $Id TextBlock.java,v 1.17 2004/01/06 17 06 42 szegedia Exp $ */ public final class TextBlock extends TemplateElement { private static final char[] EMPTY_CHAR_ARRAY = new char[0]; static final TextBlock EMPTY_BLOCK = new TextBlock(EMPTY_CHAR_ARRAY, false); // We re using char[] instead of String for storing the text block because // Writer.write(String) involves copying the String contents to a char[] // using String.getChars(), and then calling Writer.write(char[]).By // using Writer.write(char[]) directly, we avoid array copying on each // write. private char[] text; private final boolean unparsed; public TextBlock(String text) { this(text, false); } public TextBlock(String text, boolean unparsed) { this(text.toCharArray(), unparsed); } private TextBlock(char[] text, boolean unparsed) { this.text = text; this.unparsed = unparsed; } /** * Simply outputs the text. */ public void accept(Environment env) throws IOException { env.getOut().write(text); } public String getCanonicalForm() { String text = new String(this.text); if (unparsed) { return " #noparse " + text + " /#noparse "; } return text; } public String getDescription() { String s = new String(text).trim(); if (s.length() == 0) { return "whitespace"; } if (s.length() 20) { s = s.substring(0, 20) + "..."; s = s.replace( \n , ); s = s.replace( \r , ); } return "text block (" + s + ")"; } TemplateElement postParseCleanup(boolean stripWhitespace) { if (text.length == 0) return this; int openingCharsToStrip = 0, trailingCharsToStrip = 0; boolean deliberateLeftTrim = deliberateLeftTrim(); boolean deliberateRightTrim = deliberateRightTrim(); if (!stripWhitespace || text.length == 0) { return this; } if (parent.parent == null previousSibling() == null) return this; if (!deliberateLeftTrim) { trailingCharsToStrip = trailingCharsToStrip(); } if (!deliberateRightTrim) { openingCharsToStrip = openingCharsToStrip(); } if (openingCharsToStrip == 0 trailingCharsToStrip == 0) { return this; } this.text = substring(text, openingCharsToStrip, text.length - trailingCharsToStrip); if (openingCharsToStrip 0) { this.beginLine++; this.beginColumn = 1; } if (trailingCharsToStrip 0) { this.endColumn = 0; } return this; } /** * Scans forward the nodes on the same line to see whether there is a * deliberate left trim in effect. Returns true if the left trim was * present. */ private boolean deliberateLeftTrim() { boolean result = false; for (TemplateElement elem = this.nextTerminalNode(); elem != null elem.beginLine == this.endLine; elem = elem .nextTerminalNode()) { if (elem instanceof TrimInstruction) { TrimInstruction ti = (TrimInstruction) elem; if (!ti.left !ti.right) { result = true; } if (ti.left) { result = true; int lastNewLineIndex = lastNewLineIndex(); if (lastNewLineIndex = 0 || beginColumn == 1) { char[] firstPart = substring(text, 0, lastNewLineIndex + 1); char[] lastLine = substring(text, 1 + lastNewLineIndex); if (trim(lastLine).length == 0) { this.text = firstPart; this.endColumn = 0; } else { int i = 0; while (Character.isWhitespace(lastLine[i])) { i++; } char[] printablePart = substring(lastLine, i); this.text = concat(firstPart, printablePart); } } } } } if (result) { } return result; } /** * Checks for the presence of a t or rt directive on the same line. Returns * true if the right trim directive was present. */ private boolean deliberateRightTrim() { boolean result = false; for (TemplateElement elem = this.prevTerminalNode(); elem != null elem.endLine == this.beginLine; elem = elem .prevTerminalNode()) { if (elem instanceof TrimInstruction) { TrimInstruction ti = (TrimInstruction) elem; if (!ti.left !ti.right) { result = true; } if (ti.right) { result = true; int firstLineIndex = firstNewLineIndex() + 1; if (firstLineIndex == 0) { return false; } if (text.length firstLineIndex text[firstLineIndex - 1] == \r text[firstLineIndex] == \n ) { firstLineIndex++; } char[] trailingPart = substring(text, firstLineIndex); char[] openingPart = substring(text, 0, firstLineIndex); if (trim(openingPart).length == 0) { this.text = trailingPart; this.beginLine++; this.beginColumn = 1; } else { int lastNonWS = openingPart.length - 1; while (Character.isWhitespace(text[lastNonWS])) { lastNonWS--; } char[] printablePart = substring(text, 0, lastNonWS + 1); if (trim(trailingPart).length == 0) { // THIS BLOCK IS HEINOUS! THERE MUST BE A BETTER // WAY! REVISIT (JR) boolean trimTrailingPart = true; for (TemplateElement te = this.nextTerminalNode(); te != null te.beginLine == this.endLine; te = te .nextTerminalNode()) { if (te.heedsOpeningWhitespace()) { trimTrailingPart = false; } if (te instanceof TrimInstruction ((TrimInstruction) te).left) { trimTrailingPart = true; break; } } if (trimTrailingPart) trailingPart = EMPTY_CHAR_ARRAY; } this.text = concat(printablePart, trailingPart); } } } } return result; } /* * private String leftTrim(String s) { int i =0; while (i s.length()) { if * (!Character.isWhitespace(s.charAt(i))) break; ++i; } return * s.substring(i); } */ private int firstNewLineIndex() { String content = new String(text); int newlineIndex1 = content.indexOf( \n ); int newlineIndex2 = content.indexOf( \r ); int result = newlineIndex1 = 0 ? newlineIndex1 newlineIndex2; if (newlineIndex1 = 0 newlineIndex2 = 0) { result = Math.min(newlineIndex1, newlineIndex2); } return result; } private int lastNewLineIndex() { String content = new String(text); return Math.max(content.lastIndexOf( \r ), content.lastIndexOf( \n )); } /** * figures out how many opening whitespace characters to strip in the * post-parse cleanup phase. */ private int openingCharsToStrip() { int newlineIndex = firstNewLineIndex(); if (newlineIndex == -1 beginColumn != 1) { return 0; } ++newlineIndex; if (text.length newlineIndex) { if (newlineIndex 0 text[newlineIndex - 1] == \r text[newlineIndex] == \n ) { ++newlineIndex; } } if (new String(text).substring(0, newlineIndex).trim().length() 0) { return 0; } // We look at the preceding elements on the line to see if we should // strip the opening newline and any whitespace preceding it. for (TemplateElement elem = this.prevTerminalNode(); elem != null elem.endLine == this.beginLine; elem = elem .prevTerminalNode()) { if (elem.heedsOpeningWhitespace()) { return 0; } } return newlineIndex; } /** * figures out how many trailing whitespace characters to strip in the * post-parse cleanup phase. */ private int trailingCharsToStrip() { String content = new String(text); int lastNewlineIndex = lastNewLineIndex(); if (lastNewlineIndex == -1 beginColumn != 1) { return 0; } String substring = content.substring(lastNewlineIndex + 1); if (substring.trim().length() 0) { return 0; } // We look at the elements afterward on the same line to see if we // should strip any whitespace after the last newline for (TemplateElement elem = this.nextTerminalNode(); elem != null elem.beginLine == this.endLine; elem = elem .nextTerminalNode()) { if (elem.heedsTrailingWhitespace()) { return 0; } } return substring.length(); } boolean heedsTrailingWhitespace() { if (isIgnorable()) { return false; } for (int i = 0; i text.length; i++) { char c = text[i]; if (c == \n || c == \r ) { return false; } if (!Character.isWhitespace(c)) { return true; } } return true; } boolean heedsOpeningWhitespace() { if (isIgnorable()) { return false; } for (int i = text.length - 1; i = 0; i--) { char c = text[i]; if (c == \n || c == \r ) { return false; } if (!Character.isWhitespace(c)) { return true; } } return true; } boolean isIgnorable() { if (text == null || text.length == 0) { return true; } if (!isWhitespace()) { return false; } // trick here boolean atTopLevel = true; TemplateElement prevSibling = previousSibling(); TemplateElement nextSibling = nextSibling(); return ((prevSibling == null atTopLevel) || nonOutputtingType(prevSibling)) ((nextSibling == null atTopLevel) || nonOutputtingType(nextSibling)); } private boolean nonOutputtingType(TemplateElement element) { return (element instanceof Macro || element instanceof Assignment || element instanceof AssignmentInstruction || element instanceof PropertySetting || element instanceof LibraryLoad || element instanceof Comment); } private static char[] substring(char[] c, int from, int to) { char[] c2 = new char[to - from]; System.arraycopy(c, from, c2, 0, c2.length); return c2; } private static char[] substring(char[] c, int from) { return substring(c, from, c.length); } private static char[] trim(char[] c) { if (c.length == 0) { return c; } return new String(c).trim().toCharArray(); } private static char[] concat(char[] c1, char[] c2) { char[] c = new char[c1.length + c2.length]; System.arraycopy(c1, 0, c, 0, c1.length); System.arraycopy(c2, 0, c, c1.length, c2.length); return c; } boolean isWhitespace() { return text == null || trim(text).length == 0; } }
https://w.atwiki.jp/presenile/pages/1195.html
【BABYMETAL】 ■ BABYMETAL Road Of Wembley HISTORY OF BABYMETAL .