android 에선
style과 theme를 상속할 수 있다.style의 계층구조를 파악해두면 내가 상속해서 쓸때 도움이 될 것 같아서 정리해봤다.
원본은
android namespace - res/values/style.xml
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Simple;
use Data::Dump qw/dump/;
my $config = XMLin('style.xml');
my $style={};
foreach my $key (keys %{$config->{style}}) {
my @names = split /\./, $key;
my $tmp='$style->{';
$tmp .= join '}->{', @names;
$tmp.='}={}';
eval $tmp;
}
print dump($style);
해쉬 레퍼런스를 재귀적으로 연결해야 하는데 여려워잉..그래서 eval을 사용
output
{
AlertDialog => {},
Animation => {
Dialog => {},
DropDownDown => {},
InputMethod => {},
InputMethodFancy => {},
LockScreen => {},
OptionsPanel => {},
SearchBar => {},
StatusBar => {},
SubMenuPanel => {},
Toast => {},
Translucent => {},
TypingFilter => {},
TypingFilterRestore => {},
},
ButtonBar => {},
DialogWindowTitle => {},
MediaButton => { Previous => {}, Rew => {} },
Preference => { CheckBoxPreference => {}, DialogPreference => {} },
TextAppearance => {
Inverse => {},
Large => {},
Medium => { Inverse => {} },
Widget => { DropDownHint => {}, TextView => { PopupMenu => {} } },
WindowTitle => {},
},
Widget => {
AbsListView => {},
AutoCompleteTextView => {},
Button => { Small => {}, Toggle => {} },
CompoundButton => { CheckBox => {}, RadioButton => {} },
DropDownItem => { Spinner => {} },
EditText => {},
ExpandableListView => {},
Gallery => {},
HorizontalScrollView => {},
ImageButton => {},
ImageWell => {},
ListView => { DropDown => {}, Menu => {}, White => {} },
PopupWindow => {},
ProgressBar => { Horizontal => {}, Small => { Title => {} } },
RatingBar => { Small => {} },
ScrollView => {},
Spinner => {},
TabWidget => {},
TextView => { ListSeparator => { White => {} } },
WebView => {},
},
WindowTitle => {},
"WindowTitleBackground" => {},
ZoomControls => {},
요 밑에껀 theme
{
Theme => {
Black => { NoTitleBar => { Fullscreen => {} } },
Dialog => { AppError => {} },
ExpandedMenu => {},
InputMethod => {},
Light => { NoTitleBar => {}, Panel => {} },
NoDisplay => {},
NoTitleBar => { Fullscreen => {} },
Panel => {},
SearchBar => {},
Translucent => {},
},
}
@am0c, @keedi 님들의 도움으로 eval을 사용하지 않고 더 멋지게..
@am0c++, @keedi++
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dump qw/dump/;
my %styles;
while (my $line = <DATA>) {
chomp $line;
my @objects = split /\./, $line;
my $ref = \%styles;
for my $object ( @objects ) {
$ref->{$object} = {} unless $ref->{$object};
$ref = $ref->{$object};
}
}
print dump(\%styles);
__DATA__
Widget.GridView
Widget.GestureOverlayView.White
TextAppearance.DialogWindowTitle
Widget.SeekBar
Widget.QuickContactBadgeSmall.WindowSmall
Widget.RatingBar.Indicator
Animation.Activity
Animation.DropDownUp
Widget
Widget.ExpandableListView
Preference.Category
Widget.TextView.SpinnerItem
Animation.ZoomButtons
Widget.CompoundButton
TextAppearance.SearchResult.Subtitle
Widget.QuickContactBadgeSmall.WindowLarge
Widget.Button.Inset
Widget.ProgressBar.Large.Inverse
Animation
Widget.ScrollView
Widget.ProgressBar.Inverse
Widget.EditText
Widget.Button.Transparent
Widget.ListView
WindowTitleBackground
Animation.TypingFilter
Widget.TextView.PopupMenu
Widget.CompoundButton.CheckBox
Widget.ProgressBar
MediaButton.Ffwd
TextAppearance.Theme.Dialog.AppError
WindowTitle
TextAppearance.Small
TextAppearance.Large.Inverse
Animation.Toast
Animation.Dialog
MediaButton
TextAppearance.Medium.Inverse
Widget.Gallery
TextAppearance.Large
Animation.StatusBar
Widget.QuickContactBadge.WindowLarge
Widget.QuickContactBadgeSmall
Widget.ImageWell
MediaButton.Previous
Widget.ImageButton
TextAppearance.Inverse
Animation.DropDownDown
Widget.RatingBar
Widget.RatingBar.Small
ZoomControls
Preference.DialogPreference.EditTextPreference
Widget.TextView.ListSeparator.White
Animation.LockScreen
Animation.Wallpaper
Animation.Translucent
Widget.DropDownItem.Spinner
Animation.OptionsPanel
Widget.CompoundButton.RadioButton
Animation.RecentApplications
MediaButton.Rew
TextAppearance.Widget.TextView.PopupMenu
Widget.CompoundButton.Star
Preference.RingtonePreference
TextAppearance.Widget.TextView.SpinnerItem
Widget.KeyboardView
MediaButton.Play
AlertDialog
TextAppearance.StatusBarTitle
TextAppearance.Theme.Dialog
MediaButton.Pause
Widget.ProgressBar.Small
Widget.AutoCompleteTextView
TextAppearance.Widget.IconMenu.Item
Widget.Button
Preference.PreferenceScreen
TextAppearance.Widget.EditText
Widget.ProgressBar.Large
Widget.Spinner
TextAppearance.Widget.TabWidget
Widget.Button.Small
Widget.AbsListView
TextAppearance.Medium
TextAppearance.Theme
Preference.Information
Widget.ProgressBar.Small.Inverse
Widget.TabWidget
TextAppearance.Widget.DropDownItem
TextAppearance.SearchResult
Animation.InputMethod
Widget.DropDownItem
Animation.InputMethodFancy
DialogWindowTitle
Widget.TextView
Widget.TextView.ListSeparator
Preference.DialogPreference.YesNoPreference
MediaButton.Next
Widget.HorizontalScrollView
Widget.ListView.White
Widget.QuickContactBadge.WindowSmall
TextAppearance.Small.Inverse
TextAppearance
Widget.QuickContactBadge
Preference
Animation.SlidingCard
TextAppearance.SearchResult.Title
TextAppearance.Widget.Button
Widget.QuickContactBadge.WindowMedium
Widget.Button.Toggle
Animation.TypingFilterRestore
Widget.PopupWindow
TextAppearance.Widget.TextView
Widget.ListView.Menu
Animation.SearchBar
Widget.ProgressBar.Small.Title
TextAppearance.Widget
ButtonBar
Widget.QuickContactBadgeSmall.WindowMedium
Widget.GestureOverlayView
Widget.WebView
TextAppearance.Widget.DropDownHint
TextAppearance.SlidingTabActive
Preference.CheckBoxPreference
Widget.ListView.DropDown
Preference.DialogPreference
Animation.SubMenuPanel
Widget.ProgressBar.Horizontal
TextAppearance.WindowTitle
TextAppearance.SlidingTabNormal